var $removeEvents=function(object,type)
{if(!object.events)return object;if(type){if(!object.events[type])return object;for(var fn in object.events[type])object.removeEvent(type,fn);object.events[type]=null;}else{for(var evType in object.events)object.removeEvents(evType);object.events=null;}
return object;};var gallery=new Class({initialize:function(element,options){this.setOptions({showArrows:true,showCarousel:true,showInfopane:true,thumbHeight:75,thumbWidth:100,thumbSpacing:10,embedLinks:true,fadeDuration:500,timed:false,delay:9000,preloader:true,manualData:[],populateData:true,elementSelector:"div.imageElement",titleSelector:"h3",subtitleSelector:"p",linkSelector:"a.open",imageSelector:"img.full",thumbnailSelector:"img.thumbnail",slideInfoZoneOpacity:0.85,carouselMinimizedOpacity:0.4,carouselMinimizedHeight:20,carouselMaximizedOpacity:0.7,destroyAfterPopulate:true,baseClass:'jdGallery',withArrowsClass:'withArrows',textShowCarousel:'Pictures',useThumbGenerator:false,thumbGenerator:'resizer.php'},options);this.fireEvent('onInit');this.currentIter=0;this.lastIter=0;this.maxIter=0;this.galleryElement=element;this.galleryData=this.options.manualData;this.galleryInit=1;this.galleryElements=Array();this.thumbnailElements=Array();this.galleryElement.addClass(this.options.baseClass);if(this.options.populateData)
this.populateData();element.style.display="block";if(this.options.embedLinks)
{this.currentLink=new Element('a').addClass('open').setProperties({href:'#',title:''}).injectInside(element);if((!this.options.showArrows)&&(!this.options.showCarousel))
this.galleryElement=element=this.currentLink;else
this.currentLink.setStyle('display','none');}
this.constructElements();if((data.length>1)&&(this.options.showArrows))
{var leftArrow=new Element('a').addClass('left').addEvent('click',this.prevItem.bind(this)).injectInside(element);var rightArrow=new Element('a').addClass('right').addEvent('click',this.nextItem.bind(this)).injectInside(element);this.galleryElement.addClass(this.options.withArrowsClass);}
this.loadingElement=new Element('div').addClass('loadingElement').injectInside(element);if(this.options.showInfopane)this.initInfoSlideshow();if(this.options.showCarousel)this.initCarousel();this.doSlideShow(1);},populateData:function(){currentArrayPlace=this.galleryData.length;options=this.options;data=this.galleryData;this.galleryElement.getElements(options.elementSelector).each(function(el){elementDict={image:el.getElement(options.imageSelector).getProperty('src'),number:currentArrayPlace};if((options.showInfopane)|(options.showCarousel))
Object.extend(elementDict,{title:el.getElement(options.titleSelector).innerHTML,description:el.getElement(options.subtitleSelector).innerHTML});if(options.embedLinks)
Object.extend(elementDict,{link:el.getElement(options.linkSelector).href||false,linkTitle:el.getElement(options.linkSelector).title||false});if((!options.useThumbGenerator)&&(options.showCarousel))
Object.extend(elementDict,{thumbnail:el.getElement(options.thumbnailSelector).src});else if(options.useThumbGenerator)
Object.extend(elementDict,{thumbnail:'resizer.php?imgfile='+elementDict.image+'&max_width='+options.thumbWidth+'&max_height='+options.thumbHeight});data[currentArrayPlace]=elementDict;currentArrayPlace++;if(this.options.destroyAfterPopulate)
el.remove();});this.galleryData=data;this.fireEvent('onPopulated');},constructElements:function(){el=this.galleryElement;this.maxIter=this.galleryData.length;var currentImg;for(i=0;i<this.galleryData.length;i++)
{var currentImg=new Fx.Style(new Element('div').addClass('slideElement').setStyles({'position':'absolute','left':'0px','right':'0px','margin':'0px','padding':'0px','backgroundPosition':"center center",'opacity':'0'}).injectInside(el),'opacity',{duration:this.options.fadeDuration});this.galleryElements[parseInt(i)]=currentImg;}
this.preloadImage(0);},destroySlideShow:function(element){var myClassName=element.className;var newElement=new Element('div').addClass('myClassName');element.parentNode.replaceChild(newElement,element);},startSlideShow:function(){this.fireEvent('onStart');this.loadingElement.style.display="none";this.lastIter=this.maxIter-1;this.currentIter=0;this.galleryInit=0;this.galleryElements[parseInt(this.currentIter)].set(1);if(this.options.showInfopane)
this.showInfoSlideShow.delay(1000,this);this.prepareTimer();if(this.options.embedLinks)
this.makeLink(this.currentIter);},nextItem:function(){this.fireEvent('onNextCalled');this.nextIter=this.currentIter+1;if(this.nextIter>=this.maxIter)
this.nextIter=0;this.galleryInit=0;this.preloadImage(this.nextIter-1);this.preloadImage(this.nextIter);this.preloadImage(this.nextIter+1);this.goTo(this.nextIter);},prevItem:function(){this.fireEvent('onPreviousCalled');this.nextIter=this.currentIter-1;if(this.nextIter<=-1)
this.nextIter=this.maxIter-1;this.galleryInit=0;this.preloadImage(this.nextIter-1);this.preloadImage(this.nextIter);this.preloadImage(this.nextIter+1);this.goTo(this.nextIter);},preloadImage:function(num){if(!this.galleryElements[num])return;var e=this.galleryElements[num].element;if(!e.style.backgroundImage){e.style.backgroundImage="url('"+this.galleryData[num].image+"')";}},goTo:function(num){this.clearTimer();this.preloadImage(num-1);this.preloadImage(num);this.preloadImage(num+1);if(this.options.embedLinks)
this.clearLink();if(this.options.showInfopane)
{this.slideInfoZone.clearChain();this.hideInfoSlideShow().chain(this.changeItem.pass(num,this));}else
this.changeItem.delay(500,this,num);if(this.options.embedLinks)
this.makeLink(num);this.prepareTimer();},changeItem:function(num){this.fireEvent('onStartChanging');this.galleryInit=0;if(this.currentIter!=num)
{for(i=0;i<this.maxIter;i++)
{if((i!=this.currentIter))this.galleryElements[i].set(0);}
if(num>this.currentIter)this.galleryElements[num].custom(1);else
{this.galleryElements[num].set(1);this.galleryElements[this.currentIter].custom(0);}
this.currentIter=num;}
this.doSlideShow.bind(this)();this.fireEvent('onChanged');},clearTimer:function(){if(this.options.timed)
$clear(this.timer);},prepareTimer:function(){if(this.options.timed)
this.timer=this.nextItem.delay(this.options.delay,this);},doSlideShow:function(position){if(this.galleryInit==1)
{imgPreloader=new Image();imgPreloader.onload=function(){this.startSlideShow.delay(10,this);}.bind(this);imgPreloader.src=this.galleryData[0].image;}else{if(this.options.showInfopane)
{if(this.options.showInfopane)
{this.showInfoSlideShow.delay((500+this.options.fadeDuration),this);}else
if(this.options.showCarousel)
this.centerCarouselOn(position);}
this.updateExtThumbs();}},updateExtThumbs:function(){var id=this.currentIter;for(i=0;i<=this.maxIter;i++){var el=$('MyGalThImg'+i);if(el){var overfxs=new Fx.Styles(el,{'duration':200,'wait':false});var myEffects=el.effects({duration:250,transition:Fx.Transitions.Sine.easeInOut});if(i==id){myEffects.start({'opacity':1.0});overfxs.start({'margin-left':-10});}
else{myEffects.start({'opacity':.3});overfxs.start({'margin-left':0});}}}},initCarousel:function(){var carouselContainerElement=new Element('div').addClass('carouselContainer').injectInside(this.galleryElement);this.carouselContainer=new Fx.Styles(carouselContainerElement,{transition:Fx.Transitions.expoOut});this.carouselContainer.normalHeight=carouselContainerElement.offsetHeight;this.carouselContainer.set({'opacity':this.options.carouselMinimizedOpacity,'top':(this.options.carouselMinimizedHeight-this.carouselContainer.normalHeight)});this.carouselBtn=new Element('a').addClass('carouselBtn').setProperties({title:this.options.textShowCarousel}).setHTML(this.options.textShowCarousel).injectInside(carouselContainerElement);this.carouselBtn.addEvent('click',function(){this.carouselContainer.clearTimer();this.toggleCarousel();}.bind(this));this.carouselActive=false;var carouselElement=new Element('div').addClass('carousel').injectInside(carouselContainerElement);this.carousel=new Fx.Styles(carouselElement);this.carouselLabel=new Element('p').addClass('label').injectInside(this.carousel.element);this.carouselWrapper=new Element('div').addClass('carouselWrapper').injectInside(this.carousel.element);this.carouselInner=new Element('div').addClass('carouselInner').injectInside(this.carouselWrapper);this.carouselWrapper.scroller=new Scroller(this.carouselWrapper,{area:100,velocity:0.2})
this.carouselWrapper.elementScroller=new Fx.Scroll(this.carouselWrapper,{duration:400,onStart:this.carouselWrapper.scroller.stop.bind(this.carouselWrapper.scroller),onComplete:this.carouselWrapper.scroller.start.bind(this.carouselWrapper.scroller)});this.constructThumbnails();this.carouselInner.style.width=((this.maxIter*(this.options.thumbWidth+this.options.thumbSpacing))-this.options.thumbSpacing+this.options.thumbWidth)+"px";},toggleCarousel:function(){if(this.carouselActive)
this.hideCarousel();else
this.showCarousel();},showCarousel:function(){this.fireEvent('onShowCarousel');this.carouselContainer.custom({'opacity':this.options.carouselMaximizedOpacity,'top':0}).addEvent('onComplete',function(){this.carouselActive=true;this.carouselWrapper.scroller.start();}.bind(this));},hideCarousel:function(){this.fireEvent('onHideCarousel');this.carouselContainer.custom({'opacity':this.options.carouselMinimizedOpacity,'top':(this.options.carouselMinimizedHeight-this.carouselContainer.normalHeight)}).addEvent('onComplete',function(){this.carouselActive=false;this.carouselWrapper.scroller.stop();}.bind(this));},constructThumbnails:function(){element=this.carouselInner;for(i=0;i<this.galleryData.length;i++)
{var currentImg=new Fx.Style(new Element('div').addClass("thumbnail").setStyles({backgroundImage:"url('"+this.galleryData[i].thumbnail+"')",backgroundPosition:"center center",backgroundRepeat:'no-repeat',marginLeft:this.options.thumbSpacing+"px",width:this.options.thumbWidth+"px",height:this.options.thumbHeight+"px"}).injectInside(element),"opacity",{duration:200}).set(0.2);currentImg.element.addEvents({'mouseover':function(myself){myself.clearTimer();myself.custom(0.99);$(this.carouselLabel).setHTML('<span class="number">'+(myself.relatedImage.number+1)+"/"+this.maxIter+":</span> "+myself.relatedImage.title);}.pass(currentImg,this),'mouseout':function(myself){myself.clearTimer();myself.custom(0.2);}.pass(currentImg,this),'click':function(myself){this.goTo(myself.relatedImage.number);}.pass(currentImg,this)});currentImg.relatedImage=this.galleryData[i];this.thumbnailElements[parseInt(i)]=currentImg;}},clearThumbnailsHighlights:function()
{for(i=0;i<this.galleryData.length;i++)
{this.thumbnailElements[i].clearTimer();this.thumbnailElements[i].custom(0.2);}},centerCarouselOn:function(num){var carouselElement=this.thumbnailElements[num];var position=carouselElement.element.offsetLeft+(carouselElement.element.offsetWidth/2);var carouselWidth=this.carouselWrapper.offsetWidth;var carouselInnerWidth=this.carouselInner.offsetWidth;var diffWidth=carouselWidth/2;var scrollPos=position-diffWidth;this.carouselWrapper.elementScroller.scrollTo(scrollPos,0);},initInfoSlideshow:function(){this.slideInfoZone=new Fx.Styles(new Element('div').addClass('slideInfoZone').injectInside($(this.galleryElement))).set({'opacity':0});var slideInfoZoneTitle=new Element('h2').injectInside(this.slideInfoZone.element);var slideInfoZoneDescription=new Element('p').injectInside(this.slideInfoZone.element);this.slideInfoZone.normalHeight=this.slideInfoZone.element.offsetHeight;this.slideInfoZone.element.setStyle('opacity',0);},changeInfoSlideShow:function()
{this.hideInfoSlideShow.delay(10,this);this.showInfoSlideShow.delay(500,this);},showInfoSlideShow:function(){this.fireEvent('onShowInfopane');this.slideInfoZone.clearTimer();element=this.slideInfoZone.element;element.getElement('h2').setHTML(this.galleryData[this.currentIter].title);element.getElement('p').setHTML(this.galleryData[this.currentIter].description);this.slideInfoZone.custom({'opacity':[0,this.options.slideInfoZoneOpacity],'height':[0,this.slideInfoZone.normalHeight]});if(this.options.showCarousel)
this.slideInfoZone.chain(this.centerCarouselOn.pass(this.currentIter,this));return this.slideInfoZone;},hideInfoSlideShow:function(){this.fireEvent('onHideInfopane');this.slideInfoZone.clearTimer();this.slideInfoZone.custom({'opacity':0,'height':0});return this.slideInfoZone;},makeLink:function(num){this.currentLink.setProperties({href:this.galleryData[num].link,title:this.galleryData[num].linkTitle})
if(!((this.options.embedLinks)&&(!this.options.showArrows)&&(!this.options.showCarousel)))
this.currentLink.setStyle('display','block');},clearLink:function(){this.currentLink.setProperties({href:'',title:''});if(!((this.options.embedLinks)&&(!this.options.showArrows)&&(!this.options.showCarousel)))
this.currentLink.setStyle('display','none');}});gallery.implement(new Events);gallery.implement(new Options);