Files
CyberPanel/static/baseTemplate/assets/widgets/layerslider/layerslider.js
2019-06-08 21:41:43 +00:00

5165 lines
203 KiB
JavaScript
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* LayerSlider
*
* (c) 2011-2014 George Krupa, John Gera & Kreatura Media
*
* Plugin web: http://kreaturamedia.com/
* licenses: http://codecanyon.net/licenses/
*/
function lsShowNotice(lsobj,issue,ver){
var el;
if( typeof lsobj == 'string' ){
el = jQuery('#'+lsobj);
}else if( typeof lsobj == 'object' ){
el = lsobj;
}
var errorTitle, errorText;
switch(issue){
case 'jquery':
errorTitle = 'multiple jQuery issue';
errorText = 'It looks like that another plugin or your theme loads an extra copy of the jQuery library causing problems for LayerSlider to show your sliders. <strong>Please navigate on your WordPress admin area to the main page of LayerSlider and enable the "Put JS includes to body" option within the Troubleshooting & Advanced Settings box.</strong>';
break;
case 'oldjquery':
errorTitle = 'old jQuery issue';
errorText = 'It looks like you are using an old version ('+ver+') of the jQuery library. LayerSlider requires at least version 1.7.0 or newer. Please update jQuery to 1.10.x or higher. Important: Please do not use the jQuery Updater plugin on WordPress and do not update to 2.x version of jQuery because it is not compatible with older browsers like IE 7 & 8. <a href="http://support.kreaturamedia.com/faq/4/layerslider-for-wordpress/#group-13&entry-60">You can read more about updating jQuery by clicking here.</a>';
break;
}
el.addClass('ls-error');
el.append('<p class="ls-exclam">!</p>');
el.append('<p class="ls-error-title">LayerSlider: '+errorTitle+'</p>');
el.append('<p class="ls-error-text">'+errorText+'</p>');
}
(function($) {
$.fn.layerSlider = function( options ){
// IMPROVEMENT v4.1.0 Checking jQuery version
// IMPROVEMENT v4.1.3 Changed required version from 1.7.2 to 1.7.0
var reqVer = '1.7.0';
var curVer = $.fn.jquery;
var el = $(this);
var checkVersions = function(v1,v2){
var v1parts = v1.split('.');
var v2parts = v2.split('.');
for (var i = 0; i < v1parts.length; ++i) {
if (v2parts.length == i) {
return false;
}
if(parseInt(v1parts[i]) == parseInt(v2parts[i])){
continue;
}else if (parseInt(v1parts[i]) > parseInt(v2parts[i])){
return false;
}else{
return true;
}
}
if (v1parts.length != v2parts.length) {
return true;
}
return true;
};
if( !checkVersions('1.8.0',curVer) ){
el.addClass('ls-norotate');
}
// Initializing if jQuery version is greater than 1.7.0
if( !checkVersions(reqVer,curVer) ){
lsShowNotice( el, 'oldjquery', curVer );
}else{
if( (typeof(options)).match('object|undefined') ){
return this.each(function(i){
new layerSlider(this, options);
});
}else{
if( options === 'data' ){
var lsData = $(this).data('LayerSlider').g;
if( lsData ){
return lsData;
}
// NEW FEATURES v5.2.0 option to get userInitData & defaultInitData
}else if( options === 'userInitData' ){
var lsInitData = $(this).data('LayerSlider').o;
if( lsInitData ){
return lsInitData;
}
}else if( options === 'defaultInitData' ){
var lsInitData = $(this).data('LayerSlider').defaults;
if( lsInitData ){
return lsInitData;
}
}else{
return this.each(function(i){
// Control functions: prev, next, start, stop & change
var lsData = $(this).data('LayerSlider');
if( lsData ){
if( !lsData.g.isAnimating && !lsData.g.isLoading ){
if( typeof options == 'number' ){
if( options > 0 && options < lsData.g.layersNum + 1 && options != lsData.g.curLayerIndex ){
lsData.change(options);
}
}else{
switch(options){
case 'prev':
lsData.o.cbPrev(lsData.g);
lsData.prev('clicked');
break;
case 'next':
lsData.o.cbNext(lsData.g);
lsData.next('clicked');
break;
case 'start':
if( !lsData.g.autoSlideshow ){
lsData.o.cbStart(lsData.g);
lsData.g.originalAutoSlideshow = true;
lsData.start();
}
break;
}
}
}
// if( options === 'debug' ){
// lsData.d.show();
// }
if( options === 'redraw' ){
lsData.resize();
}
if( ( lsData.g.autoSlideshow || ( !lsData.g.autoSlideshow && lsData.g.originalAutoSlideshow ) ) && options == 'stop' ){
lsData.o.cbStop(lsData.g);
lsData.g.originalAutoSlideshow = false;
lsData.g.curLayer.find('iframe[src*="youtube.com"], iframe[src*="youtu.be"], iframe[src*="player.vimeo"]').each(function(){
// Clearing videoTimeouts
clearTimeout( $(this).data( 'videoTimer') );
});
lsData.stop();
}
if( options == 'forceStop'){
lsData.forcestop();
}
}
});
}
}
}
};
// LayerSlider methods
var layerSlider = function(el, options) {
var ls = this;
ls.$el = $(el).addClass('ls-container');
ls.$el.data('LayerSlider', ls);
ls.load = function(){
// Setting options (user settings) and global (not modificable) parameters
ls.defaults = layerSlider.options;
ls.o = $.extend({},ls.defaults, options);
ls.g = $.extend({},layerSlider.global);
ls.lt = $.extend({},layerSlider.layerTransitions );
ls.st = $.extend({},layerSlider.slideTransitions );
ls.g.enableCSS3 = $(el).hasClass('ls-norotate') ? false : true;
// NEW FEATURE v5.2.0 saving original HTML Markup
ls.g.originalMarkup = $(el).html();
if( ls.g.ie78 ){
ls.o.lazyLoad = false;
}
// WP parameters
if( ls.o.autoPauseSlideshow === 'enabled' ){
ls.o.autoPauseSlideshow = true;
}
if( ls.o.autoPauseSlideshow === 'disabled' ){
ls.o.autoPauseSlideshow = false;
}
// If layerslider.transitions.js is loaded...
if( typeof layerSliderTransitions !== 'undefined' ){
ls.t = $.extend({},layerSliderTransitions);
}
// If custom transitions are loaded...
if( typeof layerSliderCustomTransitions !== 'undefined' ){
ls.ct = $.extend({},layerSliderCustomTransitions);
}
// NEW IMPROVEMENT v3.6 forbid to call the init code more than once on the same element
if( !ls.g.initialized ){
ls.g.initialized = true;
// Added debug mode v3.5
// ls.debug();
if( $('html').find('meta[content*="WordPress"]').length ){
ls.g.wpVersion = $('html').find('meta[content*="WordPress"]').attr('content').split('WordPress')[1];
}
if( $('html').find('script[src*="layerslider"]').length ){
if( $('html').find('script[src*="layerslider"]').attr('src').indexOf('?') != -1 ){
ls.g.lswpVersion = $('html').find('script[src*="layerslider"]').attr('src').split('?')[1].split('=')[1];
}
}
// Debug mode controls
// ls.d.aT('LayerSlider controls');
// ls.d.aU('<a href="#">prev</a> | <a href="#">next</a> | <a href="#">start</a> | <a href="#">stop</a> | <a href="#">force stop</a>');
// ls.d.history.find('a').each(function(){
// $(this).click(function(e){
// e.preventDefault();
// $(el).layerSlider($(this).text());
// });
// });
// ls.d.aT('LayerSlider version information');
// ls.d.aU('JS version: <strong>' + ls.g.version + '</strong>');
// if(ls.g.lswpVersion){
// ls.d.aL('WP version: <strong>' + ls.g.lswpVersion + '</strong>');
// }
// if(ls.g.wpVersion){
// ls.d.aL('WordPress version: <strong>' + ls.g.wpVersion + '</strong>');
// }
// ls.d.aL('jQuery version: <strong>' + $().jquery + '</strong>');
// if( $(el).attr('id') ){
// ls.d.aT('LayerSlider container');
// ls.d.aU('#'+$(el).attr('id'));
// }
// NEW LOAD METHOD v3.5
// FIXED v4.0 If the selected skin is already loaded, calling the ls.init() function immediately
if( !ls.o.skin || ls.o.skin == '' || !ls.o.skinsPath || ls.o.skinsPath == '' ){
// ls.d.aT('Loading without skin. Possibilities: mistyped skin and / or skinsPath.');
ls.init();
}else{
// ls.d.aT('Trying to load with skin: '+ls.o.skin, true);
// Applying skin
$(el).addClass('ls-'+ls.o.skin);
var skinStyle = ls.o.skinsPath+ls.o.skin+'/skin.css';
cssContainer = $('head');
if( !$('head').length ){
cssContainer = $('body');
}
if( $('link[href="'+skinStyle+'"]').length ){
// ls.d.aU('Skin "'+ls.o.skin+'" is already loaded.');
curSkin = $('link[href="'+skinStyle+'"]');
if( !ls.g.loaded ){
ls.g.loaded = true;
// IMPROVEMENT v4.5.0 Added delay because of caching bugs
ls.g.t1 = setTimeout(function(){
ls.init();
},150);
}
}else{
if (document.createStyleSheet){
document.createStyleSheet(skinStyle);
var curSkin = $('link[href="'+skinStyle+'"]');
}else{
var curSkin = $('<link rel="stylesheet" href="'+skinStyle+'" type="text/css" />').appendTo( cssContainer );
}
}
// curSkin.load(); function for most of the browsers.
curSkin.load(function(){
if( !ls.g.loaded ){
// ls.d.aU('curSkin.load(); fired');
ls.g.loaded = true;
// IMPROVEMENT v4.5.0 Added delay because of caching bugs
ls.g.t2 = setTimeout(function(){
ls.init();
},150);
}
});
// $(window).load(); function for older webkit ( < v536 ).
$(window).load(function(){
if( !ls.g.loaded ){
// ls.d.aU('$(window).load(); fired');
ls.g.loaded = true;
// IMPROVEMENT v4.5.0 Added delay because of caching bugs
ls.g.t3 = setTimeout(function(){
ls.init();
},150);
}
});
// Fallback: if $(window).load(); not fired in 2 secs after $(document).ready(),
// curSkin.load(); not fired at all or the name of the skin and / or the skinsPath
// mistyped, we must call the init function manually.
ls.g.t4 = setTimeout( function(){
if( !ls.g.loaded ){
// ls.d.aT('Fallback mode: Neither curSkin.load(); or $(window).load(); were fired');
ls.g.loaded = true;
ls.init();
}
}, 1000);
}
}
};
ls.init = function(){
// NEW FEATURE v5.5.0 Appending the slider element into the element specified in appendTo
$(el).prependTo( $( ls.o.appendTo ) );
// IMPROVEMENT v4.0.1 Trying to add special ID to <body> or <html> (required to overwrite WordPresss global styles)
if( !$('html').attr('id') ){
$('html').attr('id','ls-global');
}else if( !$('body').attr('id') ){
$('body').attr('id','ls-global');
}
// NEW FEATURES v5.5.0 Hiding the slider on mobile devices, smaller resolutions
// or changing it to a static but responsive image
if( ls.g.isMobile() === true && ls.o.hideOnMobile === true ){
$(el).addClass('ls-forcehide');
$(el).closest('.ls-wp-fullwidth-container').addClass('ls-forcehide');
}
var showHide = function(){
if( ls.o.hideOnMobile === true && ls.g.isMobile() === true ){
$(el).addClass('ls-forcehide');
$(el).closest('.ls-wp-fullwidth-container').addClass('ls-forcehide');
ls.o.autoStart = false;
}else{
if( $(window).width() < ls.o.hideUnder || $(window).width() > ls.o.hideOver ){
$(el).addClass('ls-forcehide');
$(el).closest('.ls-wp-fullwidth-container').addClass('ls-forcehide');
}else{
$(el).removeClass('ls-forcehide');
$(el).closest('.ls-wp-fullwidth-container').removeClass('ls-forcehide');
}
}
};
$(window).resize( function(){
showHide();
});
showHide();
// NEW FEATURE v1.7 making the slider responsive
ls.g.sliderWidth = function(){
return $(el).width();
}
ls.g.sliderHeight = function(){
return $(el).height();
}
// Compatibility mode v5.0.0
// .ls-layer -> .ls-slide
// .ls-s -> .ls-l
$(el).find('.ls-layer').removeClass('ls-layer').addClass('ls-slide');
$(el).find('.ls-slide > *[class*="ls-s"]').each(function(){
var oldDistanceNum = $(this).attr('class').split('ls-s')[1].split(' ')[0];
$(this).removeClass('ls-s'+oldDistanceNum).addClass('ls-l'+oldDistanceNum);
});
if( ls.o.firstLayer ){
ls.o.firstSlide = ls.o.firstLayer;
}
if( ls.o.animateFirstLayer === false ){
ls.o.animateFirstSlide = false;
}
// REPLACED FEATURE v2.0 If there is only ONE layer, instead of duplicating it, turning off slideshow and loops, hiding all controls, etc.
if( $(el).find('.ls-slide').length == 1 ){
ls.o.autoStart = false;
ls.o.navPrevNext = false;
ls.o.navStartStop = false;
ls.o.navButtons = false;
ls.o.loops = 0;
ls.o.forceLoopNum = false;
ls.o.autoPauseSlideshow = true;
ls.o.firstSlide = 1;
ls.o.thumbnailNavigation = 'disabled';
}
// IMPROVEMENT v5.2.0 the original width of a full width slider should be always 100% even if the user forgot to set that value
// BUGFIX v5.3.0 An additional check required (with the original improvement full-width sliders with "normal" responsiveness couldn't be created)
if( $(el).parent().hasClass('ls-wp-fullwidth-helper') && ls.o.responsiveUnder !== 0 ){
$(el)[0].style.width = '100%';
}
// NEW FEATURE v3.0 added "normal" responsive mode with image and font resizing
// NEW FEATURE v3.5 responsiveUnder
if( ls.o.width ){
ls.g.sliderOriginalWidthRU = ls.g.sliderOriginalWidth = '' + ls.o.width;
}else{
ls.g.sliderOriginalWidthRU = ls.g.sliderOriginalWidth = $(el)[0].style.width;
}
if( ls.o.height ){
ls.g.sliderOriginalHeight = '' + ls.o.height;
}else{
ls.g.sliderOriginalHeight = $(el)[0].style.height;
}
if( ls.g.sliderOriginalWidth.indexOf('%') == -1 && ls.g.sliderOriginalWidth.indexOf('px') == -1 ){
ls.g.sliderOriginalWidth += 'px';
}
if( ls.g.sliderOriginalHeight.indexOf('%') == -1 && ls.g.sliderOriginalHeight.indexOf('px') == -1 ){
ls.g.sliderOriginalHeight += 'px';
}
if( ls.o.responsive && ls.g.sliderOriginalWidth.indexOf('px') != -1 && ls.g.sliderOriginalHeight.indexOf('px') != -1 ){
ls.g.responsiveMode = true;
}else{
ls.g.responsiveMode = false;
}
// NEW FEATURE v5.5.0 We must overwrite some user settings if fullScreen mode is enabled
if( ls.o.fullScreen === true ){
ls.o.responsiveUnder = 0;
ls.g.responsiveMode = true;
if( ls.g.sliderOriginalWidth.indexOf('%') != -1 ){
ls.g.sliderOriginalWidth = parseInt( ls.g.sliderOriginalWidth) + 'px';
}
if( ls.g.sliderOriginalHeight.indexOf('%') != -1 ){
ls.g.sliderOriginalHeight = parseInt( ls.g.sliderOriginalHeight) + 'px';
}
}
// IMPROVEMENT v3.0 preventing WordPress to wrap your sublayers in <code> or <p> elements
$(el).find('*[class*="ls-l"], *[class*="ls-bg"]').each(function(){
if( !$(this).parent().hasClass('ls-slide') ){
$(this).insertBefore( $(this).parent() );
}
});
$(el).find('.ls-slide').each(function(){
$(this).children(':not([class*="ls-"])').each(function(){
$(this).remove();
});
var hd = $('<div>').addClass('ls-gpuhack');
if( $(this).find('.ls-bg').length ){
hd.insertAfter( $(this).find('.ls-bg').eq('0') );
}else{
hd.prependTo( $(this) );
}
});
$(el).find('.ls-slide, *[class*="ls-l"]').each(function(){
if( $(this).data('ls') || $(this).attr('rel') || $(this).attr('style') ){
if( $(this).data('ls') ){
var params = $(this).data('ls').toLowerCase().split(';');
}else if( $(this).attr('rel') && $(this).attr('rel').indexOf(':') != -1 && $(this).attr('rel').indexOf(';') != -1 ){
var params = $(this).attr('rel').toLowerCase().split(';');
}else{
var params = $(this).attr('style').toLowerCase().split(';');
}
for(x=0;x<params.length;x++){
param = params[x].split(':');
if( param[0].indexOf('easing') != -1 ){
param[1] = ls.ieEasing( param[1] );
}
var p2 = '';
if( param[2] ){
p2 = ':'+$.trim(param[2]);
}
if( param[0] != ' ' && param[0] != '' ){
$(this).data( $.trim(param[0]), $.trim(param[1]) + p2 );
}
}
}
// NEW FEATURE v5.2.0 Starts the slider only if it is in the viewport
if( ls.o.startInViewport === true && ls.o.autoStart === true ){
ls.o.autoStart = false;
ls.g.originalAutoStart = true;
}
// NEW FEATURE v1.7 and v3.0 making the slider responsive - we have to use style.left instead of jQuery's .css('left') function!
var sl = $(this);
sl.data( 'originalLeft', sl[0].style.left );
sl.data( 'originalTop', sl[0].style.top );
if( $(this).is('a') && $(this).children().length > 0 ){
sl = $(this).children();
}
var _w = sl.width();
var _h = sl.height();
if( sl[0].style.width && sl[0].style.width.indexOf('%') != -1 ){
_w = sl[0].style.width;
}
if( sl[0].style.height && sl[0].style.height.indexOf('%') != -1 ){
_h = sl[0].style.height;
}
sl.data( 'originalWidth', _w );
sl.data( 'originalHeight', _h );
sl.data( 'originalPaddingLeft', sl.css('padding-left') );
sl.data( 'originalPaddingRight', sl.css('padding-right') );
sl.data( 'originalPaddingTop', sl.css('padding-top') );
sl.data( 'originalPaddingBottom', sl.css('padding-bottom') );
// iOS fade bug when GPU acceleration is enabled #1
var _o = typeof parseFloat( sl.css('opacity') ) == 'number' ? Math.round( parseFloat( sl.css('opacity') ) * 100 ) / 100 : 1;
$(this).data( 'originalOpacity', _o );
if( sl.css('border-left-width').indexOf('px') == -1 ){
sl.data( 'originalBorderLeft', sl[0].style.borderLeftWidth );
}else{
sl.data( 'originalBorderLeft', sl.css('border-left-width') );
}
if( sl.css('border-right-width').indexOf('px') == -1 ){
sl.data( 'originalBorderRight', sl[0].style.borderRightWidth );
}else{
sl.data( 'originalBorderRight', sl.css('border-right-width') );
}
if( sl.css('border-top-width').indexOf('px') == -1 ){
sl.data( 'originalBorderTop', sl[0].style.borderTopWidth );
}else{
sl.data( 'originalBorderTop', sl.css('border-top-width') );
}
if( sl.css('border-bottom-width').indexOf('px') == -1 ){
sl.data( 'originalBorderBottom', sl[0].style.borderBottomWidth );
}else{
sl.data( 'originalBorderBottom', sl.css('border-bottom-width') );
}
sl.data( 'originalFontSize', sl.css('font-size') );
sl.data( 'originalLineHeight', sl.css('line-height') );
});
// CHANGED FEATURE v3.5 url- / deep linking layers
if( document.location.hash ){
for( var dl = 0; dl < $(el).find('.ls-slide').length; dl++ ){
if( $(el).find('.ls-slide').eq(dl).data('deeplink') == document.location.hash.split('#')[1] ){
ls.o.firstSlide = dl+1;
}
}
}
// NEW FEATURE v2.0 linkTo
$(el).find('*[class*="ls-linkto-"]').each(function(){
var lClasses = $(this).attr('class').split(' ');
for( var ll=0; ll<lClasses.length; ll++ ){
if( lClasses[ll].indexOf('ls-linkto-') != -1 ){
var linkTo = parseInt( lClasses[ll].split('ls-linkto-')[1] );
$(this).css({
cursor: 'pointer'
}).click(function(e){
e.preventDefault();
$(el).layerSlider( linkTo );
});
}
}
});
// Setting variables
ls.g.layersNum = $(el).find('.ls-slide').length;
// NEW FEATURE v3.5 randomSlideshow
if( ls.o.randomSlideshow && ls.g.layersNum > 2 ){
ls.o.firstSlide == 'random';
ls.o.twoWaySlideshow = false;
}else{
ls.o.randomSlideshow = false;
}
// NEW FEATURE v3.0 random firstSlide
if( ls.o.firstSlide == 'random' ){
ls.o.firstSlide = Math.floor(Math.random() * ls.g.layersNum+1);
}
ls.o.fisrtSlide = ls.o.fisrtSlide < ls.g.layersNum + 1 ? ls.o.fisrtSlide : 1;
ls.o.fisrtSlide = ls.o.fisrtSlide < 1 ? 1 : ls.o.fisrtSlide;
// NEW FEATURE v2.0 loops
ls.g.nextLoop = 1;
if( ls.o.animateFirstSlide ){
ls.g.nextLoop = 0;
}
// NEW FEATURE v2.0 videoPreview
// IMPROVEMENT v4.6.0 http / https support of embedded videos
var HTTP = document.location.href.indexOf('file:') === -1 ? '' : 'http:';
// Youtube videos
$(el).find('iframe[src*="youtube.com"], iframe[src*="youtu.be"]').each(function(){
// BUGFIX v4.1.0 Firefox embedded video fix
$(this).parent().addClass('ls-video-layer');
if( $(this).parent('[class*="ls-l"]') ){
var iframe = $(this);
var http = HTTP;
// Getting thumbnail
$.getJSON( http + '//gdata.youtube.com/feeds/api/videos/' + $(this).attr('src').split('embed/')[1].split('?')[0] + '?v=2&alt=json&callback=?', function(data) {
iframe.data( 'videoDuration', parseInt(data['entry']['media$group']['yt$duration']['seconds']) * 1000 );
});
var vpContainer = $('<div>').addClass('ls-vpcontainer').appendTo( $(this).parent() );
// if( ls.o.lazyLoad ){
// $('<img>').appendTo( vpContainer ).addClass('ls-videopreview').attr('alt', 'Play video').data('src', http + '//img.youtube.com/vi/' + $(this).attr('src').split('embed/')[1].split('?')[0] + '/' + ls.o.youtubePreview );
// }else{
$('<img>').appendTo( vpContainer ).addClass('ls-videopreview').attr('alt', 'Play video').attr('src', http + '//img.youtube.com/vi/' + $(this).attr('src').split('embed/')[1].split('?')[0] + '/' + ls.o.youtubePreview );
// }
$('<div>').appendTo( vpContainer ).addClass('ls-playvideo');
$(this).parent().css({
width : $(this).width(),
height : $(this).height()
}).click(function(){
// IMPROVEMENT v5.2.0 if video playing is in progress, video layers with auto play will skip showuntil feature
if( $(this).data('showuntil') > 0 && $(this).data('showUntilTimer') ){
clearTimeout( $(this).data('showUntilTimer') );
}
ls.g.isAnimating = true;
if( ls.g.paused ){
if( ls.o.autoPauseSlideshow != false ){
ls.g.paused = false;
}
ls.g.originalAutoSlideshow = true;
}else{
ls.g.originalAutoSlideshow = ls.g.autoSlideshow;
}
if( ls.o.autoPauseSlideshow != false ){
ls.stop();
}
ls.g.pausedByVideo = true;
http = $(this).find('iframe').data('videoSrc').indexOf('http') === -1 ? HTTP : '';
$(this).find('iframe').attr('src', http + $(this).find('iframe').data('videoSrc') );
$(this).find('.ls-vpcontainer').delay(ls.g.v.d).fadeOut(ls.g.v.fo, function(){
if( ls.o.autoPauseSlideshow == 'auto' && ls.g.originalAutoSlideshow == true ){
var videoTimer = setTimeout(function() {
ls.start();
}, iframe.data( 'videoDuration') - ls.g.v.d );
iframe.data( 'videoTimer', videoTimer );
}
ls.g.isAnimating = false;
if( ls.g.resize == true ){
ls.makeResponsive( ls.g.curLayer, function(){
ls.g.resize = false;
});
}
});
});
var sep = '&';
if( $(this).attr('src').indexOf('?') == -1 ){
sep = '?';
}
// BUGFIX v5.1.0 Fixed several issues with embedded videos (mostly under Firefox and IE)
// fixed 'only audio but no video' bug, fixed 'unclickable video controls' bug, fixed 'hidden slider controls' bug
var videoFix = '&wmode=opaque&html5=1';
// BUGFIX v5.1.0 Fixed autoplay parameter
if( $(this).attr('src').indexOf('autoplay') == -1 ){
$(this).data( 'videoSrc', $(this).attr('src') + sep + 'autoplay=1' + videoFix );
}else{
$(this).data( 'videoSrc', $(this).attr('src').replace('autoplay=0','autoplay=1') + videoFix );
}
$(this).data( 'originalWidth', $(this).attr('width') );
$(this).data( 'originalHeight', $(this).attr('height') );
$(this).attr('src','');
}
});
// Vimeo videos
$(el).find('iframe[src*="player.vimeo"]').each(function(){
// BUGFIX v4.1.0 Firefox embedded video fix
$(this).parent().addClass('ls-video-layer');
if( $(this).parent('[class*="ls-l"]') ){
var iframe = $(this);
var http = HTTP;
// Getting thumbnail
var vpContainer = $('<div>').addClass('ls-vpcontainer').appendTo( $(this).parent() );
$.getJSON( http + '//vimeo.com/api/v2/video/'+ ( $(this).attr('src').split('video/')[1].split('?')[0] ) +'.json?callback=?', function(data){
// if( ls.o.lazyLoad ){
// $('<img>').appendTo( vpContainer ).addClass('ls-videopreview').attr('alt', 'Play video').data('src', data[0]['thumbnail_large'] );
// }else{
$('<img>').appendTo( vpContainer ).addClass('ls-videopreview').attr('alt', 'Play video').attr('src', data[0]['thumbnail_large'] );
// }
iframe.data( 'videoDuration', parseInt( data[0]['duration'] ) * 1000 );
$('<div>').appendTo( vpContainer ).addClass('ls-playvideo');
});
$(this).parent().css({
width : $(this).width(),
height : $(this).height()
}).click(function(){
// IMPROVEMENT v5.2.0 if video playing is in progress, video layers with auto play will skip showuntil feature
if( $(this).data('showuntil') > 0 && $(this).data('showUntilTimer') ){
clearTimeout( $(this).data('showUntilTimer') );
}
ls.g.isAnimating = true;
if( ls.g.paused ){
if( ls.o.autoPauseSlideshow != false ){
ls.g.paused = false;
}
ls.g.originalAutoSlideshow = true;
}else{
ls.g.originalAutoSlideshow = ls.g.autoSlideshow;
}
if( ls.o.autoPauseSlideshow != false ){
ls.stop();
}
ls.g.pausedByVideo = true;
http = $(this).find('iframe').data('videoSrc').indexOf('http') === -1 ? HTTP : '';
$(this).find('iframe').attr('src', http + $(this).find('iframe').data('videoSrc') );
$(this).find('.ls-vpcontainer').delay(ls.g.v.d).fadeOut(ls.g.v.fo, function(){
if( ls.o.autoPauseSlideshow == 'auto' && ls.g.originalAutoSlideshow == true ){
var videoTimer = setTimeout(function() {
ls.start();
}, iframe.data( 'videoDuration') - ls.g.v.d );
iframe.data( 'videoTimer', videoTimer );
}
ls.g.isAnimating = false;
if( ls.g.resize == true ){
ls.makeResponsive( ls.g.curLayer, function(){
ls.g.resize = false;
});
}
});
});
var sep = '&';
if( $(this).attr('src').indexOf('?') == -1 ){
sep = '?';
}
// BUGFIX v5.1.0 Fixed several issues with embedded videos (mostly under Firefox and IE)
// fixed 'only audio but no video' bug, fixed 'unclickable video controls' bug, fixed 'hidden slider controls' bug
var videoFix = '&wmode=opaque';
// BUGFIX v5.1.0 Fixed autoplay parameter
if( $(this).attr('src').indexOf('autoplay') == -1 ){
$(this).data( 'videoSrc', $(this).attr('src') + sep + 'autoplay=1' + videoFix );
}else{
$(this).data( 'videoSrc', $(this).attr('src').replace('autoplay=0','autoplay=1') + videoFix );
}
$(this).data( 'originalWidth', $(this).attr('width') );
$(this).data( 'originalHeight', $(this).attr('height') );
$(this).attr('src','');
}
});
// NEW FEATURE v5.0.0 HTML5 Video Support
$(el).find('video, audio').each(function(){
// BUGFIX v5.1.0 fixed HTML5 video sizing issue (again :)
var ow = typeof $(this).attr('width') !== 'undefined' ? $(this).attr('width') : '640';
var oh = typeof $(this).attr('height') !== 'undefined' ? $(this).attr('height') : '' + $(this).height();
if( ow.indexOf('%') === -1 ){
ow = parseInt( ow );
}
if( oh.indexOf('%') === -1 ){
oh = parseInt( oh );
}
if( ow === '100%' && ( oh === 0 || oh === '0' || oh === '100%' ) ){
$(this).attr('height', '100%');
oh = 'auto';
}
$(this).parent().addClass('ls-video-layer').css({
width : ow,
height : oh
}).data({
originalWidth : ow,
originalHeight : oh
});
var curVideo = $(this);
// BUGFIX v5.3.0 'ended' function removed from 'click' function due to multiply
$(this).on('ended', function(){
if( ls.o.autoPauseSlideshow === 'auto' && ls.g.originalAutoSlideshow === true ){
ls.start();
}
});
$(this).removeAttr('width').removeAttr('height').css({
width : '100%',
height : '100%'
}).click(function(e){
// BUGFIX v5.3.0 autoplay didn't work in all cases
if( !ls.g.pausedByVideo ){
if( this.paused ){
e.preventDefault();
}
this.play();
ls.g.isAnimating = true;
if( ls.g.paused ){
if( ls.o.autoPauseSlideshow !== false ){
ls.g.paused = false;
}
ls.g.originalAutoSlideshow = true;
}else{
ls.g.originalAutoSlideshow = ls.g.autoSlideshow;
}
if( ls.o.autoPauseSlideshow !== false ){
ls.stop();
}
ls.g.pausedByVideo = true;
ls.g.isAnimating = false;
if( ls.g.resize === true ){
ls.makeResponsive( ls.g.curLayer, function(){
ls.g.resize = false;
});
}
}
});
});
// NEW FEATURE v1.7 animating first layer
if( ls.o.animateFirstSlide ){
ls.o.firstSlide = ls.o.firstSlide - 1 === 0 ? ls.g.layersNum : ls.o.firstSlide-1;
}
ls.g.curLayerIndex = ls.o.firstSlide;
ls.g.curLayer = $(el).find('.ls-slide:eq('+(ls.g.curLayerIndex-1)+')');
// Moving all layers to .ls-inner container
$(el).find('.ls-slide').wrapAll('<div class="ls-inner"></div>');
// NEW FEATURE v4.5.0 Timers
if( ls.o.showBarTimer ){
ls.g.barTimer = $('<div>').addClass('ls-bar-timer').appendTo( $(el).find('.ls-inner') );
}
if( ls.o.showCircleTimer && !ls.g.ie78 ){
ls.g.circleTimer = $('<div>').addClass('ls-circle-timer').appendTo( $(el).find('.ls-inner') );
ls.g.circleTimer.append( $('<div class="ls-ct-left"><div class="ls-ct-rotate"><div class="ls-ct-hider"><div class="ls-ct-half"></div></div></div></div><div class="ls-ct-right"><div class="ls-ct-rotate"><div class="ls-ct-hider"><div class="ls-ct-half"></div></div></div></div><div class="ls-ct-center"></div>') );
}
// NEW FEATURE v4.0 Adding loading indicator into the element
ls.g.li = $('<div>').css({
zIndex: -1,
display: 'none'
}).addClass('ls-loading-container').appendTo( $(el) );
$('<div>').addClass('ls-loading-indicator').appendTo( ls.g.li );
// Adding styles
if( $(el).css('position') == 'static' ){
$(el).css('position','relative');
}
// IMPROVEMENT & BUGFIX v4.6.0 Fixed transparent global background issue under IE7 & IE8
if( ls.o.globalBGImage ){
$(el).find('.ls-inner').css({
backgroundImage : 'url('+ls.o.globalBGImage+')'
});
}else{
$(el).find('.ls-inner').css({
backgroundColor : ls.o.globalBGColor
});
}
if( ls.o.globalBGColor == 'transparent' && ls.o.globalBGImage == false ){
$(el).find('.ls-inner').css({
background : 'none transparent !important'
});
}
// NEW FEATURES v5.0.0 Lazy-load & remove unnecessary width & height attributes from images
$(el).find('.ls-slide img').each(function(){
$(this).removeAttr('width').removeAttr('height');
if( ls.o.imgPreload === true && ls.o.lazyLoad === true ){
if( typeof $(this).data('src') !== 'string' ){
$(this).data('src', $(this).attr('src') );
var src = ls.o.skinsPath+'../css/blank.gif';
$(this).attr('src',src);
}
}else{
if( typeof $(this).data('src') === 'string' ){
$(this).attr('src',$(this).data('src'));
$(this).removeAttr('data-src');
}
}
});
// NEW FEATURE v5.0.0 Parallax layers by mousemove
$(el).find('.ls-slide').on('mouseenter',function(e){
ls.g.parallaxStartX = e.pageX - $(this).parent().offset().left;
ls.g.parallaxStartY = e.pageY - $(this).parent().offset().top;
});
$(el).find('.ls-slide').on('mousemove',function(e){
var mX0 = $(this).parent().offset().left + ls.g.parallaxStartX;
var mY0 = $(this).parent().offset().top + ls.g.parallaxStartY;
var mX = e.pageX - mX0;
var mY = e.pageY - mY0;
$(this).find('> *:not(.ls-bg)').each(function(){
if( typeof $(this).data('parallaxlevel') !== 'undefined' && parseInt( $(this).data('parallaxlevel') ) !== 0 ){
$(this).css({
marginLeft : -mX / 100 * parseInt( $(this).data('parallaxlevel') ),
marginTop : -mY / 100 * parseInt( $(this).data('parallaxlevel') )
});
}
});
});
$(el).find('.ls-slide').on('mouseleave',function(){
$(this).find('> *:not(.ls-bg)').each(function(){
if( typeof $(this).data('parallaxlevel') !== 'undefined' && parseInt( $(this).data('parallaxlevel') ) !== 0 ){
TweenLite.to( this, .4, {css:{
marginLeft : 0,
marginTop : 0
}
});
}
});
});
// Creating navigation
if( ls.o.navPrevNext ){
$('<a class="ls-nav-prev" href="#" />').click(function(e){
e.preventDefault();
$(el).layerSlider('prev');
}).appendTo($(el));
$('<a class="ls-nav-next" href="#" />').click(function(e){
e.preventDefault();
$(el).layerSlider('next');
}).appendTo($(el));
if( ls.o.hoverPrevNext ){
$(el).find('.ls-nav-prev, .ls-nav-next').css({
display: 'none'
});
$(el).hover(
function(){
if( !ls.g.forceHideControls ){
if( ls.g.ie78 ){
$(el).find('.ls-nav-prev, .ls-nav-next').css('display','block');
}else{
$(el).find('.ls-nav-prev, .ls-nav-next').stop(true,true).fadeIn(300);
}
}
},
function(){
if( ls.g.ie78 ){
$(el).find('.ls-nav-prev, .ls-nav-next').css('display','none');
}else{
$(el).find('.ls-nav-prev, .ls-nav-next').stop(true,true).fadeOut(300);
}
}
);
}
}
// Creating bottom navigation
if( ls.o.navStartStop || ls.o.navButtons ){
var bottomNav = $('<div class="ls-bottom-nav-wrapper" />').appendTo( $(el) );
ls.g.bottomWrapper = bottomNav;
if( ls.o.thumbnailNavigation == 'always' ){
bottomNav.addClass('ls-above-thumbnails');
}
if( ls.o.navButtons && ls.o.thumbnailNavigation != 'always' ){
$('<span class="ls-bottom-slidebuttons" />').appendTo( $(el).find('.ls-bottom-nav-wrapper') );
// NEW FEATURE v3.5 thumbnailNavigation ('hover')
if( ls.o.thumbnailNavigation == 'hover' ){
var thumbs = $('<div class="ls-thumbnail-hover"><div class="ls-thumbnail-hover-inner"><div class="ls-thumbnail-hover-bg"></div><div class="ls-thumbnail-hover-img"><img></div><span></span></div></div>').appendTo( $(el).find('.ls-bottom-slidebuttons') );
}
for(x=1;x<ls.g.layersNum+1;x++){
var btn = $('<a href="#" />').appendTo( $(el).find('.ls-bottom-slidebuttons') ).click(function(e){
e.preventDefault();
$(el).layerSlider( ($(this).index() + 1) );
});
// NEW FEATURE v3.5 thumbnailNavigation ('hover')
if( ls.o.thumbnailNavigation == 'hover' ){
$(el).find('.ls-thumbnail-hover, .ls-thumbnail-hover-img').css({
width : ls.o.tnWidth,
height : ls.o.tnHeight
});
var th = $(el).find('.ls-thumbnail-hover');
var ti = th.find('img').css({
height : ls.o.tnHeight
});
var thi = $(el).find('.ls-thumbnail-hover-inner').css({
visibility : 'hidden',
display: 'block'
});
btn.hover(
function(){
var hoverLayer = $(el).find('.ls-slide').eq( $(this).index() );
var tnSrc;
if( ls.o.imgPreload === true && ls.o.lazyLoad === true ){
if( hoverLayer.find('.ls-tn').length ){
tnSrc = hoverLayer.find('.ls-tn').data('src');
}else if( hoverLayer.find('.ls-videopreview').length ){
tnSrc = hoverLayer.find('.ls-videopreview').attr('src');
}else if( hoverLayer.find('.ls-bg').length ){
tnSrc = hoverLayer.find('.ls-bg').data('src');
}else{
tnSrc = ls.o.skinsPath+ls.o.skin+'/nothumb.png';
}
}else{
if( hoverLayer.find('.ls-tn').length ){
tnSrc = hoverLayer.find('.ls-tn').attr('src');
}else if( hoverLayer.find('.ls-videopreview').length ){
tnSrc = hoverLayer.find('.ls-videopreview').attr('src');
}else if( hoverLayer.find('.ls-bg').length ){
tnSrc = hoverLayer.find('.ls-bg').attr('src');
}else{
tnSrc = ls.o.skinsPath+ls.o.skin+'/nothumb.png';
}
}
$(el).find('.ls-thumbnail-hover-img').css({
left: parseInt( th.css('padding-left') ),
top: parseInt( th.css('padding-top') )
});
ti.load(function(){
if( $(this).width() == 0 ){
ti.css({
position: 'relative',
margin: '0 auto',
left: 'auto'
});
}else{
ti.css({
position: 'absolute',
marginLeft : - $(this).width() / 2,
left: '50%'
});
}
}).attr( 'src', tnSrc );
th.css({
display: 'block'
}).stop().animate({
left: $(this).position().left + ( $(this).width() - th.outerWidth() ) / 2
}, 250 );
thi.css({
display : 'none',
visibility : 'visible'
}).stop().fadeIn(250);
},
function(){
thi.stop().fadeOut(250, function(){
th.css({
visibility : 'hidden',
display: 'block'
});
});
}
);
}
}
if( ls.o.thumbnailNavigation == 'hover' ){
thumbs.appendTo( $(el).find('.ls-bottom-slidebuttons') );
}
$(el).find('.ls-bottom-slidebuttons a:eq('+(ls.o.firstSlide-1)+')').addClass('ls-nav-active');
}
if( ls.o.navStartStop ){
var buttonStart = $('<a class="ls-nav-start" href="#" />').click(function(e){
e.preventDefault();
$(el).layerSlider('start');
}).prependTo( $(el).find('.ls-bottom-nav-wrapper') );
var buttonStop = $('<a class="ls-nav-stop" href="#" />').click(function(e){
e.preventDefault();
$(el).layerSlider('stop');
}).appendTo( $(el).find('.ls-bottom-nav-wrapper') );
}else if( ls.o.thumbnailNavigation != 'always' ){
$('<span class="ls-nav-sides ls-nav-sideleft" />').prependTo( $(el).find('.ls-bottom-nav-wrapper') );
$('<span class="ls-nav-sides ls-nav-sideright" />').appendTo( $(el).find('.ls-bottom-nav-wrapper') );
}
if( ls.o.hoverBottomNav && ls.o.thumbnailNavigation != 'always' ){
bottomNav.css({
display: 'none'
});
$(el).hover(
function(){
if( !ls.g.forceHideControls ){
if( ls.g.ie78 ){
bottomNav.css('display','block');
}else{
bottomNav.stop(true,true).fadeIn(300);
}
}
},
function(){
if( ls.g.ie78 ){
bottomNav.css('display','none');
}else{
bottomNav.stop(true,true).fadeOut(300);
}
}
)
}
}
// NEW FEATURE v3x.5 thumbnailNavigation ('always')
if( ls.o.thumbnailNavigation == 'always' ){
ls.g.thumbsWrapper = $('<div class="ls-thumbnail-wrapper"></div>').appendTo( $(el) );
var thumbs = $('<div class="ls-thumbnail"><div class="ls-thumbnail-inner"><div class="ls-thumbnail-slide-container"><div class="ls-thumbnail-slide"></div></div></div></div>').appendTo( ls.g.thumbsWrapper );
ls.g.thumbnails = $(el).find('.ls-thumbnail-slide-container');
if( !('ontouchstart' in window) ){
ls.g.thumbnails.hover(
function(){
$(this).addClass('ls-thumbnail-slide-hover');
},
function(){
$(this).removeClass('ls-thumbnail-slide-hover');
ls.scrollThumb();
}
).mousemove(function(e){
var mL = parseInt(e.pageX - $(this).offset().left ) / $(this).width() * ( $(this).width() - $(this).find('.ls-thumbnail-slide').width() );
$(this).find('.ls-thumbnail-slide').stop().css({
marginLeft : mL
});
});
}else{
ls.g.thumbnails.addClass('ls-touchscroll');
}
$(el).find('.ls-slide').each(function(){
var tempIndex = $(this).index() + 1;
var tnSrc;
if( ls.o.imgPreload === true && ls.o.lazyLoad === true ){
if( $(this).find('.ls-tn').length ){
tnSrc = $(this).find('.ls-tn').data('src');
}else if( $(this).find('.ls-videopreview').length ){
tnSrc = $(this).find('.ls-videopreview').attr('src');
}else if( $(this).find('.ls-bg').length ){
tnSrc = $(this).find('.ls-bg').data('src');
}else{
tnSrc = ls.o.skinsPath+ls.o.skin+'/nothumb.png';
}
}else{
if( $(this).find('.ls-tn').length ){
tnSrc = $(this).find('.ls-tn').attr('src');
}else if( $(this).find('.ls-videopreview').length ){
tnSrc = $(this).find('.ls-videopreview').attr('src');
}else if( $(this).find('.ls-bg').length ){
tnSrc = $(this).find('.ls-bg').attr('src');
}else{
tnSrc = ls.o.skinsPath+ls.o.skin+'/nothumb.png';
}
}
var thumb = $('<a href="#" class="ls-thumb-' + tempIndex + '"><img src="'+tnSrc+'"></a>');
thumb.appendTo( $(el).find('.ls-thumbnail-slide') );
if( !('ontouchstart' in window) ){
thumb.hover(
function(){
$(this).children().stop().fadeTo(300,ls.o.tnActiveOpacity/100);
},
function(){
if( !$(this).children().hasClass('ls-thumb-active') ){
$(this).children().stop().fadeTo(300,ls.o.tnInactiveOpacity/100);
}
}
);
}
thumb.click(function(e){
e.preventDefault();
$(el).layerSlider( tempIndex );
});
});
if( buttonStart && buttonStop ){
var lsBottomBelowTN = ls.g.bottomWrapper = $('<div class="ls-bottom-nav-wrapper ls-below-thumbnails"></div>').appendTo( $(el) );
buttonStart.clone().click(function(e){
e.preventDefault();
$(el).layerSlider('start');
}).appendTo( lsBottomBelowTN );
buttonStop.clone().click(function(e){
e.preventDefault();
$(el).layerSlider('stop');
}).appendTo( lsBottomBelowTN );
}
if( ls.o.hoverBottomNav ){
ls.g.thumbsWrapper.css('display','none');
if( lsBottomBelowTN ){
ls.g.bottomWrapper = lsBottomBelowTN.css('display') == 'block' ? lsBottomBelowTN : $(el).find('.ls-above-thumbnails');
ls.g.bottomWrapper.css('display','none');
}
// BUGFIXES v4.1.3 Added checking of the bottomWrapper variable
$(el).hover(
function(){
$(el).addClass('ls-hover');
if( !ls.g.forceHideControls ){
if( ls.g.ie78 ){
ls.g.thumbsWrapper.css('display','block');
if( ls.g.bottomWrapper ){
ls.g.bottomWrapper.css('display','block');
}
}else{
ls.g.thumbsWrapper.stop(true,true).fadeIn(300);
if( ls.g.bottomWrapper ){
ls.g.bottomWrapper.stop(true,true).fadeIn(300);
}
}
}
},
function(){
$(el).removeClass('ls-hover');
if( ls.g.ie78 ){
ls.g.thumbsWrapper.css('display','none');
if( ls.g.bottomWrapper ){
ls.g.bottomWrapper.css('display','none');
}
}else{
ls.g.thumbsWrapper.stop(true,true).fadeOut(300);
if( ls.g.bottomWrapper ){
ls.g.bottomWrapper.stop(true,true).fadeOut(300);
}
}
}
)
}
}
// Adding shadow wrapper
ls.g.shadow = $('<div class="ls-shadow"></div>').appendTo( $(el) );
if( ls.g.shadow.css('display') == 'block' && !ls.g.shadow.find('img').length ){
ls.g.showShadow = function(){
ls.g.shadow.css({
display: 'none',
visibility: 'visible'
}).fadeIn( 500, function(){
ls.g.showShadow = false;
});
}
ls.g.shadowImg = $('<img>').attr('src',ls.o.skinsPath+ls.o.skin+'/shadow.png').appendTo( ls.g.shadow );
ls.g.shadowBtmMod = typeof parseInt( $(el).css('padding-bottom') ) == 'number' ? parseInt( $(el).css('padding-bottom') ) : 0;
}
ls.resizeShadow();
// Adding keyboard navigation if turned on and if number of layers > 1
if( ls.o.keybNav && $(el).find('.ls-slide').length > 1 ){
$('body').bind('keydown',function(e){
if( !ls.g.isAnimating && !ls.g.isLoading ){
if( e.which == 37 ){
ls.o.cbPrev(ls.g);
ls.prev('clicked');
}else if( e.which == 39 ){
ls.o.cbNext(ls.g);
ls.next('clicked');
}
}
});
}
// Adding touch-control navigation if number of layers > 1
if('ontouchstart' in window && $(el).find('.ls-slide').length > 1 && ls.o.touchNav ){
$(el).find('.ls-inner').bind('touchstart', function( e ) {
var t = e.touches ? e.touches : e.originalEvent.touches;
if( t.length == 1 ){
ls.g.touchStartX = ls.g.touchEndX = t[0].clientX;
}
});
$(el).find('.ls-inner').bind('touchmove', function( e ) {
var t = e.touches ? e.touches : e.originalEvent.touches;
if( t.length == 1 ){
ls.g.touchEndX = t[0].clientX;
}
if( Math.abs( ls.g.touchStartX - ls.g.touchEndX ) > 45 ){
e.preventDefault();
}
});
$(el).find('.ls-inner').bind('touchend',function( e ){
if( Math.abs( ls.g.touchStartX - ls.g.touchEndX ) > 45 ){
if( ls.g.touchStartX - ls.g.touchEndX > 0 ){
ls.o.cbNext(ls.g);
$(el).layerSlider('next');
}else{
ls.o.cbPrev(ls.g);
$(el).layerSlider('prev');
}
}
});
}
// Feature: pauseOnHover (if number of layers > 1)
if( ls.o.pauseOnHover == true && $(el).find('.ls-slide').length > 1 ){
// BUGFIX v1.6 stop was not working because of pause on hover
$(el).find('.ls-inner').hover(
function(){
// Calling cbPause callback function
ls.o.cbPause(ls.g);
if( ls.g.autoSlideshow ){
ls.g.paused = true;
ls.stop();
// Stopping the animation of Timers
if( ls.g.barTimer ){
ls.g.barTimer.stop();
}
if( ls.g.circleTimer ){
if( ls.g.cttl ){
ls.g.cttl.pause();
}
}
ls.g.pausedSlideTime = new Date().getTime();
}
},
function(){
if( ls.g.paused == true ){
ls.start();
ls.g.paused = false;
}
}
);
}
ls.resizeSlider();
// NEW FEATURE v1.7 added yourLogo
if( ls.o.yourLogo ){
ls.g.yourLogo = $('<img>').addClass('ls-yourlogo').appendTo($(el)).attr('style', ls.o.yourLogoStyle ).css({
visibility: 'hidden',
display: 'bock'
}).load(function(){
// NEW FEATURE v3.0 added responsive yourLogo
var logoTimeout = 0;
if( !ls.g.yourLogo ){
logoTimeout = 1000;
}
setTimeout( function(){
ls.g.yourLogo.data( 'originalWidth', ls.g.yourLogo.width() );
ls.g.yourLogo.data( 'originalHeight', ls.g.yourLogo.height() );
if( ls.g.yourLogo.css('left') != 'auto' ){
ls.g.yourLogo.data( 'originalLeft', ls.g.yourLogo[0].style.left );
}
if( ls.g.yourLogo.css('right') != 'auto' ){
ls.g.yourLogo.data( 'originalRight', ls.g.yourLogo[0].style.right );
}
if( ls.g.yourLogo.css('top') != 'auto' ){
ls.g.yourLogo.data( 'originalTop', ls.g.yourLogo[0].style.top );
}
if( ls.g.yourLogo.css('bottom') != 'auto' ){
ls.g.yourLogo.data( 'originalBottom', ls.g.yourLogo[0].style.bottom );
}
// NEW FEATURES v1.8 added yourLogoLink & yourLogoTarget
if( ls.o.yourLogoLink != false ){
$('<a>').appendTo($(el)).attr( 'href', ls.o.yourLogoLink ).attr('target', ls.o.yourLogoTarget ).css({
textDecoration : 'none',
outline : 'none'
}).append( ls.g.yourLogo );
}
ls.g.yourLogo.css({
display: 'none',
visibility: 'visible'
});
ls.resizeYourLogo();
}, logoTimeout );
}).attr( 'src', ls.o.yourLogo );
}
// NEW FEATURE v1.7 added window resize function for make responsive layout better
$(window).resize(function(){
ls.resize();
});
// BUGFIX v5.3.0 Responsiveness not worked in some cases while changed orientation on mobile devices
$(window).on('orientationchange',function(){
$(window).resize();
});
ls.g.showSlider = true;
// NEW FEATURE v1.7 animating first slide
if( ls.o.animateFirstSlide == true ){
if( ls.o.autoStart ){
ls.g.autoSlideshow = true;
$(el).find('.ls-nav-start').addClass('ls-nav-start-active');
}else{
$(el).find('.ls-nav-stop').addClass('ls-nav-stop-active');
}
ls.next();
}else if( typeof ls.g.curLayer[0] !== 'undefined' ){
ls.imgPreload(ls.g.curLayer,function(){
ls.g.curLayer.fadeIn(ls.o.sliderFadeInDuration, function(){
ls.g.isLoading = false;
$(this).addClass('ls-active');
// NEW FEATURE v2.0 autoPlayVideos
if( ls.o.autoPlayVideos ){
$(this).delay( $(this).data('delayin') + 25 ).queue(function(){
// YouTube & Vimeo videos
$(this).find('.ls-videopreview').click();
// HTML5 videos
$(this).find('video, audio').each(function(){
if( typeof $(this)[0].currentTime !== 0){
$(this)[0].currentTime = 0;
}
$(this).click();
});
$(this).dequeue();
});
}
// NEW FEATURE v3.0 showUntil sublayers
ls.g.curLayer.find(' > *[class*="ls-l"]').each(function(){
// Setting showUntilTimers
var cursub = $(this);
// IMPROVEMENT v5.2.0 video layers with auto play will skip showuntil feature
if( ( !cursub.hasClass('ls-video-layer') || ( cursub.hasClass('ls-video-layer') && ls.o.autoPlayVideos === false ) ) && cursub.data('showuntil') > 0 ){
// IMPROVEMENT v4.5.0 sublayerShowUntil will be called anly if necessary
cursub.data('showUntilTimer', setTimeout(function(){
ls.sublayerShowUntil( cursub );
}, cursub.data('showuntil') ));
}
});
});
ls.changeThumb(ls.g.curLayerIndex)
// If autoStart is true
if( ls.o.autoStart ){
ls.g.isLoading = false;
ls.start();
}else{
$(el).find('.ls-nav-stop').addClass('ls-nav-stop-active');
}
});
}
// NEW FEATURE v1.7 added cbInit function
ls.o.cbInit($(el));
};
ls.resize = function(){
ls.g.resize = true;
if( !ls.g.isAnimating ){
ls.makeResponsive( ls.g.curLayer, function(){
if( ls.g.ltContainer ){
ls.g.ltContainer.empty();
}
ls.g.resize = false;
});
if( ls.g.yourLogo ){
ls.resizeYourLogo();
}
}
};
ls.start = function(){
if( ls.g.autoSlideshow ){
if( ls.g.prevNext == 'prev' && ls.o.twoWaySlideshow ){
ls.prev();
}else{
ls.next();
}
}else{
ls.g.autoSlideshow = true;
if( !ls.g.isAnimating && !ls.g.isLoading ){
ls.timer();
}
}
$(el).find('.ls-nav-start').addClass('ls-nav-start-active');
$(el).find('.ls-nav-stop').removeClass('ls-nav-stop-active');
};
ls.timer = function(){
if( $(el).find('.ls-active').data('ls') ){
var sD = ls.st.slideDelay;
}else{
var sD = ls.o.slideDelay;
}
var delaytime = $(el).find('.ls-active').data('slidedelay') ? parseInt( $(el).find('.ls-active').data('slidedelay') ) : sD;
// BUGFIX v3.0 delaytime did not work on first layer if animateFirstSlide was set to off
// BUGFIX v3.5 delaytime did not work on all layers in standalone version after bugfix 3.0 :)
if( !ls.o.animateFirstSlide && !$(el).find('.ls-active').data('slidedelay') ){
var tempD = $(el).find('.ls-slide:eq('+(ls.o.firstSlide-1)+')').data('slidedelay');
delaytime = tempD ? tempD : sD;
}
clearTimeout( ls.g.slideTimer );
// NEW FEATURE v4.5.0 Timers
if( ls.g.pausedSlideTime ){
if( !ls.g.startSlideTime ){
ls.g.startSlideTime = new Date().getTime();
}
if( ls.g.startSlideTime > ls.g.pausedSlideTime ){
ls.g.pausedSlideTime = new Date().getTime();
}
if(! ls.g.curSlideTime ){
ls.g.curSlideTime = delaytime;
}
ls.g.curSlideTime -= (ls.g.pausedSlideTime - ls.g.startSlideTime);
ls.g.pausedSlideTime = false;
ls.g.startSlideTime = new Date().getTime();
}else{
ls.g.curSlideTime = delaytime;
ls.g.startSlideTime = new Date().getTime();
}
// BUGFIX v4.6.0 fixed Bar Timer animation on the fisrt slide if animateFirstSlide is false
ls.g.curSlideTime = parseInt( ls.g.curSlideTime );
ls.g.slideTimer = setTimeout(function(){
ls.g.startSlideTime = ls.g.pausedSlideTime = ls.g.curSlideTime = false;
ls.start();
}, ls.g.curSlideTime );
// Animating Timers
if( ls.g.barTimer ){
ls.g.barTimer.animate({
width : ls.g.sliderWidth()
}, ls.g.curSlideTime, 'linear', function(){
$(this).css({
width: 0
});
});
}
if( ls.g.circleTimer ){
var ct1 = ls.g.circleTimer.find('.ls-ct-right .ls-ct-rotate');
var ct2 = ls.g.circleTimer.find('.ls-ct-left .ls-ct-rotate');
if( ls.g.circleTimer.css('display') == 'none' ){
ct1.css({
rotate : 0
});
ct2.css({
rotate : 0
});
ls.g.circleTimer.fadeIn(350);
}
if( !ls.g.cttl ){
ls.g.cttl = new TimelineLite();
ls.g.cttl.add( TweenLite.fromTo(ct1[0],delaytime/2000,{
rotation : 0
},{
ease : Linear.easeNone,
rotation : 180,
onReverseComplete : function(){
ls.g.cttl = false;
}
}));
ls.g.cttl.add( TweenLite.fromTo(ct2[0],delaytime/2000,{
rotation : 0
},{
ease : Linear.easeNone,
rotation : 180
}));
}else{
ls.g.cttl.resume();
}
}
};
ls.stop = function(){
// Stopping Timers
ls.g.pausedSlideTime = new Date().getTime();
if( ls.g.barTimer ){
ls.g.barTimer.stop();
}
if( ls.g.circleTimer ){
if( ls.g.cttl ){
ls.g.cttl.pause();
}
}
if( !ls.g.paused && !ls.g.originalAutoSlideshow ){
$(el).find('.ls-nav-stop').addClass('ls-nav-stop-active');
$(el).find('.ls-nav-start').removeClass('ls-nav-start-active');
}
clearTimeout( ls.g.slideTimer );
ls.g.autoSlideshow = false;
};
ls.forcestop = function(){
clearTimeout( ls.g.slideTimer );
ls.g.autoSlideshow = false;
clearTimeout( ls.g.t1 );
clearTimeout( ls.g.t2 );
clearTimeout( ls.g.t3 );
clearTimeout( ls.g.t4 );
clearTimeout( ls.g.t5 );
if( ls.g.barTimer ){
ls.g.barTimer.stop();
}
if( ls.g.circleTimer ){
if( ls.g.cttl ){
ls.g.cttl.pause();
}
}
$(el).find('*').stop(true,false).dequeue();
$(el).find('.ls-slide >').each(function(){
if( $(this).data('tr') ){
$(this).data('tr').pause();
}
});
if( !ls.g.paused && !ls.g.originalAutoSlideshow ){
$(el).find('.ls-nav-stop').addClass('ls-nav-stop-active');
$(el).find('.ls-nav-start').removeClass('ls-nav-start-active');
}
};
ls.restart = function(){
$(el).find('*').stop();
clearTimeout( ls.g.slideTimer );
ls.change(ls.g.curLayerIndex,ls.g.prevNext);
};
// Because of an ie7 bug, we have to check & format the strings correctly
ls.ieEasing = function( e ){
// BUGFIX v1.6 and v1.8 some type of animations didn't work properly
if( $.trim(e.toLowerCase()) == 'swing' || $.trim(e.toLowerCase()) == 'linear'){
return e.toLowerCase();
}else{
return e.replace('easeinout','easeInOut').replace('easein','easeIn').replace('easeout','easeOut').replace('quad','Quad').replace('quart','Quart').replace('cubic','Cubic').replace('quint','Quint').replace('sine','Sine').replace('expo','Expo').replace('circ','Circ').replace('elastic','Elastic').replace('back','Back').replace('bounce','Bounce');
}
};
// Calculating prev layer
ls.prev = function(clicked){
// NEW FEATURE v2.0 loops
if( ls.g.curLayerIndex < 2 ){
ls.g.nextLoop += 1;
}
if( ( ls.g.nextLoop > ls.o.loops ) && ( ls.o.loops > 0 ) && !clicked ){
ls.g.nextLoop = 0;
ls.stop();
if( ls.o.forceLoopNum == false ){
ls.o.loops = 0;
}
}else{
var prev = ls.g.curLayerIndex < 2 ? ls.g.layersNum : ls.g.curLayerIndex - 1;
ls.g.prevNext = 'prev';
ls.change(prev,ls.g.prevNext);
}
};
// Calculating next layer
ls.next = function(clicked){
// NEW FEATURE v2.0 loops
if( !ls.o.randomSlideshow ){
if( !(ls.g.curLayerIndex < ls.g.layersNum) ){
ls.g.nextLoop += 1;
}
if( ( ls.g.nextLoop > ls.o.loops ) && ( ls.o.loops > 0 ) && !clicked ){
ls.g.nextLoop = 0;
ls.stop();
if( ls.o.forceLoopNum == false ){
ls.o.loops = 0;
}
}else{
var next = ls.g.curLayerIndex < ls.g.layersNum ? ls.g.curLayerIndex + 1 : 1;
ls.g.prevNext = 'next';
ls.change(next,ls.g.prevNext);
}
}else if( !clicked ){
// NEW FEATURE v3.5 randomSlideshow
var next = ls.g.curLayerIndex;
var calcRand = function(){
next = Math.floor(Math.random() * ls.g.layersNum) + 1;
if( next == ls.g.curLayerIndex ){
calcRand();
}else{
ls.g.prevNext = 'next';
ls.change(next,ls.g.prevNext);
}
}
calcRand();
}else if( clicked ){
var next = ls.g.curLayerIndex < ls.g.layersNum ? ls.g.curLayerIndex + 1 : 1;
ls.g.prevNext = 'next';
ls.change(next,ls.g.prevNext);
}
};
ls.change = function(num,prevnext){
// Stopping Timers if needed
ls.g.startSlideTime = ls.g.pausedSlideTime = ls.g.curSlideTime = false;
// IMPROVEMENT v4.6.0 Bar Timer animation
if( ls.g.barTimer ){
ls.g.barTimer.stop().delay(300).animate({
width: 0
},450);
}
if( ls.g.circleTimer ){
ls.g.circleTimer.fadeOut(500);
if( ls.g.cttl ){
ls.g.cttl.reverse().duration(.35);
}
}
// NEW FEATURE v2.0 videoPreview & autoPlayVideos
if( ls.g.pausedByVideo == true ){
ls.g.pausedByVideo = false;
ls.g.autoSlideshow = ls.g.originalAutoSlideshow;
ls.g.curLayer.find('iframe[src*="youtube.com"], iframe[src*="youtu.be"], iframe[src*="player.vimeo"]').each(function(){
$(this).parent().find('.ls-vpcontainer').fadeIn(ls.g.v.fi,function(){
$(this).parent().find('iframe').attr('src','');
});
});
ls.g.curLayer.find('video, audio').each(function(){
this.pause();
});
}
$(el).find('iframe[src*="youtube.com"], iframe[src*="youtu.be"], iframe[src*="player.vimeo"]').each(function(){
// Clearing videoTimeouts
clearTimeout( $(this).data( 'videoTimer') );
});
clearTimeout( ls.g.slideTimer );
ls.g.nextLayerIndex = num;
ls.g.nextLayer = $(el).find('.ls-slide:eq('+(ls.g.nextLayerIndex-1)+')');
// BUGFIX v1.6 fixed wrong directions of animations if navigating by slidebuttons
if( !prevnext ){
if( ls.g.curLayerIndex < ls.g.nextLayerIndex ){
ls.g.prevNext = 'next';
}else{
ls.g.prevNext = 'prev';
}
}
// Added timeOut to wait for the fade animation of videoPreview image...
var timeOut = 0;
if( $(el).find('iframe[src*="youtube.com"], iframe[src*="youtu.be"], iframe[src*="player.vimeo"]').length > 0 ){
timeOut = ls.g.v.fi;
}
if( typeof ls.g.nextLayer[0] !== 'undefined' ){
ls.imgPreload(ls.g.nextLayer,function(){
ls.animate();
});
}
};
// Preloading images
ls.imgPreload = function(layer,callback){
ls.g.isLoading = true;
// Showing slider for the first time
if( ls.g.showSlider ){
$(el).css({
visibility : 'visible'
});
}
// If image preload is on
if( ls.o.imgPreload ){
var preImages = [];
var preloaded = 0;
// NEW FEATURE v1.8 Preloading background images of layers
if( layer.css('background-image') != 'none' && layer.css('background-image').indexOf('url') != -1 && !layer.hasClass('ls-preloaded') && !layer.hasClass('ls-not-preloaded') ){
var bgi = layer.css('background-image');
bgi = bgi.match(/url\((.*)\)/)[1].replace(/"/gi, '');
preImages[preImages.length] = [bgi, layer];
}
// Images inside layers
layer.find('img:not(.ls-preloaded, .ls-not-preloaded)').each(function(){
// NEW FEATURE v5.0.0 Lazy-load
if( ls.o.lazyLoad === true ){
$(this).attr('src',$(this).data('src'));
}
preImages[preImages.length] = [$(this).attr('src'), $(this)];
});
// Background images inside layers
layer.find('*').each(function(){
// BUGFIX v1.7 fixed preload bug with sublayers with gradient backgrounds
if( $(this).css('background-image') != 'none' && $(this).css('background-image').indexOf('url') != -1 && !$(this).hasClass('ls-preloaded') && !$(this).hasClass('ls-not-preloaded') ){
var bgi = $(this).css('background-image');
bgi = bgi.match(/url\((.*)\)/)[1].replace(/"/gi, '');
preImages[preImages.length] = [bgi, $(this)];
}
});
// BUGFIX v1.7 if there are no images in a layer, calling the callback function
if(preImages.length == 0){
$('.ls-thumbnail-wrapper, .ls-nav-next, .ls-nav-prev, .ls-bottom-nav-wrapper').css({
visibility : 'visible'
});
ls.makeResponsive(layer, callback);
}else{
// NEW FEATURE v4.0 Showing loading indicator
if( ls.g.ie78 ){
ls.g.li.css('display','block');
}else{
// BUGIFX v4.1.3 Adding delay to the showing of the loading indicator
ls.g.li.delay(400).fadeIn(300);
}
var afterImgLoad = function(){
// NEW FEATURE v4.0 Hiding loading indicator
ls.g.li.stop(true,true).css({
display: 'none'
});
$('.ls-thumbnail-wrapper, .ls-nav-next, .ls-nav-prev, .ls-bottom-nav-wrapper').css({
visibility : 'visible'
});
// We love you so much IE... -.-
if( navigator.userAgent.indexOf('Trident/7') !== -1 || ls.g.ie78 ){
setTimeout(function(){
ls.makeResponsive(layer, callback);
},50);
}else{
ls.makeResponsive(layer, callback);
}
};
for(x=0;x<preImages.length;x++){
$('<img>').data('el',preImages[x]).load(function(){
$(this).data('el')[1].addClass('ls-preloaded');
if( ++preloaded == preImages.length ){
afterImgLoad();
}
}).error(function(){
var imgURL = $(this).data('el')[0].substring($(this).data('el')[0].lastIndexOf("/") + 1, $(this).data('el')[0].length);
if( window.console ){
console.log('LayerSlider error:\r\n\r\nIt seems like the URL of the image or background image "'+imgURL+'" is pointing to a wrong location and it cannot be loaded. Please check the URLs of all your images used in the slider.');
}else{
alert('LayerSlider error:\r\n\r\nIt seems like the URL of the image or background image "'+imgURL+'" is pointing to a wrong location and it cannot be loaded. Please check the URLs of all your images used in the slider.');
}
$(this).addClass('ls-not-preloaded');
// IMPROVEMENT v5.2.0 The slider should not stop even if an image cannot be loaded
if( ++preloaded == preImages.length ){
afterImgLoad();
}
}).attr('src',preImages[x][0]);
}
}
}else{
$('.ls-thumbnail-wrapper, .ls-nav-next, .ls-nav-prev, .ls-bottom-nav-wrapper').css({
visibility : 'visible'
});
ls.makeResponsive(layer, callback);
}
};
// NEW FEATURE v1.7 making the slider responsive
ls.makeResponsive = function(layer, callback ){
layer.css({
visibility: 'hidden',
display: 'block'
});
if( ls.g.showShadow ){
ls.g.showShadow();
}
ls.resizeSlider();
if( ls.o.thumbnailNavigation == 'always' ){
ls.resizeThumb();
}
layer.children().each(function(){
var sl = $(this);
// positioning
var ol = sl.data('originalLeft') ? sl.data('originalLeft') : '0';
var ot = sl.data('originalTop') ? sl.data('originalTop') : '0';
if( sl.is('a') && sl.children().length > 0 ){
sl.css({
display : 'block'
});
sl = sl.children();
}
var ow = 'auto';
var oh = 'auto';
if( sl.data('originalWidth') ){
if( typeof sl.data('originalWidth') == 'number' ){
ow = parseInt( sl.data('originalWidth') ) * ls.g.ratio;
}else if( sl.data('originalWidth').indexOf('%') != -1 ){
ow = sl.data('originalWidth');
}
}
if( sl.data('originalHeight') ){
if( typeof sl.data('originalHeight') == 'number' ){
oh = parseInt( sl.data('originalHeight') ) * ls.g.ratio;
}else if( sl.data('originalHeight').indexOf('%') != -1 ){
oh = sl.data('originalHeight');
}
}
// padding
var opl = sl.data('originalPaddingLeft') ? parseInt( sl.data('originalPaddingLeft') ) * ls.g.ratio : 0;
var opr = sl.data('originalPaddingRight') ? parseInt( sl.data('originalPaddingRight') ) * ls.g.ratio : 0;
var opt = sl.data('originalPaddingTop') ? parseInt( sl.data('originalPaddingTop') ) * ls.g.ratio : 0;
var opb = sl.data('originalPaddingBottom') ? parseInt( sl.data('originalPaddingBottom') ) * ls.g.ratio : 0;
// border
var obl = sl.data('originalBorderLeft') ? parseInt( sl.data('originalBorderLeft') ) * ls.g.ratio : 0;
var obr = sl.data('originalBorderRight') ? parseInt( sl.data('originalBorderRight') ) * ls.g.ratio : 0;
var obt = sl.data('originalBorderTop') ? parseInt( sl.data('originalBorderTop') ) * ls.g.ratio : 0;
var obb = sl.data('originalBorderBottom') ? parseInt( sl.data('originalBorderBottom') ) * ls.g.ratio : 0;
// font
var ofs = sl.data('originalFontSize');
var olh = sl.data('originalLineHeight');
// NEW FEATURE v3.0 added "normal" responsive mode with image and font resizing
// NEW FEATURE v3.5 added responsiveUnder
if( ls.g.responsiveMode || ls.o.responsiveUnder > 0 ){
if( sl.is('img') && !sl.hasClass('ls-bg') && sl.attr('src') ){
sl.css({
width: 'auto',
height: 'auto'
});
// IMPROVEMENT v4.5.0 Images can have now starting width / height
if( ( ow == 0 || ow == 'auto' ) && typeof oh == 'number' && oh != 0 ){
ow = ( oh / sl.height() ) * sl.width();
}
if( ( oh == 0 || oh == 'auto' ) && typeof ow == 'number' && ow != 0 ){
oh = ( ow / sl.width() ) * sl.height();
}
if( ow == 'auto'){
ow = sl.width() * ls.g.ratio;
}
if( oh == 'auto'){
oh = sl.height() * ls.g.ratio;
}
sl.css({
width : ow,
height : oh
});
}
if( !sl.is('img') ){
sl.css({
width : ow,
height : oh,
'font-size' : parseInt(ofs) * ls.g.ratio +'px',
'line-height' : parseInt(olh) * ls.g.ratio + 'px'
});
}
if( sl.is('div') && sl.find('iframe').data('videoSrc') ){
var videoIframe = sl.find('iframe');
videoIframe.attr('width', parseInt( videoIframe.data('originalWidth') ) * ls.g.ratio ).attr('height', parseInt( videoIframe.data('originalHeight') ) * ls.g.ratio );
sl.css({
width : parseInt( videoIframe.data('originalWidth') ) * ls.g.ratio,
height : parseInt( videoIframe.data('originalHeight') ) * ls.g.ratio
});
}
sl.css({
padding : opt + 'px ' + opr + 'px ' + opb + 'px ' + opl + 'px ',
borderLeftWidth : obl + 'px',
borderRightWidth : obr + 'px',
borderTopWidth : obt + 'px',
borderBottomWidth : obb + 'px'
});
}
// If it is NOT a bg sublayer
if( !sl.hasClass('ls-bg') ){
var sl2 = sl;
if( sl.parent().is('a') ){
sl = sl.parent();
}
// NEW FEATURE v3.5 sublayerContainer
var slC = 0;
if( ls.o.layersContainer ){
slC = ls.o.layersContainer > 0 ? ( ls.g.sliderWidth() - ls.o.layersContainer ) / 2 : 0;
}else if( ls.o.sublayerContainer ){
slC = ls.o.sublayerContainer > 0 ? ( ls.g.sliderWidth() - ls.o.sublayerContainer ) / 2 : 0;
}
slC = slC < 0 ? 0 : slC;
// (RE)positioning sublayer (left property)
if( ol.indexOf('%') != -1 ){
sl.css({
left : ls.g.sliderWidth() / 100 * parseInt(ol) - sl2.width() / 2 - opl - obl
});
}else if( slC > 0 || ls.g.responsiveMode || ls.o.responsiveUnder > 0 ){
sl.css({
left : slC + parseInt(ol) * ls.g.ratio
});
}
// (RE)positioning sublayer (top property)
if( ot.indexOf('%') != -1 ){
sl.css({
top : ls.g.sliderHeight() / 100 * parseInt(ot) - sl2.height() / 2 - opt - obt
});
}else if( ls.g.responsiveMode || ls.o.responsiveUnder > 0 ){
sl.css({
top : parseInt(ot) * ls.g.ratio
});
}
}else{
var inner = $(el).find('.ls-inner');
sl.css({
width : 'auto',
height : 'auto'
});
ow = sl.width();
oh = sl.height();
// IMPROVEMENT v4.5.0 Resizing smaller background images in full width mode as well to fill the whole slide
var or = ls.g.ratio;
if( ls.g.sliderOriginalWidth.indexOf('%') != -1 ){
if( ls.g.sliderWidth() > ow ){
or = ls.g.sliderWidth() / ow;
if( ls.g.sliderHeight() > oh * or ){
or = ls.g.sliderHeight() / oh;
}
}else if( ls.g.sliderHeight() > oh ){
or = ls.g.sliderHeight() / oh;
if( ls.g.sliderWidth() > ow * or ){
or = ls.g.sliderWidth() / ow;
}
}
}
sl.css({
width : ow * or,
height : oh * or,
marginLeft : inner.width() / 2 - ow * or / 2,
marginTop : inner.height() / 2 - oh * or / 2
});
// $('#w2 span:eq(0)').html( ( inner.width() / 2 ) - Math.round( ow * or / 2 ) );
}
});
layer.css({
display: 'none',
visibility: 'visible'
});
// Resizing shadow
ls.resizeShadow();
callback();
$(this).dequeue();
};
// Resizing shadow
ls.resizeShadow = function(){
if( ls.g.shadowImg ){
var resizeShadow = function(){
if( ls.g.shadowImg.height() > 0 ){
if( ls.g.shadowBtmMod > 0 ){
ls.g.shadow.css({
height: ls.g.shadowImg.height() / 2
});
}else{
ls.g.shadow.css({
height: ls.g.shadowImg.height(),
marginTop: - ls.g.shadowImg.height() / 2
});
}
}else{
setTimeout(function(){
resizeShadow();
},50);
}
};
resizeShadow();
}
};
// Resizing the slider
ls.resizeSlider = function(){
if( ls.o.responsiveUnder > 0 ){
if( $(window).width() < ls.o.responsiveUnder ){
ls.g.responsiveMode = true;
ls.g.sliderOriginalWidth = ls.o.responsiveUnder + 'px';
}else{
ls.g.responsiveMode = false;
ls.g.sliderOriginalWidth = ls.g.sliderOriginalWidthRU;
ls.g.ratio = 1;
}
}
// BUGFIX 5.3.0 Fixed full-width resize issue
if( $(el).closest('.ls-wp-fullwidth-container').length ){
$(el).closest('.ls-wp-fullwidth-helper').css({
width : $(window).width()
});
}
// NEW FEATURE v3.0 added "normal" responsive mode with image and font resizing
if( ls.g.responsiveMode ){
var parent = $(el).parent();
// NEW FEATURE v5.5.0 Added fullScreen mode
if( ls.o.fullScreen === true ){
$(el).css({
width : '100%',
height : $(window).height()
});
}else{
// BUGFIX v4.0 there is no need to subtract the values of the left and right paddings of the container element!
$(el).css({
width : parent.width() - parseInt($(el).css('padding-left')) - parseInt($(el).css('padding-right'))
});
ls.g.ratio = $(el).width() / parseInt( ls.g.sliderOriginalWidth );
$(el).css({
height : ls.g.ratio * parseInt( ls.g.sliderOriginalHeight )
});
}
}else{
ls.g.ratio = 1;
$(el).css({
width : ls.g.sliderOriginalWidth,
height : ls.g.sliderOriginalHeight
});
}
// WP fullWidth mode (originally forceResponsive mode)
if( $(el).closest('.ls-wp-fullwidth-container').length ){
$(el).closest('.ls-wp-fullwidth-helper').css({
height : $(el).outerHeight(true)
});
$(el).closest('.ls-wp-fullwidth-container').css({
height : $(el).outerHeight(true)
});
$(el).closest('.ls-wp-fullwidth-helper').css({
width : $(window).width(),
left : - $(el).closest('.ls-wp-fullwidth-container').offset().left
});
if( ls.g.sliderOriginalWidth.indexOf('%') != -1 ){
var percentWidth = parseInt( ls.g.sliderOriginalWidth );
var newWidth = $('body').width() / 100 * percentWidth - ( $(el).outerWidth() - $(el).width() );
$(el).width( newWidth );
}
}
$(el).find('.ls-inner, .ls-lt-container').css({
width : ls.g.sliderWidth(),
height : ls.g.sliderHeight()
});
// BUGFIX v2.0 fixed width problem if firstSlide is not 1
if( ls.g.curLayer && ls.g.nextLayer ){
ls.g.curLayer.css({
width : ls.g.sliderWidth(),
height : ls.g.sliderHeight()
});
ls.g.nextLayer.css({
width : ls.g.sliderWidth(),
height : ls.g.sliderHeight()
});
}else{
$(el).find('.ls-slide').css({
width : ls.g.sliderWidth(),
height : ls.g.sliderHeight()
});
}
};
// NEW FEATURE v3.0 added responsive yourLogo
ls.resizeYourLogo = function(){
ls.g.yourLogo.css({
width : ls.g.yourLogo.data( 'originalWidth' ) * ls.g.ratio,
height : ls.g.yourLogo.data( 'originalHeight' ) * ls.g.ratio
});
if( ls.g.ie78 ){
ls.g.yourLogo.css('display','block');
}else{
ls.g.yourLogo.fadeIn(300);
}
var oL = oR = oT = oB = 'auto';
if( ls.g.yourLogo.data( 'originalLeft' ) && ls.g.yourLogo.data( 'originalLeft' ).indexOf('%') != -1 ){
oL = ls.g.sliderWidth() / 100 * parseInt( ls.g.yourLogo.data( 'originalLeft' ) ) - ls.g.yourLogo.width() / 2 + parseInt( $(el).css('padding-left') );
}else{
oL = parseInt( ls.g.yourLogo.data( 'originalLeft' ) ) * ls.g.ratio;
}
if( ls.g.yourLogo.data( 'originalRight' ) && ls.g.yourLogo.data( 'originalRight' ).indexOf('%') != -1 ){
oR = ls.g.sliderWidth() / 100 * parseInt( ls.g.yourLogo.data( 'originalRight' ) ) - ls.g.yourLogo.width() / 2 + parseInt( $(el).css('padding-right') );
}else{
oR = parseInt( ls.g.yourLogo.data( 'originalRight' ) ) * ls.g.ratio;
}
if( ls.g.yourLogo.data( 'originalTop' ) && ls.g.yourLogo.data( 'originalTop' ).indexOf('%') != -1 ){
oT = ls.g.sliderHeight() / 100 * parseInt( ls.g.yourLogo.data( 'originalTop' ) ) - ls.g.yourLogo.height() / 2 + parseInt( $(el).css('padding-top') );
}else{
oT = parseInt( ls.g.yourLogo.data( 'originalTop' ) ) * ls.g.ratio;
}
if( ls.g.yourLogo.data( 'originalBottom' ) && ls.g.yourLogo.data( 'originalBottom' ).indexOf('%') != -1 ){
oB = ls.g.sliderHeight() / 100 * parseInt( ls.g.yourLogo.data( 'originalBottom' ) ) - ls.g.yourLogo.height() / 2 + parseInt( $(el).css('padding-bottom') );
}else{
oB = parseInt( ls.g.yourLogo.data( 'originalBottom' ) ) * ls.g.ratio;
}
ls.g.yourLogo.css({
left : oL,
right : oR,
top : oT,
bottom : oB
});
};
// NEW FEATURE v3.5 thumbnailNavigation ('always')
// Resizing thumbnails
ls.resizeThumb = function(){
ls.bottomNavSizeHelper('on');
var sliderW = ls.g.sliderOriginalWidth.indexOf('%') == -1 ? parseInt( ls.g.sliderOriginalWidth ) : ls.g.sliderWidth();
$(el).find('.ls-thumbnail-slide a').css({
width : parseInt( ls.o.tnWidth * ls.g.ratio ),
height : parseInt( ls.o.tnHeight * ls.g.ratio )
});
$(el).find('.ls-thumbnail-slide a:last').css({
margin: 0
});
$(el).find('.ls-thumbnail-slide').css({
height : parseInt( ls.o.tnHeight * ls.g.ratio )
});
var tn = $(el).find('.ls-thumbnail');
var originalWidth = ls.o.tnContainerWidth.indexOf('%') == -1 ? parseInt( ls.o.tnContainerWidth ) : parseInt( sliderW / 100 * parseInt( ls.o.tnContainerWidth ) );
tn.css({
width : originalWidth * Math.floor( ls.g.ratio * 100 ) / 100
});
if( tn.width() > $(el).find('.ls-thumbnail-slide').width() ){
tn.css({
width : $(el).find('.ls-thumbnail-slide').width()
});
}
ls.bottomNavSizeHelper('off');
};
// Changing thumbnails
ls.changeThumb = function(index){
var curIndex = index ? index : ls.g.nextLayerIndex;
$(el).find('.ls-thumbnail-slide a:not(.ls-thumb-'+curIndex+')').children().each(function(){
$(this).removeClass('ls-thumb-active').stop().fadeTo(750,ls.o.tnInactiveOpacity/100);
});
$(el).find('.ls-thumbnail-slide a.ls-thumb-'+curIndex).children().addClass('ls-thumb-active').stop().fadeTo(750,ls.o.tnActiveOpacity/100);
};
// Scrolling thumbnails
ls.scrollThumb = function(){
if( !$(el).find('.ls-thumbnail-slide-container').hasClass('ls-thumbnail-slide-hover') ){
var curThumb = $(el).find('.ls-thumb-active').length ? $(el).find('.ls-thumb-active').parent() : false;
if( curThumb ){
var thumbCenter = curThumb.position().left + curThumb.width() / 2;
var mL = $(el).find('.ls-thumbnail-slide-container').width() / 2 - thumbCenter;
mL = mL < $(el).find('.ls-thumbnail-slide-container').width() - $(el).find('.ls-thumbnail-slide').width() ? $(el).find('.ls-thumbnail-slide-container').width() - $(el).find('.ls-thumbnail-slide').width() : mL;
mL = mL > 0 ? 0 : mL;
$(el).find('.ls-thumbnail-slide').animate({
marginLeft : mL
}, 600 );
}
}
};
// IMPROVEMENT v4.1.3 Changed the working of some Thumbnail and Bottom Navigation features
ls.bottomNavSizeHelper = function(val){
if( ls.o.hoverBottomNav && !$(el).hasClass('ls-hover') ){
switch(val){
case 'on':
ls.g.thumbsWrapper.css({
visibility: 'hidden',
display: 'block'
});
break;
case 'off':
ls.g.thumbsWrapper.css({
visibility: 'visible',
display: 'none'
});
break;
}
}
};
// Animating layers and sublayers
ls.animate = function(){
/* GLOBAL (used by both old and new transitions ) */
// Changing variables
// BUGFIX v4.6.0 If there is only one layer, there is no need to set ls.g.isAnimating to true
if( $(el).find('.ls-slide').length > 1 ){
ls.g.isAnimating = true;
}
ls.g.isLoading = false;
// Clearing timeouts
clearTimeout( ls.g.slideTimer );
clearTimeout( ls.g.changeTimer );
ls.g.stopLayer = ls.g.curLayer;
// Calling cbAnimStart callback function
ls.o.cbAnimStart(ls.g);
// NEW FEATURE v3.5 thumbnailNavigation ('always')
if( ls.o.thumbnailNavigation == 'always' ){
// ChangeThumb
ls.changeThumb();
// ScrollThumb
if( !('ontouchstart' in window) ){
ls.scrollThumb();
}
}
// Adding .ls-animating class to next layer
ls.g.nextLayer.addClass('ls-animating');
/* OLD layer transitions (version 3.x) */
// Setting position and styling of current and next layers
var curLayerLeft = curLayerRight = curLayerTop = curLayerBottom = nextLayerLeft = nextLayerRight = nextLayerTop = nextLayerBottom = layerMarginLeft = layerMarginRight = layerMarginTop = layerMarginBottom = 'auto';
var curLayerWidth = nextLayerWidth = ls.g.sliderWidth();
var curLayerHeight = nextLayerHeight = ls.g.sliderHeight();
// Calculating direction
var prevOrNext = ls.g.prevNext == 'prev' ? ls.g.curLayer : ls.g.nextLayer;
var chooseDirection = prevOrNext.data('slidedirection') ? prevOrNext.data('slidedirection') : ls.o.slideDirection;
// Setting the direction of sliding
var slideDirection = ls.g.slideDirections[ls.g.prevNext][chooseDirection];
if( slideDirection == 'left' || slideDirection == 'right' ){
curLayerWidth = curLayerTop = nextLayerWidth = nextLayerTop = 0;
layerMarginTop = 0;
}
if( slideDirection == 'top' || slideDirection == 'bottom' ){
curLayerHeight = curLayerLeft = nextLayerHeight = nextLayerLeft = 0;
layerMarginLeft = 0;
}
switch(slideDirection){
case 'left':
curLayerRight = nextLayerLeft = 0;
layerMarginLeft = -ls.g.sliderWidth();
break;
case 'right':
curLayerLeft = nextLayerRight = 0;
layerMarginLeft = ls.g.sliderWidth();
break;
case 'top':
curLayerBottom = nextLayerTop = 0;
layerMarginTop = -ls.g.sliderHeight();
break;
case 'bottom':
curLayerTop = nextLayerBottom = 0;
layerMarginTop = ls.g.sliderHeight();
break;
}
// Setting start positions and styles of layers
ls.g.curLayer.css({
left : curLayerLeft,
right : curLayerRight,
top : curLayerTop,
bottom : curLayerBottom
});
ls.g.nextLayer.css({
width : nextLayerWidth,
height : nextLayerHeight,
left : nextLayerLeft,
right : nextLayerRight,
top : nextLayerTop,
bottom : nextLayerBottom
});
// Creating variables for the OLD transitions of CURRENT LAYER
// BUGFIX v1.6 fixed some wrong parameters of current layer
// BUGFIX v1.7 fixed using of delayout of current layer
var curDelay = ls.g.curLayer.data('delayout') ? parseInt(ls.g.curLayer.data('delayout')) : ls.o.delayOut;
var curDuration = ls.g.curLayer.data('durationout') ? parseInt(ls.g.curLayer.data('durationout')) : ls.o.durationOut;
var curEasing = ls.g.curLayer.data('easingout') ? ls.g.curLayer.data('easingout') : ls.o.easingOut;
// Creating variables for the OLD transitions of NEXT LAYER
var nextDelay = ls.g.nextLayer.data('delayin') ? parseInt(ls.g.nextLayer.data('delayin')) : ls.o.delayIn;
var nextDuration = ls.g.nextLayer.data('durationin') ? parseInt(ls.g.nextLayer.data('durationin')) : ls.o.durationIn;
// BUGFIX v5.2.0 duration cannot be 0
if( nextDuration === 0 ){ nextDuration = 1 }
var nextEasing = ls.g.nextLayer.data('easingin') ? ls.g.nextLayer.data('easingin') : ls.o.easingIn;
var curLayer = function(){
// BUGFIX v1.6 added an additional delaytime to current layer to fix the '1px gap' bug
// BUGFIX v3.0 modified from curDuration / 80 to curDuration / 15
ls.g.curLayer.delay( curDelay + curDuration / 15).animate({
width : curLayerWidth,
height : curLayerHeight
}, curDuration, curEasing,function(){
curLayerCallback();
});
};
var curLayerCallback = function(){
// Stopping current sublayer animations if needed (they are not visible at this point).
ls.g.stopLayer.find(' > *[class*="ls-l"]').each(function(){
if( $(this).data('tr') ){
$(this).data('tr').kill();
}
$(this).css({
filter: 'none'
});
});
// Setting current layer
ls.g.curLayer = ls.g.nextLayer;
// IMPROVEMENT v5.2.0 added prevLayerIndex and fixing curLayerIndex (nextLayerIndex is the same as curLayerIndex because the slider doesn't know at this point which slide will be the next)
ls.g.prevLayerIndex = ls.g.curLayerIndex;
ls.g.curLayerIndex = ls.g.nextLayerIndex;
ls.o.cbAnimStop(ls.g);
// NEW FEATURE v5.0.0 Lazy-load (preloading here the images of the next layer)
if( ls.o.imgPreload && ls.o.lazyLoad ){
var preLayerIndex = ls.g.curLayerIndex == ls.g.layersNum ? 1 : ls.g.curLayerIndex + 1;
$(el).find('.ls-slide').eq(preLayerIndex-1).find('img:not(.ls-preloaded)').each(function(){
$(this).load(function(){
$(this).addClass('ls-preloaded');
}).error(function(){
var imgURL = $(this).data('src').substring($(this).data('src').lastIndexOf("/") + 1, $(this).data('src').length);
if( window.console ){
console('LayerSlider error:\r\n\r\nIt seems like the URL of the image or background image "'+imgURL+'" is pointing to a wrong location and it cannot be loaded. Please check the URLs of all your images used in the slider.');
}else{
alert('LayerSlider error:\r\n\r\nIt seems like the URL of the image or background image "'+imgURL+'" is pointing to a wrong location and it cannot be loaded. Please check the URLs of all your images used in the slider.');
}
$(this).addClass('ls-not-preloaded');
}).attr('src', $(this).data('src'));
});
}
// Changing some css classes
$(el).find('.ls-slide').removeClass('ls-active');
$(el).find('.ls-slide:eq(' + ( ls.g.curLayerIndex - 1 ) + ')').addClass('ls-active').removeClass('ls-animating');
$(el).find('.ls-bottom-slidebuttons a').removeClass('ls-nav-active');
$(el).find('.ls-bottom-slidebuttons a:eq('+( ls.g.curLayerIndex - 1 )+')').addClass('ls-nav-active');
// Setting timer if needed
if( ls.g.autoSlideshow ){
ls.timer();
}
// Changing variables
ls.g.isAnimating = false;
if( ls.g.resize == true ){
ls.makeResponsive( ls.g.curLayer, function(){
ls.g.resize = false;
});
}
};
var curSubLayers = function(sublayersDurationOut){
ls.g.curLayer.find(' > *[class*="ls-l"]').each(function(){
if( !$(this).data('transitiontype') ){
ls.transitionType( $(this) );
}
// BUGFIX v5.1.0 Removing ls-videohack class before starting transition
$(this).removeClass('ls-videohack');
var curSubSlideDir = $(this).data('slidedirection') ? $(this).data('slidedirection') : slideDirection;
var lml, lmt;
switch(curSubSlideDir){
case 'left':
lml = -ls.g.sliderWidth();
lmt = 0;
break;
case 'right':
lml = ls.g.sliderWidth();
lmt = 0;
break;
case 'top':
lmt = -ls.g.sliderHeight();
lml = 0;
break;
case 'bottom':
lmt = ls.g.sliderHeight();
lml = 0;
break;
case 'fade':
lmt = 0;
lml = 0;
break;
}
// NEW FEATURE v1.6 added slideoutdirection to sublayers
// NEW FEATURES 5.0.0 added axis-free transitions with offsetx and offsety properties
if( $(this).data('transitiontype') === 'new' ){
var curSubSlideOutDir = 'new';
}else{
var curSubSlideOutDir = $(this).data('slideoutdirection') ? $(this).data('slideoutdirection') : false;
}
switch(curSubSlideOutDir){
case 'left':
lml = ls.g.sliderWidth();
lmt = 0;
break;
case 'right':
lml = -ls.g.sliderWidth();
lmt = 0;
break;
case 'top':
lmt = ls.g.sliderHeight();
lml = 0;
break;
case 'bottom':
lmt = -ls.g.sliderHeight();
lml = 0;
break;
case 'fade':
lmt = 0;
lml = 0;
break;
case 'new':
if( $(this).data('offsetxout') ){
if( $(this).data('offsetxout') === 'left' ){
lml = ls.g.sliderWidth();
}else if( $(this).data('offsetxout') === 'right' ){
lml = -ls.g.sliderWidth();
}else{
lml = -parseInt( $(this).data('offsetxout') );
}
}else{
lml = -ls.lt.offsetXOut;
}
if( $(this).data('offsetyout') ){
if( $(this).data('offsetyout') === 'top' ){
lmt = ls.g.sliderHeight();
}else if( $(this).data('offsetyout') === 'bottom' ){
lmt = -ls.g.sliderHeight();
}else{
lmt = -parseInt( $(this).data('offsetyout') );
}
}else{
lmt = -ls.lt.offsetYOut;
}
break;
}
// NEW FEATURES v4.5.0 Rotating & Scaling sublayers
// BUGFIX v4.5.5 changing the default value from 0 to 'none' (because of old jQuery, 1.7.2)
// NEW FEATURES v5.0.0 Added SkewX, SkewY, ScaleX, ScaleY, RotateX & RotateY transitions
var curSubRotate = curSubRotateX = curSubRotateY = curSubScale = curSubSkewX = curSubSkewY = curSubScaleX = curSubScaleY = 'none';
// if( !ls.g.ie78 && ls.g.enableCSS3 ){
curSubRotate = $(this).data('rotateout') ? $(this).data('rotateout') : ls.lt.rotateOut;
curSubRotateX = $(this).data('rotatexout') ? $(this).data('rotatexout') : ls.lt.rotateXOut;
curSubRotateY = $(this).data('rotateyout') ? $(this).data('rotateyout') : ls.lt.rotateYOut;
curSubScale = $(this).data('scaleout') ? $(this).data('scaleout') : ls.lt.scaleOut;
curSubSkewX = $(this).data('skewxout') ? $(this).data('skewxout') : ls.lt.skewXOut;
curSubSkewY = $(this).data('skewyout') ? $(this).data('skewyout') : ls.lt.skewYOut;
if( curSubScale === 1 ){
curSubScaleX = $(this).data('scalexout') ? $(this).data('scalexout') : ls.lt.scaleXOut;
curSubScaleY = $(this).data('scaleyout') ? $(this).data('scaleyout') : ls.lt.scaleYOut;
}else{
curSubScaleX = curSubScaleY = curSubScale;
}
var too = $(this).data('transformoriginout') ? $(this).data('transformoriginout').split(' ') : ls.lt.transformOriginOut;
for(var t =0;t<too.length;t++){
if( too[t].indexOf('%') === -1 && too[t].indexOf('left') !== -1 && too[t].indexOf('right') !== -1 && too[t].indexOf('top') !== -1 && too[t].indexOf('bottom') !== -1 ){
too[t] = '' + parseInt( too[t] ) * ls.g.ratio + 'px';
}
}
var curSubTransformOrigin = too.join(' ');
var curSubPerspective = $(this).data('perspectiveout') ? $(this).data('perspectiveout') : ls.lt.perspectiveOut;
// }
// IMPROVEMENT v4.0 Distance (P.level): -1
var endLeft = parseInt( $(this).css('left') );
var endTop = parseInt( $(this).css('top') );
var curSubPLevel = parseInt( $(this).attr('class').split('ls-l')[1] );
var wh = $(this).outerWidth() > $(this).outerHeight() ? $(this).outerWidth() : $(this).outerHeight();
var modX = parseInt( curSubRotate ) === 0 ? $(this).outerWidth() : wh;
var modY = parseInt( curSubRotate ) === 0 ? $(this).outerHeight() : wh;
if( ( curSubPLevel === -1 && curSubSlideOutDir !== 'new' ) || ( $(this).data('offsetxout') === 'left' || $(this).data('offsetxout') === 'right' ) ){
if( lml < 0 ){
lml = - ( ls.g.sliderWidth() - endLeft + ( curSubScaleX / 2 - .5 ) * modX + 100 );
}else if( lml > 0 ){
lml = endLeft + ( curSubScaleX / 2 + .5 ) * modX + 100;
}
}else{
lml = lml * ls.g.ratio;
}
if( ( curSubPLevel === -1 && curSubSlideOutDir !== 'new' ) || ( $(this).data('offsetyout') === 'top' || $(this).data('offsetyout') === 'bottom' ) ){
if( lmt < 0 ){
lmt = - ( ls.g.sliderHeight() - endTop + ( curSubScaleY / 2 - .5 ) * modY + 100 );
}else if( lmt > 0 ){
lmt = endTop + ( curSubScaleY / 2 + .5 ) * modY + 100;
}
}else{
lmt = lmt * ls.g.ratio;
}
if( curSubPLevel === -1 || curSubSlideOutDir === 'new' ){
var curSubPar = 1;
}else{
var curSubParMod = ls.g.curLayer.data('parallaxout') ? parseInt(ls.g.curLayer.data('parallaxout')) : ls.o.parallaxOut;
var curSubPar = curSubPLevel * curSubParMod;
}
if( $(this).data('transitiontype') === 'new' ){
var deO = ls.lt.delayOut;
var duO = ls.lt.durationOut;
var eO = ls.lt.easingOut;
}else{
var deO = ls.o.delayOut;
var duO = ls.o.durationOut;
var eO = ls.o.easingOut;
}
var curSubDelay = $(this).data('delayout') ? parseInt($(this).data('delayout')) : deO;
var curSubTime = $(this).data('durationout') ? parseInt($(this).data('durationout')) : duO;
// BUGFIX v5.2.0 duration cannot be 0
if( curSubTime === 0 ){ curSubTime = 1 }
var curSubEasing = $(this).data('easingout') ? $(this).data('easingout') : eO;
// On new layer transitions, all sublayer will be slide / fade out in 500ms without any delays
if(sublayersDurationOut){
curSubDelay = 0;
curSubTime = sublayersDurationOut;
// curSubEasing = 'easeInExpo';
}
// Clearing showUntilTimers
if( $(this).data('showUntilTimer') ){
clearTimeout( $(this).data('showUntilTimer') );
}
var css = {
visibility : 'hidden'
};
var el = $(this);
var transition = {
rotation : curSubRotate,
rotationX : curSubRotateX,
rotationY : curSubRotateY,
skewX : curSubSkewX,
skewY : curSubSkewY,
scaleX : curSubScaleX,
scaleY : curSubScaleY,
x : -lml * curSubPar,
y : -lmt * curSubPar,
delay : curSubDelay/1000,
ease : lsConvertEasing( curSubEasing ),
onComplete : function(){
el.css( css );
}
};
if( curSubSlideOutDir == 'fade' || ( !curSubSlideOutDir && curSubSlideDir === 'fade' ) || ( $(this).data('fadeout') !== 'false' && $(this).data('transitiontype') === 'new' ) ){
transition['opacity'] = 0;
css['opacity'] = $(this).data( 'originalOpacity' );
}
if( $(this).data('tr') ){
$(this).data('tr').kill();
}
TweenLite.set( $(this)[0],{
transformOrigin : curSubTransformOrigin,
transformPerspective : curSubPerspective
});
$(this).data('tr', TweenLite.to($(this)[0],curSubTime/1000,transition) );
// $(this).stop(true,false).delay( curSubDelay ).animate( transition, curSubTime, curSubEasing,function(){
// $(this).css( css );
// });
});
};
var nextLayer = function(){
ls.g.nextLayer.delay( curDelay + nextDelay ).animate({
width : ls.g.sliderWidth(),
height : ls.g.sliderHeight()
}, nextDuration, nextEasing );
};
var nextSubLayers = function(){
if( ls.g.totalDuration ){
curDelay = 0;
}
// Needed for the Timeline
if( typeof ls.o.cbTimeLineStart === 'function' ){
ls.o.cbTimeLineStart(ls.g, curDelay+nextDelay );
}
ls.g.nextLayer.find(' > *[class*="ls-l"]').each(function(){
// Replacing global parameters with unique if need
// NEW FEATURES 5.0.0 added axis-free transitions with offsetx and offsety properties
if( !$(this).data('transitiontype') ){
ls.transitionType( $(this) );
}
if( $(this).data('transitiontype') === 'new' ){
var nextSubSlideDir = 'new';
}else{
var nextSubSlideDir = $(this).data('slidedirection') ? $(this).data('slidedirection') : slideDirection;
}
var lml, lmt;
switch(nextSubSlideDir){
case 'left':
lml = -ls.g.sliderWidth();
lmt = 0;
break;
case 'right':
lml = ls.g.sliderWidth();
lmt = 0;
break;
case 'top':
lmt = -ls.g.sliderHeight();
lml = 0;
break;
case 'bottom':
lmt = ls.g.sliderHeight();
lml = 0;
break;
case 'fade':
lmt = 0;
lml = 0;
break;
case 'new':
if( $(this).data('offsetxin') ){
if( $(this).data('offsetxin') === 'left' ){
lml = -ls.g.sliderWidth();
}else if( $(this).data('offsetxin') === 'right' ){
lml = ls.g.sliderWidth();
}else{
lml = parseInt( $(this).data('offsetxin') );
}
}else{
lml = ls.lt.offsetXIn;
}
if( $(this).data('offsetyin') ){
if( $(this).data('offsetyin') === 'top' ){
lmt = -ls.g.sliderHeight();
}else if( $(this).data('offsetyin') === 'bottom' ){
lmt = ls.g.sliderHeight();
}else{
lmt = parseInt( $(this).data('offsetyin') );
}
}else{
lmt = ls.lt.offsetYIn;
}
break;
}
// NEW FEATURE v4.5.0 Rotating & Scaling sublayers
// BUGFIX v4.5.5 changing the default value from 0 to 'none' (because of old jQuery, 1.7.2)
// NEW FEATURES v5.0.0 Added SkewX, SkewY, ScaleX, ScaleY, RotateX & RotateY transitions
var nextSubRotate = nextSubRotateX = nextSubRotateY = nextSubScale = nextSubSkewX = nextSubSkewY = nextSubScaleX = nextSubScaleY = 'none';
// if( !ls.g.ie78 && ls.g.enableCSS3 ){
nextSubRotate = $(this).data('rotatein') ? $(this).data('rotatein') : ls.lt.rotateIn;
nextSubRotateX = $(this).data('rotatexin') ? $(this).data('rotatexin') : ls.lt.rotateXIn;
nextSubRotateY = $(this).data('rotateyin') ? $(this).data('rotateyin') : ls.lt.rotateYIn;
nextSubScale = $(this).data('scalein') ? $(this).data('scalein') : ls.lt.scaleIn;
nextSubSkewX = $(this).data('skewxin') ? $(this).data('skewxin') : ls.lt.skewXIn;
nextSubSkewY = $(this).data('skewyin') ? $(this).data('skewyin') : ls.lt.skewYIn;
if( nextSubScale === 1 ){
nextSubScaleX = $(this).data('scalexin') ? $(this).data('scalexin') : ls.lt.scaleXIn;
nextSubScaleY = $(this).data('scaleyin') ? $(this).data('scaleyin') : ls.lt.scaleYIn;
}else{
nextSubScaleX = nextSubScaleY = nextSubScale;
}
var toi = $(this).data('transformoriginin') ? $(this).data('transformoriginin').split(' ') : ls.lt.transformOriginIn;
for(var t =0;t<toi.length;t++){
if( toi[t].indexOf('%') === -1 && toi[t].indexOf('left') !== -1 && toi[t].indexOf('right') !== -1 && toi[t].indexOf('top') !== -1 && toi[t].indexOf('bottom') !== -1 ){
toi[t] = '' + parseInt( toi[t] ) * ls.g.ratio + 'px';
}
}
var nextSubTransformOrigin = toi.join(' ');
var nextSubPerspective = $(this).data('perspectivein') ? $(this).data('perspectivein') : ls.lt.perspectiveIn;
// }
// IMPROVEMENT v4.0 Distance (P.level): -1
var endLeft = parseInt( $(this).css('left') );
var endTop = parseInt( $(this).css('top') );
var nextSubPLevel = parseInt( $(this).attr('class').split('ls-l')[1] );
// BUGFIX v5.0.1 Fixed the starting position of layers with percentage value of width
if( $(this)[0].style.width.indexOf('%') !== -1 ){
$(this).css({
width: ls.g.sliderWidth() / 100 * parseInt( $(this)[0].style.width )
});
}
var wh = $(this).outerWidth() > $(this).outerHeight() ? $(this).outerWidth() : $(this).outerHeight();
var modX = parseInt( nextSubRotate ) === 0 ? $(this).outerWidth() : wh;
var modY = parseInt( nextSubRotate ) === 0 ? $(this).outerHeight() : wh;
// console.log( modX, $(this).outerWidth(), $(this).width(), $(this).height(), $(this)[0].style.width, $(this).outerHeight(), wh );
if( ( nextSubPLevel === -1 && nextSubSlideDir !== 'new' ) || ( $(this).data('offsetxin') === 'left' || $(this).data('offsetxin') === 'right' ) ){
if( lml < 0 ){
lml = - ( endLeft + ( nextSubScaleX / 2 + .5 ) * modX + 100 );
}else if( lml > 0 ){
lml = ls.g.sliderWidth() - endLeft + ( nextSubScaleX / 2 - .5 ) * modX + 100;
}
}else{
lml = lml * ls.g.ratio;
}
if( ( nextSubPLevel === -1 && nextSubSlideDir !== 'new' ) || ( $(this).data('offsetyin') === 'top' || $(this).data('offsetyin') === 'bottom' ) ){
if( lmt < 0 ){
lmt = - ( endTop + ( nextSubScaleY / 2 + .5 ) * modY + 100 );
}else if( lmt > 0 ){
lmt = ls.g.sliderHeight() - endTop + ( nextSubScaleY / 2 - .5 ) * modY + 100;
}
}else{
lmt = lmt * ls.g.ratio;
}
if( nextSubPLevel === -1 || nextSubSlideDir === 'new'){
var nextSubPar = 1;
}else{
var nextSubParMod = ls.g.nextLayer.data('parallaxin') ? parseInt(ls.g.nextLayer.data('parallaxin')) : ls.o.parallaxIn;
var nextSubPar = nextSubPLevel * nextSubParMod;
}
if( $(this).data('transitiontype') === 'new' ){
var deI = ls.lt.delayIn;
var duI = ls.lt.durationIn;
var eI = ls.lt.easingIn;
}else{
var deI = ls.o.delayIn;
var duI = ls.o.durationIn;
var eI = ls.o.easingIn;
}
var nextSubDelay = $(this).data('delayin') ? parseInt($(this).data('delayin')) : deI;
var nextSubTime = $(this).data('durationin') ? parseInt($(this).data('durationin')) : duI;
var nextSubEasing = $(this).data('easingin') ? $(this).data('easingin') : eI;
var cursub = $(this);
var nextSubCallback = function(){
// BUGFIX v5.1.0 Removing transition property from video layers
if( cursub.hasClass('ls-video-layer') ){
cursub.addClass('ls-videohack');
}
// NEW FEATURE v2.0 autoPlayVideos
if( ls.o.autoPlayVideos == true ){
// YouTube & Vimeo videos
cursub.find('.ls-videopreview').click();
// HTML5 videos
cursub.find('video, audio').each(function(){
if( typeof $(this)[0].currentTime !== 0){
$(this)[0].currentTime = 0;
}
$(this).click();
});
}
// NEW FEATURE v3.0 showUntil sublayers
// IMPROVEMENT v5.2.0 video layers with auto play will skip showuntil feature
if( ( !cursub.hasClass('ls-video-layer') || ( cursub.hasClass('ls-video-layer') && ls.o.autoPlayVideos === false ) ) && cursub.data('showuntil') > 0 ){
// IMPROVEMENT v4.5.0 sublayerShowUntil will be called anly if necessary
cursub.data('showUntilTimer', setTimeout(function(){
ls.sublayerShowUntil( cursub );
}, cursub.data('showuntil') ));
}
};
$(this).css({
marginLeft : 0,
marginTop : 0
});
var css = {
scaleX : nextSubScaleX,
scaleY : nextSubScaleY,
skewX : nextSubSkewX,
skewY : nextSubSkewY,
rotation : nextSubRotate,
rotationX : nextSubRotateX,
rotationY : nextSubRotateY,
visibility : 'visible',
x : lml * nextSubPar,
y : lmt * nextSubPar
};
var transition = {
rotation : 0,
rotationX : 0,
rotationY : 0,
skewX : 0,
skewY : 0,
scaleX : 1,
scaleY : 1,
ease : lsConvertEasing( nextSubEasing ),
delay : nextSubDelay/1000,
x : 0,
y : 0,
onComplete : function(){
nextSubCallback();
}
};
if( nextSubSlideDir.indexOf('fade') != -1 || ( $(this).data('fadein') !== 'false' && $(this).data('transitiontype') === 'new' ) ){
css['opacity'] = 0;
transition['opacity'] = $(this).data( 'originalOpacity' );
}
// $(this).css( css );
// $(this).stop().delay( curDelay + nextDelay + nextSubDelay ).animate( transition, nextSubTime, nextSubEasing, function(){
// if( ls.g.ie78 & $(this).data( 'originalOpacity') === 1 ){
// $(this).get(0).style.removeAttribute('filter');
// }
// nextSubCallback();
// });
if( $(this).data('tr') ){
$(this).data('tr').kill();
}
TweenLite.set( $(this)[0],{
transformPerspective : nextSubPerspective,
transformOrigin : nextSubTransformOrigin
});
$(this).data('tr', TweenLite.fromTo($(this)[0],nextSubTime/1000,css,transition) );
});
};
/* NEW FEATURE v4.0 2D & 3D Layer Transitions */
// Selecting ONE transition (random)
// If the browser doesn't support CSS3 3D, 2D fallback mode will be used instead
// In this case, if user didn't specify any 2D transitions, a random will be selected
var selectTransition = function(){
// if the browser supports CSS3 3D and user specified at least one of 3D transitions
if( lsSupport3D( $(el) ) && ( ls.g.nextLayer.data('transition3d') || ls.g.nextLayer.data('customtransition3d') ) ){
if( ls.g.nextLayer.data('transition3d') && ls.g.nextLayer.data('customtransition3d') ){
var rnd = Math.floor(Math.random() * 2);
var rndT = [['3d',ls.g.nextLayer.data('transition3d')],['custom3d',ls.g.nextLayer.data('customtransition3d')]];
getTransitionType(rndT[rnd][0],rndT[rnd][1]);
}else if( ls.g.nextLayer.data('transition3d') ){
getTransitionType('3d',ls.g.nextLayer.data('transition3d'));
}else{
getTransitionType('custom3d',ls.g.nextLayer.data('customtransition3d'));
}
}else{
if( ls.g.nextLayer.data('transition2d') && ls.g.nextLayer.data('customtransition2d') ){
var rnd = Math.floor(Math.random() * 2);
var rndT = [['2d',ls.g.nextLayer.data('transition2d')],['custom2d',ls.g.nextLayer.data('customtransition2d')]];
getTransitionType(rndT[rnd][0],rndT[rnd][1]);
}else if( ls.g.nextLayer.data('transition2d') ){
getTransitionType('2d',ls.g.nextLayer.data('transition2d'));
}else if( ls.g.nextLayer.data('customtransition2d') ){
getTransitionType('custom2d',ls.g.nextLayer.data('customtransition2d'));
}else{
getTransitionType('2d','1');
}
}
};
// Needed by the demo page
var selectCustomTransition = function(){
if( lsSupport3D( $(el) ) && LSCustomTransition.indexOf('3d') != -1 ){
getTransitionType('3d',LSCustomTransition.split(':')[1]);
}else{
if( LSCustomTransition.indexOf('3d') != -1){
getTransitionType('2d','all');
}else{
getTransitionType('2d',LSCustomTransition.split(':')[1]);
}
}
};
// Choosing layer transition type (2d, 3d, or both)
var getTransitionType = function(type,transitionlist){
var tr = type.indexOf('custom') == -1 ? ls.t : ls.ct;
var tt = '3d', lt, number;
if( type.indexOf('2d') != -1 ){
tt = '2d';
}
if( transitionlist.indexOf('last') != -1 ){
number = tr['t'+tt].length-1;
lt = 'last';
}else if( transitionlist.indexOf('all') != -1){
number = Math.floor(Math.random() * lsCountProp(tr['t'+tt]) );
lt = 'random from all';
}else{
var t = transitionlist.split(',');
var l = t.length;
number = parseInt(t[Math.floor(Math.random() * l)])-1;
lt = 'random from specified';
}
slideTransition(tt,tr['t'+tt][number]);
// $('.test').html('Originals:<br><br>t3D: '+ls.g.nextLayer.data('transition3d')+'<br>t2D: '+ls.g.nextLayer.data('transition2d')+'<br>custom3D: '+ls.g.nextLayer.data('customtransition3d')+'<br>custom2D: '+ls.g.nextLayer.data('customtransition2d')+'<br><br>Support 3D: '+lsSupport3D( $(el) )+'<br><br>Selected transition:<br><br>Type: '+type+' ('+lt+')<br>Number in transition list: '+(number+1)+'<br>Name of the transition: '+tr['t'+tt][number]['name']);
};
// The slideTransition function
var slideTransition = function(type,prop){
var inner = $(el).find('.ls-inner');
// sublayersDurationOut - for future usage
var sublayersDurationOut = ls.g.curLayer.find('*[class*="ls-l"]').length > 0 ? 1000 : 0;
// Detecting a carousel transition - Transition name must have the carousel string
var carousel = prop.name.toLowerCase().indexOf('carousel') == -1 ? false : true;
// Detecting a crossfade transition - Transition name must have the crossfad string
var crossfade = prop.name.toLowerCase().indexOf('crossfad') == -1 ? false : true;
// Calculating cols and rows
var cols = typeof(prop.cols);
var rows = typeof(prop.rows);
switch( cols ){
case 'number':
cols = prop.cols;
break;
case 'string':
cols = Math.floor( Math.random() * ( parseInt( prop.cols.split(',')[1] ) - parseInt( prop.cols.split(',')[0] ) + 1) ) + parseInt( prop.cols.split(',')[0] );
break;
default:
cols = Math.floor( Math.random() * ( prop.cols[1] - prop.cols[0] + 1) ) + prop.cols[0];
break;
}
switch( rows ){
case 'number':
rows = prop.rows;
break;
case 'string':
rows = Math.floor( Math.random() * ( parseInt( prop.rows.split(',')[1] ) - parseInt( prop.rows.split(',')[0] ) + 1) ) + parseInt( prop.rows.split(',')[0] );
break;
default:
rows = Math.floor( Math.random() * ( prop.rows[1] - prop.rows[0] + 1) ) + prop.rows[0];
break;
}
if( ( ls.g.isMobile() == true && ls.o.optimizeForMobile == true ) || ( ls.g.ie78 && ls.o.optimizeForIE78 == true ) ){
// Reducing cols in three steps
if( cols >= 15 ){
cols = 7;
}else if( cols >= 5 ){
cols = 4;
}else if( cols >= 4 ){
cols = 3;
}else if( cols > 2 ){
cols = 2;
}
// Reducing rows in three steps
if( rows >= 15 ){
rows = 7;
}else if( rows >= 5 ){
rows = 4;
}else if( rows >= 4 ){
rows = 3;
}else if( rows > 2 ){
rows = 2;
}
// Reducing more :)
if( rows > 2 && cols > 2 ){
rows = 2;
if( cols > 4){
cols = 4;
}
}
}
var tileWidth = $(el).find('.ls-inner').width() / cols;
var tileHeight = $(el).find('.ls-inner').height() / rows;
// Creating HTML markup for layer transitions
if( !ls.g.ltContainer ){
ls.g.ltContainer = $('<div>').addClass('ls-lt-container').addClass('ls-overflow-hidden').css({
width : inner.width(),
height : inner.height()
}).prependTo( inner );
}else{
ls.g.ltContainer.stop(true,true).empty().css({
display : 'block',
width : inner.width(),
height : inner.height()
});
}
// Setting size
var restW = inner.width() - Math.floor(tileWidth) * cols;
var restH = inner.height() - Math.floor(tileHeight) * rows;
var tileSequence = [];
// IMPROVEMENT v4.1.3 Array-randomizer is now a local function
// Randomize array function
tileSequence.randomize = function() {
var i = this.length, j, tempi, tempj;
if ( i == 0 ) return false;
while ( --i ) {
j = Math.floor( Math.random() * ( i + 1 ) );
tempi = this[i];
tempj = this[j];
this[i] = tempj;
this[j] = tempi;
}
return this;
}
for(var ts=0; ts<cols * rows; ts++){
tileSequence.push(ts);
}
// Setting the sequences of the transition
switch( prop.tile.sequence ){
case 'reverse':
tileSequence.reverse();
break;
case 'col-forward':
tileSequence = lsOrderArray(rows,cols,'forward');
break;
case 'col-reverse':
tileSequence = lsOrderArray(rows,cols,'reverse');
break;
case 'random':
tileSequence.randomize();
break;
}
var curBG = ls.g.curLayer.find('.ls-bg');
var nextBG = ls.g.nextLayer.find('.ls-bg');
// IMPROVEMENT v4.6.0 If current and next layer both have no BG, skipping the slide transition
if( curBG.length == 0 && nextBG.length == 0 ){
type = '2d';
prop = $.extend(true, {}, ls.t['t2d'][0]);
prop.transition.duration = 1
prop.tile.delay = 0;
}
if( type == '3d' ){
ls.g.totalDuration = ((cols * rows) - 1) * prop.tile.delay;
var stepDuration = 0;
if( prop.before && prop.before.duration ){
stepDuration += prop.before.duration;
}
if( prop.animation && prop.animation.duration ){
stepDuration += prop.animation.duration;
}
if( prop.after && prop.after.duration ){
stepDuration += prop.after.duration;
}
ls.g.totalDuration += stepDuration;
var stepDelay = 0;
if( prop.before && prop.before.delay ){
stepDelay += prop.before.delay;
}
if( prop.animation && prop.animation.delay ){
stepDelay += prop.animation.delay;
}
if( prop.after && prop.after.delay ){
stepDelay += prop.after.delay;
}
ls.g.totalDuration += stepDelay;
}else{
ls.g.totalDuration = ((cols * rows) - 1) * prop.tile.delay + prop.transition.duration;
// IMPROVEMENT v4.5.0 Creating separated containers for current and next tiles
ls.g.curTiles = $('<div>').addClass('ls-curtiles').appendTo( ls.g.ltContainer );
ls.g.nextTiles = $('<div>').addClass('ls-nexttiles').appendTo( ls.g.ltContainer );
}
var pn = ls.g.prevNext;
// Creating cuboids for 3d or tiles for 2d transition (cols * rows)
for(var tiles=0; tiles < cols * rows; tiles++){
var rW = tiles%cols == 0 ? restW : 0;
var rH = tiles > (rows-1)*cols-1 ? restH : 0;
var tile = $('<div>').addClass('ls-lt-tile').css({
width : Math.floor(tileWidth) + rW,
height : Math.floor(tileHeight) + rH
}).appendTo( ls.g.ltContainer );
var curTile, nextTile;
// If current transition is a 3d transition
if( type == '3d' ){
tile.addClass('ls-3d-container');
var W = Math.floor(tileWidth) + rW;
var H = Math.floor(tileHeight) + rH;
var D;
if( prop.animation.direction == 'horizontal' ){
if( Math.abs(prop.animation.transition.rotateY) > 90 && prop.tile.depth != 'large' ){
D = Math.floor( W / 7 ) + rW;
}else{
D = W;
}
}else{
if( Math.abs(prop.animation.transition.rotateX) > 90 && prop.tile.depth != 'large' ){
D = Math.floor( H / 7 ) + rH;
}else{
D = H;
}
}
var W2 = W/2;
var H2 = H/2;
var D2 = D/2;
// createCuboids function will append cuboids with their style settings to their container
// BUGFIX v5.1.2 the prefixless transform must be the last property
var createCuboids = function(c,a,w,h,tx,ty,tz,rx,ry){
$('<div>').addClass(c).css({
width: w,
height: h,
'-o-transform': 'translate3d('+tx+'px, '+ty+'px, '+tz+'px) rotateX('+rx+'deg) rotateY('+ry+'deg) rotateZ(0deg) scale3d(1, 1, 1)',
'-ms-transform': 'translate3d('+tx+'px, '+ty+'px, '+tz+'px) rotateX('+rx+'deg) rotateY('+ry+'deg) rotateZ(0deg) scale3d(1, 1, 1)',
'-moz-transform': 'translate3d('+tx+'px, '+ty+'px, '+tz+'px) rotateX('+rx+'deg) rotateY('+ry+'deg) rotateZ(0deg) scale3d(1, 1, 1)',
'-webkit-transform': 'translate3d('+tx+'px, '+ty+'px, '+tz+'px) rotateX('+rx+'deg) rotateY('+ry+'deg) rotateZ(0deg) scale3d(1, 1, 1)',
'transform': 'translate3d('+tx+'px, '+ty+'px, '+tz+'px) rotateX('+rx+'deg) rotateY('+ry+'deg) rotateZ(0deg) scale3d(1, 1, 1)'
}).appendTo(a);
};
createCuboids('ls-3d-box',tile,0,0,0,0,-D2,0,0);
var backRotX = 0
var topRotX = 0
var bottomRotX = 0
if( prop.animation.direction == 'vertical' && Math.abs(prop.animation.transition.rotateX) > 90){
createCuboids('ls-3d-back',tile.find('.ls-3d-box'),W,H,-W2,-H2,-D2,180,0);
}else{
createCuboids('ls-3d-back',tile.find('.ls-3d-box'),W,H,-W2,-H2,-D2,0,180);
}
createCuboids('ls-3d-bottom',tile.find('.ls-3d-box'),W,D,-W2,H2-D2,0,-90,0);
createCuboids('ls-3d-top',tile.find('.ls-3d-box'),W,D,-W2,-H2-D2,0,90,0);
createCuboids('ls-3d-front',tile.find('.ls-3d-box'),W,H,-W2,-H2,D2,0,0);
createCuboids('ls-3d-left',tile.find('.ls-3d-box'),D,H,-W2-D2,-H2,0,0,-90);
createCuboids('ls-3d-right',tile.find('.ls-3d-box'),D,H,W2-D2,-H2,0,0,90);
curTile = tile.find('.ls-3d-front');
if( prop.animation.direction == 'horizontal' ){
if( Math.abs(prop.animation.transition.rotateY) > 90 ){
nextTile = tile.find('.ls-3d-back');
}else{
nextTile = tile.find('.ls-3d-left, .ls-3d-right');
}
}else{
if( Math.abs(prop.animation.transition.rotateX) > 90 ){
nextTile = tile.find('.ls-3d-back');
}else{
nextTile = tile.find('.ls-3d-top, .ls-3d-bottom');
}
}
// Animating cuboids
var curCubDelay = tileSequence[tiles] * prop.tile.delay;
var curCub = ls.g.ltContainer.find('.ls-3d-container:eq('+tiles+') .ls-3d-box');
var tl = new TimelineLite();
if( prop.before && prop.before.transition ){
prop.before.transition.delay = prop.before.transition.delay ? (prop.before.transition.delay + curCubDelay)/1000 : curCubDelay/1000;
tl.to( curCub[0],prop.before.duration/1000,lsConvertTransition( prop.before.transition, prop.before.easing ));
}else{
prop.animation.transition.delay = prop.animation.transition.delay ? (prop.animation.transition.delay + curCubDelay)/1000 : curCubDelay/1000;
}
tl.to( curCub[0],prop.animation.duration/1000,lsConvertTransition( prop.animation.transition, prop.animation.easing ));
if( prop.after ){
if( !prop.after.transition ){
prop.after.transition = {};
}
tl.to( curCub[0],prop.after.duration/1000,lsConvertTransition( prop.after.transition, prop.after.easing, 'after' ));
}
}else{
// If current transition is a 2d transition
var T1 = L1 = T2 = L2 = 'auto';
var O1 = O2 = 1;
if( prop.transition.direction == 'random' ){
var dir = ['top','bottom','right','left'];
var direction = dir[Math.floor(Math.random() * dir.length )];
}else{
var direction = prop.transition.direction;
}
// IMPROVEMENT v4.5.0 Reversing animation directions if slider is moving backwards
if( prop.name.toLowerCase().indexOf('mirror') != -1 && tiles%2 == 0 ){
if( pn == 'prev' ){
pn = 'next';
}else{
pn = 'prev';
}
}
if( pn == 'prev' ){
switch( direction ){
case 'top':
direction = 'bottom';
break;
case 'bottom':
direction = 'top';
break;
case 'left':
direction = 'right';
break;
case 'right':
direction = 'left';
break;
case 'topleft':
direction = 'bottomright';
break;
case 'topright':
direction = 'bottomleft';
break;
case 'bottomleft':
direction = 'topright';
break;
case 'bottomright':
direction = 'topleft';
break;
}
}
switch( direction ){
case 'top':
T1 = T2 = -tile.height();
L1 = L2 = 0;
break;
case 'bottom':
T1 = T2 = tile.height();
L1 = L2 = 0;
break;
case 'left':
T1 = T2 = 0;
L1 = L2 = -tile.width();
break;
case 'right':
T1 = T2 = 0;
L1 = L2 = tile.width();
break;
case 'topleft':
T1 = tile.height();
T2 = 0;
L1 = tile.width();
L2 = 0;
break;
case 'topright':
T1 = tile.height();
T2 = 0;
L1 = - tile.width();
L2 = 0;
break;
case 'bottomleft':
T1 = - tile.height();
T2 = 0;
L1 = tile.width();
L2 = 0;
break;
case 'bottomright':
T1 = - tile.height();
T2 = 0;
L1 = - tile.width();
L2 = 0;
break;
}
ls.g.scale2D = prop.transition.scale ? prop.transition.scale : 1;
if( carousel == true && ls.g.scale2D != 1 ){
T1 = T1 / 2;
T2 = T2 / 2;
L1 = L1 / 2;
L2 = L2 / 2;
}
// Selecting the type of the transition
// if( !ls.g.ie78 || ( ls.g.ie78 && !ls.o.optimizeForIE78 ) || ( ls.g.ie78 && ls.o.optimizeForIE78 == true && prop.name.toLowerCase().indexOf('crossfade') != -1 ) ){
switch( prop.transition.type ){
case 'fade':
T1 = T2 = L1 = L2 = 0;
O1 = 0;
O2 = 1;
break;
case 'mixed':
O1 = 0;
O2 = 1;
if( ls.g.scale2D == 1 ){
T2 = L2 = 0;
}
break;
}
// }
// IMPROVEMENT v4.5.0 Implemented Rotation and Scale into 2D Transitions
if((( prop.transition.rotate || prop.transition.rotateX || prop.transition.rotateY ) || ls.g.scale2D != 1 ) && !ls.g.ie78 && prop.transition.type != 'slide' ){
tile.css({
overflow : 'visible'
});
}else{
tile.css({
overflow : 'hidden'
});
}
if( carousel == true){
ls.g.curTiles.css({
overflow: 'visible'
});
}else{
ls.g.curTiles.css({
overflow: 'hidden'
});
}
if( crossfade == true || prop.transition.type == 'slide' || carousel == true ){
var tileInCur = tile.appendTo( ls.g.curTiles );
var tileInNext = tile.clone().appendTo( ls.g.nextTiles );
curTile = $('<div>').addClass('ls-curtile').appendTo( tileInCur );
}else{
var tileInNext = tile.appendTo( ls.g.nextTiles );
}
nextTile = $('<div>').addClass('ls-nexttile').appendTo( tileInNext ).css({
top : -T1,
left : -L1,
dispay : 'block',
opacity : O1
});
// Animating tiles
var curTileDelay = tileSequence[tiles] * prop.tile.delay;
// IMPROVEMENT v4.5.0 Implemented various types of rotations into 2D Transitions
var r = prop.transition.rotate ? prop.transition.rotate : 0;
var rX = prop.transition.rotateX ? prop.transition.rotateX : 0;
var rY = prop.transition.rotateY ? prop.transition.rotateY : 0;
// Reversing rotation degrees if slider is moving backwards
if( pn == 'prev' ){
r = -r;
rX = -rX;
rY = -rY;
}
TweenLite.fromTo(nextTile[0],prop.transition.duration/1000,{
rotation : r,
rotationX : rX,
rotationY : rY,
scale : ls.g.scale2D
},{
delay : curTileDelay / 1000,
top : 0,
left : 0,
opacity : O2,
rotation : 0,
rotationX : 0,
rotationY : 0,
scale : 1,
ease : lsConvertEasing( prop.transition.easing )
});
// IMPROVEMENT v5.0.0 Smart crossfading for semi-transparent PNG and different size JPG backgrounds
if(
crossfade == true && (
nextBG.length < 1 || (
nextBG.length > 0 && (
nextBG.attr('src').toLowerCase().indexOf('png') != -1 || (
nextBG.width() < ls.g.sliderWidth() || nextBG.height() < ls.g.sliderHeight()
)
)
)
)
){
TweenLite.to(curTile[0],prop.transition.duration/1000,{
delay : curTileDelay / 1000,
opacity : 0,
ease : lsConvertEasing( prop.transition.easing )
});
}
if( ( prop.transition.type == 'slide' || carousel == true ) && prop.name.toLowerCase().indexOf('mirror') == -1 ){
var r2 = 0;
if( r != 0 ){
r2 = -r;
}
TweenLite.to(curTile[0],prop.transition.duration/1000,{
delay : curTileDelay / 1000,
top : T2,
left : L2,
rotation : r2,
scale : ls.g.scale2D,
opacity: O1,
ease : lsConvertEasing( prop.transition.easing )
});
}
}
// Appending the background images of current and next layers into the tiles on both of 2d & 3d transitions
// BUGFIX v5.0.0 added Math.floor to prevent '1px bug' under Safari and Firefox
if( curBG.length ){
if( type == '3d' || ( type == '2d' && ( crossfade == true || prop.transition.type == 'slide' || carousel == true ) ) ){
curTile.append($('<img>').attr('src', curBG.attr('src')).css({
width : curBG[0].style.width,
height : curBG[0].style.height,
marginLeft : parseFloat(curBG.css('margin-left')) - parseFloat(tile.position().left),
marginTop : parseFloat(curBG.css('margin-top')) - parseFloat(tile.position().top)
}));
}else if( ls.g.curTiles.children().length == 0 ){
ls.g.curTiles.append($('<img>').attr('src', curBG.attr('src')).css({
width : curBG[0].style.width,
height : curBG[0].style.height,
marginLeft : parseFloat(curBG.css('margin-left')),
marginTop : parseFloat(curBG.css('margin-top'))
}));
}
}
if( nextBG.length ){
nextTile.append( $('<img>').attr('src', nextBG.attr('src')).css({
width : nextBG[0].style.width,
height : nextBG[0].style.height,
marginLeft : parseFloat(nextBG.css('margin-left')) - parseFloat(tile.position().left),
marginTop : parseFloat(nextBG.css('margin-top')) - parseFloat(tile.position().top)
}));
}
}
// Storing current and next layer elements in a local variable (needed by setTimeout functions in some cases)
var curLayer = ls.g.curLayer;
var nextLayer = ls.g.nextLayer;
// Hiding the background image of the current and next layers (immediately)
setTimeout(function(){
curLayer.find('.ls-bg').css({
visibility : 'hidden'
});
},50);
nextLayer.find('.ls-bg').css({
visibility : 'hidden'
});
ls.g.ltContainer.removeClass('ls-overflow-hidden');
// Sliding out the sublayers of the current layer
// (immediately, delay out and duration out properties are not applied to the sublayers during the new layer transitions)
curSubLayers(sublayersDurationOut);
// BUGFIX v5.2.0 prevents background flickering in some cases
if( sublayersDurationOut === 0 ){
sublayersDurationOut = 10;
}
// Hiding current layer after its sublayers animated out
setTimeout(function(){
curLayer.css({
width: 0
});
}, sublayersDurationOut );
// Calculating next layer delay
var nextLayerTimeShift = parseInt(nextLayer.data('timeshift')) ? parseInt(nextLayer.data('timeshift')) : 0;
var nextLayerDelay = ls.g.totalDuration + nextLayerTimeShift > 0 ? ls.g.totalDuration + nextLayerTimeShift : 0;
// Showing next layer and sliding sublayers of the next layer in after the current layer transition ended
setTimeout(function(){
if( ls.g.resize == true ){
ls.g.ltContainer.empty();
curLayer.removeClass('ls-active');
ls.makeResponsive( nextLayer, function(){
ls.g.resize = false;
});
}
// Sliding in / fading in the sublayers of the next layer
nextSubLayers();
// NEW FEATURE v4.6.0 Hiding background if the next layer has png BG or has no BG
// BUGFIX v4.6.1 Changed some properties to prevent flickering
if( nextLayer.find('.ls-bg').length < 1 || ( nextLayer.find('.ls-bg').length > 0 && nextLayer.find('.ls-bg').attr('src').toLowerCase().indexOf('png') != -1 ) ){
ls.g.ltContainer.delay(350).fadeOut(300,function(){
$(this).empty().show();
});
}
// Displaying the next layer (immediately)
nextLayer.css({
width : ls.g.sliderWidth(),
height : ls.g.sliderHeight()
});
}, nextLayerDelay );
// BUGFIX v5.0.1 Added a minimal value of ls.g.totalDuration
// CHANGED in v5.1.0 due to a fading issue in carousel transition
if( ls.g.totalDuration < 300 ){
ls.g.totalDuration = 1000;
}
// Changing visibility to visible of the background image of the next layer and overflow to hidden of .ls-lt-container after the transition and calling callback function
setTimeout(function(){
ls.g.ltContainer.addClass('ls-overflow-hidden');
nextLayer.addClass('ls-active');
if( nextLayer.find('.ls-bg').length ){
nextLayer.find('.ls-bg').css({
display : 'none',
visibility : 'visible'
});
if( ls.g.ie78 ){
nextLayer.find('.ls-bg').css('display','block');
setTimeout(function(){
curLayerCallback();
},500);
}else{
nextLayer.find('.ls-bg').fadeIn(500, function(){
curLayerCallback();
});
}
}else{
curLayerCallback();
}
}, ls.g.totalDuration );
};
/* Selecting and running the transition */
// NEW FEATURE v5.2.0 Starts the slider only if it is in the viewport
var startInViewport = function(){
ls.g.nextLayer.find(' > *[class*="ls-l"]').each(function(){
$(this).css({
visibility : 'hidden'
});
});
ls.g.sliderTop = $(el).offset().top;
$(window).load(function(){
setTimeout(function(){
ls.g.sliderTop = $(el).offset().top;
}, 20);
});
var isSliderInViewport = function(){
if( $(window).scrollTop() + $(window).height() - ( ls.g.sliderHeight() / 2 ) > ls.g.sliderTop ){
ls.g.firstSlideAnimated = true;
if( ls.g.originalAutoStart === true ){
//ls.g.autoSlideshow = true;
ls.o.autoStart = true;
ls.start();
}
nextSubLayers();
}
}
$(window).scroll(function(){
if( !ls.g.firstSlideAnimated ){
isSliderInViewport();
}
});
isSliderInViewport();
};
var tType = ( ( ls.g.nextLayer.data('transition3d') || ls.g.nextLayer.data('transition2d') ) && ls.t ) || ( ( ls.g.nextLayer.data('customtransition3d') || ls.g.nextLayer.data('customtransition2d') ) && ls.ct ) ? 'new' : 'old';
if( !ls.g.nextLayer.data('transitiontype') ){
ls.transitionType( ls.g.nextLayer );
}
if( ls.g.nextLayer.data('transitiontype') === 'new' ){
tType = 'new';
}
if( ls.o.slideTransition ){
tType = 'forced';
}
if( ls.o.animateFirstSlide && !ls.g.firstSlideAnimated ){
// BUGFIX v3.5 there is no need to animate 'current' layer if the following conditions are true
// this fixes the sublayer animation direction bug
if( ls.g.layersNum == 1 ){
var curDelay = 0;
// IMPROVEMENT v4.1.0 Calling cbAnimStop(); function if only one layer is in the slider
ls.o.cbAnimStop(ls.g);
}else{
var nextLayerTimeShift = parseInt(ls.g.nextLayer.data('timeshift')) ? parseInt(ls.g.nextLayer.data('timeshift')) : 0;
var d = tType == 'new' ? 0 : curDuration;
ls.g.t5 = setTimeout(function(){
curLayerCallback();
}, d + Math.abs(nextLayerTimeShift) );
}
// curDelay must be 0!
ls.g.totalDuration = true;
// Animating SUBLAYERS of the first layer
if( ls.o.startInViewport === true ){
startInViewport();
}else{
ls.g.firstSlideAnimated = true;
nextSubLayers();
}
// Displaying the first layer (immediately)
ls.g.nextLayer.css({
width : ls.g.sliderWidth(),
height : ls.g.sliderHeight()
});
if( !ls.g.ie78 ){
ls.g.nextLayer.find('.ls-bg').css({
display : 'none'
}).fadeIn(ls.o.sliderFadeInDuration);
}
ls.g.isLoading = false;
}else{
switch(tType){
// Old transitions (sliding layers)
case 'old':
ls.g.totalDuration = false;
// BUGFIX v4.5.0 Removing elements from ls-lt-container is necessary
if( ls.g.ltContainer ){
ls.g.ltContainer.empty();
}
// Animating CURRENT LAYER and its SUBLAYERS
curLayer();
curSubLayers();
// Animating NEXT LAYER and its SUBLAYERS
nextLayer();
nextSubLayers();
break;
// NEW FEATURE v4.0 2D & 3D Layer Transitions
case 'new':
if( typeof LSCustomTransition != 'undefined' ){
selectCustomTransition();
}else{
selectTransition();
}
break;
case 'forced':
slideTransition( ls.o.slideTransition.type, ls.o.slideTransition.obj );
break;
}
}
};
ls.transitionType = function( el ){
var ttype = el.data('ls') ||
( !el.data('ls') &&
!el.data('slidedelay') &&
!el.data('slidedirection') &&
!el.data('slideoutdirection') &&
!el.data('delayin') &&
!el.data('delayout') &&
!el.data('durationin') &&
!el.data('durationout') &&
!el.data('showuntil') &&
!el.data('easingin') &&
!el.data('easingout') &&
!el.data('scalein') &&
!el.data('scaleout') &&
!el.data('rotatein') &&
!el.data('rotateout')
) ? 'new' : 'old';
el.data('transitiontype', ttype);
};
ls.sublayerShowUntil = function( sublayer ){
if( !sublayer.data('transitiontype') ){
ls.transitionType( sublayer );
}
// BUGFIX v5.1.0 Removing ls-videohack class before starting transition
sublayer.removeClass('ls-videohack');
var prevOrNext = ls.g.curLayer;
if( ls.g.prevNext != 'prev' && ls.g.nextLayer ){
prevOrNext = ls.g.nextLayer;
}
var chooseDirection = prevOrNext.data('slidedirection') ? prevOrNext.data('slidedirection') : ls.o.slideDirection;
// Setting the direction of sliding
var slideDirection = ls.g.slideDirections[ls.g.prevNext][chooseDirection];
var curSubSlideDir = sublayer.data('slidedirection') ? sublayer.data('slidedirection') : slideDirection;
var lml, lmt;
switch(curSubSlideDir){
case 'left':
lml = -ls.g.sliderWidth();
lmt = 0;
break;
case 'right':
lml = ls.g.sliderWidth();
lmt = 0;
break;
case 'top':
lmt = -ls.g.sliderHeight();
lml = 0;
break;
case 'bottom':
lmt = ls.g.sliderHeight();
lml = 0;
break;
case 'fade':
lmt = 0;
lml = 0;
break;
}
// NEW FEATURE v1.6 added slideoutdirection to sublayers
// NEW FEATURES 5.0.0 added axis-free transitions with offsetx and offsety properties
if( sublayer.data('transitiontype') === 'new' ){
var curSubSlideOutDir = 'new';
}else{
var curSubSlideOutDir = sublayer.data('slideoutdirection') ? sublayer.data('slideoutdirection') : false;
}
switch(curSubSlideOutDir){
case 'left':
lml = ls.g.sliderWidth();
lmt = 0;
break;
case 'right':
lml = -ls.g.sliderWidth();
lmt = 0;
break;
case 'top':
lmt = ls.g.sliderHeight();
lml = 0;
break;
case 'bottom':
lmt = -ls.g.sliderHeight();
lml = 0;
break;
case 'fade':
lmt = 0;
lml = 0;
break;
case 'new':
if( sublayer.data('offsetxout') ){
if( sublayer.data('offsetxout') === 'left' ){
lml = ls.g.sliderWidth();
}else if( sublayer.data('offsetxout') === 'right' ){
lml = -ls.g.sliderWidth();
}else{
lml = -parseInt( sublayer.data('offsetxout') );
}
}else{
lml = -ls.lt.offsetXOut;
}
if( sublayer.data('offsetyout') ){
if( sublayer.data('offsetyout') === 'top' ){
lmt = ls.g.sliderHeight();
}else if( sublayer.data('offsetyout') === 'bottom' ){
lmt = -ls.g.sliderHeight();
}else{
lmt = -parseInt( sublayer.data('offsetyout') );
}
}else{
lmt = -ls.lt.offsetYOut;
}
break;
}
// NEW FEATURE v4.5.0 Rotating & Scaling sublayers
// BUGFIX v4.5.5 changing the default value from 0 to 'none' (because of old jQuery, 1.7.2)
// NEW FEATURES v5.0.0 Added SkewX, SkewY, ScaleX, ScaleY, RotateX & RotateY transitions
var curSubRotate = curSubRotateX = curSubRotateY = curSubScale = curSubSkewX = curSubSkewY = curSubScaleX = curSubScaleY = 'none';
// if( !ls.g.ie78 && ls.g.enableCSS3 ){
curSubRotate = sublayer.data('rotateout') ? sublayer.data('rotateout') : ls.lt.rotateOut;
curSubRotateX = sublayer.data('rotatexout') ? sublayer.data('rotatexout') : ls.lt.rotateXOut;
curSubRotateY = sublayer.data('rotateyout') ? sublayer.data('rotateyout') : ls.lt.rotateYOut;
curSubScale = sublayer.data('scaleout') ? sublayer.data('scaleout') : ls.lt.scaleOut;
curSubSkewX = sublayer.data('skewxout') ? sublayer.data('skewxout') : ls.lt.skewXOut;
curSubSkewY = sublayer.data('skewyout') ? sublayer.data('skewyout') : ls.lt.skewYOut;
if( curSubScale === 1 ){
curSubScaleX = sublayer.data('scalexout') ? sublayer.data('scalexout') : ls.lt.scaleXOut;
curSubScaleY = sublayer.data('scaleyout') ? sublayer.data('scaleyout') : ls.lt.scaleYOut;
}else{
curSubScaleX = curSubScaleY = curSubScale;
}
var too = sublayer.data('transformoriginout') ? sublayer.data('transformoriginout').split(' ') : ls.lt.transformOriginOut;
for(var t =0;t<too.length;t++){
if( too[t].indexOf('%') === -1 && too[t].indexOf('left') !== -1 && too[t].indexOf('right') !== -1 && too[t].indexOf('top') !== -1 && too[t].indexOf('bottom') !== -1 ){
too[t] = '' + parseInt( too[t] ) * ls.g.ratio + 'px';
}
}
var curSubTransformOrigin = too.join(' ');
var curSubPerspective = sublayer.data('perspectiveout') ? sublayer.data('perspectiveout') : ls.lt.perspectiveOut;
// }
// IMPROVEMENT v4.0 Distance (P.level): -1
var endLeft = parseInt( sublayer.css('left') );
var endTop = parseInt( sublayer.css('top') );
var curSubPLevel = parseInt( sublayer.attr('class').split('ls-l')[1] );
var wh = sublayer.outerWidth() > sublayer.outerHeight() ? sublayer.outerWidth() : sublayer.outerHeight();
var modX = parseInt( curSubRotate ) === 0 ? sublayer.outerWidth() : wh;
var modY = parseInt( curSubRotate ) === 0 ? sublayer.outerHeight() : wh;
if( ( curSubPLevel === -1 && curSubSlideOutDir !== 'new' ) || ( sublayer.data('offsetxout') === 'left' || sublayer.data('offsetxout') === 'right' ) ){
if( lml < 0 ){
lml = - ( ls.g.sliderWidth() - endLeft + ( curSubScaleX / 2 - .5 ) * modX + 100 );
}else if( lml > 0 ){
lml = endLeft + ( curSubScaleX / 2 + .5 ) * modX + 100;
}
}else{
lml = lml * ls.g.ratio;
}
if( ( curSubPLevel === -1 && curSubSlideOutDir !== 'new' ) || ( sublayer.data('offsetyout') === 'top' || sublayer.data('offsetyout') === 'bottom' ) ){
if( lmt < 0 ){
lmt = - ( ls.g.sliderHeight() - endTop + ( curSubScaleY / 2 - .5 ) * modY + 100 );
}else if( lmt > 0 ){
lmt = endTop + ( curSubScaleY / 2 + .5 ) * modY + 100;
}
}else{
lmt = lmt * ls.g.ratio;
}
if( curSubPLevel === -1 || curSubSlideOutDir === 'new' ){
var curSubPar = 1;
}else{
var curSubParMod = ls.g.curLayer.data('parallaxout') ? parseInt(ls.g.curLayer.data('parallaxout')) : ls.o.parallaxOut;
var curSubPar = curSubPLevel * curSubParMod;
}
// var curSubDelay = parseInt( sublayer.data('showuntil') );
if( sublayer.data('transitiontype') === 'new' ){
var duO = ls.lt.durationOut;
var eO = ls.lt.easingOut;
}else{
var duO = ls.o.durationOut;
var eO = ls.o.easingOut;
}
var curSubTime = sublayer.data('durationout') ? parseInt(sublayer.data('durationout')) : duO;
// BUGFIX v5.2.0 duration cannot be 0
if( curSubTime === 0 ){ curSubTime = 1 }
var curSubEasing = sublayer.data('easingout') ? sublayer.data('easingout') : eO;
var css = {
visibility : 'hidden'
};
var transition = {
rotation : curSubRotate,
rotationX : curSubRotateX,
rotationY : curSubRotateY,
skewX : curSubSkewX,
skewY : curSubSkewY,
scaleX : curSubScaleX,
scaleY : curSubScaleY,
x : -lml * curSubPar,
y : -lmt * curSubPar,
ease : lsConvertEasing( curSubEasing ),
onComplete : function(){
sublayer.css( css );
}
};
if( curSubSlideOutDir == 'fade' || ( !curSubSlideOutDir && curSubSlideDir == 'fade' ) || ( sublayer.data('fadeout') !== 'false' && sublayer.data('transitiontype') === 'new' ) ){
transition['opacity'] = 0;
css['opacity'] = sublayer.data( 'originalOpacity' );
}
TweenLite.set( sublayer[0],{
transformPerspective : curSubPerspective,
transformOrigin : curSubTransformOrigin
});
TweenLite.to(sublayer[0],curSubTime/1000,transition);
// sublayer.stop(true,false).animate( transition, curSubTime, curSubEasing,function(){
// sublayer.css( css );
// });
};
// v3.6 Improved Debug Mode
// ls.debug = function(){
// ls.d = {
// history : $('<div>'),
// // adds a H1 (title)
// aT : function(content){
// $('<h1>'+content+'</h1>').appendTo( ls.d.history );
// },
// // adds an empty UL
// aeU : function(){
// $('<ul>').appendTo( ls.d.history );
// },
// // adds an UL with a LI
// aU : function(content){
// $('<ul><li>'+content+'</li></ul>').appendTo( ls.d.history );
// },
// // adds a LI into the last UL
// aL : function(content){
// $('<li>'+content+'</li>').appendTo( ls.d.history.find('ul:last') );
// },
// // adds an UL into the last LI of the last UL
// aUU : function(content){
// $('<ul>').appendTo( ls.d.history.find('ul:last li:last') );
// },
// // adds a Function to the first LI inside the last UL
// aF : function(elem){
// ls.d.history.find('ul:last li:last').hover(
// function(){
// elem.css({
// border: '2px solid red',
// marginTop : parseInt( elem.css('margin-top') ) - 2,
// marginLeft : parseInt( elem.css('margin-left') ) - 2
// });
// },
// function(){
// elem.css({
// border: '0px',
// marginTop : parseInt( elem.css('margin-top') ) + 2,
// marginLeft : parseInt( elem.css('margin-left') ) + 2
// });
// }
// );
// },
// show : function(){
// if( !$('body').find('.ls-debug-console').length ){
// if( !ls.d.putData ){
// // Init code
// ls.d.aT('Init code');
// ls.d.aeU();
// for( var prop in ls.o ){
// ls.d.aL(prop+': <strong>' + ls.o[prop] + '</strong>');
// }
// // ls.d.aL('sliderOriginalWidth: <strong>' + ls.g.sliderOriginalWidth + '</strong>');
// // ls.d.aL('sliderOriginalHeight: <strong>' + ls.g.sliderOriginalHeight + '</strong>');
// // Slides, layers data
// ls.d.aT('LayerSlider Content');
// ls.d.aU('Number of slides found: <strong>' + $(el).find('.ls-slide').length + '</strong>');
// $(el).find('.ls-inner .ls-slide, .ls-inner *[class*="ls-l"]').each(function(){
// if( $(this).hasClass('ls-slide') ){
// ls.d.aU('<strong>SLIDE ' + ( $(this).index() + 1 ) + '</strong>');
// ls.d.aUU();
// ls.d.aL('<strong>SLIDE ' + ( $(this).index() + 1 ) + ' properties:</strong><br><br>');
// }else{
// ls.d.aU('&nbsp;&nbsp;&nbsp;&nbsp;Layer ( '+$(this).prop('tagName')+' )');
// ls.d.aF($(this));
// ls.d.aUU();
// ls.d.aL('<strong>'+$(this).prop('tagName')+' layer properties:</strong><br><br>');
// ls.d.aL('distance / class: <strong>'+$(this).attr('class')+'</strong>');
// }
// $.each( $(this).data(),function(name, val) {
// ls.d.aL( name +': <strong>' + val + '</strong>');
// });
// });
// ls.d.putData = true;
// }
// var dc = $('<div>').addClass('ls-debug-console').css({
// position: 'fixed',
// zIndex: '10000000000',
// top: '10px',
// right: '10px',
// width: '300px',
// padding: '20px',
// background: 'black',
// 'border-radius': '10px',
// height: $(window).height() - 60,
// opacity: 0,
// marginRight: 150
// }).appendTo( $('body') ).css({
// marginRight: 0,
// opacity: .9
// }).click(function(e){
// if(e.shiftKey && e.altKey){
// $(this).remove();
// }
// });
// var ds = $('<div>').css({
// width: '100%',
// height: '100%',
// overflow: 'auto'
// }).appendTo( dc );
// var dd = $('<div>').css({
// width: '100%'
// }).appendTo( ds ).append( ls.d.history );
// }
// },
// hide : function(){
// $('body').find('.ls-debug-console').remove();
// }
// };
// $(el).click(function(e){
// if(e.shiftKey && e.altKey){
// ls.d.show();
// }
// });
// };
// initializing
ls.load();
};
var lsConvertEasing = function( e ){
var t;
if( e.toLowerCase().indexOf('swing') !== -1 || e.toLowerCase().indexOf('linear') !== -1 ){
t = Linear.easeNone;
}else if( e.toLowerCase().indexOf('easeinout') !== -1 ){
var ee = e.toLowerCase().split('easeinout')[1];
t = window[ee.charAt(0).toUpperCase() + ee.slice(1)].easeInOut;
}else if( e.toLowerCase().indexOf('easeout') !== -1 ){
var ee = e.toLowerCase().split('easeout')[1];
t = window[ee.charAt(0).toUpperCase() + ee.slice(1)].easeOut;
}else if( e.toLowerCase().indexOf('easein') !== -1 ){
var ee = e.toLowerCase().split('easein')[1];
t = window[ee.charAt(0).toUpperCase() + ee.slice(1)].easeIn;
}
return t;
};
var lsConvertTransition = function( t, e, type, undef ){
if( typeof e === 'undefined' ){
var e = 'easeInOutQuart';
}
var tt = {};
if( t.rotate !== undef ){
tt.rotation = t.rotate;
}
if( t.rotateY !== undef ){
tt.rotationY = t.rotateY;
}
if( t.rotateX !== undef ){
tt.rotationX = t.rotateX;
}
if( type === 'after' ){
tt.scaleX = tt.scaleY = tt.scaleZ = 1;
}else if( t.scale3d !== undef ){
tt.scaleX = tt.scaleY = tt.scaleZ = t.scale3d;
}
if( t.delay ){
tt.delay = type === 'after' ? t.delay/1000 : t.delay;
}
tt.ease = lsConvertEasing( e );
return tt;
};
// Support3D checks the CSS3 3D capability of the browser (based on the idea of Modernizr.js)
var lsSupport3D = function( el ) {
var testEl = $('<div>'),
s3d1 = false,
s3d2 = false,
properties = ['perspective', 'OPerspective', 'msPerspective', 'MozPerspective', 'WebkitPerspective'];
transform = ['transformStyle','OTransformStyle','msTransformStyle','MozTransformStyle','WebkitTransformStyle'];
for (var i = properties.length - 1; i >= 0; i--){
s3d1 = s3d1 ? s3d1 : testEl[0].style[properties[i]] != undefined;
};
// preserve 3D test
for (var i = transform.length - 1; i >= 0; i--){
testEl.css( 'transform-style', 'preserve-3d' );
s3d2 = s3d2 ? s3d2 : testEl[0].style[transform[i]] == 'preserve-3d';
};
// If browser has perspective capability and it is webkit, we must check it with this solution because Chrome can give false positive result if GPU acceleration is disabled
if (s3d1 && testEl[0].style[properties[4]] != undefined){
testEl.attr('id','ls-test3d').appendTo( el );
s3d1 = testEl[0].offsetHeight === 3 && testEl[0].offsetLeft === 9;
testEl.remove();
}
return (s3d1 && s3d2);
};
// Order array function
var lsOrderArray = function(x,y,dir) {
var i = [];
if(dir=='forward'){
for( var a=0; a<x;a++){
for( var b=0; b<y; b++){
i.push(a+b*x);
}
}
}else{
for( var a=x-1; a>-1;a--){
for( var b=y-1; b>-1; b--){
i.push(a+b*x);
}
}
}
return i;
};
// CountProp counts the properties in an object
var lsCountProp = function(obj) {
var count = 0;
for(var prop in obj) {
if(obj.hasOwnProperty(prop)){
++count;
}
}
return count;
};
// We need the browser function (removed from jQuery 1.9)
var lsBrowser = function(){
uaMatch = function( ua ) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
/(webkit)[ \/]([\w.]+)/.exec( ua ) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
/(msie) ([\w.]+)/.exec( ua ) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
var matched = uaMatch( navigator.userAgent ), browser = {};
if ( matched.browser ) {
browser[ matched.browser ] = true;
browser.version = matched.version;
}
if ( browser.chrome ) {
browser.webkit = true;
} else if ( browser.webkit ) {
browser.safari = true;
}
return browser;
};
lsPrefixes = function(obj, method){
var pfx = ['webkit', 'khtml', 'moz', 'ms', 'o', ''];
var p = 0, m, t;
while (p < pfx.length && !obj[m]) {
m = method;
if (pfx[p] == '') {
m = m.substr(0,1).toLowerCase() + m.substr(1);
}
m = pfx[p] + m;
t = typeof obj[m];
if (t != 'undefined') {
pfx = [pfx[p]];
return (t == 'function' ? obj[m]() : obj[m]);
}
p++;
}
};
// Global parameters (Do not change these settings!)
layerSlider.global = {
version : '5.3.0',
isMobile : function(){
if( navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPod/i) || navigator.userAgent.match(/BlackBerry/i) || navigator.userAgent.match(/Windows Phone/i) ){
return true;
}else{
return false;
}
},
isHideOn3D : function(el){
if( el.css('padding-bottom') == 'auto' || el.css('padding-bottom') == 'none' || el.css('padding-bottom') == 0 || el.css('padding-bottom') == '0px' ){
return true;
}else{
return false;
}
},
ie78 : lsBrowser().msie && lsBrowser().version < 9 ? true : false,
originalAutoStart : false,
paused : false,
pausedByVideo : false,
autoSlideshow : false,
isAnimating : false,
layersNum : null,
prevNext : 'next',
slideTimer : null,
sliderWidth : null,
sliderHeight : null,
slideDirections : {
prev : {
left : 'right',
right : 'left',
top : 'bottom',
bottom : 'top'
},
next : {
left : 'left',
right : 'right',
top : 'top',
bottom : 'bottom'
}
},
// Default delay time, fadeout and fadein durations of videoPreview images
v : {
d : 500,
fo : 750,
fi : 500
}
};
// Layer Transition Defaults
layerSlider.layerTransitions = {
offsetXIn : 80,
offsetYIn : 0,
durationIn : 1000,
delayIn : 0,
easingIn : 'easeInOutQuint',
fadeIn : true,
rotateIn : 0,
rotateXIn : 0,
rotateYIn : 0,
scaleIn : 1,
scaleXIn : 1,
scaleYIn : 1,
skewXIn : 0,
skewYIn : 0,
transformOriginIn : ['50%','50%','0'],
perspectiveIn : 500,
offsetXOut : -80,
offsetYOut : 0,
durationOut : 400,
showUntil : 0,
easingOut : 'easeInOutQuint',
fadeOut : true,
rotateOut : 0,
rotateXOut : 0,
rotateYOut : 0,
scaleOut : 1,
scaleXOut : 1,
scaleYOut : 1,
skewXOut : 0,
skewYOut : 0,
transformOriginOut : ['50%','50%','0'],
perspectiveOut : 500
};
layerSlider.slideTransitions = {
slideDelay : 4000 // Time before the next slide will be loading.
};
// Global settings (can be modified)
layerSlider.options = {
// Layout
responsive : true,
responsiveUnder : 0,
layersContainer : 0,
fullScreen : false, // NEW FEATURE 5.5.0
appendTo : '', // NEW FEATURE 5.5.0
// Slideshow
autoStart : true,
startInViewport : true, // NEW FEATURE v5.2.0
pauseOnHover : true,
firstSlide : 1,
animateFirstSlide : true,
sliderFadeInDuration: 350, // NEW FEATURE v5.2.0
loops : 0,
forceLoopNum : true,
twoWaySlideshow : false,
randomSlideshow : false,
// Appearance
skin : 'v5',
skinsPath : '/layerslider/skins/',
globalBGColor : 'transparent',
globalBGImage : false,
// Navigation Area
navPrevNext : true,
navStartStop : true,
navButtons : true,
keybNav : true,
touchNav : true,
hoverPrevNext : true,
hoverBottomNav : false,
showBarTimer : false,
showCircleTimer : true,
// Thumbnail navigation
thumbnailNavigation : 'hover',
tnContainerWidth : '60%',
tnWidth : 100,
tnHeight : 60,
tnActiveOpacity : 35,
tnInactiveOpacity : 100,
// Videos
autoPlayVideos : true,
autoPauseSlideshow : 'auto',
youtubePreview : 'maxresdefault.jpg',
// Preload
imgPreload : true,
lazyLoad : true,
// YourLogo
yourLogo : false,
yourLogoStyle : 'left: -10px; top: -10px;',
yourLogoLink : false,
yourLogoTarget : '_self',
// Optimize for IE7 and IE8
optimizeForMobile : true,
optimizeForIE78 : true,
// NEW FEATURES 5.2.0 Mobile features
hideOnMobile : false,
hideUnder : 0,
hideOver : 1000000,
staticImage : '', // will be available in 5.5.0
// API functions
cbInit : function(element){},
cbStart : function(data){},
cbStop : function(data){},
cbPause : function(data){},
cbAnimStart : function(data){},
cbAnimStop : function(data){},
cbPrev : function(data){},
cbNext : function(data){},
// !!! IMPORTANT !!! The following properties are deprecated from version 5.0.0 DO NOT USE THEM.
// The slider will recognize these properties in the init code or if you add these properties into the style attribute of the layer
// but we recommend you to use to new html5 data attribute (data-ls) with the new properties
slideDelay : 4000,
slideDirection : 'right',
parallaxIn : .45,
parallaxOut : .45,
durationIn : 1000,
durationOut : 1000,
easingIn : 'easeInOutQuint',
easingOut : 'easeInOutQuint',
delayIn : 0,
delayOut : 0
};
})(jQuery);