/*
* Exposure (http://http://exposure.blogocracy.org/)
* Copyright 2011, Kristoffer Jelbring
* Licensed under the MIT license.
*/
;(function($){$.exposure={v:'1.0',defaultTargetId:'exposure',wrapperClass:'exposureWrapper',targetClass:'exposureTarget',currentImageClass:'exposureCurrentImage',lastImageClass:'exposureLastImage',captionClass:'caption',imageDataClass:'extra',dataContainerClass:'exposureData',controlsClass:'exposureControls',slideshowControlsClass:'exposureSlideshowControls',firstPageClass:'exposureFirstPage',prevPageClass:'exposurePrevPage',nextPageClass:'exposureNextPage',lastPageClass:'exposureLastPage',pagingClass:'exposurePaging',playSlideshowClass:'exposurePlaySlideshow',pauseSlideshowClass:'exposurePauseSlideshow',maskClass:'exposureMask',thumbsClass:'exposureThumbs',imageClass:'exposureImage',imageHoverClass:'exposureHover',selectedImageClass:'selected',activeThumbClass:'active',currentThumbClass:'current',firstThumbClass:'first',lastThumbClass:'last',loadedClass:'loaded',activeLinkClass:'active',disabledLinkClass:'disabled',isDefined:function(v){return typeof v!=='undefined'},isObject:function(v){return typeof v==='object'},startsWith:function(s1,s2){if(s1&&s2){return s1.match("^"+s2)===s2}return false},widthDiff:function(el){return el?el.outerWidth(true)-el.width():0},heightDiff:function(el){return el?el.outerHeight(true)-el.height():0},createLink:function(text,onClick,linkClass){var a=$('<a href="javascript:void(0);"></a>').text(text).click(onClick);if(linkClass){a.addClass(linkClass)}return a},texts:{first:'First',previous:'Prev',next:'Next',last:'Last',play:'Play slideshow',pause:'Pause slideshow'}};var defaults={target:'#'+$.exposure.defaultTargetId,showThumbs:true,showControls:true,imageControls:false,controls:{prevNext:true,firstLast:true,pageNumbers:true},carouselControls:false,enableSlideshow:true,slideshowControlsTarget:null,autostartSlideshow:false,slideshowDelay:3000,onSlideshowPlayed:function(){},onSlideshowPaused:function(){},showCaptions:true,showExtraData:true,dataTarget:null,controlsTarget:null,onThumb:function(thumb){},onImage:function(image,imageData,thumb){image.siblings('.'+$.exposure.lastImageClass).remove()},onImageHoverOver:function(){},onImageHoverOut:function(){},onCarousel:function(firstImage,lastImage){},onNext:function(){},onPrev:function(){},onPageChanged:function(){},onPagingLink:function(link){return link},separatePageBrowsing:false,loop:true,onEndOfLoop:function(){},pageSize:5,viewFirstImage:true,visiblePages:5,preloadBuffer:3,keyboardNavigation:true,clickingNavigation:true,fixedContainerSize:false,maxWidth:null,maxHeight:null,stretchToMaxSize:false,fullScreen:false,onEnterFullScreen:function(mask){mask.show()},onExitFullScreen:function(target,mask){target.hide();mask.hide()},showThumbToolTip:true,onEmpty:function(g){g.hide();g.targetElement.remove();if(g.showControls){g.controlsElement.remove()}if(g.slideshowControlsTarget){g.slideshowControlsElement.remove()}},onInit:function(){},allowDuplicates:true,jsonSource:null};var Image=function(src,thumb,caption,data){this.src=src;this.thumb=thumb;this.caption=caption;this.data=data;this.loaded=false};$.fn.exposure=function(options){var g=this;var ex=$.exposure;var txt=ex.texts;$.extend(this,{images:[],sources:{},newImage:function(src,thumb,caption,data){var alreadyAdded=ex.isDefined(g.sources[src]);if(alreadyAdded&&!g.allowDuplicates){return-1}var image=new Image(src,thumb,caption,data);var imageIndex=g.images.push(image)-1;if(!alreadyAdded){g.sources[src]=imageIndex}return imageIndex},initialized:false,current:-1,deselectCurrentImage:function(){g.current=-1;g.find('li.'+ex.activeThumbClass).removeClass(ex.activeThumbClass)},loadQueue:[],addToLoadQueue:function(index){if(!g.loaded(index)&&!g.queued(index)){g.loadQueue.push(index)}},queued:function(index){return $.inArray(index,g.loadQueue)>-1},loaded:function(index){var image=g.getImage(index);if(image!==null){return image.loaded}return false},nextInLoadQueue:function(){var i;if(g.loadQueue.length>0){var next=g.loadQueue.shift();if(g.loaded(next)){i=$.inArray(next,this.loadQueue);g.loadQueue.splice(i,1);return g.nextInLoadQueue()}return next}return null},preloadNextInQueue:function(){if(g.loadQueue.length>0){var nextIndex=g.nextInLoadQueue();if(nextIndex!==null){g.loadImage(nextIndex,g.preloadNextInQueue)}}},loadImage:function(index,onload){var image=g.getImage(index);var img=$('<img />').addClass(ex.imageClass);var i;if(image!==null){image.loaded=true;if(g.queued(index)){i=$.inArray(index,g.loadQueue);g.loadQueue.splice(i,1)}if(typeof onload==='function'){img.load(onload)}img.attr('src',image.src)}return img},pageNumberForImage:function(index){return Math.ceil((index+1)/g.pageSize)},numberOfPages:function(){return this.pageNumberForImage(g.images.length-1)},atFirstPage:function(){return g.currentPage===1},atLastPage:function(){return g.currentPage===g.numberOfPages()},validPage:function(page){return page>0&&page<=g.numberOfPages()},createPaging:function(){var i;if(g.showControls&&g.controls.pageNumbers){var stop=g.imageControls?g.numberOfImages():g.numberOfPages();g.controlsElement.find('.'+ex.pagingClass).each(function(){for(i=1;i<=stop;i++){$(this).append(g.newPagingLink(i))}})}},updatePaging:function(newActivePage){if(g.showControls&&g.controls.pageNumbers){var current=g.imageControls?g.current+1:g.currentPage;var paging=g.controlsElement.find('.'+ex.pagingClass);paging.find(' span.'+ex.activeLinkClass).each(function(){$(this).replaceWith(g.newPagingLink(current))});paging.find('a[rel="'+newActivePage+'"]').each(function(){$(this).replaceWith($('<span>'+newActivePage+'</span>').addClass(ex.activeLinkClass))});var pageCount=g.imageControls?g.numberOfImages():g.numberOfPages();if(g.visiblePages>0&&pageCount>g.visiblePages){var firstVisiblePage=newActivePage;var lastVisiblePage=g.visiblePages;var flooredVisiblePages=Math.floor(g.visiblePages/2);if(newActivePage<=flooredVisiblePages){firstVisiblePage=1}else if(newActivePage>(pageCount-flooredVisiblePages)){lastVisiblePage=pageCount;firstVisiblePage=lastVisiblePage-g.visiblePages+1}else{firstVisiblePage-=flooredVisiblePages;lastVisiblePage=firstVisiblePage+g.visiblePages-1}paging.each(function(){$(this).children().each(function(i){var currentPage=i+1;if(currentPage>=firstVisiblePage&&currentPage<=lastVisiblePage){$(this).show()}else{$(this).hide()}})})}}},newPagingLink:function(index){var onclick=function(){var rel=Number($(this).attr('rel'));if(g.imageControls){g.viewImage(rel-1)}else{g.goToPage(rel)}};return ex.createLink(index,onclick).attr('rel',index)},getNextImage:function(){if(g.current===g.images.length-1){if(g.loop){return 0}else{g.onEndOfLoop()}}else{return g.current+1}return null},getPrevImage:function(){if(g.current===0){if(g.loop){return g.images.length-1}}else{return g.current-1}return null},currentPage:1,goToPage:function(page,imageToView){if(this.validPage(page)){g.find('li').removeClass(ex.currentThumbClass).hide();g.loadPage(page,imageToView);if(!g.imageControls){g.updatePaging(page)}g.currentPage=page;var disabled=ex.disabledLinkClass;if(g.showControls){if(g.atFirstPage()){if(g.controls.firstLast){g.find('.'+ex.firstPageClass).addClass(disabled)}if(!g.loop&&g.controls.prevNext){g.find('.'+ex.prevPageClass).hide()}}else{if(g.controls.firstLast){g.find('.'+ex.firstPageClass).removeClass(disabled)}if(!g.loop&&g.controls.prevNext){g.find('.'+ex.prevPageClass).show()}}if(g.atLastPage()){if(g.controls.firstLast){g.find('.'+ex.lastPageClass).addClass(disabled)}if(!g.loop&&g.controls.prevNext){g.find('.'+ex.nextPageClass).hide()}}else{if(g.controls.firstLast){g.find('.'+ex.lastPageClass).removeClass(disabled)}if(!g.loop&&g.controls.prevNext){g.find('.'+ex.nextPageClass).show()}}}if(!g.carouselControls){g.find('li.'+ex.currentThumbClass).show().each(function(i){var imageHeight=$(this).find('img').height();if(imageHeight>0){$(this).height(imageHeight)}});g.onPageChanged(g)}}},loadPage:function(page,imageToView){if(g.validPage(page)){var last=page*g.pageSize;var first=last-g.pageSize;if(last>g.images.length){last=g.images.length}g.pageTransition=true;g.viewThumbs(first,last-1);if(!g.separatePageBrowsing){if(imageToView){g.viewImage(imageToView)}else{if(page>1||((page===1&&g.viewFirstImage)||g.initialized)){g.viewImage(first)}}}g.pageTransition=false}},viewThumbs:function(first,last){var i;if(g.showThumbs){for(i=first;i<=last;i++){g.viewThumb(i,i===first,i===last,true)}if(!g.carouselControls&&g.currentPage<g.numberOfPages()){var firstNext=last+1;var lastNext=last+g.pageSize;if(lastNext>=g.images.length){lastNext=g.images.length-1}for(i=firstNext;i<=lastNext;i++){var container=g.viewThumb(i,i===firstNext,i===lastNext,false);if(container&&container.length){container.hide()}}}}},viewThumb:function(index,first,last,currentPage){if(index<0){index=g.images.length+index}else if(index>=g.images.length){index=index-g.images.length}var image=g.images[index];var container=g.getThumb(index).parent();if(!container.length){container=g.createThumbForImage(image,index);container.attr('rel',g.pageNumberForImage(index))}if(container.length){container.parent().append(container);if(first){container.addClass(ex.firstThumbClass)}else{container.removeClass(ex.firstThumbClass)}if(last){container.addClass(ex.lastThumbClass)}else{container.removeClass(ex.lastThumbClass)}if(currentPage){if(g.carouselControls){container.show()}else{container.addClass(ex.currentThumbClass)}}}return container},getThumb:function(index){return g.find('img[rel="'+index+'"]')},createThumbForImage:function(image,index){if(g.showThumbs){var thumb=g.getThumb(index);if(thumb===null||!thumb.length){var container=$('<li></li>');g.append(container);thumb=$('<img />');if(image.thumb){thumb.attr('src',image.thumb)}else{thumb.attr('src',image.src);var imageWidth=Math.ceil(thumb.width()/thumb.height()*container.height());var imageHeight=Math.ceil(thumb.height()/thumb.width()*container.width());if(imageWidth<imageHeight){thumb.css({height:'auto',maxWidth:container.width()})}else{thumb.css({width:'auto',maxHeight:container.height()})}}container.append(thumb.css('display','block'));thumb.attr('rel',index);if(image.caption&&g.showThumbToolTip){thumb.attr('title',image.caption)}thumb.data('data',image.data);thumb.click(function(){g.viewImage(Number($(this).attr('rel')))});thumb.load(function(){var imageHeight=$(this).height();if(imageHeight>0){$(this).parent().height(imageHeight)}});g.onThumb(thumb);return container}}return null},firstPage:function(){if(!g.atFirstPage()){g.goToPage(1)}},lastPage:function(){if(!g.atLastPage()){g.goToPage(g.numberOfPages())}},prevPage:function(){if(!g.atFirstPage()){g.goToPage(g.currentPage-1)}else if(g.loop){g.goToPage(g.numberOfPages())}},nextPage:function(){if(!g.atLastPage()){g.goToPage(g.currentPage+1)}else if(g.loop){g.goToPage(1)}},firstImageOnPage:function(index){if(!index){index=g.current}return g.pageSize===1||(index%g.pageSize===0)},lastImageOnPage:function(index){if(!index){index=g.current}var imageCount=g.images.length;if(g.pageSize===1||imageCount===1){return true}if(index>0){var currentPageSize=g.pageSize;var currentPage=g.pageNumberForImage(index);if(currentPage===g.numberOfPages()){var newPageSize=imageCount%g.pageSize;if(newPageSize>0){currentPageSize=newPageSize}}var imageIndex=index;if(currentPage>1){imageIndex-=(currentPage-1)*g.pageSize}return(imageIndex+1)%currentPageSize===0}return false},currentPageNumber:function(){return g.currentPage},numberOfImages:function(){return g.images.length},atFirstImage:function(){return g.current===0},atLastImage:function(){return g.current===g.numberOfImages()-1},getImage:function(index){if(index!==null&&index>-1&&index<g.images.length){return g.images[index]}return null},indexOfImage:function(src){if(src&&ex.isDefined(g.sources[src])){return g.sources[src]}return-1},currentImage:function(){return g.current},addImage:function(src,thumb,caption,data){var pageCount=g.numberOfPages();var index=g.newImage(src,thumb,caption,data);if(index>-1){var pageNumber=g.pageNumberForImage(index);var containers=$('.'+ex.thumbsClass+' li[rel="'+pageNumber+'"]');if(containers.length){containers.removeClass(ex.lastThumbClass)}var newPageAdded=pageNumber>pageCount;if(newPageAdded){$('.'+ex.pagingClass).empty();g.createPaging()}if(newPageAdded||pageNumber===g.currentPage){g.goToPage(g.currentPage)}}},removeImage:function(index){if(g.images.length===1){g.removeAllImages()}else{if(g.enableSlideshow){g.pauseSlideshow()}var oldPageCount=g.numberOfPages();g.images.splice(index,1);var queueIndex=$.inArray(index,g.loadQueue);if(queueIndex>-1){g.loadQueue.splice(queueIndex,1)}var container=g.getThumb(index).parent();container.remove();$('.'+ex.thumbsClass+' > li').each(function(i){if(i>=index){var newRel=g.pageNumberForImage(i);$(this).attr('rel',newRel);$(this).find('img').attr('rel',i);if(g.firstImageOnPage(i)){$(this).addClass(ex.firstThumbClass)}else{$(this).removeClass(ex.firstThumbClass)}if(g.lastImageOnPage(i)){$(this).addClass(ex.lastThumbClass)}else{$(this).removeClass(ex.lastThumbClass)}if(g.currentPage===newRel){$(this).show()}else{$(this).hide()}}});var pageRemoved=$.exposure.numberOfPages<oldPageCount;if(pageRemoved){$('.'+ex.pagingClass).empty();g.createPaging()}if(g.current===index){g.current=-1;var nextIndex=index;if(index===g.numberOfImages()){nextIndex=0}g.viewImage(nextIndex)}}},removeAllImages:function(){g.images=[];g.sources={};g.loadQueue=[];if(g.enableSlideshow){g.pauseSlideshow()}$('.'+ex.thumbsClass+', '+'.'+ex.pagingClass).empty();g.current=-1},viewImage:function(index){if(g.current!==index){if(g.enableSlideshow&&!g.slideshowTransition){g.pauseSlideshow()}var wrapper=g.wrapper;var validImage=false;var image=g.images[index];if(image){var src=image.src;var caption=image.caption;var extraImageData=image.data;if(src){validImage=true;var hasThumb=g.showThumbs;var thumb=null;if(g.showThumbs){thumb=g.find('img[rel="'+index+'"]');hasThumb=thumb&&thumb.length;var active=ex.activeThumbClass;if(hasThumb){thumb.parent().siblings().removeClass(active);thumb.parent().addClass(active)}else{g.find$('li.'+active).removeClass(active)}}wrapper.parent().removeClass(ex.loadedClass);if(g.loaded(index)){wrapper.parent().addClass(ex.loadedClass)}var img=g.loadImage(index,function(){var lastImage=wrapper.find('.'+ex.imageClass);if(lastImage.length){lastImage.removeClass(ex.currentImageClass);lastImage.addClass(ex.lastImageClass)}$(this).addClass(ex.currentImageClass);wrapper.append($(this));if(g.clickingNavigation){$(this).click(g.nextImage)}if(!$(this).width()||!$(this).height()){var i=$(this);var delay=setInterval(function(){g.resizeContainer(i);clearTimeout(delay)},2)}else{g.resizeContainer($(this))}if(g.fullScreen&&!g.infullScreen){g.onEnterFullScreen(g.mask);g.infullScreen=true}if(g.dataElement&&g.dataElement.length){if(g.showCaptions){var captionContainer=g.dataElement.find('.'+ex.captionClass);if(captionContainer.length){captionContainer.empty();if(!caption&&hasThumb){caption=thumb.attr('title')}}captionContainer.html(caption)}if(g.showExtraData){var extraImageDataContainer=g.dataElement.find('.'+ex.imageDataClass);if(extraImageDataContainer.length){extraImageDataContainer.empty();if(!extraImageData&&hasThumb){extraImageData=thumb.data('data')}extraImageDataContainer.html(extraImageData)}}}wrapper.hover(function(){wrapper.addClass(ex.imageHoverClass);g.onImageHoverOver()},function(){wrapper.removeClass(ex.imageHoverClass);g.onImageHoverOut()});g.onImage($(this),g.dataElement,thumb);g.preloadNextInQueue()})}}if(!validImage){wrapper.siblings().andSelf().empty();g.find('li.'+ex.activeThumbClass).removeClass(ex.activeThumbClass)}if(g.imageControls){var page=g.pageNumberForImage(index);if(g.currentPage!==page&&!g.pageTransition){g.goToPage(page,index)}g.updatePaging(index+1)}g.current=index;if(g.carouselControls&&g.images.length>g.pageSize){var firstVisibleImage=index;var lastVisibleImage=g.pageSize-1;var flooredVisibleImages=Math.floor(g.pageSize/2);if(!g.loop&&index<flooredVisibleImages){firstVisibleImage=0}else if(!g.loop&&index>=(g.length-flooredVisibleImages)){lastVisibleImage=g.length-1;firstVisibleImage=lastVisibleImage-g.pageSize+1}else{firstVisibleImage-=flooredVisibleImages;lastVisibleImage=firstVisibleImage+g.pageSize-1}g.onCarousel(firstVisibleImage,lastVisibleImage);g.find('li').removeClass(ex.currentThumbClass).hide();g.viewThumbs(firstVisibleImage,lastVisibleImage);g.currentPage=g.pageNumberForImage(index)}}},firstImage:function(){if(!g.atFirstImage()){if(g.separatePageBrowsing||g.atFirstPage()){g.viewImage(0)}else{g.goToPage(1)}}},nextImage:function(){if(!g.separatePageBrowsing&&g.lastImageOnPage()){if(g.atLastPage()&&g.loop){g.goToPage(1)}else{g.goToPage(g.currentPage+1)}g.onNext()}else{var next=g.getNextImage();if(next!==null){g.viewImage(next);g.onNext()}}var nextNext=g.getNextImage();if(nextNext!==null){g.addToLoadQueue(nextNext)}},prevImage:function(){if(!g.separatePageBrowsing&&g.firstImageOnPage()){if(g.atFirstPage()&&g.loop){g.goToPage(g.numberOfPages(),g.numberOfImages()-1)}else{var page=g.currentPage-1;g.goToPage(page,page*g.pageSize-1)}g.onPrev()}else{var prev=g.getPrevImage();if(prev!==null){g.viewImage(prev);g.onPrev()}}var prevPrev=g.getPrevImage();if(prevPrev!==null){g.addToLoadQueue(prevPrev)}},lastImage:function(){if(!g.atLastImage()){if(g.separatePageBrowsing||g.atLastPage()){g.viewImage(g.numberOfImages()-1)}else{g.goToPage(g.numberOfPages(),g.numberOfImages()-1)}}},imageHasData:function(){if(g.dataElement&&g.dataElement.length){var caption=g.dataElement.find('.'+$.exposure.captionClass).html();var extra=g.dataElement.find('.'+$.exposure.imageDataClass).html();return(caption&&caption.length>0)||(extra&&extra.length>0)}return false},pageTransition:false,playingSlideshow:false,slideshowTimer:null,slideshowTransition:false,slideshow:function(){g.slideshowTimer=setTimeout(function(){g.slideshowTransition=true;g.nextImage();g.slideshowTransition=false;g.slideshow()},g.slideshowDelay)},playSlideshow:function(){if(!g.playingSlideshow){if(g.slideshowControlsTarget){g.slideshowControlsElement.find('.'+ex.playSlideshowClass).hide();g.slideshowControlsElement.find('.'+ex.pauseSlideshowClass).show()}g.slideshow();g.playingSlideshow=true}g.onSlideshowPlayed()},pauseSlideshow:function(){if(g.playingSlideshow){if(g.slideshowControlsTarget){g.slideshowControlsElement.find('.'+ex.playSlideshowClass).show();g.slideshowControlsElement.find('.'+ex.pauseSlideshowClass).hide()}g.playingSlideshow=false;if(g.slideshowTimer){clearTimeout(g.slideshowTimer)}g.onSlideshowPaused()}},toggleSlideshow:function(){if(g.playingSlideshow){g.pauseSlideshow()}else{g.playSlideshow()}},first:function(){if(g.imageControls){g.firstImage()}else{g.firstPage()}},prev:function(){if(g.imageControls){g.prevImage()}else{g.prevPage()}},next:function(){if(g.imageControls){g.nextImage()}else{g.nextPage()}},last:function(){if(g.imageControls){g.lastImage()}else{g.lastPage()}},infullScreen:false,exitFullScreen:function(){if(g.infullScreen){g.pauseSlideshow();g.deselectCurrentImage();g.onExitFullScreen(g.targetElement,g.mask);g.infullScreen=false}},actualMaxWidth:function(image,target){return g.maxWidth?g.maxWidth-(ex.widthDiff(image)+ex.widthDiff(target)):0},actualMaxHeight:function(image,target){return g.maxHeight?g.maxHeight-(ex.heightDiff(image)+ex.heightDiff(target)):0},fitToMaxSize:function(image){var target=g.targetElement;if(g.stretchToMaxSize){if(g.maxWidth){image.width(g.actualMaxWidth(image,target))}if(g.maxHeight){image.height(g.actualMaxHeight(image,target))}}else{if(image.width()>image.height()){g.fitToMaxWidth(image,target);g.fitToMaxHeight(image,target)}else if(image.height()>image.width()){g.fitToMaxHeight(image,target);g.fitToMaxWidth(image,target)}else{var actualMaxHeight=g.actualMaxHeight(image,target);var smallest=g.actualMaxWidth(image,target);if(!smallest||(actualMaxHeight&&smallest&&actualMaxHeight<smallest)){smallest=actualMaxHeight}if(smallest&&image.width()>smallest){image.width(smallest);image.height(smallest)}}}},centerImageInWindow:function(image){var target=g.targetElement;target.width(image.width()).height(image.height());target.css({'top':($(window).height()-target.outerHeight(true))/2,'left':($(window).width()-target.outerWidth(true))/2});target.find('.'+ex.lastImageClass).each(function(){$(this).css({'top':(target.height()-$(this).height())/2,'left':(target.width()-$(this).width())/2})})},fitToWindow:function(){g.maxWidth=$(window).width();g.maxHeight=$(window).height();var image=g.targetElement.find('.'+$.exposure.currentImageClass).width('auto').height('auto');g.fitToMaxSize(image);if(!image.width()||!image.height()){var delay=setInterval(function(){g.centerImageInWindow(image);clearTimeout(delay)},2)}else{g.centerImageInWindow(image)}},fitToMaxWidth:function(image,target){var actualMaxWidth=g.actualMaxWidth(image,target);if(actualMaxWidth&&image.width()>actualMaxWidth){var newHeight=Math.round(actualMaxWidth*image.height()/image.width());image.height(newHeight);image.width(actualMaxWidth)}},fitToMaxHeight:function(image,target){var actualMaxHeight=g.actualMaxHeight(image,target);if(actualMaxHeight&&image.height()>actualMaxHeight){var newWidth=Math.round(actualMaxHeight*image.width()/image.height());image.width(newWidth);image.height(actualMaxHeight)}},resizeContainer:function(img){g.fitToMaxSize(img);if(!g.fixedContainerSize){g.targetElement.show().width(img.width()).height(img.height())}}});$.extend(this,defaults,options);this.targetElement=$(this.target);if(!this.targetElement.length){this.target=defaults.target;this.targetElement=$('<div id="'+ex.defaultTargetId+'"></div>').insertBefore($(this))}var w=this.wrapper=$('<div class="'+ex.wrapperClass+'"></div>');var te=this.targetElement.addClass(ex.targetClass).append(w);if(this.showCaptions||this.showExtraData){var dataElementsHtml='';if(this.showCaptions){dataElementsHtml+='<div class="'+ex.captionClass+'"></div>'}if(this.showExtraData){dataElementsHtml+='<div class="'+ex.imageDataClass+'"></div>'}var dataElements=$(dataElementsHtml);if(dataElements.length){this.dataElement=$(this.dataTarget);if(this.dataTarget&&this.dataElement.length){this.dataElement.addClass(ex.dataContainerClass).append(dataElements)}else{this.dataElement=$('<div class="'+ex.dataContainerClass+'"></div>');te.append(this.dataElement.append(dataElements))}}}if(!this.showThumbs){this.carouselControls=false}if(this.carouselControls||!this.controlsTarget||(!this.controls.prevNext&&!this.controls.firstLast&&!this.controls.pageNumbers)){this.showControls=false}if(this.showControls){this.controlsElement=$(this.controlsTarget).addClass(ex.controlsClass).each(function(){if(g.controls.firstLast){$(this).append(ex.createLink(txt.first,g.first,ex.firstPageClass))}if(g.controls.prevNext){$(this).append(ex.createLink(txt.previous,g.prev,ex.prevPageClass))}if(g.controls.pageNumbers){$(this).append($('<div class="'+ex.pagingClass+'"></div>'))}if(g.controls.prevNext){$(this).append(ex.createLink(txt.next,g.next,ex.nextPageClass))}if(g.controls.firstLast){$(this).append(ex.createLink(txt.last,g.last,ex.lastPageClass))}})}if(this.enableSlideshow&&this.slideshowControlsTarget){this.slideshowControlsElement=$(this.slideshowControlsTarget).addClass(ex.slideshowControlsClass).each(function(){$(this).append(ex.createLink(txt.play,g.playSlideshow,ex.playSlideshowClass));$(this).append(ex.createLink(txt.pause,g.pauseSlideshow,ex.pauseSlideshowClass).hide())})}if(this.keyboardNavigation){if(this.carouselControls){$(document).bind('keyup','left',this.nextImage);$(document).bind('keyup','right',this.prevImage)}else{$(document).bind('keyup','left',this.prevImage);$(document).bind('keyup','right',this.nextImage);$(document).bind('keyup','ctrl+left',this.prevPage);$(document).bind('keyup','ctrl+right',this.nextPage);$(document).bind('keyup','up',this.lastImage);$(document).bind('keyup','down',this.firstImage);$(document).bind('keyup','ctrl+up',this.lastPage);$(document).bind('keyup','ctrl+down',this.firstPage)}if(this.enableSlideshow){$(document).bind('keyup','space',this.toggleSlideshow)}}if(this.fullScreen){$(window).resize(this.fitToWindow);this.mask=$('<div class="'+ex.maskClass+'"></div>').click(this.exitFullScreen).insertAfter(this.target);if(this.keyboardNavigation){$(document).bind('keyup','esc',this.exitFullScreen)}}var jsonImages=null;if(this.jsonSource){if(ex.isObject(this.jsonSource)){jsonImages=this.jsonSource}else if(this.jsonSource.length){if(ex.startsWith(this.jsonSource,"http://")||ex.startsWith(this.jsonSource,"https://")){jsonImages=$.ajax({url:this.jsonSource,type:'GET',async:false}).responseText}else{jsonImages=this.jsonSource}}}return this.addClass(ex.thumbsClass).each(function(){var i;if(jsonImages){var images=ex.isObject(jsonImages)?jsonImages:$.parseJSON(jsonImages);if(images&&images.data){for(i in images.data){var photo=images.data[i];if(photo.source&&photo.source.length){var item=$('<li></li>');var link=$('<a></a>').attr('href',photo.source);if(photo.thumb_source&&photo.thumb_source.length){var thumb=$('<img />').attr('src',photo.thumb_source);if(photo.caption&&photo.caption.length){thumb.attr('title',photo.caption)}link.append(thumb)}else if(photo.caption&&photo.caption.length){link.attr('title',photo.caption)}item.append(link);if(photo.extra_data&&photo.extra_data.length){item.append($(photo.extra_data))}$(this).append(item)}}}}var foundImage=false;var foundThumb=false;if($(this).children('li').length){var selectedIndex=null;$(this).show().children('li').each(function(){foundImage=true;var a=$(this).find('a');if(a.length){a=$(a[0]);var src=a.attr('href');var img=a.find('img');var thumbSrc=img.length?img.attr('src'):a.attr('rel');var caption=img.length?img.attr('title'):a.attr('title');var isSelected=a.hasClass(ex.selectedImageClass)&&!selectedIndex;a.remove();var thumbData=$(this).html();if(thumbSrc){foundThumb=true}$(this).remove();var imageIndex=g.newImage(src,thumbSrc,caption,thumbData);if(imageIndex>-1){if(isSelected){selectedIndex=imageIndex}if(g.loadQueue.length<g.preloadBuffer){g.addToLoadQueue(imageIndex)}}}else{$(this).remove()}});if(!g.showThumbs){g.pageSize=1;$(ex.thumbsClass).remove()}if(foundImage){g.preloadNextInQueue();g.createPaging();if(selectedIndex){g.goToPage(g.pageNumberForImage(selectedIndex));g.viewImage(selectedIndex)}else{g.goToPage(1)}if(g.enableSlideshow&&g.autostartSlideshow){g.playSlideshow()}}else{g.onEmpty(g)}}else{g.onEmpty(g)}g.onInit();g.initialized=true})}})(jQuery);
/*
* jQuery Hotkeys Plugin
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* Based upon the plugin by Tzury Bar Yochay:
* http://github.com/tzuryby/hotkeys
*
* Original idea by:
* Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
*/
(function(jQuery){jQuery.hotkeys={version:"0.8",specialKeys:{8:"backspace",9:"tab",13:"return",16:"shift",17:"ctrl",18:"alt",19:"pause",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"del",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",144:"numlock",145:"scroll",191:"/",224:"meta"},shiftNums:{"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":": ","'":"\"",",":"<",".":">","/":"?","\\":"|"}};function keyHandler(handleObj){if(typeof handleObj.data!=="string"){return}var origHandler=handleObj.handler,keys=handleObj.data.toLowerCase().split(" ");handleObj.handler=function(event){if(this!==event.target&&(/textarea|select/i.test(event.target.nodeName)||event.target.type==="text")){return}var special=event.type!=="keypress"&&jQuery.hotkeys.specialKeys[event.which],character=String.fromCharCode(event.which).toLowerCase(),key,modif="",possible={};if(event.altKey&&special!=="alt"){modif+="alt+"}if(event.ctrlKey&&special!=="ctrl"){modif+="ctrl+"}if(event.metaKey&&!event.ctrlKey&&special!=="meta"){modif+="meta+"}if(event.shiftKey&&special!=="shift"){modif+="shift+"}if(special){possible[modif+special]=true}else{possible[modif+character]=true;possible[modif+jQuery.hotkeys.shiftNums[character]]=true;if(modif==="shift+"){possible[jQuery.hotkeys.shiftNums[character]]=true}}for(var i=0,l=keys.length;i<l;i++){if(possible[keys[i]]){return origHandler.apply(this,arguments)}}}}jQuery.each(["keydown","keyup","keypress"],function(){jQuery.event.special[this]={add:keyHandler}})})(jQuery);
