/*
* Exposure (http://http://exposure.blogocracy.org/)
* Copyright (c) 2010 Kristoffer Jelbring
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
(function($){var $$=$.fn.exposure=function($args){var $defaults={target:'#exposure',showThumbs:true,showControls:true,controls:{prevNext:true,firstLast:true,pageNumbers:true},enableSlideshow:true,slideshowControlsTarget:null,autostartSlideshow:false,slideshowDelay:3000,showCaptions:true,showExtraData:true,dataTarget:null,controlsTarget:null,onThumb:function(thumb){},onImage:function(image,imageData,thumb){$('.exposureWrapper > .exposureLastImage').remove()},onNext:function(){},onPrev:function(){},onPageChanged:function(){},loop:true,onEndOfLoop:function(){},pageSize:5,visiblePages:5,preloadBuffer:3,keyboardNavigation:true,clickingNavigation:true,fixedContainerSize:false,showThumbToolTip:true,onEmpty:function(){$('.exposureThumbs').hide();$($.exposure.target).remove();if($.exposure.showControls){$($.exposure.controlsTarget).remove()}if($.exposure.slideshowControlsTarget){$($.exposure.slideshowControlsTarget).remove()}},allowDuplicates:true};var opts=$.extend($defaults,$args);for(var i in opts){if($$.defined($defaults[i])){$.exposure[i]=opts[i]}}if(!$($.exposure.target).length){$('<div id="exposure"></div>').insertBefore($(this))}var wrapper=$('<div class="exposureWrapper"></div>');var target=$($.exposure.target).addClass('exposureTarget').append(wrapper);var dataElements=$('<div class="caption"></div><div class="extra"></div>');if($.exposure.dataTarget&&$($.exposure.dataTarget).length){$($.exposure.dataTarget).addClass('exposureData').append(dataElements)}else{$.exposure.dataTarget=null;target.append($('<div class="exposureData"></div>').append(dataElements))}if(!$.exposure.controlsTarget||(!$.exposure.controls.prevNext&&!$.exposure.controls.firstLast&&!$.exposure.controls.pageNumbers)){$.exposure.showControls=false}if($.exposure.showControls){$($.exposure.controlsTarget).addClass('exposureControls').each(function(){if($.exposure.controls.firstLast){$(this).append($('<a class="exposureFirstPage" href="javascript:void(0);">'+$.exposure.texts.first+'</a>').click($.exposure.firstPage))}if($.exposure.controls.prevNext){$(this).append($('<a class="exposurePrevPage" href="javascript:void(0);">'+$.exposure.texts.previous+'</a>').click($.exposure.prevPage))}if($.exposure.controls.pageNumbers){$(this).append($('<div class="exposurePaging"></div>'))}if($.exposure.controls.prevNext){$(this).append($('<a class="exposureNextPage" href="javascript:void(0);">'+$.exposure.texts.next+'</a>').click($.exposure.nextPage))}if($.exposure.controls.firstLast){$(this).append($('<a class="exposureLastPage" href="javascript:void(0);">'+$.exposure.texts.last+'</a>').click($.exposure.lastPage))}})}if($.exposure.slideshowControlsTarget){$($.exposure.slideshowControlsTarget).addClass('exposureSlideshowControls').each(function(){$(this).append($('<a class="exposurePlaySlideshow" href="javascript:void(0);">'+$.exposure.texts.play+'</a>').click($.exposure.playSlideshow));$(this).append($('<a class="exposurePauseSlideshow" href="javascript:void(0);">'+$.exposure.texts.pause+'</a>').hide().click($.exposure.pauseSlideshow))})}if($.exposure.keyboardNavigation){$(document).bind('keydown','left',$.exposure.prevImage);$(document).bind('keydown','right',$.exposure.nextImage);$(document).bind('keydown','ctrl+left',$.exposure.prevPage);$(document).bind('keydown','ctrl+right',$.exposure.nextPage);if($.exposure.enableSlideshow){$(document).bind('keydown','space',$.exposure.toggleSlideshow)}}return this.addClass('exposureThumbs').each(function(){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('selected')&&!selectedIndex;a.remove();var thumbData=$(this).html();if(thumbSrc){foundThumb=true}$(this).remove();var imageIndex=$$.newImage(src,thumbSrc,caption,thumbData);if(imageIndex>-1){if(isSelected){selectedIndex=imageIndex}if($$.loadQueue.length<$.exposure.preloadBuffer){$$.addToLoadQueue(imageIndex)}}}else{$(this).remove()}});if(!foundThumb){$.exposure.showThumbs=false}if(!$.exposure.showThumbs){$.exposure.pageSize=1;$('.exposureThumbs').hide()}if(foundImage){$$.preloadNextInQueue();$$.createPaging();if(selectedIndex){$.exposure.goToPage($.exposure.pageNumberForImage(selectedIndex));$.exposure.viewImage(selectedIndex)}else{$.exposure.goToPage(1)}if($.exposure.enableSlideshow&&$.exposure.autostartSlideshow){$.exposure.playSlideshow()}}else{$.exposure.onEmpty()}}else{$.exposure.onEmpty()}})};$$.defined=function(v){return typeof v!='undefined'};$$.Image=function(src,thumb,caption,data){this.src=src;this.thumb=thumb;this.caption=caption;this.data=data;this.loaded=false};$$.images=[];$$.sources={};$$.newImage=function(src,thumb,caption,data){var alreadyAdded=$$.defined($$.sources[src]);if(alreadyAdded&&!$.exposure.allowDuplicates){return-1}var image=new $$.Image(src,thumb,caption,data);var imageIndex=$$.images.push(image)-1;if(!alreadyAdded){$$.sources[src]=imageIndex}return imageIndex};$$.current=0;$$.loadQueue=[];$$.addToLoadQueue=function(index){if(!$$.loaded(index)&&!$$.queued(index)){$$.loadQueue.push(index)}};$$.queued=function(index){return $.inArray(index,$$.loadQueue)>-1};$$.loaded=function(index){var image=$.exposure.getImage(index);if(image!==null){return image.loaded}return false};$$.nextInLoadQueue=function(){if($$.loadQueue.length>0){var next=$$.loadQueue.shift();if($$.loaded(next)){var i=$.inArray(index,$.exposure.loadQueue);$.exposure.loadQueue.splice(i,1);return $$.nextInLoadQueue()}return next}return null};$$.preloadNextInQueue=function(){if($$.loadQueue.length>0){var nextIndex=$$.nextInLoadQueue();if(nextIndex!==null){$$.loadImage(nextIndex,$$.preloadNextInQueue)}}};$$.loadPage=function(page,backwards){if($$.validPage(page)){var last=page*$.exposure.pageSize;var first=last-$.exposure.pageSize;if(last>$$.images.length){last=$$.images.length}for(var i=first;i<last;i++){if($.exposure.showThumbs){var image=$$.images[i];var container=$.exposure.getThumb(i).parent();if(!container.length){container=$$.createThumbForImage(image,i);container.attr('rel',page);if(i==first){container.addClass('first')}if(i==last-1){container.addClass('last')}}if(container.length){container.show()}}}if(backwards){$.exposure.viewImage(last-1)}else{$.exposure.viewImage(first)}}};$$.loadImage=function(index,onload){var image=$.exposure.getImage(index);var img=$('<img />').addClass('exposureImage');if(image!==null){image.loaded=true;if($$.queued(index)){var i=$.inArray(index,$$.loadQueue);$$.loadQueue.splice(i,1)}if(typeof onload=='function'){img.load(onload)}img.attr('src',image.src)}return img};$$.createThumbForImage=function(image,index){if($.exposure.showThumbs&&image.thumb){var thumb=$.exposure.getThumb(index);if(thumb===null||!thumb.length){var container=$('<li></li>');$('.exposureThumbs').append(container);thumb=$('<img />').attr('src',image.thumb);container.append(thumb.css('display','block'));thumb.attr('rel',index);if(image.caption&&$.exposure.showThumbToolTip){thumb.attr('title',image.caption)}thumb.data('data',image.data);thumb.click(function(){$.exposure.viewImage(index)});thumb.load(function(){var imageHeight=$(this).height();if(imageHeight>0){$(this).parent().height(imageHeight)}});$.exposure.onThumb(thumb);return container}}return null};$$.currentPage=1;$$.validPage=function(page){return page>0&&page<=$.exposure.numberOfPages()};$$.createPaging=function(){if($.exposure.showControls&&$.exposure.controls.pageNumbers){for(var i=1;i<=$.exposure.numberOfPages();i++){$('.exposurePaging').each(function(){$(this).append($$.newPagingLink(i))})}}};$$.newPagingLink=function(page){return $('<a href="javascript:void(0);" rel="'+page+'">'+page+'</a>').click(function(){$.exposure.goToPage(Number($(this).attr('rel')))})};$$.playingSlideshow=false;$$.slideshowTimer=null;$$.slideshowTransition=false;$$.slideshow=function(){$$.slideshowTimer=setTimeout(function(){$$.slideshowTransition=true;$.exposure.nextImage();$$.slideshowTransition=false;$$.slideshow()},$.exposure.slideshowDelay)};$.extend({exposure:{pageNumberForImage:function(index){return Math.ceil((index+1)/$.exposure.pageSize)},numberOfPages:function(){return $.exposure.pageNumberForImage($$.images.length-1)},atFirstPage:function(){return $$.currentPage==1},atLastPage:function(){return $$.currentPage==$.exposure.numberOfPages()},atFirstImageOnPage:function(){return $.exposure.pageSize==1||($$.current%$.exposure.pageSize===0)},atLastImageOnPage:function(){if($.exposure.pageSize==1){return true}if($$.current>0||$$.current.length==1){var currentPageSize=$.exposure.pageSize;if($.exposure.atLastPage()){var newPageSize=$$.images.length%$.exposure.pageSize;if(newPageSize>0){currentPageSize=newPageSize}}var imageIndex=$$.current;if($$.currentPage>1){imageIndex-=($$.currentPage-1)*$.exposure.pageSize}return(imageIndex+1)%currentPageSize===0}return false},getImage:function(index){if(index!==null&&index>-1&&index<$$.images.length){return $$.images[index]}return null},indexOfImage:function(src){if(src&&$$.defined($$.sources[src])){return $$.sources[src]}return-1},addImage:function(src,thumb,caption,data){var pageCount=$.exposure.numberOfPages();var index=$$.newImage(src,thumb,caption,data);if(index>-1){var pageNumber=$.exposure.pageNumberForImage(index);var containers=$('.exposureThumbs li[rel="'+pageNumber+'"]');if(containers.length){containers.removeClass('last')}var newPageAdded=pageNumber>pageCount;if(newPageAdded){$('.exposurePaging').empty();$$.createPaging()}if(newPageAdded||pageNumber==$$.currentPage){$.exposure.goToPage($$.currentPage)}}},removeAllImages:function(){$$.images=[];$$.sources={};$$.loadQueue=[];if($.exposure.enableSlideshow){$.exposure.pauseSlideshow()}$('.exposureThumbs').empty();$('.exposurePaging').empty();$.exposure.viewImage(0)},getThumb:function(index){return $('.exposureThumbs img[rel="'+index+'"]')},getNextImage:function(){if($$.current==$$.images.length-1){if($.exposure.loop){return 0}else{$.exposure.onEndOfLoop()}}else{return $$.current+1}return null},getPrevImage:function(){if($$.current===0){if($.exposure.loop){return $$.images.length-1}}else{return $$.current-1}return null},goToPage:function(page,backwards){if($$.validPage(page)){$('.exposureThumbs li').hide();$$.loadPage(page,backwards);if($.exposure.showControls&&$.exposure.controls.pageNumbers){$('.exposurePaging span.active').each(function(){$(this).replaceWith($$.newPagingLink($$.currentPage))});$('.exposurePaging a[rel="'+page+'"]').each(function(){$(this).replaceWith($('<span>'+page+'</span>').addClass('active'))});if($.exposure.visiblePages>0&&$.exposure.numberOfPages()>$.exposure.visiblePages){var firstVisiblePage=page;var lastVisiblePage=$.exposure.visiblePages;var flooredVisiblePages=Math.floor($.exposure.visiblePages/2);if(page<=flooredVisiblePages){firstVisiblePage=1}else if(page>($.exposure.numberOfPages()-flooredVisiblePages)){lastVisiblePage=$.exposure.numberOfPages();firstVisiblePage=lastVisiblePage-$.exposure.visiblePages+1}else{firstVisiblePage-=flooredVisiblePages;lastVisiblePage=firstVisiblePage+$.exposure.visiblePages-1}$('.exposurePaging').each(function(){$(this).children().each(function(i){var currentPage=i+1;if(currentPage>=firstVisiblePage&&currentPage<=lastVisiblePage){$(this).show()}else{$(this).hide()}})})}}$$.currentPage=page;if($.exposure.showControls){if($.exposure.atFirstPage()){if($.exposure.controls.firstLast){$('.exposureFirstPage').addClass('disabled')}if(!$.exposure.loop&&$.exposure.controls.prevNext){$('.exposurePrevPage').hide()}}else{if($.exposure.controls.firstLast){$('.exposureFirstPage').removeClass('disabled')}if(!$.exposure.loop&&$.exposure.controls.prevNext){$('.exposurePrevPage').show()}}if($.exposure.atLastPage()){if($.exposure.controls.firstLast){$('.exposureLastPage').addClass('disabled')}if(!$.exposure.loop&&$.exposure.controls.prevNext){$('.exposureNextPage').hide()}}else{if($.exposure.controls.firstLast){$('.exposureLastPage').removeClass('disabled')}if(!$.exposure.loop&&$.exposure.controls.prevNext){$('.exposureNextPage').show()}}}$.exposure.onPageChanged()}},firstPage:function(){if(!$.exposure.atFirstPage()){$.exposure.goToPage(1)}},lastPage:function(){if(!$.exposure.atLastPage()){$.exposure.goToPage($.exposure.numberOfPages())}},prevPage:function(){if(!$.exposure.atFirstPage()){$.exposure.goToPage($$.currentPage-1)}else if($.exposure.loop){$.exposure.goToPage($.exposure.numberOfPages())}},nextPage:function(){if(!$.exposure.atLastPage()){$.exposure.goToPage($$.currentPage+1)}else if($.exposure.loop){$.exposure.goToPage(1)}},viewImage:function(index){if($.exposure.enableSlideshow&&!$$.slideshowTransition){$.exposure.pauseSlideshow()}var wrapper=$('.exposureWrapper');var validImage=true;var image=$$.images[index];if(image){var src=image.src;var caption=image.caption;var extraImageData=image.data;if(src){var hasThumb=$.exposure.showThumbs;var thumb=null;if($.exposure.showThumbs){thumb=$('.exposureThumbs img[rel="'+index+'"]');hasThumb=thumb&&thumb.length;if(hasThumb){thumb.parent().siblings().removeClass('active');thumb.parent().addClass('active')}else{$('.exposureThumbs li.active').removeClass('active')}}wrapper.parent().removeClass('exposureLoaded');if($$.loaded(index)){wrapper.parent().addClass('exposureLoaded')}var img=$$.loadImage(index,function(){var lastImage=wrapper.find('.exposureImage');if(lastImage.length){lastImage.addClass('exposureLastImage')}wrapper.append($(this));if($.exposure.clickingNavigation){$(this).click($.exposure.nextImage)}if(!$.exposure.fixedContainerSize){$('.exposureTarget').width($(this).width()).height($(this).height())}var imageDataContainer=$.exposure.dataTarget?$($.exposure.dataTarget):wrapper.siblings('.exposureData');if(imageDataContainer.length){if($.exposure.showCaptions){var captionContainer=imageDataContainer.find('.caption');if(captionContainer.length){captionContainer.empty();if(!caption&&hasThumb){caption=thumb.attr('title')}}captionContainer.html(caption)}if($.exposure.showExtraData){var extraImageDataContainer=imageDataContainer.find('.extra');if(extraImageDataContainer.length){extraImageDataContainer.empty();if(!extraImageData&&hasThumb){extraImageData=thumb.data('data')}extraImageDataContainer.html(extraImageData)}}}$.exposure.onImage($(this),imageDataContainer,thumb);$$.preloadNextInQueue()})}else{validImage=false}}else{validImage=false}if(!validImage){wrapper.siblings().andSelf().empty();$('.exposureThumbs li.active').removeClass('active')}$$.current=index},nextImage:function(){if($.exposure.atLastImageOnPage()){if($.exposure.atLastPage()){$.exposure.goToPage(1)}else{$.exposure.goToPage($$.currentPage+1)}$.exposure.onNext()}else{var next=$.exposure.getNextImage();if(next!==null){$.exposure.viewImage(next);$.exposure.onNext()}}var nextNext=$.exposure.getNextImage();if(nextNext!==null){$$.addToLoadQueue(nextNext)}},prevImage:function(){if($.exposure.atFirstImageOnPage()){if($.exposure.atFirstPage()){$.exposure.goToPage($.exposure.numberOfPages(),true)}else{$.exposure.goToPage($$.currentPage-1,true)}$.exposure.onPrev()}else{var prev=$.exposure.getPrevImage();if(prev!==null){$.exposure.viewImage(prev);$.exposure.onPrev()}}var prevPrev=$.exposure.getPrevImage();if(prevPrev!==null){$$.addToLoadQueue(prevPrev)}},playSlideshow:function(){if(!$$.playingSlideshow){if($.exposure.slideshowControlsTarget){$('.exposurePlaySlideshow').hide();$('.exposurePauseSlideshow').show()}$$.slideshow();$$.playingSlideshow=true}},pauseSlideshow:function(){if($$.playingSlideshow){if($.exposure.slideshowControlsTarget){$('.exposurePlaySlideshow').show();$('.exposurePauseSlideshow').hide()}$$.playingSlideshow=false;if($$.slideshowTimer){clearTimeout($$.slideshowTimer)}}},toggleSlideshow:function(){if($$.playingSlideshow){$.exposure.pauseSlideshow()}else{$.exposure.playSlideshow()}},texts:{first:"First",previous:"Prev",next:"Next",last:"Last",play:"Play slideshow",pause:"Pause slideshow"}}})})(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);
