/* ===================================================================== # # emloSlightBox 1.0 # author: http://www.emlogic.pl / kontakt@emlogic.pl || http://codecanyon.net/user/emlogic # # usage: $([selector]).emloSlightBox([options]); # ======================================================================== */ (function($){ $.fn.emloSlightBox = function(options){ var defaults = { slideShowSeconds: 5, backgroundOpacity: .7, showSpeed: 500, delay: 70, outOpacity: .7, overOpacity: 1, thumbCaptionOpacitySpeed: 400, showThumbCaptionSpeed: 400, transitions: [19, 20, 18, 11, 13, 5, 4, 3, 1, 2, 17, 19, 16, 15, 14, 12, 10, 9, 8, 7, 6], shuffleTransitions: true, backgroundClass: 'emloSlightBoxBG', contentClass: 'emloSlightBoxContent', thumbCaptionClass: 'altTag', fullCaptionClass: 'caption', counterClass: 'counter', closeClass: 'close', prevClass: 'prev', nextClass: 'next', slicesContainerClass: 'slices-container', sliceContentClass: 'slice-content', sliceClass: 'slice', playClass: 'play', pauseClass: 'pause', preloaderContainerClass: 'preloader-container', preloaderClass: 'preloader', verticalSlices: 6, horizontalSlices: 6, boxesInLine: 4, boxLines: 3, language: 'en', onComplete: '', onClose: '', onStart: '', text: { pl: { prev: 'poprzednie', next: 'następne', close: 'zamknij', play: 'autoodtwarzanie', pause: 'zatrzymaj autoodwtarzanie' }, en: { prev: 'prev', next: 'next', close: 'close', play: 'slideshow', pause: 'stop slideshow' } }, slideShow: false }, options = $.extend({}, defaults, options), esb = { softName: 'esb', author: 'http://snippets.emlogic.pl / http://www.emlogic.pl / kontakt@emlogic.pl', info: 'If you want to use it - buy it. Please.', domain: 'lightbox.emlogic.pl', objectURL: '', objects: [], objectIndex: 0, windowWidth: $(window).width(), windowHeight: $(window).height(), waitingTime: 0, isRunning: false, isMoving: false, slideShowIntervaler: function(){ if(true === options.slideShow && true === esb.isRunning){ clearTimeout(esb.slideShowInterval); if(false === esb.isMoving){ var percent = Math.floor((esb.waitingTime / (options.slideShowSeconds * 1000)) * 100); esb.waitingTime += 10; if(percent >= 100){ esb.openNext(); } $('#' + options.contentClass + ' #' + options.preloaderClass) .css({width: percent + '%'}); } esb.slideShowInterval = setTimeout(function(){ esb.slideShowIntervaler(); }, 10); } }, replaceInlineHTML: function(){ if(esb.dataType === 'inlineHTML' && false === esb.isMoving){ var newHTML = esb.slicesContainer.find(esb.objectURL + ' > *').clone(true, true); $(esb.objectURL).html(newHTML); return false; } }, close: function(){ if(options.onClose !== '' && options.onClose !== undefined){ options.onClose(); } clearTimeout(esb.errorLoad); clearTimeout(esb.clearSlicesInterval); esb.content .stop() .animate({opacity: 0, height: 0}, function(){ $(this) .html('') .remove(); }); $('#' + options.backgroundClass) .remove(); esb.replaceInlineHTML(); esb.isRunning = false; esb.isMoving = false; esb.objectURL = ''; return false; }, openNext: function(){ if(true === esb.isMoving){ return false; } ++esb.objectIndex; if(esb.objectIndex > esb.objects.length - 1){ esb.objectIndex = 0; } esb.objects[esb.objectIndex].click(); return false; }, openPrev: function(){ if(true === esb.isMoving){ return false; } --esb.objectIndex; if(esb.objectIndex < 0){ esb.objectIndex = esb.objects.length - 1; } esb.objects[esb.objectIndex].click(); return false; }, generateBackgroundAndContainer: function(){ esb.windowWidth = $(window).width(); esb.windowHeight = $(window).height(); $('#' + options.backgroundClass).remove(); $('#' + options.contentClass).remove(); $('body') .append($('
') .attr('id', options.backgroundClass) .css({opacity: options.backgroundOpacity, width: esb.windowWidth + 'px', height: esb.windowHeight + 'px'}) .on('click mousedown', function(){ esb.close(); return false; }) ) .append($('
') .attr('id', options.contentClass) .css({opacity: 0}) .animate({opacity: 1}) .append($('') .attr('class', options.prevClass) .attr('href', '#') .html(options.text[options.language].prev) .css({opacity: 0}) .on('click mousedown', function(){ esb.openPrev(); return false; }) ) .append($('') .attr('class', options.nextClass) .attr('href', '#') .html(options.text[options.language].next) .css({opacity: 0}) .on('click mousedown', function(){ esb.openNext(); return false; }) ) .append($('') .attr('class', options.closeClass) .attr('href', '#') .html(options.text[options.language].close) .on('click mousedown', function(){ esb.close(); return false; }) ) .append($('
') .attr('id', options.slicesContainerClass) ) .append($('
') .attr('class', options.fullCaptionClass) .html('') .css({opacity: 0}) ) .append($('') .attr('class', options.counterClass) .html('') .css({opacity: 0}) ) .append($('') .attr('class', options.playClass) .attr('href', '#') .html(options.text[options.language].play) .css({opacity: 0}) .on('click mousedown', function(){ esb.playPauseToggle(); return false; }) ) .append($('') .attr('class', options.pauseClass) .attr('href', '#') .html(options.text[options.language].pause) .css({opacity: 0}) .on('click mousedown', function(){ esb.playPauseToggle(); return false; }) ) .append($('
') .attr('id', options.preloaderContainerClass) .css({opacity: 0}) .css({display: 'none'}) .append($('
') .attr('id', options.preloaderClass) ) ) ); if(true === options.slideShow){ options.slideShow = false; esb.playPauseToggle(); } esb.content = $('#' + options.contentClass); esb.slicesContainer = $('#' + options.contentClass + ' #' + options.slicesContainerClass); esb.buttons = $('#' + options.contentClass + ' .' + options.closeClass + ', #' + options.contentClass + ' #' + options.preloaderContainerClass + ', #' + options.contentClass + ' .' + options.prevClass + ', #' + options.contentClass + ' .' + options.nextClass + ', #' + options.contentClass + ' .' + options.playClass + ', #' + options.contentClass + ' .' + options.pauseClass + ', #' + options.contentClass + ' .' + options.fullCaptionClass + ', #' + options.contentClass + ' .' + options.counterClass); if(esb.objects.length <= 1){ $('#' + options.contentClass + ' #' + options.preloaderContainerClass + ', #' + options.contentClass + ' .' + options.prevClass + ', #' + options.contentClass + ' .' + options.nextClass + ', #' + options.contentClass + ' .' + options.playClass + ', #' + options.contentClass + ' .' + options.pauseClass + ', #' + options.contentClass + ' .' + options.counterClass) .remove(); } $(document).keydown(function(e){ if(true === esb.isRunning){ if(e.keyCode === 27){ esb.close(); return false; } if(e.keyCode === 32){ esb.playPauseToggle(); return false; } if(e.keyCode === 39){ esb.openNext(); return false; } if(e.keyCode === 37){ esb.openPrev(); return false; } } }); $(window).resize(function(){ esb.windowWidth = $(window).width(); esb.windowHeight = $(window).height(); $('#' + options.backgroundClass).css({width: esb.windowWidth + 'px', height: esb.windowHeight + 'px'}); }); if(options.onStart !== '' && options.onStart !== undefined){ options.onStart(); } return false; }, openPhoto: function(link){ if(true === esb.isMoving){ return false; } if($(link).attr('href') === esb.objectURL){ return false; } esb.waitingTime = 0; $('#' + options.contentClass + ' #' + options.preloaderClass) .animate({width: 0}, options.showSpeed); esb.replaceInlineHTML(); esb.isMoving = true; if(false === esb.isRunning){ esb.generateBackgroundAndContainer(); } esb.isRunning = true; esb.errorLoad = setTimeout(function(){ esb.isMoving = false; }, 5000); esb.slicesContainer .stop() .animate({opacity: 0}, options.showSpeed, function(){ $(this).html(''); esb.objectURL = $(link).attr('href'); esb.objectIndex = $(link).data('index'); esb.caption = $(link).attr('title'); esb.dataToSlice = ''; esb.dataType = $(link).data('type'); if(esb.objectURL.substring(0, 1) === '#'){ esb.dataType = 'inlineHTML'; } esb.link = $(link); switch(esb.dataType){ case 'ajax': $.ajax({ url: esb.objectURL }).done(function(data){ esb.dataToSlice = $(data); }); break; case 'inlineHTML': esb.dataToSlice = $(esb.objectURL); break; case 'iframe': var width = $(link).data('width'), height = $(link).data('height'); if(width === '' || width === undefined){ width = esb.windowWidth /2; } if(height === '' || height === undefined){ height = esb.windowHeight / 2; } esb.dataToSlice = $('