summaryrefslogtreecommitdiffstats
path: root/apps/gallery/js/supersized.3.2.7.js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/gallery/js/supersized.3.2.7.js')
-rw-r--r--apps/gallery/js/supersized.3.2.7.js930
1 files changed, 930 insertions, 0 deletions
diff --git a/apps/gallery/js/supersized.3.2.7.js b/apps/gallery/js/supersized.3.2.7.js
new file mode 100644
index 00000000000..f5a1c0bbc2d
--- /dev/null
+++ b/apps/gallery/js/supersized.3.2.7.js
@@ -0,0 +1,930 @@
+/*
+
+ Supersized - Fullscreen Slideshow jQuery Plugin
+ Version : 3.2.7
+ Site : www.buildinternet.com/project/supersized
+
+ Author : Sam Dunn
+ Company : One Mighty Roar (www.onemightyroar.com)
+ License : MIT License / GPL License
+
+*/
+
+(function($){
+
+ /* Place Supersized Elements
+ ----------------------------*/
+ $(document).ready(function() {
+ $('body').append('<div id="supersized-loader"></div><ul id="supersized"></ul>');
+ });
+
+
+ $.supersized = function(options){
+
+ /* Variables
+ ----------------------------*/
+ var el = '#supersized',
+ base = this;
+ // Access to jQuery and DOM versions of element
+ base.$el = $(el);
+ base.el = el;
+ vars = $.supersized.vars;
+ // Add a reverse reference to the DOM object
+ base.$el.data("supersized", base);
+ api = base.$el.data('supersized');
+
+ base.init = function(){
+ // Combine options and vars
+ $.supersized.vars = $.extend($.supersized.vars, $.supersized.themeVars);
+ $.supersized.vars.options = $.extend({},$.supersized.defaultOptions, $.supersized.themeOptions, options);
+ base.options = $.supersized.vars.options;
+
+ base._build();
+ };
+
+
+ /* Build Elements
+ ----------------------------*/
+ base._build = function(){
+ // Add in slide markers
+ var thisSlide = 0,
+ slideSet = '',
+ markers = '',
+ markerContent,
+ thumbMarkers = '',
+ thumbImage;
+
+ while(thisSlide <= base.options.slides.length-1){
+ //Determine slide link content
+ switch(base.options.slide_links){
+ case 'num':
+ markerContent = thisSlide;
+ break;
+ case 'name':
+ markerContent = base.options.slides[thisSlide].title;
+ break;
+ case 'blank':
+ markerContent = '';
+ break;
+ }
+
+ slideSet = slideSet+'<li class="slide-'+thisSlide+'"></li>';
+
+ if(thisSlide == base.options.start_slide-1){
+ // Slide links
+ if (base.options.slide_links)markers = markers+'<li class="slide-link-'+thisSlide+' current-slide"><a>'+markerContent+'</a></li>';
+ // Slide Thumbnail Links
+ if (base.options.thumb_links){
+ base.options.slides[thisSlide].thumb ? thumbImage = base.options.slides[thisSlide].thumb : thumbImage = base.options.slides[thisSlide].image;
+ thumbMarkers = thumbMarkers+'<li class="thumb'+thisSlide+' current-thumb"><img src="'+thumbImage+'"/></li>';
+ };
+ }else{
+ // Slide links
+ if (base.options.slide_links) markers = markers+'<li class="slide-link-'+thisSlide+'" ><a>'+markerContent+'</a></li>';
+ // Slide Thumbnail Links
+ if (base.options.thumb_links){
+ base.options.slides[thisSlide].thumb ? thumbImage = base.options.slides[thisSlide].thumb : thumbImage = base.options.slides[thisSlide].image;
+ thumbMarkers = thumbMarkers+'<li class="thumb'+thisSlide+'"><img src="'+thumbImage+'"/></li>';
+ };
+ }
+ thisSlide++;
+ }
+
+ if (base.options.slide_links) $(vars.slide_list).html(markers);
+ if (base.options.thumb_links && vars.thumb_tray.length){
+ $(vars.thumb_tray).append('<ul id="'+vars.thumb_list.replace('#','')+'">'+thumbMarkers+'</ul>');
+ }
+
+ $(base.el).append(slideSet);
+
+ // Add in thumbnails
+ if (base.options.thumbnail_navigation){
+ // Load previous thumbnail
+ vars.current_slide - 1 < 0 ? prevThumb = base.options.slides.length - 1 : prevThumb = vars.current_slide - 1;
+ $(vars.prev_thumb).show().html($("<img/>").attr("src", base.options.slides[prevThumb].image));
+
+ // Load next thumbnail
+ vars.current_slide == base.options.slides.length - 1 ? nextThumb = 0 : nextThumb = vars.current_slide + 1;
+ $(vars.next_thumb).show().html($("<img/>").attr("src", base.options.slides[nextThumb].image));
+ }
+
+ base._start(); // Get things started
+ };
+
+
+ /* Initialize
+ ----------------------------*/
+ base._start = function(){
+
+ // Determine if starting slide random
+ if (base.options.start_slide){
+ vars.current_slide = base.options.start_slide - 1;
+ }else{
+ vars.current_slide = Math.floor(Math.random()*base.options.slides.length); // Generate random slide number
+ }
+
+ // If links should open in new window
+ var linkTarget = base.options.new_window ? ' target="_blank"' : '';
+
+ // Set slideshow quality (Supported only in FF and IE, no Webkit)
+ if (base.options.performance == 3){
+ base.$el.addClass('speed'); // Faster transitions
+ } else if ((base.options.performance == 1) || (base.options.performance == 2)){
+ base.$el.addClass('quality'); // Higher image quality
+ }
+
+ // Shuffle slide order if needed
+ if (base.options.random){
+ arr = base.options.slides;
+ for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i), x = arr[--i], arr[i] = arr[j], arr[j] = x); // Fisher-Yates shuffle algorithm (jsfromhell.com/array/shuffle)
+ base.options.slides = arr;
+ }
+
+ /*-----Load initial set of images-----*/
+
+ if (base.options.slides.length > 1){
+ if(base.options.slides.length > 2){
+ // Set previous image
+ vars.current_slide - 1 < 0 ? loadPrev = base.options.slides.length - 1 : loadPrev = vars.current_slide - 1; // If slide is 1, load last slide as previous
+ var imageLink = (base.options.slides[loadPrev].url) ? "href='" + base.options.slides[loadPrev].url + "'" : "";
+
+ var imgPrev = $('<img src="'+base.options.slides[loadPrev].image+'"/>');
+ var slidePrev = base.el+' li:eq('+loadPrev+')';
+ imgPrev.appendTo(slidePrev).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading prevslide');
+
+ imgPrev.load(function(){
+ $(this).data('origWidth', $(this).width()).data('origHeight', $(this).height());
+ base.resizeNow(); // Resize background image
+ }); // End Load
+ }
+ } else {
+ // Slideshow turned off if there is only one slide
+ base.options.slideshow = 0;
+ }
+
+ // Set current image
+ imageLink = (api.getField('url')) ? "href='" + api.getField('url') + "'" : "";
+ var img = $('<img src="'+api.getField('image')+'"/>');
+
+ var slideCurrent= base.el+' li:eq('+vars.current_slide+')';
+ img.appendTo(slideCurrent).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading activeslide');
+
+ img.load(function(){
+ base._origDim($(this));
+ base.resizeNow(); // Resize background image
+ base.launch();
+ if( typeof theme != 'undefined' && typeof theme._init == "function" ) theme._init(); // Load Theme
+ });
+
+ if (base.options.slides.length > 1){
+ // Set next image
+ vars.current_slide == base.options.slides.length - 1 ? loadNext = 0 : loadNext = vars.current_slide + 1; // If slide is last, load first slide as next
+ imageLink = (base.options.slides[loadNext].url) ? "href='" + base.options.slides[loadNext].url + "'" : "";
+
+ var imgNext = $('<img src="'+base.options.slides[loadNext].image+'"/>');
+ var slideNext = base.el+' li:eq('+loadNext+')';
+ imgNext.appendTo(slideNext).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading');
+
+ imgNext.load(function(){
+ $(this).data('origWidth', $(this).width()).data('origHeight', $(this).height());
+ base.resizeNow(); // Resize background image
+ }); // End Load
+ }
+ /*-----End load initial images-----*/
+
+ // Hide elements to be faded in
+ base.$el.css('visibility','hidden');
+ $('.load-item').hide();
+
+ };
+
+
+ /* Launch Supersized
+ ----------------------------*/
+ base.launch = function(){
+
+ base.$el.css('visibility','visible');
+ $('#supersized-loader').remove(); //Hide loading animation
+
+ // Call theme function for before slide transition
+ if( typeof theme != 'undefined' && typeof theme.beforeAnimation == "function" ) theme.beforeAnimation('next');
+ $('.load-item').show();
+
+ // Keyboard Navigation
+ if (base.options.keyboard_nav){
+ $(document.documentElement).keyup(function (event) {
+
+ if(vars.in_animation) return false; // Abort if currently animating
+
+ // Left Arrow or Down Arrow
+ if ((event.keyCode == 37) || (event.keyCode == 40)) {
+ clearInterval(vars.slideshow_interval); // Stop slideshow, prevent buildup
+ base.prevSlide();
+
+ // Right Arrow or Up Arrow
+ } else if ((event.keyCode == 39) || (event.keyCode == 38)) {
+ clearInterval(vars.slideshow_interval); // Stop slideshow, prevent buildup
+ base.nextSlide();
+
+ // Spacebar
+ } else if (event.keyCode == 32 && !vars.hover_pause) {
+ clearInterval(vars.slideshow_interval); // Stop slideshow, prevent buildup
+ base.playToggle();
+ }
+
+ });
+ }
+
+ // Pause when hover on image
+ if (base.options.slideshow && base.options.pause_hover){
+ $(base.el).hover(function() {
+ if(vars.in_animation) return false; // Abort if currently animating
+ vars.hover_pause = true; // Mark slideshow paused from hover
+ if(!vars.is_paused){
+ vars.hover_pause = 'resume'; // It needs to resume afterwards
+ base.playToggle();
+ }
+ }, function() {
+ if(vars.hover_pause == 'resume'){
+ base.playToggle();
+ vars.hover_pause = false;
+ }
+ });
+ }
+
+ if (base.options.slide_links){
+ // Slide marker clicked
+ $(vars.slide_list+'> li').click(function(){
+
+ index = $(vars.slide_list+'> li').index(this);
+ targetSlide = index + 1;
+
+ base.goTo(targetSlide);
+ return false;
+
+ });
+ }
+
+ // Thumb marker clicked
+ if (base.options.thumb_links){
+ $(vars.thumb_list+'> li').click(function(){
+
+ index = $(vars.thumb_list+'> li').index(this);
+ targetSlide = index + 1;
+
+ api.goTo(targetSlide);
+ return false;
+
+ });
+ }
+
+ // Start slideshow if enabled
+ if (base.options.slideshow && base.options.slides.length > 1){
+
+ // Start slideshow if autoplay enabled
+ if (base.options.autoplay && base.options.slides.length > 1){
+ vars.slideshow_interval = setInterval(base.nextSlide, base.options.slide_interval); // Initiate slide interval
+ }else{
+ vars.is_paused = true; // Mark as paused
+ }
+
+ //Prevent navigation items from being dragged
+ $('.load-item img').bind("contextmenu mousedown",function(){
+ return false;
+ });
+
+ }
+
+ // Adjust image when browser is resized
+ $(window).resize(function(){
+ base.resizeNow();
+ });
+
+ };
+
+
+ /* Resize Images
+ ----------------------------*/
+ base.resizeNow = function(){
+
+ return base.$el.each(function() {
+ // Resize each image seperately
+ $('img', base.el).each(function(){
+
+ thisSlide = $(this);
+ var ratio = (thisSlide.data('origHeight')/thisSlide.data('origWidth')).toFixed(2); // Define image ratio
+
+ // Gather browser size
+ var browserwidth = base.$el.width(),
+ browserheight = base.$el.height(),
+ offset;
+
+ /*-----Resize Image-----*/
+ if (base.options.fit_always){ // Fit always is enabled
+ if ((browserheight/browserwidth) > ratio){
+ resizeWidth();
+ } else {
+ resizeHeight();
+ }
+ }else{ // Normal Resize
+ if ((browserheight <= base.options.min_height) && (browserwidth <= base.options.min_width)){ // If window smaller than minimum width and height
+
+ if ((browserheight/browserwidth) > ratio){
+ base.options.fit_landscape && ratio < 1 ? resizeWidth(true) : resizeHeight(true); // If landscapes are set to fit
+ } else {
+ base.options.fit_portrait && ratio >= 1 ? resizeHeight(true) : resizeWidth(true); // If portraits are set to fit
+ }
+
+ } else if (browserwidth <= base.options.min_width){ // If window only smaller than minimum width
+
+ if ((browserheight/browserwidth) > ratio){
+ base.options.fit_landscape && ratio < 1 ? resizeWidth(true) : resizeHeight(); // If landscapes are set to fit
+ } else {
+ base.options.fit_portrait && ratio >= 1 ? resizeHeight() : resizeWidth(true); // If portraits are set to fit
+ }
+
+ } else if (browserheight <= base.options.min_height){ // If window only smaller than minimum height
+
+ if ((browserheight/browserwidth) > ratio){
+ base.options.fit_landscape && ratio < 1 ? resizeWidth() : resizeHeight(true); // If landscapes are set to fit
+ } else {
+ base.options.fit_portrait && ratio >= 1 ? resizeHeight(true) : resizeWidth(); // If portraits are set to fit
+ }
+
+ } else { // If larger than minimums
+
+ if ((browserheight/browserwidth) > ratio){
+ base.options.fit_landscape && ratio < 1 ? resizeWidth() : resizeHeight(); // If landscapes are set to fit
+ } else {
+ base.options.fit_portrait && ratio >= 1 ? resizeHeight() : resizeWidth(); // If portraits are set to fit
+ }
+
+ }
+ }
+ /*-----End Image Resize-----*/
+
+
+ /*-----Resize Functions-----*/
+
+ function resizeWidth(minimum){
+ if (minimum){ // If minimum height needs to be considered
+ if(thisSlide.width() < browserwidth || thisSlide.width() < base.options.min_width ){
+ if (thisSlide.width() * ratio >= base.options.min_height){
+ thisSlide.width(base.options.min_width);
+ thisSlide.height(thisSlide.width() * ratio);
+ }else{
+ resizeHeight();
+ }
+ }
+ }else{
+ if (base.options.min_height >= browserheight && !base.options.fit_landscape){ // If minimum height needs to be considered
+ if (browserwidth * ratio >= base.options.min_height || (browserwidth * ratio >= base.options.min_height && ratio <= 1)){ // If resizing would push below minimum height or image is a landscape
+ thisSlide.width(browserwidth);
+ thisSlide.height(browserwidth * ratio);
+ } else if (ratio > 1){ // Else the image is portrait
+ thisSlide.height(base.options.min_height);
+ thisSlide.width(thisSlide.height() / ratio);
+ } else if (thisSlide.width() < browserwidth) {
+ thisSlide.width(browserwidth);
+ thisSlide.height(thisSlide.width() * ratio);
+ }
+ }else{ // Otherwise, resize as normal
+ thisSlide.width(browserwidth);
+ thisSlide.height(browserwidth * ratio);
+ }
+ }
+ };
+
+ function resizeHeight(minimum){
+ if (minimum){ // If minimum height needs to be considered
+ if(thisSlide.height() < browserheight){
+ if (thisSlide.height() / ratio >= base.options.min_width){
+ thisSlide.height(base.options.min_height);
+ thisSlide.width(thisSlide.height() / ratio);
+ }else{
+ resizeWidth(true);
+ }
+ }
+ }else{ // Otherwise, resized as normal
+ if (base.options.min_width >= browserwidth){ // If minimum width needs to be considered
+ if (browserheight / ratio >= base.options.min_width || ratio > 1){ // If resizing would push below minimum width or image is a portrait
+ thisSlide.height(browserheight);
+ thisSlide.width(browserheight / ratio);
+ } else if (ratio <= 1){ // Else the image is landscape
+ thisSlide.width(base.options.min_width);
+ thisSlide.height(thisSlide.width() * ratio);
+ }
+ }else{ // Otherwise, resize as normal
+ thisSlide.height(browserheight);
+ thisSlide.width(browserheight / ratio);
+ }
+ }
+ };
+
+ /*-----End Resize Functions-----*/
+
+ if (thisSlide.parents('li').hasClass('image-loading')){
+ $('.image-loading').removeClass('image-loading');
+ }
+
+ // Horizontally Center
+ if (base.options.horizontal_center){
+ $(this).css('left', (browserwidth - $(this).width())/2);
+ }
+
+ // Vertically Center
+ if (base.options.vertical_center){
+ $(this).css('top', (browserheight - $(this).height())/2);
+ }
+
+ });
+
+ // Basic image drag and right click protection
+ if (base.options.image_protect){
+
+ $('img', base.el).bind("contextmenu mousedown",function(){
+ return false;
+ });
+
+ }
+
+ return false;
+
+ });
+
+ };
+
+
+ /* Next Slide
+ ----------------------------*/
+ base.nextSlide = function(){
+
+ if(vars.in_animation || !api.options.slideshow) return false; // Abort if currently animating
+ else vars.in_animation = true; // Otherwise set animation marker
+
+ clearInterval(vars.slideshow_interval); // Stop slideshow
+
+ var slides = base.options.slides, // Pull in slides array
+ liveslide = base.$el.find('.activeslide'); // Find active slide
+ $('.prevslide').removeClass('prevslide');
+ liveslide.removeClass('activeslide').addClass('prevslide'); // Remove active class & update previous slide
+
+ // Get the slide number of new slide
+ vars.current_slide + 1 == base.options.slides.length ? vars.current_slide = 0 : vars.current_slide++;
+
+ var nextslide = $(base.el+' li:eq('+vars.current_slide+')'),
+ prevslide = base.$el.find('.prevslide');
+
+ // If hybrid mode is on drop quality for transition
+ if (base.options.performance == 1) base.$el.removeClass('quality').addClass('speed');
+
+
+ /*-----Load Image-----*/
+
+ loadSlide = false;
+
+ vars.current_slide == base.options.slides.length - 1 ? loadSlide = 0 : loadSlide = vars.current_slide + 1; // Determine next slide
+
+ var targetList = base.el+' li:eq('+loadSlide+')';
+ if (!$(targetList).html()){
+
+ // If links should open in new window
+ var linkTarget = base.options.new_window ? ' target="_blank"' : '';
+
+ imageLink = (base.options.slides[loadSlide].url) ? "href='" + base.options.slides[loadSlide].url + "'" : ""; // If link exists, build it
+ var img = $('<img src="'+base.options.slides[loadSlide].image+'"/>');
+
+ img.appendTo(targetList).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading').css('visibility','hidden');
+
+ img.load(function(){
+ base._origDim($(this));
+ base.resizeNow();
+ }); // End Load
+ };
+
+ // Update thumbnails (if enabled)
+ if (base.options.thumbnail_navigation == 1){
+
+ // Load previous thumbnail
+ vars.current_slide - 1 < 0 ? prevThumb = base.options.slides.length - 1 : prevThumb = vars.current_slide - 1;
+ $(vars.prev_thumb).html($("<img/>").attr("src", base.options.slides[prevThumb].image));
+
+ // Load next thumbnail
+ nextThumb = loadSlide;
+ $(vars.next_thumb).html($("<img/>").attr("src", base.options.slides[nextThumb].image));
+
+ }
+
+
+
+ /*-----End Load Image-----*/
+
+
+ // Call theme function for before slide transition
+ if( typeof theme != 'undefined' && typeof theme.beforeAnimation == "function" ) theme.beforeAnimation('next');
+
+ //Update slide markers
+ if (base.options.slide_links){
+ $('.current-slide').removeClass('current-slide');
+ $(vars.slide_list +'> li' ).eq(vars.current_slide).addClass('current-slide');
+ }
+
+ nextslide.css('visibility','hidden').addClass('activeslide'); // Update active slide
+
+ switch(base.options.transition){
+ case 0: case 'none': // No transition
+ nextslide.css('visibility','visible'); vars.in_animation = false; base.afterAnimation();
+ break;
+ case 1: case 'fade': // Fade
+ nextslide.animate({opacity : 0},0).css('visibility','visible').animate({opacity : 1, avoidTransforms : false}, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 2: case 'slideTop': // Slide Top
+ nextslide.animate({top : -base.$el.height()}, 0 ).css('visibility','visible').animate({ top:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 3: case 'slideRight': // Slide Right
+ nextslide.animate({left : base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 4: case 'slideBottom': // Slide Bottom
+ nextslide.animate({top : base.$el.height()}, 0 ).css('visibility','visible').animate({ top:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 5: case 'slideLeft': // Slide Left
+ nextslide.animate({left : -base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 6: case 'carouselRight': // Carousel Right
+ nextslide.animate({left : base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ liveslide.animate({ left: -base.$el.width(), avoidTransforms : false }, base.options.transition_speed );
+ break;
+ case 7: case 'carouselLeft': // Carousel Left
+ nextslide.animate({left : -base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ liveslide.animate({ left: base.$el.width(), avoidTransforms : false }, base.options.transition_speed );
+ break;
+ }
+ return false;
+ };
+
+
+ /* Previous Slide
+ ----------------------------*/
+ base.prevSlide = function(){
+
+ if(vars.in_animation || !api.options.slideshow) return false; // Abort if currently animating
+ else vars.in_animation = true; // Otherwise set animation marker
+
+ clearInterval(vars.slideshow_interval); // Stop slideshow
+
+ var slides = base.options.slides, // Pull in slides array
+ liveslide = base.$el.find('.activeslide'); // Find active slide
+ $('.prevslide').removeClass('prevslide');
+ liveslide.removeClass('activeslide').addClass('prevslide'); // Remove active class & update previous slide
+
+ // Get current slide number
+ vars.current_slide == 0 ? vars.current_slide = base.options.slides.length - 1 : vars.current_slide-- ;
+
+ var nextslide = $(base.el+' li:eq('+vars.current_slide+')'),
+ prevslide = base.$el.find('.prevslide');
+
+ // If hybrid mode is on drop quality for transition
+ if (base.options.performance == 1) base.$el.removeClass('quality').addClass('speed');
+
+
+ /*-----Load Image-----*/
+
+ loadSlide = vars.current_slide;
+
+ var targetList = base.el+' li:eq('+loadSlide+')';
+ if (!$(targetList).html()){
+ // If links should open in new window
+ var linkTarget = base.options.new_window ? ' target="_blank"' : '';
+ imageLink = (base.options.slides[loadSlide].url) ? "href='" + base.options.slides[loadSlide].url + "'" : ""; // If link exists, build it
+ var img = $('<img src="'+base.options.slides[loadSlide].image+'"/>');
+
+ img.appendTo(targetList).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading').css('visibility','hidden');
+
+ img.load(function(){
+ base._origDim($(this));
+ base.resizeNow();
+ }); // End Load
+ };
+
+ // Update thumbnails (if enabled)
+ if (base.options.thumbnail_navigation == 1){
+
+ // Load previous thumbnail
+ //prevThumb = loadSlide;
+ loadSlide == 0 ? prevThumb = base.options.slides.length - 1 : prevThumb = loadSlide - 1;
+ $(vars.prev_thumb).html($("<img/>").attr("src", base.options.slides[prevThumb].image));
+
+ // Load next thumbnail
+ vars.current_slide == base.options.slides.length - 1 ? nextThumb = 0 : nextThumb = vars.current_slide + 1;
+ $(vars.next_thumb).html($("<img/>").attr("src", base.options.slides[nextThumb].image));
+ }
+
+ /*-----End Load Image-----*/
+
+
+ // Call theme function for before slide transition
+ if( typeof theme != 'undefined' && typeof theme.beforeAnimation == "function" ) theme.beforeAnimation('prev');
+
+ //Update slide markers
+ if (base.options.slide_links){
+ $('.current-slide').removeClass('current-slide');
+ $(vars.slide_list +'> li' ).eq(vars.current_slide).addClass('current-slide');
+ }
+
+ nextslide.css('visibility','hidden').addClass('activeslide'); // Update active slide
+
+ switch(base.options.transition){
+ case 0: case 'none': // No transition
+ nextslide.css('visibility','visible'); vars.in_animation = false; base.afterAnimation();
+ break;
+ case 1: case 'fade': // Fade
+ nextslide.animate({opacity : 0},0).css('visibility','visible').animate({opacity : 1, avoidTransforms : false}, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 2: case 'slideTop': // Slide Top (reverse)
+ nextslide.animate({top : base.$el.height()}, 0 ).css('visibility','visible').animate({ top:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 3: case 'slideRight': // Slide Right (reverse)
+ nextslide.animate({left : -base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 4: case 'slideBottom': // Slide Bottom (reverse)
+ nextslide.animate({top : -base.$el.height()}, 0 ).css('visibility','visible').animate({ top:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 5: case 'slideLeft': // Slide Left (reverse)
+ nextslide.animate({left : base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 6: case 'carouselRight': // Carousel Right (reverse)
+ nextslide.animate({left : -base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ liveslide.animate({left : 0}, 0 ).animate({ left: base.$el.width(), avoidTransforms : false}, base.options.transition_speed );
+ break;
+ case 7: case 'carouselLeft': // Carousel Left (reverse)
+ nextslide.animate({left : base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ liveslide.animate({left : 0}, 0 ).animate({ left: -base.$el.width(), avoidTransforms : false }, base.options.transition_speed );
+ break;
+ }
+ return false;
+ };
+
+
+ /* Play/Pause Toggle
+ ----------------------------*/
+ base.playToggle = function(){
+
+ if (vars.in_animation || !api.options.slideshow) return false; // Abort if currently animating
+
+ if (vars.is_paused){
+
+ vars.is_paused = false;
+
+ // Call theme function for play
+ if( typeof theme != 'undefined' && typeof theme.playToggle == "function" ) theme.playToggle('play');
+
+ // Resume slideshow
+ vars.slideshow_interval = setInterval(base.nextSlide, base.options.slide_interval);
+
+ }else{
+
+ vars.is_paused = true;
+
+ // Call theme function for pause
+ if( typeof theme != 'undefined' && typeof theme.playToggle == "function" ) theme.playToggle('pause');
+
+ // Stop slideshow
+ clearInterval(vars.slideshow_interval);
+
+ }
+
+ return false;
+
+ };
+
+
+ /* Go to specific slide
+ ----------------------------*/
+ base.goTo = function(targetSlide){
+ if (vars.in_animation || !api.options.slideshow) return false; // Abort if currently animating
+
+ var totalSlides = base.options.slides.length;
+
+ // If target outside range
+ if(targetSlide < 0){
+ targetSlide = totalSlides;
+ }else if(targetSlide > totalSlides){
+ targetSlide = 1;
+ }
+ targetSlide = totalSlides - targetSlide + 1;
+
+ clearInterval(vars.slideshow_interval); // Stop slideshow, prevent buildup
+
+ // Call theme function for goTo trigger
+ if (typeof theme != 'undefined' && typeof theme.goTo == "function" ) theme.goTo();
+
+ if (vars.current_slide == totalSlides - targetSlide){
+ if(!(vars.is_paused)){
+ vars.slideshow_interval = setInterval(base.nextSlide, base.options.slide_interval);
+ }
+ return false;
+ }
+
+ // If ahead of current position
+ if(totalSlides - targetSlide > vars.current_slide ){
+
+ // Adjust for new next slide
+ vars.current_slide = totalSlides-targetSlide-1;
+ vars.update_images = 'next';
+ base._placeSlide(vars.update_images);
+
+ //Otherwise it's before current position
+ }else if(totalSlides - targetSlide < vars.current_slide){
+
+ // Adjust for new prev slide
+ vars.current_slide = totalSlides-targetSlide+1;
+ vars.update_images = 'prev';
+ base._placeSlide(vars.update_images);
+
+ }
+
+ // set active markers
+ if (base.options.slide_links){
+ $(vars.slide_list +'> .current-slide').removeClass('current-slide');
+ $(vars.slide_list +'> li').eq((totalSlides-targetSlide)).addClass('current-slide');
+ }
+
+ if (base.options.thumb_links){
+ $(vars.thumb_list +'> .current-thumb').removeClass('current-thumb');
+ $(vars.thumb_list +'> li').eq((totalSlides-targetSlide)).addClass('current-thumb');
+ }
+
+ };
+
+
+ /* Place Slide
+ ----------------------------*/
+ base._placeSlide = function(place){
+
+ // If links should open in new window
+ var linkTarget = base.options.new_window ? ' target="_blank"' : '';
+
+ loadSlide = false;
+
+ if (place == 'next'){
+
+ vars.current_slide == base.options.slides.length - 1 ? loadSlide = 0 : loadSlide = vars.current_slide + 1; // Determine next slide
+
+ var targetList = base.el+' li:eq('+loadSlide+')';
+
+ if (!$(targetList).html()){
+ // If links should open in new window
+ var linkTarget = base.options.new_window ? ' target="_blank"' : '';
+
+ imageLink = (base.options.slides[loadSlide].url) ? "href='" + base.options.slides[loadSlide].url + "'" : ""; // If link exists, build it
+ var img = $('<img src="'+base.options.slides[loadSlide].image+'"/>');
+
+ img.appendTo(targetList).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading').css('visibility','hidden');
+
+ img.load(function(){
+ base._origDim($(this));
+ base.resizeNow();
+ }); // End Load
+ };
+
+ base.nextSlide();
+
+ }else if (place == 'prev'){
+
+ vars.current_slide - 1 < 0 ? loadSlide = base.options.slides.length - 1 : loadSlide = vars.current_slide - 1; // Determine next slide
+
+ var targetList = base.el+' li:eq('+loadSlide+')';
+
+ if (!$(targetList).html()){
+ // If links should open in new window
+ var linkTarget = base.options.new_window ? ' target="_blank"' : '';
+
+ imageLink = (base.options.slides[loadSlide].url) ? "href='" + base.options.slides[loadSlide].url + "'" : ""; // If link exists, build it
+ var img = $('<img src="'+base.options.slides[loadSlide].image+'"/>');
+
+ img.appendTo(targetList).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading').css('visibility','hidden');
+
+ img.load(function(){
+ base._origDim($(this));
+ base.resizeNow();
+ }); // End Load
+ };
+ base.prevSlide();
+ }
+
+ };
+
+
+ /* Get Original Dimensions
+ ----------------------------*/
+ base._origDim = function(targetSlide){
+ targetSlide.data('origWidth', targetSlide.width()).data('origHeight', targetSlide.height());
+ };
+
+
+ /* After Slide Animation
+ ----------------------------*/
+ base.afterAnimation = function(){
+
+ // If hybrid mode is on swap back to higher image quality
+ if (base.options.performance == 1){
+ base.$el.removeClass('speed').addClass('quality');
+ }
+
+ // Update previous slide
+ if (vars.update_images){
+ vars.current_slide - 1 < 0 ? setPrev = base.options.slides.length - 1 : setPrev = vars.current_slide-1;
+ vars.update_images = false;
+ $('.prevslide').removeClass('prevslide');
+ $(base.el+' li:eq('+setPrev+')').addClass('prevslide');
+ }
+
+ vars.in_animation = false;
+
+ // Resume slideshow
+ if (!vars.is_paused && base.options.slideshow){
+ vars.slideshow_interval = setInterval(base.nextSlide, base.options.slide_interval);
+ if (base.options.stop_loop && vars.current_slide == base.options.slides.length - 1 ) base.playToggle();
+ }
+
+ // Call theme function for after slide transition
+ if (typeof theme != 'undefined' && typeof theme.afterAnimation == "function" ) theme.afterAnimation();
+
+ return false;
+
+ };
+
+ base.getField = function(field){
+ return base.options.slides[vars.current_slide][field];
+ };
+
+ // Make it go!
+ base.init();
+ };
+
+
+ /* Global Variables
+ ----------------------------*/
+ $.supersized.vars = {
+
+ // Elements
+ thumb_tray : '#thumb-tray', // Thumbnail tray
+ thumb_list : '#thumb-list', // Thumbnail list
+ slide_list : '#slide-list', // Slide link list
+
+ // Internal variables
+ current_slide : 0, // Current slide number
+ in_animation : false, // Prevents animations from stacking
+ is_paused : false, // Tracks paused on/off
+ hover_pause : false, // If slideshow is paused from hover
+ slideshow_interval : false, // Stores slideshow timer
+ update_images : false, // Trigger to update images after slide jump
+ options : {} // Stores assembled options list
+
+ };
+
+
+ /* Default Options
+ ----------------------------*/
+ $.supersized.defaultOptions = {
+
+ // Functionality
+ slideshow : 1, // Slideshow on/off
+ autoplay : 1, // Slideshow starts playing automatically
+ start_slide : 1, // Start slide (0 is random)
+ stop_loop : 0, // Stops slideshow on last slide
+ random : 0, // Randomize slide order (Ignores start slide)
+ slide_interval : 5000, // Length between transitions
+ transition : 1, // 0-None, 1-Fade, 2-Slide Top, 3-Slide Right, 4-Slide Bottom, 5-Slide Left, 6-Carousel Right, 7-Carousel Left
+ transition_speed : 750, // Speed of transition
+ new_window : 1, // Image links open in new window/tab
+ pause_hover : 0, // Pause slideshow on hover
+ keyboard_nav : 1, // Keyboard navigation on/off
+ performance : 1, // 0-Normal, 1-Hybrid speed/quality, 2-Optimizes image quality, 3-Optimizes transition speed // (Only works for Firefox/IE, not Webkit)
+ image_protect : 1, // Disables image dragging and right click with Javascript
+
+ // Size & Position
+ fit_always : 0, // Image will never exceed browser width or height (Ignores min. dimensions)
+ fit_landscape : 0, // Landscape images will not exceed browser width
+ fit_portrait : 1, // Portrait images will not exceed browser height
+ min_width : 0, // Min width allowed (in pixels)
+ min_height : 0, // Min height allowed (in pixels)
+ horizontal_center : 1, // Horizontally center background
+ vertical_center : 1, // Vertically center background
+
+
+ // Components
+ slide_links : 1, // Individual links for each slide (Options: false, 'num', 'name', 'blank')
+ thumb_links : 1, // Individual thumb links for each slide
+ thumbnail_navigation : 0 // Thumbnail navigation
+
+ };
+
+ $.fn.supersized = function(options){
+ return this.each(function(){
+ (new $.supersized(options));
+ });
+ };
+
+})(jQuery);
+