/** JMGalleryWrap - JoomlaMarket's Image Gallery
* Version: 1.0
* Author: Jens Rieks 
* Copyright (C) 2008 Jaser Bratzadeh / JoomlaMarket. All rights reserved.
*/
Element.Events.extend({'wheelup':{type:Element.Events.mousewheel.type,map:function(event){event=new Event(event);if(event.wheel>=0)this.fireEvent('wheelup',event)}},'wheeldown':{type:Element.Events.mousewheel.type,map:function(event){event=new Event(event);if(event.wheel<=0)this.fireEvent('wheeldown',event)}}});if(!Fx.JM){Fx.JM={}}var ImageLoader;if(1){var urls=[];ImageLoader=function ImageLoader(img,src,okay,failed){if(!img){failed();return}var status=urls[src];img.onload=null;img.onerror=null;if(status==1){(function ImageLoader_A(){img.src=src;okay.delay(10)}).delay(10)}else if(status==2){failed.delay(10)}else{urls[src]=0;img.onload=function ImageLoader_B(){urls[src]=1;okay.delay(10)};img.onerror=function ImageLoader_C(){urls[src]=2;failed.delay(10)};(function ImageLoader_D(){img.src=src;if(window.opera&&img.complete){urls[src]=1;okay.delay(10)}}).delay(10)}}}var GalleryEffect=new Class({initialize:function(opt){this.img0=opt['img0'];this.img1=opt['img1'];this.src0=this.img0.src;this.src1=opt['src'];this.step=-1;this.waitWithNextStep=new Object();this.setIsLoading=opt['setIsLoading']},start:function(){this.step=0;this.runStep()},running:function(){return this.step!=-1},runStep:function(){var step=++this.step;var fn=this["step"+step];if(!fn){this.step=-1;this.fireEvent("onStop");return}var ret=fn.apply(this);if(ret==this.waitWithNextStep){return}if(ret&&ret.chain){var self=this;ret.chain(function(){self.runStep()});return}this.runStep.delay(1,this)},setImageSource:function(img,src){var self=this;self.setIsLoading(true);ImageLoader(img,src,function(){self.setIsLoading(false);self.runStep()},function(){self.setIsLoading(false);alert('load image failed: src='+src);self.runStep()});return self.waitWithNextStep}});GalleryEffect.implement(new Events);var GallerySlider=GalleryEffect.extend({initialize:function(opt){this.parent(opt);var trans;switch(opt['mode']){case 0:trans=Fx.Transitions.linear;break;case 1:trans=Fx.Transitions.Circ.easeIn;break;case 2:trans=Fx.Transitions.Circ.easeOut;break;default:trans=Fx.Transitions.Circ.easeInOut;break}this.fx0=new Fx.Scroll(opt['area'],{duration:1,transition:trans,wheelStops:false,wait:false});this.fx1=new Fx.Scroll(opt['area'],{duration:1000,transition:trans,wheelStops:false,wait:false})},toElement:function(fast,first){var fx=fast?this.fx0:this.fx1;var elem=first==0?this.img0:this.img1;return fx.toElement(elem)}});var FXO;if(window.ie){FXO=Fx.Style.extend({initialize:function(el,opts){this.parent(el,'opacity',opts)}})}else{FXO=Fx.Base.extend({initialize:function(el,opts){this.el=el;this.style=el.style;this.parent(opts)},increase:function(){this.style.opacity=this.now}})}(function(){var instance=[];var effect=[];function thumbnailSetup(img,gallery){var i=img.attributes['jm_i'].nodeValue;var x=img.attributes['jm_x'].nodeValue;var y=img.attributes['jm_y'].nodeValue;var id=img.attributes['id'].nodeValue;var fx=new FXO(img,{duration:250,wheelStops:false,wait:false});var cur=null;img.jmHighlight=function(h){var a=0.50;var b=0.99;var val=(h||gallery.mouseAt==i);if(cur!=val){cur=val;if(cur){fx.start(a,b)}else{fx.start(b,a)}}};img.updateThumb=function(){img.jmHighlight(gallery.cur==i)};img.addEvents({'mouseenter':function(){gallery.mouseAt=i;img.jmHighlight(true)},'mouseleave':function(){gallery.mouseAt=-1;img.updateThumb()},'click':function(){gallery.selectImage(i,x,y)}});img.fireEvent('mouseleave')}function _attr(node,name){if(node){var attrs=node.attributes;if(attrs){var attr=attrs[name];if(attr){return attr.nodeValue}}}return undefined}Fx.JM.Gallery=new Class({initialize:function(options){var self=this;var id=options['id'];var fx=options['fx'];instance[id]=this;this.options=options;this.allImages=options['images'];this.tx=0;this.ty=0;this.txe=1;this.tye=3;this.fxChain=new Chain();this.id=id;this.img0=$E("#"+id+"-img0");this.img1=$E("#"+id+"-img1");this.loading=$E("#"+id+"-loading");this.isLoading(false);this.cur=0;this.setEffect(fx);this.thumbsDivName=id+"-thumbnails";this.thumbsDiv=$(this.thumbsDivName);this.thumbsFx=new Fx.Scroll(this.thumbsDivName,{duration:250,wheelStops:false,wait:false});if(this.options["sliderType"]!=0){$(this.id).addEvents({'wheelup':function(e){self.scrollDelta(+1);e.stop()},'wheeldown':function(e){self.scrollDelta(-1);e.stop()}})}this.images=$$("#"+id+" img.jmThumbnail");this.images.each(function(x){thumbnailSetup(x,self)});$$("#"+id+" .slider").each(function(slider){slider.addEvent('click',function(){var d=_attr(this,'jm_d');if(!d)d=0;d*=1;self.scrollDelta(d)})});this.thumbOffsetTop=this.image(0).offsetTop;return this},image:function(ix){var ret=null;this.images.each(function(img){if(ret==null){var i=_attr(img,"jm_i");if(i==ix){ret=img}}});return ret},imagesInRow:function(row){var ret=[];this.images.each(function(img){var y=_attr(img,"jm_y");if(y==row){ret.push(img)}});return ret},currentImage:function(){var img=this.image(this.cur);var i=_attr(img,'jm_i');if(this.cur!=i){alert("error in currentImage:"+this.cur+"!="+i)}return img},curX:function(){var img=this.currentImage();return _attr(img,'jm_x')*1},curY:function(){var img=this.currentImage();return _attr(img,'jm_y')*1},xy2i:function(x,y){var ret=null;this.images.each(function(img){if(!ret){var ix=_attr(img,'jm_x');var iy=_attr(img,'jm_y');if(ix==x&&iy==y){ret=img}}});return _attr(ret,"jm_i")},startNextFX:function(){var nextFx=this.nextFx;if(!nextFx){return}this.fxChain.clearChain();this._fx=null;this.nextFx=null;nextFx()},fxRunning:function(){if(this._fx&&this._fx.running()){return true}return false},fx:function(src,name,mode){var self=this;var fn=effect[name];if(!fn){alert("no such effect:"+name);return null}if(this.fxRunning()){return false}this._fx=new fn({area:this.id+"-area",img0:this.img0,img1:this.img1,src:src,mode:mode,setIsLoading:function(loading){self.isLoading(loading)}});this._fx.addEvent("onStop",function(){this._fx=null;self.startNextFX()});this._fx.start();return this._fx},isLoading:function(loading){if(loading){this.loading.style.visibility="visible"}else{this.loading.style.visibility="hidden"}},source:function(ix){var img=this.images[ix];if(!img){return null}return _attr(img,'src')},setEffect:function(effect){this._effect=this.selectImageMethod[effect]},getEffect:function(){return this._effect},scrollDelta:function(delta){var st=this.options["sliderType"];if(!st){return}var fx=this.thumbsFx;var div=this.thumbsDiv;if(st==1){var l=div.scrollLeft;var w=this.options["thumbWidth"];l/=w;l=Math.round(l)+delta;l*=w;fx.scrollTo(l,false)}else{var t=div.scrollTop;var h=this.options["thumbHeight"];t/=h;t=Math.round(t)+delta;t*=h;fx.scrollTo(false,t)}},scrollTo:function(tx,ty){var self=this;var cx=this.curX();var cy=this.curY();if(this.xy2i(tx,ty)==undefined){var dx=tx-cx;var dy=ty-cy;return}else{this._scrollTo(cx,cy,tx,ty)}},_scrollTo:function(cx,cy,tx,ty){var steps=Math.abs(tx-cx)+Math.abs(ty-cy);var steps0=steps;while(cx<tx){this.addStep("right",this.xy2i(++cx,cy),steps--,steps0)}while(cy<ty){this.addStep("down",this.xy2i(cx,++cy),steps--,steps0)}while(cx>tx){this.addStep("left",this.xy2i(--cx,cy),steps--,steps0)}while(cy>ty){this.addStep("up",this.xy2i(cx,--cy),steps--,steps0)}this.fxChain.callChain();this.mouseAt=this.xy2i(tx,ty);this.updateHighlightedThumbnails()},selectImage:function(i,x,y){var fx=this._effect;var self=this;var fn=function(){fx.apply(self,[i,x,y])};if(this.fxRunning()){this.nextFx=fn}else{fn()}},addStep:function(effect,ix,curStep,totalSteps){if(!ix){return}var mode=(curStep==totalSteps?1:0)+(curStep==1?2:0);var self=this;this.fxChain.chain(function(){self.setHighlightedThumbnails(self.cur,ix);var fx=self.fx(self.source(ix),effect,mode);if(fx==false){self.startNextFX()}else{fx.addEvent("onStop",function(){self.cur=ix;self.setHighlightedThumbnails(ix);self.fxChain.callChain()})}})},selectImageMethod:{fade:function(i,x,y){this.addStep("fade",i,1,1);this.fxChain.callChain()},outin:function(i,x,y){this.addStep("outin",i,1,1);this.fxChain.callChain()},scroll:function(i,x,y){this.scrollTo(x,y)}},setHighlightedThumbnails:function(ix1,ix2){var src1=this.source(ix1);var src2=this.source(ix2);this.tumb1src=src1;this.tumb2src=src2;this.images.each(function(img){img.jmHighlight(img.src==src1||img.src==src2)})},updateHighlightedThumbnails:function(){this.images.each(function(img){img.updateThumb()})}});Fx.JM.Gallery.get=function(id){return instance[id]};Fx.JM.Gallery.effect=effect})();Fx.JM.Gallery.effect["down"]=GallerySlider.extend({step1:function(){return this.toElement(true,0)},step2:function(){return this.setImageSource(this.img1,this.src1)},step3:function(){return this.toElement(false,1)},step4:function(){return this.setImageSource(this.img0,this.src1)},step5:function(){return this.toElement(true,0)}});Fx.JM.Gallery.effect["up"]=GallerySlider.extend({step1:function(){return this.toElement(true,1)},step2:function(){return this.setImageSource(this.img0,this.src1)},step3:function(){return this.toElement(false,0)},step4:function(){return this.setImageSource(this.img1,this.src1)}});Fx.JM.Gallery.effect["right"]=GallerySlider.extend({step1:function(){this.img0.style.cssFloat='left';return this.toElement(true,0)},step2:function(){return this.setImageSource(this.img1,this.src1)},step3:function(){return this.toElement(false,1)},step4:function(){return this.setImageSource(this.img0,this.src1)},step5:function(){return this.toElement(true,0)},step6:function(){this.img0.style.cssFloat=''}});Fx.JM.Gallery.effect["left"]=GallerySlider.extend({step1:function(){this.img0.style.cssFloat='left'},step2:function(){return this.toElement(true,1)},step3:function(){return this.setImageSource(this.img0,this.src1)},step4:function(){return this.toElement(false,0)},step5:function(){return this.setImageSource(this.img1,this.src1)},step6:function(){this.img0.style.cssFloat=''}});Fx.JM.Gallery.effect["fade"]=GalleryEffect.extend({initialize:function(opt){this.parent(opt);this.fx=new FXO(opt['img1'],{wheelStops:false,wait:false,transition:Fx.Transitions.Circ.easeOut})},step1:function(){this.p0=this.img0.style.position;this.p1=this.img1.style.position;this.img0.style.zIndex=1;this.img1.style.zIndex=2;this.img0.style.position="absolute";this.img1.style.position="absolute";return this.setImageSource(this.img0,this.src1)},step2:function(){this.fx.duration=750;return this.fx.start(1,0)},step3:function(){return this.setImageSource(this.img1,this.src1)},step4:function(){this.img0.style.position=this.p0;this.img1.style.position=this.p1},step5:function(){this.fx.duration=0;return this.fx.start(0,1)}});Fx.JM.Gallery.effect["outin"]=GalleryEffect.extend({initialize:function(opt){this.parent(opt);this.fx=new FXO(opt['img0'],{duration:375,wheelStops:false,wait:false})},step1:function(){this.vis=this.img1.style.visibility;this.img1.style.visibility="hidden";this.fx.transition=Fx.Transitions.Circ.easeOut;return this.fx.start(1,0)},step2:function(){return this.setImageSource(this.img0,this.src1)},step3:function(){return this.setImageSource(this.img1,this.src1)},step4:function(){this.fx.transition=Fx.Transitions.Circ.easeIn;return this.fx.start(0,1)},step5:function(){this.img1.style.visibility=this.vis}});
