/*

   Vimeo video and photo gallery viewer widget by Ricardo Sanz.
   (c) Ricardo Sanz.
   MIT-style license.
   Heavily based on Slimbox v1.63 by Christophe Beyls
	(c) 2007-2008 Christophe Beyls <http://www.digitalia.be>
	MIT-style license.

   Feel free to use, modify or distribute this code as long as this advice
   is kept.

   Ask for the uncompressed code if you want it.
*/
var VisorCUE=new Class({Implements:Options,options:{loop:true,bgPanelOpacity:0.7,resizeTransition:false,resizeDuration:400,initialWidth:150,initialHeight:150,imgFitToScreen:true,allowResize:true,twoStepsResizing:false,showCounter:true,counterText:"Image {x} of {y}.",errorMsg:"Error loading image.",video:false,imgTooBigWarning:"This image is bigger than actual window size so you will not see it complete and you may get web page render errors. Would you like to switch to Fit-To-Screen mode?",fitMsg:"Fit to screen",realSzMsg:"Real size",nextMsg:"Next image",prevMsg:"Previous image",closeMsg:"Close viewer",dlMsg:"Download all images",hideScrolls:null,rutaZip:null,dbg:false},initialize:function(A){this.setOptions(A);this.initialOptions=$H(this.options);this.bgPanel,this.hold,this.info,this.nextBt,this.prevBt,this.closeBt,this.zipBt,this.caption,this.number,this.plImg,this.plPrevImg=new Image(),this.plNextImg=new Image(),this.imgDSize={},this.isInfoVisible,this.startImg,this.elementsStyle={};$(document.body).adopt($$([this.bgPanel=new Element("div",{id:"vBgPanel"}),this.hold=new Element("div",{id:"vHold"}).grab(this.imgPanel=new Element("div",{id:"vImgPanel"})),this.info=new Element("div",{id:"vInfo"}).adopt(this.prevBt=new Element("a",{id:"vPrevBt",href:"#",title:this.options.prevMsg}).addEvent("click",this.previous.bindWithEvent(this)),this.nextBt=new Element("a",{id:"vNextBt",href:"#",title:this.options.nextMsg}).addEvent("click",this.next.bindWithEvent(this)),new Element("div",{styles:{clear:"both"}}),this.caption=new Element("div",{id:"vCaption",html:"[Caption]"}),this.closeBt=new Element("a",{id:"vCloseBt",href:"#",title:this.options.closeMsg}).addEvent("click",this.close.bindWithEvent(this)),this.fitBt=new Element("a",{id:"vFitBt",href:"#"}).addEvent("click",this.toggleSize.bindWithEvent(this)),this.zipBt=new Element("a",{id:"vZipBt",href:"#",title:this.options.dlMsg}),this.number=new Element("div",{id:"vNumber",html:"[Number]"}))]).setStyle("visibility","hidden"));this.positionBounded=this.position.bind(this);this.keyDownBounded=this.keyDown.bind(this);$$(this.fitBt,this.prevBt,this.nextBt,this.zipBt).setStyle("visibility","hidden");this.bgPanel.addEvent("click",this.close.bindWithEvent(this));this.fx={bgPanel:new Fx.Tween(this.bgPanel,{property:"opacity",duration:500}).set(0),hold:new Fx.Tween(this.hold,{property:"opacity",duration:500}),imgPanel:new Fx.Tween(this.imgPanel,{property:"opacity",duration:150,onComplete:this.checkState.bindWithEvent(this)}).set(0),marginInfo:new Fx.Tween(this.info,{property:"marginTop",duration:500,onComplete:this.checkState.bindWithEvent(this)})}},open:function(A,B){this.setOptions(this.initialOptions.getClean()).setOptions(B);if(!$defined(A)||A.length==0){return }this.setup(true);this.hold.setStyle("background-image","url(lib/css/loading.gif)");this.images=A;this.startImg=0;this.actualImg=-1;this.nextImg=-1;this.prevImg=-1;this.transition=this.options.resizeTransition?{transition:this.options.resizeTransition}:{};this.options.loop=this.options.loop&&(this.images.length>1);this.calculateVPosition();this.bgPanel.setStyles({top:this.winScroll,height:this.bgPanelHeight});this.info.setStyle("top",this.infoTop);this.hold.setStyles({top:this.winScroll+this.margin,width:this.options.initialWidth,height:this.options.initialHeight,marginLeft:-this.options.initialWidth/2,visibility:""});this.fx.resize=new Fx.Morph(this.hold,$extend({duration:this.options.resizeDuration,onComplete:this.checkState.bindWithEvent(this)},this.transition));this.fx.info=new Fx.Morph(this.info,$extend({duration:this.options.resizeDuration,link:"chain"},this.transition));this.fx.bgPanel.start(this.options.bgPanelOpacity);if(this.options.rutaZip){this.zipBt.set("href",this.options.rutaZip)}this.changeImage(this.startImg)},checkState:function(){switch(this.state){case 1:if(this.options.video){this.imgDSize.x=506;this.imgDSize.y=406}else{this.plImg=$(this.plImg);var B=this.plImg.width/this.plImg.height;var A=window.getSize();if(this.options.imgFitToScreen){this.imgDSize=this.dimensions(B,(A.x)*0.9,(A.y-this.margin*3-this.info.offsetHeight));$(this.plImg).setStyles({width:"100%",height:"100%"})}else{this.imgDSize.x=this.plImg.width;this.imgDSize.y=this.plImg.height;if((this.plImg.width>A.x-30)||(this.plImg.height>A.y-this.margin-this.info.offsetHeight-20)){if(confirm(this.options.imgTooBigWarning)){this.toggleSize();return }}}}this.calculateVPosition();this.state=this.options.twoStepsResizing?2:4;this.resizeHold();break;case 2:this.state=3;this.resizeHold();break;case 3:this.state=5;this.checkState();break;case 4:this.state=5;this.checkState();break;case 5:if(this.options.video){this.imgPanel.empty().grab(this.videoObj)}else{this.imgPanel.empty().grab(this.plImg).setStyles({width:this.hold.getSize().x-20,height:this.hold.getSize().y-20});this.plImg=null}this.state=this.isInfoVisible?7:6;this.fx.imgPanel.start(1);break;case 6:this.info.setStyles({top:this.infoTop,width:this.hold.getStyle("width"),marginLeft:this.hold.getStyle("marginLeft"),marginTop:-this.info.offsetHeight,visibility:"visible"});this.isInfoVisible=true;this.checkButtons();this.setResizeBt();this.state=7;this.fx.marginInfo.start(0);break;case 7:this.checkButtons();$$(this.caption,this.number).setStyle("visibility","visible");this.allowChangeImage=true;break;case 8:if(!--this.fxIgnores){$$(this.nextBt,this.prevBt,this.fitBt,this.zipBt,this.caption,this.number,this.hold,this.info).setStyle("visibility","hidden");this.isInfoVisible=false;this.bgPanel.setStyle("display","none");this.imgPanel.empty();this.setup(false)}break;default:this.close()}},checkButtons:function(){this.prevBt.setStyle("visibility",(this.prevImg>=0)?"visible":"hidden");this.nextBt.setStyle("visibility",(this.nextImg>=0)?"visible":"hidden");this.fitBt.setStyle("visibility","visible");this.zipBt.setStyle("visibility",(this.options.rutaZip)?"visible":"hidden")},calculateVPosition:function(){this.winScroll=window.getScrollTop();this.bgPanelTop=this.winScroll;this.bgPanelHeight=window.getHeight();this.margin=this.bgPanelHeight/33;this.infoTop=this.bgPanelTop+this.bgPanelHeight-this.margin-this.info.offsetHeight;this.holdTop=this.infoTop-this.imgDSize.y-20},position:function(){this.calculateVPosition();this.bgPanel.setStyle("top",this.bgPanelTop);this.info.setStyle("top",this.infoTop);this.hold.setStyle("top",this.holdTop)},resizeHold:function(){switch(this.state){case 2:this.fx.resize.start({width:this.imgDSize.x,marginLeft:-this.imgDSize.x/2});this.fx.info.start({width:this.imgDSize.x,marginLeft:-this.imgDSize.x/2});break;case 3:this.fx.resize.start({height:this.imgDSize.y,top:this.holdTop});this.fx.info.start({top:this.infoTop});break;case 4:this.fx.resize.start({width:this.imgDSize.x,marginLeft:-this.imgDSize.x/2,height:this.imgDSize.y,top:this.holdTop});this.fx.info.start({width:this.imgDSize.x,marginLeft:-this.imgDSize.x/2,top:this.infoTop});break;default:}},previous:function(){this.changeImage(this.prevImg);return false},next:function(){this.changeImage(this.nextImg);return false},changeImage:function(A){this.state=1;this.allowChangeImage=false;$$(this.prevBt,this.nextBt,this.fitBt,this.zipBt,this.caption,this.number).setStyle("visibility","hidden");this.hold.setStyle("background-image","url(lib/css/loading.gif)");this.imgPanel.setStyle("opacity","0");this.actualImg=A;this.prevImg=((this.actualImg||!this.options.loop)?this.actualImg:this.images.length)-1;this.nextImg=this.actualImg+1;if(this.nextImg==this.images.length){this.nextImg=this.options.loop?0:-1}this.caption.set("html",this.images[this.actualImg][1]||"");this.number.set("html",(this.options.showCounter&&(this.images.length>1))?this.options.counterText.replace(/{x}/,this.actualImg+1).replace(/{y}/,this.images.length):"");if(!this.options.video){if(this.prevImg>=0){this.plPrevImg.src=this.images[this.prevImg][0]}if(this.nextImg>=0){this.plNextImg.src=this.images[this.nextImg][0]}this.plImg=new Image();this.plImg.onload=this.checkState.bindWithEvent(this);this.plImg.onerror=this.errorLoadingImg.bindWithEvent(this);this.plImg.src=this.images[this.actualImg][0]}else{this.videoObj=$(new Swiff("http://www.vimeo.com/moogaloop.swf?clip_id="+this.images[this.actualImg][0]+"&server=www.vimeo.com&fullscreen=1&show_title=0&show_byline=0&show_portrait=0&color=FE00000",{id:"video",width:506,height:406}));var E=new Element("param",{name:"quality",value:"best"}),D=new Element("param",{name:"allowfullscreen",value:"true"}),C=new Element("param",{name:"scale",value:"showAll"}),B=new Element("param",{name:"movie",value:"http://www.vimeo.com/moogaloop.swf?clip_id="+this.images[this.actualImg][0]+"&server=www.vimeo.com&fullscreen=1&show_title=0&show_byline=0&show_portrait=0&color=FE0000"});if(Browser.Engine.gecko==true){this.videoObj.getChildren().dispose()}E.inject(this.videoObj);D.inject(this.videoObj);C.inject(this.videoObj);B.inject(this.videoObj);this.checkState()}},errorLoadingImg:function(){this.hold.setStyle("background-image","none");this.imgPanel.set("html",'<div id="vErrorMsg">'+this.options.errorMsg+"</div>");this.state=7;$("vErrorMsg").setStyle("marginTop",this.hold.offsetHeight/2);this.fx.imgPanel.start(1)},close:function(){this.hold.setStyle("background-image","none");this.state=8;this.fxIgnores=2;this.fx.imgPanel.start(0);this.fx.marginInfo.start(-this.info.offsetHeight);this.fx.bgPanel.start(0);return false},dimensions:function(A,D,C){var B=[];if(A>1){B.x=D;B.y=B.x/A;if(B.y>C){B.y=C;B.x=A*B.y}}else{B.y=C;B.x=A*B.y}return B},toggleSize:function(){this.options.imgFitToScreen=!this.options.imgFitToScreen;this.setResizeBt();this.changeImage(this.actualImg);return false},setResizeBt:function(){if(this.options.allowResize&&this.isInfoVisible&&!this.options.video){if(this.options.imgFitToScreen){this.fitBt.setStyles({visibility:"visible",backgroundImage:"url(lib/css/fit.png)"});this.fitBt.set("title",this.options.fitMsg)}else{this.fitBt.setStyles({visibility:"visible",backgroundImage:"url(lib/css/real.png)"});this.fitBt.set("title",this.options.realSzMsg)}}else{this.fitBt.setStyle("visibility","hidden")}},setup:function(A){if(Browser.Platform.mac){$$(this.options.hideScrolls).setStyle("overflow",A?"hidden":"auto")}["object",window.ie?"select":"embed"].forEach(function(C){Array.forEach(document.getElementsByTagName(C),function(D){if(A){this.elementsStyle[D]=D.style.visibility}D.style.visibility=A?"hidden":this.elementsStyle[D]})});this.bgPanel.setStyle("display",A?"":"none");var B=A?"addEvent":"removeEvent";window[B]("scroll",this.positionBounded);window[B]("resize",this.positionBounded);document[B]("keydown",this.keyDownBounded)},keyDown:function(A){switch(A.code){case 27:case 88:case 67:this.close();break;case 37:case 80:case 65:if(this.allowChangeImage){this.previous()}break;case 39:case 78:case 83:if(this.allowChangeImage){this.next()}}},prepare:function(C,A,E,B){E=E||function(F){return[F.href,F.title]};B=B||function(F){return true};var D=this;C.removeEvent("click").addEvent("click",function(){var F=C.filter(B,this);D.open(F.map(E),A);return false})}});
