
Web.Gallery=Class.create(Web,{initialize:function(options){this.options=options;this.itemsContainer=$(this.options.itemsContainerId);this.itemsUl=$(this.options.itemsUl);this.fullsizeImg=$(this.options.fullsizeImg);this.fullsizeImgLoader=$(this.options.fullsizeImgLoader);this.buttonPrev=$(this.options.buttonPrev);this.buttonNext=$(this.options.buttonNext);this.scrollTime=0.3;this.leftIndex=0;this.items=this.itemsUl.select('li');this.itemWidth=this.options.itemWidth;this.maxOffset=((this.options.itemsVisible*this.itemWidth)-(this.items.length*this.itemWidth));this.bound={itemOnClick:this.itemOnClick.bindAsEventListener(this),btnOnClick:this.btnOnClick.bindAsEventListener(this),imgOnLoad:this.imgOnLoad.bindAsEventListener(this),showImgLoader:this.showImgLoader.bind(this)}
this.itemsUl.setStyle({left:0});this.setFullsizeImage(this.items.first().down('a').href);this.addEvents();this.updateButtons();},addEvents:function(){this.items.invoke('observe','click',this.bound.itemOnClick);if(this.items.length>3){this.buttonPrev.observe('click',this.bound.btnOnClick);this.buttonNext.observe('click',this.bound.btnOnClick);}else{this.buttonPrev.hide();this.buttonNext.hide();}
this.fullsizeImg.observe('load',this.bound.imgOnLoad);},itemOnClick:function(e){e.stop();var eventElement=Event.findElement(e,'li');var imageUrl=eventElement.down('a').href;if(imageUrl!=this.fullsizeImg.src){this.imgLoaderTimer=setTimeout(this.bound.showImgLoader,250);this.setFullsizeImage(imageUrl);}
this.setActiveImg(eventElement);},getActiveItemPosition:function(item){return this.items.indexOf(item);},imgOnLoad:function(){this.hideImgLoader();},setActiveImg:function(item){this.items.invoke('removeClassName',this.options.itemActiveClass);item.addClassName(this.options.itemActiveClass);},setFullsizeImage:function(url){this.fullsizeImg.src=url;},showImgLoader:function(){this.fullsizeImg.setOpacity(0.7);this.fullsizeImgLoader.show();},hideImgLoader:function(){this.fullsizeImg.setOpacity(1);this.fullsizeImgLoader.hide();if(this.imgLoaderTimer){clearInterval(this.imgLoaderTimer);}},btnOnClick:function(e){e.stop();var eventElement=Event.findElement(e,'.'+this.options.buttonClass);switch(eventElement)
{case this.buttonPrev:if(!this.buttonPrev.hasClassName(this.options.buttonPrevDisabledClass)){this.scroll(-1);}
break;case this.buttonNext:if(!this.buttonNext.hasClassName(this.options.buttonNextDisabledClass)){this.scroll(1);}
break;default:throw('DalenError: Ani jedno z tlačítek nebylo zmáčknuto, přesto došlo k akci');}},scroll:function(direction){if(this.animating){return;}else{var position=this.getOffset(direction);new Effect.Morph(this.itemsUl,{style:'left:'+position+'px',duration:this.scrollTime,beforeStart:this.beforeScrollStart.bind(this),afterFinish:this.afterScrollFinish.bind(this)});}},beforeScrollStart:function(){this.animating=true;},afterScrollFinish:function(){this.updateButtons();this.animating=false;},getOffset:function(direction){var currentOffset=parseInt(this.itemsUl.getStyle('left'),10);var newOffset=currentOffset+this.itemWidth*(direction*-1);this.leftIndex=Math.abs(currentOffset/this.itemWidth);if(-1===direction){if(newOffset<=0){return newOffset;}else{return false;}}
if(1===direction){if(newOffset>=this.maxOffset){return newOffset}else{return false;}}},updateButtons:function(){var prev=this.getOffset(-1),next=this.getOffset(1);if(false===prev){this.buttonPrev.addClassName(this.options.buttonPrevDisabledClass);}else{this.buttonPrev.removeClassName(this.options.buttonPrevDisabledClass);}
if(false===next){this.buttonNext.addClassName(this.options.buttonNextDisabledClass);}else{this.buttonNext.removeClassName(this.options.buttonNextDisabledClass);}}});
