File: //usr/local/CyberCP/baseTemplate/static/baseTemplate/assets/widgets/layerslider/layerslider.js
/*
* 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(' 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);