diff --git a/gulpfile.js b/gulpfile.js index e89cfc0..889e65d 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -40,7 +40,8 @@ gulp.task('scripts', function() { return gulp.src([ 'src/libs/jquery/dist/jquery.min.js', 'src/libs/modernizr/modernizr-custom.js', - 'src/libs/waypoints/waypoints.min.js' + 'src/libs/waypoints/waypoints.min.js', + 'src/libs/swiper/js/swiper.min.js' ]) .pipe(plumber()) .pipe(concat('libs.min.js')) diff --git a/src/css/main.css b/src/css/main.css index 5ad28d3..08d1b4b 100644 --- a/src/css/main.css +++ b/src/css/main.css @@ -245,7 +245,8 @@ input[type=email] { max-width: 1160px; vertical-align: middle; } -.block { +.block, +.mobile-block { display: inline-block; padding: 30px; width: 360px; @@ -255,16 +256,19 @@ input[type=email] { background-color: #fff; vertical-align: top; text-align: left; } - .block h3 { + .block h3, + .mobile-block h3 { margin: 0; margin-top: 20px; padding: 0; color: #515c71; font-weight: normal; font-size: 16px; } - .block h4 { + .block h4, + .mobile-block h4 { margin-bottom: 0; } - .block p { + .block p, + .mobile-block p { margin-top: 10px; color: #808591; font-size: 14px; @@ -319,6 +323,23 @@ input[type=email] { font-size: 14px; line-height: 24px; } +.mobile-section-text { + display: none; + margin: 40px auto; + width: 360px; + text-align: center; } + .mobile-section-text h2 { + margin: 0; + margin-bottom: 20px; + padding: 0; + color: #515c71; + font-size: 22px; + line-height: 32px; } + .mobile-section-text p { + color: #808591; + font-size: 14px; + line-height: 24px; } + .block-blue { margin-right: 35px; margin-bottom: 40px; @@ -700,6 +721,30 @@ input[type=email] { font-size: 12px; line-height: 18px; } +.mobile-block-square { + display: inline-block; + margin-top: 60px; + margin-right: 36px; + padding: 25px 20px; + width: 160px; + height: 210px; + -webkit-border-radius: 4px; + border-radius: 4px; + background-color: #fff; + vertical-align: top; + text-align: center; } + .mobile-block-square h3 { + margin-top: 10px; + margin-bottom: 0; + color: #515c71; + font-weight: 500; + font-size: 14px; } + .mobile-block-square p { + margin-top: 6px; + color: #808591; + font-size: 12px; + line-height: 18px; } + .shown .block-square { opacity: 1; -webkit-transform: translate3d(0, 0, 0) scale(1); @@ -1088,6 +1133,442 @@ footer { animation-fill-mode: both; } /* Import Libs SASS/CSS */ +/** + * Swiper 3.3.1 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * + * http://www.idangero.us/swiper/ + * + * Copyright 2016, Vladimir Kharlampidi + * The iDangero.us + * http://www.idangero.us/ + * + * Licensed under MIT + * + * Released on: February 7, 2016 + */ +.swiper-container { + margin: 0 auto; + position: relative; + overflow: hidden; + z-index: 1; } + +.swiper-container-no-flexbox .swiper-slide { + float: left; } + +.swiper-container-vertical > .swiper-wrapper { + -webkit-box-orient: vertical; + -ms-flex-direction: column; + -webkit-flex-direction: column; + flex-direction: column; } + +.swiper-wrapper { + position: relative; + width: 100%; + height: 100%; + z-index: 1; + display: -webkit-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-transition-property: -webkit-transform; + transition-property: -webkit-transform; + transition-property: transform; + transition-property: transform, -webkit-transform; + -webkit-box-sizing: content-box; + box-sizing: content-box; } + +.swiper-container-android .swiper-slide, .swiper-wrapper { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + +.swiper-container-multirow > .swiper-wrapper { + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -ms-flex-wrap: wrap; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; } + +.swiper-container-free-mode > .swiper-wrapper { + -webkit-transition-timing-function: ease-out; + transition-timing-function: ease-out; + margin: 0 auto; } + +.swiper-slide { + -webkit-flex-shrink: 0; + -ms-flex: 0 0 auto; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + width: 100%; + height: 100%; + position: relative; } + +.swiper-container-autoheight, .swiper-container-autoheight .swiper-slide { + height: auto; } + +.swiper-container-autoheight .swiper-wrapper { + -webkit-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + -ms-grid-row-align: flex-start; + align-items: flex-start; + -webkit-transition-property: -webkit-transform,height; + -webkit-transition-property: height,-webkit-transform; + transition-property: height,-webkit-transform; + transition-property: transform,height; + transition-property: transform,height,-webkit-transform; } + +.swiper-container .swiper-notification { + position: absolute; + left: 0; + top: 0; + pointer-events: none; + opacity: 0; + z-index: -1000; } + +.swiper-wp8-horizontal { + -ms-touch-action: pan-y; + touch-action: pan-y; } + +.swiper-wp8-vertical { + -ms-touch-action: pan-x; + touch-action: pan-x; } + +.swiper-button-next, .swiper-button-prev { + position: absolute; + top: 50%; + width: 27px; + height: 44px; + margin-top: -22px; + z-index: 10; + cursor: pointer; + background-size: 27px 44px; + background-position: center; + background-repeat: no-repeat; } + +.swiper-button-next.swiper-button-disabled, .swiper-button-prev.swiper-button-disabled { + opacity: .35; + cursor: auto; + pointer-events: none; } + +.swiper-button-prev, .swiper-container-rtl .swiper-button-next { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E"); + left: 10px; + right: auto; } + +.swiper-button-prev.swiper-button-black, .swiper-container-rtl .swiper-button-next.swiper-button-black { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); } + +.swiper-button-prev.swiper-button-white, .swiper-container-rtl .swiper-button-next.swiper-button-white { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); } + +.swiper-button-next, .swiper-container-rtl .swiper-button-prev { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E"); + right: 10px; + left: auto; } + +.swiper-button-next.swiper-button-black, .swiper-container-rtl .swiper-button-prev.swiper-button-black { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); } + +.swiper-button-next.swiper-button-white, .swiper-container-rtl .swiper-button-prev.swiper-button-white { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); } + +.swiper-pagination { + position: absolute; + text-align: center; + -webkit-transition: .3s; + transition: .3s; + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + z-index: 10; } + +.swiper-pagination.swiper-pagination-hidden { + opacity: 0; } + +.swiper-container-horizontal > .swiper-pagination-bullets, .swiper-pagination-custom, .swiper-pagination-fraction { + bottom: 10px; + left: 0; + width: 100%; } + +.swiper-pagination-bullet { + width: 8px; + height: 8px; + display: inline-block; + -webkit-border-radius: 100%; + border-radius: 100%; + background: #000; + opacity: .2; } + +button.swiper-pagination-bullet { + border: none; + margin: 0; + padding: 0; + -webkit-box-shadow: none; + box-shadow: none; + -moz-appearance: none; + -ms-appearance: none; + -webkit-appearance: none; + appearance: none; } + +.swiper-pagination-clickable .swiper-pagination-bullet { + cursor: pointer; } + +.swiper-pagination-white .swiper-pagination-bullet { + background: #fff; } + +.swiper-pagination-bullet-active { + opacity: 1; + background: #007aff; } + +.swiper-pagination-white .swiper-pagination-bullet-active { + background: #fff; } + +.swiper-pagination-black .swiper-pagination-bullet-active { + background: #000; } + +.swiper-container-vertical > .swiper-pagination-bullets { + right: 10px; + top: 50%; + -webkit-transform: translate3d(0, -50%, 0); + -ms-transform: translate3d(0, -50%, 0); + transform: translate3d(0, -50%, 0); } + +.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet { + margin: 5px 0; + display: block; } + +.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet { + margin: 0 5px; } + +.swiper-pagination-progress { + background: rgba(0, 0, 0, 0.25); + position: absolute; } + +.swiper-pagination-progress .swiper-pagination-progressbar { + background: #007aff; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + -webkit-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: left top; + -ms-transform-origin: left top; + transform-origin: left top; } + +.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar { + -webkit-transform-origin: right top; + -ms-transform-origin: right top; + transform-origin: right top; } + +.swiper-container-horizontal > .swiper-pagination-progress { + width: 100%; + height: 4px; + left: 0; + top: 0; } + +.swiper-container-vertical > .swiper-pagination-progress { + width: 4px; + height: 100%; + left: 0; + top: 0; } + +.swiper-pagination-progress.swiper-pagination-white { + background: rgba(255, 255, 255, 0.5); } + +.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar { + background: #fff; } + +.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar { + background: #000; } + +.swiper-container-3d { + -webkit-perspective: 1200px; + -o-perspective: 1200px; + perspective: 1200px; } + +.swiper-container-3d .swiper-cube-shadow, .swiper-container-3d .swiper-slide, .swiper-container-3d .swiper-slide-shadow-bottom, .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top, .swiper-container-3d .swiper-wrapper { + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; } + +.swiper-container-3d .swiper-slide-shadow-bottom, .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 10; } + +.swiper-container-3d .swiper-slide-shadow-left { + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(transparent)); + background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), transparent); + background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(transparent)); + background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), transparent); } + +.swiper-container-3d .swiper-slide-shadow-right { + background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(transparent)); + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), transparent); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(transparent)); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), transparent); } + +.swiper-container-3d .swiper-slide-shadow-top { + background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(transparent)); + background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), transparent); + background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(transparent)); + background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), transparent); } + +.swiper-container-3d .swiper-slide-shadow-bottom { + background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(transparent)); + background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), transparent); + background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(transparent)); + background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), transparent); } + +.swiper-container-coverflow .swiper-wrapper, .swiper-container-flip .swiper-wrapper { + -ms-perspective: 1200px; } + +.swiper-container-cube, .swiper-container-flip { + overflow: visible; } + +.swiper-container-cube .swiper-slide, .swiper-container-flip .swiper-slide { + pointer-events: none; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 1; } + +.swiper-container-cube .swiper-slide .swiper-slide, .swiper-container-flip .swiper-slide .swiper-slide { + pointer-events: none; } + +.swiper-container-cube .swiper-slide-active, .swiper-container-cube .swiper-slide-active .swiper-slide-active, .swiper-container-flip .swiper-slide-active, .swiper-container-flip .swiper-slide-active .swiper-slide-active { + pointer-events: auto; } + +.swiper-container-cube .swiper-slide-shadow-bottom, .swiper-container-cube .swiper-slide-shadow-left, .swiper-container-cube .swiper-slide-shadow-right, .swiper-container-cube .swiper-slide-shadow-top, .swiper-container-flip .swiper-slide-shadow-bottom, .swiper-container-flip .swiper-slide-shadow-left, .swiper-container-flip .swiper-slide-shadow-right, .swiper-container-flip .swiper-slide-shadow-top { + z-index: 0; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.swiper-container-cube .swiper-slide { + visibility: hidden; + -webkit-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; + width: 100%; + height: 100%; } + +.swiper-container-cube.swiper-container-rtl .swiper-slide { + -webkit-transform-origin: 100% 0; + -ms-transform-origin: 100% 0; + transform-origin: 100% 0; } + +.swiper-container-cube .swiper-slide-active, .swiper-container-cube .swiper-slide-next, .swiper-container-cube .swiper-slide-next + .swiper-slide, .swiper-container-cube .swiper-slide-prev { + pointer-events: auto; + visibility: visible; } + +.swiper-container-cube .swiper-cube-shadow { + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 100%; + background: #000; + opacity: .6; + -webkit-filter: blur(50px); + filter: blur(50px); + z-index: 0; } + +.swiper-container-fade.swiper-container-free-mode .swiper-slide { + -webkit-transition-timing-function: ease-out; + transition-timing-function: ease-out; } + +.swiper-container-fade .swiper-slide { + pointer-events: none; + -webkit-transition-property: opacity; + transition-property: opacity; } + +.swiper-container-fade .swiper-slide .swiper-slide { + pointer-events: none; } + +.swiper-container-fade .swiper-slide-active, .swiper-container-fade .swiper-slide-active .swiper-slide-active { + pointer-events: auto; } + +.swiper-scrollbar { + -webkit-border-radius: 10px; + border-radius: 10px; + position: relative; + -ms-touch-action: none; + background: rgba(0, 0, 0, 0.1); } + +.swiper-container-horizontal > .swiper-scrollbar { + position: absolute; + left: 1%; + bottom: 3px; + z-index: 50; + height: 5px; + width: 98%; } + +.swiper-container-vertical > .swiper-scrollbar { + position: absolute; + right: 3px; + top: 1%; + z-index: 50; + width: 5px; + height: 98%; } + +.swiper-scrollbar-drag { + height: 100%; + width: 100%; + position: relative; + background: rgba(0, 0, 0, 0.5); + -webkit-border-radius: 10px; + border-radius: 10px; + left: 0; + top: 0; } + +.swiper-scrollbar-cursor-drag { + cursor: move; } + +.swiper-lazy-preloader { + width: 42px; + height: 42px; + position: absolute; + left: 50%; + top: 50%; + margin-left: -21px; + margin-top: -21px; + z-index: 10; + -webkit-transform-origin: 50%; + -ms-transform-origin: 50%; + transform-origin: 50%; + -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite; + animation: swiper-preloader-spin 1s steps(12, end) infinite; } + +.swiper-lazy-preloader:after { + display: block; + content: ""; + width: 100%; + height: 100%; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); + background-position: 50%; + background-size: 100%; + background-repeat: no-repeat; } + +.swiper-lazy-preloader-white:after { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); } + +@-webkit-keyframes swiper-preloader-spin { + 100% { + -webkit-transform: rotate(360deg); } } + +@keyframes swiper-preloader-spin { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + /* General Project Styles */ * { -webkit-box-sizing: border-box; @@ -1132,6 +1613,20 @@ ul, li { .no-borders { border: 0; } +.mobile-slider { + display: none; + margin: 0 auto; + width: 360px; + text-align: center; } + +.swiper-container { + width: 100%; + height: 100%; } + +.swiper-slide { + background-position: center; + background-size: cover; } + *::-webkit-input-placeholder { color: #808591; font-size: 14px; @@ -1193,7 +1688,19 @@ body input:required:valid, body textarea:required:valid { display: none; } .table-two-third { display: block; - width: 100%; } } + width: 100%; } + .mobile-slider { + display: block; } + .white-blocks { + display: none; } + .mobile-section-text { + display: block; } + .block { + display: block; + margin: 0 auto; + margin-bottom: 20px; } + .mobile-hidden { + display: none; } } /* Extra Small Devices, Phones */ @media only screen and (max-width: 480px) { diff --git a/src/index.html b/src/index.html index 04bb994..cc227ae 100755 --- a/src/index.html +++ b/src/index.html @@ -114,9 +114,102 @@ + +
+
+
+
+
+

Enter a bold new world, resistant to corruption.

+

Status combines the next generation of browser, with an open messenging platform. This enables safe, free and open communication with humans and DApps alike.

+
+ +
+
+
+
+
+
+
+

Say No to Censorship

+

We believe in a free and open internet. Status is bringing back the transparent ideals the internet was founded upon.

+
+
+
+
+
+
+

Blind-Trust Not Required

+

Decentralized, distributed, peer-to-peer technologies solve the problem that has plagued humankind for millennia: Trust.

+
+
+
+
+
+
+

Encrypted and Secure

+

Guard your communication from prying eyes and malicious institutions with our military grade end-to-end encryption.

+
+
+
+
+
+
+

Web 3.0 Stack

+

Harness the benefits of Ethereum, and the Web 3.0 stack to solve the problems of server failure, undelivered messages, and information loss.

+
+
+
+
+
+ + + +
+
+
+
+

Say No to Censorship

+

We believe in a free and open internet. Status is bringing back the transparent ideals the internet was founded upon.

+
+
+
+
+

Blind-Trust Not Required

+

Decentralized, distributed, peer-to-peer technologies solve the problem that has plagued humankind for millennia: Trust.

+
+
+
+
+

Encrypted and Secure

+

Guard your communication from prying eyes and malicious institutions with our military grade end-to-end encryption.

+
+
+
+
+

Web 3.0 Stack

+

Harness the benefits of Ethereum, and the Web 3.0 stack to solve the problems of server failure, undelivered messages, and information loss.

+
+
+
+
+
+

Enter a bold new world, resistant to corruption.

+

Status combines the next generation of browser, with an open messenging platform. This enables safe, free and open communication with humans and DApps alike.

+
+
+
+ +
+ +
+ +
@@ -134,11 +227,55 @@
+ + +

Status is a Browser

With Status this decentralized world is at your fingertips. Browse, and interact with DApps seamlessly, all from a single user interface.

+ + + +
+
+
+
+
+ +
+
+

Wallet

+

Store multiple currencies and wallets safely and security, and review your transactions

+
+
+
+
+ +
+
+

Exchange

+

A true decentralized peer-to-peer exchange to trade Fiat to Ether, Ether to Fiar and much more

+
+
+
+
+ +
+
+

DAO Portal

+

Review, vote and discuss with the community DAO Proposals and the state of the DAO

+
+
+
+
+
+
+
+ + +
@@ -273,6 +410,46 @@
+ + +
+
+
+
+
+ +
+
+

Jarrad

+

Offering fiat to ether exchange services in Berlin #USDtoETH #localexchange

+
+
+
+
+ +
+
+

Carl

+

Trading #BTCtoETH. Smart contracts only. Reputable Trader. #virtualexchange

+
+
+
+
+ +
+
+

Dan

+

Looking to buy #DAOtoETH or to chat about the DAO. #daoproposals

+
+
+
+
+
+
+
+ + +
diff --git a/src/js/common.js b/src/js/common.js index 50a0785..ffdc9ce 100755 --- a/src/js/common.js +++ b/src/js/common.js @@ -85,6 +85,33 @@ $(function() { },100); }, { offset: '90%' }); + //initialize swiper when document ready + // var mySwiper = new Swiper ('.swiper-container', { + // // Optional parameters + // loop: true, + // autoplay: 3000, + // effect: 'fade', + // nextButton: '.swiper-button-next', + // prevButton: '.swiper-button-prev', + // spaceBetween: 30 + // }); + + var swiper1 = new Swiper('.swiper1', { + loop: true, + autoplay: 3000, + effect: 'fade', + spaceBetween: 30, + fade: { + crossFade: true + } +}); +var swiper2 = new Swiper('.swiper2', { + loop: true, + autoplay: 3000, + effect: 'slide', + nextButton: '.swiper-button-next', + prevButton: '.swiper-button-prev', +}); }); diff --git a/src/js/libs.min.js b/src/js/libs.min.js index 196d508..f241ea7 100644 --- a/src/js/libs.min.js +++ b/src/js/libs.min.js @@ -12,4 +12,22 @@ Copyright © 2011-2015 Caleb Troughton Licensed under the MIT license. https://github.com/imakewebthings/waypoints/blog/master/licenses.txt */ -!function(){"use strict";function t(o){if(!o)throw new Error("No options passed to Waypoint constructor");if(!o.element)throw new Error("No element option passed to Waypoint constructor");if(!o.handler)throw new Error("No handler option passed to Waypoint constructor");this.key="waypoint-"+e,this.options=t.Adapter.extend({},t.defaults,o),this.element=this.options.element,this.adapter=new t.Adapter(this.element),this.callback=o.handler,this.axis=this.options.horizontal?"horizontal":"vertical",this.enabled=this.options.enabled,this.triggerPoint=null,this.group=t.Group.findOrCreate({name:this.options.group,axis:this.axis}),this.context=t.Context.findOrCreateByElement(this.options.context),t.offsetAliases[this.options.offset]&&(this.options.offset=t.offsetAliases[this.options.offset]),this.group.add(this),this.context.add(this),i[this.key]=this,e+=1}var e=0,i={};t.prototype.queueTrigger=function(t){this.group.queueTrigger(this,t)},t.prototype.trigger=function(t){this.enabled&&this.callback&&this.callback.apply(this,t)},t.prototype.destroy=function(){this.context.remove(this),this.group.remove(this),delete i[this.key]},t.prototype.disable=function(){return this.enabled=!1,this},t.prototype.enable=function(){return this.context.refresh(),this.enabled=!0,this},t.prototype.next=function(){return this.group.next(this)},t.prototype.previous=function(){return this.group.previous(this)},t.invokeAll=function(t){var e=[];for(var o in i)e.push(i[o]);for(var n=0,r=e.length;r>n;n++)e[n][t]()},t.destroyAll=function(){t.invokeAll("destroy")},t.disableAll=function(){t.invokeAll("disable")},t.enableAll=function(){t.invokeAll("enable")},t.refreshAll=function(){t.Context.refreshAll()},t.viewportHeight=function(){return window.innerHeight||document.documentElement.clientHeight},t.viewportWidth=function(){return document.documentElement.clientWidth},t.adapters=[],t.defaults={context:window,continuous:!0,enabled:!0,group:"default",horizontal:!1,offset:0},t.offsetAliases={"bottom-in-view":function(){return this.context.innerHeight()-this.adapter.outerHeight()},"right-in-view":function(){return this.context.innerWidth()-this.adapter.outerWidth()}},window.Waypoint=t}(),function(){"use strict";function t(t){window.setTimeout(t,1e3/60)}function e(t){this.element=t,this.Adapter=n.Adapter,this.adapter=new this.Adapter(t),this.key="waypoint-context-"+i,this.didScroll=!1,this.didResize=!1,this.oldScroll={x:this.adapter.scrollLeft(),y:this.adapter.scrollTop()},this.waypoints={vertical:{},horizontal:{}},t.waypointContextKey=this.key,o[t.waypointContextKey]=this,i+=1,this.createThrottledScrollHandler(),this.createThrottledResizeHandler()}var i=0,o={},n=window.Waypoint,r=window.onload;e.prototype.add=function(t){var e=t.options.horizontal?"horizontal":"vertical";this.waypoints[e][t.key]=t,this.refresh()},e.prototype.checkEmpty=function(){var t=this.Adapter.isEmptyObject(this.waypoints.horizontal),e=this.Adapter.isEmptyObject(this.waypoints.vertical);t&&e&&(this.adapter.off(".waypoints"),delete o[this.key])},e.prototype.createThrottledResizeHandler=function(){function t(){e.handleResize(),e.didResize=!1}var e=this;this.adapter.on("resize.waypoints",function(){e.didResize||(e.didResize=!0,n.requestAnimationFrame(t))})},e.prototype.createThrottledScrollHandler=function(){function t(){e.handleScroll(),e.didScroll=!1}var e=this;this.adapter.on("scroll.waypoints",function(){(!e.didScroll||n.isTouch)&&(e.didScroll=!0,n.requestAnimationFrame(t))})},e.prototype.handleResize=function(){n.Context.refreshAll()},e.prototype.handleScroll=function(){var t={},e={horizontal:{newScroll:this.adapter.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.adapter.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};for(var i in e){var o=e[i],n=o.newScroll>o.oldScroll,r=n?o.forward:o.backward;for(var s in this.waypoints[i]){var a=this.waypoints[i][s],l=o.oldScroll=a.triggerPoint,p=l&&h,u=!l&&!h;(p||u)&&(a.queueTrigger(r),t[a.group.id]=a.group)}}for(var c in t)t[c].flushTriggers();this.oldScroll={x:e.horizontal.newScroll,y:e.vertical.newScroll}},e.prototype.innerHeight=function(){return this.element==this.element.window?n.viewportHeight():this.adapter.innerHeight()},e.prototype.remove=function(t){delete this.waypoints[t.axis][t.key],this.checkEmpty()},e.prototype.innerWidth=function(){return this.element==this.element.window?n.viewportWidth():this.adapter.innerWidth()},e.prototype.destroy=function(){var t=[];for(var e in this.waypoints)for(var i in this.waypoints[e])t.push(this.waypoints[e][i]);for(var o=0,n=t.length;n>o;o++)t[o].destroy()},e.prototype.refresh=function(){var t,e=this.element==this.element.window,i=e?void 0:this.adapter.offset(),o={};this.handleScroll(),t={horizontal:{contextOffset:e?0:i.left,contextScroll:e?0:this.oldScroll.x,contextDimension:this.innerWidth(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:e?0:i.top,contextScroll:e?0:this.oldScroll.y,contextDimension:this.innerHeight(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}};for(var r in t){var s=t[r];for(var a in this.waypoints[r]){var l,h,p,u,c,d=this.waypoints[r][a],f=d.options.offset,w=d.triggerPoint,y=0,g=null==w;d.element!==d.element.window&&(y=d.adapter.offset()[s.offsetProp]),"function"==typeof f?f=f.apply(d):"string"==typeof f&&(f=parseFloat(f),d.options.offset.indexOf("%")>-1&&(f=Math.ceil(s.contextDimension*f/100))),l=s.contextScroll-s.contextOffset,d.triggerPoint=y+l-f,h=w=s.oldScroll,u=h&&p,c=!h&&!p,!g&&u?(d.queueTrigger(s.backward),o[d.group.id]=d.group):!g&&c?(d.queueTrigger(s.forward),o[d.group.id]=d.group):g&&s.oldScroll>=d.triggerPoint&&(d.queueTrigger(s.forward),o[d.group.id]=d.group)}}return n.requestAnimationFrame(function(){for(var t in o)o[t].flushTriggers()}),this},e.findOrCreateByElement=function(t){return e.findByElement(t)||new e(t)},e.refreshAll=function(){for(var t in o)o[t].refresh()},e.findByElement=function(t){return o[t.waypointContextKey]},window.onload=function(){r&&r(),e.refreshAll()},n.requestAnimationFrame=function(e){var i=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||t;i.call(window,e)},n.Context=e}(),function(){"use strict";function t(t,e){return t.triggerPoint-e.triggerPoint}function e(t,e){return e.triggerPoint-t.triggerPoint}function i(t){this.name=t.name,this.axis=t.axis,this.id=this.name+"-"+this.axis,this.waypoints=[],this.clearTriggerQueues(),o[this.axis][this.name]=this}var o={vertical:{},horizontal:{}},n=window.Waypoint;i.prototype.add=function(t){this.waypoints.push(t)},i.prototype.clearTriggerQueues=function(){this.triggerQueues={up:[],down:[],left:[],right:[]}},i.prototype.flushTriggers=function(){for(var i in this.triggerQueues){var o=this.triggerQueues[i],n="up"===i||"left"===i;o.sort(n?e:t);for(var r=0,s=o.length;s>r;r+=1){var a=o[r];(a.options.continuous||r===o.length-1)&&a.trigger([i])}}this.clearTriggerQueues()},i.prototype.next=function(e){this.waypoints.sort(t);var i=n.Adapter.inArray(e,this.waypoints),o=i===this.waypoints.length-1;return o?null:this.waypoints[i+1]},i.prototype.previous=function(e){this.waypoints.sort(t);var i=n.Adapter.inArray(e,this.waypoints);return i?this.waypoints[i-1]:null},i.prototype.queueTrigger=function(t,e){this.triggerQueues[e].push(t)},i.prototype.remove=function(t){var e=n.Adapter.inArray(t,this.waypoints);e>-1&&this.waypoints.splice(e,1)},i.prototype.first=function(){return this.waypoints[0]},i.prototype.last=function(){return this.waypoints[this.waypoints.length-1]},i.findOrCreate=function(t){return o[t.axis][t.name]||new i(t)},n.Group=i}(),function(){"use strict";function t(t){this.$element=e(t)}var e=window.jQuery,i=window.Waypoint;e.each(["innerHeight","innerWidth","off","offset","on","outerHeight","outerWidth","scrollLeft","scrollTop"],function(e,i){t.prototype[i]=function(){var t=Array.prototype.slice.call(arguments);return this.$element[i].apply(this.$element,t)}}),e.each(["extend","inArray","isEmptyObject"],function(i,o){t[o]=e[o]}),i.adapters.push({name:"jquery",Adapter:t}),i.Adapter=t}(),function(){"use strict";function t(t){return function(){var i=[],o=arguments[0];return t.isFunction(arguments[0])&&(o=t.extend({},arguments[1]),o.handler=arguments[0]),this.each(function(){var n=t.extend({},o,{element:this});"string"==typeof n.context&&(n.context=t(this).closest(n.context)[0]),i.push(new e(n))}),i}}var e=window.Waypoint;window.jQuery&&(window.jQuery.fn.waypoint=t(window.jQuery)),window.Zepto&&(window.Zepto.fn.waypoint=t(window.Zepto))}(); \ No newline at end of file +!function(){"use strict";function t(o){if(!o)throw new Error("No options passed to Waypoint constructor");if(!o.element)throw new Error("No element option passed to Waypoint constructor");if(!o.handler)throw new Error("No handler option passed to Waypoint constructor");this.key="waypoint-"+e,this.options=t.Adapter.extend({},t.defaults,o),this.element=this.options.element,this.adapter=new t.Adapter(this.element),this.callback=o.handler,this.axis=this.options.horizontal?"horizontal":"vertical",this.enabled=this.options.enabled,this.triggerPoint=null,this.group=t.Group.findOrCreate({name:this.options.group,axis:this.axis}),this.context=t.Context.findOrCreateByElement(this.options.context),t.offsetAliases[this.options.offset]&&(this.options.offset=t.offsetAliases[this.options.offset]),this.group.add(this),this.context.add(this),i[this.key]=this,e+=1}var e=0,i={};t.prototype.queueTrigger=function(t){this.group.queueTrigger(this,t)},t.prototype.trigger=function(t){this.enabled&&this.callback&&this.callback.apply(this,t)},t.prototype.destroy=function(){this.context.remove(this),this.group.remove(this),delete i[this.key]},t.prototype.disable=function(){return this.enabled=!1,this},t.prototype.enable=function(){return this.context.refresh(),this.enabled=!0,this},t.prototype.next=function(){return this.group.next(this)},t.prototype.previous=function(){return this.group.previous(this)},t.invokeAll=function(t){var e=[];for(var o in i)e.push(i[o]);for(var n=0,r=e.length;r>n;n++)e[n][t]()},t.destroyAll=function(){t.invokeAll("destroy")},t.disableAll=function(){t.invokeAll("disable")},t.enableAll=function(){t.invokeAll("enable")},t.refreshAll=function(){t.Context.refreshAll()},t.viewportHeight=function(){return window.innerHeight||document.documentElement.clientHeight},t.viewportWidth=function(){return document.documentElement.clientWidth},t.adapters=[],t.defaults={context:window,continuous:!0,enabled:!0,group:"default",horizontal:!1,offset:0},t.offsetAliases={"bottom-in-view":function(){return this.context.innerHeight()-this.adapter.outerHeight()},"right-in-view":function(){return this.context.innerWidth()-this.adapter.outerWidth()}},window.Waypoint=t}(),function(){"use strict";function t(t){window.setTimeout(t,1e3/60)}function e(t){this.element=t,this.Adapter=n.Adapter,this.adapter=new this.Adapter(t),this.key="waypoint-context-"+i,this.didScroll=!1,this.didResize=!1,this.oldScroll={x:this.adapter.scrollLeft(),y:this.adapter.scrollTop()},this.waypoints={vertical:{},horizontal:{}},t.waypointContextKey=this.key,o[t.waypointContextKey]=this,i+=1,this.createThrottledScrollHandler(),this.createThrottledResizeHandler()}var i=0,o={},n=window.Waypoint,r=window.onload;e.prototype.add=function(t){var e=t.options.horizontal?"horizontal":"vertical";this.waypoints[e][t.key]=t,this.refresh()},e.prototype.checkEmpty=function(){var t=this.Adapter.isEmptyObject(this.waypoints.horizontal),e=this.Adapter.isEmptyObject(this.waypoints.vertical);t&&e&&(this.adapter.off(".waypoints"),delete o[this.key])},e.prototype.createThrottledResizeHandler=function(){function t(){e.handleResize(),e.didResize=!1}var e=this;this.adapter.on("resize.waypoints",function(){e.didResize||(e.didResize=!0,n.requestAnimationFrame(t))})},e.prototype.createThrottledScrollHandler=function(){function t(){e.handleScroll(),e.didScroll=!1}var e=this;this.adapter.on("scroll.waypoints",function(){(!e.didScroll||n.isTouch)&&(e.didScroll=!0,n.requestAnimationFrame(t))})},e.prototype.handleResize=function(){n.Context.refreshAll()},e.prototype.handleScroll=function(){var t={},e={horizontal:{newScroll:this.adapter.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.adapter.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};for(var i in e){var o=e[i],n=o.newScroll>o.oldScroll,r=n?o.forward:o.backward;for(var s in this.waypoints[i]){var a=this.waypoints[i][s],l=o.oldScroll=a.triggerPoint,p=l&&h,u=!l&&!h;(p||u)&&(a.queueTrigger(r),t[a.group.id]=a.group)}}for(var c in t)t[c].flushTriggers();this.oldScroll={x:e.horizontal.newScroll,y:e.vertical.newScroll}},e.prototype.innerHeight=function(){return this.element==this.element.window?n.viewportHeight():this.adapter.innerHeight()},e.prototype.remove=function(t){delete this.waypoints[t.axis][t.key],this.checkEmpty()},e.prototype.innerWidth=function(){return this.element==this.element.window?n.viewportWidth():this.adapter.innerWidth()},e.prototype.destroy=function(){var t=[];for(var e in this.waypoints)for(var i in this.waypoints[e])t.push(this.waypoints[e][i]);for(var o=0,n=t.length;n>o;o++)t[o].destroy()},e.prototype.refresh=function(){var t,e=this.element==this.element.window,i=e?void 0:this.adapter.offset(),o={};this.handleScroll(),t={horizontal:{contextOffset:e?0:i.left,contextScroll:e?0:this.oldScroll.x,contextDimension:this.innerWidth(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:e?0:i.top,contextScroll:e?0:this.oldScroll.y,contextDimension:this.innerHeight(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}};for(var r in t){var s=t[r];for(var a in this.waypoints[r]){var l,h,p,u,c,d=this.waypoints[r][a],f=d.options.offset,w=d.triggerPoint,y=0,g=null==w;d.element!==d.element.window&&(y=d.adapter.offset()[s.offsetProp]),"function"==typeof f?f=f.apply(d):"string"==typeof f&&(f=parseFloat(f),d.options.offset.indexOf("%")>-1&&(f=Math.ceil(s.contextDimension*f/100))),l=s.contextScroll-s.contextOffset,d.triggerPoint=y+l-f,h=w=s.oldScroll,u=h&&p,c=!h&&!p,!g&&u?(d.queueTrigger(s.backward),o[d.group.id]=d.group):!g&&c?(d.queueTrigger(s.forward),o[d.group.id]=d.group):g&&s.oldScroll>=d.triggerPoint&&(d.queueTrigger(s.forward),o[d.group.id]=d.group)}}return n.requestAnimationFrame(function(){for(var t in o)o[t].flushTriggers()}),this},e.findOrCreateByElement=function(t){return e.findByElement(t)||new e(t)},e.refreshAll=function(){for(var t in o)o[t].refresh()},e.findByElement=function(t){return o[t.waypointContextKey]},window.onload=function(){r&&r(),e.refreshAll()},n.requestAnimationFrame=function(e){var i=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||t;i.call(window,e)},n.Context=e}(),function(){"use strict";function t(t,e){return t.triggerPoint-e.triggerPoint}function e(t,e){return e.triggerPoint-t.triggerPoint}function i(t){this.name=t.name,this.axis=t.axis,this.id=this.name+"-"+this.axis,this.waypoints=[],this.clearTriggerQueues(),o[this.axis][this.name]=this}var o={vertical:{},horizontal:{}},n=window.Waypoint;i.prototype.add=function(t){this.waypoints.push(t)},i.prototype.clearTriggerQueues=function(){this.triggerQueues={up:[],down:[],left:[],right:[]}},i.prototype.flushTriggers=function(){for(var i in this.triggerQueues){var o=this.triggerQueues[i],n="up"===i||"left"===i;o.sort(n?e:t);for(var r=0,s=o.length;s>r;r+=1){var a=o[r];(a.options.continuous||r===o.length-1)&&a.trigger([i])}}this.clearTriggerQueues()},i.prototype.next=function(e){this.waypoints.sort(t);var i=n.Adapter.inArray(e,this.waypoints),o=i===this.waypoints.length-1;return o?null:this.waypoints[i+1]},i.prototype.previous=function(e){this.waypoints.sort(t);var i=n.Adapter.inArray(e,this.waypoints);return i?this.waypoints[i-1]:null},i.prototype.queueTrigger=function(t,e){this.triggerQueues[e].push(t)},i.prototype.remove=function(t){var e=n.Adapter.inArray(t,this.waypoints);e>-1&&this.waypoints.splice(e,1)},i.prototype.first=function(){return this.waypoints[0]},i.prototype.last=function(){return this.waypoints[this.waypoints.length-1]},i.findOrCreate=function(t){return o[t.axis][t.name]||new i(t)},n.Group=i}(),function(){"use strict";function t(t){this.$element=e(t)}var e=window.jQuery,i=window.Waypoint;e.each(["innerHeight","innerWidth","off","offset","on","outerHeight","outerWidth","scrollLeft","scrollTop"],function(e,i){t.prototype[i]=function(){var t=Array.prototype.slice.call(arguments);return this.$element[i].apply(this.$element,t)}}),e.each(["extend","inArray","isEmptyObject"],function(i,o){t[o]=e[o]}),i.adapters.push({name:"jquery",Adapter:t}),i.Adapter=t}(),function(){"use strict";function t(t){return function(){var i=[],o=arguments[0];return t.isFunction(arguments[0])&&(o=t.extend({},arguments[1]),o.handler=arguments[0]),this.each(function(){var n=t.extend({},o,{element:this});"string"==typeof n.context&&(n.context=t(this).closest(n.context)[0]),i.push(new e(n))}),i}}var e=window.Waypoint;window.jQuery&&(window.jQuery.fn.waypoint=t(window.jQuery)),window.Zepto&&(window.Zepto.fn.waypoint=t(window.Zepto))}(); +/** + * Swiper 3.3.1 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * + * http://www.idangero.us/swiper/ + * + * Copyright 2016, Vladimir Kharlampidi + * The iDangero.us + * http://www.idangero.us/ + * + * Licensed under MIT + * + * Released on: February 7, 2016 + */ +!function(){"use strict";function e(e){e.fn.swiper=function(a){var r;return e(this).each(function(){var e=new t(this,a);r||(r=e)}),r}}var a,t=function(e,i){function s(e){return Math.floor(e)}function n(){b.autoplayTimeoutId=setTimeout(function(){b.params.loop?(b.fixLoop(),b._slideNext(),b.emit("onAutoplay",b)):b.isEnd?i.autoplayStopOnLast?b.stopAutoplay():(b._slideTo(0),b.emit("onAutoplay",b)):(b._slideNext(),b.emit("onAutoplay",b))},b.params.autoplay)}function o(e,t){var r=a(e.target);if(!r.is(t))if("string"==typeof t)r=r.parents(t);else if(t.nodeType){var i;return r.parents().each(function(e,a){a===t&&(i=t)}),i?t:void 0}if(0!==r.length)return r[0]}function l(e,a){a=a||{};var t=window.MutationObserver||window.WebkitMutationObserver,r=new t(function(e){e.forEach(function(e){b.onResize(!0),b.emit("onObserverUpdate",b,e)})});r.observe(e,{attributes:"undefined"==typeof a.attributes?!0:a.attributes,childList:"undefined"==typeof a.childList?!0:a.childList,characterData:"undefined"==typeof a.characterData?!0:a.characterData}),b.observers.push(r)}function p(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!b.params.allowSwipeToNext&&(b.isHorizontal()&&39===a||!b.isHorizontal()&&40===a))return!1;if(!b.params.allowSwipeToPrev&&(b.isHorizontal()&&37===a||!b.isHorizontal()&&38===a))return!1;if(!(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||document.activeElement&&document.activeElement.nodeName&&("input"===document.activeElement.nodeName.toLowerCase()||"textarea"===document.activeElement.nodeName.toLowerCase()))){if(37===a||39===a||38===a||40===a){var t=!1;if(b.container.parents(".swiper-slide").length>0&&0===b.container.parents(".swiper-slide-active").length)return;var r={left:window.pageXOffset,top:window.pageYOffset},i=window.innerWidth,s=window.innerHeight,n=b.container.offset();b.rtl&&(n.left=n.left-b.container[0].scrollLeft);for(var o=[[n.left,n.top],[n.left+b.width,n.top],[n.left,n.top+b.height],[n.left+b.width,n.top+b.height]],l=0;l=r.left&&p[0]<=r.left+i&&p[1]>=r.top&&p[1]<=r.top+s&&(t=!0)}if(!t)return}b.isHorizontal()?((37===a||39===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!b.rtl||37===a&&b.rtl)&&b.slideNext(),(37===a&&!b.rtl||39===a&&b.rtl)&&b.slidePrev()):((38===a||40===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&b.slideNext(),38===a&&b.slidePrev())}}function d(e){e.originalEvent&&(e=e.originalEvent);var a=b.mousewheel.event,t=0,r=b.rtl?-1:1;if("mousewheel"===a)if(b.params.mousewheelForceToAxis)if(b.isHorizontal()){if(!(Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)))return;t=e.wheelDeltaX*r}else{if(!(Math.abs(e.wheelDeltaY)>Math.abs(e.wheelDeltaX)))return;t=e.wheelDeltaY}else t=Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)?-e.wheelDeltaX*r:-e.wheelDeltaY;else if("DOMMouseScroll"===a)t=-e.detail;else if("wheel"===a)if(b.params.mousewheelForceToAxis)if(b.isHorizontal()){if(!(Math.abs(e.deltaX)>Math.abs(e.deltaY)))return;t=-e.deltaX*r}else{if(!(Math.abs(e.deltaY)>Math.abs(e.deltaX)))return;t=-e.deltaY}else t=Math.abs(e.deltaX)>Math.abs(e.deltaY)?-e.deltaX*r:-e.deltaY;if(0!==t){if(b.params.mousewheelInvert&&(t=-t),b.params.freeMode){var i=b.getWrapperTranslate()+t*b.params.mousewheelSensitivity,s=b.isBeginning,n=b.isEnd;if(i>=b.minTranslate()&&(i=b.minTranslate()),i<=b.maxTranslate()&&(i=b.maxTranslate()),b.setWrapperTransition(0),b.setWrapperTranslate(i),b.updateProgress(),b.updateActiveIndex(),(!s&&b.isBeginning||!n&&b.isEnd)&&b.updateClasses(),b.params.freeModeSticky?(clearTimeout(b.mousewheel.timeout),b.mousewheel.timeout=setTimeout(function(){b.slideReset()},300)):b.params.lazyLoading&&b.lazy&&b.lazy.load(),0===i||i===b.maxTranslate())return}else{if((new window.Date).getTime()-b.mousewheel.lastScrollTime>60)if(0>t)if(b.isEnd&&!b.params.loop||b.animating){if(b.params.mousewheelReleaseOnEdges)return!0}else b.slideNext();else if(b.isBeginning&&!b.params.loop||b.animating){if(b.params.mousewheelReleaseOnEdges)return!0}else b.slidePrev();b.mousewheel.lastScrollTime=(new window.Date).getTime()}return b.params.autoplay&&b.stopAutoplay(),e.preventDefault?e.preventDefault():e.returnValue=!1,!1}}function u(e,t){e=a(e);var r,i,s,n=b.rtl?-1:1;r=e.attr("data-swiper-parallax")||"0",i=e.attr("data-swiper-parallax-x"),s=e.attr("data-swiper-parallax-y"),i||s?(i=i||"0",s=s||"0"):b.isHorizontal()?(i=r,s="0"):(s=r,i="0"),i=i.indexOf("%")>=0?parseInt(i,10)*t*n+"%":i*t*n+"px",s=s.indexOf("%")>=0?parseInt(s,10)*t+"%":s*t+"px",e.transform("translate3d("+i+", "+s+",0px)")}function c(e){return 0!==e.indexOf("on")&&(e=e[0]!==e[0].toUpperCase()?"on"+e[0].toUpperCase()+e.substring(1):"on"+e),e}if(!(this instanceof t))return new t(e,i);var m={direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,autoplay:!1,autoplayDisableOnInteraction:!0,autoplayStopOnLast:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flip:{slideShadows:!0,limitRotation:!0},cube:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fade:{crossFade:!1},parallax:!1,scrollbar:null,scrollbarHide:!0,scrollbarDraggable:!1,scrollbarSnapOnRelease:!1,keyboardControl:!1,mousewheelControl:!1,mousewheelReleaseOnEdges:!1,mousewheelInvert:!1,mousewheelForceToAxis:!1,mousewheelSensitivity:1,hashnav:!1,breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,onlyExternal:!1,threshold:0,touchMoveStopPropagation:!0,uniqueNavElements:!0,pagination:null,paginationElement:"span",paginationClickable:!1,paginationHide:!1,paginationBulletRender:null,paginationProgressRender:null,paginationFractionRender:null,paginationCustomRender:null,paginationType:"bullets",resistance:!0,resistanceRatio:.85,nextButton:null,prevButton:null,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,lazyLoading:!1,lazyLoadingInPrevNext:!1,lazyLoadingInPrevNextAmount:1,lazyLoadingOnTransitionStart:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,control:void 0,controlInverse:!1,controlBy:"slide",allowSwipeToPrev:!0,allowSwipeToNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slidePrevClass:"swiper-slide-prev",wrapperClass:"swiper-wrapper",bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",buttonDisabledClass:"swiper-button-disabled",paginationCurrentClass:"swiper-pagination-current",paginationTotalClass:"swiper-pagination-total",paginationHiddenClass:"swiper-pagination-hidden",paginationProgressbarClass:"swiper-pagination-progressbar",observer:!1,observeParents:!1,a11y:!1,prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",runCallbacksOnInit:!0},h=i&&i.virtualTranslate;i=i||{};var f={};for(var g in i)if("object"!=typeof i[g]||null===i[g]||(i[g].nodeType||i[g]===window||i[g]===document||"undefined"!=typeof r&&i[g]instanceof r||"undefined"!=typeof jQuery&&i[g]instanceof jQuery))f[g]=i[g];else{f[g]={};for(var v in i[g])f[g][v]=i[g][v]}for(var w in m)if("undefined"==typeof i[w])i[w]=m[w];else if("object"==typeof i[w])for(var y in m[w])"undefined"==typeof i[w][y]&&(i[w][y]=m[w][y]);var b=this;if(b.params=i,b.originalParams=f,b.classNames=[],"undefined"!=typeof a&&"undefined"!=typeof r&&(a=r),("undefined"!=typeof a||(a="undefined"==typeof r?window.Dom7||window.Zepto||window.jQuery:r))&&(b.$=a,b.currentBreakpoint=void 0,b.getActiveBreakpoint=function(){if(!b.params.breakpoints)return!1;var e,a=!1,t=[];for(e in b.params.breakpoints)b.params.breakpoints.hasOwnProperty(e)&&t.push(e);t.sort(function(e,a){return parseInt(e,10)>parseInt(a,10)});for(var r=0;r=window.innerWidth&&!a&&(a=e);return a||"max"},b.setBreakpoint=function(){var e=b.getActiveBreakpoint();if(e&&b.currentBreakpoint!==e){var a=e in b.params.breakpoints?b.params.breakpoints[e]:b.originalParams,t=b.params.loop&&a.slidesPerView!==b.params.slidesPerView;for(var r in a)b.params[r]=a[r];b.currentBreakpoint=e,t&&b.destroyLoop&&b.reLoop(!0)}},b.params.breakpoints&&b.setBreakpoint(),b.container=a(e),0!==b.container.length)){if(b.container.length>1){var x=[];return b.container.each(function(){x.push(new t(this,i))}),x}b.container[0].swiper=b,b.container.data("swiper",b),b.classNames.push("swiper-container-"+b.params.direction),b.params.freeMode&&b.classNames.push("swiper-container-free-mode"),b.support.flexbox||(b.classNames.push("swiper-container-no-flexbox"),b.params.slidesPerColumn=1),b.params.autoHeight&&b.classNames.push("swiper-container-autoheight"),(b.params.parallax||b.params.watchSlidesVisibility)&&(b.params.watchSlidesProgress=!0),["cube","coverflow","flip"].indexOf(b.params.effect)>=0&&(b.support.transforms3d?(b.params.watchSlidesProgress=!0,b.classNames.push("swiper-container-3d")):b.params.effect="slide"),"slide"!==b.params.effect&&b.classNames.push("swiper-container-"+b.params.effect),"cube"===b.params.effect&&(b.params.resistanceRatio=0,b.params.slidesPerView=1,b.params.slidesPerColumn=1,b.params.slidesPerGroup=1,b.params.centeredSlides=!1,b.params.spaceBetween=0,b.params.virtualTranslate=!0,b.params.setWrapperSize=!1),("fade"===b.params.effect||"flip"===b.params.effect)&&(b.params.slidesPerView=1,b.params.slidesPerColumn=1,b.params.slidesPerGroup=1,b.params.watchSlidesProgress=!0,b.params.spaceBetween=0,b.params.setWrapperSize=!1,"undefined"==typeof h&&(b.params.virtualTranslate=!0)),b.params.grabCursor&&b.support.touch&&(b.params.grabCursor=!1),b.wrapper=b.container.children("."+b.params.wrapperClass),b.params.pagination&&(b.paginationContainer=a(b.params.pagination),b.params.uniqueNavElements&&"string"==typeof b.params.pagination&&b.paginationContainer.length>1&&1===b.container.find(b.params.pagination).length&&(b.paginationContainer=b.container.find(b.params.pagination)),"bullets"===b.params.paginationType&&b.params.paginationClickable?b.paginationContainer.addClass("swiper-pagination-clickable"):b.params.paginationClickable=!1,b.paginationContainer.addClass("swiper-pagination-"+b.params.paginationType)),(b.params.nextButton||b.params.prevButton)&&(b.params.nextButton&&(b.nextButton=a(b.params.nextButton),b.params.uniqueNavElements&&"string"==typeof b.params.nextButton&&b.nextButton.length>1&&1===b.container.find(b.params.nextButton).length&&(b.nextButton=b.container.find(b.params.nextButton))),b.params.prevButton&&(b.prevButton=a(b.params.prevButton),b.params.uniqueNavElements&&"string"==typeof b.params.prevButton&&b.prevButton.length>1&&1===b.container.find(b.params.prevButton).length&&(b.prevButton=b.container.find(b.params.prevButton)))),b.isHorizontal=function(){return"horizontal"===b.params.direction},b.rtl=b.isHorizontal()&&("rtl"===b.container[0].dir.toLowerCase()||"rtl"===b.container.css("direction")),b.rtl&&b.classNames.push("swiper-container-rtl"),b.rtl&&(b.wrongRTL="-webkit-box"===b.wrapper.css("display")),b.params.slidesPerColumn>1&&b.classNames.push("swiper-container-multirow"),b.device.android&&b.classNames.push("swiper-container-android"),b.container.addClass(b.classNames.join(" ")),b.translate=0,b.progress=0,b.velocity=0,b.lockSwipeToNext=function(){b.params.allowSwipeToNext=!1},b.lockSwipeToPrev=function(){b.params.allowSwipeToPrev=!1},b.lockSwipes=function(){b.params.allowSwipeToNext=b.params.allowSwipeToPrev=!1},b.unlockSwipeToNext=function(){b.params.allowSwipeToNext=!0},b.unlockSwipeToPrev=function(){b.params.allowSwipeToPrev=!0},b.unlockSwipes=function(){b.params.allowSwipeToNext=b.params.allowSwipeToPrev=!0},b.params.grabCursor&&(b.container[0].style.cursor="move",b.container[0].style.cursor="-webkit-grab",b.container[0].style.cursor="-moz-grab",b.container[0].style.cursor="grab"),b.imagesToLoad=[],b.imagesLoaded=0,b.loadImage=function(e,a,t,r,i){function s(){i&&i()}var n;e.complete&&r?s():a?(n=new window.Image,n.onload=s,n.onerror=s,t&&(n.srcset=t),a&&(n.src=a)):s()},b.preloadImages=function(){function e(){"undefined"!=typeof b&&null!==b&&(void 0!==b.imagesLoaded&&b.imagesLoaded++,b.imagesLoaded===b.imagesToLoad.length&&(b.params.updateOnImagesReady&&b.update(),b.emit("onImagesReady",b)))}b.imagesToLoad=b.container.find("img");for(var a=0;a=0&&(a=parseFloat(a.replace("%",""))/100*b.size),b.virtualSize=-a,b.rtl?b.slides.css({marginLeft:"",marginTop:""}):b.slides.css({marginRight:"",marginBottom:""});var n;b.params.slidesPerColumn>1&&(n=Math.floor(b.slides.length/b.params.slidesPerColumn)===b.slides.length/b.params.slidesPerColumn?b.slides.length:Math.ceil(b.slides.length/b.params.slidesPerColumn)*b.params.slidesPerColumn,"auto"!==b.params.slidesPerView&&"row"===b.params.slidesPerColumnFill&&(n=Math.max(n,b.params.slidesPerView*b.params.slidesPerColumn)));var o,l=b.params.slidesPerColumn,p=n/l,d=p-(b.params.slidesPerColumn*p-b.slides.length);for(e=0;e1){var c,m,h;"column"===b.params.slidesPerColumnFill?(m=Math.floor(e/l),h=e-m*l,(m>d||m===d&&h===l-1)&&++h>=l&&(h=0,m++),c=m+h*n/l,u.css({"-webkit-box-ordinal-group":c,"-moz-box-ordinal-group":c,"-ms-flex-order":c,"-webkit-order":c,order:c})):(h=Math.floor(e/p),m=e-h*p),u.css({"margin-top":0!==h&&b.params.spaceBetween&&b.params.spaceBetween+"px"}).attr("data-swiper-column",m).attr("data-swiper-row",h)}"none"!==u.css("display")&&("auto"===b.params.slidesPerView?(o=b.isHorizontal()?u.outerWidth(!0):u.outerHeight(!0),b.params.roundLengths&&(o=s(o))):(o=(b.size-(b.params.slidesPerView-1)*a)/b.params.slidesPerView,b.params.roundLengths&&(o=s(o)),b.isHorizontal()?b.slides[e].style.width=o+"px":b.slides[e].style.height=o+"px"),b.slides[e].swiperSlideSize=o,b.slidesSizesGrid.push(o),b.params.centeredSlides?(t=t+o/2+r/2+a,0===e&&(t=t-b.size/2-a),Math.abs(t)<.001&&(t=0),i%b.params.slidesPerGroup===0&&b.snapGrid.push(t),b.slidesGrid.push(t)):(i%b.params.slidesPerGroup===0&&b.snapGrid.push(t),b.slidesGrid.push(t),t=t+o+a),b.virtualSize+=o+a,r=o,i++)}b.virtualSize=Math.max(b.virtualSize,b.size)+b.params.slidesOffsetAfter;var f;if(b.rtl&&b.wrongRTL&&("slide"===b.params.effect||"coverflow"===b.params.effect)&&b.wrapper.css({width:b.virtualSize+b.params.spaceBetween+"px"}),(!b.support.flexbox||b.params.setWrapperSize)&&(b.isHorizontal()?b.wrapper.css({width:b.virtualSize+b.params.spaceBetween+"px"}):b.wrapper.css({height:b.virtualSize+b.params.spaceBetween+"px"})),b.params.slidesPerColumn>1&&(b.virtualSize=(o+b.params.spaceBetween)*n,b.virtualSize=Math.ceil(b.virtualSize/b.params.slidesPerColumn)-b.params.spaceBetween,b.wrapper.css({width:b.virtualSize+b.params.spaceBetween+"px"}),b.params.centeredSlides)){for(f=[],e=0;e1&&b.snapGrid.push(b.virtualSize-b.size)}0===b.snapGrid.length&&(b.snapGrid=[0]),0!==b.params.spaceBetween&&(b.isHorizontal()?b.rtl?b.slides.css({marginLeft:a+"px"}):b.slides.css({marginRight:a+"px"}):b.slides.css({marginBottom:a+"px"})),b.params.watchSlidesProgress&&b.updateSlidesOffset()}},b.updateSlidesOffset=function(){for(var e=0;e=0&&s0&&n<=b.size||0>=s&&n>=b.size;o&&b.slides.eq(t).addClass(b.params.slideVisibleClass)}r.progress=b.rtl?-i:i}}},b.updateProgress=function(e){"undefined"==typeof e&&(e=b.translate||0);var a=b.maxTranslate()-b.minTranslate(),t=b.isBeginning,r=b.isEnd;0===a?(b.progress=0,b.isBeginning=b.isEnd=!0):(b.progress=(e-b.minTranslate())/a,b.isBeginning=b.progress<=0,b.isEnd=b.progress>=1),b.isBeginning&&!t&&b.emit("onReachBeginning",b),b.isEnd&&!r&&b.emit("onReachEnd",b),b.params.watchSlidesProgress&&b.updateSlidesProgress(e),b.emit("onProgress",b,b.progress)},b.updateActiveIndex=function(){var e,a,t,r=b.rtl?b.translate:-b.translate;for(a=0;a=b.slidesGrid[a]&&r=b.slidesGrid[a]&&r=b.slidesGrid[a]&&(e=a);(0>e||"undefined"==typeof e)&&(e=0),t=Math.floor(e/b.params.slidesPerGroup),t>=b.snapGrid.length&&(t=b.snapGrid.length-1),e!==b.activeIndex&&(b.snapIndex=t,b.previousIndex=b.activeIndex,b.activeIndex=e,b.updateClasses())},b.updateClasses=function(){b.slides.removeClass(b.params.slideActiveClass+" "+b.params.slideNextClass+" "+b.params.slidePrevClass);var e=b.slides.eq(b.activeIndex);e.addClass(b.params.slideActiveClass);var t=e.next("."+b.params.slideClass).addClass(b.params.slideNextClass);b.params.loop&&0===t.length&&b.slides.eq(0).addClass(b.params.slideNextClass);var r=e.prev("."+b.params.slideClass).addClass(b.params.slidePrevClass);if(b.params.loop&&0===r.length&&b.slides.eq(-1).addClass(b.params.slidePrevClass),b.paginationContainer&&b.paginationContainer.length>0){var i,s=b.params.loop?Math.ceil((b.slides.length-2*b.loopedSlides)/b.params.slidesPerGroup):b.snapGrid.length;if(b.params.loop?(i=Math.ceil((b.activeIndex-b.loopedSlides)/b.params.slidesPerGroup),i>b.slides.length-1-2*b.loopedSlides&&(i-=b.slides.length-2*b.loopedSlides),i>s-1&&(i-=s),0>i&&"bullets"!==b.params.paginationType&&(i=s+i)):i="undefined"!=typeof b.snapIndex?b.snapIndex:b.activeIndex||0,"bullets"===b.params.paginationType&&b.bullets&&b.bullets.length>0&&(b.bullets.removeClass(b.params.bulletActiveClass),b.paginationContainer.length>1?b.bullets.each(function(){a(this).index()===i&&a(this).addClass(b.params.bulletActiveClass)}):b.bullets.eq(i).addClass(b.params.bulletActiveClass)),"fraction"===b.params.paginationType&&(b.paginationContainer.find("."+b.params.paginationCurrentClass).text(i+1),b.paginationContainer.find("."+b.params.paginationTotalClass).text(s)),"progress"===b.params.paginationType){var n=(i+1)/s,o=n,l=1;b.isHorizontal()||(l=n,o=1),b.paginationContainer.find("."+b.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+o+") scaleY("+l+")").transition(b.params.speed)}"custom"===b.params.paginationType&&b.params.paginationCustomRender&&(b.paginationContainer.html(b.params.paginationCustomRender(b,i+1,s)),b.emit("onPaginationRendered",b,b.paginationContainer[0]))}b.params.loop||(b.params.prevButton&&b.prevButton&&b.prevButton.length>0&&(b.isBeginning?(b.prevButton.addClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.disable(b.prevButton)):(b.prevButton.removeClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.enable(b.prevButton))),b.params.nextButton&&b.nextButton&&b.nextButton.length>0&&(b.isEnd?(b.nextButton.addClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.disable(b.nextButton)):(b.nextButton.removeClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.enable(b.nextButton))))},b.updatePagination=function(){if(b.params.pagination&&b.paginationContainer&&b.paginationContainer.length>0){var e="";if("bullets"===b.params.paginationType){for(var a=b.params.loop?Math.ceil((b.slides.length-2*b.loopedSlides)/b.params.slidesPerGroup):b.snapGrid.length,t=0;a>t;t++)e+=b.params.paginationBulletRender?b.params.paginationBulletRender(t,b.params.bulletClass):"<"+b.params.paginationElement+' class="'+b.params.bulletClass+'">";b.paginationContainer.html(e),b.bullets=b.paginationContainer.find("."+b.params.bulletClass),b.params.paginationClickable&&b.params.a11y&&b.a11y&&b.a11y.initPagination()}"fraction"===b.params.paginationType&&(e=b.params.paginationFractionRender?b.params.paginationFractionRender(b,b.params.paginationCurrentClass,b.params.paginationTotalClass):' / ',b.paginationContainer.html(e)),"progress"===b.params.paginationType&&(e=b.params.paginationProgressRender?b.params.paginationProgressRender(b,b.params.paginationProgressbarClass):'',b.paginationContainer.html(e)),"custom"!==b.params.paginationType&&b.emit("onPaginationRendered",b,b.paginationContainer[0])}},b.update=function(e){function a(){r=Math.min(Math.max(b.translate,b.maxTranslate()),b.minTranslate()),b.setWrapperTranslate(r),b.updateActiveIndex(),b.updateClasses()}if(b.updateContainerSize(),b.updateSlidesSize(),b.updateProgress(),b.updatePagination(),b.updateClasses(),b.params.scrollbar&&b.scrollbar&&b.scrollbar.set(),e){var t,r;b.controller&&b.controller.spline&&(b.controller.spline=void 0),b.params.freeMode?(a(),b.params.autoHeight&&b.updateAutoHeight()):(t=("auto"===b.params.slidesPerView||b.params.slidesPerView>1)&&b.isEnd&&!b.params.centeredSlides?b.slideTo(b.slides.length-1,0,!1,!0):b.slideTo(b.activeIndex,0,!1,!0),t||a())}else b.params.autoHeight&&b.updateAutoHeight()},b.onResize=function(e){b.params.breakpoints&&b.setBreakpoint();var a=b.params.allowSwipeToPrev,t=b.params.allowSwipeToNext;b.params.allowSwipeToPrev=b.params.allowSwipeToNext=!0,b.updateContainerSize(),b.updateSlidesSize(),("auto"===b.params.slidesPerView||b.params.freeMode||e)&&b.updatePagination(),b.params.scrollbar&&b.scrollbar&&b.scrollbar.set(),b.controller&&b.controller.spline&&(b.controller.spline=void 0);var r=!1;if(b.params.freeMode){var i=Math.min(Math.max(b.translate,b.maxTranslate()),b.minTranslate());b.setWrapperTranslate(i),b.updateActiveIndex(),b.updateClasses(),b.params.autoHeight&&b.updateAutoHeight()}else b.updateClasses(),r=("auto"===b.params.slidesPerView||b.params.slidesPerView>1)&&b.isEnd&&!b.params.centeredSlides?b.slideTo(b.slides.length-1,0,!1,!0):b.slideTo(b.activeIndex,0,!1,!0);b.params.lazyLoading&&!r&&b.lazy&&b.lazy.load(),b.params.allowSwipeToPrev=a,b.params.allowSwipeToNext=t};var T=["mousedown","mousemove","mouseup"];window.navigator.pointerEnabled?T=["pointerdown","pointermove","pointerup"]:window.navigator.msPointerEnabled&&(T=["MSPointerDown","MSPointerMove","MSPointerUp"]),b.touchEvents={start:b.support.touch||!b.params.simulateTouch?"touchstart":T[0],move:b.support.touch||!b.params.simulateTouch?"touchmove":T[1],end:b.support.touch||!b.params.simulateTouch?"touchend":T[2]},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===b.params.touchEventsTarget?b.container:b.wrapper).addClass("swiper-wp8-"+b.params.direction),b.initEvents=function(e){var a=e?"off":"on",t=e?"removeEventListener":"addEventListener",r="container"===b.params.touchEventsTarget?b.container[0]:b.wrapper[0],s=b.support.touch?r:document,n=b.params.nested?!0:!1;b.browser.ie?(r[t](b.touchEvents.start,b.onTouchStart,!1),s[t](b.touchEvents.move,b.onTouchMove,n),s[t](b.touchEvents.end,b.onTouchEnd,!1)):(b.support.touch&&(r[t](b.touchEvents.start,b.onTouchStart,!1),r[t](b.touchEvents.move,b.onTouchMove,n),r[t](b.touchEvents.end,b.onTouchEnd,!1)),!i.simulateTouch||b.device.ios||b.device.android||(r[t]("mousedown",b.onTouchStart,!1),document[t]("mousemove",b.onTouchMove,n),document[t]("mouseup",b.onTouchEnd,!1))),window[t]("resize",b.onResize),b.params.nextButton&&b.nextButton&&b.nextButton.length>0&&(b.nextButton[a]("click",b.onClickNext),b.params.a11y&&b.a11y&&b.nextButton[a]("keydown",b.a11y.onEnterKey)),b.params.prevButton&&b.prevButton&&b.prevButton.length>0&&(b.prevButton[a]("click",b.onClickPrev),b.params.a11y&&b.a11y&&b.prevButton[a]("keydown",b.a11y.onEnterKey)),b.params.pagination&&b.params.paginationClickable&&(b.paginationContainer[a]("click","."+b.params.bulletClass,b.onClickIndex),b.params.a11y&&b.a11y&&b.paginationContainer[a]("keydown","."+b.params.bulletClass,b.a11y.onEnterKey)),(b.params.preventClicks||b.params.preventClicksPropagation)&&r[t]("click",b.preventClicks,!0)},b.attachEvents=function(){b.initEvents()},b.detachEvents=function(){b.initEvents(!0)},b.allowClick=!0,b.preventClicks=function(e){b.allowClick||(b.params.preventClicks&&e.preventDefault(),b.params.preventClicksPropagation&&b.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},b.onClickNext=function(e){e.preventDefault(),(!b.isEnd||b.params.loop)&&b.slideNext()},b.onClickPrev=function(e){e.preventDefault(),(!b.isBeginning||b.params.loop)&&b.slidePrev()},b.onClickIndex=function(e){e.preventDefault();var t=a(this).index()*b.params.slidesPerGroup;b.params.loop&&(t+=b.loopedSlides),b.slideTo(t)},b.updateClickedSlide=function(e){var t=o(e,"."+b.params.slideClass),r=!1;if(t)for(var i=0;ib.slides.length-b.loopedSlides+b.params.slidesPerView/2?(b.fixLoop(),n=b.wrapper.children("."+b.params.slideClass+'[data-swiper-slide-index="'+s+'"]:not(.swiper-slide-duplicate)').eq(0).index(),setTimeout(function(){b.slideTo(n)},0)):b.slideTo(n):n>b.slides.length-b.params.slidesPerView?(b.fixLoop(),n=b.wrapper.children("."+b.params.slideClass+'[data-swiper-slide-index="'+s+'"]:not(.swiper-slide-duplicate)').eq(0).index(),setTimeout(function(){b.slideTo(n)},0)):b.slideTo(n)}else b.slideTo(n)}};var S,C,z,M,E,P,k,I,L,B,D="input, select, textarea, button",H=Date.now(),A=[];b.animating=!1,b.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var G,O;if(b.onTouchStart=function(e){if(e.originalEvent&&(e=e.originalEvent),G="touchstart"===e.type,G||!("which"in e)||3!==e.which){if(b.params.noSwiping&&o(e,"."+b.params.noSwipingClass))return void(b.allowClick=!0);if(!b.params.swipeHandler||o(e,b.params.swipeHandler)){var t=b.touches.currentX="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,r=b.touches.currentY="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY;if(!(b.device.ios&&b.params.iOSEdgeSwipeDetection&&t<=b.params.iOSEdgeSwipeThreshold)){if(S=!0,C=!1,z=!0,E=void 0,O=void 0,b.touches.startX=t,b.touches.startY=r,M=Date.now(),b.allowClick=!0,b.updateContainerSize(),b.swipeDirection=void 0,b.params.threshold>0&&(I=!1),"touchstart"!==e.type){var i=!0;a(e.target).is(D)&&(i=!1),document.activeElement&&a(document.activeElement).is(D)&&document.activeElement.blur(),i&&e.preventDefault()}b.emit("onTouchStart",b,e)}}}},b.onTouchMove=function(e){if(e.originalEvent&&(e=e.originalEvent),!G||"mousemove"!==e.type){if(e.preventedByNestedSwiper)return b.touches.startX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,void(b.touches.startY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY);if(b.params.onlyExternal)return b.allowClick=!1,void(S&&(b.touches.startX=b.touches.currentX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,b.touches.startY=b.touches.currentY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,M=Date.now()));if(G&&document.activeElement&&e.target===document.activeElement&&a(e.target).is(D))return C=!0,void(b.allowClick=!1);if(z&&b.emit("onTouchMove",b,e),!(e.targetTouches&&e.targetTouches.length>1)){if(b.touches.currentX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,b.touches.currentY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,"undefined"==typeof E){var t=180*Math.atan2(Math.abs(b.touches.currentY-b.touches.startY),Math.abs(b.touches.currentX-b.touches.startX))/Math.PI;E=b.isHorizontal()?t>b.params.touchAngle:90-t>b.params.touchAngle}if(E&&b.emit("onTouchMoveOpposite",b,e),"undefined"==typeof O&&b.browser.ieTouch&&(b.touches.currentX!==b.touches.startX||b.touches.currentY!==b.touches.startY)&&(O=!0),S){if(E)return void(S=!1);if(O||!b.browser.ieTouch){b.allowClick=!1,b.emit("onSliderMove",b,e),e.preventDefault(),b.params.touchMoveStopPropagation&&!b.params.nested&&e.stopPropagation(),C||(i.loop&&b.fixLoop(),k=b.getWrapperTranslate(),b.setWrapperTransition(0),b.animating&&b.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),b.params.autoplay&&b.autoplaying&&(b.params.autoplayDisableOnInteraction?b.stopAutoplay():b.pauseAutoplay()),B=!1,b.params.grabCursor&&(b.container[0].style.cursor="move",b.container[0].style.cursor="-webkit-grabbing",b.container[0].style.cursor="-moz-grabbin",b.container[0].style.cursor="grabbing")),C=!0;var r=b.touches.diff=b.isHorizontal()?b.touches.currentX-b.touches.startX:b.touches.currentY-b.touches.startY;r*=b.params.touchRatio,b.rtl&&(r=-r),b.swipeDirection=r>0?"prev":"next",P=r+k;var s=!0;if(r>0&&P>b.minTranslate()?(s=!1,b.params.resistance&&(P=b.minTranslate()-1+Math.pow(-b.minTranslate()+k+r,b.params.resistanceRatio))):0>r&&PP&&(P=k),!b.params.allowSwipeToPrev&&"prev"===b.swipeDirection&&P>k&&(P=k),b.params.followFinger){if(b.params.threshold>0){if(!(Math.abs(r)>b.params.threshold||I))return void(P=k);if(!I)return I=!0,b.touches.startX=b.touches.currentX,b.touches.startY=b.touches.currentY,P=k,void(b.touches.diff=b.isHorizontal()?b.touches.currentX-b.touches.startX:b.touches.currentY-b.touches.startY)}(b.params.freeMode||b.params.watchSlidesProgress)&&b.updateActiveIndex(),b.params.freeMode&&(0===A.length&&A.push({position:b.touches[b.isHorizontal()?"startX":"startY"],time:M}),A.push({position:b.touches[b.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),b.updateProgress(P),b.setWrapperTranslate(P)}}}}}},b.onTouchEnd=function(e){if(e.originalEvent&&(e=e.originalEvent),z&&b.emit("onTouchEnd",b,e),z=!1,S){b.params.grabCursor&&C&&S&&(b.container[0].style.cursor="move",b.container[0].style.cursor="-webkit-grab",b.container[0].style.cursor="-moz-grab",b.container[0].style.cursor="grab");var t=Date.now(),r=t-M;if(b.allowClick&&(b.updateClickedSlide(e),b.emit("onTap",b,e),300>r&&t-H>300&&(L&&clearTimeout(L),L=setTimeout(function(){b&&(b.params.paginationHide&&b.paginationContainer.length>0&&!a(e.target).hasClass(b.params.bulletClass)&&b.paginationContainer.toggleClass(b.params.paginationHiddenClass),b.emit("onClick",b,e))},300)),300>r&&300>t-H&&(L&&clearTimeout(L),b.emit("onDoubleTap",b,e))),H=Date.now(),setTimeout(function(){b&&(b.allowClick=!0)},0),!S||!C||!b.swipeDirection||0===b.touches.diff||P===k)return void(S=C=!1);S=C=!1;var i;if(i=b.params.followFinger?b.rtl?b.translate:-b.translate:-P,b.params.freeMode){if(i<-b.minTranslate())return void b.slideTo(b.activeIndex);if(i>-b.maxTranslate())return void(b.slides.length1){var s=A.pop(),n=A.pop(),o=s.position-n.position,l=s.time-n.time;b.velocity=o/l,b.velocity=b.velocity/2,Math.abs(b.velocity)150||(new window.Date).getTime()-s.time>300)&&(b.velocity=0)}else b.velocity=0;A.length=0;var p=1e3*b.params.freeModeMomentumRatio,d=b.velocity*p,u=b.translate+d;b.rtl&&(u=-u);var c,m=!1,h=20*Math.abs(b.velocity)*b.params.freeModeMomentumBounceRatio;if(ub.minTranslate())b.params.freeModeMomentumBounce?(u-b.minTranslate()>h&&(u=b.minTranslate()+h),c=b.minTranslate(),m=!0,B=!0):u=b.minTranslate();else if(b.params.freeModeSticky){var f,g=0;for(g=0;g-u){f=g;break}u=Math.abs(b.snapGrid[f]-u)=b.params.longSwipesMs)&&(b.updateProgress(),b.updateActiveIndex()))}var v,w=0,y=b.slidesSizesGrid[0];for(v=0;v=b.slidesGrid[v]&&i=b.slidesGrid[v]&&(w=v,y=b.slidesGrid[b.slidesGrid.length-1]-b.slidesGrid[b.slidesGrid.length-2]);var x=(i-b.slidesGrid[w])/y;if(r>b.params.longSwipesMs){if(!b.params.longSwipes)return void b.slideTo(b.activeIndex);"next"===b.swipeDirection&&(x>=b.params.longSwipesRatio?b.slideTo(w+b.params.slidesPerGroup):b.slideTo(w)),"prev"===b.swipeDirection&&(x>1-b.params.longSwipesRatio?b.slideTo(w+b.params.slidesPerGroup):b.slideTo(w))}else{if(!b.params.shortSwipes)return void b.slideTo(b.activeIndex);"next"===b.swipeDirection&&b.slideTo(w+b.params.slidesPerGroup),"prev"===b.swipeDirection&&b.slideTo(w)}}},b._slideTo=function(e,a){return b.slideTo(e,a,!0,!0)},b.slideTo=function(e,a,t,r){"undefined"==typeof t&&(t=!0),"undefined"==typeof e&&(e=0),0>e&&(e=0),b.snapIndex=Math.floor(e/b.params.slidesPerGroup),b.snapIndex>=b.snapGrid.length&&(b.snapIndex=b.snapGrid.length-1);var i=-b.snapGrid[b.snapIndex];b.params.autoplay&&b.autoplaying&&(r||!b.params.autoplayDisableOnInteraction?b.pauseAutoplay(a):b.stopAutoplay()),b.updateProgress(i);for(var s=0;s=Math.floor(100*b.slidesGrid[s])&&(e=s);return!b.params.allowSwipeToNext&&ib.translate&&i>b.maxTranslate()&&(b.activeIndex||0)!==e?!1:("undefined"==typeof a&&(a=b.params.speed),b.previousIndex=b.activeIndex||0,b.activeIndex=e,b.rtl&&-i===b.translate||!b.rtl&&i===b.translate?(b.params.autoHeight&&b.updateAutoHeight(),b.updateClasses(),"slide"!==b.params.effect&&b.setWrapperTranslate(i),!1):(b.updateClasses(),b.onTransitionStart(t),0===a?(b.setWrapperTranslate(i),b.setWrapperTransition(0),b.onTransitionEnd(t)):(b.setWrapperTranslate(i),b.setWrapperTransition(a),b.animating||(b.animating=!0,b.wrapper.transitionEnd(function(){b&&b.onTransitionEnd(t)}))),!0))},b.onTransitionStart=function(e){"undefined"==typeof e&&(e=!0),b.params.autoHeight&&b.updateAutoHeight(),b.lazy&&b.lazy.onTransitionStart(),e&&(b.emit("onTransitionStart",b),b.activeIndex!==b.previousIndex&&(b.emit("onSlideChangeStart",b),b.activeIndex>b.previousIndex?b.emit("onSlideNextStart",b):b.emit("onSlidePrevStart",b)))},b.onTransitionEnd=function(e){b.animating=!1,b.setWrapperTransition(0),"undefined"==typeof e&&(e=!0),b.lazy&&b.lazy.onTransitionEnd(),e&&(b.emit("onTransitionEnd",b),b.activeIndex!==b.previousIndex&&(b.emit("onSlideChangeEnd",b),b.activeIndex>b.previousIndex?b.emit("onSlideNextEnd",b):b.emit("onSlidePrevEnd",b))),b.params.hashnav&&b.hashnav&&b.hashnav.setHash()},b.slideNext=function(e,a,t){if(b.params.loop){if(b.animating)return!1;b.fixLoop();b.container[0].clientLeft;return b.slideTo(b.activeIndex+b.params.slidesPerGroup,a,e,t)}return b.slideTo(b.activeIndex+b.params.slidesPerGroup,a,e,t)},b._slideNext=function(e){return b.slideNext(!0,e,!0)},b.slidePrev=function(e,a,t){if(b.params.loop){if(b.animating)return!1;b.fixLoop();b.container[0].clientLeft;return b.slideTo(b.activeIndex-1,a,e,t)}return b.slideTo(b.activeIndex-1,a,e,t)},b._slidePrev=function(e){return b.slidePrev(!0,e,!0)},b.slideReset=function(e,a,t){return b.slideTo(b.activeIndex,a,e)},b.setWrapperTransition=function(e,a){b.wrapper.transition(e),"slide"!==b.params.effect&&b.effects[b.params.effect]&&b.effects[b.params.effect].setTransition(e),b.params.parallax&&b.parallax&&b.parallax.setTransition(e),b.params.scrollbar&&b.scrollbar&&b.scrollbar.setTransition(e),b.params.control&&b.controller&&b.controller.setTransition(e,a),b.emit("onSetTransition",b,e)},b.setWrapperTranslate=function(e,a,t){var r=0,i=0,n=0;b.isHorizontal()?r=b.rtl?-e:e:i=e,b.params.roundLengths&&(r=s(r),i=s(i)),b.params.virtualTranslate||(b.support.transforms3d?b.wrapper.transform("translate3d("+r+"px, "+i+"px, "+n+"px)"):b.wrapper.transform("translate("+r+"px, "+i+"px)")),b.translate=b.isHorizontal()?r:i;var o,l=b.maxTranslate()-b.minTranslate();o=0===l?0:(e-b.minTranslate())/l,o!==b.progress&&b.updateProgress(e),a&&b.updateActiveIndex(),"slide"!==b.params.effect&&b.effects[b.params.effect]&&b.effects[b.params.effect].setTranslate(b.translate),b.params.parallax&&b.parallax&&b.parallax.setTranslate(b.translate),b.params.scrollbar&&b.scrollbar&&b.scrollbar.setTranslate(b.translate),b.params.control&&b.controller&&b.controller.setTranslate(b.translate,t),b.emit("onSetTranslate",b,b.translate)},b.getTranslate=function(e,a){var t,r,i,s;return"undefined"==typeof a&&(a="x"),b.params.virtualTranslate?b.rtl?-b.translate:b.translate:(i=window.getComputedStyle(e,null),window.WebKitCSSMatrix?(r=i.transform||i.webkitTransform,r.split(",").length>6&&(r=r.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),s=new window.WebKitCSSMatrix("none"===r?"":r)):(s=i.MozTransform||i.OTransform||i.MsTransform||i.msTransform||i.transform||i.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=s.toString().split(",")),"x"===a&&(r=window.WebKitCSSMatrix?s.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(r=window.WebKitCSSMatrix?s.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),b.rtl&&r&&(r=-r),r||0)},b.getWrapperTranslate=function(e){return"undefined"==typeof e&&(e=b.isHorizontal()?"x":"y"),b.getTranslate(b.wrapper[0],e)},b.observers=[],b.initObservers=function(){if(b.params.observeParents)for(var e=b.container.parents(),a=0;ae.length&&(b.loopedSlides=e.length);var t,r=[],i=[];for(e.each(function(t,s){var n=a(this);t=e.length-b.loopedSlides&&r.push(s),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)b.wrapper.prepend(a(r[t].cloneNode(!0)).addClass(b.params.slideDuplicateClass))},b.destroyLoop=function(){b.wrapper.children("."+b.params.slideClass+"."+b.params.slideDuplicateClass).remove(),b.slides.removeAttr("data-swiper-slide-index")},b.reLoop=function(e){var a=b.activeIndex-b.loopedSlides;b.destroyLoop(),b.createLoop(),b.updateSlidesSize(),e&&b.slideTo(a+b.loopedSlides,0,!1)},b.fixLoop=function(){var e;b.activeIndex=2*b.loopedSlides||b.activeIndex>b.slides.length-2*b.params.slidesPerView)&&(e=-b.slides.length+b.activeIndex+b.loopedSlides,e+=b.loopedSlides,b.slideTo(e,0,!1,!0))},b.appendSlide=function(e){if(b.params.loop&&b.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;aa&&t--;t=Math.max(t,0)}else a=e,b.slides[a]&&b.slides.eq(a).remove(),t>a&&t--,t=Math.max(t,0);b.params.loop&&b.createLoop(),b.params.observer&&b.support.observer||b.update(!0),b.params.loop?b.slideTo(t+b.loopedSlides,0,!1):b.slideTo(t,0,!1)},b.removeAllSlides=function(){for(var e=[],a=0;a
'),t.append(d)),0===u.length&&(u=a('
'),t.append(u)),d.length&&(d[0].style.opacity=Math.max(-r,0)),u.length&&(u[0].style.opacity=Math.max(r,0))}t.transform("translate3d("+l+"px, "+p+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(e){if(b.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),b.params.virtualTranslate&&0!==e){var t=!1;b.slides.eq(b.activeIndex).transitionEnd(function(){if(!t&&b&&a(this).hasClass(b.params.slideActiveClass)){t=!0,b.animating=!1;for(var e=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],r=0;r
'),b.wrapper.append(e)),e.css({height:b.width+"px"})):(e=b.container.find(".swiper-cube-shadow"),0===e.length&&(e=a('
'),b.container.append(e))));for(var r=0;r=o&&o>-1&&(t=90*r+90*o,b.rtl&&(t=90*-r-90*o)),i.transform(u),b.params.cube.slideShadows){var c=b.isHorizontal()?i.find(".swiper-slide-shadow-left"):i.find(".swiper-slide-shadow-top"),m=b.isHorizontal()?i.find(".swiper-slide-shadow-right"):i.find(".swiper-slide-shadow-bottom");0===c.length&&(c=a('
'),i.append(c)),0===m.length&&(m=a('
'),i.append(m)),c.length&&(c[0].style.opacity=Math.max(-o,0)),m.length&&(m[0].style.opacity=Math.max(o,0))}}if(b.wrapper.css({"-webkit-transform-origin":"50% 50% -"+b.size/2+"px","-moz-transform-origin":"50% 50% -"+b.size/2+"px","-ms-transform-origin":"50% 50% -"+b.size/2+"px","transform-origin":"50% 50% -"+b.size/2+"px"}),b.params.cube.shadow)if(b.isHorizontal())e.transform("translate3d(0px, "+(b.width/2+b.params.cube.shadowOffset)+"px, "+-b.width/2+"px) rotateX(90deg) rotateZ(0deg) scale("+b.params.cube.shadowScale+")");else{var h=Math.abs(t)-90*Math.floor(Math.abs(t)/90),f=1.5-(Math.sin(2*h*Math.PI/360)/2+Math.cos(2*h*Math.PI/360)/2),g=b.params.cube.shadowScale,v=b.params.cube.shadowScale/f,w=b.params.cube.shadowOffset;e.transform("scale3d("+g+", 1, "+v+") translate3d(0px, "+(b.height/2+w)+"px, "+-b.height/2/v+"px) rotateX(-90deg)")}var y=b.isSafari||b.isUiWebView?-b.size/2:0;b.wrapper.transform("translate3d(0px,0,"+y+"px) rotateX("+(b.isHorizontal()?0:t)+"deg) rotateY("+(b.isHorizontal()?-t:0)+"deg)")},setTransition:function(e){b.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),b.params.cube.shadow&&!b.isHorizontal()&&b.container.find(".swiper-cube-shadow").transition(e)}},coverflow:{setTranslate:function(){for(var e=b.translate,t=b.isHorizontal()?-e+b.width/2:-e+b.height/2,r=b.isHorizontal()?b.params.coverflow.rotate:-b.params.coverflow.rotate,i=b.params.coverflow.depth,s=0,n=b.slides.length;n>s;s++){var o=b.slides.eq(s),l=b.slidesSizesGrid[s],p=o[0].swiperSlideOffset,d=(t-p-l/2)/l*b.params.coverflow.modifier,u=b.isHorizontal()?r*d:0,c=b.isHorizontal()?0:r*d,m=-i*Math.abs(d),h=b.isHorizontal()?0:b.params.coverflow.stretch*d,f=b.isHorizontal()?b.params.coverflow.stretch*d:0;Math.abs(f)<.001&&(f=0),Math.abs(h)<.001&&(h=0),Math.abs(m)<.001&&(m=0),Math.abs(u)<.001&&(u=0),Math.abs(c)<.001&&(c=0);var g="translate3d("+f+"px,"+h+"px,"+m+"px) rotateX("+c+"deg) rotateY("+u+"deg)";if(o.transform(g),o[0].style.zIndex=-Math.abs(Math.round(d))+1,b.params.coverflow.slideShadows){var v=b.isHorizontal()?o.find(".swiper-slide-shadow-left"):o.find(".swiper-slide-shadow-top"),w=b.isHorizontal()?o.find(".swiper-slide-shadow-right"):o.find(".swiper-slide-shadow-bottom");0===v.length&&(v=a('
'),o.append(v)),0===w.length&&(w=a('
'),o.append(w)),v.length&&(v[0].style.opacity=d>0?d:0),w.length&&(w[0].style.opacity=-d>0?-d:0)}}if(b.browser.ie){var y=b.wrapper[0].style;y.perspectiveOrigin=t+"px 50%"}},setTransition:function(e){b.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}}},b.lazy={initialImageLoaded:!1,loadImageInSlide:function(e,t){if("undefined"!=typeof e&&("undefined"==typeof t&&(t=!0),0!==b.slides.length)){var r=b.slides.eq(e),i=r.find(".swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)");!r.hasClass("swiper-lazy")||r.hasClass("swiper-lazy-loaded")||r.hasClass("swiper-lazy-loading")||(i=i.add(r[0])),0!==i.length&&i.each(function(){var e=a(this);e.addClass("swiper-lazy-loading");var i=e.attr("data-background"),s=e.attr("data-src"),n=e.attr("data-srcset");b.loadImage(e[0],s||i,n,!1,function(){if(i?(e.css("background-image",'url("'+i+'")'),e.removeAttr("data-background")):(n&&(e.attr("srcset",n),e.removeAttr("data-srcset")),s&&(e.attr("src",s),e.removeAttr("data-src"))),e.addClass("swiper-lazy-loaded").removeClass("swiper-lazy-loading"),r.find(".swiper-lazy-preloader, .preloader").remove(),b.params.loop&&t){var a=r.attr("data-swiper-slide-index");if(r.hasClass(b.params.slideDuplicateClass)){var o=b.wrapper.children('[data-swiper-slide-index="'+a+'"]:not(.'+b.params.slideDuplicateClass+")");b.lazy.loadImageInSlide(o.index(),!1)}else{var l=b.wrapper.children("."+b.params.slideDuplicateClass+'[data-swiper-slide-index="'+a+'"]');b.lazy.loadImageInSlide(l.index(),!1)}}b.emit("onLazyImageReady",b,r[0],e[0])}),b.emit("onLazyImageLoad",b,r[0],e[0])})}},load:function(){var e;if(b.params.watchSlidesVisibility)b.wrapper.children("."+b.params.slideVisibleClass).each(function(){b.lazy.loadImageInSlide(a(this).index())});else if(b.params.slidesPerView>1)for(e=b.activeIndex;e1||b.params.lazyLoadingInPrevNextAmount&&b.params.lazyLoadingInPrevNextAmount>1){var t=b.params.lazyLoadingInPrevNextAmount,r=b.params.slidesPerView,i=Math.min(b.activeIndex+r+Math.max(t,r),b.slides.length),s=Math.max(b.activeIndex-Math.max(r,t),0);for(e=b.activeIndex+b.params.slidesPerView;i>e;e++)b.slides[e]&&b.lazy.loadImageInSlide(e);for(e=s;e0&&b.lazy.loadImageInSlide(n.index());var o=b.wrapper.children("."+b.params.slidePrevClass);o.length>0&&b.lazy.loadImageInSlide(o.index())}},onTransitionStart:function(){b.params.lazyLoading&&(b.params.lazyLoadingOnTransitionStart||!b.params.lazyLoadingOnTransitionStart&&!b.lazy.initialImageLoaded)&&b.lazy.load()},onTransitionEnd:function(){b.params.lazyLoading&&!b.params.lazyLoadingOnTransitionStart&&b.lazy.load()}},b.scrollbar={isTouched:!1,setDragPosition:function(e){var a=b.scrollbar,t=b.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY,r=t-a.track.offset()[b.isHorizontal()?"left":"top"]-a.dragSize/2,i=-b.minTranslate()*a.moveDivider,s=-b.maxTranslate()*a.moveDivider;i>r?r=i:r>s&&(r=s),r=-r/a.moveDivider,b.updateProgress(r),b.setWrapperTranslate(r,!0)},dragStart:function(e){var a=b.scrollbar;a.isTouched=!0,e.preventDefault(),e.stopPropagation(),a.setDragPosition(e),clearTimeout(a.dragTimeout),a.track.transition(0),b.params.scrollbarHide&&a.track.css("opacity",1),b.wrapper.transition(100),a.drag.transition(100),b.emit("onScrollbarDragStart",b)},dragMove:function(e){var a=b.scrollbar;a.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,a.setDragPosition(e),b.wrapper.transition(0),a.track.transition(0),a.drag.transition(0),b.emit("onScrollbarDragMove",b))},dragEnd:function(e){var a=b.scrollbar;a.isTouched&&(a.isTouched=!1,b.params.scrollbarHide&&(clearTimeout(a.dragTimeout),a.dragTimeout=setTimeout(function(){a.track.css("opacity",0),a.track.transition(400)},1e3)),b.emit("onScrollbarDragEnd",b),b.params.scrollbarSnapOnRelease&&b.slideReset())},enableDraggable:function(){var e=b.scrollbar,t=b.support.touch?e.track:document;a(e.track).on(b.touchEvents.start,e.dragStart),a(t).on(b.touchEvents.move,e.dragMove),a(t).on(b.touchEvents.end,e.dragEnd)},disableDraggable:function(){var e=b.scrollbar,t=b.support.touch?e.track:document;a(e.track).off(b.touchEvents.start,e.dragStart),a(t).off(b.touchEvents.move,e.dragMove),a(t).off(b.touchEvents.end,e.dragEnd)},set:function(){if(b.params.scrollbar){var e=b.scrollbar;e.track=a(b.params.scrollbar),b.params.uniqueNavElements&&"string"==typeof b.params.scrollbar&&e.track.length>1&&1===b.container.find(b.params.scrollbar).length&&(e.track=b.container.find(b.params.scrollbar)),e.drag=e.track.find(".swiper-scrollbar-drag"),0===e.drag.length&&(e.drag=a('
'),e.track.append(e.drag)),e.drag[0].style.width="",e.drag[0].style.height="",e.trackSize=b.isHorizontal()?e.track[0].offsetWidth:e.track[0].offsetHeight,e.divider=b.size/b.virtualSize,e.moveDivider=e.divider*(e.trackSize/b.size),e.dragSize=e.trackSize*e.divider,b.isHorizontal()?e.drag[0].style.width=e.dragSize+"px":e.drag[0].style.height=e.dragSize+"px",e.divider>=1?e.track[0].style.display="none":e.track[0].style.display="",b.params.scrollbarHide&&(e.track[0].style.opacity=0)}},setTranslate:function(){if(b.params.scrollbar){var e,a=b.scrollbar,t=(b.translate||0,a.dragSize);e=(a.trackSize-a.dragSize)*b.progress,b.rtl&&b.isHorizontal()?(e=-e,e>0?(t=a.dragSize-e,e=0):-e+a.dragSize>a.trackSize&&(t=a.trackSize+e)):0>e?(t=a.dragSize+e,e=0):e+a.dragSize>a.trackSize&&(t=a.trackSize-e),b.isHorizontal()?(b.support.transforms3d?a.drag.transform("translate3d("+e+"px, 0, 0)"):a.drag.transform("translateX("+e+"px)"),a.drag[0].style.width=t+"px"):(b.support.transforms3d?a.drag.transform("translate3d(0px, "+e+"px, 0)"):a.drag.transform("translateY("+e+"px)"),a.drag[0].style.height=t+"px"),b.params.scrollbarHide&&(clearTimeout(a.timeout),a.track[0].style.opacity=1,a.timeout=setTimeout(function(){a.track[0].style.opacity=0,a.track.transition(400)},1e3))}},setTransition:function(e){b.params.scrollbar&&b.scrollbar.drag.transition(e)}},b.controller={LinearSpline:function(e,a){this.x=e,this.y=a,this.lastIndex=e.length-1;var t,r;this.x.length;this.interpolate=function(e){return e?(r=i(this.x,e),t=r-1,(e-this.x[t])*(this.y[r]-this.y[t])/(this.x[r]-this.x[t])+this.y[t]):0};var i=function(){var e,a,t;return function(r,i){for(a=-1,e=r.length;e-a>1;)r[t=e+a>>1]<=i?a=t:e=t;return e}}()},getInterpolateFunction:function(e){b.controller.spline||(b.controller.spline=b.params.loop?new b.controller.LinearSpline(b.slidesGrid,e.slidesGrid):new b.controller.LinearSpline(b.snapGrid,e.snapGrid))},setTranslate:function(e,a){function r(a){e=a.rtl&&"horizontal"===a.params.direction?-b.translate:b.translate,"slide"===b.params.controlBy&&(b.controller.getInterpolateFunction(a),s=-b.controller.spline.interpolate(-e)),s&&"container"!==b.params.controlBy||(i=(a.maxTranslate()-a.minTranslate())/(b.maxTranslate()-b.minTranslate()),s=(e-b.minTranslate())*i+a.minTranslate()),b.params.controlInverse&&(s=a.maxTranslate()-s),a.updateProgress(s),a.setWrapperTranslate(s,!1,b),a.updateActiveIndex()}var i,s,n=b.params.control;if(b.isArray(n))for(var o=0;ot;t++){var i=b.slides.eq(t),s=i.attr("data-hash");if(s===e&&!i.hasClass(b.params.slideDuplicateClass)){var n=i.index();b.slideTo(n,a,b.params.runCallbacksOnInit,!0)}}}},setHash:function(){b.hashnav.initialized&&b.params.hashnav&&(document.location.hash=b.slides.eq(b.activeIndex).attr("data-hash")||"")}},b.disableKeyboardControl=function(){b.params.keyboardControl=!1,a(document).off("keydown",p)},b.enableKeyboardControl=function(){b.params.keyboardControl=!0,a(document).on("keydown",p)},b.mousewheel={event:!1,lastScrollTime:(new window.Date).getTime()},b.params.mousewheelControl){try{new window.WheelEvent("wheel"),b.mousewheel.event="wheel"}catch(N){(window.WheelEvent||b.container[0]&&"wheel"in b.container[0])&&(b.mousewheel.event="wheel")}!b.mousewheel.event&&window.WheelEvent,b.mousewheel.event||void 0===document.onmousewheel||(b.mousewheel.event="mousewheel"),b.mousewheel.event||(b.mousewheel.event="DOMMouseScroll")}b.disableMousewheelControl=function(){return b.mousewheel.event?(b.container.off(b.mousewheel.event,d),!0):!1},b.enableMousewheelControl=function(){return b.mousewheel.event?(b.container.on(b.mousewheel.event,d),!0):!1},b.parallax={setTranslate:function(){b.container.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){u(this,b.progress)}),b.slides.each(function(){var e=a(this);e.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var a=Math.min(Math.max(e[0].progress,-1),1);u(this,a)})})},setTransition:function(e){"undefined"==typeof e&&(e=b.params.speed),b.container.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var t=a(this),r=parseInt(t.attr("data-swiper-parallax-duration"),10)||e;0===e&&(r=0),t.transition(r)})}},b._plugins=[];for(var R in b.plugins){var W=b.plugins[R](b,b.params[R]);W&&b._plugins.push(W)}return b.callPlugins=function(e){for(var a=0;a'),notify:function(e){var a=b.a11y.liveRegion;0!==a.length&&(a.html(""),a.html(e))},init:function(){b.params.nextButton&&b.nextButton&&b.nextButton.length>0&&(b.a11y.makeFocusable(b.nextButton),b.a11y.addRole(b.nextButton,"button"),b.a11y.addLabel(b.nextButton,b.params.nextSlideMessage)),b.params.prevButton&&b.prevButton&&b.prevButton.length>0&&(b.a11y.makeFocusable(b.prevButton),b.a11y.addRole(b.prevButton,"button"),b.a11y.addLabel(b.prevButton,b.params.prevSlideMessage)),a(b.container).append(b.a11y.liveRegion)},initPagination:function(){b.params.pagination&&b.params.paginationClickable&&b.bullets&&b.bullets.length&&b.bullets.each(function(){var e=a(this);b.a11y.makeFocusable(e),b.a11y.addRole(e,"button"),b.a11y.addLabel(e,b.params.paginationBulletMessage.replace(/{{index}}/,e.index()+1))})},destroy:function(){b.a11y.liveRegion&&b.a11y.liveRegion.length>0&&b.a11y.liveRegion.remove()}},b.init=function(){b.params.loop&&b.createLoop(),b.updateContainerSize(),b.updateSlidesSize(),b.updatePagination(),b.params.scrollbar&&b.scrollbar&&(b.scrollbar.set(),b.params.scrollbarDraggable&&b.scrollbar.enableDraggable()),"slide"!==b.params.effect&&b.effects[b.params.effect]&&(b.params.loop||b.updateProgress(),b.effects[b.params.effect].setTranslate()),b.params.loop?b.slideTo(b.params.initialSlide+b.loopedSlides,0,b.params.runCallbacksOnInit):(b.slideTo(b.params.initialSlide,0,b.params.runCallbacksOnInit),0===b.params.initialSlide&&(b.parallax&&b.params.parallax&&b.parallax.setTranslate(),b.lazy&&b.params.lazyLoading&&(b.lazy.load(),b.lazy.initialImageLoaded=!0))),b.attachEvents(),b.params.observer&&b.support.observer&&b.initObservers(),b.params.preloadImages&&!b.params.lazyLoading&&b.preloadImages(),b.params.autoplay&&b.startAutoplay(),b.params.keyboardControl&&b.enableKeyboardControl&&b.enableKeyboardControl(),b.params.mousewheelControl&&b.enableMousewheelControl&&b.enableMousewheelControl(), +b.params.hashnav&&b.hashnav&&b.hashnav.init(),b.params.a11y&&b.a11y&&b.a11y.init(),b.emit("onInit",b)},b.cleanupStyles=function(){b.container.removeClass(b.classNames.join(" ")).removeAttr("style"),b.wrapper.removeAttr("style"),b.slides&&b.slides.length&&b.slides.removeClass([b.params.slideVisibleClass,b.params.slideActiveClass,b.params.slideNextClass,b.params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-column").removeAttr("data-swiper-row"),b.paginationContainer&&b.paginationContainer.length&&b.paginationContainer.removeClass(b.params.paginationHiddenClass),b.bullets&&b.bullets.length&&b.bullets.removeClass(b.params.bulletActiveClass),b.params.prevButton&&a(b.params.prevButton).removeClass(b.params.buttonDisabledClass),b.params.nextButton&&a(b.params.nextButton).removeClass(b.params.buttonDisabledClass),b.params.scrollbar&&b.scrollbar&&(b.scrollbar.track&&b.scrollbar.track.length&&b.scrollbar.track.removeAttr("style"),b.scrollbar.drag&&b.scrollbar.drag.length&&b.scrollbar.drag.removeAttr("style"))},b.destroy=function(e,a){b.detachEvents(),b.stopAutoplay(),b.params.scrollbar&&b.scrollbar&&b.params.scrollbarDraggable&&b.scrollbar.disableDraggable(),b.params.loop&&b.destroyLoop(),a&&b.cleanupStyles(),b.disconnectObservers(),b.params.keyboardControl&&b.disableKeyboardControl&&b.disableKeyboardControl(),b.params.mousewheelControl&&b.disableMousewheelControl&&b.disableMousewheelControl(),b.params.a11y&&b.a11y&&b.a11y.destroy(),b.emit("onDestroy"),e!==!1&&(b=null)},b.init(),b}};t.prototype={isSafari:function(){var e=navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent),isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},browser:{ie:window.navigator.pointerEnabled||window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled&&window.navigator.msMaxTouchPoints>1||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>1},device:function(){var e=navigator.userAgent,a=e.match(/(Android);?[\s\/]+([\d.]+)?/),t=e.match(/(iPad).*OS\s([\d_]+)/),r=e.match(/(iPod)(.*OS\s([\d_]+))?/),i=!t&&e.match(/(iPhone\sOS)\s([\d_]+)/);return{ios:t||i||r,android:a}}(),support:{touch:window.Modernizr&&Modernizr.touch===!0||function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}(),transforms3d:window.Modernizr&&Modernizr.csstransforms3d===!0||function(){var e=document.createElement("div").style;return"webkitPerspective"in e||"MozPerspective"in e||"OPerspective"in e||"MsPerspective"in e||"perspective"in e}(),flexbox:function(){for(var e=document.createElement("div").style,a="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),t=0;t=0&&o.indexOf(">")>=0){var l="div";for(0===o.indexOf(":~]/)?(t||document).querySelectorAll(a):[document.getElementById(a.split("#")[1])],i=0;i0&&a[0].nodeType)for(i=0;i0?parseFloat(this.css("width")):null},outerWidth:function(e){return this.length>0?e?this[0].offsetWidth+parseFloat(this.css("margin-right"))+parseFloat(this.css("margin-left")):this[0].offsetWidth:null},height:function(){return this[0]===window?window.innerHeight:this.length>0?parseFloat(this.css("height")):null},outerHeight:function(e){return this.length>0?e?this[0].offsetHeight+parseFloat(this.css("margin-top"))+parseFloat(this.css("margin-bottom")):this[0].offsetHeight:null},offset:function(){if(this.length>0){var e=this[0],a=e.getBoundingClientRect(),t=document.body,r=e.clientTop||t.clientTop||0,i=e.clientLeft||t.clientLeft||0,s=window.pageYOffset||e.scrollTop,n=window.pageXOffset||e.scrollLeft;return{top:a.top+s-r,left:a.left+n-i}}return null},css:function(e,a){var t;if(1===arguments.length){if("string"!=typeof e){for(t=0;tr-1?new e([]):0>a?(t=r+a,new e(0>t?[]:[this[t]])):new e([this[a]])},append:function(a){var t,r;for(t=0;t=0;r--)this[t].insertBefore(i.childNodes[r],this[t].childNodes[0])}else if(a instanceof e)for(r=0;r1)for(var i=0;i1)for(var i=0;i0?t?this[0].nextElementSibling&&a(this[0].nextElementSibling).is(t)?[this[0].nextElementSibling]:[]:this[0].nextElementSibling?[this[0].nextElementSibling]:[]:[])},nextAll:function(t){var r=[],i=this[0];if(!i)return new e([]);for(;i.nextElementSibling;){var s=i.nextElementSibling;t?a(s).is(t)&&r.push(s):r.push(s),i=s}return new e(r)},prev:function(t){return new e(this.length>0?t?this[0].previousElementSibling&&a(this[0].previousElementSibling).is(t)?[this[0].previousElementSibling]:[]:this[0].previousElementSibling?[this[0].previousElementSibling]:[]:[])},prevAll:function(t){var r=[],i=this[0];if(!i)return new e([]);for(;i.previousElementSibling;){var s=i.previousElementSibling;t?a(s).is(t)&&r.push(s):r.push(s),i=s}return new e(r)},parent:function(e){for(var t=[],r=0;r .swiper-wrapper { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -ms-flex-direction: column; + -webkit-flex-direction: column; + flex-direction: column; +} +.swiper-wrapper { + position: relative; + width: 100%; + height: 100%; + z-index: 1; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-transition-property: -webkit-transform; + -moz-transition-property: -moz-transform; + -o-transition-property: -o-transform; + -ms-transition-property: -ms-transform; + transition-property: transform; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +.swiper-container-android .swiper-slide, +.swiper-wrapper { + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate(0px, 0px); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); +} +.swiper-container-multirow > .swiper-wrapper { + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -ms-flex-wrap: wrap; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; +} +.swiper-container-free-mode > .swiper-wrapper { + -webkit-transition-timing-function: ease-out; + -moz-transition-timing-function: ease-out; + -ms-transition-timing-function: ease-out; + -o-transition-timing-function: ease-out; + transition-timing-function: ease-out; + margin: 0 auto; +} +.swiper-slide { + -webkit-flex-shrink: 0; + -ms-flex: 0 0 auto; + flex-shrink: 0; + width: 100%; + height: 100%; + position: relative; +} +/* Auto Height */ +.swiper-container-autoheight, +.swiper-container-autoheight .swiper-slide { + height: auto; +} +.swiper-container-autoheight .swiper-wrapper { + -webkit-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; + -webkit-transition-property: -webkit-transform, height; + -moz-transition-property: -moz-transform; + -o-transition-property: -o-transform; + -ms-transition-property: -ms-transform; + transition-property: transform, height; +} +/* a11y */ +.swiper-container .swiper-notification { + position: absolute; + left: 0; + top: 0; + pointer-events: none; + opacity: 0; + z-index: -1000; +} +/* IE10 Windows Phone 8 Fixes */ +.swiper-wp8-horizontal { + -ms-touch-action: pan-y; + touch-action: pan-y; +} +.swiper-wp8-vertical { + -ms-touch-action: pan-x; + touch-action: pan-x; +} +/* Arrows */ +.swiper-button-prev, +.swiper-button-next { + position: absolute; + top: 50%; + width: 27px; + height: 44px; + margin-top: -22px; + z-index: 10; + cursor: pointer; + -moz-background-size: 27px 44px; + -webkit-background-size: 27px 44px; + background-size: 27px 44px; + background-position: center; + background-repeat: no-repeat; +} +.swiper-button-prev.swiper-button-disabled, +.swiper-button-next.swiper-button-disabled { + opacity: 0.35; + cursor: auto; + pointer-events: none; +} +.swiper-button-prev, +.swiper-container-rtl .swiper-button-next { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E"); + left: 10px; + right: auto; +} +.swiper-button-prev.swiper-button-black, +.swiper-container-rtl .swiper-button-next.swiper-button-black { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); +} +.swiper-button-prev.swiper-button-white, +.swiper-container-rtl .swiper-button-next.swiper-button-white { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); +} +.swiper-button-next, +.swiper-container-rtl .swiper-button-prev { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E"); + right: 10px; + left: auto; +} +.swiper-button-next.swiper-button-black, +.swiper-container-rtl .swiper-button-prev.swiper-button-black { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); +} +.swiper-button-next.swiper-button-white, +.swiper-container-rtl .swiper-button-prev.swiper-button-white { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); +} +/* Pagination Styles */ +.swiper-pagination { + position: absolute; + text-align: center; + -webkit-transition: 300ms; + -moz-transition: 300ms; + -o-transition: 300ms; + transition: 300ms; + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + z-index: 10; +} +.swiper-pagination.swiper-pagination-hidden { + opacity: 0; +} +/* Common Styles */ +.swiper-pagination-fraction, +.swiper-pagination-custom, +.swiper-container-horizontal > .swiper-pagination-bullets { + bottom: 10px; + left: 0; + width: 100%; +} +/* Bullets */ +.swiper-pagination-bullet { + width: 8px; + height: 8px; + display: inline-block; + border-radius: 100%; + background: #000; + opacity: 0.2; +} +button.swiper-pagination-bullet { + border: none; + margin: 0; + padding: 0; + box-shadow: none; + -moz-appearance: none; + -ms-appearance: none; + -webkit-appearance: none; + appearance: none; +} +.swiper-pagination-clickable .swiper-pagination-bullet { + cursor: pointer; +} +.swiper-pagination-white .swiper-pagination-bullet { + background: #fff; +} +.swiper-pagination-bullet-active { + opacity: 1; + background: #007aff; +} +.swiper-pagination-white .swiper-pagination-bullet-active { + background: #fff; +} +.swiper-pagination-black .swiper-pagination-bullet-active { + background: #000; +} +.swiper-container-vertical > .swiper-pagination-bullets { + right: 10px; + top: 50%; + -webkit-transform: translate3d(0px, -50%, 0); + -moz-transform: translate3d(0px, -50%, 0); + -o-transform: translate(0px, -50%); + -ms-transform: translate3d(0px, -50%, 0); + transform: translate3d(0px, -50%, 0); +} +.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet { + margin: 5px 0; + display: block; +} +.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet { + margin: 0 5px; +} +/* Progress */ +.swiper-pagination-progress { + background: rgba(0, 0, 0, 0.25); + position: absolute; +} +.swiper-pagination-progress .swiper-pagination-progressbar { + background: #007aff; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + -webkit-transform: scale(0); + -ms-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: left top; + -moz-transform-origin: left top; + -ms-transform-origin: left top; + -o-transform-origin: left top; + transform-origin: left top; +} +.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar { + -webkit-transform-origin: right top; + -moz-transform-origin: right top; + -ms-transform-origin: right top; + -o-transform-origin: right top; + transform-origin: right top; +} +.swiper-container-horizontal > .swiper-pagination-progress { + width: 100%; + height: 4px; + left: 0; + top: 0; +} +.swiper-container-vertical > .swiper-pagination-progress { + width: 4px; + height: 100%; + left: 0; + top: 0; +} +.swiper-pagination-progress.swiper-pagination-white { + background: rgba(255, 255, 255, 0.5); +} +.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar { + background: #fff; +} +.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar { + background: #000; +} +/* 3D Container */ +.swiper-container-3d { + -webkit-perspective: 1200px; + -moz-perspective: 1200px; + -o-perspective: 1200px; + perspective: 1200px; +} +.swiper-container-3d .swiper-wrapper, +.swiper-container-3d .swiper-slide, +.swiper-container-3d .swiper-slide-shadow-left, +.swiper-container-3d .swiper-slide-shadow-right, +.swiper-container-3d .swiper-slide-shadow-top, +.swiper-container-3d .swiper-slide-shadow-bottom, +.swiper-container-3d .swiper-cube-shadow { + -webkit-transform-style: preserve-3d; + -moz-transform-style: preserve-3d; + -ms-transform-style: preserve-3d; + transform-style: preserve-3d; +} +.swiper-container-3d .swiper-slide-shadow-left, +.swiper-container-3d .swiper-slide-shadow-right, +.swiper-container-3d .swiper-slide-shadow-top, +.swiper-container-3d .swiper-slide-shadow-bottom { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 10; +} +.swiper-container-3d .swiper-slide-shadow-left { + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0))); + /* Safari 4+, Chrome */ + background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + /* Chrome 10+, Safari 5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + /* Firefox 3.6-15 */ + background-image: -o-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + /* Opera 11.10-12.00 */ + background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + /* Firefox 16+, IE10, Opera 12.50+ */ +} +.swiper-container-3d .swiper-slide-shadow-right { + background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0))); + /* Safari 4+, Chrome */ + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + /* Chrome 10+, Safari 5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + /* Firefox 3.6-15 */ + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + /* Opera 11.10-12.00 */ + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + /* Firefox 16+, IE10, Opera 12.50+ */ +} +.swiper-container-3d .swiper-slide-shadow-top { + background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0))); + /* Safari 4+, Chrome */ + background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + /* Chrome 10+, Safari 5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + /* Firefox 3.6-15 */ + background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + /* Opera 11.10-12.00 */ + background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + /* Firefox 16+, IE10, Opera 12.50+ */ +} +.swiper-container-3d .swiper-slide-shadow-bottom { + background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0))); + /* Safari 4+, Chrome */ + background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + /* Chrome 10+, Safari 5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + /* Firefox 3.6-15 */ + background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + /* Opera 11.10-12.00 */ + background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + /* Firefox 16+, IE10, Opera 12.50+ */ +} +/* Coverflow */ +.swiper-container-coverflow .swiper-wrapper, +.swiper-container-flip .swiper-wrapper { + /* Windows 8 IE 10 fix */ + -ms-perspective: 1200px; +} +/* Cube + Flip */ +.swiper-container-cube, +.swiper-container-flip { + overflow: visible; +} +.swiper-container-cube .swiper-slide, +.swiper-container-flip .swiper-slide { + pointer-events: none; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 1; +} +.swiper-container-cube .swiper-slide .swiper-slide, +.swiper-container-flip .swiper-slide .swiper-slide { + pointer-events: none; +} +.swiper-container-cube .swiper-slide-active, +.swiper-container-flip .swiper-slide-active, +.swiper-container-cube .swiper-slide-active .swiper-slide-active, +.swiper-container-flip .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} +.swiper-container-cube .swiper-slide-shadow-top, +.swiper-container-flip .swiper-slide-shadow-top, +.swiper-container-cube .swiper-slide-shadow-bottom, +.swiper-container-flip .swiper-slide-shadow-bottom, +.swiper-container-cube .swiper-slide-shadow-left, +.swiper-container-flip .swiper-slide-shadow-left, +.swiper-container-cube .swiper-slide-shadow-right, +.swiper-container-flip .swiper-slide-shadow-right { + z-index: 0; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; +} +/* Cube */ +.swiper-container-cube .swiper-slide { + visibility: hidden; + -webkit-transform-origin: 0 0; + -moz-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; + width: 100%; + height: 100%; +} +.swiper-container-cube.swiper-container-rtl .swiper-slide { + -webkit-transform-origin: 100% 0; + -moz-transform-origin: 100% 0; + -ms-transform-origin: 100% 0; + transform-origin: 100% 0; +} +.swiper-container-cube .swiper-slide-active, +.swiper-container-cube .swiper-slide-next, +.swiper-container-cube .swiper-slide-prev, +.swiper-container-cube .swiper-slide-next + .swiper-slide { + pointer-events: auto; + visibility: visible; +} +.swiper-container-cube .swiper-cube-shadow { + position: absolute; + left: 0; + bottom: 0px; + width: 100%; + height: 100%; + background: #000; + opacity: 0.6; + -webkit-filter: blur(50px); + filter: blur(50px); + z-index: 0; +} +/* Fade */ +.swiper-container-fade.swiper-container-free-mode .swiper-slide { + -webkit-transition-timing-function: ease-out; + -moz-transition-timing-function: ease-out; + -ms-transition-timing-function: ease-out; + -o-transition-timing-function: ease-out; + transition-timing-function: ease-out; +} +.swiper-container-fade .swiper-slide { + pointer-events: none; + -webkit-transition-property: opacity; + -moz-transition-property: opacity; + -o-transition-property: opacity; + transition-property: opacity; +} +.swiper-container-fade .swiper-slide .swiper-slide { + pointer-events: none; +} +.swiper-container-fade .swiper-slide-active, +.swiper-container-fade .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} +/* Scrollbar */ +.swiper-scrollbar { + border-radius: 10px; + position: relative; + -ms-touch-action: none; + background: rgba(0, 0, 0, 0.1); +} +.swiper-container-horizontal > .swiper-scrollbar { + position: absolute; + left: 1%; + bottom: 3px; + z-index: 50; + height: 5px; + width: 98%; +} +.swiper-container-vertical > .swiper-scrollbar { + position: absolute; + right: 3px; + top: 1%; + z-index: 50; + width: 5px; + height: 98%; +} +.swiper-scrollbar-drag { + height: 100%; + width: 100%; + position: relative; + background: rgba(0, 0, 0, 0.5); + border-radius: 10px; + left: 0; + top: 0; +} +.swiper-scrollbar-cursor-drag { + cursor: move; +} +/* Preloader */ +.swiper-lazy-preloader { + width: 42px; + height: 42px; + position: absolute; + left: 50%; + top: 50%; + margin-left: -21px; + margin-top: -21px; + z-index: 10; + -webkit-transform-origin: 50%; + -moz-transform-origin: 50%; + transform-origin: 50%; + -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite; + -moz-animation: swiper-preloader-spin 1s steps(12, end) infinite; + animation: swiper-preloader-spin 1s steps(12, end) infinite; +} +.swiper-lazy-preloader:after { + display: block; + content: ""; + width: 100%; + height: 100%; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); + background-position: 50%; + -webkit-background-size: 100%; + background-size: 100%; + background-repeat: no-repeat; +} +.swiper-lazy-preloader-white:after { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); +} +@-webkit-keyframes swiper-preloader-spin { + 100% { + -webkit-transform: rotate(360deg); + } +} +@keyframes swiper-preloader-spin { + 100% { + transform: rotate(360deg); + } +} diff --git a/src/libs/swiper/css/swiper.min.css b/src/libs/swiper/css/swiper.min.css new file mode 100755 index 0000000..db279f4 --- /dev/null +++ b/src/libs/swiper/css/swiper.min.css @@ -0,0 +1,15 @@ +/** + * Swiper 3.3.1 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * + * http://www.idangero.us/swiper/ + * + * Copyright 2016, Vladimir Kharlampidi + * The iDangero.us + * http://www.idangero.us/ + * + * Licensed under MIT + * + * Released on: February 7, 2016 + */ +.swiper-container{margin:0 auto;position:relative;overflow:hidden;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-moz-box-orient:vertical;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate(0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{-webkit-box-lines:multiple;-moz-box-lines:multiple;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex:0 0 auto;flex-shrink:0;width:100%;height:100%;position:relative}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start;-webkit-transition-property:-webkit-transform,height;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform,height}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;-moz-background-size:27px 44px;-webkit-background-size:27px 44px;background-size:27px 44px;background-position:center;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{opacity:1;background:#007aff}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);-moz-transform:translate3d(0,-50%,0);-o-transform:translate(0,-50%);-ms-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 5px}.swiper-pagination-progress{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progress .swiper-pagination-progressbar{background:#007aff;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar{-webkit-transform-origin:right top;-moz-transform-origin:right top;-ms-transform-origin:right top;-o-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progress{width:100%;height:4px;left:0;top:0}.swiper-container-vertical>.swiper-pagination-progress{width:4px;height:100%;left:0;top:0}.swiper-pagination-progress.swiper-pagination-white{background:rgba(255,255,255,.5)}.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar{background:#fff}.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar{background:#000}.swiper-container-3d{-webkit-perspective:1200px;-moz-perspective:1200px;-o-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-coverflow .swiper-wrapper,.swiper-container-flip .swiper-wrapper{-ms-perspective:1200px}.swiper-container-cube,.swiper-container-flip{overflow:visible}.swiper-container-cube .swiper-slide,.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-cube .swiper-slide .swiper-slide,.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active,.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top,.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-slide{visibility:hidden;-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-moz-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-moz-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12,end) infinite;-moz-animation:swiper-preloader-spin 1s steps(12,end) infinite;animation:swiper-preloader-spin 1s steps(12,end) infinite}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");background-position:50%;-webkit-background-size:100%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}@-webkit-keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg)}}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}} \ No newline at end of file diff --git a/src/libs/swiper/js/maps/swiper.jquery.min.js.map b/src/libs/swiper/js/maps/swiper.jquery.min.js.map new file mode 100755 index 0000000..5ef3904 --- /dev/null +++ b/src/libs/swiper/js/maps/swiper.jquery.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["swiper.jquery.js"],"names":["addLibraryPlugin","lib","fn","swiper","params","firstInstance","this","each","s","Swiper","$","container","round","a","Math","floor","autoplay","autoplayTimeoutId","setTimeout","loop","fixLoop","_slideNext","emit","isEnd","autoplayStopOnLast","stopAutoplay","_slideTo","findElementInEvent","e","selector","el","target","is","parents","nodeType","found","index","_el","length","initObserver","options","ObserverFunc","window","MutationObserver","WebkitMutationObserver","observer","mutations","forEach","mutation","onResize","observe","attributes","childList","characterData","observers","push","handleKeyboard","originalEvent","kc","keyCode","charCode","allowSwipeToNext","isHorizontal","allowSwipeToPrev","shiftKey","altKey","ctrlKey","metaKey","document","activeElement","nodeName","toLowerCase","inView","windowScroll","left","pageXOffset","top","pageYOffset","windowWidth","innerWidth","windowHeight","innerHeight","swiperOffset","offset","rtl","scrollLeft","swiperCoord","width","height","i","point","preventDefault","returnValue","slideNext","slidePrev","handleMousewheel","we","mousewheel","event","delta","rtlFactor","mousewheelForceToAxis","abs","wheelDeltaX","wheelDeltaY","detail","deltaX","deltaY","mousewheelInvert","freeMode","position","getWrapperTranslate","mousewheelSensitivity","wasBeginning","isBeginning","wasEnd","minTranslate","maxTranslate","setWrapperTransition","setWrapperTranslate","updateProgress","updateActiveIndex","updateClasses","freeModeSticky","clearTimeout","timeout","slideReset","lazyLoading","lazy","load","Date","getTime","lastScrollTime","animating","mousewheelReleaseOnEdges","setParallaxTransform","progress","p","pX","pY","attr","indexOf","parseInt","transform","normalizeEventName","eventName","toUpperCase","substring","defaults","direction","touchEventsTarget","initialSlide","speed","autoplayDisableOnInteraction","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","freeModeMomentum","freeModeMomentumRatio","freeModeMomentumBounce","freeModeMomentumBounceRatio","freeModeMinimumVelocity","autoHeight","setWrapperSize","virtualTranslate","effect","coverflow","rotate","stretch","depth","modifier","slideShadows","flip","limitRotation","cube","shadow","shadowOffset","shadowScale","fade","crossFade","parallax","scrollbar","scrollbarHide","scrollbarDraggable","scrollbarSnapOnRelease","keyboardControl","mousewheelControl","hashnav","breakpoints","undefined","spaceBetween","slidesPerView","slidesPerColumn","slidesPerColumnFill","slidesPerGroup","centeredSlides","slidesOffsetBefore","slidesOffsetAfter","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","onlyExternal","threshold","touchMoveStopPropagation","uniqueNavElements","pagination","paginationElement","paginationClickable","paginationHide","paginationBulletRender","paginationProgressRender","paginationFractionRender","paginationCustomRender","paginationType","resistance","resistanceRatio","nextButton","prevButton","watchSlidesProgress","watchSlidesVisibility","grabCursor","preventClicks","preventClicksPropagation","slideToClickedSlide","lazyLoadingInPrevNext","lazyLoadingInPrevNextAmount","lazyLoadingOnTransitionStart","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","control","controlInverse","controlBy","swipeHandler","noSwiping","noSwipingClass","slideClass","slideActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slidePrevClass","wrapperClass","bulletClass","bulletActiveClass","buttonDisabledClass","paginationCurrentClass","paginationTotalClass","paginationHiddenClass","paginationProgressbarClass","observeParents","a11y","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","runCallbacksOnInit","initialVirtualTranslate","originalParams","param","Dom7","jQuery","deepParam","def","deepDef","classNames","Zepto","currentBreakpoint","getActiveBreakpoint","breakpoint","points","hasOwnProperty","sort","b","setBreakpoint","breakPointsParams","needsReLoop","destroyLoop","reLoop","swipers","data","support","flexbox","transforms3d","touch","wrapper","children","paginationContainer","find","addClass","dir","css","wrongRTL","device","android","join","translate","velocity","lockSwipeToNext","lockSwipeToPrev","lockSwipes","unlockSwipeToNext","unlockSwipeToPrev","unlockSwipes","style","cursor","imagesToLoad","imagesLoaded","loadImage","imgElement","src","srcset","checkForComplete","callback","onReady","image","complete","Image","onload","onerror","_onReady","update","currentSrc","getAttribute","autoplaying","autoplayPaused","startAutoplay","internal","pauseAutoplay","transitionEnd","snapGrid","updateAutoHeight","slide","slides","eq","activeIndex","newHeight","offsetHeight","updateContainerSize","clientWidth","clientHeight","size","updateSlidesSize","slidesGrid","slidesSizesGrid","slidePosition","prevSlideSize","parseFloat","replace","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesNumberEvenToRows","ceil","max","slideSize","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","order","margin-top","outerWidth","outerHeight","swiperSlideSize","newSlidesGrid","updateSlidesOffset","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","removeClass","slideProgress","slideBefore","slideAfter","isVisible","translatesDiff","newActiveIndex","snapIndex","previousIndex","activeSlide","nextSlide","next","prevSlide","prev","current","total","bullets","text","scale","scaleX","scaleY","transition","html","disable","enable","updatePagination","paginationHTML","numberOfBullets","initPagination","updateTranslate","forceSetTranslate","newTranslate","min","set","translated","controller","spline","slideTo","forceUpdatePagination","slideChangedBySlideTo","desktopEvents","navigator","pointerEnabled","msPointerEnabled","touchEvents","start","move","end","initEvents","detach","actionDom","action","moveCapture","nested","browser","ie","onTouchStart","onTouchMove","onTouchEnd","ios","onClickNext","onEnterKey","onClickPrev","onClickIndex","attachEvents","detachEvents","allowClick","stopPropagation","stopImmediatePropagation","updateClickedSlide","slideFound","clickedSlide","clickedIndex","realIndex","slideToIndex","isTouched","isMoved","allowTouchCallbacks","touchStartTime","isScrolling","currentTranslate","startTranslate","allowThresholdMove","clickTimeout","allowMomentumBounce","formElements","lastClickTime","now","velocities","touches","startX","startY","currentX","currentY","diff","isTouchEvent","startMoving","type","which","targetTouches","pageX","pageY","swipeDirection","blur","preventedByNestedSwiper","atan2","PI","ieTouch","trigger","disableParentSwiper","pow","time","touchEndTime","timeDiff","hasClass","toggleClass","currentPos","lastMoveEvent","pop","velocityEvent","distance","momentumDuration","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","j","onTransitionStart","onTransitionEnd","stopIndex","groupSize","ratio","slideIndex","runCallbacks","setHash","clientLeft","_slidePrev","duration","byController","effects","setTransition","x","y","z","setTranslate","getTranslate","axis","matrix","curTransform","curStyle","transformMatrix","getComputedStyle","WebKitCSSMatrix","webkitTransform","split","map","MozTransform","OTransform","MsTransform","msTransform","getPropertyValue","toString","m41","m42","initObservers","containerParents","disconnectObservers","disconnect","createLoop","remove","prependSlides","appendSlides","append","cloneNode","prepend","removeAttr","updatePosition","oldIndex","newIndex","appendSlide","prependSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","tx","ty","slideOpacity","opacity","eventTriggered","triggerEvents","rotateY","rotateX","zIndex","shadowBefore","shadowAfter","cubeShadow","wrapperRotate","slideAngle","tz","-webkit-transform-origin","-moz-transform-origin","-ms-transform-origin","transform-origin","shadowAngle","multiplier","sin","cos","scale1","scale2","zFactor","isSafari","isUiWebView","center","slideOffset","offsetMultiplier","translateZ","translateY","translateX","slideTransform","ws","perspectiveOrigin","initialImageLoaded","loadImageInSlide","loadInDuplicate","img","add","_img","background","slideOriginalIndex","originalSlide","duplicatedSlide","amount","spv","maxIndex","minIndex","setDragPosition","sb","pointerPosition","clientX","clientY","track","dragSize","positionMin","moveDivider","positionMax","dragStart","dragTimeout","drag","dragMove","dragEnd","enableDraggable","on","disableDraggable","off","trackSize","offsetWidth","divider","display","newPos","newSize","LinearSpline","lastIndex","i1","i3","interpolate","x2","binarySearch","guess","array","val","getInterpolateFunction","c","setControlledTranslate","controlledTranslate","controlled","isArray","setControlledTransition","init","initialized","hash","location","slideHash","disableKeyboardControl","enableKeyboardControl","WheelEvent","onmousewheel","disableMousewheelControl","enableMousewheelControl","parallaxDuration","_plugins","plugin","plugins","callPlugins","arguments","emitterEventListeners","handler","splice","once","_handler","makeFocusable","$el","addRole","role","addLabel","label","notify","click","liveRegion","message","notification","bullet","destroy","cleanupStyles","deleteInstance","prototype","ua","userAgent","test","arr","Object","apply","msMaxTouchPoints","maxTouchPoints","match","ipad","ipod","iphone","Modernizr","DocumentTouch","csstransforms3d","div","createElement","styles","swiperDomPlugins","domLib","fireCallBack","call","events","dom","elStyle","webkitTransitionDuration","MsTransitionDuration","msTransitionDuration","MozTransitionDuration","OTransitionDuration","transitionDuration","module","exports","define","amd"],"mappings":"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","file":"swiper.jquery.min.js","sourcesContent":["/**\n * Swiper 3.3.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * \n * http://www.idangero.us/swiper/\n * \n * Copyright 2016, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n * \n * Licensed under MIT\n * \n * Released on: February 7, 2016\n */\n(function () {\n 'use strict';\n var $;\n /*===========================\n Swiper\n ===========================*/\n var Swiper = function (container, params) {\n if (!(this instanceof Swiper)) return new Swiper(container, params);\n\n var defaults = {\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n // autoplay\n autoplay: false,\n autoplayDisableOnInteraction: true,\n autoplayStopOnLast: false,\n // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n iOSEdgeSwipeDetection: false,\n iOSEdgeSwipeThreshold: 20,\n // Free mode\n freeMode: false,\n freeModeMomentum: true,\n freeModeMomentumRatio: 1,\n freeModeMomentumBounce: true,\n freeModeMomentumBounceRatio: 1,\n freeModeSticky: false,\n freeModeMinimumVelocity: 0.02,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n coverflow: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows : true\n },\n flip: {\n slideShadows : true,\n limitRotation: true\n },\n cube: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n },\n fade: {\n crossFade: false\n },\n // Parallax\n parallax: false,\n // Scrollbar\n scrollbar: null,\n scrollbarHide: true,\n scrollbarDraggable: false,\n scrollbarSnapOnRelease: false,\n // Keyboard Mousewheel\n keyboardControl: false,\n mousewheelControl: false,\n mousewheelReleaseOnEdges: false,\n mousewheelInvert: false,\n mousewheelForceToAxis: false,\n mousewheelSensitivity: 1,\n // Hash Navigation\n hashnav: false,\n // Breakpoints\n breakpoints: undefined,\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n onlyExternal: false,\n threshold: 0,\n touchMoveStopPropagation: true,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Pagination\n pagination: null,\n paginationElement: 'span',\n paginationClickable: false,\n paginationHide: false,\n paginationBulletRender: null,\n paginationProgressRender: null,\n paginationFractionRender: null,\n paginationCustomRender: null,\n paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom'\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Next/prev buttons\n nextButton: null,\n prevButton: null,\n // Progress\n watchSlidesProgress: false,\n watchSlidesVisibility: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Lazy Loading\n lazyLoading: false,\n lazyLoadingInPrevNext: false,\n lazyLoadingInPrevNextAmount: 1,\n lazyLoadingOnTransitionStart: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n // Control\n control: undefined,\n controlInverse: false,\n controlBy: 'slide', //or 'container'\n // Swiping/no swiping\n allowSwipeToPrev: true,\n allowSwipeToNext: true,\n swipeHandler: null, //'.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n // NS\n slideClass: 'swiper-slide',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n buttonDisabledClass: 'swiper-button-disabled',\n paginationCurrentClass: 'swiper-pagination-current',\n paginationTotalClass: 'swiper-pagination-total',\n paginationHiddenClass: 'swiper-pagination-hidden',\n paginationProgressbarClass: 'swiper-pagination-progressbar',\n // Observer\n observer: false,\n observeParents: false,\n // Accessibility\n a11y: false,\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n // Callbacks\n runCallbacksOnInit: true\n /*\n Callbacks:\n onInit: function (swiper)\n onDestroy: function (swiper)\n onClick: function (swiper, e)\n onTap: function (swiper, e)\n onDoubleTap: function (swiper, e)\n onSliderMove: function (swiper, e)\n onSlideChangeStart: function (swiper)\n onSlideChangeEnd: function (swiper)\n onTransitionStart: function (swiper)\n onTransitionEnd: function (swiper)\n onImagesReady: function (swiper)\n onProgress: function (swiper, progress)\n onTouchStart: function (swiper, e)\n onTouchMove: function (swiper, e)\n onTouchMoveOpposite: function (swiper, e)\n onTouchEnd: function (swiper, e)\n onReachBeginning: function (swiper)\n onReachEnd: function (swiper)\n onSetTransition: function (swiper, duration)\n onSetTranslate: function (swiper, translate)\n onAutoplayStart: function (swiper)\n onAutoplayStop: function (swiper),\n onLazyImageLoad: function (swiper, slide, image)\n onLazyImageReady: function (swiper, slide, image)\n */\n \n };\n var initialVirtualTranslate = params && params.virtualTranslate;\n \n params = params || {};\n var originalParams = {};\n for (var param in params) {\n if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) {\n originalParams[param] = {};\n for (var deepParam in params[param]) {\n originalParams[param][deepParam] = params[param][deepParam];\n }\n }\n else {\n originalParams[param] = params[param];\n }\n }\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n else if (typeof params[def] === 'object') {\n for (var deepDef in defaults[def]) {\n if (typeof params[def][deepDef] === 'undefined') {\n params[def][deepDef] = defaults[def][deepDef];\n }\n }\n }\n }\n \n // Swiper\n var s = this;\n \n // Params\n s.params = params;\n s.originalParams = originalParams;\n \n // Classname\n s.classNames = [];\n /*=========================\n Dom Library and plugins\n ===========================*/\n if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){\n $ = Dom7;\n }\n if (typeof $ === 'undefined') {\n if (typeof Dom7 === 'undefined') {\n $ = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n $ = Dom7;\n }\n if (!$) return;\n }\n // Export it to Swiper instance\n s.$ = $;\n \n /*=========================\n Breakpoints\n ===========================*/\n s.currentBreakpoint = undefined;\n s.getActiveBreakpoint = function () {\n //Get breakpoint for window width\n if (!s.params.breakpoints) return false;\n var breakpoint = false;\n var points = [], point;\n for ( point in s.params.breakpoints ) {\n if (s.params.breakpoints.hasOwnProperty(point)) {\n points.push(point);\n }\n }\n points.sort(function (a, b) {\n return parseInt(a, 10) > parseInt(b, 10);\n });\n for (var i = 0; i < points.length; i++) {\n point = points[i];\n if (point >= window.innerWidth && !breakpoint) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n };\n s.setBreakpoint = function () {\n //Set breakpoint for window width and update parameters\n var breakpoint = s.getActiveBreakpoint();\n if (breakpoint && s.currentBreakpoint !== breakpoint) {\n var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;\n var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);\n for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\n if(needsReLoop && s.destroyLoop) {\n s.reLoop(true);\n }\n }\n };\n // Set breakpoint on load\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n /*=========================\n Preparation - Define Container, Wrapper and Pagination\n ===========================*/\n s.container = $(container);\n if (s.container.length === 0) return;\n if (s.container.length > 1) {\n var swipers = [];\n s.container.each(function () {\n var container = this;\n swipers.push(new Swiper(this, params));\n });\n return swipers;\n }\n \n // Save instance in container HTML Element and in data\n s.container[0].swiper = s;\n s.container.data('swiper', s);\n \n s.classNames.push('swiper-container-' + s.params.direction);\n \n if (s.params.freeMode) {\n s.classNames.push('swiper-container-free-mode');\n }\n if (!s.support.flexbox) {\n s.classNames.push('swiper-container-no-flexbox');\n s.params.slidesPerColumn = 1;\n }\n if (s.params.autoHeight) {\n s.classNames.push('swiper-container-autoheight');\n }\n // Enable slides progress when required\n if (s.params.parallax || s.params.watchSlidesVisibility) {\n s.params.watchSlidesProgress = true;\n }\n // Coverflow / 3D\n if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {\n if (s.support.transforms3d) {\n s.params.watchSlidesProgress = true;\n s.classNames.push('swiper-container-3d');\n }\n else {\n s.params.effect = 'slide';\n }\n }\n if (s.params.effect !== 'slide') {\n s.classNames.push('swiper-container-' + s.params.effect);\n }\n if (s.params.effect === 'cube') {\n s.params.resistanceRatio = 0;\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.centeredSlides = false;\n s.params.spaceBetween = 0;\n s.params.virtualTranslate = true;\n s.params.setWrapperSize = false;\n }\n if (s.params.effect === 'fade' || s.params.effect === 'flip') {\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.watchSlidesProgress = true;\n s.params.spaceBetween = 0;\n s.params.setWrapperSize = false;\n if (typeof initialVirtualTranslate === 'undefined') {\n s.params.virtualTranslate = true;\n }\n }\n \n // Grab Cursor\n if (s.params.grabCursor && s.support.touch) {\n s.params.grabCursor = false;\n }\n \n // Wrapper\n s.wrapper = s.container.children('.' + s.params.wrapperClass);\n \n // Pagination\n if (s.params.pagination) {\n s.paginationContainer = $(s.params.pagination);\n if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {\n s.paginationContainer = s.container.find(s.params.pagination);\n }\n \n if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {\n s.paginationContainer.addClass('swiper-pagination-clickable');\n }\n else {\n s.params.paginationClickable = false;\n }\n s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType);\n }\n // Next/Prev Buttons\n if (s.params.nextButton || s.params.prevButton) {\n if (s.params.nextButton) {\n s.nextButton = $(s.params.nextButton);\n if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {\n s.nextButton = s.container.find(s.params.nextButton);\n }\n }\n if (s.params.prevButton) {\n s.prevButton = $(s.params.prevButton);\n if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {\n s.prevButton = s.container.find(s.params.prevButton);\n }\n }\n }\n \n // Is Horizontal\n s.isHorizontal = function () {\n return s.params.direction === 'horizontal';\n };\n // s.isH = isH;\n \n // RTL\n s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');\n if (s.rtl) {\n s.classNames.push('swiper-container-rtl');\n }\n \n // Wrong RTL support\n if (s.rtl) {\n s.wrongRTL = s.wrapper.css('display') === '-webkit-box';\n }\n \n // Columns\n if (s.params.slidesPerColumn > 1) {\n s.classNames.push('swiper-container-multirow');\n }\n \n // Check for Android\n if (s.device.android) {\n s.classNames.push('swiper-container-android');\n }\n \n // Add classes\n s.container.addClass(s.classNames.join(' '));\n \n // Translate\n s.translate = 0;\n \n // Progress\n s.progress = 0;\n \n // Velocity\n s.velocity = 0;\n \n /*=========================\n Locks, unlocks\n ===========================*/\n s.lockSwipeToNext = function () {\n s.params.allowSwipeToNext = false;\n };\n s.lockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = false;\n };\n s.lockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;\n };\n s.unlockSwipeToNext = function () {\n s.params.allowSwipeToNext = true;\n };\n s.unlockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = true;\n };\n s.unlockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;\n };\n \n /*=========================\n Round helper\n ===========================*/\n function round(a) {\n return Math.floor(a);\n }\n /*=========================\n Set grab cursor\n ===========================*/\n if (s.params.grabCursor) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grab';\n s.container[0].style.cursor = '-moz-grab';\n s.container[0].style.cursor = 'grab';\n }\n /*=========================\n Update on Images Ready\n ===========================*/\n s.imagesToLoad = [];\n s.imagesLoaded = 0;\n \n s.loadImage = function (imgElement, src, srcset, checkForComplete, callback) {\n var image;\n function onReady () {\n if (callback) callback();\n }\n if (!imgElement.complete || !checkForComplete) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n \n } else {//image already loaded...\n onReady();\n }\n };\n s.preloadImages = function () {\n s.imagesToLoad = s.container.find('img');\n function _onReady() {\n if (typeof s === 'undefined' || s === null) return;\n if (s.imagesLoaded !== undefined) s.imagesLoaded++;\n if (s.imagesLoaded === s.imagesToLoad.length) {\n if (s.params.updateOnImagesReady) s.update();\n s.emit('onImagesReady', s);\n }\n }\n for (var i = 0; i < s.imagesToLoad.length; i++) {\n s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), true, _onReady);\n }\n };\n \n /*=========================\n Autoplay\n ===========================*/\n s.autoplayTimeoutId = undefined;\n s.autoplaying = false;\n s.autoplayPaused = false;\n function autoplay() {\n s.autoplayTimeoutId = setTimeout(function () {\n if (s.params.loop) {\n s.fixLoop();\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!s.isEnd) {\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!params.autoplayStopOnLast) {\n s._slideTo(0);\n s.emit('onAutoplay', s);\n }\n else {\n s.stopAutoplay();\n }\n }\n }\n }, s.params.autoplay);\n }\n s.startAutoplay = function () {\n if (typeof s.autoplayTimeoutId !== 'undefined') return false;\n if (!s.params.autoplay) return false;\n if (s.autoplaying) return false;\n s.autoplaying = true;\n s.emit('onAutoplayStart', s);\n autoplay();\n };\n s.stopAutoplay = function (internal) {\n if (!s.autoplayTimeoutId) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplaying = false;\n s.autoplayTimeoutId = undefined;\n s.emit('onAutoplayStop', s);\n };\n s.pauseAutoplay = function (speed) {\n if (s.autoplayPaused) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplayPaused = true;\n if (speed === 0) {\n s.autoplayPaused = false;\n autoplay();\n }\n else {\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.autoplayPaused = false;\n if (!s.autoplaying) {\n s.stopAutoplay();\n }\n else {\n autoplay();\n }\n });\n }\n };\n /*=========================\n Min/Max Translate\n ===========================*/\n s.minTranslate = function () {\n return (-s.snapGrid[0]);\n };\n s.maxTranslate = function () {\n return (-s.snapGrid[s.snapGrid.length - 1]);\n };\n /*=========================\n Slider/slides sizes\n ===========================*/\n s.updateAutoHeight = function () {\n // Update Height\n var slide = s.slides.eq(s.activeIndex)[0];\n if (typeof slide !== 'undefined') {\n var newHeight = slide.offsetHeight;\n if (newHeight) s.wrapper.css('height', newHeight + 'px');\n }\n };\n s.updateContainerSize = function () {\n var width, height;\n if (typeof s.params.width !== 'undefined') {\n width = s.params.width;\n }\n else {\n width = s.container[0].clientWidth;\n }\n if (typeof s.params.height !== 'undefined') {\n height = s.params.height;\n }\n else {\n height = s.container[0].clientHeight;\n }\n if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) {\n return;\n }\n \n //Subtract paddings\n width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10);\n height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10);\n \n // Store values\n s.width = width;\n s.height = height;\n s.size = s.isHorizontal() ? s.width : s.height;\n };\n \n s.updateSlidesSize = function () {\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n s.snapGrid = [];\n s.slidesGrid = [];\n s.slidesSizesGrid = [];\n \n var spaceBetween = s.params.spaceBetween,\n slidePosition = -s.params.slidesOffsetBefore,\n i,\n prevSlideSize = 0,\n index = 0;\n if (typeof s.size === 'undefined') return;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size;\n }\n \n s.virtualSize = -spaceBetween;\n // reset margins\n if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''});\n else s.slides.css({marginRight: '', marginBottom: ''});\n \n var slidesNumberEvenToRows;\n if (s.params.slidesPerColumn > 1) {\n if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) {\n slidesNumberEvenToRows = s.slides.length;\n }\n else {\n slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn;\n }\n if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn);\n }\n }\n \n // Calc slides\n var slideSize;\n var slidesPerColumn = s.params.slidesPerColumn;\n var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length);\n for (i = 0; i < s.slides.length; i++) {\n slideSize = 0;\n var slide = s.slides.eq(i);\n if (s.params.slidesPerColumn > 1) {\n // Set slides order\n var newSlideOrderIndex;\n var column, row;\n if (s.params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - column * slidesPerColumn;\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) {\n if (++row >= slidesPerColumn) {\n row = 0;\n column++;\n }\n }\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;\n slide\n .css({\n '-webkit-box-ordinal-group': newSlideOrderIndex,\n '-moz-box-ordinal-group': newSlideOrderIndex,\n '-ms-flex-order': newSlideOrderIndex,\n '-webkit-order': newSlideOrderIndex,\n 'order': newSlideOrderIndex\n });\n }\n else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide\n .css({\n 'margin-top': (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px')\n })\n .attr('data-swiper-column', column)\n .attr('data-swiper-row', row);\n \n }\n if (slide.css('display') === 'none') continue;\n if (s.params.slidesPerView === 'auto') {\n slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n if (s.params.roundLengths) slideSize = round(slideSize);\n }\n else {\n slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView;\n if (s.params.roundLengths) slideSize = round(slideSize);\n \n if (s.isHorizontal()) {\n s.slides[i].style.width = slideSize + 'px';\n }\n else {\n s.slides[i].style.height = slideSize + 'px';\n }\n }\n s.slides[i].swiperSlideSize = slideSize;\n s.slidesSizesGrid.push(slideSize);\n \n \n if (s.params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n }\n else {\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n \n s.virtualSize += slideSize + spaceBetween;\n \n prevSlideSize = slideSize;\n \n index ++;\n }\n s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter;\n var newSlidesGrid;\n \n if (\n s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) {\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n if (!s.support.flexbox || s.params.setWrapperSize) {\n if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n \n if (s.params.slidesPerColumn > 1) {\n s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows;\n s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween;\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n if (s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]);\n }\n s.snapGrid = newSlidesGrid;\n }\n }\n \n // Remove last grid elements depending on width\n if (!s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] <= s.virtualSize - s.size) {\n newSlidesGrid.push(s.snapGrid[i]);\n }\n }\n s.snapGrid = newSlidesGrid;\n if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) {\n s.snapGrid.push(s.virtualSize - s.size);\n }\n }\n if (s.snapGrid.length === 0) s.snapGrid = [0];\n \n if (s.params.spaceBetween !== 0) {\n if (s.isHorizontal()) {\n if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'});\n else s.slides.css({marginRight: spaceBetween + 'px'});\n }\n else s.slides.css({marginBottom: spaceBetween + 'px'});\n }\n if (s.params.watchSlidesProgress) {\n s.updateSlidesOffset();\n }\n };\n s.updateSlidesOffset = function () {\n for (var i = 0; i < s.slides.length; i++) {\n s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop;\n }\n };\n \n /*=========================\n Slider/slides progress\n ===========================*/\n s.updateSlidesProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n if (s.slides.length === 0) return;\n if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset();\n \n var offsetCenter = -translate;\n if (s.rtl) offsetCenter = translate;\n \n // Visible Slides\n s.slides.removeClass(s.params.slideVisibleClass);\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides[i];\n var slideProgress = (offsetCenter - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween);\n if (s.params.watchSlidesVisibility) {\n var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n var slideAfter = slideBefore + s.slidesSizesGrid[i];\n var isVisible =\n (slideBefore >= 0 && slideBefore < s.size) ||\n (slideAfter > 0 && slideAfter <= s.size) ||\n (slideBefore <= 0 && slideAfter >= s.size);\n if (isVisible) {\n s.slides.eq(i).addClass(s.params.slideVisibleClass);\n }\n }\n slide.progress = s.rtl ? -slideProgress : slideProgress;\n }\n };\n s.updateProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n var wasBeginning = s.isBeginning;\n var wasEnd = s.isEnd;\n if (translatesDiff === 0) {\n s.progress = 0;\n s.isBeginning = s.isEnd = true;\n }\n else {\n s.progress = (translate - s.minTranslate()) / (translatesDiff);\n s.isBeginning = s.progress <= 0;\n s.isEnd = s.progress >= 1;\n }\n if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s);\n if (s.isEnd && !wasEnd) s.emit('onReachEnd', s);\n \n if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate);\n s.emit('onProgress', s, s.progress);\n };\n s.updateActiveIndex = function () {\n var translate = s.rtl ? s.translate : -s.translate;\n var newActiveIndex, i, snapIndex;\n for (i = 0; i < s.slidesGrid.length; i ++) {\n if (typeof s.slidesGrid[i + 1] !== 'undefined') {\n if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) {\n newActiveIndex = i;\n }\n else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) {\n newActiveIndex = i + 1;\n }\n }\n else {\n if (translate >= s.slidesGrid[i]) {\n newActiveIndex = i;\n }\n }\n }\n // Normalize slideIndex\n if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0;\n // for (i = 0; i < s.slidesGrid.length; i++) {\n // if (- translate >= s.slidesGrid[i]) {\n // newActiveIndex = i;\n // }\n // }\n snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup);\n if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1;\n \n if (newActiveIndex === s.activeIndex) {\n return;\n }\n s.snapIndex = snapIndex;\n s.previousIndex = s.activeIndex;\n s.activeIndex = newActiveIndex;\n s.updateClasses();\n };\n \n /*=========================\n Classes\n ===========================*/\n s.updateClasses = function () {\n s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass);\n var activeSlide = s.slides.eq(s.activeIndex);\n // Active classes\n activeSlide.addClass(s.params.slideActiveClass);\n // Next Slide\n var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n if (s.params.loop && nextSlide.length === 0) {\n s.slides.eq(0).addClass(s.params.slideNextClass);\n }\n // Prev Slide\n var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\n if (s.params.loop && prevSlide.length === 0) {\n s.slides.eq(-1).addClass(s.params.slidePrevClass);\n }\n \n // Pagination\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n // Current/Total\n var current,\n total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n if (s.params.loop) {\n current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup);\n if (current > s.slides.length - 1 - s.loopedSlides * 2) {\n current = current - (s.slides.length - s.loopedSlides * 2);\n }\n if (current > total - 1) current = current - total;\n if (current < 0 && s.params.paginationType !== 'bullets') current = total + current;\n }\n else {\n if (typeof s.snapIndex !== 'undefined') {\n current = s.snapIndex;\n }\n else {\n current = s.activeIndex || 0;\n }\n }\n // Types\n if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n if (s.paginationContainer.length > 1) {\n s.bullets.each(function () {\n if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass);\n });\n }\n else {\n s.bullets.eq(current).addClass(s.params.bulletActiveClass);\n }\n }\n if (s.params.paginationType === 'fraction') {\n s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1);\n s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total);\n }\n if (s.params.paginationType === 'progress') {\n var scale = (current + 1) / total,\n scaleX = scale,\n scaleY = 1;\n if (!s.isHorizontal()) {\n scaleY = scale;\n scaleX = 1;\n }\n s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed);\n }\n if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) {\n s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total));\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n \n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n if (s.isBeginning) {\n s.prevButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton);\n }\n else {\n s.prevButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton);\n }\n }\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n if (s.isEnd) {\n s.nextButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton);\n }\n else {\n s.nextButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton);\n }\n }\n }\n };\n \n /*=========================\n Pagination\n ===========================*/\n s.updatePagination = function () {\n if (!s.params.pagination) return;\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n var paginationHTML = '';\n if (s.params.paginationType === 'bullets') {\n var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n for (var i = 0; i < numberOfBullets; i++) {\n if (s.params.paginationBulletRender) {\n paginationHTML += s.params.paginationBulletRender(i, s.params.bulletClass);\n }\n else {\n paginationHTML += '<' + s.params.paginationElement+' class=\"' + s.params.bulletClass + '\">';\n }\n }\n s.paginationContainer.html(paginationHTML);\n s.bullets = s.paginationContainer.find('.' + s.params.bulletClass);\n if (s.params.paginationClickable && s.params.a11y && s.a11y) {\n s.a11y.initPagination();\n }\n }\n if (s.params.paginationType === 'fraction') {\n if (s.params.paginationFractionRender) {\n paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass);\n }\n else {\n paginationHTML =\n '' +\n ' / ' +\n '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType === 'progress') {\n if (s.params.paginationProgressRender) {\n paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass);\n }\n else {\n paginationHTML = '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType !== 'custom') {\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n };\n /*=========================\n Common update method\n ===========================*/\n s.update = function (updateTranslate) {\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updateProgress();\n s.updatePagination();\n s.updateClasses();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n function forceSetTranslate() {\n newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n }\n if (updateTranslate) {\n var translated, newTranslate;\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n if (s.params.freeMode) {\n forceSetTranslate();\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n translated = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n translated = s.slideTo(s.activeIndex, 0, false, true);\n }\n if (!translated) {\n forceSetTranslate();\n }\n }\n }\n else if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n };\n \n /*=========================\n Resize Handler\n ===========================*/\n s.onResize = function (forceUpdatePagination) {\n //Breakpoints\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n // Disable locks on resize\n var allowSwipeToPrev = s.params.allowSwipeToPrev;\n var allowSwipeToNext = s.params.allowSwipeToNext;\n s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true;\n \n s.updateContainerSize();\n s.updateSlidesSize();\n if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n var slideChangedBySlideTo = false;\n if (s.params.freeMode) {\n var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n \n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n s.updateClasses();\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true);\n }\n }\n if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) {\n s.lazy.load();\n }\n // Return locks after resize\n s.params.allowSwipeToPrev = allowSwipeToPrev;\n s.params.allowSwipeToNext = allowSwipeToNext;\n };\n \n /*=========================\n Events\n ===========================*/\n \n //Define Touch Events\n var desktopEvents = ['mousedown', 'mousemove', 'mouseup'];\n if (window.navigator.pointerEnabled) desktopEvents = ['pointerdown', 'pointermove', 'pointerup'];\n else if (window.navigator.msPointerEnabled) desktopEvents = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];\n s.touchEvents = {\n start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : desktopEvents[0],\n move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : desktopEvents[1],\n end : s.support.touch || !s.params.simulateTouch ? 'touchend' : desktopEvents[2]\n };\n \n \n // WP8 Touch Events Fix\n if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) {\n (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction);\n }\n \n // Attach/detach events\n s.initEvents = function (detach) {\n var actionDom = detach ? 'off' : 'on';\n var action = detach ? 'removeEventListener' : 'addEventListener';\n var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0];\n var target = s.support.touch ? touchEventsTarget : document;\n \n var moveCapture = s.params.nested ? true : false;\n \n //Touch Events\n if (s.browser.ie) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n target[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n target[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n else {\n if (s.support.touch) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n if (params.simulateTouch && !s.device.ios && !s.device.android) {\n touchEventsTarget[action]('mousedown', s.onTouchStart, false);\n document[action]('mousemove', s.onTouchMove, moveCapture);\n document[action]('mouseup', s.onTouchEnd, false);\n }\n }\n window[action]('resize', s.onResize);\n \n // Next, Prev, Index\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.nextButton[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.prevButton[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.pagination && s.params.paginationClickable) {\n s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);\n if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);\n }\n \n // Prevent Links Clicks\n if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);\n };\n s.attachEvents = function () {\n s.initEvents();\n };\n s.detachEvents = function () {\n s.initEvents(true);\n };\n \n /*=========================\n Handle Clicks\n ===========================*/\n // Prevent Clicks\n s.allowClick = true;\n s.preventClicks = function (e) {\n if (!s.allowClick) {\n if (s.params.preventClicks) e.preventDefault();\n if (s.params.preventClicksPropagation && s.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n };\n // Clicks\n s.onClickNext = function (e) {\n e.preventDefault();\n if (s.isEnd && !s.params.loop) return;\n s.slideNext();\n };\n s.onClickPrev = function (e) {\n e.preventDefault();\n if (s.isBeginning && !s.params.loop) return;\n s.slidePrev();\n };\n s.onClickIndex = function (e) {\n e.preventDefault();\n var index = $(this).index() * s.params.slidesPerGroup;\n if (s.params.loop) index = index + s.loopedSlides;\n s.slideTo(index);\n };\n \n /*=========================\n Handle Touches\n ===========================*/\n function findElementInEvent(e, selector) {\n var el = $(e.target);\n if (!el.is(selector)) {\n if (typeof selector === 'string') {\n el = el.parents(selector);\n }\n else if (selector.nodeType) {\n var found;\n el.parents().each(function (index, _el) {\n if (_el === selector) found = selector;\n });\n if (!found) return undefined;\n else return selector;\n }\n }\n if (el.length === 0) {\n return undefined;\n }\n return el[0];\n }\n s.updateClickedSlide = function (e) {\n var slide = findElementInEvent(e, '.' + s.params.slideClass);\n var slideFound = false;\n if (slide) {\n for (var i = 0; i < s.slides.length; i++) {\n if (s.slides[i] === slide) slideFound = true;\n }\n }\n \n if (slide && slideFound) {\n s.clickedSlide = slide;\n s.clickedIndex = $(slide).index();\n }\n else {\n s.clickedSlide = undefined;\n s.clickedIndex = undefined;\n return;\n }\n if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {\n var slideToIndex = s.clickedIndex,\n realIndex,\n duplicatedSlides;\n if (s.params.loop) {\n if (s.animating) return;\n realIndex = $(s.clickedSlide).attr('data-swiper-slide-index');\n if (s.params.centeredSlides) {\n if ((slideToIndex < s.loopedSlides - s.params.slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + s.params.slidesPerView/2)) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.swiper-slide-duplicate)').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n else {\n if (slideToIndex > s.slides.length - s.params.slidesPerView) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.swiper-slide-duplicate)').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n };\n \n var isTouched,\n isMoved,\n allowTouchCallbacks,\n touchStartTime,\n isScrolling,\n currentTranslate,\n startTranslate,\n allowThresholdMove,\n // Form elements to match\n formElements = 'input, select, textarea, button',\n // Last click time\n lastClickTime = Date.now(), clickTimeout,\n //Velocities\n velocities = [],\n allowMomentumBounce;\n \n // Animating Flag\n s.animating = false;\n \n // Touches information\n s.touches = {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n };\n \n // Touch handlers\n var isTouchEvent, startMoving;\n s.onTouchStart = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n isTouchEvent = e.type === 'touchstart';\n if (!isTouchEvent && 'which' in e && e.which === 3) return;\n if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) {\n s.allowClick = true;\n return;\n }\n if (s.params.swipeHandler) {\n if (!findElementInEvent(e, s.params.swipeHandler)) return;\n }\n \n var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n \n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) {\n return;\n }\n \n isTouched = true;\n isMoved = false;\n allowTouchCallbacks = true;\n isScrolling = undefined;\n startMoving = undefined;\n s.touches.startX = startX;\n s.touches.startY = startY;\n touchStartTime = Date.now();\n s.allowClick = true;\n s.updateContainerSize();\n s.swipeDirection = undefined;\n if (s.params.threshold > 0) allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n var preventDefault = true;\n if ($(e.target).is(formElements)) preventDefault = false;\n if (document.activeElement && $(document.activeElement).is(formElements)) {\n document.activeElement.blur();\n }\n if (preventDefault) {\n e.preventDefault();\n }\n }\n s.emit('onTouchStart', s, e);\n };\n \n s.onTouchMove = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (isTouchEvent && e.type === 'mousemove') return;\n if (e.preventedByNestedSwiper) {\n s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n return;\n }\n if (s.params.onlyExternal) {\n // isMoved = true;\n s.allowClick = false;\n if (isTouched) {\n s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = Date.now();\n }\n return;\n }\n if (isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(formElements)) {\n isMoved = true;\n s.allowClick = false;\n return;\n }\n }\n if (allowTouchCallbacks) {\n s.emit('onTouchMove', s, e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n \n s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n \n if (typeof isScrolling === 'undefined') {\n var touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI;\n isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle);\n }\n if (isScrolling) {\n s.emit('onTouchMoveOpposite', s, e);\n }\n if (typeof startMoving === 'undefined' && s.browser.ieTouch) {\n if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) {\n startMoving = true;\n }\n }\n if (!isTouched) return;\n if (isScrolling) {\n isTouched = false;\n return;\n }\n if (!startMoving && s.browser.ieTouch) {\n return;\n }\n s.allowClick = false;\n s.emit('onSliderMove', s, e);\n e.preventDefault();\n if (s.params.touchMoveStopPropagation && !s.params.nested) {\n e.stopPropagation();\n }\n \n if (!isMoved) {\n if (params.loop) {\n s.fixLoop();\n }\n startTranslate = s.getWrapperTranslate();\n s.setWrapperTransition(0);\n if (s.animating) {\n s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd');\n }\n if (s.params.autoplay && s.autoplaying) {\n if (s.params.autoplayDisableOnInteraction) {\n s.stopAutoplay();\n }\n else {\n s.pauseAutoplay();\n }\n }\n allowMomentumBounce = false;\n //Grab Cursor\n if (s.params.grabCursor) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grabbing';\n s.container[0].style.cursor = '-moz-grabbin';\n s.container[0].style.cursor = 'grabbing';\n }\n }\n isMoved = true;\n \n var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n \n diff = diff * s.params.touchRatio;\n if (s.rtl) diff = -diff;\n \n s.swipeDirection = diff > 0 ? 'prev' : 'next';\n currentTranslate = diff + startTranslate;\n \n var disableParentSwiper = true;\n if ((diff > 0 && currentTranslate > s.minTranslate())) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio);\n }\n else if (diff < 0 && currentTranslate < s.maxTranslate()) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio);\n }\n \n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) {\n currentTranslate = startTranslate;\n }\n if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) {\n currentTranslate = startTranslate;\n }\n \n if (!s.params.followFinger) return;\n \n // Threshold\n if (s.params.threshold > 0) {\n if (Math.abs(diff) > s.params.threshold || allowThresholdMove) {\n if (!allowThresholdMove) {\n allowThresholdMove = true;\n s.touches.startX = s.touches.currentX;\n s.touches.startY = s.touches.currentY;\n currentTranslate = startTranslate;\n s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n return;\n }\n }\n else {\n currentTranslate = startTranslate;\n return;\n }\n }\n // Update active index in free mode\n if (s.params.freeMode || s.params.watchSlidesProgress) {\n s.updateActiveIndex();\n }\n if (s.params.freeMode) {\n //Velocity\n if (velocities.length === 0) {\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'startX' : 'startY'],\n time: touchStartTime\n });\n }\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'],\n time: (new window.Date()).getTime()\n });\n }\n // Update progress\n s.updateProgress(currentTranslate);\n // Update translate\n s.setWrapperTranslate(currentTranslate);\n };\n s.onTouchEnd = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (allowTouchCallbacks) {\n s.emit('onTouchEnd', s, e);\n }\n allowTouchCallbacks = false;\n if (!isTouched) return;\n //Return Grab Cursor\n if (s.params.grabCursor && isMoved && isTouched) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grab';\n s.container[0].style.cursor = '-moz-grab';\n s.container[0].style.cursor = 'grab';\n }\n \n // Time diff\n var touchEndTime = Date.now();\n var timeDiff = touchEndTime - touchStartTime;\n \n // Tap, doubleTap, Click\n if (s.allowClick) {\n s.updateClickedSlide(e);\n s.emit('onTap', s, e);\n if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n clickTimeout = setTimeout(function () {\n if (!s) return;\n if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) {\n s.paginationContainer.toggleClass(s.params.paginationHiddenClass);\n }\n s.emit('onClick', s, e);\n }, 300);\n \n }\n if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n s.emit('onDoubleTap', s, e);\n }\n }\n \n lastClickTime = Date.now();\n setTimeout(function () {\n if (s) s.allowClick = true;\n }, 0);\n \n if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) {\n isTouched = isMoved = false;\n return;\n }\n isTouched = isMoved = false;\n \n var currentPos;\n if (s.params.followFinger) {\n currentPos = s.rtl ? s.translate : -s.translate;\n }\n else {\n currentPos = -currentTranslate;\n }\n if (s.params.freeMode) {\n if (currentPos < -s.minTranslate()) {\n s.slideTo(s.activeIndex);\n return;\n }\n else if (currentPos > -s.maxTranslate()) {\n if (s.slides.length < s.snapGrid.length) {\n s.slideTo(s.snapGrid.length - 1);\n }\n else {\n s.slideTo(s.slides.length - 1);\n }\n return;\n }\n \n if (s.params.freeModeMomentum) {\n if (velocities.length > 1) {\n var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop();\n \n var distance = lastMoveEvent.position - velocityEvent.position;\n var time = lastMoveEvent.time - velocityEvent.time;\n s.velocity = distance / time;\n s.velocity = s.velocity / 2;\n if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) {\n s.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) {\n s.velocity = 0;\n }\n } else {\n s.velocity = 0;\n }\n \n velocities.length = 0;\n var momentumDuration = 1000 * s.params.freeModeMomentumRatio;\n var momentumDistance = s.velocity * momentumDuration;\n \n var newPosition = s.translate + momentumDistance;\n if (s.rtl) newPosition = - newPosition;\n var doBounce = false;\n var afterBouncePosition;\n var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio;\n if (newPosition < s.maxTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition + s.maxTranslate() < -bounceAmount) {\n newPosition = s.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = s.maxTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.maxTranslate();\n }\n }\n else if (newPosition > s.minTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition - s.minTranslate() > bounceAmount) {\n newPosition = s.minTranslate() + bounceAmount;\n }\n afterBouncePosition = s.minTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.minTranslate();\n }\n }\n else if (s.params.freeModeSticky) {\n var j = 0,\n nextSlide;\n for (j = 0; j < s.snapGrid.length; j += 1) {\n if (s.snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n \n }\n if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') {\n newPosition = s.snapGrid[nextSlide];\n } else {\n newPosition = s.snapGrid[nextSlide - 1];\n }\n if (!s.rtl) newPosition = - newPosition;\n }\n //Fix duration\n if (s.velocity !== 0) {\n if (s.rtl) {\n momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity);\n }\n else {\n momentumDuration = Math.abs((newPosition - s.translate) / s.velocity);\n }\n }\n else if (s.params.freeModeSticky) {\n s.slideReset();\n return;\n }\n \n if (s.params.freeModeMomentumBounce && doBounce) {\n s.updateProgress(afterBouncePosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s || !allowMomentumBounce) return;\n s.emit('onMomentumBounce', s);\n \n s.setWrapperTransition(s.params.speed);\n s.setWrapperTranslate(afterBouncePosition);\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n });\n } else if (s.velocity) {\n s.updateProgress(newPosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n }\n \n } else {\n s.updateProgress(newPosition);\n }\n \n s.updateActiveIndex();\n }\n if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) {\n s.updateProgress();\n s.updateActiveIndex();\n }\n return;\n }\n \n // Find current slide\n var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0];\n for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) {\n if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') {\n if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) {\n stopIndex = i;\n groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i];\n }\n }\n else {\n if (currentPos >= s.slidesGrid[i]) {\n stopIndex = i;\n groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2];\n }\n }\n }\n \n // Find current slide size\n var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize;\n \n if (timeDiff > s.params.longSwipesMs) {\n // Long touches\n if (!s.params.longSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n \n }\n if (s.swipeDirection === 'prev') {\n if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n }\n }\n else {\n // Short swipes\n if (!s.params.shortSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n s.slideTo(stopIndex + s.params.slidesPerGroup);\n \n }\n if (s.swipeDirection === 'prev') {\n s.slideTo(stopIndex);\n }\n }\n };\n /*=========================\n Transitions\n ===========================*/\n s._slideTo = function (slideIndex, speed) {\n return s.slideTo(slideIndex, speed, true, true);\n };\n s.slideTo = function (slideIndex, speed, runCallbacks, internal) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (typeof slideIndex === 'undefined') slideIndex = 0;\n if (slideIndex < 0) slideIndex = 0;\n s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup);\n if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1;\n \n var translate = - s.snapGrid[s.snapIndex];\n // Stop autoplay\n if (s.params.autoplay && s.autoplaying) {\n if (internal || !s.params.autoplayDisableOnInteraction) {\n s.pauseAutoplay(speed);\n }\n else {\n s.stopAutoplay();\n }\n }\n // Update progress\n s.updateProgress(translate);\n \n // Normalize slideIndex\n for (var i = 0; i < s.slidesGrid.length; i++) {\n if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) {\n if ((s.activeIndex || 0) !== slideIndex ) return false;\n }\n \n // Update Index\n if (typeof speed === 'undefined') speed = s.params.speed;\n s.previousIndex = s.activeIndex || 0;\n s.activeIndex = slideIndex;\n \n if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) {\n // Update Height\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n s.updateClasses();\n if (s.params.effect !== 'slide') {\n s.setWrapperTranslate(translate);\n }\n return false;\n }\n s.updateClasses();\n s.onTransitionStart(runCallbacks);\n \n if (speed === 0) {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(0);\n s.onTransitionEnd(runCallbacks);\n }\n else {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(speed);\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd(runCallbacks);\n });\n }\n \n }\n \n return true;\n };\n \n s.onTransitionStart = function (runCallbacks) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n if (s.lazy) s.lazy.onTransitionStart();\n if (runCallbacks) {\n s.emit('onTransitionStart', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeStart', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextStart', s);\n }\n else {\n s.emit('onSlidePrevStart', s);\n }\n }\n \n }\n };\n s.onTransitionEnd = function (runCallbacks) {\n s.animating = false;\n s.setWrapperTransition(0);\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.lazy) s.lazy.onTransitionEnd();\n if (runCallbacks) {\n s.emit('onTransitionEnd', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeEnd', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextEnd', s);\n }\n else {\n s.emit('onSlidePrevEnd', s);\n }\n }\n }\n if (s.params.hashnav && s.hashnav) {\n s.hashnav.setHash();\n }\n \n };\n s.slideNext = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n };\n s._slideNext = function (speed) {\n return s.slideNext(true, speed, true);\n };\n s.slidePrev = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n };\n s._slidePrev = function (speed) {\n return s.slidePrev(true, speed, true);\n };\n s.slideReset = function (runCallbacks, speed, internal) {\n return s.slideTo(s.activeIndex, speed, runCallbacks);\n };\n \n /*=========================\n Translate/transition helpers\n ===========================*/\n s.setWrapperTransition = function (duration, byController) {\n s.wrapper.transition(duration);\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTransition(duration);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTransition(duration);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTransition(duration);\n }\n if (s.params.control && s.controller) {\n s.controller.setTransition(duration, byController);\n }\n s.emit('onSetTransition', s, duration);\n };\n s.setWrapperTranslate = function (translate, updateActiveIndex, byController) {\n var x = 0, y = 0, z = 0;\n if (s.isHorizontal()) {\n x = s.rtl ? -translate : translate;\n }\n else {\n y = translate;\n }\n \n if (s.params.roundLengths) {\n x = round(x);\n y = round(y);\n }\n \n if (!s.params.virtualTranslate) {\n if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');\n else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');\n }\n \n s.translate = s.isHorizontal() ? x : y;\n \n // Check if we need to update progress\n var progress;\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n if (translatesDiff === 0) {\n progress = 0;\n }\n else {\n progress = (translate - s.minTranslate()) / (translatesDiff);\n }\n if (progress !== s.progress) {\n s.updateProgress(translate);\n }\n \n if (updateActiveIndex) s.updateActiveIndex();\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTranslate(s.translate);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTranslate(s.translate);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTranslate(s.translate);\n }\n if (s.params.control && s.controller) {\n s.controller.setTranslate(s.translate, byController);\n }\n s.emit('onSetTranslate', s, s.translate);\n };\n \n s.getTranslate = function (el, axis) {\n var matrix, curTransform, curStyle, transformMatrix;\n \n // automatic axis detection\n if (typeof axis === 'undefined') {\n axis = 'x';\n }\n \n if (s.params.virtualTranslate) {\n return s.rtl ? -s.translate : s.translate;\n }\n \n curStyle = window.getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function(a){\n return a.replace(',','.');\n }).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n }\n else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n \n if (axis === 'x') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m41;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[12]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m42;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[13]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[5]);\n }\n if (s.rtl && curTransform) curTransform = -curTransform;\n return curTransform || 0;\n };\n s.getWrapperTranslate = function (axis) {\n if (typeof axis === 'undefined') {\n axis = s.isHorizontal() ? 'x' : 'y';\n }\n return s.getTranslate(s.wrapper[0], axis);\n };\n \n /*=========================\n Observer\n ===========================*/\n s.observers = [];\n function initObserver(target, options) {\n options = options || {};\n // create an observer instance\n var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n var observer = new ObserverFunc(function (mutations) {\n mutations.forEach(function (mutation) {\n s.onResize(true);\n s.emit('onObserverUpdate', s, mutation);\n });\n });\n \n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n \n s.observers.push(observer);\n }\n s.initObservers = function () {\n if (s.params.observeParents) {\n var containerParents = s.container.parents();\n for (var i = 0; i < containerParents.length; i++) {\n initObserver(containerParents[i]);\n }\n }\n \n // Observe container\n initObserver(s.container[0], {childList: false});\n \n // Observe wrapper\n initObserver(s.wrapper[0], {attributes: false});\n };\n s.disconnectObservers = function () {\n for (var i = 0; i < s.observers.length; i++) {\n s.observers[i].disconnect();\n }\n s.observers = [];\n };\n /*=========================\n Loop\n ===========================*/\n // Create looped slides\n s.createLoop = function () {\n // Remove duplicated slides\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n \n var slides = s.wrapper.children('.' + s.params.slideClass);\n \n if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length;\n \n s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10);\n s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;\n if (s.loopedSlides > slides.length) {\n s.loopedSlides = slides.length;\n }\n \n var prependSlides = [], appendSlides = [], i;\n slides.each(function (index, el) {\n var slide = $(this);\n if (index < s.loopedSlides) appendSlides.push(el);\n if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el);\n slide.attr('data-swiper-slide-index', index);\n });\n for (i = 0; i < appendSlides.length; i++) {\n s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n for (i = prependSlides.length - 1; i >= 0; i--) {\n s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n };\n s.destroyLoop = function () {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n s.slides.removeAttr('data-swiper-slide-index');\n };\n s.reLoop = function (updatePosition) {\n var oldIndex = s.activeIndex - s.loopedSlides;\n s.destroyLoop();\n s.createLoop();\n s.updateSlidesSize();\n if (updatePosition) {\n s.slideTo(oldIndex + s.loopedSlides, 0, false);\n }\n \n };\n s.fixLoop = function () {\n var newIndex;\n //Fix For Negative Oversliding\n if (s.activeIndex < s.loopedSlides) {\n newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n //Fix For Positive Oversliding\n else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) {\n newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n };\n /*=========================\n Append/Prepend/Remove Slides\n ===========================*/\n s.appendSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.append(slides[i]);\n }\n }\n else {\n s.wrapper.append(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n };\n s.prependSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n var newActiveIndex = s.activeIndex + 1;\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.prepend(slides[i]);\n }\n newActiveIndex = s.activeIndex + slides.length;\n }\n else {\n s.wrapper.prepend(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n s.slideTo(newActiveIndex, 0, false);\n };\n s.removeSlide = function (slidesIndexes) {\n if (s.params.loop) {\n s.destroyLoop();\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n }\n var newActiveIndex = s.activeIndex,\n indexToRemove;\n if (typeof slidesIndexes === 'object' && slidesIndexes.length) {\n for (var i = 0; i < slidesIndexes.length; i++) {\n indexToRemove = slidesIndexes[i];\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n else {\n indexToRemove = slidesIndexes;\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n \n if (s.params.loop) {\n s.createLoop();\n }\n \n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n if (s.params.loop) {\n s.slideTo(newActiveIndex + s.loopedSlides, 0, false);\n }\n else {\n s.slideTo(newActiveIndex, 0, false);\n }\n \n };\n s.removeAllSlides = function () {\n var slidesIndexes = [];\n for (var i = 0; i < s.slides.length; i++) {\n slidesIndexes.push(i);\n }\n s.removeSlide(slidesIndexes);\n };\n \n\n /*=========================\n Effects\n ===========================*/\n s.effects = {\n fade: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var offset = slide[0].swiperSlideOffset;\n var tx = -offset;\n if (!s.params.virtualTranslate) tx = tx - s.translate;\n var ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n var slideOpacity = s.params.fade.crossFade ?\n Math.max(1 - Math.abs(slide[0].progress), 0) :\n 1 + Math.min(Math.max(slide[0].progress, -1), 0);\n slide\n .css({\n opacity: slideOpacity\n })\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');\n \n }\n \n },\n setTransition: function (duration) {\n s.slides.transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n flip: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var progress = slide[0].progress;\n if (s.params.flip.limitRotation) {\n progress = Math.max(Math.min(slide[0].progress, 1), -1);\n }\n var offset = slide[0].swiperSlideOffset;\n var rotate = -180 * progress,\n rotateY = rotate,\n rotateX = 0,\n tx = -offset,\n ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n }\n else if (s.rtl) {\n rotateY = -rotateY;\n }\n \n slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length;\n \n if (s.params.flip.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n \n slide\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.eq(s.activeIndex).transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n if (!$(this).hasClass(s.params.slideActiveClass)) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n cube: {\n setTranslate: function () {\n var wrapperRotate = 0, cubeShadow;\n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow = s.wrapper.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('
');\n s.wrapper.append(cubeShadow);\n }\n cubeShadow.css({height: s.width + 'px'});\n }\n else {\n cubeShadow = s.container.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('
');\n s.container.append(cubeShadow);\n }\n }\n }\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var slideAngle = i * 90;\n var round = Math.floor(slideAngle / 360);\n if (s.rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n var progress = Math.max(Math.min(slide[0].progress, 1), -1);\n var tx = 0, ty = 0, tz = 0;\n if (i % 4 === 0) {\n tx = - round * 4 * s.size;\n tz = 0;\n }\n else if ((i - 1) % 4 === 0) {\n tx = 0;\n tz = - round * 4 * s.size;\n }\n else if ((i - 2) % 4 === 0) {\n tx = s.size + round * 4 * s.size;\n tz = s.size;\n }\n else if ((i - 3) % 4 === 0) {\n tx = - s.size;\n tz = 3 * s.size + s.size * 4 * round;\n }\n if (s.rtl) {\n tx = -tx;\n }\n \n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n \n var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';\n if (progress <= 1 && progress > -1) {\n wrapperRotate = i * 90 + progress * 90;\n if (s.rtl) wrapperRotate = -i * 90 - progress * 90;\n }\n slide.transform(transform);\n if (s.params.cube.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n }\n s.wrapper.css({\n '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n 'transform-origin': '50% 50% -' + (s.size / 2) + 'px'\n });\n \n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')');\n }\n else {\n var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n var scale1 = s.params.cube.shadowScale,\n scale2 = s.params.cube.shadowScale / multiplier,\n offset = s.params.cube.shadowOffset;\n cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)');\n }\n }\n var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0;\n s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)');\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.cube.shadow && !s.isHorizontal()) {\n s.container.find('.swiper-cube-shadow').transition(duration);\n }\n }\n },\n coverflow: {\n setTranslate: function () {\n var transform = s.translate;\n var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2;\n var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate;\n var translate = s.params.coverflow.depth;\n //Each slide offset from center\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideSize = s.slidesSizesGrid[i];\n var slideOffset = slide[0].swiperSlideOffset;\n var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;\n \n var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0;\n var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n var translateZ = -translate * Math.abs(offsetMultiplier);\n \n var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier);\n var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0;\n \n //Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n \n var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';\n \n slide.transform(slideTransform);\n slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (s.params.coverflow.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n }\n }\n \n //Set correct perspective for IE10\n if (s.browser.ie) {\n var ws = s.wrapper[0].style;\n ws.perspectiveOrigin = center + 'px 50%';\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n }\n }\n };\n\n /*=========================\n Images Lazy Loading\n ===========================*/\n s.lazy = {\n initialImageLoaded: false,\n loadImageInSlide: function (index, loadInDuplicate) {\n if (typeof index === 'undefined') return;\n if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true;\n if (s.slides.length === 0) return;\n \n var slide = s.slides.eq(index);\n var img = slide.find('.swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)');\n if (slide.hasClass('swiper-lazy') && !slide.hasClass('swiper-lazy-loaded') && !slide.hasClass('swiper-lazy-loading')) {\n img = img.add(slide[0]);\n }\n if (img.length === 0) return;\n \n img.each(function () {\n var _img = $(this);\n _img.addClass('swiper-lazy-loading');\n var background = _img.attr('data-background');\n var src = _img.attr('data-src'),\n srcset = _img.attr('data-srcset');\n s.loadImage(_img[0], (src || background), srcset, false, function () {\n if (background) {\n _img.css('background-image', 'url(\"' + background + '\")');\n _img.removeAttr('data-background');\n }\n else {\n if (srcset) {\n _img.attr('srcset', srcset);\n _img.removeAttr('data-srcset');\n }\n if (src) {\n _img.attr('src', src);\n _img.removeAttr('data-src');\n }\n \n }\n \n _img.addClass('swiper-lazy-loaded').removeClass('swiper-lazy-loading');\n slide.find('.swiper-lazy-preloader, .preloader').remove();\n if (s.params.loop && loadInDuplicate) {\n var slideOriginalIndex = slide.attr('data-swiper-slide-index');\n if (slide.hasClass(s.params.slideDuplicateClass)) {\n var originalSlide = s.wrapper.children('[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')');\n s.lazy.loadImageInSlide(originalSlide.index(), false);\n }\n else {\n var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]');\n s.lazy.loadImageInSlide(duplicatedSlide.index(), false);\n }\n }\n s.emit('onLazyImageReady', s, slide[0], _img[0]);\n });\n \n s.emit('onLazyImageLoad', s, slide[0], _img[0]);\n });\n \n },\n load: function () {\n var i;\n if (s.params.watchSlidesVisibility) {\n s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {\n s.lazy.loadImageInSlide($(this).index());\n });\n }\n else {\n if (s.params.slidesPerView > 1) {\n for (i = s.activeIndex; i < s.activeIndex + s.params.slidesPerView ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n s.lazy.loadImageInSlide(s.activeIndex);\n }\n }\n if (s.params.lazyLoadingInPrevNext) {\n if (s.params.slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {\n var amount = s.params.lazyLoadingInPrevNextAmount;\n var spv = s.params.slidesPerView;\n var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length);\n var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (i = s.activeIndex + s.params.slidesPerView; i < maxIndex; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n // Prev Slides\n for (i = minIndex; i < s.activeIndex ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n var nextSlide = s.wrapper.children('.' + s.params.slideNextClass);\n if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index());\n \n var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass);\n if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index());\n }\n }\n },\n onTransitionStart: function () {\n if (s.params.lazyLoading) {\n if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) {\n s.lazy.load();\n }\n }\n },\n onTransitionEnd: function () {\n if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) {\n s.lazy.load();\n }\n }\n };\n \n\n /*=========================\n Scrollbar\n ===========================*/\n s.scrollbar = {\n isTouched: false,\n setDragPosition: function (e) {\n var sb = s.scrollbar;\n var x = 0, y = 0;\n var translate;\n var pointerPosition = s.isHorizontal() ?\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) :\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ;\n var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2;\n var positionMin = -s.minTranslate() * sb.moveDivider;\n var positionMax = -s.maxTranslate() * sb.moveDivider;\n if (position < positionMin) {\n position = positionMin;\n }\n else if (position > positionMax) {\n position = positionMax;\n }\n position = -position / sb.moveDivider;\n s.updateProgress(position);\n s.setWrapperTranslate(position, true);\n },\n dragStart: function (e) {\n var sb = s.scrollbar;\n sb.isTouched = true;\n e.preventDefault();\n e.stopPropagation();\n \n sb.setDragPosition(e);\n clearTimeout(sb.dragTimeout);\n \n sb.track.transition(0);\n if (s.params.scrollbarHide) {\n sb.track.css('opacity', 1);\n }\n s.wrapper.transition(100);\n sb.drag.transition(100);\n s.emit('onScrollbarDragStart', s);\n },\n dragMove: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n sb.setDragPosition(e);\n s.wrapper.transition(0);\n sb.track.transition(0);\n sb.drag.transition(0);\n s.emit('onScrollbarDragMove', s);\n },\n dragEnd: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n sb.isTouched = false;\n if (s.params.scrollbarHide) {\n clearTimeout(sb.dragTimeout);\n sb.dragTimeout = setTimeout(function () {\n sb.track.css('opacity', 0);\n sb.track.transition(400);\n }, 1000);\n \n }\n s.emit('onScrollbarDragEnd', s);\n if (s.params.scrollbarSnapOnRelease) {\n s.slideReset();\n }\n },\n enableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).on(s.touchEvents.start, sb.dragStart);\n $(target).on(s.touchEvents.move, sb.dragMove);\n $(target).on(s.touchEvents.end, sb.dragEnd);\n },\n disableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).off(s.touchEvents.start, sb.dragStart);\n $(target).off(s.touchEvents.move, sb.dragMove);\n $(target).off(s.touchEvents.end, sb.dragEnd);\n },\n set: function () {\n if (!s.params.scrollbar) return;\n var sb = s.scrollbar;\n sb.track = $(s.params.scrollbar);\n if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) {\n sb.track = s.container.find(s.params.scrollbar);\n }\n sb.drag = sb.track.find('.swiper-scrollbar-drag');\n if (sb.drag.length === 0) {\n sb.drag = $('
');\n sb.track.append(sb.drag);\n }\n sb.drag[0].style.width = '';\n sb.drag[0].style.height = '';\n sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight;\n \n sb.divider = s.size / s.virtualSize;\n sb.moveDivider = sb.divider * (sb.trackSize / s.size);\n sb.dragSize = sb.trackSize * sb.divider;\n \n if (s.isHorizontal()) {\n sb.drag[0].style.width = sb.dragSize + 'px';\n }\n else {\n sb.drag[0].style.height = sb.dragSize + 'px';\n }\n \n if (sb.divider >= 1) {\n sb.track[0].style.display = 'none';\n }\n else {\n sb.track[0].style.display = '';\n }\n if (s.params.scrollbarHide) {\n sb.track[0].style.opacity = 0;\n }\n },\n setTranslate: function () {\n if (!s.params.scrollbar) return;\n var diff;\n var sb = s.scrollbar;\n var translate = s.translate || 0;\n var newPos;\n \n var newSize = sb.dragSize;\n newPos = (sb.trackSize - sb.dragSize) * s.progress;\n if (s.rtl && s.isHorizontal()) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = sb.dragSize - newPos;\n newPos = 0;\n }\n else if (-newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize + newPos;\n }\n }\n else {\n if (newPos < 0) {\n newSize = sb.dragSize + newPos;\n newPos = 0;\n }\n else if (newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize - newPos;\n }\n }\n if (s.isHorizontal()) {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)');\n }\n else {\n sb.drag.transform('translateX(' + (newPos) + 'px)');\n }\n sb.drag[0].style.width = newSize + 'px';\n }\n else {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)');\n }\n else {\n sb.drag.transform('translateY(' + (newPos) + 'px)');\n }\n sb.drag[0].style.height = newSize + 'px';\n }\n if (s.params.scrollbarHide) {\n clearTimeout(sb.timeout);\n sb.track[0].style.opacity = 1;\n sb.timeout = setTimeout(function () {\n sb.track[0].style.opacity = 0;\n sb.track.transition(400);\n }, 1000);\n }\n },\n setTransition: function (duration) {\n if (!s.params.scrollbar) return;\n s.scrollbar.drag.transition(duration);\n }\n };\n\n /*=========================\n Controller\n ===========================*/\n s.controller = {\n LinearSpline: function (x, y) {\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n var i1, i3;\n var l = this.x.length;\n \n this.interpolate = function (x2) {\n if (!x2) return 0;\n \n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n \n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n \n var binarySearch = (function() {\n var maxIndex, minIndex, guess;\n return function(array, val) {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1)\n if (array[guess = maxIndex + minIndex >> 1] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n return maxIndex;\n };\n })();\n },\n //xxx: for now i will just save one spline function to to\n getInterpolateFunction: function(c){\n if(!s.controller.spline) s.controller.spline = s.params.loop ?\n new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) :\n new s.controller.LinearSpline(s.snapGrid, c.snapGrid);\n },\n setTranslate: function (translate, byController) {\n var controlled = s.params.control;\n var multiplier, controlledTranslate;\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate;\n if (s.params.controlBy === 'slide') {\n s.controller.getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -s.controller.spline.interpolate(-translate);\n }\n \n if(!controlledTranslate || s.params.controlBy === 'container'){\n multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate());\n controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate();\n }\n \n if (s.params.controlInverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setWrapperTranslate(controlledTranslate, false, s);\n c.updateActiveIndex();\n }\n if (s.isArray(controlled)) {\n for (var i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n \n setControlledTranslate(controlled);\n }\n },\n setTransition: function (duration, byController) {\n var controlled = s.params.control;\n var i;\n function setControlledTransition(c) {\n c.setWrapperTransition(duration, s);\n if (duration !== 0) {\n c.onTransitionStart();\n c.wrapper.transitionEnd(function(){\n if (!controlled) return;\n if (c.params.loop && s.params.controlBy === 'slide') {\n c.fixLoop();\n }\n c.onTransitionEnd();\n \n });\n }\n }\n if (s.isArray(controlled)) {\n for (i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n };\n\n /*=========================\n Hash Navigation\n ===========================*/\n s.hashnav = {\n init: function () {\n if (!s.params.hashnav) return;\n s.hashnav.initialized = true;\n var hash = document.location.hash.replace('#', '');\n if (!hash) return;\n var speed = 0;\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideHash = slide.attr('data-hash');\n if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {\n var index = slide.index();\n s.slideTo(index, speed, s.params.runCallbacksOnInit, true);\n }\n }\n },\n setHash: function () {\n if (!s.hashnav.initialized || !s.params.hashnav) return;\n document.location.hash = s.slides.eq(s.activeIndex).attr('data-hash') || '';\n }\n };\n\n /*=========================\n Keyboard Control\n ===========================*/\n function handleKeyboard(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var kc = e.keyCode || e.charCode;\n // Directions locks\n if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return;\n }\n if (kc === 37 || kc === 39 || kc === 38 || kc === 40) {\n var inView = false;\n //Check that swiper should be inside of visible area of window\n if (s.container.parents('.swiper-slide').length > 0 && s.container.parents('.swiper-slide-active').length === 0) {\n return;\n }\n var windowScroll = {\n left: window.pageXOffset,\n top: window.pageYOffset\n };\n var windowWidth = window.innerWidth;\n var windowHeight = window.innerHeight;\n var swiperOffset = s.container.offset();\n if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft;\n var swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + s.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + s.height],\n [swiperOffset.left + s.width, swiperOffset.top + s.height]\n ];\n for (var i = 0; i < swiperCoord.length; i++) {\n var point = swiperCoord[i];\n if (\n point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth &&\n point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight\n ) {\n inView = true;\n }\n \n }\n if (!inView) return;\n }\n if (s.isHorizontal()) {\n if (kc === 37 || kc === 39) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext();\n if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev();\n }\n else {\n if (kc === 38 || kc === 40) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (kc === 40) s.slideNext();\n if (kc === 38) s.slidePrev();\n }\n }\n s.disableKeyboardControl = function () {\n s.params.keyboardControl = false;\n $(document).off('keydown', handleKeyboard);\n };\n s.enableKeyboardControl = function () {\n s.params.keyboardControl = true;\n $(document).on('keydown', handleKeyboard);\n };\n \n\n /*=========================\n Mousewheel Control\n ===========================*/\n s.mousewheel = {\n event: false,\n lastScrollTime: (new window.Date()).getTime()\n };\n if (s.params.mousewheelControl) {\n try {\n new window.WheelEvent('wheel');\n s.mousewheel.event = 'wheel';\n } catch (e) {\n if (window.WheelEvent || (s.container[0] && 'wheel' in s.container[0])) {\n s.mousewheel.event = 'wheel';\n }\n }\n if (!s.mousewheel.event && window.WheelEvent) {\n \n }\n if (!s.mousewheel.event && document.onmousewheel !== undefined) {\n s.mousewheel.event = 'mousewheel';\n }\n if (!s.mousewheel.event) {\n s.mousewheel.event = 'DOMMouseScroll';\n }\n }\n function handleMousewheel(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var we = s.mousewheel.event;\n var delta = 0;\n var rtlFactor = s.rtl ? -1 : 1;\n \n //WebKits\n if (we === 'mousewheel') {\n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY)) delta = e.wheelDeltaX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(e.wheelDeltaY) > Math.abs(e.wheelDeltaX)) delta = e.wheelDeltaY;\n else return;\n }\n }\n else {\n delta = Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY) ? - e.wheelDeltaX * rtlFactor : - e.wheelDeltaY;\n }\n }\n //Old FireFox\n else if (we === 'DOMMouseScroll') delta = -e.detail;\n //New FireFox\n else if (we === 'wheel') {\n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) delta = -e.deltaX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(e.deltaY) > Math.abs(e.deltaX)) delta = -e.deltaY;\n else return;\n }\n }\n else {\n delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? - e.deltaX * rtlFactor : - e.deltaY;\n }\n }\n if (delta === 0) return;\n \n if (s.params.mousewheelInvert) delta = -delta;\n \n if (!s.params.freeMode) {\n if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) {\n if (delta < 0) {\n if ((!s.isEnd || s.params.loop) && !s.animating) s.slideNext();\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n else {\n if ((!s.isBeginning || s.params.loop) && !s.animating) s.slidePrev();\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n }\n s.mousewheel.lastScrollTime = (new window.Date()).getTime();\n \n }\n else {\n //Freemode or scrollContainer:\n var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity;\n var wasBeginning = s.isBeginning,\n wasEnd = s.isEnd;\n \n if (position >= s.minTranslate()) position = s.minTranslate();\n if (position <= s.maxTranslate()) position = s.maxTranslate();\n \n s.setWrapperTransition(0);\n s.setWrapperTranslate(position);\n s.updateProgress();\n s.updateActiveIndex();\n \n if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) {\n s.updateClasses();\n }\n \n if (s.params.freeModeSticky) {\n clearTimeout(s.mousewheel.timeout);\n s.mousewheel.timeout = setTimeout(function () {\n s.slideReset();\n }, 300);\n }\n else {\n if (s.params.lazyLoading && s.lazy) {\n s.lazy.load();\n }\n }\n \n // Return page scroll on edge positions\n if (position === 0 || position === s.maxTranslate()) return;\n }\n if (s.params.autoplay) s.stopAutoplay();\n \n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n }\n s.disableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n s.container.off(s.mousewheel.event, handleMousewheel);\n return true;\n };\n \n s.enableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n s.container.on(s.mousewheel.event, handleMousewheel);\n return true;\n };\n \n\n /*=========================\n Parallax\n ===========================*/\n function setParallaxTransform(el, progress) {\n el = $(el);\n var p, pX, pY;\n var rtlFactor = s.rtl ? -1 : 1;\n \n p = el.attr('data-swiper-parallax') || '0';\n pX = el.attr('data-swiper-parallax-x');\n pY = el.attr('data-swiper-parallax-y');\n if (pX || pY) {\n pX = pX || '0';\n pY = pY || '0';\n }\n else {\n if (s.isHorizontal()) {\n pX = p;\n pY = '0';\n }\n else {\n pY = p;\n pX = '0';\n }\n }\n \n if ((pX).indexOf('%') >= 0) {\n pX = parseInt(pX, 10) * progress * rtlFactor + '%';\n }\n else {\n pX = pX * progress * rtlFactor + 'px' ;\n }\n if ((pY).indexOf('%') >= 0) {\n pY = parseInt(pY, 10) * progress + '%';\n }\n else {\n pY = pY * progress + 'px' ;\n }\n \n el.transform('translate3d(' + pX + ', ' + pY + ',0px)');\n }\n s.parallax = {\n setTranslate: function () {\n s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n setParallaxTransform(this, s.progress);\n \n });\n s.slides.each(function () {\n var slide = $(this);\n slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () {\n var progress = Math.min(Math.max(slide[0].progress, -1), 1);\n setParallaxTransform(this, progress);\n });\n });\n },\n setTransition: function (duration) {\n if (typeof duration === 'undefined') duration = s.params.speed;\n s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n var el = $(this);\n var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n el.transition(parallaxDuration);\n });\n }\n };\n \n\n /*=========================\n Plugins API. Collect all and init all plugins\n ===========================*/\n s._plugins = [];\n for (var plugin in s.plugins) {\n var p = s.plugins[plugin](s, s.params[plugin]);\n if (p) s._plugins.push(p);\n }\n // Method to call all plugins event/method\n s.callPlugins = function (eventName) {\n for (var i = 0; i < s._plugins.length; i++) {\n if (eventName in s._plugins[i]) {\n s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n };\n\n /*=========================\n Events/Callbacks/Plugins Emitter\n ===========================*/\n function normalizeEventName (eventName) {\n if (eventName.indexOf('on') !== 0) {\n if (eventName[0] !== eventName[0].toUpperCase()) {\n eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1);\n }\n else {\n eventName = 'on' + eventName;\n }\n }\n return eventName;\n }\n s.emitterEventListeners = {\n \n };\n s.emit = function (eventName) {\n // Trigger callbacks\n if (s.params[eventName]) {\n s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n var i;\n // Trigger events\n if (s.emitterEventListeners[eventName]) {\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n // Trigger plugins\n if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n };\n s.on = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = [];\n s.emitterEventListeners[eventName].push(handler);\n return s;\n };\n s.off = function (eventName, handler) {\n var i;\n eventName = normalizeEventName(eventName);\n if (typeof handler === 'undefined') {\n // Remove all handlers for such event\n s.emitterEventListeners[eventName] = [];\n return s;\n }\n if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return;\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1);\n }\n return s;\n };\n s.once = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n var _handler = function () {\n handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);\n s.off(eventName, _handler);\n };\n s.on(eventName, _handler);\n return s;\n };\n\n // Accessibility tools\n s.a11y = {\n makeFocusable: function ($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n addRole: function ($el, role) {\n $el.attr('role', role);\n return $el;\n },\n \n addLabel: function ($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n \n disable: function ($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n \n enable: function ($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n \n onEnterKey: function (event) {\n if (event.keyCode !== 13) return;\n if ($(event.target).is(s.params.nextButton)) {\n s.onClickNext(event);\n if (s.isEnd) {\n s.a11y.notify(s.params.lastSlideMessage);\n }\n else {\n s.a11y.notify(s.params.nextSlideMessage);\n }\n }\n else if ($(event.target).is(s.params.prevButton)) {\n s.onClickPrev(event);\n if (s.isBeginning) {\n s.a11y.notify(s.params.firstSlideMessage);\n }\n else {\n s.a11y.notify(s.params.prevSlideMessage);\n }\n }\n if ($(event.target).is('.' + s.params.bulletClass)) {\n $(event.target)[0].click();\n }\n },\n \n liveRegion: $(''),\n \n notify: function (message) {\n var notification = s.a11y.liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n },\n init: function () {\n // Setup accessibility\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.a11y.makeFocusable(s.nextButton);\n s.a11y.addRole(s.nextButton, 'button');\n s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.a11y.makeFocusable(s.prevButton);\n s.a11y.addRole(s.prevButton, 'button');\n s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage);\n }\n \n $(s.container).append(s.a11y.liveRegion);\n },\n initPagination: function () {\n if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) {\n s.bullets.each(function () {\n var bullet = $(this);\n s.a11y.makeFocusable(bullet);\n s.a11y.addRole(bullet, 'button');\n s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1));\n });\n }\n },\n destroy: function () {\n if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove();\n }\n };\n \n\n /*=========================\n Init/Destroy\n ===========================*/\n s.init = function () {\n if (s.params.loop) s.createLoop();\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n if (s.params.scrollbarDraggable) {\n s.scrollbar.enableDraggable();\n }\n }\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n if (!s.params.loop) s.updateProgress();\n s.effects[s.params.effect].setTranslate();\n }\n if (s.params.loop) {\n s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit);\n }\n else {\n s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit);\n if (s.params.initialSlide === 0) {\n if (s.parallax && s.params.parallax) s.parallax.setTranslate();\n if (s.lazy && s.params.lazyLoading) {\n s.lazy.load();\n s.lazy.initialImageLoaded = true;\n }\n }\n }\n s.attachEvents();\n if (s.params.observer && s.support.observer) {\n s.initObservers();\n }\n if (s.params.preloadImages && !s.params.lazyLoading) {\n s.preloadImages();\n }\n if (s.params.autoplay) {\n s.startAutoplay();\n }\n if (s.params.keyboardControl) {\n if (s.enableKeyboardControl) s.enableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.enableMousewheelControl) s.enableMousewheelControl();\n }\n if (s.params.hashnav) {\n if (s.hashnav) s.hashnav.init();\n }\n if (s.params.a11y && s.a11y) s.a11y.init();\n s.emit('onInit', s);\n };\n \n // Cleanup dynamic styles\n s.cleanupStyles = function () {\n // Container\n s.container.removeClass(s.classNames.join(' ')).removeAttr('style');\n \n // Wrapper\n s.wrapper.removeAttr('style');\n \n // Slides\n if (s.slides && s.slides.length) {\n s.slides\n .removeClass([\n s.params.slideVisibleClass,\n s.params.slideActiveClass,\n s.params.slideNextClass,\n s.params.slidePrevClass\n ].join(' '))\n .removeAttr('style')\n .removeAttr('data-swiper-column')\n .removeAttr('data-swiper-row');\n }\n \n // Pagination/Bullets\n if (s.paginationContainer && s.paginationContainer.length) {\n s.paginationContainer.removeClass(s.params.paginationHiddenClass);\n }\n if (s.bullets && s.bullets.length) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n }\n \n // Buttons\n if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n \n // Scrollbar\n if (s.params.scrollbar && s.scrollbar) {\n if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style');\n if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style');\n }\n };\n \n // Destroy\n s.destroy = function (deleteInstance, cleanupStyles) {\n // Detach evebts\n s.detachEvents();\n // Stop autoplay\n s.stopAutoplay();\n // Disable draggable\n if (s.params.scrollbar && s.scrollbar) {\n if (s.params.scrollbarDraggable) {\n s.scrollbar.disableDraggable();\n }\n }\n // Destroy loop\n if (s.params.loop) {\n s.destroyLoop();\n }\n // Cleanup styles\n if (cleanupStyles) {\n s.cleanupStyles();\n }\n // Disconnect observer\n s.disconnectObservers();\n // Disable keyboard/mousewheel\n if (s.params.keyboardControl) {\n if (s.disableKeyboardControl) s.disableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.disableMousewheelControl) s.disableMousewheelControl();\n }\n // Disable a11y\n if (s.params.a11y && s.a11y) s.a11y.destroy();\n // Destroy callback\n s.emit('onDestroy');\n // Delete instance\n if (deleteInstance !== false) s = null;\n };\n \n s.init();\n \n\n \n // Return swiper instance\n return s;\n };\n \n\n /*==================================================\n Prototype\n ====================================================*/\n Swiper.prototype = {\n isSafari: (function () {\n var ua = navigator.userAgent.toLowerCase();\n return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n })(),\n isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent),\n isArray: function (arr) {\n return Object.prototype.toString.apply(arr) === '[object Array]';\n },\n /*==================================================\n Browser\n ====================================================*/\n browser: {\n ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled,\n ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1)\n },\n /*==================================================\n Devices\n ====================================================*/\n device: (function () {\n var ua = navigator.userAgent;\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\n var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n var iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\n return {\n ios: ipad || iphone || ipod,\n android: android\n };\n })(),\n /*==================================================\n Feature Detection\n ====================================================*/\n support: {\n touch : (window.Modernizr && Modernizr.touch === true) || (function () {\n return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch);\n })(),\n \n transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () {\n var div = document.createElement('div').style;\n return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div);\n })(),\n \n flexbox: (function () {\n var div = document.createElement('div').style;\n var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');\n for (var i = 0; i < styles.length; i++) {\n if (styles[i] in div) return true;\n }\n })(),\n \n observer: (function () {\n return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n })()\n },\n /*==================================================\n Plugins\n ====================================================*/\n plugins: {}\n };\n \n\n /*===========================\n Get Dom libraries\n ===========================*/\n var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7'];\n for (var i = 0; i < swiperDomPlugins.length; i++) {\n \tif (window[swiperDomPlugins[i]]) {\n \t\taddLibraryPlugin(window[swiperDomPlugins[i]]);\n \t}\n }\n // Required DOM Plugins\n var domLib;\n if (typeof Dom7 === 'undefined') {\n \tdomLib = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n \tdomLib = Dom7;\n }\n\n /*===========================\n Add .swiper plugin from Dom libraries\n ===========================*/\n function addLibraryPlugin(lib) {\n lib.fn.swiper = function (params) {\n var firstInstance;\n lib(this).each(function () {\n var s = new Swiper(this, params);\n if (!firstInstance) firstInstance = s;\n });\n return firstInstance;\n };\n }\n \n if (domLib) {\n if (!('transitionEnd' in domLib.fn)) {\n domLib.fn.transitionEnd = function (callback) {\n var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],\n i, j, dom = this;\n function fireCallBack(e) {\n /*jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i++) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i++) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n };\n }\n if (!('transform' in domLib.fn)) {\n domLib.fn.transform = function (transform) {\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;\n }\n return this;\n };\n }\n if (!('transition' in domLib.fn)) {\n domLib.fn.transition = function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;\n }\n return this;\n };\n }\n }\n\n window.Swiper = Swiper;\n})();\n/*===========================\nSwiper AMD Export\n===========================*/\nif (typeof(module) !== 'undefined')\n{\n module.exports = window.Swiper;\n}\nelse if (typeof define === 'function' && define.amd) {\n define([], function () {\n 'use strict';\n return window.Swiper;\n });\n}\n//# sourceMappingURL=maps/swiper.jquery.js.map\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/libs/swiper/js/maps/swiper.jquery.umd.min.js.map b/src/libs/swiper/js/maps/swiper.jquery.umd.min.js.map new file mode 100755 index 0000000..5c3ffbe --- /dev/null +++ b/src/libs/swiper/js/maps/swiper.jquery.umd.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["swiper.jquery.umd.js"],"names":["root","factory","define","amd","exports","module","require","Swiper","jQuery","this","$","addLibraryPlugin","lib","fn","swiper","params","firstInstance","each","s","container","round","a","Math","floor","autoplay","autoplayTimeoutId","setTimeout","loop","fixLoop","_slideNext","emit","isEnd","autoplayStopOnLast","stopAutoplay","_slideTo","findElementInEvent","e","selector","el","target","is","parents","nodeType","found","index","_el","length","initObserver","options","ObserverFunc","window","MutationObserver","WebkitMutationObserver","observer","mutations","forEach","mutation","onResize","observe","attributes","childList","characterData","observers","push","handleKeyboard","originalEvent","kc","keyCode","charCode","allowSwipeToNext","isHorizontal","allowSwipeToPrev","shiftKey","altKey","ctrlKey","metaKey","document","activeElement","nodeName","toLowerCase","inView","windowScroll","left","pageXOffset","top","pageYOffset","windowWidth","innerWidth","windowHeight","innerHeight","swiperOffset","offset","rtl","scrollLeft","swiperCoord","width","height","i","point","preventDefault","returnValue","slideNext","slidePrev","handleMousewheel","we","mousewheel","event","delta","rtlFactor","mousewheelForceToAxis","abs","wheelDeltaX","wheelDeltaY","detail","deltaX","deltaY","mousewheelInvert","freeMode","position","getWrapperTranslate","mousewheelSensitivity","wasBeginning","isBeginning","wasEnd","minTranslate","maxTranslate","setWrapperTransition","setWrapperTranslate","updateProgress","updateActiveIndex","updateClasses","freeModeSticky","clearTimeout","timeout","slideReset","lazyLoading","lazy","load","Date","getTime","lastScrollTime","animating","mousewheelReleaseOnEdges","setParallaxTransform","progress","p","pX","pY","attr","indexOf","parseInt","transform","normalizeEventName","eventName","toUpperCase","substring","defaults","direction","touchEventsTarget","initialSlide","speed","autoplayDisableOnInteraction","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","freeModeMomentum","freeModeMomentumRatio","freeModeMomentumBounce","freeModeMomentumBounceRatio","freeModeMinimumVelocity","autoHeight","setWrapperSize","virtualTranslate","effect","coverflow","rotate","stretch","depth","modifier","slideShadows","flip","limitRotation","cube","shadow","shadowOffset","shadowScale","fade","crossFade","parallax","scrollbar","scrollbarHide","scrollbarDraggable","scrollbarSnapOnRelease","keyboardControl","mousewheelControl","hashnav","breakpoints","undefined","spaceBetween","slidesPerView","slidesPerColumn","slidesPerColumnFill","slidesPerGroup","centeredSlides","slidesOffsetBefore","slidesOffsetAfter","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","onlyExternal","threshold","touchMoveStopPropagation","uniqueNavElements","pagination","paginationElement","paginationClickable","paginationHide","paginationBulletRender","paginationProgressRender","paginationFractionRender","paginationCustomRender","paginationType","resistance","resistanceRatio","nextButton","prevButton","watchSlidesProgress","watchSlidesVisibility","grabCursor","preventClicks","preventClicksPropagation","slideToClickedSlide","lazyLoadingInPrevNext","lazyLoadingInPrevNextAmount","lazyLoadingOnTransitionStart","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","control","controlInverse","controlBy","swipeHandler","noSwiping","noSwipingClass","slideClass","slideActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slidePrevClass","wrapperClass","bulletClass","bulletActiveClass","buttonDisabledClass","paginationCurrentClass","paginationTotalClass","paginationHiddenClass","paginationProgressbarClass","observeParents","a11y","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","runCallbacksOnInit","initialVirtualTranslate","originalParams","param","Dom7","deepParam","def","deepDef","classNames","Zepto","currentBreakpoint","getActiveBreakpoint","breakpoint","points","hasOwnProperty","sort","b","setBreakpoint","breakPointsParams","needsReLoop","destroyLoop","reLoop","swipers","data","support","flexbox","transforms3d","touch","wrapper","children","paginationContainer","find","addClass","dir","css","wrongRTL","device","android","join","translate","velocity","lockSwipeToNext","lockSwipeToPrev","lockSwipes","unlockSwipeToNext","unlockSwipeToPrev","unlockSwipes","style","cursor","imagesToLoad","imagesLoaded","loadImage","imgElement","src","srcset","checkForComplete","callback","onReady","image","complete","Image","onload","onerror","_onReady","update","currentSrc","getAttribute","autoplaying","autoplayPaused","startAutoplay","internal","pauseAutoplay","transitionEnd","snapGrid","updateAutoHeight","slide","slides","eq","activeIndex","newHeight","offsetHeight","updateContainerSize","clientWidth","clientHeight","size","updateSlidesSize","slidesGrid","slidesSizesGrid","slidePosition","prevSlideSize","parseFloat","replace","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesNumberEvenToRows","ceil","max","slideSize","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","order","margin-top","outerWidth","outerHeight","swiperSlideSize","newSlidesGrid","updateSlidesOffset","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","removeClass","slideProgress","slideBefore","slideAfter","isVisible","translatesDiff","newActiveIndex","snapIndex","previousIndex","activeSlide","nextSlide","next","prevSlide","prev","current","total","bullets","text","scale","scaleX","scaleY","transition","html","disable","enable","updatePagination","paginationHTML","numberOfBullets","initPagination","updateTranslate","forceSetTranslate","newTranslate","min","set","translated","controller","spline","slideTo","forceUpdatePagination","slideChangedBySlideTo","desktopEvents","navigator","pointerEnabled","msPointerEnabled","touchEvents","start","move","end","initEvents","detach","actionDom","action","moveCapture","nested","browser","ie","onTouchStart","onTouchMove","onTouchEnd","ios","onClickNext","onEnterKey","onClickPrev","onClickIndex","attachEvents","detachEvents","allowClick","stopPropagation","stopImmediatePropagation","updateClickedSlide","slideFound","clickedSlide","clickedIndex","realIndex","slideToIndex","isTouched","isMoved","allowTouchCallbacks","touchStartTime","isScrolling","currentTranslate","startTranslate","allowThresholdMove","clickTimeout","allowMomentumBounce","formElements","lastClickTime","now","velocities","touches","startX","startY","currentX","currentY","diff","isTouchEvent","startMoving","type","which","targetTouches","pageX","pageY","swipeDirection","blur","preventedByNestedSwiper","atan2","PI","ieTouch","trigger","disableParentSwiper","pow","time","touchEndTime","timeDiff","hasClass","toggleClass","currentPos","lastMoveEvent","pop","velocityEvent","distance","momentumDuration","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","j","onTransitionStart","onTransitionEnd","stopIndex","groupSize","ratio","slideIndex","runCallbacks","setHash","clientLeft","_slidePrev","duration","byController","effects","setTransition","x","y","z","setTranslate","getTranslate","axis","matrix","curTransform","curStyle","transformMatrix","getComputedStyle","WebKitCSSMatrix","webkitTransform","split","map","MozTransform","OTransform","MsTransform","msTransform","getPropertyValue","toString","m41","m42","initObservers","containerParents","disconnectObservers","disconnect","createLoop","remove","prependSlides","appendSlides","append","cloneNode","prepend","removeAttr","updatePosition","oldIndex","newIndex","appendSlide","prependSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","tx","ty","slideOpacity","opacity","eventTriggered","triggerEvents","rotateY","rotateX","zIndex","shadowBefore","shadowAfter","cubeShadow","wrapperRotate","slideAngle","tz","-webkit-transform-origin","-moz-transform-origin","-ms-transform-origin","transform-origin","shadowAngle","multiplier","sin","cos","scale1","scale2","zFactor","isSafari","isUiWebView","center","slideOffset","offsetMultiplier","translateZ","translateY","translateX","slideTransform","ws","perspectiveOrigin","initialImageLoaded","loadImageInSlide","loadInDuplicate","img","add","_img","background","slideOriginalIndex","originalSlide","duplicatedSlide","amount","spv","maxIndex","minIndex","setDragPosition","sb","pointerPosition","clientX","clientY","track","dragSize","positionMin","moveDivider","positionMax","dragStart","dragTimeout","drag","dragMove","dragEnd","enableDraggable","on","disableDraggable","off","trackSize","offsetWidth","divider","display","newPos","newSize","LinearSpline","lastIndex","i1","i3","interpolate","x2","binarySearch","guess","array","val","getInterpolateFunction","c","setControlledTranslate","controlledTranslate","controlled","isArray","setControlledTransition","init","initialized","hash","location","slideHash","disableKeyboardControl","enableKeyboardControl","WheelEvent","onmousewheel","disableMousewheelControl","enableMousewheelControl","parallaxDuration","_plugins","plugin","plugins","callPlugins","arguments","emitterEventListeners","handler","splice","once","_handler","makeFocusable","$el","addRole","role","addLabel","label","notify","click","liveRegion","message","notification","bullet","destroy","cleanupStyles","deleteInstance","prototype","ua","userAgent","test","arr","Object","apply","msMaxTouchPoints","maxTouchPoints","match","ipad","ipod","iphone","Modernizr","DocumentTouch","csstransforms3d","div","createElement","styles","domLib","fireCallBack","call","events","dom","elStyle","webkitTransitionDuration","MsTransitionDuration","msTransitionDuration","MozTransitionDuration","OTransitionDuration","transitionDuration"],"mappings":"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","file":"swiper.jquery.umd.min.js","sourcesContent":["/**\n * Swiper 3.3.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * \n * http://www.idangero.us/swiper/\n * \n * Copyright 2016, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n * \n * Licensed under MIT\n * \n * Released on: February 7, 2016\n */\n(function (root, factory) {\n\t'use strict';\n\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// Node. Does not work with strict CommonJS, but\n\t\t// only CommonJS-like environments that support module.exports,\n\t\t// like Node.\n\t\tmodule.exports = factory(require('jquery'));\n\t} else {\n\t\t// Browser globals (root is window)\n\t\troot.Swiper = factory(root.jQuery);\n\t}\n}(this, function ($) {\n\t'use strict';\n\n /*===========================\n Swiper\n ===========================*/\n var Swiper = function (container, params) {\n if (!(this instanceof Swiper)) return new Swiper(container, params);\n\n var defaults = {\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n // autoplay\n autoplay: false,\n autoplayDisableOnInteraction: true,\n autoplayStopOnLast: false,\n // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n iOSEdgeSwipeDetection: false,\n iOSEdgeSwipeThreshold: 20,\n // Free mode\n freeMode: false,\n freeModeMomentum: true,\n freeModeMomentumRatio: 1,\n freeModeMomentumBounce: true,\n freeModeMomentumBounceRatio: 1,\n freeModeSticky: false,\n freeModeMinimumVelocity: 0.02,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n coverflow: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows : true\n },\n flip: {\n slideShadows : true,\n limitRotation: true\n },\n cube: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n },\n fade: {\n crossFade: false\n },\n // Parallax\n parallax: false,\n // Scrollbar\n scrollbar: null,\n scrollbarHide: true,\n scrollbarDraggable: false,\n scrollbarSnapOnRelease: false,\n // Keyboard Mousewheel\n keyboardControl: false,\n mousewheelControl: false,\n mousewheelReleaseOnEdges: false,\n mousewheelInvert: false,\n mousewheelForceToAxis: false,\n mousewheelSensitivity: 1,\n // Hash Navigation\n hashnav: false,\n // Breakpoints\n breakpoints: undefined,\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n onlyExternal: false,\n threshold: 0,\n touchMoveStopPropagation: true,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Pagination\n pagination: null,\n paginationElement: 'span',\n paginationClickable: false,\n paginationHide: false,\n paginationBulletRender: null,\n paginationProgressRender: null,\n paginationFractionRender: null,\n paginationCustomRender: null,\n paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom'\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Next/prev buttons\n nextButton: null,\n prevButton: null,\n // Progress\n watchSlidesProgress: false,\n watchSlidesVisibility: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Lazy Loading\n lazyLoading: false,\n lazyLoadingInPrevNext: false,\n lazyLoadingInPrevNextAmount: 1,\n lazyLoadingOnTransitionStart: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n // Control\n control: undefined,\n controlInverse: false,\n controlBy: 'slide', //or 'container'\n // Swiping/no swiping\n allowSwipeToPrev: true,\n allowSwipeToNext: true,\n swipeHandler: null, //'.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n // NS\n slideClass: 'swiper-slide',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n buttonDisabledClass: 'swiper-button-disabled',\n paginationCurrentClass: 'swiper-pagination-current',\n paginationTotalClass: 'swiper-pagination-total',\n paginationHiddenClass: 'swiper-pagination-hidden',\n paginationProgressbarClass: 'swiper-pagination-progressbar',\n // Observer\n observer: false,\n observeParents: false,\n // Accessibility\n a11y: false,\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n // Callbacks\n runCallbacksOnInit: true\n /*\n Callbacks:\n onInit: function (swiper)\n onDestroy: function (swiper)\n onClick: function (swiper, e)\n onTap: function (swiper, e)\n onDoubleTap: function (swiper, e)\n onSliderMove: function (swiper, e)\n onSlideChangeStart: function (swiper)\n onSlideChangeEnd: function (swiper)\n onTransitionStart: function (swiper)\n onTransitionEnd: function (swiper)\n onImagesReady: function (swiper)\n onProgress: function (swiper, progress)\n onTouchStart: function (swiper, e)\n onTouchMove: function (swiper, e)\n onTouchMoveOpposite: function (swiper, e)\n onTouchEnd: function (swiper, e)\n onReachBeginning: function (swiper)\n onReachEnd: function (swiper)\n onSetTransition: function (swiper, duration)\n onSetTranslate: function (swiper, translate)\n onAutoplayStart: function (swiper)\n onAutoplayStop: function (swiper),\n onLazyImageLoad: function (swiper, slide, image)\n onLazyImageReady: function (swiper, slide, image)\n */\n \n };\n var initialVirtualTranslate = params && params.virtualTranslate;\n \n params = params || {};\n var originalParams = {};\n for (var param in params) {\n if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) {\n originalParams[param] = {};\n for (var deepParam in params[param]) {\n originalParams[param][deepParam] = params[param][deepParam];\n }\n }\n else {\n originalParams[param] = params[param];\n }\n }\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n else if (typeof params[def] === 'object') {\n for (var deepDef in defaults[def]) {\n if (typeof params[def][deepDef] === 'undefined') {\n params[def][deepDef] = defaults[def][deepDef];\n }\n }\n }\n }\n \n // Swiper\n var s = this;\n \n // Params\n s.params = params;\n s.originalParams = originalParams;\n \n // Classname\n s.classNames = [];\n /*=========================\n Dom Library and plugins\n ===========================*/\n if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){\n $ = Dom7;\n }\n if (typeof $ === 'undefined') {\n if (typeof Dom7 === 'undefined') {\n $ = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n $ = Dom7;\n }\n if (!$) return;\n }\n // Export it to Swiper instance\n s.$ = $;\n \n /*=========================\n Breakpoints\n ===========================*/\n s.currentBreakpoint = undefined;\n s.getActiveBreakpoint = function () {\n //Get breakpoint for window width\n if (!s.params.breakpoints) return false;\n var breakpoint = false;\n var points = [], point;\n for ( point in s.params.breakpoints ) {\n if (s.params.breakpoints.hasOwnProperty(point)) {\n points.push(point);\n }\n }\n points.sort(function (a, b) {\n return parseInt(a, 10) > parseInt(b, 10);\n });\n for (var i = 0; i < points.length; i++) {\n point = points[i];\n if (point >= window.innerWidth && !breakpoint) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n };\n s.setBreakpoint = function () {\n //Set breakpoint for window width and update parameters\n var breakpoint = s.getActiveBreakpoint();\n if (breakpoint && s.currentBreakpoint !== breakpoint) {\n var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;\n var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);\n for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\n if(needsReLoop && s.destroyLoop) {\n s.reLoop(true);\n }\n }\n };\n // Set breakpoint on load\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n /*=========================\n Preparation - Define Container, Wrapper and Pagination\n ===========================*/\n s.container = $(container);\n if (s.container.length === 0) return;\n if (s.container.length > 1) {\n var swipers = [];\n s.container.each(function () {\n var container = this;\n swipers.push(new Swiper(this, params));\n });\n return swipers;\n }\n \n // Save instance in container HTML Element and in data\n s.container[0].swiper = s;\n s.container.data('swiper', s);\n \n s.classNames.push('swiper-container-' + s.params.direction);\n \n if (s.params.freeMode) {\n s.classNames.push('swiper-container-free-mode');\n }\n if (!s.support.flexbox) {\n s.classNames.push('swiper-container-no-flexbox');\n s.params.slidesPerColumn = 1;\n }\n if (s.params.autoHeight) {\n s.classNames.push('swiper-container-autoheight');\n }\n // Enable slides progress when required\n if (s.params.parallax || s.params.watchSlidesVisibility) {\n s.params.watchSlidesProgress = true;\n }\n // Coverflow / 3D\n if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {\n if (s.support.transforms3d) {\n s.params.watchSlidesProgress = true;\n s.classNames.push('swiper-container-3d');\n }\n else {\n s.params.effect = 'slide';\n }\n }\n if (s.params.effect !== 'slide') {\n s.classNames.push('swiper-container-' + s.params.effect);\n }\n if (s.params.effect === 'cube') {\n s.params.resistanceRatio = 0;\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.centeredSlides = false;\n s.params.spaceBetween = 0;\n s.params.virtualTranslate = true;\n s.params.setWrapperSize = false;\n }\n if (s.params.effect === 'fade' || s.params.effect === 'flip') {\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.watchSlidesProgress = true;\n s.params.spaceBetween = 0;\n s.params.setWrapperSize = false;\n if (typeof initialVirtualTranslate === 'undefined') {\n s.params.virtualTranslate = true;\n }\n }\n \n // Grab Cursor\n if (s.params.grabCursor && s.support.touch) {\n s.params.grabCursor = false;\n }\n \n // Wrapper\n s.wrapper = s.container.children('.' + s.params.wrapperClass);\n \n // Pagination\n if (s.params.pagination) {\n s.paginationContainer = $(s.params.pagination);\n if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {\n s.paginationContainer = s.container.find(s.params.pagination);\n }\n \n if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {\n s.paginationContainer.addClass('swiper-pagination-clickable');\n }\n else {\n s.params.paginationClickable = false;\n }\n s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType);\n }\n // Next/Prev Buttons\n if (s.params.nextButton || s.params.prevButton) {\n if (s.params.nextButton) {\n s.nextButton = $(s.params.nextButton);\n if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {\n s.nextButton = s.container.find(s.params.nextButton);\n }\n }\n if (s.params.prevButton) {\n s.prevButton = $(s.params.prevButton);\n if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {\n s.prevButton = s.container.find(s.params.prevButton);\n }\n }\n }\n \n // Is Horizontal\n s.isHorizontal = function () {\n return s.params.direction === 'horizontal';\n };\n // s.isH = isH;\n \n // RTL\n s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');\n if (s.rtl) {\n s.classNames.push('swiper-container-rtl');\n }\n \n // Wrong RTL support\n if (s.rtl) {\n s.wrongRTL = s.wrapper.css('display') === '-webkit-box';\n }\n \n // Columns\n if (s.params.slidesPerColumn > 1) {\n s.classNames.push('swiper-container-multirow');\n }\n \n // Check for Android\n if (s.device.android) {\n s.classNames.push('swiper-container-android');\n }\n \n // Add classes\n s.container.addClass(s.classNames.join(' '));\n \n // Translate\n s.translate = 0;\n \n // Progress\n s.progress = 0;\n \n // Velocity\n s.velocity = 0;\n \n /*=========================\n Locks, unlocks\n ===========================*/\n s.lockSwipeToNext = function () {\n s.params.allowSwipeToNext = false;\n };\n s.lockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = false;\n };\n s.lockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;\n };\n s.unlockSwipeToNext = function () {\n s.params.allowSwipeToNext = true;\n };\n s.unlockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = true;\n };\n s.unlockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;\n };\n \n /*=========================\n Round helper\n ===========================*/\n function round(a) {\n return Math.floor(a);\n }\n /*=========================\n Set grab cursor\n ===========================*/\n if (s.params.grabCursor) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grab';\n s.container[0].style.cursor = '-moz-grab';\n s.container[0].style.cursor = 'grab';\n }\n /*=========================\n Update on Images Ready\n ===========================*/\n s.imagesToLoad = [];\n s.imagesLoaded = 0;\n \n s.loadImage = function (imgElement, src, srcset, checkForComplete, callback) {\n var image;\n function onReady () {\n if (callback) callback();\n }\n if (!imgElement.complete || !checkForComplete) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n \n } else {//image already loaded...\n onReady();\n }\n };\n s.preloadImages = function () {\n s.imagesToLoad = s.container.find('img');\n function _onReady() {\n if (typeof s === 'undefined' || s === null) return;\n if (s.imagesLoaded !== undefined) s.imagesLoaded++;\n if (s.imagesLoaded === s.imagesToLoad.length) {\n if (s.params.updateOnImagesReady) s.update();\n s.emit('onImagesReady', s);\n }\n }\n for (var i = 0; i < s.imagesToLoad.length; i++) {\n s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), true, _onReady);\n }\n };\n \n /*=========================\n Autoplay\n ===========================*/\n s.autoplayTimeoutId = undefined;\n s.autoplaying = false;\n s.autoplayPaused = false;\n function autoplay() {\n s.autoplayTimeoutId = setTimeout(function () {\n if (s.params.loop) {\n s.fixLoop();\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!s.isEnd) {\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!params.autoplayStopOnLast) {\n s._slideTo(0);\n s.emit('onAutoplay', s);\n }\n else {\n s.stopAutoplay();\n }\n }\n }\n }, s.params.autoplay);\n }\n s.startAutoplay = function () {\n if (typeof s.autoplayTimeoutId !== 'undefined') return false;\n if (!s.params.autoplay) return false;\n if (s.autoplaying) return false;\n s.autoplaying = true;\n s.emit('onAutoplayStart', s);\n autoplay();\n };\n s.stopAutoplay = function (internal) {\n if (!s.autoplayTimeoutId) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplaying = false;\n s.autoplayTimeoutId = undefined;\n s.emit('onAutoplayStop', s);\n };\n s.pauseAutoplay = function (speed) {\n if (s.autoplayPaused) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplayPaused = true;\n if (speed === 0) {\n s.autoplayPaused = false;\n autoplay();\n }\n else {\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.autoplayPaused = false;\n if (!s.autoplaying) {\n s.stopAutoplay();\n }\n else {\n autoplay();\n }\n });\n }\n };\n /*=========================\n Min/Max Translate\n ===========================*/\n s.minTranslate = function () {\n return (-s.snapGrid[0]);\n };\n s.maxTranslate = function () {\n return (-s.snapGrid[s.snapGrid.length - 1]);\n };\n /*=========================\n Slider/slides sizes\n ===========================*/\n s.updateAutoHeight = function () {\n // Update Height\n var slide = s.slides.eq(s.activeIndex)[0];\n if (typeof slide !== 'undefined') {\n var newHeight = slide.offsetHeight;\n if (newHeight) s.wrapper.css('height', newHeight + 'px');\n }\n };\n s.updateContainerSize = function () {\n var width, height;\n if (typeof s.params.width !== 'undefined') {\n width = s.params.width;\n }\n else {\n width = s.container[0].clientWidth;\n }\n if (typeof s.params.height !== 'undefined') {\n height = s.params.height;\n }\n else {\n height = s.container[0].clientHeight;\n }\n if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) {\n return;\n }\n \n //Subtract paddings\n width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10);\n height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10);\n \n // Store values\n s.width = width;\n s.height = height;\n s.size = s.isHorizontal() ? s.width : s.height;\n };\n \n s.updateSlidesSize = function () {\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n s.snapGrid = [];\n s.slidesGrid = [];\n s.slidesSizesGrid = [];\n \n var spaceBetween = s.params.spaceBetween,\n slidePosition = -s.params.slidesOffsetBefore,\n i,\n prevSlideSize = 0,\n index = 0;\n if (typeof s.size === 'undefined') return;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size;\n }\n \n s.virtualSize = -spaceBetween;\n // reset margins\n if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''});\n else s.slides.css({marginRight: '', marginBottom: ''});\n \n var slidesNumberEvenToRows;\n if (s.params.slidesPerColumn > 1) {\n if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) {\n slidesNumberEvenToRows = s.slides.length;\n }\n else {\n slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn;\n }\n if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn);\n }\n }\n \n // Calc slides\n var slideSize;\n var slidesPerColumn = s.params.slidesPerColumn;\n var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length);\n for (i = 0; i < s.slides.length; i++) {\n slideSize = 0;\n var slide = s.slides.eq(i);\n if (s.params.slidesPerColumn > 1) {\n // Set slides order\n var newSlideOrderIndex;\n var column, row;\n if (s.params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - column * slidesPerColumn;\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) {\n if (++row >= slidesPerColumn) {\n row = 0;\n column++;\n }\n }\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;\n slide\n .css({\n '-webkit-box-ordinal-group': newSlideOrderIndex,\n '-moz-box-ordinal-group': newSlideOrderIndex,\n '-ms-flex-order': newSlideOrderIndex,\n '-webkit-order': newSlideOrderIndex,\n 'order': newSlideOrderIndex\n });\n }\n else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide\n .css({\n 'margin-top': (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px')\n })\n .attr('data-swiper-column', column)\n .attr('data-swiper-row', row);\n \n }\n if (slide.css('display') === 'none') continue;\n if (s.params.slidesPerView === 'auto') {\n slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n if (s.params.roundLengths) slideSize = round(slideSize);\n }\n else {\n slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView;\n if (s.params.roundLengths) slideSize = round(slideSize);\n \n if (s.isHorizontal()) {\n s.slides[i].style.width = slideSize + 'px';\n }\n else {\n s.slides[i].style.height = slideSize + 'px';\n }\n }\n s.slides[i].swiperSlideSize = slideSize;\n s.slidesSizesGrid.push(slideSize);\n \n \n if (s.params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n }\n else {\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n \n s.virtualSize += slideSize + spaceBetween;\n \n prevSlideSize = slideSize;\n \n index ++;\n }\n s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter;\n var newSlidesGrid;\n \n if (\n s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) {\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n if (!s.support.flexbox || s.params.setWrapperSize) {\n if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n \n if (s.params.slidesPerColumn > 1) {\n s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows;\n s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween;\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n if (s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]);\n }\n s.snapGrid = newSlidesGrid;\n }\n }\n \n // Remove last grid elements depending on width\n if (!s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] <= s.virtualSize - s.size) {\n newSlidesGrid.push(s.snapGrid[i]);\n }\n }\n s.snapGrid = newSlidesGrid;\n if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) {\n s.snapGrid.push(s.virtualSize - s.size);\n }\n }\n if (s.snapGrid.length === 0) s.snapGrid = [0];\n \n if (s.params.spaceBetween !== 0) {\n if (s.isHorizontal()) {\n if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'});\n else s.slides.css({marginRight: spaceBetween + 'px'});\n }\n else s.slides.css({marginBottom: spaceBetween + 'px'});\n }\n if (s.params.watchSlidesProgress) {\n s.updateSlidesOffset();\n }\n };\n s.updateSlidesOffset = function () {\n for (var i = 0; i < s.slides.length; i++) {\n s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop;\n }\n };\n \n /*=========================\n Slider/slides progress\n ===========================*/\n s.updateSlidesProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n if (s.slides.length === 0) return;\n if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset();\n \n var offsetCenter = -translate;\n if (s.rtl) offsetCenter = translate;\n \n // Visible Slides\n s.slides.removeClass(s.params.slideVisibleClass);\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides[i];\n var slideProgress = (offsetCenter - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween);\n if (s.params.watchSlidesVisibility) {\n var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n var slideAfter = slideBefore + s.slidesSizesGrid[i];\n var isVisible =\n (slideBefore >= 0 && slideBefore < s.size) ||\n (slideAfter > 0 && slideAfter <= s.size) ||\n (slideBefore <= 0 && slideAfter >= s.size);\n if (isVisible) {\n s.slides.eq(i).addClass(s.params.slideVisibleClass);\n }\n }\n slide.progress = s.rtl ? -slideProgress : slideProgress;\n }\n };\n s.updateProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n var wasBeginning = s.isBeginning;\n var wasEnd = s.isEnd;\n if (translatesDiff === 0) {\n s.progress = 0;\n s.isBeginning = s.isEnd = true;\n }\n else {\n s.progress = (translate - s.minTranslate()) / (translatesDiff);\n s.isBeginning = s.progress <= 0;\n s.isEnd = s.progress >= 1;\n }\n if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s);\n if (s.isEnd && !wasEnd) s.emit('onReachEnd', s);\n \n if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate);\n s.emit('onProgress', s, s.progress);\n };\n s.updateActiveIndex = function () {\n var translate = s.rtl ? s.translate : -s.translate;\n var newActiveIndex, i, snapIndex;\n for (i = 0; i < s.slidesGrid.length; i ++) {\n if (typeof s.slidesGrid[i + 1] !== 'undefined') {\n if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) {\n newActiveIndex = i;\n }\n else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) {\n newActiveIndex = i + 1;\n }\n }\n else {\n if (translate >= s.slidesGrid[i]) {\n newActiveIndex = i;\n }\n }\n }\n // Normalize slideIndex\n if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0;\n // for (i = 0; i < s.slidesGrid.length; i++) {\n // if (- translate >= s.slidesGrid[i]) {\n // newActiveIndex = i;\n // }\n // }\n snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup);\n if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1;\n \n if (newActiveIndex === s.activeIndex) {\n return;\n }\n s.snapIndex = snapIndex;\n s.previousIndex = s.activeIndex;\n s.activeIndex = newActiveIndex;\n s.updateClasses();\n };\n \n /*=========================\n Classes\n ===========================*/\n s.updateClasses = function () {\n s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass);\n var activeSlide = s.slides.eq(s.activeIndex);\n // Active classes\n activeSlide.addClass(s.params.slideActiveClass);\n // Next Slide\n var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n if (s.params.loop && nextSlide.length === 0) {\n s.slides.eq(0).addClass(s.params.slideNextClass);\n }\n // Prev Slide\n var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\n if (s.params.loop && prevSlide.length === 0) {\n s.slides.eq(-1).addClass(s.params.slidePrevClass);\n }\n \n // Pagination\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n // Current/Total\n var current,\n total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n if (s.params.loop) {\n current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup);\n if (current > s.slides.length - 1 - s.loopedSlides * 2) {\n current = current - (s.slides.length - s.loopedSlides * 2);\n }\n if (current > total - 1) current = current - total;\n if (current < 0 && s.params.paginationType !== 'bullets') current = total + current;\n }\n else {\n if (typeof s.snapIndex !== 'undefined') {\n current = s.snapIndex;\n }\n else {\n current = s.activeIndex || 0;\n }\n }\n // Types\n if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n if (s.paginationContainer.length > 1) {\n s.bullets.each(function () {\n if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass);\n });\n }\n else {\n s.bullets.eq(current).addClass(s.params.bulletActiveClass);\n }\n }\n if (s.params.paginationType === 'fraction') {\n s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1);\n s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total);\n }\n if (s.params.paginationType === 'progress') {\n var scale = (current + 1) / total,\n scaleX = scale,\n scaleY = 1;\n if (!s.isHorizontal()) {\n scaleY = scale;\n scaleX = 1;\n }\n s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed);\n }\n if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) {\n s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total));\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n \n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n if (s.isBeginning) {\n s.prevButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton);\n }\n else {\n s.prevButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton);\n }\n }\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n if (s.isEnd) {\n s.nextButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton);\n }\n else {\n s.nextButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton);\n }\n }\n }\n };\n \n /*=========================\n Pagination\n ===========================*/\n s.updatePagination = function () {\n if (!s.params.pagination) return;\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n var paginationHTML = '';\n if (s.params.paginationType === 'bullets') {\n var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n for (var i = 0; i < numberOfBullets; i++) {\n if (s.params.paginationBulletRender) {\n paginationHTML += s.params.paginationBulletRender(i, s.params.bulletClass);\n }\n else {\n paginationHTML += '<' + s.params.paginationElement+' class=\"' + s.params.bulletClass + '\">';\n }\n }\n s.paginationContainer.html(paginationHTML);\n s.bullets = s.paginationContainer.find('.' + s.params.bulletClass);\n if (s.params.paginationClickable && s.params.a11y && s.a11y) {\n s.a11y.initPagination();\n }\n }\n if (s.params.paginationType === 'fraction') {\n if (s.params.paginationFractionRender) {\n paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass);\n }\n else {\n paginationHTML =\n '' +\n ' / ' +\n '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType === 'progress') {\n if (s.params.paginationProgressRender) {\n paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass);\n }\n else {\n paginationHTML = '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType !== 'custom') {\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n };\n /*=========================\n Common update method\n ===========================*/\n s.update = function (updateTranslate) {\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updateProgress();\n s.updatePagination();\n s.updateClasses();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n function forceSetTranslate() {\n newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n }\n if (updateTranslate) {\n var translated, newTranslate;\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n if (s.params.freeMode) {\n forceSetTranslate();\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n translated = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n translated = s.slideTo(s.activeIndex, 0, false, true);\n }\n if (!translated) {\n forceSetTranslate();\n }\n }\n }\n else if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n };\n \n /*=========================\n Resize Handler\n ===========================*/\n s.onResize = function (forceUpdatePagination) {\n //Breakpoints\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n // Disable locks on resize\n var allowSwipeToPrev = s.params.allowSwipeToPrev;\n var allowSwipeToNext = s.params.allowSwipeToNext;\n s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true;\n \n s.updateContainerSize();\n s.updateSlidesSize();\n if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n var slideChangedBySlideTo = false;\n if (s.params.freeMode) {\n var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n \n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n s.updateClasses();\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true);\n }\n }\n if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) {\n s.lazy.load();\n }\n // Return locks after resize\n s.params.allowSwipeToPrev = allowSwipeToPrev;\n s.params.allowSwipeToNext = allowSwipeToNext;\n };\n \n /*=========================\n Events\n ===========================*/\n \n //Define Touch Events\n var desktopEvents = ['mousedown', 'mousemove', 'mouseup'];\n if (window.navigator.pointerEnabled) desktopEvents = ['pointerdown', 'pointermove', 'pointerup'];\n else if (window.navigator.msPointerEnabled) desktopEvents = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];\n s.touchEvents = {\n start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : desktopEvents[0],\n move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : desktopEvents[1],\n end : s.support.touch || !s.params.simulateTouch ? 'touchend' : desktopEvents[2]\n };\n \n \n // WP8 Touch Events Fix\n if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) {\n (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction);\n }\n \n // Attach/detach events\n s.initEvents = function (detach) {\n var actionDom = detach ? 'off' : 'on';\n var action = detach ? 'removeEventListener' : 'addEventListener';\n var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0];\n var target = s.support.touch ? touchEventsTarget : document;\n \n var moveCapture = s.params.nested ? true : false;\n \n //Touch Events\n if (s.browser.ie) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n target[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n target[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n else {\n if (s.support.touch) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n if (params.simulateTouch && !s.device.ios && !s.device.android) {\n touchEventsTarget[action]('mousedown', s.onTouchStart, false);\n document[action]('mousemove', s.onTouchMove, moveCapture);\n document[action]('mouseup', s.onTouchEnd, false);\n }\n }\n window[action]('resize', s.onResize);\n \n // Next, Prev, Index\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.nextButton[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.prevButton[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.pagination && s.params.paginationClickable) {\n s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);\n if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);\n }\n \n // Prevent Links Clicks\n if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);\n };\n s.attachEvents = function () {\n s.initEvents();\n };\n s.detachEvents = function () {\n s.initEvents(true);\n };\n \n /*=========================\n Handle Clicks\n ===========================*/\n // Prevent Clicks\n s.allowClick = true;\n s.preventClicks = function (e) {\n if (!s.allowClick) {\n if (s.params.preventClicks) e.preventDefault();\n if (s.params.preventClicksPropagation && s.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n };\n // Clicks\n s.onClickNext = function (e) {\n e.preventDefault();\n if (s.isEnd && !s.params.loop) return;\n s.slideNext();\n };\n s.onClickPrev = function (e) {\n e.preventDefault();\n if (s.isBeginning && !s.params.loop) return;\n s.slidePrev();\n };\n s.onClickIndex = function (e) {\n e.preventDefault();\n var index = $(this).index() * s.params.slidesPerGroup;\n if (s.params.loop) index = index + s.loopedSlides;\n s.slideTo(index);\n };\n \n /*=========================\n Handle Touches\n ===========================*/\n function findElementInEvent(e, selector) {\n var el = $(e.target);\n if (!el.is(selector)) {\n if (typeof selector === 'string') {\n el = el.parents(selector);\n }\n else if (selector.nodeType) {\n var found;\n el.parents().each(function (index, _el) {\n if (_el === selector) found = selector;\n });\n if (!found) return undefined;\n else return selector;\n }\n }\n if (el.length === 0) {\n return undefined;\n }\n return el[0];\n }\n s.updateClickedSlide = function (e) {\n var slide = findElementInEvent(e, '.' + s.params.slideClass);\n var slideFound = false;\n if (slide) {\n for (var i = 0; i < s.slides.length; i++) {\n if (s.slides[i] === slide) slideFound = true;\n }\n }\n \n if (slide && slideFound) {\n s.clickedSlide = slide;\n s.clickedIndex = $(slide).index();\n }\n else {\n s.clickedSlide = undefined;\n s.clickedIndex = undefined;\n return;\n }\n if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {\n var slideToIndex = s.clickedIndex,\n realIndex,\n duplicatedSlides;\n if (s.params.loop) {\n if (s.animating) return;\n realIndex = $(s.clickedSlide).attr('data-swiper-slide-index');\n if (s.params.centeredSlides) {\n if ((slideToIndex < s.loopedSlides - s.params.slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + s.params.slidesPerView/2)) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.swiper-slide-duplicate)').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n else {\n if (slideToIndex > s.slides.length - s.params.slidesPerView) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.swiper-slide-duplicate)').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n };\n \n var isTouched,\n isMoved,\n allowTouchCallbacks,\n touchStartTime,\n isScrolling,\n currentTranslate,\n startTranslate,\n allowThresholdMove,\n // Form elements to match\n formElements = 'input, select, textarea, button',\n // Last click time\n lastClickTime = Date.now(), clickTimeout,\n //Velocities\n velocities = [],\n allowMomentumBounce;\n \n // Animating Flag\n s.animating = false;\n \n // Touches information\n s.touches = {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n };\n \n // Touch handlers\n var isTouchEvent, startMoving;\n s.onTouchStart = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n isTouchEvent = e.type === 'touchstart';\n if (!isTouchEvent && 'which' in e && e.which === 3) return;\n if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) {\n s.allowClick = true;\n return;\n }\n if (s.params.swipeHandler) {\n if (!findElementInEvent(e, s.params.swipeHandler)) return;\n }\n \n var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n \n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) {\n return;\n }\n \n isTouched = true;\n isMoved = false;\n allowTouchCallbacks = true;\n isScrolling = undefined;\n startMoving = undefined;\n s.touches.startX = startX;\n s.touches.startY = startY;\n touchStartTime = Date.now();\n s.allowClick = true;\n s.updateContainerSize();\n s.swipeDirection = undefined;\n if (s.params.threshold > 0) allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n var preventDefault = true;\n if ($(e.target).is(formElements)) preventDefault = false;\n if (document.activeElement && $(document.activeElement).is(formElements)) {\n document.activeElement.blur();\n }\n if (preventDefault) {\n e.preventDefault();\n }\n }\n s.emit('onTouchStart', s, e);\n };\n \n s.onTouchMove = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (isTouchEvent && e.type === 'mousemove') return;\n if (e.preventedByNestedSwiper) {\n s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n return;\n }\n if (s.params.onlyExternal) {\n // isMoved = true;\n s.allowClick = false;\n if (isTouched) {\n s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = Date.now();\n }\n return;\n }\n if (isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(formElements)) {\n isMoved = true;\n s.allowClick = false;\n return;\n }\n }\n if (allowTouchCallbacks) {\n s.emit('onTouchMove', s, e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n \n s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n \n if (typeof isScrolling === 'undefined') {\n var touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI;\n isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle);\n }\n if (isScrolling) {\n s.emit('onTouchMoveOpposite', s, e);\n }\n if (typeof startMoving === 'undefined' && s.browser.ieTouch) {\n if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) {\n startMoving = true;\n }\n }\n if (!isTouched) return;\n if (isScrolling) {\n isTouched = false;\n return;\n }\n if (!startMoving && s.browser.ieTouch) {\n return;\n }\n s.allowClick = false;\n s.emit('onSliderMove', s, e);\n e.preventDefault();\n if (s.params.touchMoveStopPropagation && !s.params.nested) {\n e.stopPropagation();\n }\n \n if (!isMoved) {\n if (params.loop) {\n s.fixLoop();\n }\n startTranslate = s.getWrapperTranslate();\n s.setWrapperTransition(0);\n if (s.animating) {\n s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd');\n }\n if (s.params.autoplay && s.autoplaying) {\n if (s.params.autoplayDisableOnInteraction) {\n s.stopAutoplay();\n }\n else {\n s.pauseAutoplay();\n }\n }\n allowMomentumBounce = false;\n //Grab Cursor\n if (s.params.grabCursor) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grabbing';\n s.container[0].style.cursor = '-moz-grabbin';\n s.container[0].style.cursor = 'grabbing';\n }\n }\n isMoved = true;\n \n var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n \n diff = diff * s.params.touchRatio;\n if (s.rtl) diff = -diff;\n \n s.swipeDirection = diff > 0 ? 'prev' : 'next';\n currentTranslate = diff + startTranslate;\n \n var disableParentSwiper = true;\n if ((diff > 0 && currentTranslate > s.minTranslate())) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio);\n }\n else if (diff < 0 && currentTranslate < s.maxTranslate()) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio);\n }\n \n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) {\n currentTranslate = startTranslate;\n }\n if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) {\n currentTranslate = startTranslate;\n }\n \n if (!s.params.followFinger) return;\n \n // Threshold\n if (s.params.threshold > 0) {\n if (Math.abs(diff) > s.params.threshold || allowThresholdMove) {\n if (!allowThresholdMove) {\n allowThresholdMove = true;\n s.touches.startX = s.touches.currentX;\n s.touches.startY = s.touches.currentY;\n currentTranslate = startTranslate;\n s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n return;\n }\n }\n else {\n currentTranslate = startTranslate;\n return;\n }\n }\n // Update active index in free mode\n if (s.params.freeMode || s.params.watchSlidesProgress) {\n s.updateActiveIndex();\n }\n if (s.params.freeMode) {\n //Velocity\n if (velocities.length === 0) {\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'startX' : 'startY'],\n time: touchStartTime\n });\n }\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'],\n time: (new window.Date()).getTime()\n });\n }\n // Update progress\n s.updateProgress(currentTranslate);\n // Update translate\n s.setWrapperTranslate(currentTranslate);\n };\n s.onTouchEnd = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (allowTouchCallbacks) {\n s.emit('onTouchEnd', s, e);\n }\n allowTouchCallbacks = false;\n if (!isTouched) return;\n //Return Grab Cursor\n if (s.params.grabCursor && isMoved && isTouched) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grab';\n s.container[0].style.cursor = '-moz-grab';\n s.container[0].style.cursor = 'grab';\n }\n \n // Time diff\n var touchEndTime = Date.now();\n var timeDiff = touchEndTime - touchStartTime;\n \n // Tap, doubleTap, Click\n if (s.allowClick) {\n s.updateClickedSlide(e);\n s.emit('onTap', s, e);\n if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n clickTimeout = setTimeout(function () {\n if (!s) return;\n if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) {\n s.paginationContainer.toggleClass(s.params.paginationHiddenClass);\n }\n s.emit('onClick', s, e);\n }, 300);\n \n }\n if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n s.emit('onDoubleTap', s, e);\n }\n }\n \n lastClickTime = Date.now();\n setTimeout(function () {\n if (s) s.allowClick = true;\n }, 0);\n \n if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) {\n isTouched = isMoved = false;\n return;\n }\n isTouched = isMoved = false;\n \n var currentPos;\n if (s.params.followFinger) {\n currentPos = s.rtl ? s.translate : -s.translate;\n }\n else {\n currentPos = -currentTranslate;\n }\n if (s.params.freeMode) {\n if (currentPos < -s.minTranslate()) {\n s.slideTo(s.activeIndex);\n return;\n }\n else if (currentPos > -s.maxTranslate()) {\n if (s.slides.length < s.snapGrid.length) {\n s.slideTo(s.snapGrid.length - 1);\n }\n else {\n s.slideTo(s.slides.length - 1);\n }\n return;\n }\n \n if (s.params.freeModeMomentum) {\n if (velocities.length > 1) {\n var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop();\n \n var distance = lastMoveEvent.position - velocityEvent.position;\n var time = lastMoveEvent.time - velocityEvent.time;\n s.velocity = distance / time;\n s.velocity = s.velocity / 2;\n if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) {\n s.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) {\n s.velocity = 0;\n }\n } else {\n s.velocity = 0;\n }\n \n velocities.length = 0;\n var momentumDuration = 1000 * s.params.freeModeMomentumRatio;\n var momentumDistance = s.velocity * momentumDuration;\n \n var newPosition = s.translate + momentumDistance;\n if (s.rtl) newPosition = - newPosition;\n var doBounce = false;\n var afterBouncePosition;\n var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio;\n if (newPosition < s.maxTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition + s.maxTranslate() < -bounceAmount) {\n newPosition = s.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = s.maxTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.maxTranslate();\n }\n }\n else if (newPosition > s.minTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition - s.minTranslate() > bounceAmount) {\n newPosition = s.minTranslate() + bounceAmount;\n }\n afterBouncePosition = s.minTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.minTranslate();\n }\n }\n else if (s.params.freeModeSticky) {\n var j = 0,\n nextSlide;\n for (j = 0; j < s.snapGrid.length; j += 1) {\n if (s.snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n \n }\n if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') {\n newPosition = s.snapGrid[nextSlide];\n } else {\n newPosition = s.snapGrid[nextSlide - 1];\n }\n if (!s.rtl) newPosition = - newPosition;\n }\n //Fix duration\n if (s.velocity !== 0) {\n if (s.rtl) {\n momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity);\n }\n else {\n momentumDuration = Math.abs((newPosition - s.translate) / s.velocity);\n }\n }\n else if (s.params.freeModeSticky) {\n s.slideReset();\n return;\n }\n \n if (s.params.freeModeMomentumBounce && doBounce) {\n s.updateProgress(afterBouncePosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s || !allowMomentumBounce) return;\n s.emit('onMomentumBounce', s);\n \n s.setWrapperTransition(s.params.speed);\n s.setWrapperTranslate(afterBouncePosition);\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n });\n } else if (s.velocity) {\n s.updateProgress(newPosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n }\n \n } else {\n s.updateProgress(newPosition);\n }\n \n s.updateActiveIndex();\n }\n if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) {\n s.updateProgress();\n s.updateActiveIndex();\n }\n return;\n }\n \n // Find current slide\n var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0];\n for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) {\n if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') {\n if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) {\n stopIndex = i;\n groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i];\n }\n }\n else {\n if (currentPos >= s.slidesGrid[i]) {\n stopIndex = i;\n groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2];\n }\n }\n }\n \n // Find current slide size\n var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize;\n \n if (timeDiff > s.params.longSwipesMs) {\n // Long touches\n if (!s.params.longSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n \n }\n if (s.swipeDirection === 'prev') {\n if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n }\n }\n else {\n // Short swipes\n if (!s.params.shortSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n s.slideTo(stopIndex + s.params.slidesPerGroup);\n \n }\n if (s.swipeDirection === 'prev') {\n s.slideTo(stopIndex);\n }\n }\n };\n /*=========================\n Transitions\n ===========================*/\n s._slideTo = function (slideIndex, speed) {\n return s.slideTo(slideIndex, speed, true, true);\n };\n s.slideTo = function (slideIndex, speed, runCallbacks, internal) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (typeof slideIndex === 'undefined') slideIndex = 0;\n if (slideIndex < 0) slideIndex = 0;\n s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup);\n if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1;\n \n var translate = - s.snapGrid[s.snapIndex];\n // Stop autoplay\n if (s.params.autoplay && s.autoplaying) {\n if (internal || !s.params.autoplayDisableOnInteraction) {\n s.pauseAutoplay(speed);\n }\n else {\n s.stopAutoplay();\n }\n }\n // Update progress\n s.updateProgress(translate);\n \n // Normalize slideIndex\n for (var i = 0; i < s.slidesGrid.length; i++) {\n if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) {\n if ((s.activeIndex || 0) !== slideIndex ) return false;\n }\n \n // Update Index\n if (typeof speed === 'undefined') speed = s.params.speed;\n s.previousIndex = s.activeIndex || 0;\n s.activeIndex = slideIndex;\n \n if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) {\n // Update Height\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n s.updateClasses();\n if (s.params.effect !== 'slide') {\n s.setWrapperTranslate(translate);\n }\n return false;\n }\n s.updateClasses();\n s.onTransitionStart(runCallbacks);\n \n if (speed === 0) {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(0);\n s.onTransitionEnd(runCallbacks);\n }\n else {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(speed);\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd(runCallbacks);\n });\n }\n \n }\n \n return true;\n };\n \n s.onTransitionStart = function (runCallbacks) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n if (s.lazy) s.lazy.onTransitionStart();\n if (runCallbacks) {\n s.emit('onTransitionStart', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeStart', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextStart', s);\n }\n else {\n s.emit('onSlidePrevStart', s);\n }\n }\n \n }\n };\n s.onTransitionEnd = function (runCallbacks) {\n s.animating = false;\n s.setWrapperTransition(0);\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.lazy) s.lazy.onTransitionEnd();\n if (runCallbacks) {\n s.emit('onTransitionEnd', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeEnd', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextEnd', s);\n }\n else {\n s.emit('onSlidePrevEnd', s);\n }\n }\n }\n if (s.params.hashnav && s.hashnav) {\n s.hashnav.setHash();\n }\n \n };\n s.slideNext = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n };\n s._slideNext = function (speed) {\n return s.slideNext(true, speed, true);\n };\n s.slidePrev = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n };\n s._slidePrev = function (speed) {\n return s.slidePrev(true, speed, true);\n };\n s.slideReset = function (runCallbacks, speed, internal) {\n return s.slideTo(s.activeIndex, speed, runCallbacks);\n };\n \n /*=========================\n Translate/transition helpers\n ===========================*/\n s.setWrapperTransition = function (duration, byController) {\n s.wrapper.transition(duration);\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTransition(duration);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTransition(duration);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTransition(duration);\n }\n if (s.params.control && s.controller) {\n s.controller.setTransition(duration, byController);\n }\n s.emit('onSetTransition', s, duration);\n };\n s.setWrapperTranslate = function (translate, updateActiveIndex, byController) {\n var x = 0, y = 0, z = 0;\n if (s.isHorizontal()) {\n x = s.rtl ? -translate : translate;\n }\n else {\n y = translate;\n }\n \n if (s.params.roundLengths) {\n x = round(x);\n y = round(y);\n }\n \n if (!s.params.virtualTranslate) {\n if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');\n else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');\n }\n \n s.translate = s.isHorizontal() ? x : y;\n \n // Check if we need to update progress\n var progress;\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n if (translatesDiff === 0) {\n progress = 0;\n }\n else {\n progress = (translate - s.minTranslate()) / (translatesDiff);\n }\n if (progress !== s.progress) {\n s.updateProgress(translate);\n }\n \n if (updateActiveIndex) s.updateActiveIndex();\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTranslate(s.translate);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTranslate(s.translate);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTranslate(s.translate);\n }\n if (s.params.control && s.controller) {\n s.controller.setTranslate(s.translate, byController);\n }\n s.emit('onSetTranslate', s, s.translate);\n };\n \n s.getTranslate = function (el, axis) {\n var matrix, curTransform, curStyle, transformMatrix;\n \n // automatic axis detection\n if (typeof axis === 'undefined') {\n axis = 'x';\n }\n \n if (s.params.virtualTranslate) {\n return s.rtl ? -s.translate : s.translate;\n }\n \n curStyle = window.getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function(a){\n return a.replace(',','.');\n }).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n }\n else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n \n if (axis === 'x') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m41;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[12]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m42;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[13]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[5]);\n }\n if (s.rtl && curTransform) curTransform = -curTransform;\n return curTransform || 0;\n };\n s.getWrapperTranslate = function (axis) {\n if (typeof axis === 'undefined') {\n axis = s.isHorizontal() ? 'x' : 'y';\n }\n return s.getTranslate(s.wrapper[0], axis);\n };\n \n /*=========================\n Observer\n ===========================*/\n s.observers = [];\n function initObserver(target, options) {\n options = options || {};\n // create an observer instance\n var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n var observer = new ObserverFunc(function (mutations) {\n mutations.forEach(function (mutation) {\n s.onResize(true);\n s.emit('onObserverUpdate', s, mutation);\n });\n });\n \n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n \n s.observers.push(observer);\n }\n s.initObservers = function () {\n if (s.params.observeParents) {\n var containerParents = s.container.parents();\n for (var i = 0; i < containerParents.length; i++) {\n initObserver(containerParents[i]);\n }\n }\n \n // Observe container\n initObserver(s.container[0], {childList: false});\n \n // Observe wrapper\n initObserver(s.wrapper[0], {attributes: false});\n };\n s.disconnectObservers = function () {\n for (var i = 0; i < s.observers.length; i++) {\n s.observers[i].disconnect();\n }\n s.observers = [];\n };\n /*=========================\n Loop\n ===========================*/\n // Create looped slides\n s.createLoop = function () {\n // Remove duplicated slides\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n \n var slides = s.wrapper.children('.' + s.params.slideClass);\n \n if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length;\n \n s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10);\n s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;\n if (s.loopedSlides > slides.length) {\n s.loopedSlides = slides.length;\n }\n \n var prependSlides = [], appendSlides = [], i;\n slides.each(function (index, el) {\n var slide = $(this);\n if (index < s.loopedSlides) appendSlides.push(el);\n if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el);\n slide.attr('data-swiper-slide-index', index);\n });\n for (i = 0; i < appendSlides.length; i++) {\n s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n for (i = prependSlides.length - 1; i >= 0; i--) {\n s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n };\n s.destroyLoop = function () {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n s.slides.removeAttr('data-swiper-slide-index');\n };\n s.reLoop = function (updatePosition) {\n var oldIndex = s.activeIndex - s.loopedSlides;\n s.destroyLoop();\n s.createLoop();\n s.updateSlidesSize();\n if (updatePosition) {\n s.slideTo(oldIndex + s.loopedSlides, 0, false);\n }\n \n };\n s.fixLoop = function () {\n var newIndex;\n //Fix For Negative Oversliding\n if (s.activeIndex < s.loopedSlides) {\n newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n //Fix For Positive Oversliding\n else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) {\n newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n };\n /*=========================\n Append/Prepend/Remove Slides\n ===========================*/\n s.appendSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.append(slides[i]);\n }\n }\n else {\n s.wrapper.append(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n };\n s.prependSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n var newActiveIndex = s.activeIndex + 1;\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.prepend(slides[i]);\n }\n newActiveIndex = s.activeIndex + slides.length;\n }\n else {\n s.wrapper.prepend(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n s.slideTo(newActiveIndex, 0, false);\n };\n s.removeSlide = function (slidesIndexes) {\n if (s.params.loop) {\n s.destroyLoop();\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n }\n var newActiveIndex = s.activeIndex,\n indexToRemove;\n if (typeof slidesIndexes === 'object' && slidesIndexes.length) {\n for (var i = 0; i < slidesIndexes.length; i++) {\n indexToRemove = slidesIndexes[i];\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n else {\n indexToRemove = slidesIndexes;\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n \n if (s.params.loop) {\n s.createLoop();\n }\n \n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n if (s.params.loop) {\n s.slideTo(newActiveIndex + s.loopedSlides, 0, false);\n }\n else {\n s.slideTo(newActiveIndex, 0, false);\n }\n \n };\n s.removeAllSlides = function () {\n var slidesIndexes = [];\n for (var i = 0; i < s.slides.length; i++) {\n slidesIndexes.push(i);\n }\n s.removeSlide(slidesIndexes);\n };\n \n\n /*=========================\n Effects\n ===========================*/\n s.effects = {\n fade: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var offset = slide[0].swiperSlideOffset;\n var tx = -offset;\n if (!s.params.virtualTranslate) tx = tx - s.translate;\n var ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n var slideOpacity = s.params.fade.crossFade ?\n Math.max(1 - Math.abs(slide[0].progress), 0) :\n 1 + Math.min(Math.max(slide[0].progress, -1), 0);\n slide\n .css({\n opacity: slideOpacity\n })\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');\n \n }\n \n },\n setTransition: function (duration) {\n s.slides.transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n flip: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var progress = slide[0].progress;\n if (s.params.flip.limitRotation) {\n progress = Math.max(Math.min(slide[0].progress, 1), -1);\n }\n var offset = slide[0].swiperSlideOffset;\n var rotate = -180 * progress,\n rotateY = rotate,\n rotateX = 0,\n tx = -offset,\n ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n }\n else if (s.rtl) {\n rotateY = -rotateY;\n }\n \n slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length;\n \n if (s.params.flip.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n \n slide\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.eq(s.activeIndex).transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n if (!$(this).hasClass(s.params.slideActiveClass)) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n cube: {\n setTranslate: function () {\n var wrapperRotate = 0, cubeShadow;\n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow = s.wrapper.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('
');\n s.wrapper.append(cubeShadow);\n }\n cubeShadow.css({height: s.width + 'px'});\n }\n else {\n cubeShadow = s.container.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('
');\n s.container.append(cubeShadow);\n }\n }\n }\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var slideAngle = i * 90;\n var round = Math.floor(slideAngle / 360);\n if (s.rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n var progress = Math.max(Math.min(slide[0].progress, 1), -1);\n var tx = 0, ty = 0, tz = 0;\n if (i % 4 === 0) {\n tx = - round * 4 * s.size;\n tz = 0;\n }\n else if ((i - 1) % 4 === 0) {\n tx = 0;\n tz = - round * 4 * s.size;\n }\n else if ((i - 2) % 4 === 0) {\n tx = s.size + round * 4 * s.size;\n tz = s.size;\n }\n else if ((i - 3) % 4 === 0) {\n tx = - s.size;\n tz = 3 * s.size + s.size * 4 * round;\n }\n if (s.rtl) {\n tx = -tx;\n }\n \n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n \n var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';\n if (progress <= 1 && progress > -1) {\n wrapperRotate = i * 90 + progress * 90;\n if (s.rtl) wrapperRotate = -i * 90 - progress * 90;\n }\n slide.transform(transform);\n if (s.params.cube.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n }\n s.wrapper.css({\n '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n 'transform-origin': '50% 50% -' + (s.size / 2) + 'px'\n });\n \n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')');\n }\n else {\n var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n var scale1 = s.params.cube.shadowScale,\n scale2 = s.params.cube.shadowScale / multiplier,\n offset = s.params.cube.shadowOffset;\n cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)');\n }\n }\n var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0;\n s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)');\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.cube.shadow && !s.isHorizontal()) {\n s.container.find('.swiper-cube-shadow').transition(duration);\n }\n }\n },\n coverflow: {\n setTranslate: function () {\n var transform = s.translate;\n var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2;\n var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate;\n var translate = s.params.coverflow.depth;\n //Each slide offset from center\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideSize = s.slidesSizesGrid[i];\n var slideOffset = slide[0].swiperSlideOffset;\n var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;\n \n var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0;\n var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n var translateZ = -translate * Math.abs(offsetMultiplier);\n \n var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier);\n var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0;\n \n //Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n \n var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';\n \n slide.transform(slideTransform);\n slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (s.params.coverflow.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n }\n }\n \n //Set correct perspective for IE10\n if (s.browser.ie) {\n var ws = s.wrapper[0].style;\n ws.perspectiveOrigin = center + 'px 50%';\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n }\n }\n };\n\n /*=========================\n Images Lazy Loading\n ===========================*/\n s.lazy = {\n initialImageLoaded: false,\n loadImageInSlide: function (index, loadInDuplicate) {\n if (typeof index === 'undefined') return;\n if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true;\n if (s.slides.length === 0) return;\n \n var slide = s.slides.eq(index);\n var img = slide.find('.swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)');\n if (slide.hasClass('swiper-lazy') && !slide.hasClass('swiper-lazy-loaded') && !slide.hasClass('swiper-lazy-loading')) {\n img = img.add(slide[0]);\n }\n if (img.length === 0) return;\n \n img.each(function () {\n var _img = $(this);\n _img.addClass('swiper-lazy-loading');\n var background = _img.attr('data-background');\n var src = _img.attr('data-src'),\n srcset = _img.attr('data-srcset');\n s.loadImage(_img[0], (src || background), srcset, false, function () {\n if (background) {\n _img.css('background-image', 'url(\"' + background + '\")');\n _img.removeAttr('data-background');\n }\n else {\n if (srcset) {\n _img.attr('srcset', srcset);\n _img.removeAttr('data-srcset');\n }\n if (src) {\n _img.attr('src', src);\n _img.removeAttr('data-src');\n }\n \n }\n \n _img.addClass('swiper-lazy-loaded').removeClass('swiper-lazy-loading');\n slide.find('.swiper-lazy-preloader, .preloader').remove();\n if (s.params.loop && loadInDuplicate) {\n var slideOriginalIndex = slide.attr('data-swiper-slide-index');\n if (slide.hasClass(s.params.slideDuplicateClass)) {\n var originalSlide = s.wrapper.children('[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')');\n s.lazy.loadImageInSlide(originalSlide.index(), false);\n }\n else {\n var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]');\n s.lazy.loadImageInSlide(duplicatedSlide.index(), false);\n }\n }\n s.emit('onLazyImageReady', s, slide[0], _img[0]);\n });\n \n s.emit('onLazyImageLoad', s, slide[0], _img[0]);\n });\n \n },\n load: function () {\n var i;\n if (s.params.watchSlidesVisibility) {\n s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {\n s.lazy.loadImageInSlide($(this).index());\n });\n }\n else {\n if (s.params.slidesPerView > 1) {\n for (i = s.activeIndex; i < s.activeIndex + s.params.slidesPerView ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n s.lazy.loadImageInSlide(s.activeIndex);\n }\n }\n if (s.params.lazyLoadingInPrevNext) {\n if (s.params.slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {\n var amount = s.params.lazyLoadingInPrevNextAmount;\n var spv = s.params.slidesPerView;\n var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length);\n var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (i = s.activeIndex + s.params.slidesPerView; i < maxIndex; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n // Prev Slides\n for (i = minIndex; i < s.activeIndex ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n var nextSlide = s.wrapper.children('.' + s.params.slideNextClass);\n if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index());\n \n var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass);\n if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index());\n }\n }\n },\n onTransitionStart: function () {\n if (s.params.lazyLoading) {\n if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) {\n s.lazy.load();\n }\n }\n },\n onTransitionEnd: function () {\n if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) {\n s.lazy.load();\n }\n }\n };\n \n\n /*=========================\n Scrollbar\n ===========================*/\n s.scrollbar = {\n isTouched: false,\n setDragPosition: function (e) {\n var sb = s.scrollbar;\n var x = 0, y = 0;\n var translate;\n var pointerPosition = s.isHorizontal() ?\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) :\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ;\n var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2;\n var positionMin = -s.minTranslate() * sb.moveDivider;\n var positionMax = -s.maxTranslate() * sb.moveDivider;\n if (position < positionMin) {\n position = positionMin;\n }\n else if (position > positionMax) {\n position = positionMax;\n }\n position = -position / sb.moveDivider;\n s.updateProgress(position);\n s.setWrapperTranslate(position, true);\n },\n dragStart: function (e) {\n var sb = s.scrollbar;\n sb.isTouched = true;\n e.preventDefault();\n e.stopPropagation();\n \n sb.setDragPosition(e);\n clearTimeout(sb.dragTimeout);\n \n sb.track.transition(0);\n if (s.params.scrollbarHide) {\n sb.track.css('opacity', 1);\n }\n s.wrapper.transition(100);\n sb.drag.transition(100);\n s.emit('onScrollbarDragStart', s);\n },\n dragMove: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n sb.setDragPosition(e);\n s.wrapper.transition(0);\n sb.track.transition(0);\n sb.drag.transition(0);\n s.emit('onScrollbarDragMove', s);\n },\n dragEnd: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n sb.isTouched = false;\n if (s.params.scrollbarHide) {\n clearTimeout(sb.dragTimeout);\n sb.dragTimeout = setTimeout(function () {\n sb.track.css('opacity', 0);\n sb.track.transition(400);\n }, 1000);\n \n }\n s.emit('onScrollbarDragEnd', s);\n if (s.params.scrollbarSnapOnRelease) {\n s.slideReset();\n }\n },\n enableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).on(s.touchEvents.start, sb.dragStart);\n $(target).on(s.touchEvents.move, sb.dragMove);\n $(target).on(s.touchEvents.end, sb.dragEnd);\n },\n disableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).off(s.touchEvents.start, sb.dragStart);\n $(target).off(s.touchEvents.move, sb.dragMove);\n $(target).off(s.touchEvents.end, sb.dragEnd);\n },\n set: function () {\n if (!s.params.scrollbar) return;\n var sb = s.scrollbar;\n sb.track = $(s.params.scrollbar);\n if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) {\n sb.track = s.container.find(s.params.scrollbar);\n }\n sb.drag = sb.track.find('.swiper-scrollbar-drag');\n if (sb.drag.length === 0) {\n sb.drag = $('
');\n sb.track.append(sb.drag);\n }\n sb.drag[0].style.width = '';\n sb.drag[0].style.height = '';\n sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight;\n \n sb.divider = s.size / s.virtualSize;\n sb.moveDivider = sb.divider * (sb.trackSize / s.size);\n sb.dragSize = sb.trackSize * sb.divider;\n \n if (s.isHorizontal()) {\n sb.drag[0].style.width = sb.dragSize + 'px';\n }\n else {\n sb.drag[0].style.height = sb.dragSize + 'px';\n }\n \n if (sb.divider >= 1) {\n sb.track[0].style.display = 'none';\n }\n else {\n sb.track[0].style.display = '';\n }\n if (s.params.scrollbarHide) {\n sb.track[0].style.opacity = 0;\n }\n },\n setTranslate: function () {\n if (!s.params.scrollbar) return;\n var diff;\n var sb = s.scrollbar;\n var translate = s.translate || 0;\n var newPos;\n \n var newSize = sb.dragSize;\n newPos = (sb.trackSize - sb.dragSize) * s.progress;\n if (s.rtl && s.isHorizontal()) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = sb.dragSize - newPos;\n newPos = 0;\n }\n else if (-newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize + newPos;\n }\n }\n else {\n if (newPos < 0) {\n newSize = sb.dragSize + newPos;\n newPos = 0;\n }\n else if (newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize - newPos;\n }\n }\n if (s.isHorizontal()) {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)');\n }\n else {\n sb.drag.transform('translateX(' + (newPos) + 'px)');\n }\n sb.drag[0].style.width = newSize + 'px';\n }\n else {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)');\n }\n else {\n sb.drag.transform('translateY(' + (newPos) + 'px)');\n }\n sb.drag[0].style.height = newSize + 'px';\n }\n if (s.params.scrollbarHide) {\n clearTimeout(sb.timeout);\n sb.track[0].style.opacity = 1;\n sb.timeout = setTimeout(function () {\n sb.track[0].style.opacity = 0;\n sb.track.transition(400);\n }, 1000);\n }\n },\n setTransition: function (duration) {\n if (!s.params.scrollbar) return;\n s.scrollbar.drag.transition(duration);\n }\n };\n\n /*=========================\n Controller\n ===========================*/\n s.controller = {\n LinearSpline: function (x, y) {\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n var i1, i3;\n var l = this.x.length;\n \n this.interpolate = function (x2) {\n if (!x2) return 0;\n \n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n \n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n \n var binarySearch = (function() {\n var maxIndex, minIndex, guess;\n return function(array, val) {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1)\n if (array[guess = maxIndex + minIndex >> 1] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n return maxIndex;\n };\n })();\n },\n //xxx: for now i will just save one spline function to to\n getInterpolateFunction: function(c){\n if(!s.controller.spline) s.controller.spline = s.params.loop ?\n new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) :\n new s.controller.LinearSpline(s.snapGrid, c.snapGrid);\n },\n setTranslate: function (translate, byController) {\n var controlled = s.params.control;\n var multiplier, controlledTranslate;\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate;\n if (s.params.controlBy === 'slide') {\n s.controller.getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -s.controller.spline.interpolate(-translate);\n }\n \n if(!controlledTranslate || s.params.controlBy === 'container'){\n multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate());\n controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate();\n }\n \n if (s.params.controlInverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setWrapperTranslate(controlledTranslate, false, s);\n c.updateActiveIndex();\n }\n if (s.isArray(controlled)) {\n for (var i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n \n setControlledTranslate(controlled);\n }\n },\n setTransition: function (duration, byController) {\n var controlled = s.params.control;\n var i;\n function setControlledTransition(c) {\n c.setWrapperTransition(duration, s);\n if (duration !== 0) {\n c.onTransitionStart();\n c.wrapper.transitionEnd(function(){\n if (!controlled) return;\n if (c.params.loop && s.params.controlBy === 'slide') {\n c.fixLoop();\n }\n c.onTransitionEnd();\n \n });\n }\n }\n if (s.isArray(controlled)) {\n for (i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n };\n\n /*=========================\n Hash Navigation\n ===========================*/\n s.hashnav = {\n init: function () {\n if (!s.params.hashnav) return;\n s.hashnav.initialized = true;\n var hash = document.location.hash.replace('#', '');\n if (!hash) return;\n var speed = 0;\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideHash = slide.attr('data-hash');\n if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {\n var index = slide.index();\n s.slideTo(index, speed, s.params.runCallbacksOnInit, true);\n }\n }\n },\n setHash: function () {\n if (!s.hashnav.initialized || !s.params.hashnav) return;\n document.location.hash = s.slides.eq(s.activeIndex).attr('data-hash') || '';\n }\n };\n\n /*=========================\n Keyboard Control\n ===========================*/\n function handleKeyboard(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var kc = e.keyCode || e.charCode;\n // Directions locks\n if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return;\n }\n if (kc === 37 || kc === 39 || kc === 38 || kc === 40) {\n var inView = false;\n //Check that swiper should be inside of visible area of window\n if (s.container.parents('.swiper-slide').length > 0 && s.container.parents('.swiper-slide-active').length === 0) {\n return;\n }\n var windowScroll = {\n left: window.pageXOffset,\n top: window.pageYOffset\n };\n var windowWidth = window.innerWidth;\n var windowHeight = window.innerHeight;\n var swiperOffset = s.container.offset();\n if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft;\n var swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + s.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + s.height],\n [swiperOffset.left + s.width, swiperOffset.top + s.height]\n ];\n for (var i = 0; i < swiperCoord.length; i++) {\n var point = swiperCoord[i];\n if (\n point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth &&\n point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight\n ) {\n inView = true;\n }\n \n }\n if (!inView) return;\n }\n if (s.isHorizontal()) {\n if (kc === 37 || kc === 39) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext();\n if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev();\n }\n else {\n if (kc === 38 || kc === 40) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (kc === 40) s.slideNext();\n if (kc === 38) s.slidePrev();\n }\n }\n s.disableKeyboardControl = function () {\n s.params.keyboardControl = false;\n $(document).off('keydown', handleKeyboard);\n };\n s.enableKeyboardControl = function () {\n s.params.keyboardControl = true;\n $(document).on('keydown', handleKeyboard);\n };\n \n\n /*=========================\n Mousewheel Control\n ===========================*/\n s.mousewheel = {\n event: false,\n lastScrollTime: (new window.Date()).getTime()\n };\n if (s.params.mousewheelControl) {\n try {\n new window.WheelEvent('wheel');\n s.mousewheel.event = 'wheel';\n } catch (e) {\n if (window.WheelEvent || (s.container[0] && 'wheel' in s.container[0])) {\n s.mousewheel.event = 'wheel';\n }\n }\n if (!s.mousewheel.event && window.WheelEvent) {\n \n }\n if (!s.mousewheel.event && document.onmousewheel !== undefined) {\n s.mousewheel.event = 'mousewheel';\n }\n if (!s.mousewheel.event) {\n s.mousewheel.event = 'DOMMouseScroll';\n }\n }\n function handleMousewheel(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var we = s.mousewheel.event;\n var delta = 0;\n var rtlFactor = s.rtl ? -1 : 1;\n \n //WebKits\n if (we === 'mousewheel') {\n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY)) delta = e.wheelDeltaX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(e.wheelDeltaY) > Math.abs(e.wheelDeltaX)) delta = e.wheelDeltaY;\n else return;\n }\n }\n else {\n delta = Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY) ? - e.wheelDeltaX * rtlFactor : - e.wheelDeltaY;\n }\n }\n //Old FireFox\n else if (we === 'DOMMouseScroll') delta = -e.detail;\n //New FireFox\n else if (we === 'wheel') {\n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) delta = -e.deltaX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(e.deltaY) > Math.abs(e.deltaX)) delta = -e.deltaY;\n else return;\n }\n }\n else {\n delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? - e.deltaX * rtlFactor : - e.deltaY;\n }\n }\n if (delta === 0) return;\n \n if (s.params.mousewheelInvert) delta = -delta;\n \n if (!s.params.freeMode) {\n if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) {\n if (delta < 0) {\n if ((!s.isEnd || s.params.loop) && !s.animating) s.slideNext();\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n else {\n if ((!s.isBeginning || s.params.loop) && !s.animating) s.slidePrev();\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n }\n s.mousewheel.lastScrollTime = (new window.Date()).getTime();\n \n }\n else {\n //Freemode or scrollContainer:\n var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity;\n var wasBeginning = s.isBeginning,\n wasEnd = s.isEnd;\n \n if (position >= s.minTranslate()) position = s.minTranslate();\n if (position <= s.maxTranslate()) position = s.maxTranslate();\n \n s.setWrapperTransition(0);\n s.setWrapperTranslate(position);\n s.updateProgress();\n s.updateActiveIndex();\n \n if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) {\n s.updateClasses();\n }\n \n if (s.params.freeModeSticky) {\n clearTimeout(s.mousewheel.timeout);\n s.mousewheel.timeout = setTimeout(function () {\n s.slideReset();\n }, 300);\n }\n else {\n if (s.params.lazyLoading && s.lazy) {\n s.lazy.load();\n }\n }\n \n // Return page scroll on edge positions\n if (position === 0 || position === s.maxTranslate()) return;\n }\n if (s.params.autoplay) s.stopAutoplay();\n \n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n }\n s.disableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n s.container.off(s.mousewheel.event, handleMousewheel);\n return true;\n };\n \n s.enableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n s.container.on(s.mousewheel.event, handleMousewheel);\n return true;\n };\n \n\n /*=========================\n Parallax\n ===========================*/\n function setParallaxTransform(el, progress) {\n el = $(el);\n var p, pX, pY;\n var rtlFactor = s.rtl ? -1 : 1;\n \n p = el.attr('data-swiper-parallax') || '0';\n pX = el.attr('data-swiper-parallax-x');\n pY = el.attr('data-swiper-parallax-y');\n if (pX || pY) {\n pX = pX || '0';\n pY = pY || '0';\n }\n else {\n if (s.isHorizontal()) {\n pX = p;\n pY = '0';\n }\n else {\n pY = p;\n pX = '0';\n }\n }\n \n if ((pX).indexOf('%') >= 0) {\n pX = parseInt(pX, 10) * progress * rtlFactor + '%';\n }\n else {\n pX = pX * progress * rtlFactor + 'px' ;\n }\n if ((pY).indexOf('%') >= 0) {\n pY = parseInt(pY, 10) * progress + '%';\n }\n else {\n pY = pY * progress + 'px' ;\n }\n \n el.transform('translate3d(' + pX + ', ' + pY + ',0px)');\n }\n s.parallax = {\n setTranslate: function () {\n s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n setParallaxTransform(this, s.progress);\n \n });\n s.slides.each(function () {\n var slide = $(this);\n slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () {\n var progress = Math.min(Math.max(slide[0].progress, -1), 1);\n setParallaxTransform(this, progress);\n });\n });\n },\n setTransition: function (duration) {\n if (typeof duration === 'undefined') duration = s.params.speed;\n s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n var el = $(this);\n var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n el.transition(parallaxDuration);\n });\n }\n };\n \n\n /*=========================\n Plugins API. Collect all and init all plugins\n ===========================*/\n s._plugins = [];\n for (var plugin in s.plugins) {\n var p = s.plugins[plugin](s, s.params[plugin]);\n if (p) s._plugins.push(p);\n }\n // Method to call all plugins event/method\n s.callPlugins = function (eventName) {\n for (var i = 0; i < s._plugins.length; i++) {\n if (eventName in s._plugins[i]) {\n s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n };\n\n /*=========================\n Events/Callbacks/Plugins Emitter\n ===========================*/\n function normalizeEventName (eventName) {\n if (eventName.indexOf('on') !== 0) {\n if (eventName[0] !== eventName[0].toUpperCase()) {\n eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1);\n }\n else {\n eventName = 'on' + eventName;\n }\n }\n return eventName;\n }\n s.emitterEventListeners = {\n \n };\n s.emit = function (eventName) {\n // Trigger callbacks\n if (s.params[eventName]) {\n s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n var i;\n // Trigger events\n if (s.emitterEventListeners[eventName]) {\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n // Trigger plugins\n if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n };\n s.on = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = [];\n s.emitterEventListeners[eventName].push(handler);\n return s;\n };\n s.off = function (eventName, handler) {\n var i;\n eventName = normalizeEventName(eventName);\n if (typeof handler === 'undefined') {\n // Remove all handlers for such event\n s.emitterEventListeners[eventName] = [];\n return s;\n }\n if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return;\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1);\n }\n return s;\n };\n s.once = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n var _handler = function () {\n handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);\n s.off(eventName, _handler);\n };\n s.on(eventName, _handler);\n return s;\n };\n\n // Accessibility tools\n s.a11y = {\n makeFocusable: function ($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n addRole: function ($el, role) {\n $el.attr('role', role);\n return $el;\n },\n \n addLabel: function ($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n \n disable: function ($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n \n enable: function ($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n \n onEnterKey: function (event) {\n if (event.keyCode !== 13) return;\n if ($(event.target).is(s.params.nextButton)) {\n s.onClickNext(event);\n if (s.isEnd) {\n s.a11y.notify(s.params.lastSlideMessage);\n }\n else {\n s.a11y.notify(s.params.nextSlideMessage);\n }\n }\n else if ($(event.target).is(s.params.prevButton)) {\n s.onClickPrev(event);\n if (s.isBeginning) {\n s.a11y.notify(s.params.firstSlideMessage);\n }\n else {\n s.a11y.notify(s.params.prevSlideMessage);\n }\n }\n if ($(event.target).is('.' + s.params.bulletClass)) {\n $(event.target)[0].click();\n }\n },\n \n liveRegion: $(''),\n \n notify: function (message) {\n var notification = s.a11y.liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n },\n init: function () {\n // Setup accessibility\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.a11y.makeFocusable(s.nextButton);\n s.a11y.addRole(s.nextButton, 'button');\n s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.a11y.makeFocusable(s.prevButton);\n s.a11y.addRole(s.prevButton, 'button');\n s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage);\n }\n \n $(s.container).append(s.a11y.liveRegion);\n },\n initPagination: function () {\n if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) {\n s.bullets.each(function () {\n var bullet = $(this);\n s.a11y.makeFocusable(bullet);\n s.a11y.addRole(bullet, 'button');\n s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1));\n });\n }\n },\n destroy: function () {\n if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove();\n }\n };\n \n\n /*=========================\n Init/Destroy\n ===========================*/\n s.init = function () {\n if (s.params.loop) s.createLoop();\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n if (s.params.scrollbarDraggable) {\n s.scrollbar.enableDraggable();\n }\n }\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n if (!s.params.loop) s.updateProgress();\n s.effects[s.params.effect].setTranslate();\n }\n if (s.params.loop) {\n s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit);\n }\n else {\n s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit);\n if (s.params.initialSlide === 0) {\n if (s.parallax && s.params.parallax) s.parallax.setTranslate();\n if (s.lazy && s.params.lazyLoading) {\n s.lazy.load();\n s.lazy.initialImageLoaded = true;\n }\n }\n }\n s.attachEvents();\n if (s.params.observer && s.support.observer) {\n s.initObservers();\n }\n if (s.params.preloadImages && !s.params.lazyLoading) {\n s.preloadImages();\n }\n if (s.params.autoplay) {\n s.startAutoplay();\n }\n if (s.params.keyboardControl) {\n if (s.enableKeyboardControl) s.enableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.enableMousewheelControl) s.enableMousewheelControl();\n }\n if (s.params.hashnav) {\n if (s.hashnav) s.hashnav.init();\n }\n if (s.params.a11y && s.a11y) s.a11y.init();\n s.emit('onInit', s);\n };\n \n // Cleanup dynamic styles\n s.cleanupStyles = function () {\n // Container\n s.container.removeClass(s.classNames.join(' ')).removeAttr('style');\n \n // Wrapper\n s.wrapper.removeAttr('style');\n \n // Slides\n if (s.slides && s.slides.length) {\n s.slides\n .removeClass([\n s.params.slideVisibleClass,\n s.params.slideActiveClass,\n s.params.slideNextClass,\n s.params.slidePrevClass\n ].join(' '))\n .removeAttr('style')\n .removeAttr('data-swiper-column')\n .removeAttr('data-swiper-row');\n }\n \n // Pagination/Bullets\n if (s.paginationContainer && s.paginationContainer.length) {\n s.paginationContainer.removeClass(s.params.paginationHiddenClass);\n }\n if (s.bullets && s.bullets.length) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n }\n \n // Buttons\n if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n \n // Scrollbar\n if (s.params.scrollbar && s.scrollbar) {\n if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style');\n if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style');\n }\n };\n \n // Destroy\n s.destroy = function (deleteInstance, cleanupStyles) {\n // Detach evebts\n s.detachEvents();\n // Stop autoplay\n s.stopAutoplay();\n // Disable draggable\n if (s.params.scrollbar && s.scrollbar) {\n if (s.params.scrollbarDraggable) {\n s.scrollbar.disableDraggable();\n }\n }\n // Destroy loop\n if (s.params.loop) {\n s.destroyLoop();\n }\n // Cleanup styles\n if (cleanupStyles) {\n s.cleanupStyles();\n }\n // Disconnect observer\n s.disconnectObservers();\n // Disable keyboard/mousewheel\n if (s.params.keyboardControl) {\n if (s.disableKeyboardControl) s.disableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.disableMousewheelControl) s.disableMousewheelControl();\n }\n // Disable a11y\n if (s.params.a11y && s.a11y) s.a11y.destroy();\n // Destroy callback\n s.emit('onDestroy');\n // Delete instance\n if (deleteInstance !== false) s = null;\n };\n \n s.init();\n \n\n \n // Return swiper instance\n return s;\n };\n \n\n /*==================================================\n Prototype\n ====================================================*/\n Swiper.prototype = {\n isSafari: (function () {\n var ua = navigator.userAgent.toLowerCase();\n return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n })(),\n isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent),\n isArray: function (arr) {\n return Object.prototype.toString.apply(arr) === '[object Array]';\n },\n /*==================================================\n Browser\n ====================================================*/\n browser: {\n ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled,\n ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1)\n },\n /*==================================================\n Devices\n ====================================================*/\n device: (function () {\n var ua = navigator.userAgent;\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\n var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n var iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\n return {\n ios: ipad || iphone || ipod,\n android: android\n };\n })(),\n /*==================================================\n Feature Detection\n ====================================================*/\n support: {\n touch : (window.Modernizr && Modernizr.touch === true) || (function () {\n return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch);\n })(),\n \n transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () {\n var div = document.createElement('div').style;\n return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div);\n })(),\n \n flexbox: (function () {\n var div = document.createElement('div').style;\n var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');\n for (var i = 0; i < styles.length; i++) {\n if (styles[i] in div) return true;\n }\n })(),\n \n observer: (function () {\n return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n })()\n },\n /*==================================================\n Plugins\n ====================================================*/\n plugins: {}\n };\n \n\n /*===========================\n Get jQuery\n ===========================*/\n \n addLibraryPlugin($);\n \n var domLib = $;\n\n /*===========================\n Add .swiper plugin from Dom libraries\n ===========================*/\n function addLibraryPlugin(lib) {\n lib.fn.swiper = function (params) {\n var firstInstance;\n lib(this).each(function () {\n var s = new Swiper(this, params);\n if (!firstInstance) firstInstance = s;\n });\n return firstInstance;\n };\n }\n \n if (domLib) {\n if (!('transitionEnd' in domLib.fn)) {\n domLib.fn.transitionEnd = function (callback) {\n var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],\n i, j, dom = this;\n function fireCallBack(e) {\n /*jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i++) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i++) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n };\n }\n if (!('transform' in domLib.fn)) {\n domLib.fn.transform = function (transform) {\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;\n }\n return this;\n };\n }\n if (!('transition' in domLib.fn)) {\n domLib.fn.transition = function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;\n }\n return this;\n };\n }\n }\n\n\treturn Swiper;\n}));\n//# sourceMappingURL=maps/swiper.jquery.umd.js.map\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/libs/swiper/js/maps/swiper.min.js.map b/src/libs/swiper/js/maps/swiper.min.js.map new file mode 100755 index 0000000..fda10db --- /dev/null +++ b/src/libs/swiper/js/maps/swiper.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["swiper.js"],"names":["addLibraryPlugin","lib","fn","swiper","params","firstInstance","this","each","s","Swiper","$","container","round","a","Math","floor","autoplay","autoplayTimeoutId","setTimeout","loop","fixLoop","_slideNext","emit","isEnd","autoplayStopOnLast","stopAutoplay","_slideTo","findElementInEvent","e","selector","el","target","is","parents","nodeType","found","index","_el","length","initObserver","options","ObserverFunc","window","MutationObserver","WebkitMutationObserver","observer","mutations","forEach","mutation","onResize","observe","attributes","childList","characterData","observers","push","handleKeyboard","originalEvent","kc","keyCode","charCode","allowSwipeToNext","isHorizontal","allowSwipeToPrev","shiftKey","altKey","ctrlKey","metaKey","document","activeElement","nodeName","toLowerCase","inView","windowScroll","left","pageXOffset","top","pageYOffset","windowWidth","innerWidth","windowHeight","innerHeight","swiperOffset","offset","rtl","scrollLeft","swiperCoord","width","height","i","point","preventDefault","returnValue","slideNext","slidePrev","handleMousewheel","we","mousewheel","event","delta","rtlFactor","mousewheelForceToAxis","abs","wheelDeltaX","wheelDeltaY","detail","deltaX","deltaY","mousewheelInvert","freeMode","position","getWrapperTranslate","mousewheelSensitivity","wasBeginning","isBeginning","wasEnd","minTranslate","maxTranslate","setWrapperTransition","setWrapperTranslate","updateProgress","updateActiveIndex","updateClasses","freeModeSticky","clearTimeout","timeout","slideReset","lazyLoading","lazy","load","Date","getTime","lastScrollTime","animating","mousewheelReleaseOnEdges","setParallaxTransform","progress","p","pX","pY","attr","indexOf","parseInt","transform","normalizeEventName","eventName","toUpperCase","substring","defaults","direction","touchEventsTarget","initialSlide","speed","autoplayDisableOnInteraction","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","freeModeMomentum","freeModeMomentumRatio","freeModeMomentumBounce","freeModeMomentumBounceRatio","freeModeMinimumVelocity","autoHeight","setWrapperSize","virtualTranslate","effect","coverflow","rotate","stretch","depth","modifier","slideShadows","flip","limitRotation","cube","shadow","shadowOffset","shadowScale","fade","crossFade","parallax","scrollbar","scrollbarHide","scrollbarDraggable","scrollbarSnapOnRelease","keyboardControl","mousewheelControl","hashnav","breakpoints","undefined","spaceBetween","slidesPerView","slidesPerColumn","slidesPerColumnFill","slidesPerGroup","centeredSlides","slidesOffsetBefore","slidesOffsetAfter","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","onlyExternal","threshold","touchMoveStopPropagation","uniqueNavElements","pagination","paginationElement","paginationClickable","paginationHide","paginationBulletRender","paginationProgressRender","paginationFractionRender","paginationCustomRender","paginationType","resistance","resistanceRatio","nextButton","prevButton","watchSlidesProgress","watchSlidesVisibility","grabCursor","preventClicks","preventClicksPropagation","slideToClickedSlide","lazyLoadingInPrevNext","lazyLoadingInPrevNextAmount","lazyLoadingOnTransitionStart","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","control","controlInverse","controlBy","swipeHandler","noSwiping","noSwipingClass","slideClass","slideActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slidePrevClass","wrapperClass","bulletClass","bulletActiveClass","buttonDisabledClass","paginationCurrentClass","paginationTotalClass","paginationHiddenClass","paginationProgressbarClass","observeParents","a11y","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","runCallbacksOnInit","initialVirtualTranslate","originalParams","param","Dom7","jQuery","deepParam","def","deepDef","classNames","Zepto","currentBreakpoint","getActiveBreakpoint","breakpoint","points","hasOwnProperty","sort","b","setBreakpoint","breakPointsParams","needsReLoop","destroyLoop","reLoop","swipers","data","support","flexbox","transforms3d","touch","wrapper","children","paginationContainer","find","addClass","dir","css","wrongRTL","device","android","join","translate","velocity","lockSwipeToNext","lockSwipeToPrev","lockSwipes","unlockSwipeToNext","unlockSwipeToPrev","unlockSwipes","style","cursor","imagesToLoad","imagesLoaded","loadImage","imgElement","src","srcset","checkForComplete","callback","onReady","image","complete","Image","onload","onerror","_onReady","update","currentSrc","getAttribute","autoplaying","autoplayPaused","startAutoplay","internal","pauseAutoplay","transitionEnd","snapGrid","updateAutoHeight","slide","slides","eq","activeIndex","newHeight","offsetHeight","updateContainerSize","clientWidth","clientHeight","size","updateSlidesSize","slidesGrid","slidesSizesGrid","slidePosition","prevSlideSize","parseFloat","replace","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesNumberEvenToRows","ceil","max","slideSize","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","order","margin-top","outerWidth","outerHeight","swiperSlideSize","newSlidesGrid","updateSlidesOffset","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","removeClass","slideProgress","slideBefore","slideAfter","isVisible","translatesDiff","newActiveIndex","snapIndex","previousIndex","activeSlide","nextSlide","next","prevSlide","prev","current","total","bullets","text","scale","scaleX","scaleY","transition","html","disable","enable","updatePagination","paginationHTML","numberOfBullets","initPagination","updateTranslate","forceSetTranslate","newTranslate","min","set","translated","controller","spline","slideTo","forceUpdatePagination","slideChangedBySlideTo","desktopEvents","navigator","pointerEnabled","msPointerEnabled","touchEvents","start","move","end","initEvents","detach","actionDom","action","moveCapture","nested","browser","ie","onTouchStart","onTouchMove","onTouchEnd","ios","onClickNext","onEnterKey","onClickPrev","onClickIndex","attachEvents","detachEvents","allowClick","stopPropagation","stopImmediatePropagation","updateClickedSlide","slideFound","clickedSlide","clickedIndex","realIndex","slideToIndex","isTouched","isMoved","allowTouchCallbacks","touchStartTime","isScrolling","currentTranslate","startTranslate","allowThresholdMove","clickTimeout","allowMomentumBounce","formElements","lastClickTime","now","velocities","touches","startX","startY","currentX","currentY","diff","isTouchEvent","startMoving","type","which","targetTouches","pageX","pageY","swipeDirection","blur","preventedByNestedSwiper","atan2","PI","ieTouch","trigger","disableParentSwiper","pow","time","touchEndTime","timeDiff","hasClass","toggleClass","currentPos","lastMoveEvent","pop","velocityEvent","distance","momentumDuration","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","j","onTransitionStart","onTransitionEnd","stopIndex","groupSize","ratio","slideIndex","runCallbacks","setHash","clientLeft","_slidePrev","duration","byController","effects","setTransition","x","y","z","setTranslate","getTranslate","axis","matrix","curTransform","curStyle","transformMatrix","getComputedStyle","WebKitCSSMatrix","webkitTransform","split","map","MozTransform","OTransform","MsTransform","msTransform","getPropertyValue","toString","m41","m42","initObservers","containerParents","disconnectObservers","disconnect","createLoop","remove","prependSlides","appendSlides","append","cloneNode","prepend","removeAttr","updatePosition","oldIndex","newIndex","appendSlide","prependSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","tx","ty","slideOpacity","opacity","eventTriggered","triggerEvents","rotateY","rotateX","zIndex","shadowBefore","shadowAfter","cubeShadow","wrapperRotate","slideAngle","tz","-webkit-transform-origin","-moz-transform-origin","-ms-transform-origin","transform-origin","shadowAngle","multiplier","sin","cos","scale1","scale2","zFactor","isSafari","isUiWebView","center","slideOffset","offsetMultiplier","translateZ","translateY","translateX","slideTransform","ws","perspectiveOrigin","initialImageLoaded","loadImageInSlide","loadInDuplicate","img","add","_img","background","slideOriginalIndex","originalSlide","duplicatedSlide","amount","spv","maxIndex","minIndex","setDragPosition","sb","pointerPosition","clientX","clientY","track","dragSize","positionMin","moveDivider","positionMax","dragStart","dragTimeout","drag","dragMove","dragEnd","enableDraggable","on","disableDraggable","off","trackSize","offsetWidth","divider","display","newPos","newSize","LinearSpline","lastIndex","i1","i3","interpolate","x2","binarySearch","guess","array","val","getInterpolateFunction","c","setControlledTranslate","controlledTranslate","controlled","isArray","setControlledTransition","init","initialized","hash","location","slideHash","disableKeyboardControl","enableKeyboardControl","WheelEvent","onmousewheel","disableMousewheelControl","enableMousewheelControl","parallaxDuration","_plugins","plugin","plugins","callPlugins","arguments","emitterEventListeners","handler","splice","once","_handler","makeFocusable","$el","addRole","role","addLabel","label","notify","click","liveRegion","message","notification","bullet","destroy","cleanupStyles","deleteInstance","prototype","ua","userAgent","test","arr","Object","apply","msMaxTouchPoints","maxTouchPoints","match","ipad","ipod","iphone","Modernizr","DocumentTouch","csstransforms3d","div","createElement","styles","_this","context","els","tempParent","trim","toCreate","innerHTML","childNodes","querySelectorAll","getElementById","className","classes","classList","contains","toggle","attrs","value","setAttribute","attrName","removeAttribute","key","dom7ElementDataStorage","dataKey","elStyle","webkitTransitionDuration","MsTransitionDuration","msTransitionDuration","MozTransitionDuration","OTransitionDuration","transitionDuration","targetSelector","listener","capture","handleLiveEvent","call","k","events","addEventListener","dom7LiveListeners","liveListener","removeEventListener","proxy","dom","eventData","evt","CustomEvent","bubbles","cancelable","createEvent","initEvent","dispatchEvent","fireCallBack","includeMargins","box","getBoundingClientRect","body","clientTop","scrollTop","props","prop","textContent","compareWith","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","child","previousSibling","returnIndex","newChild","tempDiv","firstChild","appendChild","insertBefore","before","parentNode","insertAfter","after","nextSibling","nextElementSibling","nextAll","nextEls","previousElementSibling","prevAll","prevEls","parent","unique","foundElements","removeChild","toAdd","swiperDomPlugins","domLib","module","exports","define","amd"],"mappings":"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","file":"swiper.min.js","sourcesContent":["/**\n * Swiper 3.3.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * \n * http://www.idangero.us/swiper/\n * \n * Copyright 2016, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n * \n * Licensed under MIT\n * \n * Released on: February 7, 2016\n */\n(function () {\n 'use strict';\n var $;\n /*===========================\n Swiper\n ===========================*/\n var Swiper = function (container, params) {\n if (!(this instanceof Swiper)) return new Swiper(container, params);\n\n var defaults = {\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n // autoplay\n autoplay: false,\n autoplayDisableOnInteraction: true,\n autoplayStopOnLast: false,\n // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n iOSEdgeSwipeDetection: false,\n iOSEdgeSwipeThreshold: 20,\n // Free mode\n freeMode: false,\n freeModeMomentum: true,\n freeModeMomentumRatio: 1,\n freeModeMomentumBounce: true,\n freeModeMomentumBounceRatio: 1,\n freeModeSticky: false,\n freeModeMinimumVelocity: 0.02,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n coverflow: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows : true\n },\n flip: {\n slideShadows : true,\n limitRotation: true\n },\n cube: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n },\n fade: {\n crossFade: false\n },\n // Parallax\n parallax: false,\n // Scrollbar\n scrollbar: null,\n scrollbarHide: true,\n scrollbarDraggable: false,\n scrollbarSnapOnRelease: false,\n // Keyboard Mousewheel\n keyboardControl: false,\n mousewheelControl: false,\n mousewheelReleaseOnEdges: false,\n mousewheelInvert: false,\n mousewheelForceToAxis: false,\n mousewheelSensitivity: 1,\n // Hash Navigation\n hashnav: false,\n // Breakpoints\n breakpoints: undefined,\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n onlyExternal: false,\n threshold: 0,\n touchMoveStopPropagation: true,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Pagination\n pagination: null,\n paginationElement: 'span',\n paginationClickable: false,\n paginationHide: false,\n paginationBulletRender: null,\n paginationProgressRender: null,\n paginationFractionRender: null,\n paginationCustomRender: null,\n paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom'\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Next/prev buttons\n nextButton: null,\n prevButton: null,\n // Progress\n watchSlidesProgress: false,\n watchSlidesVisibility: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Lazy Loading\n lazyLoading: false,\n lazyLoadingInPrevNext: false,\n lazyLoadingInPrevNextAmount: 1,\n lazyLoadingOnTransitionStart: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n // Control\n control: undefined,\n controlInverse: false,\n controlBy: 'slide', //or 'container'\n // Swiping/no swiping\n allowSwipeToPrev: true,\n allowSwipeToNext: true,\n swipeHandler: null, //'.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n // NS\n slideClass: 'swiper-slide',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n buttonDisabledClass: 'swiper-button-disabled',\n paginationCurrentClass: 'swiper-pagination-current',\n paginationTotalClass: 'swiper-pagination-total',\n paginationHiddenClass: 'swiper-pagination-hidden',\n paginationProgressbarClass: 'swiper-pagination-progressbar',\n // Observer\n observer: false,\n observeParents: false,\n // Accessibility\n a11y: false,\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n // Callbacks\n runCallbacksOnInit: true\n /*\n Callbacks:\n onInit: function (swiper)\n onDestroy: function (swiper)\n onClick: function (swiper, e)\n onTap: function (swiper, e)\n onDoubleTap: function (swiper, e)\n onSliderMove: function (swiper, e)\n onSlideChangeStart: function (swiper)\n onSlideChangeEnd: function (swiper)\n onTransitionStart: function (swiper)\n onTransitionEnd: function (swiper)\n onImagesReady: function (swiper)\n onProgress: function (swiper, progress)\n onTouchStart: function (swiper, e)\n onTouchMove: function (swiper, e)\n onTouchMoveOpposite: function (swiper, e)\n onTouchEnd: function (swiper, e)\n onReachBeginning: function (swiper)\n onReachEnd: function (swiper)\n onSetTransition: function (swiper, duration)\n onSetTranslate: function (swiper, translate)\n onAutoplayStart: function (swiper)\n onAutoplayStop: function (swiper),\n onLazyImageLoad: function (swiper, slide, image)\n onLazyImageReady: function (swiper, slide, image)\n */\n \n };\n var initialVirtualTranslate = params && params.virtualTranslate;\n \n params = params || {};\n var originalParams = {};\n for (var param in params) {\n if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) {\n originalParams[param] = {};\n for (var deepParam in params[param]) {\n originalParams[param][deepParam] = params[param][deepParam];\n }\n }\n else {\n originalParams[param] = params[param];\n }\n }\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n else if (typeof params[def] === 'object') {\n for (var deepDef in defaults[def]) {\n if (typeof params[def][deepDef] === 'undefined') {\n params[def][deepDef] = defaults[def][deepDef];\n }\n }\n }\n }\n \n // Swiper\n var s = this;\n \n // Params\n s.params = params;\n s.originalParams = originalParams;\n \n // Classname\n s.classNames = [];\n /*=========================\n Dom Library and plugins\n ===========================*/\n if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){\n $ = Dom7;\n }\n if (typeof $ === 'undefined') {\n if (typeof Dom7 === 'undefined') {\n $ = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n $ = Dom7;\n }\n if (!$) return;\n }\n // Export it to Swiper instance\n s.$ = $;\n \n /*=========================\n Breakpoints\n ===========================*/\n s.currentBreakpoint = undefined;\n s.getActiveBreakpoint = function () {\n //Get breakpoint for window width\n if (!s.params.breakpoints) return false;\n var breakpoint = false;\n var points = [], point;\n for ( point in s.params.breakpoints ) {\n if (s.params.breakpoints.hasOwnProperty(point)) {\n points.push(point);\n }\n }\n points.sort(function (a, b) {\n return parseInt(a, 10) > parseInt(b, 10);\n });\n for (var i = 0; i < points.length; i++) {\n point = points[i];\n if (point >= window.innerWidth && !breakpoint) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n };\n s.setBreakpoint = function () {\n //Set breakpoint for window width and update parameters\n var breakpoint = s.getActiveBreakpoint();\n if (breakpoint && s.currentBreakpoint !== breakpoint) {\n var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;\n var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);\n for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\n if(needsReLoop && s.destroyLoop) {\n s.reLoop(true);\n }\n }\n };\n // Set breakpoint on load\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n /*=========================\n Preparation - Define Container, Wrapper and Pagination\n ===========================*/\n s.container = $(container);\n if (s.container.length === 0) return;\n if (s.container.length > 1) {\n var swipers = [];\n s.container.each(function () {\n var container = this;\n swipers.push(new Swiper(this, params));\n });\n return swipers;\n }\n \n // Save instance in container HTML Element and in data\n s.container[0].swiper = s;\n s.container.data('swiper', s);\n \n s.classNames.push('swiper-container-' + s.params.direction);\n \n if (s.params.freeMode) {\n s.classNames.push('swiper-container-free-mode');\n }\n if (!s.support.flexbox) {\n s.classNames.push('swiper-container-no-flexbox');\n s.params.slidesPerColumn = 1;\n }\n if (s.params.autoHeight) {\n s.classNames.push('swiper-container-autoheight');\n }\n // Enable slides progress when required\n if (s.params.parallax || s.params.watchSlidesVisibility) {\n s.params.watchSlidesProgress = true;\n }\n // Coverflow / 3D\n if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {\n if (s.support.transforms3d) {\n s.params.watchSlidesProgress = true;\n s.classNames.push('swiper-container-3d');\n }\n else {\n s.params.effect = 'slide';\n }\n }\n if (s.params.effect !== 'slide') {\n s.classNames.push('swiper-container-' + s.params.effect);\n }\n if (s.params.effect === 'cube') {\n s.params.resistanceRatio = 0;\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.centeredSlides = false;\n s.params.spaceBetween = 0;\n s.params.virtualTranslate = true;\n s.params.setWrapperSize = false;\n }\n if (s.params.effect === 'fade' || s.params.effect === 'flip') {\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.watchSlidesProgress = true;\n s.params.spaceBetween = 0;\n s.params.setWrapperSize = false;\n if (typeof initialVirtualTranslate === 'undefined') {\n s.params.virtualTranslate = true;\n }\n }\n \n // Grab Cursor\n if (s.params.grabCursor && s.support.touch) {\n s.params.grabCursor = false;\n }\n \n // Wrapper\n s.wrapper = s.container.children('.' + s.params.wrapperClass);\n \n // Pagination\n if (s.params.pagination) {\n s.paginationContainer = $(s.params.pagination);\n if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {\n s.paginationContainer = s.container.find(s.params.pagination);\n }\n \n if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {\n s.paginationContainer.addClass('swiper-pagination-clickable');\n }\n else {\n s.params.paginationClickable = false;\n }\n s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType);\n }\n // Next/Prev Buttons\n if (s.params.nextButton || s.params.prevButton) {\n if (s.params.nextButton) {\n s.nextButton = $(s.params.nextButton);\n if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {\n s.nextButton = s.container.find(s.params.nextButton);\n }\n }\n if (s.params.prevButton) {\n s.prevButton = $(s.params.prevButton);\n if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {\n s.prevButton = s.container.find(s.params.prevButton);\n }\n }\n }\n \n // Is Horizontal\n s.isHorizontal = function () {\n return s.params.direction === 'horizontal';\n };\n // s.isH = isH;\n \n // RTL\n s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');\n if (s.rtl) {\n s.classNames.push('swiper-container-rtl');\n }\n \n // Wrong RTL support\n if (s.rtl) {\n s.wrongRTL = s.wrapper.css('display') === '-webkit-box';\n }\n \n // Columns\n if (s.params.slidesPerColumn > 1) {\n s.classNames.push('swiper-container-multirow');\n }\n \n // Check for Android\n if (s.device.android) {\n s.classNames.push('swiper-container-android');\n }\n \n // Add classes\n s.container.addClass(s.classNames.join(' '));\n \n // Translate\n s.translate = 0;\n \n // Progress\n s.progress = 0;\n \n // Velocity\n s.velocity = 0;\n \n /*=========================\n Locks, unlocks\n ===========================*/\n s.lockSwipeToNext = function () {\n s.params.allowSwipeToNext = false;\n };\n s.lockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = false;\n };\n s.lockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;\n };\n s.unlockSwipeToNext = function () {\n s.params.allowSwipeToNext = true;\n };\n s.unlockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = true;\n };\n s.unlockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;\n };\n \n /*=========================\n Round helper\n ===========================*/\n function round(a) {\n return Math.floor(a);\n }\n /*=========================\n Set grab cursor\n ===========================*/\n if (s.params.grabCursor) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grab';\n s.container[0].style.cursor = '-moz-grab';\n s.container[0].style.cursor = 'grab';\n }\n /*=========================\n Update on Images Ready\n ===========================*/\n s.imagesToLoad = [];\n s.imagesLoaded = 0;\n \n s.loadImage = function (imgElement, src, srcset, checkForComplete, callback) {\n var image;\n function onReady () {\n if (callback) callback();\n }\n if (!imgElement.complete || !checkForComplete) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n \n } else {//image already loaded...\n onReady();\n }\n };\n s.preloadImages = function () {\n s.imagesToLoad = s.container.find('img');\n function _onReady() {\n if (typeof s === 'undefined' || s === null) return;\n if (s.imagesLoaded !== undefined) s.imagesLoaded++;\n if (s.imagesLoaded === s.imagesToLoad.length) {\n if (s.params.updateOnImagesReady) s.update();\n s.emit('onImagesReady', s);\n }\n }\n for (var i = 0; i < s.imagesToLoad.length; i++) {\n s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), true, _onReady);\n }\n };\n \n /*=========================\n Autoplay\n ===========================*/\n s.autoplayTimeoutId = undefined;\n s.autoplaying = false;\n s.autoplayPaused = false;\n function autoplay() {\n s.autoplayTimeoutId = setTimeout(function () {\n if (s.params.loop) {\n s.fixLoop();\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!s.isEnd) {\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!params.autoplayStopOnLast) {\n s._slideTo(0);\n s.emit('onAutoplay', s);\n }\n else {\n s.stopAutoplay();\n }\n }\n }\n }, s.params.autoplay);\n }\n s.startAutoplay = function () {\n if (typeof s.autoplayTimeoutId !== 'undefined') return false;\n if (!s.params.autoplay) return false;\n if (s.autoplaying) return false;\n s.autoplaying = true;\n s.emit('onAutoplayStart', s);\n autoplay();\n };\n s.stopAutoplay = function (internal) {\n if (!s.autoplayTimeoutId) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplaying = false;\n s.autoplayTimeoutId = undefined;\n s.emit('onAutoplayStop', s);\n };\n s.pauseAutoplay = function (speed) {\n if (s.autoplayPaused) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplayPaused = true;\n if (speed === 0) {\n s.autoplayPaused = false;\n autoplay();\n }\n else {\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.autoplayPaused = false;\n if (!s.autoplaying) {\n s.stopAutoplay();\n }\n else {\n autoplay();\n }\n });\n }\n };\n /*=========================\n Min/Max Translate\n ===========================*/\n s.minTranslate = function () {\n return (-s.snapGrid[0]);\n };\n s.maxTranslate = function () {\n return (-s.snapGrid[s.snapGrid.length - 1]);\n };\n /*=========================\n Slider/slides sizes\n ===========================*/\n s.updateAutoHeight = function () {\n // Update Height\n var slide = s.slides.eq(s.activeIndex)[0];\n if (typeof slide !== 'undefined') {\n var newHeight = slide.offsetHeight;\n if (newHeight) s.wrapper.css('height', newHeight + 'px');\n }\n };\n s.updateContainerSize = function () {\n var width, height;\n if (typeof s.params.width !== 'undefined') {\n width = s.params.width;\n }\n else {\n width = s.container[0].clientWidth;\n }\n if (typeof s.params.height !== 'undefined') {\n height = s.params.height;\n }\n else {\n height = s.container[0].clientHeight;\n }\n if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) {\n return;\n }\n \n //Subtract paddings\n width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10);\n height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10);\n \n // Store values\n s.width = width;\n s.height = height;\n s.size = s.isHorizontal() ? s.width : s.height;\n };\n \n s.updateSlidesSize = function () {\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n s.snapGrid = [];\n s.slidesGrid = [];\n s.slidesSizesGrid = [];\n \n var spaceBetween = s.params.spaceBetween,\n slidePosition = -s.params.slidesOffsetBefore,\n i,\n prevSlideSize = 0,\n index = 0;\n if (typeof s.size === 'undefined') return;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size;\n }\n \n s.virtualSize = -spaceBetween;\n // reset margins\n if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''});\n else s.slides.css({marginRight: '', marginBottom: ''});\n \n var slidesNumberEvenToRows;\n if (s.params.slidesPerColumn > 1) {\n if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) {\n slidesNumberEvenToRows = s.slides.length;\n }\n else {\n slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn;\n }\n if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn);\n }\n }\n \n // Calc slides\n var slideSize;\n var slidesPerColumn = s.params.slidesPerColumn;\n var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length);\n for (i = 0; i < s.slides.length; i++) {\n slideSize = 0;\n var slide = s.slides.eq(i);\n if (s.params.slidesPerColumn > 1) {\n // Set slides order\n var newSlideOrderIndex;\n var column, row;\n if (s.params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - column * slidesPerColumn;\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) {\n if (++row >= slidesPerColumn) {\n row = 0;\n column++;\n }\n }\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;\n slide\n .css({\n '-webkit-box-ordinal-group': newSlideOrderIndex,\n '-moz-box-ordinal-group': newSlideOrderIndex,\n '-ms-flex-order': newSlideOrderIndex,\n '-webkit-order': newSlideOrderIndex,\n 'order': newSlideOrderIndex\n });\n }\n else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide\n .css({\n 'margin-top': (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px')\n })\n .attr('data-swiper-column', column)\n .attr('data-swiper-row', row);\n \n }\n if (slide.css('display') === 'none') continue;\n if (s.params.slidesPerView === 'auto') {\n slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n if (s.params.roundLengths) slideSize = round(slideSize);\n }\n else {\n slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView;\n if (s.params.roundLengths) slideSize = round(slideSize);\n \n if (s.isHorizontal()) {\n s.slides[i].style.width = slideSize + 'px';\n }\n else {\n s.slides[i].style.height = slideSize + 'px';\n }\n }\n s.slides[i].swiperSlideSize = slideSize;\n s.slidesSizesGrid.push(slideSize);\n \n \n if (s.params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n }\n else {\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n \n s.virtualSize += slideSize + spaceBetween;\n \n prevSlideSize = slideSize;\n \n index ++;\n }\n s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter;\n var newSlidesGrid;\n \n if (\n s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) {\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n if (!s.support.flexbox || s.params.setWrapperSize) {\n if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n \n if (s.params.slidesPerColumn > 1) {\n s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows;\n s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween;\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n if (s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]);\n }\n s.snapGrid = newSlidesGrid;\n }\n }\n \n // Remove last grid elements depending on width\n if (!s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] <= s.virtualSize - s.size) {\n newSlidesGrid.push(s.snapGrid[i]);\n }\n }\n s.snapGrid = newSlidesGrid;\n if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) {\n s.snapGrid.push(s.virtualSize - s.size);\n }\n }\n if (s.snapGrid.length === 0) s.snapGrid = [0];\n \n if (s.params.spaceBetween !== 0) {\n if (s.isHorizontal()) {\n if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'});\n else s.slides.css({marginRight: spaceBetween + 'px'});\n }\n else s.slides.css({marginBottom: spaceBetween + 'px'});\n }\n if (s.params.watchSlidesProgress) {\n s.updateSlidesOffset();\n }\n };\n s.updateSlidesOffset = function () {\n for (var i = 0; i < s.slides.length; i++) {\n s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop;\n }\n };\n \n /*=========================\n Slider/slides progress\n ===========================*/\n s.updateSlidesProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n if (s.slides.length === 0) return;\n if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset();\n \n var offsetCenter = -translate;\n if (s.rtl) offsetCenter = translate;\n \n // Visible Slides\n s.slides.removeClass(s.params.slideVisibleClass);\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides[i];\n var slideProgress = (offsetCenter - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween);\n if (s.params.watchSlidesVisibility) {\n var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n var slideAfter = slideBefore + s.slidesSizesGrid[i];\n var isVisible =\n (slideBefore >= 0 && slideBefore < s.size) ||\n (slideAfter > 0 && slideAfter <= s.size) ||\n (slideBefore <= 0 && slideAfter >= s.size);\n if (isVisible) {\n s.slides.eq(i).addClass(s.params.slideVisibleClass);\n }\n }\n slide.progress = s.rtl ? -slideProgress : slideProgress;\n }\n };\n s.updateProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n var wasBeginning = s.isBeginning;\n var wasEnd = s.isEnd;\n if (translatesDiff === 0) {\n s.progress = 0;\n s.isBeginning = s.isEnd = true;\n }\n else {\n s.progress = (translate - s.minTranslate()) / (translatesDiff);\n s.isBeginning = s.progress <= 0;\n s.isEnd = s.progress >= 1;\n }\n if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s);\n if (s.isEnd && !wasEnd) s.emit('onReachEnd', s);\n \n if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate);\n s.emit('onProgress', s, s.progress);\n };\n s.updateActiveIndex = function () {\n var translate = s.rtl ? s.translate : -s.translate;\n var newActiveIndex, i, snapIndex;\n for (i = 0; i < s.slidesGrid.length; i ++) {\n if (typeof s.slidesGrid[i + 1] !== 'undefined') {\n if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) {\n newActiveIndex = i;\n }\n else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) {\n newActiveIndex = i + 1;\n }\n }\n else {\n if (translate >= s.slidesGrid[i]) {\n newActiveIndex = i;\n }\n }\n }\n // Normalize slideIndex\n if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0;\n // for (i = 0; i < s.slidesGrid.length; i++) {\n // if (- translate >= s.slidesGrid[i]) {\n // newActiveIndex = i;\n // }\n // }\n snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup);\n if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1;\n \n if (newActiveIndex === s.activeIndex) {\n return;\n }\n s.snapIndex = snapIndex;\n s.previousIndex = s.activeIndex;\n s.activeIndex = newActiveIndex;\n s.updateClasses();\n };\n \n /*=========================\n Classes\n ===========================*/\n s.updateClasses = function () {\n s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass);\n var activeSlide = s.slides.eq(s.activeIndex);\n // Active classes\n activeSlide.addClass(s.params.slideActiveClass);\n // Next Slide\n var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n if (s.params.loop && nextSlide.length === 0) {\n s.slides.eq(0).addClass(s.params.slideNextClass);\n }\n // Prev Slide\n var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\n if (s.params.loop && prevSlide.length === 0) {\n s.slides.eq(-1).addClass(s.params.slidePrevClass);\n }\n \n // Pagination\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n // Current/Total\n var current,\n total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n if (s.params.loop) {\n current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup);\n if (current > s.slides.length - 1 - s.loopedSlides * 2) {\n current = current - (s.slides.length - s.loopedSlides * 2);\n }\n if (current > total - 1) current = current - total;\n if (current < 0 && s.params.paginationType !== 'bullets') current = total + current;\n }\n else {\n if (typeof s.snapIndex !== 'undefined') {\n current = s.snapIndex;\n }\n else {\n current = s.activeIndex || 0;\n }\n }\n // Types\n if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n if (s.paginationContainer.length > 1) {\n s.bullets.each(function () {\n if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass);\n });\n }\n else {\n s.bullets.eq(current).addClass(s.params.bulletActiveClass);\n }\n }\n if (s.params.paginationType === 'fraction') {\n s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1);\n s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total);\n }\n if (s.params.paginationType === 'progress') {\n var scale = (current + 1) / total,\n scaleX = scale,\n scaleY = 1;\n if (!s.isHorizontal()) {\n scaleY = scale;\n scaleX = 1;\n }\n s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed);\n }\n if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) {\n s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total));\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n \n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n if (s.isBeginning) {\n s.prevButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton);\n }\n else {\n s.prevButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton);\n }\n }\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n if (s.isEnd) {\n s.nextButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton);\n }\n else {\n s.nextButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton);\n }\n }\n }\n };\n \n /*=========================\n Pagination\n ===========================*/\n s.updatePagination = function () {\n if (!s.params.pagination) return;\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n var paginationHTML = '';\n if (s.params.paginationType === 'bullets') {\n var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n for (var i = 0; i < numberOfBullets; i++) {\n if (s.params.paginationBulletRender) {\n paginationHTML += s.params.paginationBulletRender(i, s.params.bulletClass);\n }\n else {\n paginationHTML += '<' + s.params.paginationElement+' class=\"' + s.params.bulletClass + '\">';\n }\n }\n s.paginationContainer.html(paginationHTML);\n s.bullets = s.paginationContainer.find('.' + s.params.bulletClass);\n if (s.params.paginationClickable && s.params.a11y && s.a11y) {\n s.a11y.initPagination();\n }\n }\n if (s.params.paginationType === 'fraction') {\n if (s.params.paginationFractionRender) {\n paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass);\n }\n else {\n paginationHTML =\n '' +\n ' / ' +\n '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType === 'progress') {\n if (s.params.paginationProgressRender) {\n paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass);\n }\n else {\n paginationHTML = '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType !== 'custom') {\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n };\n /*=========================\n Common update method\n ===========================*/\n s.update = function (updateTranslate) {\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updateProgress();\n s.updatePagination();\n s.updateClasses();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n function forceSetTranslate() {\n newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n }\n if (updateTranslate) {\n var translated, newTranslate;\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n if (s.params.freeMode) {\n forceSetTranslate();\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n translated = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n translated = s.slideTo(s.activeIndex, 0, false, true);\n }\n if (!translated) {\n forceSetTranslate();\n }\n }\n }\n else if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n };\n \n /*=========================\n Resize Handler\n ===========================*/\n s.onResize = function (forceUpdatePagination) {\n //Breakpoints\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n // Disable locks on resize\n var allowSwipeToPrev = s.params.allowSwipeToPrev;\n var allowSwipeToNext = s.params.allowSwipeToNext;\n s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true;\n \n s.updateContainerSize();\n s.updateSlidesSize();\n if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n var slideChangedBySlideTo = false;\n if (s.params.freeMode) {\n var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n \n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n s.updateClasses();\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true);\n }\n }\n if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) {\n s.lazy.load();\n }\n // Return locks after resize\n s.params.allowSwipeToPrev = allowSwipeToPrev;\n s.params.allowSwipeToNext = allowSwipeToNext;\n };\n \n /*=========================\n Events\n ===========================*/\n \n //Define Touch Events\n var desktopEvents = ['mousedown', 'mousemove', 'mouseup'];\n if (window.navigator.pointerEnabled) desktopEvents = ['pointerdown', 'pointermove', 'pointerup'];\n else if (window.navigator.msPointerEnabled) desktopEvents = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];\n s.touchEvents = {\n start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : desktopEvents[0],\n move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : desktopEvents[1],\n end : s.support.touch || !s.params.simulateTouch ? 'touchend' : desktopEvents[2]\n };\n \n \n // WP8 Touch Events Fix\n if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) {\n (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction);\n }\n \n // Attach/detach events\n s.initEvents = function (detach) {\n var actionDom = detach ? 'off' : 'on';\n var action = detach ? 'removeEventListener' : 'addEventListener';\n var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0];\n var target = s.support.touch ? touchEventsTarget : document;\n \n var moveCapture = s.params.nested ? true : false;\n \n //Touch Events\n if (s.browser.ie) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n target[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n target[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n else {\n if (s.support.touch) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n if (params.simulateTouch && !s.device.ios && !s.device.android) {\n touchEventsTarget[action]('mousedown', s.onTouchStart, false);\n document[action]('mousemove', s.onTouchMove, moveCapture);\n document[action]('mouseup', s.onTouchEnd, false);\n }\n }\n window[action]('resize', s.onResize);\n \n // Next, Prev, Index\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.nextButton[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.prevButton[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.pagination && s.params.paginationClickable) {\n s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);\n if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);\n }\n \n // Prevent Links Clicks\n if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);\n };\n s.attachEvents = function () {\n s.initEvents();\n };\n s.detachEvents = function () {\n s.initEvents(true);\n };\n \n /*=========================\n Handle Clicks\n ===========================*/\n // Prevent Clicks\n s.allowClick = true;\n s.preventClicks = function (e) {\n if (!s.allowClick) {\n if (s.params.preventClicks) e.preventDefault();\n if (s.params.preventClicksPropagation && s.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n };\n // Clicks\n s.onClickNext = function (e) {\n e.preventDefault();\n if (s.isEnd && !s.params.loop) return;\n s.slideNext();\n };\n s.onClickPrev = function (e) {\n e.preventDefault();\n if (s.isBeginning && !s.params.loop) return;\n s.slidePrev();\n };\n s.onClickIndex = function (e) {\n e.preventDefault();\n var index = $(this).index() * s.params.slidesPerGroup;\n if (s.params.loop) index = index + s.loopedSlides;\n s.slideTo(index);\n };\n \n /*=========================\n Handle Touches\n ===========================*/\n function findElementInEvent(e, selector) {\n var el = $(e.target);\n if (!el.is(selector)) {\n if (typeof selector === 'string') {\n el = el.parents(selector);\n }\n else if (selector.nodeType) {\n var found;\n el.parents().each(function (index, _el) {\n if (_el === selector) found = selector;\n });\n if (!found) return undefined;\n else return selector;\n }\n }\n if (el.length === 0) {\n return undefined;\n }\n return el[0];\n }\n s.updateClickedSlide = function (e) {\n var slide = findElementInEvent(e, '.' + s.params.slideClass);\n var slideFound = false;\n if (slide) {\n for (var i = 0; i < s.slides.length; i++) {\n if (s.slides[i] === slide) slideFound = true;\n }\n }\n \n if (slide && slideFound) {\n s.clickedSlide = slide;\n s.clickedIndex = $(slide).index();\n }\n else {\n s.clickedSlide = undefined;\n s.clickedIndex = undefined;\n return;\n }\n if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {\n var slideToIndex = s.clickedIndex,\n realIndex,\n duplicatedSlides;\n if (s.params.loop) {\n if (s.animating) return;\n realIndex = $(s.clickedSlide).attr('data-swiper-slide-index');\n if (s.params.centeredSlides) {\n if ((slideToIndex < s.loopedSlides - s.params.slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + s.params.slidesPerView/2)) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.swiper-slide-duplicate)').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n else {\n if (slideToIndex > s.slides.length - s.params.slidesPerView) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.swiper-slide-duplicate)').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n };\n \n var isTouched,\n isMoved,\n allowTouchCallbacks,\n touchStartTime,\n isScrolling,\n currentTranslate,\n startTranslate,\n allowThresholdMove,\n // Form elements to match\n formElements = 'input, select, textarea, button',\n // Last click time\n lastClickTime = Date.now(), clickTimeout,\n //Velocities\n velocities = [],\n allowMomentumBounce;\n \n // Animating Flag\n s.animating = false;\n \n // Touches information\n s.touches = {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n };\n \n // Touch handlers\n var isTouchEvent, startMoving;\n s.onTouchStart = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n isTouchEvent = e.type === 'touchstart';\n if (!isTouchEvent && 'which' in e && e.which === 3) return;\n if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) {\n s.allowClick = true;\n return;\n }\n if (s.params.swipeHandler) {\n if (!findElementInEvent(e, s.params.swipeHandler)) return;\n }\n \n var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n \n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) {\n return;\n }\n \n isTouched = true;\n isMoved = false;\n allowTouchCallbacks = true;\n isScrolling = undefined;\n startMoving = undefined;\n s.touches.startX = startX;\n s.touches.startY = startY;\n touchStartTime = Date.now();\n s.allowClick = true;\n s.updateContainerSize();\n s.swipeDirection = undefined;\n if (s.params.threshold > 0) allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n var preventDefault = true;\n if ($(e.target).is(formElements)) preventDefault = false;\n if (document.activeElement && $(document.activeElement).is(formElements)) {\n document.activeElement.blur();\n }\n if (preventDefault) {\n e.preventDefault();\n }\n }\n s.emit('onTouchStart', s, e);\n };\n \n s.onTouchMove = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (isTouchEvent && e.type === 'mousemove') return;\n if (e.preventedByNestedSwiper) {\n s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n return;\n }\n if (s.params.onlyExternal) {\n // isMoved = true;\n s.allowClick = false;\n if (isTouched) {\n s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = Date.now();\n }\n return;\n }\n if (isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(formElements)) {\n isMoved = true;\n s.allowClick = false;\n return;\n }\n }\n if (allowTouchCallbacks) {\n s.emit('onTouchMove', s, e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n \n s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n \n if (typeof isScrolling === 'undefined') {\n var touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI;\n isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle);\n }\n if (isScrolling) {\n s.emit('onTouchMoveOpposite', s, e);\n }\n if (typeof startMoving === 'undefined' && s.browser.ieTouch) {\n if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) {\n startMoving = true;\n }\n }\n if (!isTouched) return;\n if (isScrolling) {\n isTouched = false;\n return;\n }\n if (!startMoving && s.browser.ieTouch) {\n return;\n }\n s.allowClick = false;\n s.emit('onSliderMove', s, e);\n e.preventDefault();\n if (s.params.touchMoveStopPropagation && !s.params.nested) {\n e.stopPropagation();\n }\n \n if (!isMoved) {\n if (params.loop) {\n s.fixLoop();\n }\n startTranslate = s.getWrapperTranslate();\n s.setWrapperTransition(0);\n if (s.animating) {\n s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd');\n }\n if (s.params.autoplay && s.autoplaying) {\n if (s.params.autoplayDisableOnInteraction) {\n s.stopAutoplay();\n }\n else {\n s.pauseAutoplay();\n }\n }\n allowMomentumBounce = false;\n //Grab Cursor\n if (s.params.grabCursor) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grabbing';\n s.container[0].style.cursor = '-moz-grabbin';\n s.container[0].style.cursor = 'grabbing';\n }\n }\n isMoved = true;\n \n var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n \n diff = diff * s.params.touchRatio;\n if (s.rtl) diff = -diff;\n \n s.swipeDirection = diff > 0 ? 'prev' : 'next';\n currentTranslate = diff + startTranslate;\n \n var disableParentSwiper = true;\n if ((diff > 0 && currentTranslate > s.minTranslate())) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio);\n }\n else if (diff < 0 && currentTranslate < s.maxTranslate()) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio);\n }\n \n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) {\n currentTranslate = startTranslate;\n }\n if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) {\n currentTranslate = startTranslate;\n }\n \n if (!s.params.followFinger) return;\n \n // Threshold\n if (s.params.threshold > 0) {\n if (Math.abs(diff) > s.params.threshold || allowThresholdMove) {\n if (!allowThresholdMove) {\n allowThresholdMove = true;\n s.touches.startX = s.touches.currentX;\n s.touches.startY = s.touches.currentY;\n currentTranslate = startTranslate;\n s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n return;\n }\n }\n else {\n currentTranslate = startTranslate;\n return;\n }\n }\n // Update active index in free mode\n if (s.params.freeMode || s.params.watchSlidesProgress) {\n s.updateActiveIndex();\n }\n if (s.params.freeMode) {\n //Velocity\n if (velocities.length === 0) {\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'startX' : 'startY'],\n time: touchStartTime\n });\n }\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'],\n time: (new window.Date()).getTime()\n });\n }\n // Update progress\n s.updateProgress(currentTranslate);\n // Update translate\n s.setWrapperTranslate(currentTranslate);\n };\n s.onTouchEnd = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (allowTouchCallbacks) {\n s.emit('onTouchEnd', s, e);\n }\n allowTouchCallbacks = false;\n if (!isTouched) return;\n //Return Grab Cursor\n if (s.params.grabCursor && isMoved && isTouched) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = '-webkit-grab';\n s.container[0].style.cursor = '-moz-grab';\n s.container[0].style.cursor = 'grab';\n }\n \n // Time diff\n var touchEndTime = Date.now();\n var timeDiff = touchEndTime - touchStartTime;\n \n // Tap, doubleTap, Click\n if (s.allowClick) {\n s.updateClickedSlide(e);\n s.emit('onTap', s, e);\n if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n clickTimeout = setTimeout(function () {\n if (!s) return;\n if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) {\n s.paginationContainer.toggleClass(s.params.paginationHiddenClass);\n }\n s.emit('onClick', s, e);\n }, 300);\n \n }\n if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n s.emit('onDoubleTap', s, e);\n }\n }\n \n lastClickTime = Date.now();\n setTimeout(function () {\n if (s) s.allowClick = true;\n }, 0);\n \n if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) {\n isTouched = isMoved = false;\n return;\n }\n isTouched = isMoved = false;\n \n var currentPos;\n if (s.params.followFinger) {\n currentPos = s.rtl ? s.translate : -s.translate;\n }\n else {\n currentPos = -currentTranslate;\n }\n if (s.params.freeMode) {\n if (currentPos < -s.minTranslate()) {\n s.slideTo(s.activeIndex);\n return;\n }\n else if (currentPos > -s.maxTranslate()) {\n if (s.slides.length < s.snapGrid.length) {\n s.slideTo(s.snapGrid.length - 1);\n }\n else {\n s.slideTo(s.slides.length - 1);\n }\n return;\n }\n \n if (s.params.freeModeMomentum) {\n if (velocities.length > 1) {\n var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop();\n \n var distance = lastMoveEvent.position - velocityEvent.position;\n var time = lastMoveEvent.time - velocityEvent.time;\n s.velocity = distance / time;\n s.velocity = s.velocity / 2;\n if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) {\n s.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) {\n s.velocity = 0;\n }\n } else {\n s.velocity = 0;\n }\n \n velocities.length = 0;\n var momentumDuration = 1000 * s.params.freeModeMomentumRatio;\n var momentumDistance = s.velocity * momentumDuration;\n \n var newPosition = s.translate + momentumDistance;\n if (s.rtl) newPosition = - newPosition;\n var doBounce = false;\n var afterBouncePosition;\n var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio;\n if (newPosition < s.maxTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition + s.maxTranslate() < -bounceAmount) {\n newPosition = s.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = s.maxTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.maxTranslate();\n }\n }\n else if (newPosition > s.minTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition - s.minTranslate() > bounceAmount) {\n newPosition = s.minTranslate() + bounceAmount;\n }\n afterBouncePosition = s.minTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.minTranslate();\n }\n }\n else if (s.params.freeModeSticky) {\n var j = 0,\n nextSlide;\n for (j = 0; j < s.snapGrid.length; j += 1) {\n if (s.snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n \n }\n if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') {\n newPosition = s.snapGrid[nextSlide];\n } else {\n newPosition = s.snapGrid[nextSlide - 1];\n }\n if (!s.rtl) newPosition = - newPosition;\n }\n //Fix duration\n if (s.velocity !== 0) {\n if (s.rtl) {\n momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity);\n }\n else {\n momentumDuration = Math.abs((newPosition - s.translate) / s.velocity);\n }\n }\n else if (s.params.freeModeSticky) {\n s.slideReset();\n return;\n }\n \n if (s.params.freeModeMomentumBounce && doBounce) {\n s.updateProgress(afterBouncePosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s || !allowMomentumBounce) return;\n s.emit('onMomentumBounce', s);\n \n s.setWrapperTransition(s.params.speed);\n s.setWrapperTranslate(afterBouncePosition);\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n });\n } else if (s.velocity) {\n s.updateProgress(newPosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n }\n \n } else {\n s.updateProgress(newPosition);\n }\n \n s.updateActiveIndex();\n }\n if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) {\n s.updateProgress();\n s.updateActiveIndex();\n }\n return;\n }\n \n // Find current slide\n var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0];\n for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) {\n if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') {\n if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) {\n stopIndex = i;\n groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i];\n }\n }\n else {\n if (currentPos >= s.slidesGrid[i]) {\n stopIndex = i;\n groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2];\n }\n }\n }\n \n // Find current slide size\n var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize;\n \n if (timeDiff > s.params.longSwipesMs) {\n // Long touches\n if (!s.params.longSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n \n }\n if (s.swipeDirection === 'prev') {\n if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n }\n }\n else {\n // Short swipes\n if (!s.params.shortSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n s.slideTo(stopIndex + s.params.slidesPerGroup);\n \n }\n if (s.swipeDirection === 'prev') {\n s.slideTo(stopIndex);\n }\n }\n };\n /*=========================\n Transitions\n ===========================*/\n s._slideTo = function (slideIndex, speed) {\n return s.slideTo(slideIndex, speed, true, true);\n };\n s.slideTo = function (slideIndex, speed, runCallbacks, internal) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (typeof slideIndex === 'undefined') slideIndex = 0;\n if (slideIndex < 0) slideIndex = 0;\n s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup);\n if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1;\n \n var translate = - s.snapGrid[s.snapIndex];\n // Stop autoplay\n if (s.params.autoplay && s.autoplaying) {\n if (internal || !s.params.autoplayDisableOnInteraction) {\n s.pauseAutoplay(speed);\n }\n else {\n s.stopAutoplay();\n }\n }\n // Update progress\n s.updateProgress(translate);\n \n // Normalize slideIndex\n for (var i = 0; i < s.slidesGrid.length; i++) {\n if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) {\n if ((s.activeIndex || 0) !== slideIndex ) return false;\n }\n \n // Update Index\n if (typeof speed === 'undefined') speed = s.params.speed;\n s.previousIndex = s.activeIndex || 0;\n s.activeIndex = slideIndex;\n \n if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) {\n // Update Height\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n s.updateClasses();\n if (s.params.effect !== 'slide') {\n s.setWrapperTranslate(translate);\n }\n return false;\n }\n s.updateClasses();\n s.onTransitionStart(runCallbacks);\n \n if (speed === 0) {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(0);\n s.onTransitionEnd(runCallbacks);\n }\n else {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(speed);\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd(runCallbacks);\n });\n }\n \n }\n \n return true;\n };\n \n s.onTransitionStart = function (runCallbacks) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n if (s.lazy) s.lazy.onTransitionStart();\n if (runCallbacks) {\n s.emit('onTransitionStart', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeStart', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextStart', s);\n }\n else {\n s.emit('onSlidePrevStart', s);\n }\n }\n \n }\n };\n s.onTransitionEnd = function (runCallbacks) {\n s.animating = false;\n s.setWrapperTransition(0);\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.lazy) s.lazy.onTransitionEnd();\n if (runCallbacks) {\n s.emit('onTransitionEnd', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeEnd', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextEnd', s);\n }\n else {\n s.emit('onSlidePrevEnd', s);\n }\n }\n }\n if (s.params.hashnav && s.hashnav) {\n s.hashnav.setHash();\n }\n \n };\n s.slideNext = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n };\n s._slideNext = function (speed) {\n return s.slideNext(true, speed, true);\n };\n s.slidePrev = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n };\n s._slidePrev = function (speed) {\n return s.slidePrev(true, speed, true);\n };\n s.slideReset = function (runCallbacks, speed, internal) {\n return s.slideTo(s.activeIndex, speed, runCallbacks);\n };\n \n /*=========================\n Translate/transition helpers\n ===========================*/\n s.setWrapperTransition = function (duration, byController) {\n s.wrapper.transition(duration);\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTransition(duration);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTransition(duration);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTransition(duration);\n }\n if (s.params.control && s.controller) {\n s.controller.setTransition(duration, byController);\n }\n s.emit('onSetTransition', s, duration);\n };\n s.setWrapperTranslate = function (translate, updateActiveIndex, byController) {\n var x = 0, y = 0, z = 0;\n if (s.isHorizontal()) {\n x = s.rtl ? -translate : translate;\n }\n else {\n y = translate;\n }\n \n if (s.params.roundLengths) {\n x = round(x);\n y = round(y);\n }\n \n if (!s.params.virtualTranslate) {\n if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');\n else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');\n }\n \n s.translate = s.isHorizontal() ? x : y;\n \n // Check if we need to update progress\n var progress;\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n if (translatesDiff === 0) {\n progress = 0;\n }\n else {\n progress = (translate - s.minTranslate()) / (translatesDiff);\n }\n if (progress !== s.progress) {\n s.updateProgress(translate);\n }\n \n if (updateActiveIndex) s.updateActiveIndex();\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTranslate(s.translate);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTranslate(s.translate);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTranslate(s.translate);\n }\n if (s.params.control && s.controller) {\n s.controller.setTranslate(s.translate, byController);\n }\n s.emit('onSetTranslate', s, s.translate);\n };\n \n s.getTranslate = function (el, axis) {\n var matrix, curTransform, curStyle, transformMatrix;\n \n // automatic axis detection\n if (typeof axis === 'undefined') {\n axis = 'x';\n }\n \n if (s.params.virtualTranslate) {\n return s.rtl ? -s.translate : s.translate;\n }\n \n curStyle = window.getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function(a){\n return a.replace(',','.');\n }).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n }\n else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n \n if (axis === 'x') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m41;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[12]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m42;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[13]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[5]);\n }\n if (s.rtl && curTransform) curTransform = -curTransform;\n return curTransform || 0;\n };\n s.getWrapperTranslate = function (axis) {\n if (typeof axis === 'undefined') {\n axis = s.isHorizontal() ? 'x' : 'y';\n }\n return s.getTranslate(s.wrapper[0], axis);\n };\n \n /*=========================\n Observer\n ===========================*/\n s.observers = [];\n function initObserver(target, options) {\n options = options || {};\n // create an observer instance\n var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n var observer = new ObserverFunc(function (mutations) {\n mutations.forEach(function (mutation) {\n s.onResize(true);\n s.emit('onObserverUpdate', s, mutation);\n });\n });\n \n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n \n s.observers.push(observer);\n }\n s.initObservers = function () {\n if (s.params.observeParents) {\n var containerParents = s.container.parents();\n for (var i = 0; i < containerParents.length; i++) {\n initObserver(containerParents[i]);\n }\n }\n \n // Observe container\n initObserver(s.container[0], {childList: false});\n \n // Observe wrapper\n initObserver(s.wrapper[0], {attributes: false});\n };\n s.disconnectObservers = function () {\n for (var i = 0; i < s.observers.length; i++) {\n s.observers[i].disconnect();\n }\n s.observers = [];\n };\n /*=========================\n Loop\n ===========================*/\n // Create looped slides\n s.createLoop = function () {\n // Remove duplicated slides\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n \n var slides = s.wrapper.children('.' + s.params.slideClass);\n \n if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length;\n \n s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10);\n s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;\n if (s.loopedSlides > slides.length) {\n s.loopedSlides = slides.length;\n }\n \n var prependSlides = [], appendSlides = [], i;\n slides.each(function (index, el) {\n var slide = $(this);\n if (index < s.loopedSlides) appendSlides.push(el);\n if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el);\n slide.attr('data-swiper-slide-index', index);\n });\n for (i = 0; i < appendSlides.length; i++) {\n s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n for (i = prependSlides.length - 1; i >= 0; i--) {\n s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n };\n s.destroyLoop = function () {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n s.slides.removeAttr('data-swiper-slide-index');\n };\n s.reLoop = function (updatePosition) {\n var oldIndex = s.activeIndex - s.loopedSlides;\n s.destroyLoop();\n s.createLoop();\n s.updateSlidesSize();\n if (updatePosition) {\n s.slideTo(oldIndex + s.loopedSlides, 0, false);\n }\n \n };\n s.fixLoop = function () {\n var newIndex;\n //Fix For Negative Oversliding\n if (s.activeIndex < s.loopedSlides) {\n newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n //Fix For Positive Oversliding\n else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) {\n newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n };\n /*=========================\n Append/Prepend/Remove Slides\n ===========================*/\n s.appendSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.append(slides[i]);\n }\n }\n else {\n s.wrapper.append(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n };\n s.prependSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n var newActiveIndex = s.activeIndex + 1;\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.prepend(slides[i]);\n }\n newActiveIndex = s.activeIndex + slides.length;\n }\n else {\n s.wrapper.prepend(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n s.slideTo(newActiveIndex, 0, false);\n };\n s.removeSlide = function (slidesIndexes) {\n if (s.params.loop) {\n s.destroyLoop();\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n }\n var newActiveIndex = s.activeIndex,\n indexToRemove;\n if (typeof slidesIndexes === 'object' && slidesIndexes.length) {\n for (var i = 0; i < slidesIndexes.length; i++) {\n indexToRemove = slidesIndexes[i];\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n else {\n indexToRemove = slidesIndexes;\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n \n if (s.params.loop) {\n s.createLoop();\n }\n \n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n if (s.params.loop) {\n s.slideTo(newActiveIndex + s.loopedSlides, 0, false);\n }\n else {\n s.slideTo(newActiveIndex, 0, false);\n }\n \n };\n s.removeAllSlides = function () {\n var slidesIndexes = [];\n for (var i = 0; i < s.slides.length; i++) {\n slidesIndexes.push(i);\n }\n s.removeSlide(slidesIndexes);\n };\n \n\n /*=========================\n Effects\n ===========================*/\n s.effects = {\n fade: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var offset = slide[0].swiperSlideOffset;\n var tx = -offset;\n if (!s.params.virtualTranslate) tx = tx - s.translate;\n var ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n var slideOpacity = s.params.fade.crossFade ?\n Math.max(1 - Math.abs(slide[0].progress), 0) :\n 1 + Math.min(Math.max(slide[0].progress, -1), 0);\n slide\n .css({\n opacity: slideOpacity\n })\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');\n \n }\n \n },\n setTransition: function (duration) {\n s.slides.transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n flip: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var progress = slide[0].progress;\n if (s.params.flip.limitRotation) {\n progress = Math.max(Math.min(slide[0].progress, 1), -1);\n }\n var offset = slide[0].swiperSlideOffset;\n var rotate = -180 * progress,\n rotateY = rotate,\n rotateX = 0,\n tx = -offset,\n ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n }\n else if (s.rtl) {\n rotateY = -rotateY;\n }\n \n slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length;\n \n if (s.params.flip.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n \n slide\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.eq(s.activeIndex).transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n if (!$(this).hasClass(s.params.slideActiveClass)) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n cube: {\n setTranslate: function () {\n var wrapperRotate = 0, cubeShadow;\n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow = s.wrapper.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('
');\n s.wrapper.append(cubeShadow);\n }\n cubeShadow.css({height: s.width + 'px'});\n }\n else {\n cubeShadow = s.container.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('
');\n s.container.append(cubeShadow);\n }\n }\n }\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var slideAngle = i * 90;\n var round = Math.floor(slideAngle / 360);\n if (s.rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n var progress = Math.max(Math.min(slide[0].progress, 1), -1);\n var tx = 0, ty = 0, tz = 0;\n if (i % 4 === 0) {\n tx = - round * 4 * s.size;\n tz = 0;\n }\n else if ((i - 1) % 4 === 0) {\n tx = 0;\n tz = - round * 4 * s.size;\n }\n else if ((i - 2) % 4 === 0) {\n tx = s.size + round * 4 * s.size;\n tz = s.size;\n }\n else if ((i - 3) % 4 === 0) {\n tx = - s.size;\n tz = 3 * s.size + s.size * 4 * round;\n }\n if (s.rtl) {\n tx = -tx;\n }\n \n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n \n var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';\n if (progress <= 1 && progress > -1) {\n wrapperRotate = i * 90 + progress * 90;\n if (s.rtl) wrapperRotate = -i * 90 - progress * 90;\n }\n slide.transform(transform);\n if (s.params.cube.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n }\n s.wrapper.css({\n '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n 'transform-origin': '50% 50% -' + (s.size / 2) + 'px'\n });\n \n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')');\n }\n else {\n var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n var scale1 = s.params.cube.shadowScale,\n scale2 = s.params.cube.shadowScale / multiplier,\n offset = s.params.cube.shadowOffset;\n cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)');\n }\n }\n var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0;\n s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)');\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.cube.shadow && !s.isHorizontal()) {\n s.container.find('.swiper-cube-shadow').transition(duration);\n }\n }\n },\n coverflow: {\n setTranslate: function () {\n var transform = s.translate;\n var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2;\n var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate;\n var translate = s.params.coverflow.depth;\n //Each slide offset from center\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideSize = s.slidesSizesGrid[i];\n var slideOffset = slide[0].swiperSlideOffset;\n var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;\n \n var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0;\n var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n var translateZ = -translate * Math.abs(offsetMultiplier);\n \n var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier);\n var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0;\n \n //Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n \n var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';\n \n slide.transform(slideTransform);\n slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (s.params.coverflow.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n }\n }\n \n //Set correct perspective for IE10\n if (s.browser.ie) {\n var ws = s.wrapper[0].style;\n ws.perspectiveOrigin = center + 'px 50%';\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n }\n }\n };\n\n /*=========================\n Images Lazy Loading\n ===========================*/\n s.lazy = {\n initialImageLoaded: false,\n loadImageInSlide: function (index, loadInDuplicate) {\n if (typeof index === 'undefined') return;\n if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true;\n if (s.slides.length === 0) return;\n \n var slide = s.slides.eq(index);\n var img = slide.find('.swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)');\n if (slide.hasClass('swiper-lazy') && !slide.hasClass('swiper-lazy-loaded') && !slide.hasClass('swiper-lazy-loading')) {\n img = img.add(slide[0]);\n }\n if (img.length === 0) return;\n \n img.each(function () {\n var _img = $(this);\n _img.addClass('swiper-lazy-loading');\n var background = _img.attr('data-background');\n var src = _img.attr('data-src'),\n srcset = _img.attr('data-srcset');\n s.loadImage(_img[0], (src || background), srcset, false, function () {\n if (background) {\n _img.css('background-image', 'url(\"' + background + '\")');\n _img.removeAttr('data-background');\n }\n else {\n if (srcset) {\n _img.attr('srcset', srcset);\n _img.removeAttr('data-srcset');\n }\n if (src) {\n _img.attr('src', src);\n _img.removeAttr('data-src');\n }\n \n }\n \n _img.addClass('swiper-lazy-loaded').removeClass('swiper-lazy-loading');\n slide.find('.swiper-lazy-preloader, .preloader').remove();\n if (s.params.loop && loadInDuplicate) {\n var slideOriginalIndex = slide.attr('data-swiper-slide-index');\n if (slide.hasClass(s.params.slideDuplicateClass)) {\n var originalSlide = s.wrapper.children('[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')');\n s.lazy.loadImageInSlide(originalSlide.index(), false);\n }\n else {\n var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]');\n s.lazy.loadImageInSlide(duplicatedSlide.index(), false);\n }\n }\n s.emit('onLazyImageReady', s, slide[0], _img[0]);\n });\n \n s.emit('onLazyImageLoad', s, slide[0], _img[0]);\n });\n \n },\n load: function () {\n var i;\n if (s.params.watchSlidesVisibility) {\n s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {\n s.lazy.loadImageInSlide($(this).index());\n });\n }\n else {\n if (s.params.slidesPerView > 1) {\n for (i = s.activeIndex; i < s.activeIndex + s.params.slidesPerView ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n s.lazy.loadImageInSlide(s.activeIndex);\n }\n }\n if (s.params.lazyLoadingInPrevNext) {\n if (s.params.slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {\n var amount = s.params.lazyLoadingInPrevNextAmount;\n var spv = s.params.slidesPerView;\n var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length);\n var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (i = s.activeIndex + s.params.slidesPerView; i < maxIndex; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n // Prev Slides\n for (i = minIndex; i < s.activeIndex ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n var nextSlide = s.wrapper.children('.' + s.params.slideNextClass);\n if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index());\n \n var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass);\n if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index());\n }\n }\n },\n onTransitionStart: function () {\n if (s.params.lazyLoading) {\n if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) {\n s.lazy.load();\n }\n }\n },\n onTransitionEnd: function () {\n if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) {\n s.lazy.load();\n }\n }\n };\n \n\n /*=========================\n Scrollbar\n ===========================*/\n s.scrollbar = {\n isTouched: false,\n setDragPosition: function (e) {\n var sb = s.scrollbar;\n var x = 0, y = 0;\n var translate;\n var pointerPosition = s.isHorizontal() ?\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) :\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ;\n var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2;\n var positionMin = -s.minTranslate() * sb.moveDivider;\n var positionMax = -s.maxTranslate() * sb.moveDivider;\n if (position < positionMin) {\n position = positionMin;\n }\n else if (position > positionMax) {\n position = positionMax;\n }\n position = -position / sb.moveDivider;\n s.updateProgress(position);\n s.setWrapperTranslate(position, true);\n },\n dragStart: function (e) {\n var sb = s.scrollbar;\n sb.isTouched = true;\n e.preventDefault();\n e.stopPropagation();\n \n sb.setDragPosition(e);\n clearTimeout(sb.dragTimeout);\n \n sb.track.transition(0);\n if (s.params.scrollbarHide) {\n sb.track.css('opacity', 1);\n }\n s.wrapper.transition(100);\n sb.drag.transition(100);\n s.emit('onScrollbarDragStart', s);\n },\n dragMove: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n sb.setDragPosition(e);\n s.wrapper.transition(0);\n sb.track.transition(0);\n sb.drag.transition(0);\n s.emit('onScrollbarDragMove', s);\n },\n dragEnd: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n sb.isTouched = false;\n if (s.params.scrollbarHide) {\n clearTimeout(sb.dragTimeout);\n sb.dragTimeout = setTimeout(function () {\n sb.track.css('opacity', 0);\n sb.track.transition(400);\n }, 1000);\n \n }\n s.emit('onScrollbarDragEnd', s);\n if (s.params.scrollbarSnapOnRelease) {\n s.slideReset();\n }\n },\n enableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).on(s.touchEvents.start, sb.dragStart);\n $(target).on(s.touchEvents.move, sb.dragMove);\n $(target).on(s.touchEvents.end, sb.dragEnd);\n },\n disableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).off(s.touchEvents.start, sb.dragStart);\n $(target).off(s.touchEvents.move, sb.dragMove);\n $(target).off(s.touchEvents.end, sb.dragEnd);\n },\n set: function () {\n if (!s.params.scrollbar) return;\n var sb = s.scrollbar;\n sb.track = $(s.params.scrollbar);\n if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) {\n sb.track = s.container.find(s.params.scrollbar);\n }\n sb.drag = sb.track.find('.swiper-scrollbar-drag');\n if (sb.drag.length === 0) {\n sb.drag = $('
');\n sb.track.append(sb.drag);\n }\n sb.drag[0].style.width = '';\n sb.drag[0].style.height = '';\n sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight;\n \n sb.divider = s.size / s.virtualSize;\n sb.moveDivider = sb.divider * (sb.trackSize / s.size);\n sb.dragSize = sb.trackSize * sb.divider;\n \n if (s.isHorizontal()) {\n sb.drag[0].style.width = sb.dragSize + 'px';\n }\n else {\n sb.drag[0].style.height = sb.dragSize + 'px';\n }\n \n if (sb.divider >= 1) {\n sb.track[0].style.display = 'none';\n }\n else {\n sb.track[0].style.display = '';\n }\n if (s.params.scrollbarHide) {\n sb.track[0].style.opacity = 0;\n }\n },\n setTranslate: function () {\n if (!s.params.scrollbar) return;\n var diff;\n var sb = s.scrollbar;\n var translate = s.translate || 0;\n var newPos;\n \n var newSize = sb.dragSize;\n newPos = (sb.trackSize - sb.dragSize) * s.progress;\n if (s.rtl && s.isHorizontal()) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = sb.dragSize - newPos;\n newPos = 0;\n }\n else if (-newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize + newPos;\n }\n }\n else {\n if (newPos < 0) {\n newSize = sb.dragSize + newPos;\n newPos = 0;\n }\n else if (newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize - newPos;\n }\n }\n if (s.isHorizontal()) {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)');\n }\n else {\n sb.drag.transform('translateX(' + (newPos) + 'px)');\n }\n sb.drag[0].style.width = newSize + 'px';\n }\n else {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)');\n }\n else {\n sb.drag.transform('translateY(' + (newPos) + 'px)');\n }\n sb.drag[0].style.height = newSize + 'px';\n }\n if (s.params.scrollbarHide) {\n clearTimeout(sb.timeout);\n sb.track[0].style.opacity = 1;\n sb.timeout = setTimeout(function () {\n sb.track[0].style.opacity = 0;\n sb.track.transition(400);\n }, 1000);\n }\n },\n setTransition: function (duration) {\n if (!s.params.scrollbar) return;\n s.scrollbar.drag.transition(duration);\n }\n };\n\n /*=========================\n Controller\n ===========================*/\n s.controller = {\n LinearSpline: function (x, y) {\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n var i1, i3;\n var l = this.x.length;\n \n this.interpolate = function (x2) {\n if (!x2) return 0;\n \n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n \n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n \n var binarySearch = (function() {\n var maxIndex, minIndex, guess;\n return function(array, val) {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1)\n if (array[guess = maxIndex + minIndex >> 1] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n return maxIndex;\n };\n })();\n },\n //xxx: for now i will just save one spline function to to\n getInterpolateFunction: function(c){\n if(!s.controller.spline) s.controller.spline = s.params.loop ?\n new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) :\n new s.controller.LinearSpline(s.snapGrid, c.snapGrid);\n },\n setTranslate: function (translate, byController) {\n var controlled = s.params.control;\n var multiplier, controlledTranslate;\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate;\n if (s.params.controlBy === 'slide') {\n s.controller.getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -s.controller.spline.interpolate(-translate);\n }\n \n if(!controlledTranslate || s.params.controlBy === 'container'){\n multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate());\n controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate();\n }\n \n if (s.params.controlInverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setWrapperTranslate(controlledTranslate, false, s);\n c.updateActiveIndex();\n }\n if (s.isArray(controlled)) {\n for (var i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n \n setControlledTranslate(controlled);\n }\n },\n setTransition: function (duration, byController) {\n var controlled = s.params.control;\n var i;\n function setControlledTransition(c) {\n c.setWrapperTransition(duration, s);\n if (duration !== 0) {\n c.onTransitionStart();\n c.wrapper.transitionEnd(function(){\n if (!controlled) return;\n if (c.params.loop && s.params.controlBy === 'slide') {\n c.fixLoop();\n }\n c.onTransitionEnd();\n \n });\n }\n }\n if (s.isArray(controlled)) {\n for (i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n };\n\n /*=========================\n Hash Navigation\n ===========================*/\n s.hashnav = {\n init: function () {\n if (!s.params.hashnav) return;\n s.hashnav.initialized = true;\n var hash = document.location.hash.replace('#', '');\n if (!hash) return;\n var speed = 0;\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideHash = slide.attr('data-hash');\n if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {\n var index = slide.index();\n s.slideTo(index, speed, s.params.runCallbacksOnInit, true);\n }\n }\n },\n setHash: function () {\n if (!s.hashnav.initialized || !s.params.hashnav) return;\n document.location.hash = s.slides.eq(s.activeIndex).attr('data-hash') || '';\n }\n };\n\n /*=========================\n Keyboard Control\n ===========================*/\n function handleKeyboard(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var kc = e.keyCode || e.charCode;\n // Directions locks\n if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return;\n }\n if (kc === 37 || kc === 39 || kc === 38 || kc === 40) {\n var inView = false;\n //Check that swiper should be inside of visible area of window\n if (s.container.parents('.swiper-slide').length > 0 && s.container.parents('.swiper-slide-active').length === 0) {\n return;\n }\n var windowScroll = {\n left: window.pageXOffset,\n top: window.pageYOffset\n };\n var windowWidth = window.innerWidth;\n var windowHeight = window.innerHeight;\n var swiperOffset = s.container.offset();\n if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft;\n var swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + s.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + s.height],\n [swiperOffset.left + s.width, swiperOffset.top + s.height]\n ];\n for (var i = 0; i < swiperCoord.length; i++) {\n var point = swiperCoord[i];\n if (\n point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth &&\n point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight\n ) {\n inView = true;\n }\n \n }\n if (!inView) return;\n }\n if (s.isHorizontal()) {\n if (kc === 37 || kc === 39) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext();\n if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev();\n }\n else {\n if (kc === 38 || kc === 40) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (kc === 40) s.slideNext();\n if (kc === 38) s.slidePrev();\n }\n }\n s.disableKeyboardControl = function () {\n s.params.keyboardControl = false;\n $(document).off('keydown', handleKeyboard);\n };\n s.enableKeyboardControl = function () {\n s.params.keyboardControl = true;\n $(document).on('keydown', handleKeyboard);\n };\n \n\n /*=========================\n Mousewheel Control\n ===========================*/\n s.mousewheel = {\n event: false,\n lastScrollTime: (new window.Date()).getTime()\n };\n if (s.params.mousewheelControl) {\n try {\n new window.WheelEvent('wheel');\n s.mousewheel.event = 'wheel';\n } catch (e) {\n if (window.WheelEvent || (s.container[0] && 'wheel' in s.container[0])) {\n s.mousewheel.event = 'wheel';\n }\n }\n if (!s.mousewheel.event && window.WheelEvent) {\n \n }\n if (!s.mousewheel.event && document.onmousewheel !== undefined) {\n s.mousewheel.event = 'mousewheel';\n }\n if (!s.mousewheel.event) {\n s.mousewheel.event = 'DOMMouseScroll';\n }\n }\n function handleMousewheel(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var we = s.mousewheel.event;\n var delta = 0;\n var rtlFactor = s.rtl ? -1 : 1;\n \n //WebKits\n if (we === 'mousewheel') {\n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY)) delta = e.wheelDeltaX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(e.wheelDeltaY) > Math.abs(e.wheelDeltaX)) delta = e.wheelDeltaY;\n else return;\n }\n }\n else {\n delta = Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY) ? - e.wheelDeltaX * rtlFactor : - e.wheelDeltaY;\n }\n }\n //Old FireFox\n else if (we === 'DOMMouseScroll') delta = -e.detail;\n //New FireFox\n else if (we === 'wheel') {\n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) delta = -e.deltaX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(e.deltaY) > Math.abs(e.deltaX)) delta = -e.deltaY;\n else return;\n }\n }\n else {\n delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? - e.deltaX * rtlFactor : - e.deltaY;\n }\n }\n if (delta === 0) return;\n \n if (s.params.mousewheelInvert) delta = -delta;\n \n if (!s.params.freeMode) {\n if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) {\n if (delta < 0) {\n if ((!s.isEnd || s.params.loop) && !s.animating) s.slideNext();\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n else {\n if ((!s.isBeginning || s.params.loop) && !s.animating) s.slidePrev();\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n }\n s.mousewheel.lastScrollTime = (new window.Date()).getTime();\n \n }\n else {\n //Freemode or scrollContainer:\n var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity;\n var wasBeginning = s.isBeginning,\n wasEnd = s.isEnd;\n \n if (position >= s.minTranslate()) position = s.minTranslate();\n if (position <= s.maxTranslate()) position = s.maxTranslate();\n \n s.setWrapperTransition(0);\n s.setWrapperTranslate(position);\n s.updateProgress();\n s.updateActiveIndex();\n \n if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) {\n s.updateClasses();\n }\n \n if (s.params.freeModeSticky) {\n clearTimeout(s.mousewheel.timeout);\n s.mousewheel.timeout = setTimeout(function () {\n s.slideReset();\n }, 300);\n }\n else {\n if (s.params.lazyLoading && s.lazy) {\n s.lazy.load();\n }\n }\n \n // Return page scroll on edge positions\n if (position === 0 || position === s.maxTranslate()) return;\n }\n if (s.params.autoplay) s.stopAutoplay();\n \n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n }\n s.disableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n s.container.off(s.mousewheel.event, handleMousewheel);\n return true;\n };\n \n s.enableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n s.container.on(s.mousewheel.event, handleMousewheel);\n return true;\n };\n \n\n /*=========================\n Parallax\n ===========================*/\n function setParallaxTransform(el, progress) {\n el = $(el);\n var p, pX, pY;\n var rtlFactor = s.rtl ? -1 : 1;\n \n p = el.attr('data-swiper-parallax') || '0';\n pX = el.attr('data-swiper-parallax-x');\n pY = el.attr('data-swiper-parallax-y');\n if (pX || pY) {\n pX = pX || '0';\n pY = pY || '0';\n }\n else {\n if (s.isHorizontal()) {\n pX = p;\n pY = '0';\n }\n else {\n pY = p;\n pX = '0';\n }\n }\n \n if ((pX).indexOf('%') >= 0) {\n pX = parseInt(pX, 10) * progress * rtlFactor + '%';\n }\n else {\n pX = pX * progress * rtlFactor + 'px' ;\n }\n if ((pY).indexOf('%') >= 0) {\n pY = parseInt(pY, 10) * progress + '%';\n }\n else {\n pY = pY * progress + 'px' ;\n }\n \n el.transform('translate3d(' + pX + ', ' + pY + ',0px)');\n }\n s.parallax = {\n setTranslate: function () {\n s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n setParallaxTransform(this, s.progress);\n \n });\n s.slides.each(function () {\n var slide = $(this);\n slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () {\n var progress = Math.min(Math.max(slide[0].progress, -1), 1);\n setParallaxTransform(this, progress);\n });\n });\n },\n setTransition: function (duration) {\n if (typeof duration === 'undefined') duration = s.params.speed;\n s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n var el = $(this);\n var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n el.transition(parallaxDuration);\n });\n }\n };\n \n\n /*=========================\n Plugins API. Collect all and init all plugins\n ===========================*/\n s._plugins = [];\n for (var plugin in s.plugins) {\n var p = s.plugins[plugin](s, s.params[plugin]);\n if (p) s._plugins.push(p);\n }\n // Method to call all plugins event/method\n s.callPlugins = function (eventName) {\n for (var i = 0; i < s._plugins.length; i++) {\n if (eventName in s._plugins[i]) {\n s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n };\n\n /*=========================\n Events/Callbacks/Plugins Emitter\n ===========================*/\n function normalizeEventName (eventName) {\n if (eventName.indexOf('on') !== 0) {\n if (eventName[0] !== eventName[0].toUpperCase()) {\n eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1);\n }\n else {\n eventName = 'on' + eventName;\n }\n }\n return eventName;\n }\n s.emitterEventListeners = {\n \n };\n s.emit = function (eventName) {\n // Trigger callbacks\n if (s.params[eventName]) {\n s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n var i;\n // Trigger events\n if (s.emitterEventListeners[eventName]) {\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n // Trigger plugins\n if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n };\n s.on = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = [];\n s.emitterEventListeners[eventName].push(handler);\n return s;\n };\n s.off = function (eventName, handler) {\n var i;\n eventName = normalizeEventName(eventName);\n if (typeof handler === 'undefined') {\n // Remove all handlers for such event\n s.emitterEventListeners[eventName] = [];\n return s;\n }\n if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return;\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1);\n }\n return s;\n };\n s.once = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n var _handler = function () {\n handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);\n s.off(eventName, _handler);\n };\n s.on(eventName, _handler);\n return s;\n };\n\n // Accessibility tools\n s.a11y = {\n makeFocusable: function ($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n addRole: function ($el, role) {\n $el.attr('role', role);\n return $el;\n },\n \n addLabel: function ($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n \n disable: function ($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n \n enable: function ($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n \n onEnterKey: function (event) {\n if (event.keyCode !== 13) return;\n if ($(event.target).is(s.params.nextButton)) {\n s.onClickNext(event);\n if (s.isEnd) {\n s.a11y.notify(s.params.lastSlideMessage);\n }\n else {\n s.a11y.notify(s.params.nextSlideMessage);\n }\n }\n else if ($(event.target).is(s.params.prevButton)) {\n s.onClickPrev(event);\n if (s.isBeginning) {\n s.a11y.notify(s.params.firstSlideMessage);\n }\n else {\n s.a11y.notify(s.params.prevSlideMessage);\n }\n }\n if ($(event.target).is('.' + s.params.bulletClass)) {\n $(event.target)[0].click();\n }\n },\n \n liveRegion: $(''),\n \n notify: function (message) {\n var notification = s.a11y.liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n },\n init: function () {\n // Setup accessibility\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.a11y.makeFocusable(s.nextButton);\n s.a11y.addRole(s.nextButton, 'button');\n s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.a11y.makeFocusable(s.prevButton);\n s.a11y.addRole(s.prevButton, 'button');\n s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage);\n }\n \n $(s.container).append(s.a11y.liveRegion);\n },\n initPagination: function () {\n if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) {\n s.bullets.each(function () {\n var bullet = $(this);\n s.a11y.makeFocusable(bullet);\n s.a11y.addRole(bullet, 'button');\n s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1));\n });\n }\n },\n destroy: function () {\n if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove();\n }\n };\n \n\n /*=========================\n Init/Destroy\n ===========================*/\n s.init = function () {\n if (s.params.loop) s.createLoop();\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n if (s.params.scrollbarDraggable) {\n s.scrollbar.enableDraggable();\n }\n }\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n if (!s.params.loop) s.updateProgress();\n s.effects[s.params.effect].setTranslate();\n }\n if (s.params.loop) {\n s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit);\n }\n else {\n s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit);\n if (s.params.initialSlide === 0) {\n if (s.parallax && s.params.parallax) s.parallax.setTranslate();\n if (s.lazy && s.params.lazyLoading) {\n s.lazy.load();\n s.lazy.initialImageLoaded = true;\n }\n }\n }\n s.attachEvents();\n if (s.params.observer && s.support.observer) {\n s.initObservers();\n }\n if (s.params.preloadImages && !s.params.lazyLoading) {\n s.preloadImages();\n }\n if (s.params.autoplay) {\n s.startAutoplay();\n }\n if (s.params.keyboardControl) {\n if (s.enableKeyboardControl) s.enableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.enableMousewheelControl) s.enableMousewheelControl();\n }\n if (s.params.hashnav) {\n if (s.hashnav) s.hashnav.init();\n }\n if (s.params.a11y && s.a11y) s.a11y.init();\n s.emit('onInit', s);\n };\n \n // Cleanup dynamic styles\n s.cleanupStyles = function () {\n // Container\n s.container.removeClass(s.classNames.join(' ')).removeAttr('style');\n \n // Wrapper\n s.wrapper.removeAttr('style');\n \n // Slides\n if (s.slides && s.slides.length) {\n s.slides\n .removeClass([\n s.params.slideVisibleClass,\n s.params.slideActiveClass,\n s.params.slideNextClass,\n s.params.slidePrevClass\n ].join(' '))\n .removeAttr('style')\n .removeAttr('data-swiper-column')\n .removeAttr('data-swiper-row');\n }\n \n // Pagination/Bullets\n if (s.paginationContainer && s.paginationContainer.length) {\n s.paginationContainer.removeClass(s.params.paginationHiddenClass);\n }\n if (s.bullets && s.bullets.length) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n }\n \n // Buttons\n if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n \n // Scrollbar\n if (s.params.scrollbar && s.scrollbar) {\n if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style');\n if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style');\n }\n };\n \n // Destroy\n s.destroy = function (deleteInstance, cleanupStyles) {\n // Detach evebts\n s.detachEvents();\n // Stop autoplay\n s.stopAutoplay();\n // Disable draggable\n if (s.params.scrollbar && s.scrollbar) {\n if (s.params.scrollbarDraggable) {\n s.scrollbar.disableDraggable();\n }\n }\n // Destroy loop\n if (s.params.loop) {\n s.destroyLoop();\n }\n // Cleanup styles\n if (cleanupStyles) {\n s.cleanupStyles();\n }\n // Disconnect observer\n s.disconnectObservers();\n // Disable keyboard/mousewheel\n if (s.params.keyboardControl) {\n if (s.disableKeyboardControl) s.disableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.disableMousewheelControl) s.disableMousewheelControl();\n }\n // Disable a11y\n if (s.params.a11y && s.a11y) s.a11y.destroy();\n // Destroy callback\n s.emit('onDestroy');\n // Delete instance\n if (deleteInstance !== false) s = null;\n };\n \n s.init();\n \n\n \n // Return swiper instance\n return s;\n };\n \n\n /*==================================================\n Prototype\n ====================================================*/\n Swiper.prototype = {\n isSafari: (function () {\n var ua = navigator.userAgent.toLowerCase();\n return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n })(),\n isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent),\n isArray: function (arr) {\n return Object.prototype.toString.apply(arr) === '[object Array]';\n },\n /*==================================================\n Browser\n ====================================================*/\n browser: {\n ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled,\n ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1)\n },\n /*==================================================\n Devices\n ====================================================*/\n device: (function () {\n var ua = navigator.userAgent;\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\n var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n var iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\n return {\n ios: ipad || iphone || ipod,\n android: android\n };\n })(),\n /*==================================================\n Feature Detection\n ====================================================*/\n support: {\n touch : (window.Modernizr && Modernizr.touch === true) || (function () {\n return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch);\n })(),\n \n transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () {\n var div = document.createElement('div').style;\n return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div);\n })(),\n \n flexbox: (function () {\n var div = document.createElement('div').style;\n var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');\n for (var i = 0; i < styles.length; i++) {\n if (styles[i] in div) return true;\n }\n })(),\n \n observer: (function () {\n return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n })()\n },\n /*==================================================\n Plugins\n ====================================================*/\n plugins: {}\n };\n \n\n /*===========================\n Dom7 Library\n ===========================*/\n var Dom7 = (function () {\n var Dom7 = function (arr) {\n var _this = this, i = 0;\n // Create array-like object\n for (i = 0; i < arr.length; i++) {\n _this[i] = arr[i];\n }\n _this.length = arr.length;\n // Return collection with methods\n return this;\n };\n var $ = function (selector, context) {\n var arr = [], i = 0;\n if (selector && !context) {\n if (selector instanceof Dom7) {\n return selector;\n }\n }\n if (selector) {\n // String\n if (typeof selector === 'string') {\n var els, tempParent, html = selector.trim();\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n var toCreate = 'div';\n if (html.indexOf(':~]/)) {\n // Pure ID selector\n els = [document.getElementById(selector.split('#')[1])];\n }\n else {\n // Other selectors\n els = (context || document).querySelectorAll(selector);\n }\n for (i = 0; i < els.length; i++) {\n if (els[i]) arr.push(els[i]);\n }\n }\n }\n // Node/element\n else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n }\n //Array of elements or instance of Dom\n else if (selector.length > 0 && selector[0].nodeType) {\n for (i = 0; i < selector.length; i++) {\n arr.push(selector[i]);\n }\n }\n }\n return new Dom7(arr);\n };\n Dom7.prototype = {\n // Classes and attriutes\n addClass: function (className) {\n if (typeof className === 'undefined') {\n return this;\n }\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i++) {\n for (var j = 0; j < this.length; j++) {\n this[j].classList.add(classes[i]);\n }\n }\n return this;\n },\n removeClass: function (className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i++) {\n for (var j = 0; j < this.length; j++) {\n this[j].classList.remove(classes[i]);\n }\n }\n return this;\n },\n hasClass: function (className) {\n if (!this[0]) return false;\n else return this[0].classList.contains(className);\n },\n toggleClass: function (className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i++) {\n for (var j = 0; j < this.length; j++) {\n this[j].classList.toggle(classes[i]);\n }\n }\n return this;\n },\n attr: function (attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n else return undefined;\n }\n else {\n // Set attrs\n for (var i = 0; i < this.length; i++) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n }\n else {\n // Object\n for (var attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n return this;\n }\n },\n removeAttr: function (attr) {\n for (var i = 0; i < this.length; i++) {\n this[i].removeAttribute(attr);\n }\n return this;\n },\n data: function (key, value) {\n if (typeof value === 'undefined') {\n // Get value\n if (this[0]) {\n var dataKey = this[0].getAttribute('data-' + key);\n if (dataKey) return dataKey;\n else if (this[0].dom7ElementDataStorage && (key in this[0].dom7ElementDataStorage)) return this[0].dom7ElementDataStorage[key];\n else return undefined;\n }\n else return undefined;\n }\n else {\n // Set value\n for (var i = 0; i < this.length; i++) {\n var el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n return this;\n }\n },\n // Transforms\n transform : function (transform) {\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;\n }\n return this;\n },\n transition: function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;\n }\n return this;\n },\n //Events\n on: function (eventName, targetSelector, listener, capture) {\n function handleLiveEvent(e) {\n var target = e.target;\n if ($(target).is(targetSelector)) listener.call(target, e);\n else {\n var parents = $(target).parents();\n for (var k = 0; k < parents.length; k++) {\n if ($(parents[k]).is(targetSelector)) listener.call(parents[k], e);\n }\n }\n }\n var events = eventName.split(' ');\n var i, j;\n for (i = 0; i < this.length; i++) {\n if (typeof targetSelector === 'function' || targetSelector === false) {\n // Usual events\n if (typeof targetSelector === 'function') {\n listener = arguments[1];\n capture = arguments[2] || false;\n }\n for (j = 0; j < events.length; j++) {\n this[i].addEventListener(events[j], listener, capture);\n }\n }\n else {\n //Live events\n for (j = 0; j < events.length; j++) {\n if (!this[i].dom7LiveListeners) this[i].dom7LiveListeners = [];\n this[i].dom7LiveListeners.push({listener: listener, liveListener: handleLiveEvent});\n this[i].addEventListener(events[j], handleLiveEvent, capture);\n }\n }\n }\n \n return this;\n },\n off: function (eventName, targetSelector, listener, capture) {\n var events = eventName.split(' ');\n for (var i = 0; i < events.length; i++) {\n for (var j = 0; j < this.length; j++) {\n if (typeof targetSelector === 'function' || targetSelector === false) {\n // Usual events\n if (typeof targetSelector === 'function') {\n listener = arguments[1];\n capture = arguments[2] || false;\n }\n this[j].removeEventListener(events[i], listener, capture);\n }\n else {\n // Live event\n if (this[j].dom7LiveListeners) {\n for (var k = 0; k < this[j].dom7LiveListeners.length; k++) {\n if (this[j].dom7LiveListeners[k].listener === listener) {\n this[j].removeEventListener(events[i], this[j].dom7LiveListeners[k].liveListener, capture);\n }\n }\n }\n }\n }\n }\n return this;\n },\n once: function (eventName, targetSelector, listener, capture) {\n var dom = this;\n if (typeof targetSelector === 'function') {\n targetSelector = false;\n listener = arguments[1];\n capture = arguments[2];\n }\n function proxy(e) {\n listener(e);\n dom.off(eventName, targetSelector, proxy, capture);\n }\n dom.on(eventName, targetSelector, proxy, capture);\n },\n trigger: function (eventName, eventData) {\n for (var i = 0; i < this.length; i++) {\n var evt;\n try {\n evt = new window.CustomEvent(eventName, {detail: eventData, bubbles: true, cancelable: true});\n }\n catch (e) {\n evt = document.createEvent('Event');\n evt.initEvent(eventName, true, true);\n evt.detail = eventData;\n }\n this[i].dispatchEvent(evt);\n }\n return this;\n },\n transitionEnd: function (callback) {\n var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],\n i, j, dom = this;\n function fireCallBack(e) {\n /*jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i++) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i++) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n },\n // Sizing/Styles\n width: function () {\n if (this[0] === window) {\n return window.innerWidth;\n }\n else {\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n else {\n return null;\n }\n }\n },\n outerWidth: function (includeMargins) {\n if (this.length > 0) {\n if (includeMargins)\n return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left'));\n else\n return this[0].offsetWidth;\n }\n else return null;\n },\n height: function () {\n if (this[0] === window) {\n return window.innerHeight;\n }\n else {\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n else {\n return null;\n }\n }\n },\n outerHeight: function (includeMargins) {\n if (this.length > 0) {\n if (includeMargins)\n return this[0].offsetHeight + parseFloat(this.css('margin-top')) + parseFloat(this.css('margin-bottom'));\n else\n return this[0].offsetHeight;\n }\n else return null;\n },\n offset: function () {\n if (this.length > 0) {\n var el = this[0];\n var box = el.getBoundingClientRect();\n var body = document.body;\n var clientTop = el.clientTop || body.clientTop || 0;\n var clientLeft = el.clientLeft || body.clientLeft || 0;\n var scrollTop = window.pageYOffset || el.scrollTop;\n var scrollLeft = window.pageXOffset || el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n else {\n return null;\n }\n },\n css: function (props, value) {\n var i;\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n }\n else {\n for (i = 0; i < this.length; i++) {\n for (var prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n return this;\n }\n }\n if (arguments.length === 2 && typeof props === 'string') {\n for (i = 0; i < this.length; i++) {\n this[i].style[props] = value;\n }\n return this;\n }\n return this;\n },\n \n //Dom manipulation\n each: function (callback) {\n for (var i = 0; i < this.length; i++) {\n callback.call(this[i], i, this[i]);\n }\n return this;\n },\n html: function (html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : undefined;\n }\n else {\n for (var i = 0; i < this.length; i++) {\n this[i].innerHTML = html;\n }\n return this;\n }\n },\n text: function (text) {\n if (typeof text === 'undefined') {\n if (this[0]) {\n return this[0].textContent.trim();\n }\n else return null;\n }\n else {\n for (var i = 0; i < this.length; i++) {\n this[i].textContent = text;\n }\n return this;\n }\n },\n is: function (selector) {\n if (!this[0]) return false;\n var compareWith, i;\n if (typeof selector === 'string') {\n var el = this[0];\n if (el === document) return selector === document;\n if (el === window) return selector === window;\n \n if (el.matches) return el.matches(selector);\n else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n else if (el.mozMatchesSelector) return el.mozMatchesSelector(selector);\n else if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n else {\n compareWith = $(selector);\n for (i = 0; i < compareWith.length; i++) {\n if (compareWith[i] === this[0]) return true;\n }\n return false;\n }\n }\n else if (selector === document) return this[0] === document;\n else if (selector === window) return this[0] === window;\n else {\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n for (i = 0; i < compareWith.length; i++) {\n if (compareWith[i] === this[0]) return true;\n }\n return false;\n }\n return false;\n }\n \n },\n index: function () {\n if (this[0]) {\n var child = this[0];\n var i = 0;\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i++;\n }\n return i;\n }\n else return undefined;\n },\n eq: function (index) {\n if (typeof index === 'undefined') return this;\n var length = this.length;\n var returnIndex;\n if (index > length - 1) {\n return new Dom7([]);\n }\n if (index < 0) {\n returnIndex = length + index;\n if (returnIndex < 0) return new Dom7([]);\n else return new Dom7([this[returnIndex]]);\n }\n return new Dom7([this[index]]);\n },\n append: function (newChild) {\n var i, j;\n for (i = 0; i < this.length; i++) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n }\n else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j++) {\n this[i].appendChild(newChild[j]);\n }\n }\n else {\n this[i].appendChild(newChild);\n }\n }\n return this;\n },\n prepend: function (newChild) {\n var i, j;\n for (i = 0; i < this.length; i++) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n for (j = tempDiv.childNodes.length - 1; j >= 0; j--) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n // this[i].insertAdjacentHTML('afterbegin', newChild);\n }\n else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j++) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n }\n else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n return this;\n },\n insertBefore: function (selector) {\n var before = $(selector);\n for (var i = 0; i < this.length; i++) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n }\n else if (before.length > 1) {\n for (var j = 0; j < before.length; j++) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n },\n insertAfter: function (selector) {\n var after = $(selector);\n for (var i = 0; i < this.length; i++) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n }\n else if (after.length > 1) {\n for (var j = 0; j < after.length; j++) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n },\n next: function (selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) return new Dom7([this[0].nextElementSibling]);\n else return new Dom7([]);\n }\n else {\n if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);\n else return new Dom7([]);\n }\n }\n else return new Dom7([]);\n },\n nextAll: function (selector) {\n var nextEls = [];\n var el = this[0];\n if (!el) return new Dom7([]);\n while (el.nextElementSibling) {\n var next = el.nextElementSibling;\n if (selector) {\n if($(next).is(selector)) nextEls.push(next);\n }\n else nextEls.push(next);\n el = next;\n }\n return new Dom7(nextEls);\n },\n prev: function (selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].previousElementSibling && $(this[0].previousElementSibling).is(selector)) return new Dom7([this[0].previousElementSibling]);\n else return new Dom7([]);\n }\n else {\n if (this[0].previousElementSibling) return new Dom7([this[0].previousElementSibling]);\n else return new Dom7([]);\n }\n }\n else return new Dom7([]);\n },\n prevAll: function (selector) {\n var prevEls = [];\n var el = this[0];\n if (!el) return new Dom7([]);\n while (el.previousElementSibling) {\n var prev = el.previousElementSibling;\n if (selector) {\n if($(prev).is(selector)) prevEls.push(prev);\n }\n else prevEls.push(prev);\n el = prev;\n }\n return new Dom7(prevEls);\n },\n parent: function (selector) {\n var parents = [];\n for (var i = 0; i < this.length; i++) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n }\n else {\n parents.push(this[i].parentNode);\n }\n }\n return $($.unique(parents));\n },\n parents: function (selector) {\n var parents = [];\n for (var i = 0; i < this.length; i++) {\n var parent = this[i].parentNode;\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n }\n else {\n parents.push(parent);\n }\n parent = parent.parentNode;\n }\n }\n return $($.unique(parents));\n },\n find : function (selector) {\n var foundElements = [];\n for (var i = 0; i < this.length; i++) {\n var found = this[i].querySelectorAll(selector);\n for (var j = 0; j < found.length; j++) {\n foundElements.push(found[j]);\n }\n }\n return new Dom7(foundElements);\n },\n children: function (selector) {\n var children = [];\n for (var i = 0; i < this.length; i++) {\n var childNodes = this[i].childNodes;\n \n for (var j = 0; j < childNodes.length; j++) {\n if (!selector) {\n if (childNodes[j].nodeType === 1) children.push(childNodes[j]);\n }\n else {\n if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) children.push(childNodes[j]);\n }\n }\n }\n return new Dom7($.unique(children));\n },\n remove: function () {\n for (var i = 0; i < this.length; i++) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n return this;\n },\n add: function () {\n var dom = this;\n var i, j;\n for (i = 0; i < arguments.length; i++) {\n var toAdd = $(arguments[i]);\n for (j = 0; j < toAdd.length; j++) {\n dom[dom.length] = toAdd[j];\n dom.length++;\n }\n }\n return dom;\n }\n };\n $.fn = Dom7.prototype;\n $.unique = function (arr) {\n var unique = [];\n for (var i = 0; i < arr.length; i++) {\n if (unique.indexOf(arr[i]) === -1) unique.push(arr[i]);\n }\n return unique;\n };\n \n return $;\n })();\n \n\n /*===========================\n Get Dom libraries\n ===========================*/\n var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7'];\n for (var i = 0; i < swiperDomPlugins.length; i++) {\n \tif (window[swiperDomPlugins[i]]) {\n \t\taddLibraryPlugin(window[swiperDomPlugins[i]]);\n \t}\n }\n // Required DOM Plugins\n var domLib;\n if (typeof Dom7 === 'undefined') {\n \tdomLib = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n \tdomLib = Dom7;\n }\n\n /*===========================\n Add .swiper plugin from Dom libraries\n ===========================*/\n function addLibraryPlugin(lib) {\n lib.fn.swiper = function (params) {\n var firstInstance;\n lib(this).each(function () {\n var s = new Swiper(this, params);\n if (!firstInstance) firstInstance = s;\n });\n return firstInstance;\n };\n }\n \n if (domLib) {\n if (!('transitionEnd' in domLib.fn)) {\n domLib.fn.transitionEnd = function (callback) {\n var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],\n i, j, dom = this;\n function fireCallBack(e) {\n /*jshint validthis:true */\n if (e.target !== this) return;\n callback.call(this, e);\n for (i = 0; i < events.length; i++) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i++) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n };\n }\n if (!('transform' in domLib.fn)) {\n domLib.fn.transform = function (transform) {\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;\n }\n return this;\n };\n }\n if (!('transition' in domLib.fn)) {\n domLib.fn.transition = function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;\n }\n return this;\n };\n }\n }\n\n window.Swiper = Swiper;\n})();\n/*===========================\nSwiper AMD Export\n===========================*/\nif (typeof(module) !== 'undefined')\n{\n module.exports = window.Swiper;\n}\nelse if (typeof define === 'function' && define.amd) {\n define([], function () {\n 'use strict';\n return window.Swiper;\n });\n}\n//# sourceMappingURL=maps/swiper.js.map\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/libs/swiper/js/swiper.jquery.js b/src/libs/swiper/js/swiper.jquery.js new file mode 100755 index 0000000..3cd248a --- /dev/null +++ b/src/libs/swiper/js/swiper.jquery.js @@ -0,0 +1,3778 @@ +/** + * Swiper 3.3.1 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * + * http://www.idangero.us/swiper/ + * + * Copyright 2016, Vladimir Kharlampidi + * The iDangero.us + * http://www.idangero.us/ + * + * Licensed under MIT + * + * Released on: February 7, 2016 + */ +(function () { + 'use strict'; + var $; + /*=========================== + Swiper + ===========================*/ + var Swiper = function (container, params) { + if (!(this instanceof Swiper)) return new Swiper(container, params); + + var defaults = { + direction: 'horizontal', + touchEventsTarget: 'container', + initialSlide: 0, + speed: 300, + // autoplay + autoplay: false, + autoplayDisableOnInteraction: true, + autoplayStopOnLast: false, + // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView). + iOSEdgeSwipeDetection: false, + iOSEdgeSwipeThreshold: 20, + // Free mode + freeMode: false, + freeModeMomentum: true, + freeModeMomentumRatio: 1, + freeModeMomentumBounce: true, + freeModeMomentumBounceRatio: 1, + freeModeSticky: false, + freeModeMinimumVelocity: 0.02, + // Autoheight + autoHeight: false, + // Set wrapper width + setWrapperSize: false, + // Virtual Translate + virtualTranslate: false, + // Effects + effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip' + coverflow: { + rotate: 50, + stretch: 0, + depth: 100, + modifier: 1, + slideShadows : true + }, + flip: { + slideShadows : true, + limitRotation: true + }, + cube: { + slideShadows: true, + shadow: true, + shadowOffset: 20, + shadowScale: 0.94 + }, + fade: { + crossFade: false + }, + // Parallax + parallax: false, + // Scrollbar + scrollbar: null, + scrollbarHide: true, + scrollbarDraggable: false, + scrollbarSnapOnRelease: false, + // Keyboard Mousewheel + keyboardControl: false, + mousewheelControl: false, + mousewheelReleaseOnEdges: false, + mousewheelInvert: false, + mousewheelForceToAxis: false, + mousewheelSensitivity: 1, + // Hash Navigation + hashnav: false, + // Breakpoints + breakpoints: undefined, + // Slides grid + spaceBetween: 0, + slidesPerView: 1, + slidesPerColumn: 1, + slidesPerColumnFill: 'column', + slidesPerGroup: 1, + centeredSlides: false, + slidesOffsetBefore: 0, // in px + slidesOffsetAfter: 0, // in px + // Round length + roundLengths: false, + // Touches + touchRatio: 1, + touchAngle: 45, + simulateTouch: true, + shortSwipes: true, + longSwipes: true, + longSwipesRatio: 0.5, + longSwipesMs: 300, + followFinger: true, + onlyExternal: false, + threshold: 0, + touchMoveStopPropagation: true, + // Unique Navigation Elements + uniqueNavElements: true, + // Pagination + pagination: null, + paginationElement: 'span', + paginationClickable: false, + paginationHide: false, + paginationBulletRender: null, + paginationProgressRender: null, + paginationFractionRender: null, + paginationCustomRender: null, + paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom' + // Resistance + resistance: true, + resistanceRatio: 0.85, + // Next/prev buttons + nextButton: null, + prevButton: null, + // Progress + watchSlidesProgress: false, + watchSlidesVisibility: false, + // Cursor + grabCursor: false, + // Clicks + preventClicks: true, + preventClicksPropagation: true, + slideToClickedSlide: false, + // Lazy Loading + lazyLoading: false, + lazyLoadingInPrevNext: false, + lazyLoadingInPrevNextAmount: 1, + lazyLoadingOnTransitionStart: false, + // Images + preloadImages: true, + updateOnImagesReady: true, + // loop + loop: false, + loopAdditionalSlides: 0, + loopedSlides: null, + // Control + control: undefined, + controlInverse: false, + controlBy: 'slide', //or 'container' + // Swiping/no swiping + allowSwipeToPrev: true, + allowSwipeToNext: true, + swipeHandler: null, //'.swipe-handler', + noSwiping: true, + noSwipingClass: 'swiper-no-swiping', + // NS + slideClass: 'swiper-slide', + slideActiveClass: 'swiper-slide-active', + slideVisibleClass: 'swiper-slide-visible', + slideDuplicateClass: 'swiper-slide-duplicate', + slideNextClass: 'swiper-slide-next', + slidePrevClass: 'swiper-slide-prev', + wrapperClass: 'swiper-wrapper', + bulletClass: 'swiper-pagination-bullet', + bulletActiveClass: 'swiper-pagination-bullet-active', + buttonDisabledClass: 'swiper-button-disabled', + paginationCurrentClass: 'swiper-pagination-current', + paginationTotalClass: 'swiper-pagination-total', + paginationHiddenClass: 'swiper-pagination-hidden', + paginationProgressbarClass: 'swiper-pagination-progressbar', + // Observer + observer: false, + observeParents: false, + // Accessibility + a11y: false, + prevSlideMessage: 'Previous slide', + nextSlideMessage: 'Next slide', + firstSlideMessage: 'This is the first slide', + lastSlideMessage: 'This is the last slide', + paginationBulletMessage: 'Go to slide {{index}}', + // Callbacks + runCallbacksOnInit: true + /* + Callbacks: + onInit: function (swiper) + onDestroy: function (swiper) + onClick: function (swiper, e) + onTap: function (swiper, e) + onDoubleTap: function (swiper, e) + onSliderMove: function (swiper, e) + onSlideChangeStart: function (swiper) + onSlideChangeEnd: function (swiper) + onTransitionStart: function (swiper) + onTransitionEnd: function (swiper) + onImagesReady: function (swiper) + onProgress: function (swiper, progress) + onTouchStart: function (swiper, e) + onTouchMove: function (swiper, e) + onTouchMoveOpposite: function (swiper, e) + onTouchEnd: function (swiper, e) + onReachBeginning: function (swiper) + onReachEnd: function (swiper) + onSetTransition: function (swiper, duration) + onSetTranslate: function (swiper, translate) + onAutoplayStart: function (swiper) + onAutoplayStop: function (swiper), + onLazyImageLoad: function (swiper, slide, image) + onLazyImageReady: function (swiper, slide, image) + */ + + }; + var initialVirtualTranslate = params && params.virtualTranslate; + + params = params || {}; + var originalParams = {}; + for (var param in params) { + if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) { + originalParams[param] = {}; + for (var deepParam in params[param]) { + originalParams[param][deepParam] = params[param][deepParam]; + } + } + else { + originalParams[param] = params[param]; + } + } + for (var def in defaults) { + if (typeof params[def] === 'undefined') { + params[def] = defaults[def]; + } + else if (typeof params[def] === 'object') { + for (var deepDef in defaults[def]) { + if (typeof params[def][deepDef] === 'undefined') { + params[def][deepDef] = defaults[def][deepDef]; + } + } + } + } + + // Swiper + var s = this; + + // Params + s.params = params; + s.originalParams = originalParams; + + // Classname + s.classNames = []; + /*========================= + Dom Library and plugins + ===========================*/ + if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){ + $ = Dom7; + } + if (typeof $ === 'undefined') { + if (typeof Dom7 === 'undefined') { + $ = window.Dom7 || window.Zepto || window.jQuery; + } + else { + $ = Dom7; + } + if (!$) return; + } + // Export it to Swiper instance + s.$ = $; + + /*========================= + Breakpoints + ===========================*/ + s.currentBreakpoint = undefined; + s.getActiveBreakpoint = function () { + //Get breakpoint for window width + if (!s.params.breakpoints) return false; + var breakpoint = false; + var points = [], point; + for ( point in s.params.breakpoints ) { + if (s.params.breakpoints.hasOwnProperty(point)) { + points.push(point); + } + } + points.sort(function (a, b) { + return parseInt(a, 10) > parseInt(b, 10); + }); + for (var i = 0; i < points.length; i++) { + point = points[i]; + if (point >= window.innerWidth && !breakpoint) { + breakpoint = point; + } + } + return breakpoint || 'max'; + }; + s.setBreakpoint = function () { + //Set breakpoint for window width and update parameters + var breakpoint = s.getActiveBreakpoint(); + if (breakpoint && s.currentBreakpoint !== breakpoint) { + var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams; + var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView); + for ( var param in breakPointsParams ) { + s.params[param] = breakPointsParams[param]; + } + s.currentBreakpoint = breakpoint; + if(needsReLoop && s.destroyLoop) { + s.reLoop(true); + } + } + }; + // Set breakpoint on load + if (s.params.breakpoints) { + s.setBreakpoint(); + } + + /*========================= + Preparation - Define Container, Wrapper and Pagination + ===========================*/ + s.container = $(container); + if (s.container.length === 0) return; + if (s.container.length > 1) { + var swipers = []; + s.container.each(function () { + var container = this; + swipers.push(new Swiper(this, params)); + }); + return swipers; + } + + // Save instance in container HTML Element and in data + s.container[0].swiper = s; + s.container.data('swiper', s); + + s.classNames.push('swiper-container-' + s.params.direction); + + if (s.params.freeMode) { + s.classNames.push('swiper-container-free-mode'); + } + if (!s.support.flexbox) { + s.classNames.push('swiper-container-no-flexbox'); + s.params.slidesPerColumn = 1; + } + if (s.params.autoHeight) { + s.classNames.push('swiper-container-autoheight'); + } + // Enable slides progress when required + if (s.params.parallax || s.params.watchSlidesVisibility) { + s.params.watchSlidesProgress = true; + } + // Coverflow / 3D + if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) { + if (s.support.transforms3d) { + s.params.watchSlidesProgress = true; + s.classNames.push('swiper-container-3d'); + } + else { + s.params.effect = 'slide'; + } + } + if (s.params.effect !== 'slide') { + s.classNames.push('swiper-container-' + s.params.effect); + } + if (s.params.effect === 'cube') { + s.params.resistanceRatio = 0; + s.params.slidesPerView = 1; + s.params.slidesPerColumn = 1; + s.params.slidesPerGroup = 1; + s.params.centeredSlides = false; + s.params.spaceBetween = 0; + s.params.virtualTranslate = true; + s.params.setWrapperSize = false; + } + if (s.params.effect === 'fade' || s.params.effect === 'flip') { + s.params.slidesPerView = 1; + s.params.slidesPerColumn = 1; + s.params.slidesPerGroup = 1; + s.params.watchSlidesProgress = true; + s.params.spaceBetween = 0; + s.params.setWrapperSize = false; + if (typeof initialVirtualTranslate === 'undefined') { + s.params.virtualTranslate = true; + } + } + + // Grab Cursor + if (s.params.grabCursor && s.support.touch) { + s.params.grabCursor = false; + } + + // Wrapper + s.wrapper = s.container.children('.' + s.params.wrapperClass); + + // Pagination + if (s.params.pagination) { + s.paginationContainer = $(s.params.pagination); + if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) { + s.paginationContainer = s.container.find(s.params.pagination); + } + + if (s.params.paginationType === 'bullets' && s.params.paginationClickable) { + s.paginationContainer.addClass('swiper-pagination-clickable'); + } + else { + s.params.paginationClickable = false; + } + s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType); + } + // Next/Prev Buttons + if (s.params.nextButton || s.params.prevButton) { + if (s.params.nextButton) { + s.nextButton = $(s.params.nextButton); + if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) { + s.nextButton = s.container.find(s.params.nextButton); + } + } + if (s.params.prevButton) { + s.prevButton = $(s.params.prevButton); + if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) { + s.prevButton = s.container.find(s.params.prevButton); + } + } + } + + // Is Horizontal + s.isHorizontal = function () { + return s.params.direction === 'horizontal'; + }; + // s.isH = isH; + + // RTL + s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl'); + if (s.rtl) { + s.classNames.push('swiper-container-rtl'); + } + + // Wrong RTL support + if (s.rtl) { + s.wrongRTL = s.wrapper.css('display') === '-webkit-box'; + } + + // Columns + if (s.params.slidesPerColumn > 1) { + s.classNames.push('swiper-container-multirow'); + } + + // Check for Android + if (s.device.android) { + s.classNames.push('swiper-container-android'); + } + + // Add classes + s.container.addClass(s.classNames.join(' ')); + + // Translate + s.translate = 0; + + // Progress + s.progress = 0; + + // Velocity + s.velocity = 0; + + /*========================= + Locks, unlocks + ===========================*/ + s.lockSwipeToNext = function () { + s.params.allowSwipeToNext = false; + }; + s.lockSwipeToPrev = function () { + s.params.allowSwipeToPrev = false; + }; + s.lockSwipes = function () { + s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false; + }; + s.unlockSwipeToNext = function () { + s.params.allowSwipeToNext = true; + }; + s.unlockSwipeToPrev = function () { + s.params.allowSwipeToPrev = true; + }; + s.unlockSwipes = function () { + s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true; + }; + + /*========================= + Round helper + ===========================*/ + function round(a) { + return Math.floor(a); + } + /*========================= + Set grab cursor + ===========================*/ + if (s.params.grabCursor) { + s.container[0].style.cursor = 'move'; + s.container[0].style.cursor = '-webkit-grab'; + s.container[0].style.cursor = '-moz-grab'; + s.container[0].style.cursor = 'grab'; + } + /*========================= + Update on Images Ready + ===========================*/ + s.imagesToLoad = []; + s.imagesLoaded = 0; + + s.loadImage = function (imgElement, src, srcset, checkForComplete, callback) { + var image; + function onReady () { + if (callback) callback(); + } + if (!imgElement.complete || !checkForComplete) { + if (src) { + image = new window.Image(); + image.onload = onReady; + image.onerror = onReady; + if (srcset) { + image.srcset = srcset; + } + if (src) { + image.src = src; + } + } else { + onReady(); + } + + } else {//image already loaded... + onReady(); + } + }; + s.preloadImages = function () { + s.imagesToLoad = s.container.find('img'); + function _onReady() { + if (typeof s === 'undefined' || s === null) return; + if (s.imagesLoaded !== undefined) s.imagesLoaded++; + if (s.imagesLoaded === s.imagesToLoad.length) { + if (s.params.updateOnImagesReady) s.update(); + s.emit('onImagesReady', s); + } + } + for (var i = 0; i < s.imagesToLoad.length; i++) { + s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), true, _onReady); + } + }; + + /*========================= + Autoplay + ===========================*/ + s.autoplayTimeoutId = undefined; + s.autoplaying = false; + s.autoplayPaused = false; + function autoplay() { + s.autoplayTimeoutId = setTimeout(function () { + if (s.params.loop) { + s.fixLoop(); + s._slideNext(); + s.emit('onAutoplay', s); + } + else { + if (!s.isEnd) { + s._slideNext(); + s.emit('onAutoplay', s); + } + else { + if (!params.autoplayStopOnLast) { + s._slideTo(0); + s.emit('onAutoplay', s); + } + else { + s.stopAutoplay(); + } + } + } + }, s.params.autoplay); + } + s.startAutoplay = function () { + if (typeof s.autoplayTimeoutId !== 'undefined') return false; + if (!s.params.autoplay) return false; + if (s.autoplaying) return false; + s.autoplaying = true; + s.emit('onAutoplayStart', s); + autoplay(); + }; + s.stopAutoplay = function (internal) { + if (!s.autoplayTimeoutId) return; + if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId); + s.autoplaying = false; + s.autoplayTimeoutId = undefined; + s.emit('onAutoplayStop', s); + }; + s.pauseAutoplay = function (speed) { + if (s.autoplayPaused) return; + if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId); + s.autoplayPaused = true; + if (speed === 0) { + s.autoplayPaused = false; + autoplay(); + } + else { + s.wrapper.transitionEnd(function () { + if (!s) return; + s.autoplayPaused = false; + if (!s.autoplaying) { + s.stopAutoplay(); + } + else { + autoplay(); + } + }); + } + }; + /*========================= + Min/Max Translate + ===========================*/ + s.minTranslate = function () { + return (-s.snapGrid[0]); + }; + s.maxTranslate = function () { + return (-s.snapGrid[s.snapGrid.length - 1]); + }; + /*========================= + Slider/slides sizes + ===========================*/ + s.updateAutoHeight = function () { + // Update Height + var slide = s.slides.eq(s.activeIndex)[0]; + if (typeof slide !== 'undefined') { + var newHeight = slide.offsetHeight; + if (newHeight) s.wrapper.css('height', newHeight + 'px'); + } + }; + s.updateContainerSize = function () { + var width, height; + if (typeof s.params.width !== 'undefined') { + width = s.params.width; + } + else { + width = s.container[0].clientWidth; + } + if (typeof s.params.height !== 'undefined') { + height = s.params.height; + } + else { + height = s.container[0].clientHeight; + } + if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) { + return; + } + + //Subtract paddings + width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10); + height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10); + + // Store values + s.width = width; + s.height = height; + s.size = s.isHorizontal() ? s.width : s.height; + }; + + s.updateSlidesSize = function () { + s.slides = s.wrapper.children('.' + s.params.slideClass); + s.snapGrid = []; + s.slidesGrid = []; + s.slidesSizesGrid = []; + + var spaceBetween = s.params.spaceBetween, + slidePosition = -s.params.slidesOffsetBefore, + i, + prevSlideSize = 0, + index = 0; + if (typeof s.size === 'undefined') return; + if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { + spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size; + } + + s.virtualSize = -spaceBetween; + // reset margins + if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''}); + else s.slides.css({marginRight: '', marginBottom: ''}); + + var slidesNumberEvenToRows; + if (s.params.slidesPerColumn > 1) { + if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) { + slidesNumberEvenToRows = s.slides.length; + } + else { + slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn; + } + if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') { + slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn); + } + } + + // Calc slides + var slideSize; + var slidesPerColumn = s.params.slidesPerColumn; + var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn; + var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length); + for (i = 0; i < s.slides.length; i++) { + slideSize = 0; + var slide = s.slides.eq(i); + if (s.params.slidesPerColumn > 1) { + // Set slides order + var newSlideOrderIndex; + var column, row; + if (s.params.slidesPerColumnFill === 'column') { + column = Math.floor(i / slidesPerColumn); + row = i - column * slidesPerColumn; + if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) { + if (++row >= slidesPerColumn) { + row = 0; + column++; + } + } + newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn; + slide + .css({ + '-webkit-box-ordinal-group': newSlideOrderIndex, + '-moz-box-ordinal-group': newSlideOrderIndex, + '-ms-flex-order': newSlideOrderIndex, + '-webkit-order': newSlideOrderIndex, + 'order': newSlideOrderIndex + }); + } + else { + row = Math.floor(i / slidesPerRow); + column = i - row * slidesPerRow; + } + slide + .css({ + 'margin-top': (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px') + }) + .attr('data-swiper-column', column) + .attr('data-swiper-row', row); + + } + if (slide.css('display') === 'none') continue; + if (s.params.slidesPerView === 'auto') { + slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true); + if (s.params.roundLengths) slideSize = round(slideSize); + } + else { + slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView; + if (s.params.roundLengths) slideSize = round(slideSize); + + if (s.isHorizontal()) { + s.slides[i].style.width = slideSize + 'px'; + } + else { + s.slides[i].style.height = slideSize + 'px'; + } + } + s.slides[i].swiperSlideSize = slideSize; + s.slidesSizesGrid.push(slideSize); + + + if (s.params.centeredSlides) { + slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; + if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween; + if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; + if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition); + s.slidesGrid.push(slidePosition); + } + else { + if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition); + s.slidesGrid.push(slidePosition); + slidePosition = slidePosition + slideSize + spaceBetween; + } + + s.virtualSize += slideSize + spaceBetween; + + prevSlideSize = slideSize; + + index ++; + } + s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter; + var newSlidesGrid; + + if ( + s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) { + s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); + } + if (!s.support.flexbox || s.params.setWrapperSize) { + if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); + else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'}); + } + + if (s.params.slidesPerColumn > 1) { + s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows; + s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween; + s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); + if (s.params.centeredSlides) { + newSlidesGrid = []; + for (i = 0; i < s.snapGrid.length; i++) { + if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]); + } + s.snapGrid = newSlidesGrid; + } + } + + // Remove last grid elements depending on width + if (!s.params.centeredSlides) { + newSlidesGrid = []; + for (i = 0; i < s.snapGrid.length; i++) { + if (s.snapGrid[i] <= s.virtualSize - s.size) { + newSlidesGrid.push(s.snapGrid[i]); + } + } + s.snapGrid = newSlidesGrid; + if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) { + s.snapGrid.push(s.virtualSize - s.size); + } + } + if (s.snapGrid.length === 0) s.snapGrid = [0]; + + if (s.params.spaceBetween !== 0) { + if (s.isHorizontal()) { + if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'}); + else s.slides.css({marginRight: spaceBetween + 'px'}); + } + else s.slides.css({marginBottom: spaceBetween + 'px'}); + } + if (s.params.watchSlidesProgress) { + s.updateSlidesOffset(); + } + }; + s.updateSlidesOffset = function () { + for (var i = 0; i < s.slides.length; i++) { + s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop; + } + }; + + /*========================= + Slider/slides progress + ===========================*/ + s.updateSlidesProgress = function (translate) { + if (typeof translate === 'undefined') { + translate = s.translate || 0; + } + if (s.slides.length === 0) return; + if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset(); + + var offsetCenter = -translate; + if (s.rtl) offsetCenter = translate; + + // Visible Slides + s.slides.removeClass(s.params.slideVisibleClass); + for (var i = 0; i < s.slides.length; i++) { + var slide = s.slides[i]; + var slideProgress = (offsetCenter - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween); + if (s.params.watchSlidesVisibility) { + var slideBefore = -(offsetCenter - slide.swiperSlideOffset); + var slideAfter = slideBefore + s.slidesSizesGrid[i]; + var isVisible = + (slideBefore >= 0 && slideBefore < s.size) || + (slideAfter > 0 && slideAfter <= s.size) || + (slideBefore <= 0 && slideAfter >= s.size); + if (isVisible) { + s.slides.eq(i).addClass(s.params.slideVisibleClass); + } + } + slide.progress = s.rtl ? -slideProgress : slideProgress; + } + }; + s.updateProgress = function (translate) { + if (typeof translate === 'undefined') { + translate = s.translate || 0; + } + var translatesDiff = s.maxTranslate() - s.minTranslate(); + var wasBeginning = s.isBeginning; + var wasEnd = s.isEnd; + if (translatesDiff === 0) { + s.progress = 0; + s.isBeginning = s.isEnd = true; + } + else { + s.progress = (translate - s.minTranslate()) / (translatesDiff); + s.isBeginning = s.progress <= 0; + s.isEnd = s.progress >= 1; + } + if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s); + if (s.isEnd && !wasEnd) s.emit('onReachEnd', s); + + if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate); + s.emit('onProgress', s, s.progress); + }; + s.updateActiveIndex = function () { + var translate = s.rtl ? s.translate : -s.translate; + var newActiveIndex, i, snapIndex; + for (i = 0; i < s.slidesGrid.length; i ++) { + if (typeof s.slidesGrid[i + 1] !== 'undefined') { + if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) { + newActiveIndex = i; + } + else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) { + newActiveIndex = i + 1; + } + } + else { + if (translate >= s.slidesGrid[i]) { + newActiveIndex = i; + } + } + } + // Normalize slideIndex + if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0; + // for (i = 0; i < s.slidesGrid.length; i++) { + // if (- translate >= s.slidesGrid[i]) { + // newActiveIndex = i; + // } + // } + snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup); + if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1; + + if (newActiveIndex === s.activeIndex) { + return; + } + s.snapIndex = snapIndex; + s.previousIndex = s.activeIndex; + s.activeIndex = newActiveIndex; + s.updateClasses(); + }; + + /*========================= + Classes + ===========================*/ + s.updateClasses = function () { + s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass); + var activeSlide = s.slides.eq(s.activeIndex); + // Active classes + activeSlide.addClass(s.params.slideActiveClass); + // Next Slide + var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass); + if (s.params.loop && nextSlide.length === 0) { + s.slides.eq(0).addClass(s.params.slideNextClass); + } + // Prev Slide + var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass); + if (s.params.loop && prevSlide.length === 0) { + s.slides.eq(-1).addClass(s.params.slidePrevClass); + } + + // Pagination + if (s.paginationContainer && s.paginationContainer.length > 0) { + // Current/Total + var current, + total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length; + if (s.params.loop) { + current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup); + if (current > s.slides.length - 1 - s.loopedSlides * 2) { + current = current - (s.slides.length - s.loopedSlides * 2); + } + if (current > total - 1) current = current - total; + if (current < 0 && s.params.paginationType !== 'bullets') current = total + current; + } + else { + if (typeof s.snapIndex !== 'undefined') { + current = s.snapIndex; + } + else { + current = s.activeIndex || 0; + } + } + // Types + if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) { + s.bullets.removeClass(s.params.bulletActiveClass); + if (s.paginationContainer.length > 1) { + s.bullets.each(function () { + if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass); + }); + } + else { + s.bullets.eq(current).addClass(s.params.bulletActiveClass); + } + } + if (s.params.paginationType === 'fraction') { + s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1); + s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total); + } + if (s.params.paginationType === 'progress') { + var scale = (current + 1) / total, + scaleX = scale, + scaleY = 1; + if (!s.isHorizontal()) { + scaleY = scale; + scaleX = 1; + } + s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed); + } + if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) { + s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total)); + s.emit('onPaginationRendered', s, s.paginationContainer[0]); + } + } + + // Next/active buttons + if (!s.params.loop) { + if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { + if (s.isBeginning) { + s.prevButton.addClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton); + } + else { + s.prevButton.removeClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton); + } + } + if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { + if (s.isEnd) { + s.nextButton.addClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton); + } + else { + s.nextButton.removeClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton); + } + } + } + }; + + /*========================= + Pagination + ===========================*/ + s.updatePagination = function () { + if (!s.params.pagination) return; + if (s.paginationContainer && s.paginationContainer.length > 0) { + var paginationHTML = ''; + if (s.params.paginationType === 'bullets') { + var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length; + for (var i = 0; i < numberOfBullets; i++) { + if (s.params.paginationBulletRender) { + paginationHTML += s.params.paginationBulletRender(i, s.params.bulletClass); + } + else { + paginationHTML += '<' + s.params.paginationElement+' class="' + s.params.bulletClass + '">'; + } + } + s.paginationContainer.html(paginationHTML); + s.bullets = s.paginationContainer.find('.' + s.params.bulletClass); + if (s.params.paginationClickable && s.params.a11y && s.a11y) { + s.a11y.initPagination(); + } + } + if (s.params.paginationType === 'fraction') { + if (s.params.paginationFractionRender) { + paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass); + } + else { + paginationHTML = + '' + + ' / ' + + ''; + } + s.paginationContainer.html(paginationHTML); + } + if (s.params.paginationType === 'progress') { + if (s.params.paginationProgressRender) { + paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass); + } + else { + paginationHTML = ''; + } + s.paginationContainer.html(paginationHTML); + } + if (s.params.paginationType !== 'custom') { + s.emit('onPaginationRendered', s, s.paginationContainer[0]); + } + } + }; + /*========================= + Common update method + ===========================*/ + s.update = function (updateTranslate) { + s.updateContainerSize(); + s.updateSlidesSize(); + s.updateProgress(); + s.updatePagination(); + s.updateClasses(); + if (s.params.scrollbar && s.scrollbar) { + s.scrollbar.set(); + } + function forceSetTranslate() { + newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate()); + s.setWrapperTranslate(newTranslate); + s.updateActiveIndex(); + s.updateClasses(); + } + if (updateTranslate) { + var translated, newTranslate; + if (s.controller && s.controller.spline) { + s.controller.spline = undefined; + } + if (s.params.freeMode) { + forceSetTranslate(); + if (s.params.autoHeight) { + s.updateAutoHeight(); + } + } + else { + if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) { + translated = s.slideTo(s.slides.length - 1, 0, false, true); + } + else { + translated = s.slideTo(s.activeIndex, 0, false, true); + } + if (!translated) { + forceSetTranslate(); + } + } + } + else if (s.params.autoHeight) { + s.updateAutoHeight(); + } + }; + + /*========================= + Resize Handler + ===========================*/ + s.onResize = function (forceUpdatePagination) { + //Breakpoints + if (s.params.breakpoints) { + s.setBreakpoint(); + } + + // Disable locks on resize + var allowSwipeToPrev = s.params.allowSwipeToPrev; + var allowSwipeToNext = s.params.allowSwipeToNext; + s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true; + + s.updateContainerSize(); + s.updateSlidesSize(); + if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination(); + if (s.params.scrollbar && s.scrollbar) { + s.scrollbar.set(); + } + if (s.controller && s.controller.spline) { + s.controller.spline = undefined; + } + var slideChangedBySlideTo = false; + if (s.params.freeMode) { + var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate()); + s.setWrapperTranslate(newTranslate); + s.updateActiveIndex(); + s.updateClasses(); + + if (s.params.autoHeight) { + s.updateAutoHeight(); + } + } + else { + s.updateClasses(); + if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) { + slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true); + } + else { + slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true); + } + } + if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) { + s.lazy.load(); + } + // Return locks after resize + s.params.allowSwipeToPrev = allowSwipeToPrev; + s.params.allowSwipeToNext = allowSwipeToNext; + }; + + /*========================= + Events + ===========================*/ + + //Define Touch Events + var desktopEvents = ['mousedown', 'mousemove', 'mouseup']; + if (window.navigator.pointerEnabled) desktopEvents = ['pointerdown', 'pointermove', 'pointerup']; + else if (window.navigator.msPointerEnabled) desktopEvents = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp']; + s.touchEvents = { + start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : desktopEvents[0], + move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : desktopEvents[1], + end : s.support.touch || !s.params.simulateTouch ? 'touchend' : desktopEvents[2] + }; + + + // WP8 Touch Events Fix + if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) { + (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction); + } + + // Attach/detach events + s.initEvents = function (detach) { + var actionDom = detach ? 'off' : 'on'; + var action = detach ? 'removeEventListener' : 'addEventListener'; + var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0]; + var target = s.support.touch ? touchEventsTarget : document; + + var moveCapture = s.params.nested ? true : false; + + //Touch Events + if (s.browser.ie) { + touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false); + target[action](s.touchEvents.move, s.onTouchMove, moveCapture); + target[action](s.touchEvents.end, s.onTouchEnd, false); + } + else { + if (s.support.touch) { + touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false); + touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture); + touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, false); + } + if (params.simulateTouch && !s.device.ios && !s.device.android) { + touchEventsTarget[action]('mousedown', s.onTouchStart, false); + document[action]('mousemove', s.onTouchMove, moveCapture); + document[action]('mouseup', s.onTouchEnd, false); + } + } + window[action]('resize', s.onResize); + + // Next, Prev, Index + if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { + s.nextButton[actionDom]('click', s.onClickNext); + if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey); + } + if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { + s.prevButton[actionDom]('click', s.onClickPrev); + if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey); + } + if (s.params.pagination && s.params.paginationClickable) { + s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex); + if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey); + } + + // Prevent Links Clicks + if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true); + }; + s.attachEvents = function () { + s.initEvents(); + }; + s.detachEvents = function () { + s.initEvents(true); + }; + + /*========================= + Handle Clicks + ===========================*/ + // Prevent Clicks + s.allowClick = true; + s.preventClicks = function (e) { + if (!s.allowClick) { + if (s.params.preventClicks) e.preventDefault(); + if (s.params.preventClicksPropagation && s.animating) { + e.stopPropagation(); + e.stopImmediatePropagation(); + } + } + }; + // Clicks + s.onClickNext = function (e) { + e.preventDefault(); + if (s.isEnd && !s.params.loop) return; + s.slideNext(); + }; + s.onClickPrev = function (e) { + e.preventDefault(); + if (s.isBeginning && !s.params.loop) return; + s.slidePrev(); + }; + s.onClickIndex = function (e) { + e.preventDefault(); + var index = $(this).index() * s.params.slidesPerGroup; + if (s.params.loop) index = index + s.loopedSlides; + s.slideTo(index); + }; + + /*========================= + Handle Touches + ===========================*/ + function findElementInEvent(e, selector) { + var el = $(e.target); + if (!el.is(selector)) { + if (typeof selector === 'string') { + el = el.parents(selector); + } + else if (selector.nodeType) { + var found; + el.parents().each(function (index, _el) { + if (_el === selector) found = selector; + }); + if (!found) return undefined; + else return selector; + } + } + if (el.length === 0) { + return undefined; + } + return el[0]; + } + s.updateClickedSlide = function (e) { + var slide = findElementInEvent(e, '.' + s.params.slideClass); + var slideFound = false; + if (slide) { + for (var i = 0; i < s.slides.length; i++) { + if (s.slides[i] === slide) slideFound = true; + } + } + + if (slide && slideFound) { + s.clickedSlide = slide; + s.clickedIndex = $(slide).index(); + } + else { + s.clickedSlide = undefined; + s.clickedIndex = undefined; + return; + } + if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) { + var slideToIndex = s.clickedIndex, + realIndex, + duplicatedSlides; + if (s.params.loop) { + if (s.animating) return; + realIndex = $(s.clickedSlide).attr('data-swiper-slide-index'); + if (s.params.centeredSlides) { + if ((slideToIndex < s.loopedSlides - s.params.slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + s.params.slidesPerView/2)) { + s.fixLoop(); + slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.swiper-slide-duplicate)').eq(0).index(); + setTimeout(function () { + s.slideTo(slideToIndex); + }, 0); + } + else { + s.slideTo(slideToIndex); + } + } + else { + if (slideToIndex > s.slides.length - s.params.slidesPerView) { + s.fixLoop(); + slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.swiper-slide-duplicate)').eq(0).index(); + setTimeout(function () { + s.slideTo(slideToIndex); + }, 0); + } + else { + s.slideTo(slideToIndex); + } + } + } + else { + s.slideTo(slideToIndex); + } + } + }; + + var isTouched, + isMoved, + allowTouchCallbacks, + touchStartTime, + isScrolling, + currentTranslate, + startTranslate, + allowThresholdMove, + // Form elements to match + formElements = 'input, select, textarea, button', + // Last click time + lastClickTime = Date.now(), clickTimeout, + //Velocities + velocities = [], + allowMomentumBounce; + + // Animating Flag + s.animating = false; + + // Touches information + s.touches = { + startX: 0, + startY: 0, + currentX: 0, + currentY: 0, + diff: 0 + }; + + // Touch handlers + var isTouchEvent, startMoving; + s.onTouchStart = function (e) { + if (e.originalEvent) e = e.originalEvent; + isTouchEvent = e.type === 'touchstart'; + if (!isTouchEvent && 'which' in e && e.which === 3) return; + if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) { + s.allowClick = true; + return; + } + if (s.params.swipeHandler) { + if (!findElementInEvent(e, s.params.swipeHandler)) return; + } + + var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; + var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; + + // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore + if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) { + return; + } + + isTouched = true; + isMoved = false; + allowTouchCallbacks = true; + isScrolling = undefined; + startMoving = undefined; + s.touches.startX = startX; + s.touches.startY = startY; + touchStartTime = Date.now(); + s.allowClick = true; + s.updateContainerSize(); + s.swipeDirection = undefined; + if (s.params.threshold > 0) allowThresholdMove = false; + if (e.type !== 'touchstart') { + var preventDefault = true; + if ($(e.target).is(formElements)) preventDefault = false; + if (document.activeElement && $(document.activeElement).is(formElements)) { + document.activeElement.blur(); + } + if (preventDefault) { + e.preventDefault(); + } + } + s.emit('onTouchStart', s, e); + }; + + s.onTouchMove = function (e) { + if (e.originalEvent) e = e.originalEvent; + if (isTouchEvent && e.type === 'mousemove') return; + if (e.preventedByNestedSwiper) { + s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; + s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; + return; + } + if (s.params.onlyExternal) { + // isMoved = true; + s.allowClick = false; + if (isTouched) { + s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; + s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; + touchStartTime = Date.now(); + } + return; + } + if (isTouchEvent && document.activeElement) { + if (e.target === document.activeElement && $(e.target).is(formElements)) { + isMoved = true; + s.allowClick = false; + return; + } + } + if (allowTouchCallbacks) { + s.emit('onTouchMove', s, e); + } + if (e.targetTouches && e.targetTouches.length > 1) return; + + s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; + s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; + + if (typeof isScrolling === 'undefined') { + var touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI; + isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle); + } + if (isScrolling) { + s.emit('onTouchMoveOpposite', s, e); + } + if (typeof startMoving === 'undefined' && s.browser.ieTouch) { + if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) { + startMoving = true; + } + } + if (!isTouched) return; + if (isScrolling) { + isTouched = false; + return; + } + if (!startMoving && s.browser.ieTouch) { + return; + } + s.allowClick = false; + s.emit('onSliderMove', s, e); + e.preventDefault(); + if (s.params.touchMoveStopPropagation && !s.params.nested) { + e.stopPropagation(); + } + + if (!isMoved) { + if (params.loop) { + s.fixLoop(); + } + startTranslate = s.getWrapperTranslate(); + s.setWrapperTransition(0); + if (s.animating) { + s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd'); + } + if (s.params.autoplay && s.autoplaying) { + if (s.params.autoplayDisableOnInteraction) { + s.stopAutoplay(); + } + else { + s.pauseAutoplay(); + } + } + allowMomentumBounce = false; + //Grab Cursor + if (s.params.grabCursor) { + s.container[0].style.cursor = 'move'; + s.container[0].style.cursor = '-webkit-grabbing'; + s.container[0].style.cursor = '-moz-grabbin'; + s.container[0].style.cursor = 'grabbing'; + } + } + isMoved = true; + + var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY; + + diff = diff * s.params.touchRatio; + if (s.rtl) diff = -diff; + + s.swipeDirection = diff > 0 ? 'prev' : 'next'; + currentTranslate = diff + startTranslate; + + var disableParentSwiper = true; + if ((diff > 0 && currentTranslate > s.minTranslate())) { + disableParentSwiper = false; + if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio); + } + else if (diff < 0 && currentTranslate < s.maxTranslate()) { + disableParentSwiper = false; + if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio); + } + + if (disableParentSwiper) { + e.preventedByNestedSwiper = true; + } + + // Directions locks + if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) { + currentTranslate = startTranslate; + } + if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) { + currentTranslate = startTranslate; + } + + if (!s.params.followFinger) return; + + // Threshold + if (s.params.threshold > 0) { + if (Math.abs(diff) > s.params.threshold || allowThresholdMove) { + if (!allowThresholdMove) { + allowThresholdMove = true; + s.touches.startX = s.touches.currentX; + s.touches.startY = s.touches.currentY; + currentTranslate = startTranslate; + s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY; + return; + } + } + else { + currentTranslate = startTranslate; + return; + } + } + // Update active index in free mode + if (s.params.freeMode || s.params.watchSlidesProgress) { + s.updateActiveIndex(); + } + if (s.params.freeMode) { + //Velocity + if (velocities.length === 0) { + velocities.push({ + position: s.touches[s.isHorizontal() ? 'startX' : 'startY'], + time: touchStartTime + }); + } + velocities.push({ + position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'], + time: (new window.Date()).getTime() + }); + } + // Update progress + s.updateProgress(currentTranslate); + // Update translate + s.setWrapperTranslate(currentTranslate); + }; + s.onTouchEnd = function (e) { + if (e.originalEvent) e = e.originalEvent; + if (allowTouchCallbacks) { + s.emit('onTouchEnd', s, e); + } + allowTouchCallbacks = false; + if (!isTouched) return; + //Return Grab Cursor + if (s.params.grabCursor && isMoved && isTouched) { + s.container[0].style.cursor = 'move'; + s.container[0].style.cursor = '-webkit-grab'; + s.container[0].style.cursor = '-moz-grab'; + s.container[0].style.cursor = 'grab'; + } + + // Time diff + var touchEndTime = Date.now(); + var timeDiff = touchEndTime - touchStartTime; + + // Tap, doubleTap, Click + if (s.allowClick) { + s.updateClickedSlide(e); + s.emit('onTap', s, e); + if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) { + if (clickTimeout) clearTimeout(clickTimeout); + clickTimeout = setTimeout(function () { + if (!s) return; + if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) { + s.paginationContainer.toggleClass(s.params.paginationHiddenClass); + } + s.emit('onClick', s, e); + }, 300); + + } + if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) { + if (clickTimeout) clearTimeout(clickTimeout); + s.emit('onDoubleTap', s, e); + } + } + + lastClickTime = Date.now(); + setTimeout(function () { + if (s) s.allowClick = true; + }, 0); + + if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) { + isTouched = isMoved = false; + return; + } + isTouched = isMoved = false; + + var currentPos; + if (s.params.followFinger) { + currentPos = s.rtl ? s.translate : -s.translate; + } + else { + currentPos = -currentTranslate; + } + if (s.params.freeMode) { + if (currentPos < -s.minTranslate()) { + s.slideTo(s.activeIndex); + return; + } + else if (currentPos > -s.maxTranslate()) { + if (s.slides.length < s.snapGrid.length) { + s.slideTo(s.snapGrid.length - 1); + } + else { + s.slideTo(s.slides.length - 1); + } + return; + } + + if (s.params.freeModeMomentum) { + if (velocities.length > 1) { + var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop(); + + var distance = lastMoveEvent.position - velocityEvent.position; + var time = lastMoveEvent.time - velocityEvent.time; + s.velocity = distance / time; + s.velocity = s.velocity / 2; + if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) { + s.velocity = 0; + } + // this implies that the user stopped moving a finger then released. + // There would be no events with distance zero, so the last event is stale. + if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) { + s.velocity = 0; + } + } else { + s.velocity = 0; + } + + velocities.length = 0; + var momentumDuration = 1000 * s.params.freeModeMomentumRatio; + var momentumDistance = s.velocity * momentumDuration; + + var newPosition = s.translate + momentumDistance; + if (s.rtl) newPosition = - newPosition; + var doBounce = false; + var afterBouncePosition; + var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio; + if (newPosition < s.maxTranslate()) { + if (s.params.freeModeMomentumBounce) { + if (newPosition + s.maxTranslate() < -bounceAmount) { + newPosition = s.maxTranslate() - bounceAmount; + } + afterBouncePosition = s.maxTranslate(); + doBounce = true; + allowMomentumBounce = true; + } + else { + newPosition = s.maxTranslate(); + } + } + else if (newPosition > s.minTranslate()) { + if (s.params.freeModeMomentumBounce) { + if (newPosition - s.minTranslate() > bounceAmount) { + newPosition = s.minTranslate() + bounceAmount; + } + afterBouncePosition = s.minTranslate(); + doBounce = true; + allowMomentumBounce = true; + } + else { + newPosition = s.minTranslate(); + } + } + else if (s.params.freeModeSticky) { + var j = 0, + nextSlide; + for (j = 0; j < s.snapGrid.length; j += 1) { + if (s.snapGrid[j] > -newPosition) { + nextSlide = j; + break; + } + + } + if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') { + newPosition = s.snapGrid[nextSlide]; + } else { + newPosition = s.snapGrid[nextSlide - 1]; + } + if (!s.rtl) newPosition = - newPosition; + } + //Fix duration + if (s.velocity !== 0) { + if (s.rtl) { + momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity); + } + else { + momentumDuration = Math.abs((newPosition - s.translate) / s.velocity); + } + } + else if (s.params.freeModeSticky) { + s.slideReset(); + return; + } + + if (s.params.freeModeMomentumBounce && doBounce) { + s.updateProgress(afterBouncePosition); + s.setWrapperTransition(momentumDuration); + s.setWrapperTranslate(newPosition); + s.onTransitionStart(); + s.animating = true; + s.wrapper.transitionEnd(function () { + if (!s || !allowMomentumBounce) return; + s.emit('onMomentumBounce', s); + + s.setWrapperTransition(s.params.speed); + s.setWrapperTranslate(afterBouncePosition); + s.wrapper.transitionEnd(function () { + if (!s) return; + s.onTransitionEnd(); + }); + }); + } else if (s.velocity) { + s.updateProgress(newPosition); + s.setWrapperTransition(momentumDuration); + s.setWrapperTranslate(newPosition); + s.onTransitionStart(); + if (!s.animating) { + s.animating = true; + s.wrapper.transitionEnd(function () { + if (!s) return; + s.onTransitionEnd(); + }); + } + + } else { + s.updateProgress(newPosition); + } + + s.updateActiveIndex(); + } + if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) { + s.updateProgress(); + s.updateActiveIndex(); + } + return; + } + + // Find current slide + var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0]; + for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) { + if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') { + if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) { + stopIndex = i; + groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i]; + } + } + else { + if (currentPos >= s.slidesGrid[i]) { + stopIndex = i; + groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2]; + } + } + } + + // Find current slide size + var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize; + + if (timeDiff > s.params.longSwipesMs) { + // Long touches + if (!s.params.longSwipes) { + s.slideTo(s.activeIndex); + return; + } + if (s.swipeDirection === 'next') { + if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup); + else s.slideTo(stopIndex); + + } + if (s.swipeDirection === 'prev') { + if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup); + else s.slideTo(stopIndex); + } + } + else { + // Short swipes + if (!s.params.shortSwipes) { + s.slideTo(s.activeIndex); + return; + } + if (s.swipeDirection === 'next') { + s.slideTo(stopIndex + s.params.slidesPerGroup); + + } + if (s.swipeDirection === 'prev') { + s.slideTo(stopIndex); + } + } + }; + /*========================= + Transitions + ===========================*/ + s._slideTo = function (slideIndex, speed) { + return s.slideTo(slideIndex, speed, true, true); + }; + s.slideTo = function (slideIndex, speed, runCallbacks, internal) { + if (typeof runCallbacks === 'undefined') runCallbacks = true; + if (typeof slideIndex === 'undefined') slideIndex = 0; + if (slideIndex < 0) slideIndex = 0; + s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup); + if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1; + + var translate = - s.snapGrid[s.snapIndex]; + // Stop autoplay + if (s.params.autoplay && s.autoplaying) { + if (internal || !s.params.autoplayDisableOnInteraction) { + s.pauseAutoplay(speed); + } + else { + s.stopAutoplay(); + } + } + // Update progress + s.updateProgress(translate); + + // Normalize slideIndex + for (var i = 0; i < s.slidesGrid.length; i++) { + if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) { + slideIndex = i; + } + } + + // Directions locks + if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) { + return false; + } + if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) { + if ((s.activeIndex || 0) !== slideIndex ) return false; + } + + // Update Index + if (typeof speed === 'undefined') speed = s.params.speed; + s.previousIndex = s.activeIndex || 0; + s.activeIndex = slideIndex; + + if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) { + // Update Height + if (s.params.autoHeight) { + s.updateAutoHeight(); + } + s.updateClasses(); + if (s.params.effect !== 'slide') { + s.setWrapperTranslate(translate); + } + return false; + } + s.updateClasses(); + s.onTransitionStart(runCallbacks); + + if (speed === 0) { + s.setWrapperTranslate(translate); + s.setWrapperTransition(0); + s.onTransitionEnd(runCallbacks); + } + else { + s.setWrapperTranslate(translate); + s.setWrapperTransition(speed); + if (!s.animating) { + s.animating = true; + s.wrapper.transitionEnd(function () { + if (!s) return; + s.onTransitionEnd(runCallbacks); + }); + } + + } + + return true; + }; + + s.onTransitionStart = function (runCallbacks) { + if (typeof runCallbacks === 'undefined') runCallbacks = true; + if (s.params.autoHeight) { + s.updateAutoHeight(); + } + if (s.lazy) s.lazy.onTransitionStart(); + if (runCallbacks) { + s.emit('onTransitionStart', s); + if (s.activeIndex !== s.previousIndex) { + s.emit('onSlideChangeStart', s); + if (s.activeIndex > s.previousIndex) { + s.emit('onSlideNextStart', s); + } + else { + s.emit('onSlidePrevStart', s); + } + } + + } + }; + s.onTransitionEnd = function (runCallbacks) { + s.animating = false; + s.setWrapperTransition(0); + if (typeof runCallbacks === 'undefined') runCallbacks = true; + if (s.lazy) s.lazy.onTransitionEnd(); + if (runCallbacks) { + s.emit('onTransitionEnd', s); + if (s.activeIndex !== s.previousIndex) { + s.emit('onSlideChangeEnd', s); + if (s.activeIndex > s.previousIndex) { + s.emit('onSlideNextEnd', s); + } + else { + s.emit('onSlidePrevEnd', s); + } + } + } + if (s.params.hashnav && s.hashnav) { + s.hashnav.setHash(); + } + + }; + s.slideNext = function (runCallbacks, speed, internal) { + if (s.params.loop) { + if (s.animating) return false; + s.fixLoop(); + var clientLeft = s.container[0].clientLeft; + return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal); + } + else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal); + }; + s._slideNext = function (speed) { + return s.slideNext(true, speed, true); + }; + s.slidePrev = function (runCallbacks, speed, internal) { + if (s.params.loop) { + if (s.animating) return false; + s.fixLoop(); + var clientLeft = s.container[0].clientLeft; + return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal); + } + else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal); + }; + s._slidePrev = function (speed) { + return s.slidePrev(true, speed, true); + }; + s.slideReset = function (runCallbacks, speed, internal) { + return s.slideTo(s.activeIndex, speed, runCallbacks); + }; + + /*========================= + Translate/transition helpers + ===========================*/ + s.setWrapperTransition = function (duration, byController) { + s.wrapper.transition(duration); + if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { + s.effects[s.params.effect].setTransition(duration); + } + if (s.params.parallax && s.parallax) { + s.parallax.setTransition(duration); + } + if (s.params.scrollbar && s.scrollbar) { + s.scrollbar.setTransition(duration); + } + if (s.params.control && s.controller) { + s.controller.setTransition(duration, byController); + } + s.emit('onSetTransition', s, duration); + }; + s.setWrapperTranslate = function (translate, updateActiveIndex, byController) { + var x = 0, y = 0, z = 0; + if (s.isHorizontal()) { + x = s.rtl ? -translate : translate; + } + else { + y = translate; + } + + if (s.params.roundLengths) { + x = round(x); + y = round(y); + } + + if (!s.params.virtualTranslate) { + if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)'); + else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)'); + } + + s.translate = s.isHorizontal() ? x : y; + + // Check if we need to update progress + var progress; + var translatesDiff = s.maxTranslate() - s.minTranslate(); + if (translatesDiff === 0) { + progress = 0; + } + else { + progress = (translate - s.minTranslate()) / (translatesDiff); + } + if (progress !== s.progress) { + s.updateProgress(translate); + } + + if (updateActiveIndex) s.updateActiveIndex(); + if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { + s.effects[s.params.effect].setTranslate(s.translate); + } + if (s.params.parallax && s.parallax) { + s.parallax.setTranslate(s.translate); + } + if (s.params.scrollbar && s.scrollbar) { + s.scrollbar.setTranslate(s.translate); + } + if (s.params.control && s.controller) { + s.controller.setTranslate(s.translate, byController); + } + s.emit('onSetTranslate', s, s.translate); + }; + + s.getTranslate = function (el, axis) { + var matrix, curTransform, curStyle, transformMatrix; + + // automatic axis detection + if (typeof axis === 'undefined') { + axis = 'x'; + } + + if (s.params.virtualTranslate) { + return s.rtl ? -s.translate : s.translate; + } + + curStyle = window.getComputedStyle(el, null); + if (window.WebKitCSSMatrix) { + curTransform = curStyle.transform || curStyle.webkitTransform; + if (curTransform.split(',').length > 6) { + curTransform = curTransform.split(', ').map(function(a){ + return a.replace(',','.'); + }).join(', '); + } + // Some old versions of Webkit choke when 'none' is passed; pass + // empty string instead in this case + transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); + } + else { + transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); + matrix = transformMatrix.toString().split(','); + } + + if (axis === 'x') { + //Latest Chrome and webkits Fix + if (window.WebKitCSSMatrix) + curTransform = transformMatrix.m41; + //Crazy IE10 Matrix + else if (matrix.length === 16) + curTransform = parseFloat(matrix[12]); + //Normal Browsers + else + curTransform = parseFloat(matrix[4]); + } + if (axis === 'y') { + //Latest Chrome and webkits Fix + if (window.WebKitCSSMatrix) + curTransform = transformMatrix.m42; + //Crazy IE10 Matrix + else if (matrix.length === 16) + curTransform = parseFloat(matrix[13]); + //Normal Browsers + else + curTransform = parseFloat(matrix[5]); + } + if (s.rtl && curTransform) curTransform = -curTransform; + return curTransform || 0; + }; + s.getWrapperTranslate = function (axis) { + if (typeof axis === 'undefined') { + axis = s.isHorizontal() ? 'x' : 'y'; + } + return s.getTranslate(s.wrapper[0], axis); + }; + + /*========================= + Observer + ===========================*/ + s.observers = []; + function initObserver(target, options) { + options = options || {}; + // create an observer instance + var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; + var observer = new ObserverFunc(function (mutations) { + mutations.forEach(function (mutation) { + s.onResize(true); + s.emit('onObserverUpdate', s, mutation); + }); + }); + + observer.observe(target, { + attributes: typeof options.attributes === 'undefined' ? true : options.attributes, + childList: typeof options.childList === 'undefined' ? true : options.childList, + characterData: typeof options.characterData === 'undefined' ? true : options.characterData + }); + + s.observers.push(observer); + } + s.initObservers = function () { + if (s.params.observeParents) { + var containerParents = s.container.parents(); + for (var i = 0; i < containerParents.length; i++) { + initObserver(containerParents[i]); + } + } + + // Observe container + initObserver(s.container[0], {childList: false}); + + // Observe wrapper + initObserver(s.wrapper[0], {attributes: false}); + }; + s.disconnectObservers = function () { + for (var i = 0; i < s.observers.length; i++) { + s.observers[i].disconnect(); + } + s.observers = []; + }; + /*========================= + Loop + ===========================*/ + // Create looped slides + s.createLoop = function () { + // Remove duplicated slides + s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove(); + + var slides = s.wrapper.children('.' + s.params.slideClass); + + if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length; + + s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10); + s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides; + if (s.loopedSlides > slides.length) { + s.loopedSlides = slides.length; + } + + var prependSlides = [], appendSlides = [], i; + slides.each(function (index, el) { + var slide = $(this); + if (index < s.loopedSlides) appendSlides.push(el); + if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el); + slide.attr('data-swiper-slide-index', index); + }); + for (i = 0; i < appendSlides.length; i++) { + s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass)); + } + for (i = prependSlides.length - 1; i >= 0; i--) { + s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass)); + } + }; + s.destroyLoop = function () { + s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove(); + s.slides.removeAttr('data-swiper-slide-index'); + }; + s.reLoop = function (updatePosition) { + var oldIndex = s.activeIndex - s.loopedSlides; + s.destroyLoop(); + s.createLoop(); + s.updateSlidesSize(); + if (updatePosition) { + s.slideTo(oldIndex + s.loopedSlides, 0, false); + } + + }; + s.fixLoop = function () { + var newIndex; + //Fix For Negative Oversliding + if (s.activeIndex < s.loopedSlides) { + newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex; + newIndex = newIndex + s.loopedSlides; + s.slideTo(newIndex, 0, false, true); + } + //Fix For Positive Oversliding + else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) { + newIndex = -s.slides.length + s.activeIndex + s.loopedSlides; + newIndex = newIndex + s.loopedSlides; + s.slideTo(newIndex, 0, false, true); + } + }; + /*========================= + Append/Prepend/Remove Slides + ===========================*/ + s.appendSlide = function (slides) { + if (s.params.loop) { + s.destroyLoop(); + } + if (typeof slides === 'object' && slides.length) { + for (var i = 0; i < slides.length; i++) { + if (slides[i]) s.wrapper.append(slides[i]); + } + } + else { + s.wrapper.append(slides); + } + if (s.params.loop) { + s.createLoop(); + } + if (!(s.params.observer && s.support.observer)) { + s.update(true); + } + }; + s.prependSlide = function (slides) { + if (s.params.loop) { + s.destroyLoop(); + } + var newActiveIndex = s.activeIndex + 1; + if (typeof slides === 'object' && slides.length) { + for (var i = 0; i < slides.length; i++) { + if (slides[i]) s.wrapper.prepend(slides[i]); + } + newActiveIndex = s.activeIndex + slides.length; + } + else { + s.wrapper.prepend(slides); + } + if (s.params.loop) { + s.createLoop(); + } + if (!(s.params.observer && s.support.observer)) { + s.update(true); + } + s.slideTo(newActiveIndex, 0, false); + }; + s.removeSlide = function (slidesIndexes) { + if (s.params.loop) { + s.destroyLoop(); + s.slides = s.wrapper.children('.' + s.params.slideClass); + } + var newActiveIndex = s.activeIndex, + indexToRemove; + if (typeof slidesIndexes === 'object' && slidesIndexes.length) { + for (var i = 0; i < slidesIndexes.length; i++) { + indexToRemove = slidesIndexes[i]; + if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove(); + if (indexToRemove < newActiveIndex) newActiveIndex--; + } + newActiveIndex = Math.max(newActiveIndex, 0); + } + else { + indexToRemove = slidesIndexes; + if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove(); + if (indexToRemove < newActiveIndex) newActiveIndex--; + newActiveIndex = Math.max(newActiveIndex, 0); + } + + if (s.params.loop) { + s.createLoop(); + } + + if (!(s.params.observer && s.support.observer)) { + s.update(true); + } + if (s.params.loop) { + s.slideTo(newActiveIndex + s.loopedSlides, 0, false); + } + else { + s.slideTo(newActiveIndex, 0, false); + } + + }; + s.removeAllSlides = function () { + var slidesIndexes = []; + for (var i = 0; i < s.slides.length; i++) { + slidesIndexes.push(i); + } + s.removeSlide(slidesIndexes); + }; + + + /*========================= + Effects + ===========================*/ + s.effects = { + fade: { + setTranslate: function () { + for (var i = 0; i < s.slides.length; i++) { + var slide = s.slides.eq(i); + var offset = slide[0].swiperSlideOffset; + var tx = -offset; + if (!s.params.virtualTranslate) tx = tx - s.translate; + var ty = 0; + if (!s.isHorizontal()) { + ty = tx; + tx = 0; + } + var slideOpacity = s.params.fade.crossFade ? + Math.max(1 - Math.abs(slide[0].progress), 0) : + 1 + Math.min(Math.max(slide[0].progress, -1), 0); + slide + .css({ + opacity: slideOpacity + }) + .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)'); + + } + + }, + setTransition: function (duration) { + s.slides.transition(duration); + if (s.params.virtualTranslate && duration !== 0) { + var eventTriggered = false; + s.slides.transitionEnd(function () { + if (eventTriggered) return; + if (!s) return; + eventTriggered = true; + s.animating = false; + var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd']; + for (var i = 0; i < triggerEvents.length; i++) { + s.wrapper.trigger(triggerEvents[i]); + } + }); + } + } + }, + flip: { + setTranslate: function () { + for (var i = 0; i < s.slides.length; i++) { + var slide = s.slides.eq(i); + var progress = slide[0].progress; + if (s.params.flip.limitRotation) { + progress = Math.max(Math.min(slide[0].progress, 1), -1); + } + var offset = slide[0].swiperSlideOffset; + var rotate = -180 * progress, + rotateY = rotate, + rotateX = 0, + tx = -offset, + ty = 0; + if (!s.isHorizontal()) { + ty = tx; + tx = 0; + rotateX = -rotateY; + rotateY = 0; + } + else if (s.rtl) { + rotateY = -rotateY; + } + + slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length; + + if (s.params.flip.slideShadows) { + //Set shadows + var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); + var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); + if (shadowBefore.length === 0) { + shadowBefore = $('
'); + slide.append(shadowBefore); + } + if (shadowAfter.length === 0) { + shadowAfter = $('
'); + slide.append(shadowAfter); + } + if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); + if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); + } + + slide + .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)'); + } + }, + setTransition: function (duration) { + s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); + if (s.params.virtualTranslate && duration !== 0) { + var eventTriggered = false; + s.slides.eq(s.activeIndex).transitionEnd(function () { + if (eventTriggered) return; + if (!s) return; + if (!$(this).hasClass(s.params.slideActiveClass)) return; + eventTriggered = true; + s.animating = false; + var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd']; + for (var i = 0; i < triggerEvents.length; i++) { + s.wrapper.trigger(triggerEvents[i]); + } + }); + } + } + }, + cube: { + setTranslate: function () { + var wrapperRotate = 0, cubeShadow; + if (s.params.cube.shadow) { + if (s.isHorizontal()) { + cubeShadow = s.wrapper.find('.swiper-cube-shadow'); + if (cubeShadow.length === 0) { + cubeShadow = $('
'); + s.wrapper.append(cubeShadow); + } + cubeShadow.css({height: s.width + 'px'}); + } + else { + cubeShadow = s.container.find('.swiper-cube-shadow'); + if (cubeShadow.length === 0) { + cubeShadow = $('
'); + s.container.append(cubeShadow); + } + } + } + for (var i = 0; i < s.slides.length; i++) { + var slide = s.slides.eq(i); + var slideAngle = i * 90; + var round = Math.floor(slideAngle / 360); + if (s.rtl) { + slideAngle = -slideAngle; + round = Math.floor(-slideAngle / 360); + } + var progress = Math.max(Math.min(slide[0].progress, 1), -1); + var tx = 0, ty = 0, tz = 0; + if (i % 4 === 0) { + tx = - round * 4 * s.size; + tz = 0; + } + else if ((i - 1) % 4 === 0) { + tx = 0; + tz = - round * 4 * s.size; + } + else if ((i - 2) % 4 === 0) { + tx = s.size + round * 4 * s.size; + tz = s.size; + } + else if ((i - 3) % 4 === 0) { + tx = - s.size; + tz = 3 * s.size + s.size * 4 * round; + } + if (s.rtl) { + tx = -tx; + } + + if (!s.isHorizontal()) { + ty = tx; + tx = 0; + } + + var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)'; + if (progress <= 1 && progress > -1) { + wrapperRotate = i * 90 + progress * 90; + if (s.rtl) wrapperRotate = -i * 90 - progress * 90; + } + slide.transform(transform); + if (s.params.cube.slideShadows) { + //Set shadows + var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); + var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); + if (shadowBefore.length === 0) { + shadowBefore = $('
'); + slide.append(shadowBefore); + } + if (shadowAfter.length === 0) { + shadowAfter = $('
'); + slide.append(shadowAfter); + } + if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); + if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); + } + } + s.wrapper.css({ + '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px', + '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px', + '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px', + 'transform-origin': '50% 50% -' + (s.size / 2) + 'px' + }); + + if (s.params.cube.shadow) { + if (s.isHorizontal()) { + cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')'); + } + else { + var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90; + var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2); + var scale1 = s.params.cube.shadowScale, + scale2 = s.params.cube.shadowScale / multiplier, + offset = s.params.cube.shadowOffset; + cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)'); + } + } + var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0; + s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)'); + }, + setTransition: function (duration) { + s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); + if (s.params.cube.shadow && !s.isHorizontal()) { + s.container.find('.swiper-cube-shadow').transition(duration); + } + } + }, + coverflow: { + setTranslate: function () { + var transform = s.translate; + var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2; + var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate; + var translate = s.params.coverflow.depth; + //Each slide offset from center + for (var i = 0, length = s.slides.length; i < length; i++) { + var slide = s.slides.eq(i); + var slideSize = s.slidesSizesGrid[i]; + var slideOffset = slide[0].swiperSlideOffset; + var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier; + + var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0; + var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier; + // var rotateZ = 0 + var translateZ = -translate * Math.abs(offsetMultiplier); + + var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier); + var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0; + + //Fix for ultra small values + if (Math.abs(translateX) < 0.001) translateX = 0; + if (Math.abs(translateY) < 0.001) translateY = 0; + if (Math.abs(translateZ) < 0.001) translateZ = 0; + if (Math.abs(rotateY) < 0.001) rotateY = 0; + if (Math.abs(rotateX) < 0.001) rotateX = 0; + + var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)'; + + slide.transform(slideTransform); + slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; + if (s.params.coverflow.slideShadows) { + //Set shadows + var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); + var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); + if (shadowBefore.length === 0) { + shadowBefore = $('
'); + slide.append(shadowBefore); + } + if (shadowAfter.length === 0) { + shadowAfter = $('
'); + slide.append(shadowAfter); + } + if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; + if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0; + } + } + + //Set correct perspective for IE10 + if (s.browser.ie) { + var ws = s.wrapper[0].style; + ws.perspectiveOrigin = center + 'px 50%'; + } + }, + setTransition: function (duration) { + s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); + } + } + }; + + /*========================= + Images Lazy Loading + ===========================*/ + s.lazy = { + initialImageLoaded: false, + loadImageInSlide: function (index, loadInDuplicate) { + if (typeof index === 'undefined') return; + if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true; + if (s.slides.length === 0) return; + + var slide = s.slides.eq(index); + var img = slide.find('.swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)'); + if (slide.hasClass('swiper-lazy') && !slide.hasClass('swiper-lazy-loaded') && !slide.hasClass('swiper-lazy-loading')) { + img = img.add(slide[0]); + } + if (img.length === 0) return; + + img.each(function () { + var _img = $(this); + _img.addClass('swiper-lazy-loading'); + var background = _img.attr('data-background'); + var src = _img.attr('data-src'), + srcset = _img.attr('data-srcset'); + s.loadImage(_img[0], (src || background), srcset, false, function () { + if (background) { + _img.css('background-image', 'url("' + background + '")'); + _img.removeAttr('data-background'); + } + else { + if (srcset) { + _img.attr('srcset', srcset); + _img.removeAttr('data-srcset'); + } + if (src) { + _img.attr('src', src); + _img.removeAttr('data-src'); + } + + } + + _img.addClass('swiper-lazy-loaded').removeClass('swiper-lazy-loading'); + slide.find('.swiper-lazy-preloader, .preloader').remove(); + if (s.params.loop && loadInDuplicate) { + var slideOriginalIndex = slide.attr('data-swiper-slide-index'); + if (slide.hasClass(s.params.slideDuplicateClass)) { + var originalSlide = s.wrapper.children('[data-swiper-slide-index="' + slideOriginalIndex + '"]:not(.' + s.params.slideDuplicateClass + ')'); + s.lazy.loadImageInSlide(originalSlide.index(), false); + } + else { + var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + slideOriginalIndex + '"]'); + s.lazy.loadImageInSlide(duplicatedSlide.index(), false); + } + } + s.emit('onLazyImageReady', s, slide[0], _img[0]); + }); + + s.emit('onLazyImageLoad', s, slide[0], _img[0]); + }); + + }, + load: function () { + var i; + if (s.params.watchSlidesVisibility) { + s.wrapper.children('.' + s.params.slideVisibleClass).each(function () { + s.lazy.loadImageInSlide($(this).index()); + }); + } + else { + if (s.params.slidesPerView > 1) { + for (i = s.activeIndex; i < s.activeIndex + s.params.slidesPerView ; i++) { + if (s.slides[i]) s.lazy.loadImageInSlide(i); + } + } + else { + s.lazy.loadImageInSlide(s.activeIndex); + } + } + if (s.params.lazyLoadingInPrevNext) { + if (s.params.slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) { + var amount = s.params.lazyLoadingInPrevNextAmount; + var spv = s.params.slidesPerView; + var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length); + var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0); + // Next Slides + for (i = s.activeIndex + s.params.slidesPerView; i < maxIndex; i++) { + if (s.slides[i]) s.lazy.loadImageInSlide(i); + } + // Prev Slides + for (i = minIndex; i < s.activeIndex ; i++) { + if (s.slides[i]) s.lazy.loadImageInSlide(i); + } + } + else { + var nextSlide = s.wrapper.children('.' + s.params.slideNextClass); + if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index()); + + var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass); + if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index()); + } + } + }, + onTransitionStart: function () { + if (s.params.lazyLoading) { + if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) { + s.lazy.load(); + } + } + }, + onTransitionEnd: function () { + if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) { + s.lazy.load(); + } + } + }; + + + /*========================= + Scrollbar + ===========================*/ + s.scrollbar = { + isTouched: false, + setDragPosition: function (e) { + var sb = s.scrollbar; + var x = 0, y = 0; + var translate; + var pointerPosition = s.isHorizontal() ? + ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) : + ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ; + var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2; + var positionMin = -s.minTranslate() * sb.moveDivider; + var positionMax = -s.maxTranslate() * sb.moveDivider; + if (position < positionMin) { + position = positionMin; + } + else if (position > positionMax) { + position = positionMax; + } + position = -position / sb.moveDivider; + s.updateProgress(position); + s.setWrapperTranslate(position, true); + }, + dragStart: function (e) { + var sb = s.scrollbar; + sb.isTouched = true; + e.preventDefault(); + e.stopPropagation(); + + sb.setDragPosition(e); + clearTimeout(sb.dragTimeout); + + sb.track.transition(0); + if (s.params.scrollbarHide) { + sb.track.css('opacity', 1); + } + s.wrapper.transition(100); + sb.drag.transition(100); + s.emit('onScrollbarDragStart', s); + }, + dragMove: function (e) { + var sb = s.scrollbar; + if (!sb.isTouched) return; + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + sb.setDragPosition(e); + s.wrapper.transition(0); + sb.track.transition(0); + sb.drag.transition(0); + s.emit('onScrollbarDragMove', s); + }, + dragEnd: function (e) { + var sb = s.scrollbar; + if (!sb.isTouched) return; + sb.isTouched = false; + if (s.params.scrollbarHide) { + clearTimeout(sb.dragTimeout); + sb.dragTimeout = setTimeout(function () { + sb.track.css('opacity', 0); + sb.track.transition(400); + }, 1000); + + } + s.emit('onScrollbarDragEnd', s); + if (s.params.scrollbarSnapOnRelease) { + s.slideReset(); + } + }, + enableDraggable: function () { + var sb = s.scrollbar; + var target = s.support.touch ? sb.track : document; + $(sb.track).on(s.touchEvents.start, sb.dragStart); + $(target).on(s.touchEvents.move, sb.dragMove); + $(target).on(s.touchEvents.end, sb.dragEnd); + }, + disableDraggable: function () { + var sb = s.scrollbar; + var target = s.support.touch ? sb.track : document; + $(sb.track).off(s.touchEvents.start, sb.dragStart); + $(target).off(s.touchEvents.move, sb.dragMove); + $(target).off(s.touchEvents.end, sb.dragEnd); + }, + set: function () { + if (!s.params.scrollbar) return; + var sb = s.scrollbar; + sb.track = $(s.params.scrollbar); + if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) { + sb.track = s.container.find(s.params.scrollbar); + } + sb.drag = sb.track.find('.swiper-scrollbar-drag'); + if (sb.drag.length === 0) { + sb.drag = $('
'); + sb.track.append(sb.drag); + } + sb.drag[0].style.width = ''; + sb.drag[0].style.height = ''; + sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight; + + sb.divider = s.size / s.virtualSize; + sb.moveDivider = sb.divider * (sb.trackSize / s.size); + sb.dragSize = sb.trackSize * sb.divider; + + if (s.isHorizontal()) { + sb.drag[0].style.width = sb.dragSize + 'px'; + } + else { + sb.drag[0].style.height = sb.dragSize + 'px'; + } + + if (sb.divider >= 1) { + sb.track[0].style.display = 'none'; + } + else { + sb.track[0].style.display = ''; + } + if (s.params.scrollbarHide) { + sb.track[0].style.opacity = 0; + } + }, + setTranslate: function () { + if (!s.params.scrollbar) return; + var diff; + var sb = s.scrollbar; + var translate = s.translate || 0; + var newPos; + + var newSize = sb.dragSize; + newPos = (sb.trackSize - sb.dragSize) * s.progress; + if (s.rtl && s.isHorizontal()) { + newPos = -newPos; + if (newPos > 0) { + newSize = sb.dragSize - newPos; + newPos = 0; + } + else if (-newPos + sb.dragSize > sb.trackSize) { + newSize = sb.trackSize + newPos; + } + } + else { + if (newPos < 0) { + newSize = sb.dragSize + newPos; + newPos = 0; + } + else if (newPos + sb.dragSize > sb.trackSize) { + newSize = sb.trackSize - newPos; + } + } + if (s.isHorizontal()) { + if (s.support.transforms3d) { + sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)'); + } + else { + sb.drag.transform('translateX(' + (newPos) + 'px)'); + } + sb.drag[0].style.width = newSize + 'px'; + } + else { + if (s.support.transforms3d) { + sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)'); + } + else { + sb.drag.transform('translateY(' + (newPos) + 'px)'); + } + sb.drag[0].style.height = newSize + 'px'; + } + if (s.params.scrollbarHide) { + clearTimeout(sb.timeout); + sb.track[0].style.opacity = 1; + sb.timeout = setTimeout(function () { + sb.track[0].style.opacity = 0; + sb.track.transition(400); + }, 1000); + } + }, + setTransition: function (duration) { + if (!s.params.scrollbar) return; + s.scrollbar.drag.transition(duration); + } + }; + + /*========================= + Controller + ===========================*/ + s.controller = { + LinearSpline: function (x, y) { + this.x = x; + this.y = y; + this.lastIndex = x.length - 1; + // Given an x value (x2), return the expected y2 value: + // (x1,y1) is the known point before given value, + // (x3,y3) is the known point after given value. + var i1, i3; + var l = this.x.length; + + this.interpolate = function (x2) { + if (!x2) return 0; + + // Get the indexes of x1 and x3 (the array indexes before and after given x2): + i3 = binarySearch(this.x, x2); + i1 = i3 - 1; + + // We have our indexes i1 & i3, so we can calculate already: + // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1 + return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1]; + }; + + var binarySearch = (function() { + var maxIndex, minIndex, guess; + return function(array, val) { + minIndex = -1; + maxIndex = array.length; + while (maxIndex - minIndex > 1) + if (array[guess = maxIndex + minIndex >> 1] <= val) { + minIndex = guess; + } else { + maxIndex = guess; + } + return maxIndex; + }; + })(); + }, + //xxx: for now i will just save one spline function to to + getInterpolateFunction: function(c){ + if(!s.controller.spline) s.controller.spline = s.params.loop ? + new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) : + new s.controller.LinearSpline(s.snapGrid, c.snapGrid); + }, + setTranslate: function (translate, byController) { + var controlled = s.params.control; + var multiplier, controlledTranslate; + function setControlledTranslate(c) { + // this will create an Interpolate function based on the snapGrids + // x is the Grid of the scrolled scroller and y will be the controlled scroller + // it makes sense to create this only once and recall it for the interpolation + // the function does a lot of value caching for performance + translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate; + if (s.params.controlBy === 'slide') { + s.controller.getInterpolateFunction(c); + // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid + // but it did not work out + controlledTranslate = -s.controller.spline.interpolate(-translate); + } + + if(!controlledTranslate || s.params.controlBy === 'container'){ + multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate()); + controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate(); + } + + if (s.params.controlInverse) { + controlledTranslate = c.maxTranslate() - controlledTranslate; + } + c.updateProgress(controlledTranslate); + c.setWrapperTranslate(controlledTranslate, false, s); + c.updateActiveIndex(); + } + if (s.isArray(controlled)) { + for (var i = 0; i < controlled.length; i++) { + if (controlled[i] !== byController && controlled[i] instanceof Swiper) { + setControlledTranslate(controlled[i]); + } + } + } + else if (controlled instanceof Swiper && byController !== controlled) { + + setControlledTranslate(controlled); + } + }, + setTransition: function (duration, byController) { + var controlled = s.params.control; + var i; + function setControlledTransition(c) { + c.setWrapperTransition(duration, s); + if (duration !== 0) { + c.onTransitionStart(); + c.wrapper.transitionEnd(function(){ + if (!controlled) return; + if (c.params.loop && s.params.controlBy === 'slide') { + c.fixLoop(); + } + c.onTransitionEnd(); + + }); + } + } + if (s.isArray(controlled)) { + for (i = 0; i < controlled.length; i++) { + if (controlled[i] !== byController && controlled[i] instanceof Swiper) { + setControlledTransition(controlled[i]); + } + } + } + else if (controlled instanceof Swiper && byController !== controlled) { + setControlledTransition(controlled); + } + } + }; + + /*========================= + Hash Navigation + ===========================*/ + s.hashnav = { + init: function () { + if (!s.params.hashnav) return; + s.hashnav.initialized = true; + var hash = document.location.hash.replace('#', ''); + if (!hash) return; + var speed = 0; + for (var i = 0, length = s.slides.length; i < length; i++) { + var slide = s.slides.eq(i); + var slideHash = slide.attr('data-hash'); + if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) { + var index = slide.index(); + s.slideTo(index, speed, s.params.runCallbacksOnInit, true); + } + } + }, + setHash: function () { + if (!s.hashnav.initialized || !s.params.hashnav) return; + document.location.hash = s.slides.eq(s.activeIndex).attr('data-hash') || ''; + } + }; + + /*========================= + Keyboard Control + ===========================*/ + function handleKeyboard(e) { + if (e.originalEvent) e = e.originalEvent; //jquery fix + var kc = e.keyCode || e.charCode; + // Directions locks + if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) { + return false; + } + if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) { + return false; + } + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { + return; + } + if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) { + return; + } + if (kc === 37 || kc === 39 || kc === 38 || kc === 40) { + var inView = false; + //Check that swiper should be inside of visible area of window + if (s.container.parents('.swiper-slide').length > 0 && s.container.parents('.swiper-slide-active').length === 0) { + return; + } + var windowScroll = { + left: window.pageXOffset, + top: window.pageYOffset + }; + var windowWidth = window.innerWidth; + var windowHeight = window.innerHeight; + var swiperOffset = s.container.offset(); + if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft; + var swiperCoord = [ + [swiperOffset.left, swiperOffset.top], + [swiperOffset.left + s.width, swiperOffset.top], + [swiperOffset.left, swiperOffset.top + s.height], + [swiperOffset.left + s.width, swiperOffset.top + s.height] + ]; + for (var i = 0; i < swiperCoord.length; i++) { + var point = swiperCoord[i]; + if ( + point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth && + point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight + ) { + inView = true; + } + + } + if (!inView) return; + } + if (s.isHorizontal()) { + if (kc === 37 || kc === 39) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + } + if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext(); + if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev(); + } + else { + if (kc === 38 || kc === 40) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + } + if (kc === 40) s.slideNext(); + if (kc === 38) s.slidePrev(); + } + } + s.disableKeyboardControl = function () { + s.params.keyboardControl = false; + $(document).off('keydown', handleKeyboard); + }; + s.enableKeyboardControl = function () { + s.params.keyboardControl = true; + $(document).on('keydown', handleKeyboard); + }; + + + /*========================= + Mousewheel Control + ===========================*/ + s.mousewheel = { + event: false, + lastScrollTime: (new window.Date()).getTime() + }; + if (s.params.mousewheelControl) { + try { + new window.WheelEvent('wheel'); + s.mousewheel.event = 'wheel'; + } catch (e) { + if (window.WheelEvent || (s.container[0] && 'wheel' in s.container[0])) { + s.mousewheel.event = 'wheel'; + } + } + if (!s.mousewheel.event && window.WheelEvent) { + + } + if (!s.mousewheel.event && document.onmousewheel !== undefined) { + s.mousewheel.event = 'mousewheel'; + } + if (!s.mousewheel.event) { + s.mousewheel.event = 'DOMMouseScroll'; + } + } + function handleMousewheel(e) { + if (e.originalEvent) e = e.originalEvent; //jquery fix + var we = s.mousewheel.event; + var delta = 0; + var rtlFactor = s.rtl ? -1 : 1; + + //WebKits + if (we === 'mousewheel') { + if (s.params.mousewheelForceToAxis) { + if (s.isHorizontal()) { + if (Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY)) delta = e.wheelDeltaX * rtlFactor; + else return; + } + else { + if (Math.abs(e.wheelDeltaY) > Math.abs(e.wheelDeltaX)) delta = e.wheelDeltaY; + else return; + } + } + else { + delta = Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY) ? - e.wheelDeltaX * rtlFactor : - e.wheelDeltaY; + } + } + //Old FireFox + else if (we === 'DOMMouseScroll') delta = -e.detail; + //New FireFox + else if (we === 'wheel') { + if (s.params.mousewheelForceToAxis) { + if (s.isHorizontal()) { + if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) delta = -e.deltaX * rtlFactor; + else return; + } + else { + if (Math.abs(e.deltaY) > Math.abs(e.deltaX)) delta = -e.deltaY; + else return; + } + } + else { + delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? - e.deltaX * rtlFactor : - e.deltaY; + } + } + if (delta === 0) return; + + if (s.params.mousewheelInvert) delta = -delta; + + if (!s.params.freeMode) { + if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) { + if (delta < 0) { + if ((!s.isEnd || s.params.loop) && !s.animating) s.slideNext(); + else if (s.params.mousewheelReleaseOnEdges) return true; + } + else { + if ((!s.isBeginning || s.params.loop) && !s.animating) s.slidePrev(); + else if (s.params.mousewheelReleaseOnEdges) return true; + } + } + s.mousewheel.lastScrollTime = (new window.Date()).getTime(); + + } + else { + //Freemode or scrollContainer: + var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity; + var wasBeginning = s.isBeginning, + wasEnd = s.isEnd; + + if (position >= s.minTranslate()) position = s.minTranslate(); + if (position <= s.maxTranslate()) position = s.maxTranslate(); + + s.setWrapperTransition(0); + s.setWrapperTranslate(position); + s.updateProgress(); + s.updateActiveIndex(); + + if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) { + s.updateClasses(); + } + + if (s.params.freeModeSticky) { + clearTimeout(s.mousewheel.timeout); + s.mousewheel.timeout = setTimeout(function () { + s.slideReset(); + }, 300); + } + else { + if (s.params.lazyLoading && s.lazy) { + s.lazy.load(); + } + } + + // Return page scroll on edge positions + if (position === 0 || position === s.maxTranslate()) return; + } + if (s.params.autoplay) s.stopAutoplay(); + + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + return false; + } + s.disableMousewheelControl = function () { + if (!s.mousewheel.event) return false; + s.container.off(s.mousewheel.event, handleMousewheel); + return true; + }; + + s.enableMousewheelControl = function () { + if (!s.mousewheel.event) return false; + s.container.on(s.mousewheel.event, handleMousewheel); + return true; + }; + + + /*========================= + Parallax + ===========================*/ + function setParallaxTransform(el, progress) { + el = $(el); + var p, pX, pY; + var rtlFactor = s.rtl ? -1 : 1; + + p = el.attr('data-swiper-parallax') || '0'; + pX = el.attr('data-swiper-parallax-x'); + pY = el.attr('data-swiper-parallax-y'); + if (pX || pY) { + pX = pX || '0'; + pY = pY || '0'; + } + else { + if (s.isHorizontal()) { + pX = p; + pY = '0'; + } + else { + pY = p; + pX = '0'; + } + } + + if ((pX).indexOf('%') >= 0) { + pX = parseInt(pX, 10) * progress * rtlFactor + '%'; + } + else { + pX = pX * progress * rtlFactor + 'px' ; + } + if ((pY).indexOf('%') >= 0) { + pY = parseInt(pY, 10) * progress + '%'; + } + else { + pY = pY * progress + 'px' ; + } + + el.transform('translate3d(' + pX + ', ' + pY + ',0px)'); + } + s.parallax = { + setTranslate: function () { + s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){ + setParallaxTransform(this, s.progress); + + }); + s.slides.each(function () { + var slide = $(this); + slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () { + var progress = Math.min(Math.max(slide[0].progress, -1), 1); + setParallaxTransform(this, progress); + }); + }); + }, + setTransition: function (duration) { + if (typeof duration === 'undefined') duration = s.params.speed; + s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){ + var el = $(this); + var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration; + if (duration === 0) parallaxDuration = 0; + el.transition(parallaxDuration); + }); + } + }; + + + /*========================= + Plugins API. Collect all and init all plugins + ===========================*/ + s._plugins = []; + for (var plugin in s.plugins) { + var p = s.plugins[plugin](s, s.params[plugin]); + if (p) s._plugins.push(p); + } + // Method to call all plugins event/method + s.callPlugins = function (eventName) { + for (var i = 0; i < s._plugins.length; i++) { + if (eventName in s._plugins[i]) { + s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); + } + } + }; + + /*========================= + Events/Callbacks/Plugins Emitter + ===========================*/ + function normalizeEventName (eventName) { + if (eventName.indexOf('on') !== 0) { + if (eventName[0] !== eventName[0].toUpperCase()) { + eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1); + } + else { + eventName = 'on' + eventName; + } + } + return eventName; + } + s.emitterEventListeners = { + + }; + s.emit = function (eventName) { + // Trigger callbacks + if (s.params[eventName]) { + s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); + } + var i; + // Trigger events + if (s.emitterEventListeners[eventName]) { + for (i = 0; i < s.emitterEventListeners[eventName].length; i++) { + s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); + } + } + // Trigger plugins + if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); + }; + s.on = function (eventName, handler) { + eventName = normalizeEventName(eventName); + if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = []; + s.emitterEventListeners[eventName].push(handler); + return s; + }; + s.off = function (eventName, handler) { + var i; + eventName = normalizeEventName(eventName); + if (typeof handler === 'undefined') { + // Remove all handlers for such event + s.emitterEventListeners[eventName] = []; + return s; + } + if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return; + for (i = 0; i < s.emitterEventListeners[eventName].length; i++) { + if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1); + } + return s; + }; + s.once = function (eventName, handler) { + eventName = normalizeEventName(eventName); + var _handler = function () { + handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]); + s.off(eventName, _handler); + }; + s.on(eventName, _handler); + return s; + }; + + // Accessibility tools + s.a11y = { + makeFocusable: function ($el) { + $el.attr('tabIndex', '0'); + return $el; + }, + addRole: function ($el, role) { + $el.attr('role', role); + return $el; + }, + + addLabel: function ($el, label) { + $el.attr('aria-label', label); + return $el; + }, + + disable: function ($el) { + $el.attr('aria-disabled', true); + return $el; + }, + + enable: function ($el) { + $el.attr('aria-disabled', false); + return $el; + }, + + onEnterKey: function (event) { + if (event.keyCode !== 13) return; + if ($(event.target).is(s.params.nextButton)) { + s.onClickNext(event); + if (s.isEnd) { + s.a11y.notify(s.params.lastSlideMessage); + } + else { + s.a11y.notify(s.params.nextSlideMessage); + } + } + else if ($(event.target).is(s.params.prevButton)) { + s.onClickPrev(event); + if (s.isBeginning) { + s.a11y.notify(s.params.firstSlideMessage); + } + else { + s.a11y.notify(s.params.prevSlideMessage); + } + } + if ($(event.target).is('.' + s.params.bulletClass)) { + $(event.target)[0].click(); + } + }, + + liveRegion: $(''), + + notify: function (message) { + var notification = s.a11y.liveRegion; + if (notification.length === 0) return; + notification.html(''); + notification.html(message); + }, + init: function () { + // Setup accessibility + if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { + s.a11y.makeFocusable(s.nextButton); + s.a11y.addRole(s.nextButton, 'button'); + s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage); + } + if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { + s.a11y.makeFocusable(s.prevButton); + s.a11y.addRole(s.prevButton, 'button'); + s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage); + } + + $(s.container).append(s.a11y.liveRegion); + }, + initPagination: function () { + if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) { + s.bullets.each(function () { + var bullet = $(this); + s.a11y.makeFocusable(bullet); + s.a11y.addRole(bullet, 'button'); + s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1)); + }); + } + }, + destroy: function () { + if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove(); + } + }; + + + /*========================= + Init/Destroy + ===========================*/ + s.init = function () { + if (s.params.loop) s.createLoop(); + s.updateContainerSize(); + s.updateSlidesSize(); + s.updatePagination(); + if (s.params.scrollbar && s.scrollbar) { + s.scrollbar.set(); + if (s.params.scrollbarDraggable) { + s.scrollbar.enableDraggable(); + } + } + if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { + if (!s.params.loop) s.updateProgress(); + s.effects[s.params.effect].setTranslate(); + } + if (s.params.loop) { + s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit); + } + else { + s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit); + if (s.params.initialSlide === 0) { + if (s.parallax && s.params.parallax) s.parallax.setTranslate(); + if (s.lazy && s.params.lazyLoading) { + s.lazy.load(); + s.lazy.initialImageLoaded = true; + } + } + } + s.attachEvents(); + if (s.params.observer && s.support.observer) { + s.initObservers(); + } + if (s.params.preloadImages && !s.params.lazyLoading) { + s.preloadImages(); + } + if (s.params.autoplay) { + s.startAutoplay(); + } + if (s.params.keyboardControl) { + if (s.enableKeyboardControl) s.enableKeyboardControl(); + } + if (s.params.mousewheelControl) { + if (s.enableMousewheelControl) s.enableMousewheelControl(); + } + if (s.params.hashnav) { + if (s.hashnav) s.hashnav.init(); + } + if (s.params.a11y && s.a11y) s.a11y.init(); + s.emit('onInit', s); + }; + + // Cleanup dynamic styles + s.cleanupStyles = function () { + // Container + s.container.removeClass(s.classNames.join(' ')).removeAttr('style'); + + // Wrapper + s.wrapper.removeAttr('style'); + + // Slides + if (s.slides && s.slides.length) { + s.slides + .removeClass([ + s.params.slideVisibleClass, + s.params.slideActiveClass, + s.params.slideNextClass, + s.params.slidePrevClass + ].join(' ')) + .removeAttr('style') + .removeAttr('data-swiper-column') + .removeAttr('data-swiper-row'); + } + + // Pagination/Bullets + if (s.paginationContainer && s.paginationContainer.length) { + s.paginationContainer.removeClass(s.params.paginationHiddenClass); + } + if (s.bullets && s.bullets.length) { + s.bullets.removeClass(s.params.bulletActiveClass); + } + + // Buttons + if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass); + if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass); + + // Scrollbar + if (s.params.scrollbar && s.scrollbar) { + if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style'); + if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style'); + } + }; + + // Destroy + s.destroy = function (deleteInstance, cleanupStyles) { + // Detach evebts + s.detachEvents(); + // Stop autoplay + s.stopAutoplay(); + // Disable draggable + if (s.params.scrollbar && s.scrollbar) { + if (s.params.scrollbarDraggable) { + s.scrollbar.disableDraggable(); + } + } + // Destroy loop + if (s.params.loop) { + s.destroyLoop(); + } + // Cleanup styles + if (cleanupStyles) { + s.cleanupStyles(); + } + // Disconnect observer + s.disconnectObservers(); + // Disable keyboard/mousewheel + if (s.params.keyboardControl) { + if (s.disableKeyboardControl) s.disableKeyboardControl(); + } + if (s.params.mousewheelControl) { + if (s.disableMousewheelControl) s.disableMousewheelControl(); + } + // Disable a11y + if (s.params.a11y && s.a11y) s.a11y.destroy(); + // Destroy callback + s.emit('onDestroy'); + // Delete instance + if (deleteInstance !== false) s = null; + }; + + s.init(); + + + + // Return swiper instance + return s; + }; + + + /*================================================== + Prototype + ====================================================*/ + Swiper.prototype = { + isSafari: (function () { + var ua = navigator.userAgent.toLowerCase(); + return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0); + })(), + isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent), + isArray: function (arr) { + return Object.prototype.toString.apply(arr) === '[object Array]'; + }, + /*================================================== + Browser + ====================================================*/ + browser: { + ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled, + ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1) + }, + /*================================================== + Devices + ====================================================*/ + device: (function () { + var ua = navigator.userAgent; + var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); + var ipad = ua.match(/(iPad).*OS\s([\d_]+)/); + var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); + var iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/); + return { + ios: ipad || iphone || ipod, + android: android + }; + })(), + /*================================================== + Feature Detection + ====================================================*/ + support: { + touch : (window.Modernizr && Modernizr.touch === true) || (function () { + return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch); + })(), + + transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () { + var div = document.createElement('div').style; + return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div); + })(), + + flexbox: (function () { + var div = document.createElement('div').style; + var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' '); + for (var i = 0; i < styles.length; i++) { + if (styles[i] in div) return true; + } + })(), + + observer: (function () { + return ('MutationObserver' in window || 'WebkitMutationObserver' in window); + })() + }, + /*================================================== + Plugins + ====================================================*/ + plugins: {} + }; + + + /*=========================== + Get Dom libraries + ===========================*/ + var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7']; + for (var i = 0; i < swiperDomPlugins.length; i++) { + if (window[swiperDomPlugins[i]]) { + addLibraryPlugin(window[swiperDomPlugins[i]]); + } + } + // Required DOM Plugins + var domLib; + if (typeof Dom7 === 'undefined') { + domLib = window.Dom7 || window.Zepto || window.jQuery; + } + else { + domLib = Dom7; + } + + /*=========================== + Add .swiper plugin from Dom libraries + ===========================*/ + function addLibraryPlugin(lib) { + lib.fn.swiper = function (params) { + var firstInstance; + lib(this).each(function () { + var s = new Swiper(this, params); + if (!firstInstance) firstInstance = s; + }); + return firstInstance; + }; + } + + if (domLib) { + if (!('transitionEnd' in domLib.fn)) { + domLib.fn.transitionEnd = function (callback) { + var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'], + i, j, dom = this; + function fireCallBack(e) { + /*jshint validthis:true */ + if (e.target !== this) return; + callback.call(this, e); + for (i = 0; i < events.length; i++) { + dom.off(events[i], fireCallBack); + } + } + if (callback) { + for (i = 0; i < events.length; i++) { + dom.on(events[i], fireCallBack); + } + } + return this; + }; + } + if (!('transform' in domLib.fn)) { + domLib.fn.transform = function (transform) { + for (var i = 0; i < this.length; i++) { + var elStyle = this[i].style; + elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform; + } + return this; + }; + } + if (!('transition' in domLib.fn)) { + domLib.fn.transition = function (duration) { + if (typeof duration !== 'string') { + duration = duration + 'ms'; + } + for (var i = 0; i < this.length; i++) { + var elStyle = this[i].style; + elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration; + } + return this; + }; + } + } + + window.Swiper = Swiper; +})(); +/*=========================== +Swiper AMD Export +===========================*/ +if (typeof(module) !== 'undefined') +{ + module.exports = window.Swiper; +} +else if (typeof define === 'function' && define.amd) { + define([], function () { + 'use strict'; + return window.Swiper; + }); +} +//# sourceMappingURL=maps/swiper.jquery.js.map diff --git a/src/libs/swiper/js/swiper.jquery.min.js b/src/libs/swiper/js/swiper.jquery.min.js new file mode 100755 index 0000000..e134869 --- /dev/null +++ b/src/libs/swiper/js/swiper.jquery.min.js @@ -0,0 +1,18 @@ +/** + * Swiper 3.3.1 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * + * http://www.idangero.us/swiper/ + * + * Copyright 2016, Vladimir Kharlampidi + * The iDangero.us + * http://www.idangero.us/ + * + * Licensed under MIT + * + * Released on: February 7, 2016 + */ +!function(){"use strict";function e(e){e.fn.swiper=function(a){var s;return e(this).each(function(){var e=new t(this,a);s||(s=e)}),s}}var a,t=function(e,s){function r(e){return Math.floor(e)}function i(){y.autoplayTimeoutId=setTimeout(function(){y.params.loop?(y.fixLoop(),y._slideNext(),y.emit("onAutoplay",y)):y.isEnd?s.autoplayStopOnLast?y.stopAutoplay():(y._slideTo(0),y.emit("onAutoplay",y)):(y._slideNext(),y.emit("onAutoplay",y))},y.params.autoplay)}function n(e,t){var s=a(e.target);if(!s.is(t))if("string"==typeof t)s=s.parents(t);else if(t.nodeType){var r;return s.parents().each(function(e,a){a===t&&(r=t)}),r?t:void 0}if(0!==s.length)return s[0]}function o(e,a){a=a||{};var t=window.MutationObserver||window.WebkitMutationObserver,s=new t(function(e){e.forEach(function(e){y.onResize(!0),y.emit("onObserverUpdate",y,e)})});s.observe(e,{attributes:"undefined"==typeof a.attributes?!0:a.attributes,childList:"undefined"==typeof a.childList?!0:a.childList,characterData:"undefined"==typeof a.characterData?!0:a.characterData}),y.observers.push(s)}function l(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!y.params.allowSwipeToNext&&(y.isHorizontal()&&39===a||!y.isHorizontal()&&40===a))return!1;if(!y.params.allowSwipeToPrev&&(y.isHorizontal()&&37===a||!y.isHorizontal()&&38===a))return!1;if(!(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||document.activeElement&&document.activeElement.nodeName&&("input"===document.activeElement.nodeName.toLowerCase()||"textarea"===document.activeElement.nodeName.toLowerCase()))){if(37===a||39===a||38===a||40===a){var t=!1;if(y.container.parents(".swiper-slide").length>0&&0===y.container.parents(".swiper-slide-active").length)return;var s={left:window.pageXOffset,top:window.pageYOffset},r=window.innerWidth,i=window.innerHeight,n=y.container.offset();y.rtl&&(n.left=n.left-y.container[0].scrollLeft);for(var o=[[n.left,n.top],[n.left+y.width,n.top],[n.left,n.top+y.height],[n.left+y.width,n.top+y.height]],l=0;l=s.left&&p[0]<=s.left+r&&p[1]>=s.top&&p[1]<=s.top+i&&(t=!0)}if(!t)return}y.isHorizontal()?((37===a||39===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!y.rtl||37===a&&y.rtl)&&y.slideNext(),(37===a&&!y.rtl||39===a&&y.rtl)&&y.slidePrev()):((38===a||40===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&y.slideNext(),38===a&&y.slidePrev())}}function p(e){e.originalEvent&&(e=e.originalEvent);var a=y.mousewheel.event,t=0,s=y.rtl?-1:1;if("mousewheel"===a)if(y.params.mousewheelForceToAxis)if(y.isHorizontal()){if(!(Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)))return;t=e.wheelDeltaX*s}else{if(!(Math.abs(e.wheelDeltaY)>Math.abs(e.wheelDeltaX)))return;t=e.wheelDeltaY}else t=Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)?-e.wheelDeltaX*s:-e.wheelDeltaY;else if("DOMMouseScroll"===a)t=-e.detail;else if("wheel"===a)if(y.params.mousewheelForceToAxis)if(y.isHorizontal()){if(!(Math.abs(e.deltaX)>Math.abs(e.deltaY)))return;t=-e.deltaX*s}else{if(!(Math.abs(e.deltaY)>Math.abs(e.deltaX)))return;t=-e.deltaY}else t=Math.abs(e.deltaX)>Math.abs(e.deltaY)?-e.deltaX*s:-e.deltaY;if(0!==t){if(y.params.mousewheelInvert&&(t=-t),y.params.freeMode){var r=y.getWrapperTranslate()+t*y.params.mousewheelSensitivity,i=y.isBeginning,n=y.isEnd;if(r>=y.minTranslate()&&(r=y.minTranslate()),r<=y.maxTranslate()&&(r=y.maxTranslate()),y.setWrapperTransition(0),y.setWrapperTranslate(r),y.updateProgress(),y.updateActiveIndex(),(!i&&y.isBeginning||!n&&y.isEnd)&&y.updateClasses(),y.params.freeModeSticky?(clearTimeout(y.mousewheel.timeout),y.mousewheel.timeout=setTimeout(function(){y.slideReset()},300)):y.params.lazyLoading&&y.lazy&&y.lazy.load(),0===r||r===y.maxTranslate())return}else{if((new window.Date).getTime()-y.mousewheel.lastScrollTime>60)if(0>t)if(y.isEnd&&!y.params.loop||y.animating){if(y.params.mousewheelReleaseOnEdges)return!0}else y.slideNext();else if(y.isBeginning&&!y.params.loop||y.animating){if(y.params.mousewheelReleaseOnEdges)return!0}else y.slidePrev();y.mousewheel.lastScrollTime=(new window.Date).getTime()}return y.params.autoplay&&y.stopAutoplay(),e.preventDefault?e.preventDefault():e.returnValue=!1,!1}}function d(e,t){e=a(e);var s,r,i,n=y.rtl?-1:1;s=e.attr("data-swiper-parallax")||"0",r=e.attr("data-swiper-parallax-x"),i=e.attr("data-swiper-parallax-y"),r||i?(r=r||"0",i=i||"0"):y.isHorizontal()?(r=s,i="0"):(i=s,r="0"),r=r.indexOf("%")>=0?parseInt(r,10)*t*n+"%":r*t*n+"px",i=i.indexOf("%")>=0?parseInt(i,10)*t+"%":i*t+"px",e.transform("translate3d("+r+", "+i+",0px)")}function u(e){return 0!==e.indexOf("on")&&(e=e[0]!==e[0].toUpperCase()?"on"+e[0].toUpperCase()+e.substring(1):"on"+e),e}if(!(this instanceof t))return new t(e,s);var c={direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,autoplay:!1,autoplayDisableOnInteraction:!0,autoplayStopOnLast:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flip:{slideShadows:!0,limitRotation:!0},cube:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fade:{crossFade:!1},parallax:!1,scrollbar:null,scrollbarHide:!0,scrollbarDraggable:!1,scrollbarSnapOnRelease:!1,keyboardControl:!1,mousewheelControl:!1,mousewheelReleaseOnEdges:!1,mousewheelInvert:!1,mousewheelForceToAxis:!1,mousewheelSensitivity:1,hashnav:!1,breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,onlyExternal:!1,threshold:0,touchMoveStopPropagation:!0,uniqueNavElements:!0,pagination:null,paginationElement:"span",paginationClickable:!1,paginationHide:!1,paginationBulletRender:null,paginationProgressRender:null,paginationFractionRender:null,paginationCustomRender:null,paginationType:"bullets",resistance:!0,resistanceRatio:.85,nextButton:null,prevButton:null,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,lazyLoading:!1,lazyLoadingInPrevNext:!1,lazyLoadingInPrevNextAmount:1,lazyLoadingOnTransitionStart:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,control:void 0,controlInverse:!1,controlBy:"slide",allowSwipeToPrev:!0,allowSwipeToNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slidePrevClass:"swiper-slide-prev",wrapperClass:"swiper-wrapper",bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",buttonDisabledClass:"swiper-button-disabled",paginationCurrentClass:"swiper-pagination-current",paginationTotalClass:"swiper-pagination-total",paginationHiddenClass:"swiper-pagination-hidden",paginationProgressbarClass:"swiper-pagination-progressbar",observer:!1,observeParents:!1,a11y:!1,prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",runCallbacksOnInit:!0},m=s&&s.virtualTranslate;s=s||{};var f={};for(var g in s)if("object"!=typeof s[g]||null===s[g]||(s[g].nodeType||s[g]===window||s[g]===document||"undefined"!=typeof Dom7&&s[g]instanceof Dom7||"undefined"!=typeof jQuery&&s[g]instanceof jQuery))f[g]=s[g];else{f[g]={};for(var h in s[g])f[g][h]=s[g][h]}for(var v in c)if("undefined"==typeof s[v])s[v]=c[v];else if("object"==typeof s[v])for(var w in c[v])"undefined"==typeof s[v][w]&&(s[v][w]=c[v][w]);var y=this;if(y.params=s,y.originalParams=f,y.classNames=[],"undefined"!=typeof a&&"undefined"!=typeof Dom7&&(a=Dom7),("undefined"!=typeof a||(a="undefined"==typeof Dom7?window.Dom7||window.Zepto||window.jQuery:Dom7))&&(y.$=a,y.currentBreakpoint=void 0,y.getActiveBreakpoint=function(){if(!y.params.breakpoints)return!1;var e,a=!1,t=[];for(e in y.params.breakpoints)y.params.breakpoints.hasOwnProperty(e)&&t.push(e);t.sort(function(e,a){return parseInt(e,10)>parseInt(a,10)});for(var s=0;s=window.innerWidth&&!a&&(a=e);return a||"max"},y.setBreakpoint=function(){var e=y.getActiveBreakpoint();if(e&&y.currentBreakpoint!==e){var a=e in y.params.breakpoints?y.params.breakpoints[e]:y.originalParams,t=y.params.loop&&a.slidesPerView!==y.params.slidesPerView;for(var s in a)y.params[s]=a[s];y.currentBreakpoint=e,t&&y.destroyLoop&&y.reLoop(!0)}},y.params.breakpoints&&y.setBreakpoint(),y.container=a(e),0!==y.container.length)){if(y.container.length>1){var b=[];return y.container.each(function(){b.push(new t(this,s))}),b}y.container[0].swiper=y,y.container.data("swiper",y),y.classNames.push("swiper-container-"+y.params.direction),y.params.freeMode&&y.classNames.push("swiper-container-free-mode"),y.support.flexbox||(y.classNames.push("swiper-container-no-flexbox"),y.params.slidesPerColumn=1),y.params.autoHeight&&y.classNames.push("swiper-container-autoheight"),(y.params.parallax||y.params.watchSlidesVisibility)&&(y.params.watchSlidesProgress=!0),["cube","coverflow","flip"].indexOf(y.params.effect)>=0&&(y.support.transforms3d?(y.params.watchSlidesProgress=!0,y.classNames.push("swiper-container-3d")):y.params.effect="slide"),"slide"!==y.params.effect&&y.classNames.push("swiper-container-"+y.params.effect),"cube"===y.params.effect&&(y.params.resistanceRatio=0,y.params.slidesPerView=1,y.params.slidesPerColumn=1,y.params.slidesPerGroup=1,y.params.centeredSlides=!1,y.params.spaceBetween=0,y.params.virtualTranslate=!0,y.params.setWrapperSize=!1),("fade"===y.params.effect||"flip"===y.params.effect)&&(y.params.slidesPerView=1,y.params.slidesPerColumn=1,y.params.slidesPerGroup=1,y.params.watchSlidesProgress=!0,y.params.spaceBetween=0,y.params.setWrapperSize=!1,"undefined"==typeof m&&(y.params.virtualTranslate=!0)),y.params.grabCursor&&y.support.touch&&(y.params.grabCursor=!1),y.wrapper=y.container.children("."+y.params.wrapperClass),y.params.pagination&&(y.paginationContainer=a(y.params.pagination),y.params.uniqueNavElements&&"string"==typeof y.params.pagination&&y.paginationContainer.length>1&&1===y.container.find(y.params.pagination).length&&(y.paginationContainer=y.container.find(y.params.pagination)),"bullets"===y.params.paginationType&&y.params.paginationClickable?y.paginationContainer.addClass("swiper-pagination-clickable"):y.params.paginationClickable=!1,y.paginationContainer.addClass("swiper-pagination-"+y.params.paginationType)),(y.params.nextButton||y.params.prevButton)&&(y.params.nextButton&&(y.nextButton=a(y.params.nextButton),y.params.uniqueNavElements&&"string"==typeof y.params.nextButton&&y.nextButton.length>1&&1===y.container.find(y.params.nextButton).length&&(y.nextButton=y.container.find(y.params.nextButton))),y.params.prevButton&&(y.prevButton=a(y.params.prevButton),y.params.uniqueNavElements&&"string"==typeof y.params.prevButton&&y.prevButton.length>1&&1===y.container.find(y.params.prevButton).length&&(y.prevButton=y.container.find(y.params.prevButton)))),y.isHorizontal=function(){return"horizontal"===y.params.direction},y.rtl=y.isHorizontal()&&("rtl"===y.container[0].dir.toLowerCase()||"rtl"===y.container.css("direction")),y.rtl&&y.classNames.push("swiper-container-rtl"),y.rtl&&(y.wrongRTL="-webkit-box"===y.wrapper.css("display")),y.params.slidesPerColumn>1&&y.classNames.push("swiper-container-multirow"),y.device.android&&y.classNames.push("swiper-container-android"),y.container.addClass(y.classNames.join(" ")),y.translate=0,y.progress=0,y.velocity=0,y.lockSwipeToNext=function(){y.params.allowSwipeToNext=!1},y.lockSwipeToPrev=function(){y.params.allowSwipeToPrev=!1},y.lockSwipes=function(){y.params.allowSwipeToNext=y.params.allowSwipeToPrev=!1},y.unlockSwipeToNext=function(){y.params.allowSwipeToNext=!0},y.unlockSwipeToPrev=function(){y.params.allowSwipeToPrev=!0},y.unlockSwipes=function(){y.params.allowSwipeToNext=y.params.allowSwipeToPrev=!0},y.params.grabCursor&&(y.container[0].style.cursor="move",y.container[0].style.cursor="-webkit-grab",y.container[0].style.cursor="-moz-grab",y.container[0].style.cursor="grab"),y.imagesToLoad=[],y.imagesLoaded=0,y.loadImage=function(e,a,t,s,r){function i(){r&&r()}var n;e.complete&&s?i():a?(n=new window.Image,n.onload=i,n.onerror=i,t&&(n.srcset=t),a&&(n.src=a)):i()},y.preloadImages=function(){function e(){"undefined"!=typeof y&&null!==y&&(void 0!==y.imagesLoaded&&y.imagesLoaded++,y.imagesLoaded===y.imagesToLoad.length&&(y.params.updateOnImagesReady&&y.update(),y.emit("onImagesReady",y)))}y.imagesToLoad=y.container.find("img");for(var a=0;a=0&&(a=parseFloat(a.replace("%",""))/100*y.size),y.virtualSize=-a,y.rtl?y.slides.css({marginLeft:"",marginTop:""}):y.slides.css({marginRight:"",marginBottom:""});var n;y.params.slidesPerColumn>1&&(n=Math.floor(y.slides.length/y.params.slidesPerColumn)===y.slides.length/y.params.slidesPerColumn?y.slides.length:Math.ceil(y.slides.length/y.params.slidesPerColumn)*y.params.slidesPerColumn,"auto"!==y.params.slidesPerView&&"row"===y.params.slidesPerColumnFill&&(n=Math.max(n,y.params.slidesPerView*y.params.slidesPerColumn)));var o,l=y.params.slidesPerColumn,p=n/l,d=p-(y.params.slidesPerColumn*p-y.slides.length);for(e=0;e1){var c,m,f;"column"===y.params.slidesPerColumnFill?(m=Math.floor(e/l),f=e-m*l,(m>d||m===d&&f===l-1)&&++f>=l&&(f=0,m++),c=m+f*n/l,u.css({"-webkit-box-ordinal-group":c,"-moz-box-ordinal-group":c,"-ms-flex-order":c,"-webkit-order":c,order:c})):(f=Math.floor(e/p),m=e-f*p),u.css({"margin-top":0!==f&&y.params.spaceBetween&&y.params.spaceBetween+"px"}).attr("data-swiper-column",m).attr("data-swiper-row",f)}"none"!==u.css("display")&&("auto"===y.params.slidesPerView?(o=y.isHorizontal()?u.outerWidth(!0):u.outerHeight(!0),y.params.roundLengths&&(o=r(o))):(o=(y.size-(y.params.slidesPerView-1)*a)/y.params.slidesPerView,y.params.roundLengths&&(o=r(o)),y.isHorizontal()?y.slides[e].style.width=o+"px":y.slides[e].style.height=o+"px"),y.slides[e].swiperSlideSize=o,y.slidesSizesGrid.push(o),y.params.centeredSlides?(t=t+o/2+s/2+a,0===e&&(t=t-y.size/2-a),Math.abs(t)<.001&&(t=0),i%y.params.slidesPerGroup===0&&y.snapGrid.push(t),y.slidesGrid.push(t)):(i%y.params.slidesPerGroup===0&&y.snapGrid.push(t),y.slidesGrid.push(t),t=t+o+a),y.virtualSize+=o+a,s=o,i++)}y.virtualSize=Math.max(y.virtualSize,y.size)+y.params.slidesOffsetAfter;var g;if(y.rtl&&y.wrongRTL&&("slide"===y.params.effect||"coverflow"===y.params.effect)&&y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}),(!y.support.flexbox||y.params.setWrapperSize)&&(y.isHorizontal()?y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}):y.wrapper.css({height:y.virtualSize+y.params.spaceBetween+"px"})),y.params.slidesPerColumn>1&&(y.virtualSize=(o+y.params.spaceBetween)*n,y.virtualSize=Math.ceil(y.virtualSize/y.params.slidesPerColumn)-y.params.spaceBetween,y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}),y.params.centeredSlides)){for(g=[],e=0;e1&&y.snapGrid.push(y.virtualSize-y.size)}0===y.snapGrid.length&&(y.snapGrid=[0]),0!==y.params.spaceBetween&&(y.isHorizontal()?y.rtl?y.slides.css({marginLeft:a+"px"}):y.slides.css({marginRight:a+"px"}):y.slides.css({marginBottom:a+"px"})),y.params.watchSlidesProgress&&y.updateSlidesOffset()}},y.updateSlidesOffset=function(){for(var e=0;e=0&&i0&&n<=y.size||0>=i&&n>=y.size;o&&y.slides.eq(t).addClass(y.params.slideVisibleClass)}s.progress=y.rtl?-r:r}}},y.updateProgress=function(e){"undefined"==typeof e&&(e=y.translate||0);var a=y.maxTranslate()-y.minTranslate(),t=y.isBeginning,s=y.isEnd;0===a?(y.progress=0,y.isBeginning=y.isEnd=!0):(y.progress=(e-y.minTranslate())/a,y.isBeginning=y.progress<=0,y.isEnd=y.progress>=1),y.isBeginning&&!t&&y.emit("onReachBeginning",y),y.isEnd&&!s&&y.emit("onReachEnd",y),y.params.watchSlidesProgress&&y.updateSlidesProgress(e),y.emit("onProgress",y,y.progress)},y.updateActiveIndex=function(){var e,a,t,s=y.rtl?y.translate:-y.translate;for(a=0;a=y.slidesGrid[a]&&s=y.slidesGrid[a]&&s=y.slidesGrid[a]&&(e=a);(0>e||"undefined"==typeof e)&&(e=0),t=Math.floor(e/y.params.slidesPerGroup),t>=y.snapGrid.length&&(t=y.snapGrid.length-1),e!==y.activeIndex&&(y.snapIndex=t,y.previousIndex=y.activeIndex,y.activeIndex=e,y.updateClasses())},y.updateClasses=function(){y.slides.removeClass(y.params.slideActiveClass+" "+y.params.slideNextClass+" "+y.params.slidePrevClass);var e=y.slides.eq(y.activeIndex);e.addClass(y.params.slideActiveClass);var t=e.next("."+y.params.slideClass).addClass(y.params.slideNextClass);y.params.loop&&0===t.length&&y.slides.eq(0).addClass(y.params.slideNextClass);var s=e.prev("."+y.params.slideClass).addClass(y.params.slidePrevClass);if(y.params.loop&&0===s.length&&y.slides.eq(-1).addClass(y.params.slidePrevClass),y.paginationContainer&&y.paginationContainer.length>0){var r,i=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length;if(y.params.loop?(r=Math.ceil((y.activeIndex-y.loopedSlides)/y.params.slidesPerGroup),r>y.slides.length-1-2*y.loopedSlides&&(r-=y.slides.length-2*y.loopedSlides),r>i-1&&(r-=i),0>r&&"bullets"!==y.params.paginationType&&(r=i+r)):r="undefined"!=typeof y.snapIndex?y.snapIndex:y.activeIndex||0,"bullets"===y.params.paginationType&&y.bullets&&y.bullets.length>0&&(y.bullets.removeClass(y.params.bulletActiveClass),y.paginationContainer.length>1?y.bullets.each(function(){a(this).index()===r&&a(this).addClass(y.params.bulletActiveClass)}):y.bullets.eq(r).addClass(y.params.bulletActiveClass)),"fraction"===y.params.paginationType&&(y.paginationContainer.find("."+y.params.paginationCurrentClass).text(r+1),y.paginationContainer.find("."+y.params.paginationTotalClass).text(i)),"progress"===y.params.paginationType){var n=(r+1)/i,o=n,l=1;y.isHorizontal()||(l=n,o=1),y.paginationContainer.find("."+y.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+o+") scaleY("+l+")").transition(y.params.speed)}"custom"===y.params.paginationType&&y.params.paginationCustomRender&&(y.paginationContainer.html(y.params.paginationCustomRender(y,r+1,i)),y.emit("onPaginationRendered",y,y.paginationContainer[0]))}y.params.loop||(y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.isBeginning?(y.prevButton.addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(y.prevButton)):(y.prevButton.removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(y.prevButton))),y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.isEnd?(y.nextButton.addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(y.nextButton)):(y.nextButton.removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(y.nextButton))))},y.updatePagination=function(){if(y.params.pagination&&y.paginationContainer&&y.paginationContainer.length>0){var e="";if("bullets"===y.params.paginationType){for(var a=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length,t=0;a>t;t++)e+=y.params.paginationBulletRender?y.params.paginationBulletRender(t,y.params.bulletClass):"<"+y.params.paginationElement+' class="'+y.params.bulletClass+'">";y.paginationContainer.html(e),y.bullets=y.paginationContainer.find("."+y.params.bulletClass),y.params.paginationClickable&&y.params.a11y&&y.a11y&&y.a11y.initPagination()}"fraction"===y.params.paginationType&&(e=y.params.paginationFractionRender?y.params.paginationFractionRender(y,y.params.paginationCurrentClass,y.params.paginationTotalClass):' / ',y.paginationContainer.html(e)),"progress"===y.params.paginationType&&(e=y.params.paginationProgressRender?y.params.paginationProgressRender(y,y.params.paginationProgressbarClass):'',y.paginationContainer.html(e)),"custom"!==y.params.paginationType&&y.emit("onPaginationRendered",y,y.paginationContainer[0])}},y.update=function(e){function a(){s=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate()),y.setWrapperTranslate(s),y.updateActiveIndex(),y.updateClasses()}if(y.updateContainerSize(),y.updateSlidesSize(),y.updateProgress(),y.updatePagination(),y.updateClasses(),y.params.scrollbar&&y.scrollbar&&y.scrollbar.set(),e){var t,s;y.controller&&y.controller.spline&&(y.controller.spline=void 0),y.params.freeMode?(a(),y.params.autoHeight&&y.updateAutoHeight()):(t=("auto"===y.params.slidesPerView||y.params.slidesPerView>1)&&y.isEnd&&!y.params.centeredSlides?y.slideTo(y.slides.length-1,0,!1,!0):y.slideTo(y.activeIndex,0,!1,!0),t||a())}else y.params.autoHeight&&y.updateAutoHeight()},y.onResize=function(e){y.params.breakpoints&&y.setBreakpoint();var a=y.params.allowSwipeToPrev,t=y.params.allowSwipeToNext;y.params.allowSwipeToPrev=y.params.allowSwipeToNext=!0,y.updateContainerSize(),y.updateSlidesSize(),("auto"===y.params.slidesPerView||y.params.freeMode||e)&&y.updatePagination(),y.params.scrollbar&&y.scrollbar&&y.scrollbar.set(),y.controller&&y.controller.spline&&(y.controller.spline=void 0);var s=!1;if(y.params.freeMode){var r=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate());y.setWrapperTranslate(r),y.updateActiveIndex(),y.updateClasses(),y.params.autoHeight&&y.updateAutoHeight()}else y.updateClasses(),s=("auto"===y.params.slidesPerView||y.params.slidesPerView>1)&&y.isEnd&&!y.params.centeredSlides?y.slideTo(y.slides.length-1,0,!1,!0):y.slideTo(y.activeIndex,0,!1,!0);y.params.lazyLoading&&!s&&y.lazy&&y.lazy.load(),y.params.allowSwipeToPrev=a,y.params.allowSwipeToNext=t};var x=["mousedown","mousemove","mouseup"];window.navigator.pointerEnabled?x=["pointerdown","pointermove","pointerup"]:window.navigator.msPointerEnabled&&(x=["MSPointerDown","MSPointerMove","MSPointerUp"]),y.touchEvents={start:y.support.touch||!y.params.simulateTouch?"touchstart":x[0],move:y.support.touch||!y.params.simulateTouch?"touchmove":x[1],end:y.support.touch||!y.params.simulateTouch?"touchend":x[2]},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===y.params.touchEventsTarget?y.container:y.wrapper).addClass("swiper-wp8-"+y.params.direction),y.initEvents=function(e){var a=e?"off":"on",t=e?"removeEventListener":"addEventListener",r="container"===y.params.touchEventsTarget?y.container[0]:y.wrapper[0],i=y.support.touch?r:document,n=y.params.nested?!0:!1;y.browser.ie?(r[t](y.touchEvents.start,y.onTouchStart,!1),i[t](y.touchEvents.move,y.onTouchMove,n),i[t](y.touchEvents.end,y.onTouchEnd,!1)):(y.support.touch&&(r[t](y.touchEvents.start,y.onTouchStart,!1),r[t](y.touchEvents.move,y.onTouchMove,n),r[t](y.touchEvents.end,y.onTouchEnd,!1)),!s.simulateTouch||y.device.ios||y.device.android||(r[t]("mousedown",y.onTouchStart,!1),document[t]("mousemove",y.onTouchMove,n),document[t]("mouseup",y.onTouchEnd,!1))),window[t]("resize",y.onResize),y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.nextButton[a]("click",y.onClickNext),y.params.a11y&&y.a11y&&y.nextButton[a]("keydown",y.a11y.onEnterKey)),y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.prevButton[a]("click",y.onClickPrev),y.params.a11y&&y.a11y&&y.prevButton[a]("keydown",y.a11y.onEnterKey)),y.params.pagination&&y.params.paginationClickable&&(y.paginationContainer[a]("click","."+y.params.bulletClass,y.onClickIndex),y.params.a11y&&y.a11y&&y.paginationContainer[a]("keydown","."+y.params.bulletClass,y.a11y.onEnterKey)),(y.params.preventClicks||y.params.preventClicksPropagation)&&r[t]("click",y.preventClicks,!0)},y.attachEvents=function(){y.initEvents()},y.detachEvents=function(){y.initEvents(!0)},y.allowClick=!0,y.preventClicks=function(e){y.allowClick||(y.params.preventClicks&&e.preventDefault(),y.params.preventClicksPropagation&&y.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},y.onClickNext=function(e){e.preventDefault(),(!y.isEnd||y.params.loop)&&y.slideNext()},y.onClickPrev=function(e){e.preventDefault(),(!y.isBeginning||y.params.loop)&&y.slidePrev()},y.onClickIndex=function(e){e.preventDefault();var t=a(this).index()*y.params.slidesPerGroup;y.params.loop&&(t+=y.loopedSlides),y.slideTo(t)},y.updateClickedSlide=function(e){var t=n(e,"."+y.params.slideClass),s=!1;if(t)for(var r=0;ry.slides.length-y.loopedSlides+y.params.slidesPerView/2?(y.fixLoop(),o=y.wrapper.children("."+y.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.swiper-slide-duplicate)').eq(0).index(),setTimeout(function(){y.slideTo(o)},0)):y.slideTo(o):o>y.slides.length-y.params.slidesPerView?(y.fixLoop(),o=y.wrapper.children("."+y.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.swiper-slide-duplicate)').eq(0).index(),setTimeout(function(){y.slideTo(o)},0)):y.slideTo(o)}else y.slideTo(o)}};var T,S,C,z,M,P,I,k,E,B,D="input, select, textarea, button",L=Date.now(),H=[];y.animating=!1,y.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var G,A;if(y.onTouchStart=function(e){if(e.originalEvent&&(e=e.originalEvent),G="touchstart"===e.type,G||!("which"in e)||3!==e.which){if(y.params.noSwiping&&n(e,"."+y.params.noSwipingClass))return void(y.allowClick=!0);if(!y.params.swipeHandler||n(e,y.params.swipeHandler)){var t=y.touches.currentX="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,s=y.touches.currentY="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY;if(!(y.device.ios&&y.params.iOSEdgeSwipeDetection&&t<=y.params.iOSEdgeSwipeThreshold)){if(T=!0,S=!1,C=!0,M=void 0,A=void 0,y.touches.startX=t,y.touches.startY=s,z=Date.now(),y.allowClick=!0,y.updateContainerSize(),y.swipeDirection=void 0,y.params.threshold>0&&(k=!1),"touchstart"!==e.type){var r=!0;a(e.target).is(D)&&(r=!1),document.activeElement&&a(document.activeElement).is(D)&&document.activeElement.blur(),r&&e.preventDefault()}y.emit("onTouchStart",y,e)}}}},y.onTouchMove=function(e){if(e.originalEvent&&(e=e.originalEvent),!G||"mousemove"!==e.type){if(e.preventedByNestedSwiper)return y.touches.startX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,void(y.touches.startY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY);if(y.params.onlyExternal)return y.allowClick=!1,void(T&&(y.touches.startX=y.touches.currentX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,y.touches.startY=y.touches.currentY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,z=Date.now()));if(G&&document.activeElement&&e.target===document.activeElement&&a(e.target).is(D))return S=!0,void(y.allowClick=!1);if(C&&y.emit("onTouchMove",y,e),!(e.targetTouches&&e.targetTouches.length>1)){if(y.touches.currentX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,y.touches.currentY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,"undefined"==typeof M){var t=180*Math.atan2(Math.abs(y.touches.currentY-y.touches.startY),Math.abs(y.touches.currentX-y.touches.startX))/Math.PI;M=y.isHorizontal()?t>y.params.touchAngle:90-t>y.params.touchAngle}if(M&&y.emit("onTouchMoveOpposite",y,e),"undefined"==typeof A&&y.browser.ieTouch&&(y.touches.currentX!==y.touches.startX||y.touches.currentY!==y.touches.startY)&&(A=!0),T){if(M)return void(T=!1);if(A||!y.browser.ieTouch){y.allowClick=!1,y.emit("onSliderMove",y,e),e.preventDefault(),y.params.touchMoveStopPropagation&&!y.params.nested&&e.stopPropagation(),S||(s.loop&&y.fixLoop(),I=y.getWrapperTranslate(),y.setWrapperTransition(0),y.animating&&y.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),y.params.autoplay&&y.autoplaying&&(y.params.autoplayDisableOnInteraction?y.stopAutoplay():y.pauseAutoplay()),B=!1,y.params.grabCursor&&(y.container[0].style.cursor="move",y.container[0].style.cursor="-webkit-grabbing",y.container[0].style.cursor="-moz-grabbin",y.container[0].style.cursor="grabbing")),S=!0;var r=y.touches.diff=y.isHorizontal()?y.touches.currentX-y.touches.startX:y.touches.currentY-y.touches.startY;r*=y.params.touchRatio,y.rtl&&(r=-r),y.swipeDirection=r>0?"prev":"next",P=r+I;var i=!0;if(r>0&&P>y.minTranslate()?(i=!1,y.params.resistance&&(P=y.minTranslate()-1+Math.pow(-y.minTranslate()+I+r,y.params.resistanceRatio))):0>r&&PP&&(P=I),!y.params.allowSwipeToPrev&&"prev"===y.swipeDirection&&P>I&&(P=I),y.params.followFinger){if(y.params.threshold>0){if(!(Math.abs(r)>y.params.threshold||k))return void(P=I);if(!k)return k=!0,y.touches.startX=y.touches.currentX,y.touches.startY=y.touches.currentY,P=I,void(y.touches.diff=y.isHorizontal()?y.touches.currentX-y.touches.startX:y.touches.currentY-y.touches.startY)}(y.params.freeMode||y.params.watchSlidesProgress)&&y.updateActiveIndex(),y.params.freeMode&&(0===H.length&&H.push({position:y.touches[y.isHorizontal()?"startX":"startY"],time:z}),H.push({position:y.touches[y.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),y.updateProgress(P),y.setWrapperTranslate(P)}}}}}},y.onTouchEnd=function(e){if(e.originalEvent&&(e=e.originalEvent),C&&y.emit("onTouchEnd",y,e),C=!1,T){y.params.grabCursor&&S&&T&&(y.container[0].style.cursor="move",y.container[0].style.cursor="-webkit-grab",y.container[0].style.cursor="-moz-grab",y.container[0].style.cursor="grab");var t=Date.now(),s=t-z;if(y.allowClick&&(y.updateClickedSlide(e),y.emit("onTap",y,e),300>s&&t-L>300&&(E&&clearTimeout(E),E=setTimeout(function(){y&&(y.params.paginationHide&&y.paginationContainer.length>0&&!a(e.target).hasClass(y.params.bulletClass)&&y.paginationContainer.toggleClass(y.params.paginationHiddenClass),y.emit("onClick",y,e))},300)),300>s&&300>t-L&&(E&&clearTimeout(E),y.emit("onDoubleTap",y,e))),L=Date.now(),setTimeout(function(){y&&(y.allowClick=!0)},0),!T||!S||!y.swipeDirection||0===y.touches.diff||P===I)return void(T=S=!1);T=S=!1;var r;if(r=y.params.followFinger?y.rtl?y.translate:-y.translate:-P,y.params.freeMode){if(r<-y.minTranslate())return void y.slideTo(y.activeIndex);if(r>-y.maxTranslate())return void(y.slides.length1){var i=H.pop(),n=H.pop(),o=i.position-n.position,l=i.time-n.time;y.velocity=o/l,y.velocity=y.velocity/2,Math.abs(y.velocity)150||(new window.Date).getTime()-i.time>300)&&(y.velocity=0)}else y.velocity=0;H.length=0;var p=1e3*y.params.freeModeMomentumRatio,d=y.velocity*p,u=y.translate+d;y.rtl&&(u=-u);var c,m=!1,f=20*Math.abs(y.velocity)*y.params.freeModeMomentumBounceRatio;if(uy.minTranslate())y.params.freeModeMomentumBounce?(u-y.minTranslate()>f&&(u=y.minTranslate()+f),c=y.minTranslate(),m=!0,B=!0):u=y.minTranslate();else if(y.params.freeModeSticky){var g,h=0;for(h=0;h-u){g=h;break}u=Math.abs(y.snapGrid[g]-u)=y.params.longSwipesMs)&&(y.updateProgress(),y.updateActiveIndex()))}var v,w=0,b=y.slidesSizesGrid[0];for(v=0;v=y.slidesGrid[v]&&r=y.slidesGrid[v]&&(w=v,b=y.slidesGrid[y.slidesGrid.length-1]-y.slidesGrid[y.slidesGrid.length-2]);var x=(r-y.slidesGrid[w])/b;if(s>y.params.longSwipesMs){if(!y.params.longSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&(x>=y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w)),"prev"===y.swipeDirection&&(x>1-y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w))}else{if(!y.params.shortSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&y.slideTo(w+y.params.slidesPerGroup),"prev"===y.swipeDirection&&y.slideTo(w)}}},y._slideTo=function(e,a){return y.slideTo(e,a,!0,!0)},y.slideTo=function(e,a,t,s){"undefined"==typeof t&&(t=!0),"undefined"==typeof e&&(e=0),0>e&&(e=0),y.snapIndex=Math.floor(e/y.params.slidesPerGroup),y.snapIndex>=y.snapGrid.length&&(y.snapIndex=y.snapGrid.length-1);var r=-y.snapGrid[y.snapIndex];y.params.autoplay&&y.autoplaying&&(s||!y.params.autoplayDisableOnInteraction?y.pauseAutoplay(a):y.stopAutoplay()),y.updateProgress(r);for(var i=0;i=Math.floor(100*y.slidesGrid[i])&&(e=i);return!y.params.allowSwipeToNext&&ry.translate&&r>y.maxTranslate()&&(y.activeIndex||0)!==e?!1:("undefined"==typeof a&&(a=y.params.speed),y.previousIndex=y.activeIndex||0,y.activeIndex=e,y.rtl&&-r===y.translate||!y.rtl&&r===y.translate?(y.params.autoHeight&&y.updateAutoHeight(),y.updateClasses(),"slide"!==y.params.effect&&y.setWrapperTranslate(r),!1):(y.updateClasses(),y.onTransitionStart(t),0===a?(y.setWrapperTranslate(r),y.setWrapperTransition(0),y.onTransitionEnd(t)):(y.setWrapperTranslate(r),y.setWrapperTransition(a),y.animating||(y.animating=!0,y.wrapper.transitionEnd(function(){y&&y.onTransitionEnd(t)}))),!0))},y.onTransitionStart=function(e){"undefined"==typeof e&&(e=!0),y.params.autoHeight&&y.updateAutoHeight(),y.lazy&&y.lazy.onTransitionStart(),e&&(y.emit("onTransitionStart",y),y.activeIndex!==y.previousIndex&&(y.emit("onSlideChangeStart",y),y.activeIndex>y.previousIndex?y.emit("onSlideNextStart",y):y.emit("onSlidePrevStart",y)))},y.onTransitionEnd=function(e){y.animating=!1,y.setWrapperTransition(0),"undefined"==typeof e&&(e=!0),y.lazy&&y.lazy.onTransitionEnd(),e&&(y.emit("onTransitionEnd",y),y.activeIndex!==y.previousIndex&&(y.emit("onSlideChangeEnd",y),y.activeIndex>y.previousIndex?y.emit("onSlideNextEnd",y):y.emit("onSlidePrevEnd",y))),y.params.hashnav&&y.hashnav&&y.hashnav.setHash()},y.slideNext=function(e,a,t){if(y.params.loop){if(y.animating)return!1;y.fixLoop();y.container[0].clientLeft;return y.slideTo(y.activeIndex+y.params.slidesPerGroup,a,e,t)}return y.slideTo(y.activeIndex+y.params.slidesPerGroup,a,e,t)},y._slideNext=function(e){return y.slideNext(!0,e,!0)},y.slidePrev=function(e,a,t){if(y.params.loop){if(y.animating)return!1;y.fixLoop();y.container[0].clientLeft;return y.slideTo(y.activeIndex-1,a,e,t)}return y.slideTo(y.activeIndex-1,a,e,t)},y._slidePrev=function(e){return y.slidePrev(!0,e,!0)},y.slideReset=function(e,a,t){return y.slideTo(y.activeIndex,a,e)},y.setWrapperTransition=function(e,a){y.wrapper.transition(e),"slide"!==y.params.effect&&y.effects[y.params.effect]&&y.effects[y.params.effect].setTransition(e),y.params.parallax&&y.parallax&&y.parallax.setTransition(e),y.params.scrollbar&&y.scrollbar&&y.scrollbar.setTransition(e),y.params.control&&y.controller&&y.controller.setTransition(e,a),y.emit("onSetTransition",y,e)},y.setWrapperTranslate=function(e,a,t){var s=0,i=0,n=0;y.isHorizontal()?s=y.rtl?-e:e:i=e,y.params.roundLengths&&(s=r(s),i=r(i)),y.params.virtualTranslate||(y.support.transforms3d?y.wrapper.transform("translate3d("+s+"px, "+i+"px, "+n+"px)"):y.wrapper.transform("translate("+s+"px, "+i+"px)")),y.translate=y.isHorizontal()?s:i;var o,l=y.maxTranslate()-y.minTranslate();o=0===l?0:(e-y.minTranslate())/l,o!==y.progress&&y.updateProgress(e),a&&y.updateActiveIndex(),"slide"!==y.params.effect&&y.effects[y.params.effect]&&y.effects[y.params.effect].setTranslate(y.translate),y.params.parallax&&y.parallax&&y.parallax.setTranslate(y.translate),y.params.scrollbar&&y.scrollbar&&y.scrollbar.setTranslate(y.translate),y.params.control&&y.controller&&y.controller.setTranslate(y.translate,t),y.emit("onSetTranslate",y,y.translate)},y.getTranslate=function(e,a){var t,s,r,i;return"undefined"==typeof a&&(a="x"),y.params.virtualTranslate?y.rtl?-y.translate:y.translate:(r=window.getComputedStyle(e,null),window.WebKitCSSMatrix?(s=r.transform||r.webkitTransform,s.split(",").length>6&&(s=s.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),i=new window.WebKitCSSMatrix("none"===s?"":s)):(i=r.MozTransform||r.OTransform||r.MsTransform||r.msTransform||r.transform||r.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=i.toString().split(",")),"x"===a&&(s=window.WebKitCSSMatrix?i.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(s=window.WebKitCSSMatrix?i.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),y.rtl&&s&&(s=-s),s||0)},y.getWrapperTranslate=function(e){return"undefined"==typeof e&&(e=y.isHorizontal()?"x":"y"),y.getTranslate(y.wrapper[0],e)},y.observers=[],y.initObservers=function(){if(y.params.observeParents)for(var e=y.container.parents(),a=0;ae.length&&(y.loopedSlides=e.length);var t,s=[],r=[];for(e.each(function(t,i){var n=a(this);t=e.length-y.loopedSlides&&s.push(i),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)y.wrapper.prepend(a(s[t].cloneNode(!0)).addClass(y.params.slideDuplicateClass))},y.destroyLoop=function(){y.wrapper.children("."+y.params.slideClass+"."+y.params.slideDuplicateClass).remove(),y.slides.removeAttr("data-swiper-slide-index")},y.reLoop=function(e){var a=y.activeIndex-y.loopedSlides;y.destroyLoop(),y.createLoop(),y.updateSlidesSize(),e&&y.slideTo(a+y.loopedSlides,0,!1)},y.fixLoop=function(){var e;y.activeIndex=2*y.loopedSlides||y.activeIndex>y.slides.length-2*y.params.slidesPerView)&&(e=-y.slides.length+y.activeIndex+y.loopedSlides,e+=y.loopedSlides,y.slideTo(e,0,!1,!0))},y.appendSlide=function(e){if(y.params.loop&&y.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;aa&&t--;t=Math.max(t,0)}else a=e,y.slides[a]&&y.slides.eq(a).remove(),t>a&&t--,t=Math.max(t,0);y.params.loop&&y.createLoop(),y.params.observer&&y.support.observer||y.update(!0),y.params.loop?y.slideTo(t+y.loopedSlides,0,!1):y.slideTo(t,0,!1)},y.removeAllSlides=function(){for(var e=[],a=0;a
'),t.append(d)),0===u.length&&(u=a('
'),t.append(u)),d.length&&(d[0].style.opacity=Math.max(-s,0)),u.length&&(u[0].style.opacity=Math.max(s,0))}t.transform("translate3d("+l+"px, "+p+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(e){if(y.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),y.params.virtualTranslate&&0!==e){var t=!1;y.slides.eq(y.activeIndex).transitionEnd(function(){if(!t&&y&&a(this).hasClass(y.params.slideActiveClass)){t=!0,y.animating=!1;for(var e=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],s=0;s
'),y.wrapper.append(e)),e.css({height:y.width+"px"})):(e=y.container.find(".swiper-cube-shadow"),0===e.length&&(e=a('
'),y.container.append(e))));for(var s=0;s=o&&o>-1&&(t=90*s+90*o,y.rtl&&(t=90*-s-90*o)),r.transform(u),y.params.cube.slideShadows){var c=y.isHorizontal()?r.find(".swiper-slide-shadow-left"):r.find(".swiper-slide-shadow-top"),m=y.isHorizontal()?r.find(".swiper-slide-shadow-right"):r.find(".swiper-slide-shadow-bottom");0===c.length&&(c=a('
'),r.append(c)),0===m.length&&(m=a('
'),r.append(m)),c.length&&(c[0].style.opacity=Math.max(-o,0)),m.length&&(m[0].style.opacity=Math.max(o,0))}}if(y.wrapper.css({"-webkit-transform-origin":"50% 50% -"+y.size/2+"px","-moz-transform-origin":"50% 50% -"+y.size/2+"px","-ms-transform-origin":"50% 50% -"+y.size/2+"px","transform-origin":"50% 50% -"+y.size/2+"px"}),y.params.cube.shadow)if(y.isHorizontal())e.transform("translate3d(0px, "+(y.width/2+y.params.cube.shadowOffset)+"px, "+-y.width/2+"px) rotateX(90deg) rotateZ(0deg) scale("+y.params.cube.shadowScale+")");else{var f=Math.abs(t)-90*Math.floor(Math.abs(t)/90),g=1.5-(Math.sin(2*f*Math.PI/360)/2+Math.cos(2*f*Math.PI/360)/2),h=y.params.cube.shadowScale,v=y.params.cube.shadowScale/g,w=y.params.cube.shadowOffset;e.transform("scale3d("+h+", 1, "+v+") translate3d(0px, "+(y.height/2+w)+"px, "+-y.height/2/v+"px) rotateX(-90deg)")}var b=y.isSafari||y.isUiWebView?-y.size/2:0;y.wrapper.transform("translate3d(0px,0,"+b+"px) rotateX("+(y.isHorizontal()?0:t)+"deg) rotateY("+(y.isHorizontal()?-t:0)+"deg)")},setTransition:function(e){y.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),y.params.cube.shadow&&!y.isHorizontal()&&y.container.find(".swiper-cube-shadow").transition(e)}},coverflow:{setTranslate:function(){for(var e=y.translate,t=y.isHorizontal()?-e+y.width/2:-e+y.height/2,s=y.isHorizontal()?y.params.coverflow.rotate:-y.params.coverflow.rotate,r=y.params.coverflow.depth,i=0,n=y.slides.length;n>i;i++){var o=y.slides.eq(i),l=y.slidesSizesGrid[i],p=o[0].swiperSlideOffset,d=(t-p-l/2)/l*y.params.coverflow.modifier,u=y.isHorizontal()?s*d:0,c=y.isHorizontal()?0:s*d,m=-r*Math.abs(d),f=y.isHorizontal()?0:y.params.coverflow.stretch*d,g=y.isHorizontal()?y.params.coverflow.stretch*d:0;Math.abs(g)<.001&&(g=0),Math.abs(f)<.001&&(f=0),Math.abs(m)<.001&&(m=0),Math.abs(u)<.001&&(u=0),Math.abs(c)<.001&&(c=0);var h="translate3d("+g+"px,"+f+"px,"+m+"px) rotateX("+c+"deg) rotateY("+u+"deg)";if(o.transform(h),o[0].style.zIndex=-Math.abs(Math.round(d))+1,y.params.coverflow.slideShadows){var v=y.isHorizontal()?o.find(".swiper-slide-shadow-left"):o.find(".swiper-slide-shadow-top"),w=y.isHorizontal()?o.find(".swiper-slide-shadow-right"):o.find(".swiper-slide-shadow-bottom");0===v.length&&(v=a('
'),o.append(v)),0===w.length&&(w=a('
'),o.append(w)),v.length&&(v[0].style.opacity=d>0?d:0),w.length&&(w[0].style.opacity=-d>0?-d:0)}}if(y.browser.ie){var b=y.wrapper[0].style;b.perspectiveOrigin=t+"px 50%"}},setTransition:function(e){y.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}}},y.lazy={initialImageLoaded:!1,loadImageInSlide:function(e,t){if("undefined"!=typeof e&&("undefined"==typeof t&&(t=!0),0!==y.slides.length)){var s=y.slides.eq(e),r=s.find(".swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)");!s.hasClass("swiper-lazy")||s.hasClass("swiper-lazy-loaded")||s.hasClass("swiper-lazy-loading")||(r=r.add(s[0])),0!==r.length&&r.each(function(){var e=a(this);e.addClass("swiper-lazy-loading");var r=e.attr("data-background"),i=e.attr("data-src"),n=e.attr("data-srcset");y.loadImage(e[0],i||r,n,!1,function(){if(r?(e.css("background-image",'url("'+r+'")'),e.removeAttr("data-background")):(n&&(e.attr("srcset",n),e.removeAttr("data-srcset")),i&&(e.attr("src",i),e.removeAttr("data-src"))),e.addClass("swiper-lazy-loaded").removeClass("swiper-lazy-loading"),s.find(".swiper-lazy-preloader, .preloader").remove(),y.params.loop&&t){var a=s.attr("data-swiper-slide-index");if(s.hasClass(y.params.slideDuplicateClass)){var o=y.wrapper.children('[data-swiper-slide-index="'+a+'"]:not(.'+y.params.slideDuplicateClass+")");y.lazy.loadImageInSlide(o.index(),!1)}else{var l=y.wrapper.children("."+y.params.slideDuplicateClass+'[data-swiper-slide-index="'+a+'"]');y.lazy.loadImageInSlide(l.index(),!1)}}y.emit("onLazyImageReady",y,s[0],e[0])}),y.emit("onLazyImageLoad",y,s[0],e[0])})}},load:function(){var e;if(y.params.watchSlidesVisibility)y.wrapper.children("."+y.params.slideVisibleClass).each(function(){y.lazy.loadImageInSlide(a(this).index())});else if(y.params.slidesPerView>1)for(e=y.activeIndex;e1||y.params.lazyLoadingInPrevNextAmount&&y.params.lazyLoadingInPrevNextAmount>1){var t=y.params.lazyLoadingInPrevNextAmount,s=y.params.slidesPerView,r=Math.min(y.activeIndex+s+Math.max(t,s),y.slides.length),i=Math.max(y.activeIndex-Math.max(s,t),0);for(e=y.activeIndex+y.params.slidesPerView;r>e;e++)y.slides[e]&&y.lazy.loadImageInSlide(e);for(e=i;e0&&y.lazy.loadImageInSlide(n.index());var o=y.wrapper.children("."+y.params.slidePrevClass);o.length>0&&y.lazy.loadImageInSlide(o.index())}},onTransitionStart:function(){y.params.lazyLoading&&(y.params.lazyLoadingOnTransitionStart||!y.params.lazyLoadingOnTransitionStart&&!y.lazy.initialImageLoaded)&&y.lazy.load()},onTransitionEnd:function(){y.params.lazyLoading&&!y.params.lazyLoadingOnTransitionStart&&y.lazy.load()}},y.scrollbar={isTouched:!1,setDragPosition:function(e){var a=y.scrollbar,t=y.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY,s=t-a.track.offset()[y.isHorizontal()?"left":"top"]-a.dragSize/2,r=-y.minTranslate()*a.moveDivider,i=-y.maxTranslate()*a.moveDivider;r>s?s=r:s>i&&(s=i),s=-s/a.moveDivider,y.updateProgress(s),y.setWrapperTranslate(s,!0)},dragStart:function(e){var a=y.scrollbar;a.isTouched=!0,e.preventDefault(),e.stopPropagation(),a.setDragPosition(e),clearTimeout(a.dragTimeout),a.track.transition(0),y.params.scrollbarHide&&a.track.css("opacity",1),y.wrapper.transition(100),a.drag.transition(100),y.emit("onScrollbarDragStart",y)},dragMove:function(e){var a=y.scrollbar;a.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,a.setDragPosition(e),y.wrapper.transition(0),a.track.transition(0),a.drag.transition(0),y.emit("onScrollbarDragMove",y))},dragEnd:function(e){var a=y.scrollbar;a.isTouched&&(a.isTouched=!1,y.params.scrollbarHide&&(clearTimeout(a.dragTimeout),a.dragTimeout=setTimeout(function(){a.track.css("opacity",0),a.track.transition(400)},1e3)),y.emit("onScrollbarDragEnd",y),y.params.scrollbarSnapOnRelease&&y.slideReset())},enableDraggable:function(){var e=y.scrollbar,t=y.support.touch?e.track:document;a(e.track).on(y.touchEvents.start,e.dragStart),a(t).on(y.touchEvents.move,e.dragMove),a(t).on(y.touchEvents.end,e.dragEnd)},disableDraggable:function(){var e=y.scrollbar,t=y.support.touch?e.track:document;a(e.track).off(y.touchEvents.start,e.dragStart),a(t).off(y.touchEvents.move,e.dragMove),a(t).off(y.touchEvents.end,e.dragEnd)},set:function(){if(y.params.scrollbar){var e=y.scrollbar;e.track=a(y.params.scrollbar),y.params.uniqueNavElements&&"string"==typeof y.params.scrollbar&&e.track.length>1&&1===y.container.find(y.params.scrollbar).length&&(e.track=y.container.find(y.params.scrollbar)),e.drag=e.track.find(".swiper-scrollbar-drag"),0===e.drag.length&&(e.drag=a('
'),e.track.append(e.drag)),e.drag[0].style.width="",e.drag[0].style.height="",e.trackSize=y.isHorizontal()?e.track[0].offsetWidth:e.track[0].offsetHeight,e.divider=y.size/y.virtualSize,e.moveDivider=e.divider*(e.trackSize/y.size),e.dragSize=e.trackSize*e.divider,y.isHorizontal()?e.drag[0].style.width=e.dragSize+"px":e.drag[0].style.height=e.dragSize+"px",e.divider>=1?e.track[0].style.display="none":e.track[0].style.display="",y.params.scrollbarHide&&(e.track[0].style.opacity=0)}},setTranslate:function(){if(y.params.scrollbar){var e,a=y.scrollbar,t=(y.translate||0,a.dragSize);e=(a.trackSize-a.dragSize)*y.progress,y.rtl&&y.isHorizontal()?(e=-e,e>0?(t=a.dragSize-e,e=0):-e+a.dragSize>a.trackSize&&(t=a.trackSize+e)):0>e?(t=a.dragSize+e,e=0):e+a.dragSize>a.trackSize&&(t=a.trackSize-e),y.isHorizontal()?(y.support.transforms3d?a.drag.transform("translate3d("+e+"px, 0, 0)"):a.drag.transform("translateX("+e+"px)"),a.drag[0].style.width=t+"px"):(y.support.transforms3d?a.drag.transform("translate3d(0px, "+e+"px, 0)"):a.drag.transform("translateY("+e+"px)"),a.drag[0].style.height=t+"px"),y.params.scrollbarHide&&(clearTimeout(a.timeout),a.track[0].style.opacity=1,a.timeout=setTimeout(function(){a.track[0].style.opacity=0,a.track.transition(400)},1e3))}},setTransition:function(e){y.params.scrollbar&&y.scrollbar.drag.transition(e)}},y.controller={LinearSpline:function(e,a){this.x=e,this.y=a,this.lastIndex=e.length-1;var t,s;this.x.length;this.interpolate=function(e){return e?(s=r(this.x,e),t=s-1,(e-this.x[t])*(this.y[s]-this.y[t])/(this.x[s]-this.x[t])+this.y[t]):0};var r=function(){var e,a,t;return function(s,r){for(a=-1,e=s.length;e-a>1;)s[t=e+a>>1]<=r?a=t:e=t;return e}}()},getInterpolateFunction:function(e){y.controller.spline||(y.controller.spline=y.params.loop?new y.controller.LinearSpline(y.slidesGrid,e.slidesGrid):new y.controller.LinearSpline(y.snapGrid,e.snapGrid))},setTranslate:function(e,a){function s(a){e=a.rtl&&"horizontal"===a.params.direction?-y.translate:y.translate,"slide"===y.params.controlBy&&(y.controller.getInterpolateFunction(a),i=-y.controller.spline.interpolate(-e)),i&&"container"!==y.params.controlBy||(r=(a.maxTranslate()-a.minTranslate())/(y.maxTranslate()-y.minTranslate()),i=(e-y.minTranslate())*r+a.minTranslate()),y.params.controlInverse&&(i=a.maxTranslate()-i),a.updateProgress(i),a.setWrapperTranslate(i,!1,y),a.updateActiveIndex()}var r,i,n=y.params.control;if(y.isArray(n))for(var o=0;ot;t++){var r=y.slides.eq(t),i=r.attr("data-hash");if(i===e&&!r.hasClass(y.params.slideDuplicateClass)){var n=r.index();y.slideTo(n,a,y.params.runCallbacksOnInit,!0)}}}},setHash:function(){y.hashnav.initialized&&y.params.hashnav&&(document.location.hash=y.slides.eq(y.activeIndex).attr("data-hash")||"")}},y.disableKeyboardControl=function(){y.params.keyboardControl=!1,a(document).off("keydown",l)},y.enableKeyboardControl=function(){y.params.keyboardControl=!0,a(document).on("keydown",l)},y.mousewheel={event:!1,lastScrollTime:(new window.Date).getTime()},y.params.mousewheelControl){try{new window.WheelEvent("wheel"),y.mousewheel.event="wheel"}catch(O){(window.WheelEvent||y.container[0]&&"wheel"in y.container[0])&&(y.mousewheel.event="wheel")}!y.mousewheel.event&&window.WheelEvent,y.mousewheel.event||void 0===document.onmousewheel||(y.mousewheel.event="mousewheel"),y.mousewheel.event||(y.mousewheel.event="DOMMouseScroll")}y.disableMousewheelControl=function(){return y.mousewheel.event?(y.container.off(y.mousewheel.event,p),!0):!1},y.enableMousewheelControl=function(){return y.mousewheel.event?(y.container.on(y.mousewheel.event,p),!0):!1},y.parallax={setTranslate:function(){y.container.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){d(this,y.progress)}),y.slides.each(function(){var e=a(this);e.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var a=Math.min(Math.max(e[0].progress,-1),1);d(this,a)})})},setTransition:function(e){"undefined"==typeof e&&(e=y.params.speed),y.container.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var t=a(this),s=parseInt(t.attr("data-swiper-parallax-duration"),10)||e;0===e&&(s=0),t.transition(s)})}},y._plugins=[];for(var N in y.plugins){var R=y.plugins[N](y,y.params[N]);R&&y._plugins.push(R)}return y.callPlugins=function(e){for(var a=0;a'),notify:function(e){var a=y.a11y.liveRegion;0!==a.length&&(a.html(""),a.html(e))},init:function(){y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.a11y.makeFocusable(y.nextButton),y.a11y.addRole(y.nextButton,"button"),y.a11y.addLabel(y.nextButton,y.params.nextSlideMessage)),y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.a11y.makeFocusable(y.prevButton),y.a11y.addRole(y.prevButton,"button"),y.a11y.addLabel(y.prevButton,y.params.prevSlideMessage)),a(y.container).append(y.a11y.liveRegion)},initPagination:function(){y.params.pagination&&y.params.paginationClickable&&y.bullets&&y.bullets.length&&y.bullets.each(function(){var e=a(this);y.a11y.makeFocusable(e),y.a11y.addRole(e,"button"),y.a11y.addLabel(e,y.params.paginationBulletMessage.replace(/{{index}}/,e.index()+1))})},destroy:function(){y.a11y.liveRegion&&y.a11y.liveRegion.length>0&&y.a11y.liveRegion.remove()}},y.init=function(){y.params.loop&&y.createLoop(),y.updateContainerSize(),y.updateSlidesSize(),y.updatePagination(),y.params.scrollbar&&y.scrollbar&&(y.scrollbar.set(),y.params.scrollbarDraggable&&y.scrollbar.enableDraggable()),"slide"!==y.params.effect&&y.effects[y.params.effect]&&(y.params.loop||y.updateProgress(),y.effects[y.params.effect].setTranslate()),y.params.loop?y.slideTo(y.params.initialSlide+y.loopedSlides,0,y.params.runCallbacksOnInit):(y.slideTo(y.params.initialSlide,0,y.params.runCallbacksOnInit),0===y.params.initialSlide&&(y.parallax&&y.params.parallax&&y.parallax.setTranslate(),y.lazy&&y.params.lazyLoading&&(y.lazy.load(),y.lazy.initialImageLoaded=!0))),y.attachEvents(),y.params.observer&&y.support.observer&&y.initObservers(),y.params.preloadImages&&!y.params.lazyLoading&&y.preloadImages(),y.params.autoplay&&y.startAutoplay(),y.params.keyboardControl&&y.enableKeyboardControl&&y.enableKeyboardControl(),y.params.mousewheelControl&&y.enableMousewheelControl&&y.enableMousewheelControl(), +y.params.hashnav&&y.hashnav&&y.hashnav.init(),y.params.a11y&&y.a11y&&y.a11y.init(),y.emit("onInit",y)},y.cleanupStyles=function(){y.container.removeClass(y.classNames.join(" ")).removeAttr("style"),y.wrapper.removeAttr("style"),y.slides&&y.slides.length&&y.slides.removeClass([y.params.slideVisibleClass,y.params.slideActiveClass,y.params.slideNextClass,y.params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-column").removeAttr("data-swiper-row"),y.paginationContainer&&y.paginationContainer.length&&y.paginationContainer.removeClass(y.params.paginationHiddenClass),y.bullets&&y.bullets.length&&y.bullets.removeClass(y.params.bulletActiveClass),y.params.prevButton&&a(y.params.prevButton).removeClass(y.params.buttonDisabledClass),y.params.nextButton&&a(y.params.nextButton).removeClass(y.params.buttonDisabledClass),y.params.scrollbar&&y.scrollbar&&(y.scrollbar.track&&y.scrollbar.track.length&&y.scrollbar.track.removeAttr("style"),y.scrollbar.drag&&y.scrollbar.drag.length&&y.scrollbar.drag.removeAttr("style"))},y.destroy=function(e,a){y.detachEvents(),y.stopAutoplay(),y.params.scrollbar&&y.scrollbar&&y.params.scrollbarDraggable&&y.scrollbar.disableDraggable(),y.params.loop&&y.destroyLoop(),a&&y.cleanupStyles(),y.disconnectObservers(),y.params.keyboardControl&&y.disableKeyboardControl&&y.disableKeyboardControl(),y.params.mousewheelControl&&y.disableMousewheelControl&&y.disableMousewheelControl(),y.params.a11y&&y.a11y&&y.a11y.destroy(),y.emit("onDestroy"),e!==!1&&(y=null)},y.init(),y}};t.prototype={isSafari:function(){var e=navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent),isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},browser:{ie:window.navigator.pointerEnabled||window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled&&window.navigator.msMaxTouchPoints>1||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>1},device:function(){var e=navigator.userAgent,a=e.match(/(Android);?[\s\/]+([\d.]+)?/),t=e.match(/(iPad).*OS\s([\d_]+)/),s=e.match(/(iPod)(.*OS\s([\d_]+))?/),r=!t&&e.match(/(iPhone\sOS)\s([\d_]+)/);return{ios:t||r||s,android:a}}(),support:{touch:window.Modernizr&&Modernizr.touch===!0||function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}(),transforms3d:window.Modernizr&&Modernizr.csstransforms3d===!0||function(){var e=document.createElement("div").style;return"webkitPerspective"in e||"MozPerspective"in e||"OPerspective"in e||"MsPerspective"in e||"perspective"in e}(),flexbox:function(){for(var e=document.createElement("div").style,a="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),t=0;t parseInt(b, 10); + }); + for (var i = 0; i < points.length; i++) { + point = points[i]; + if (point >= window.innerWidth && !breakpoint) { + breakpoint = point; + } + } + return breakpoint || 'max'; + }; + s.setBreakpoint = function () { + //Set breakpoint for window width and update parameters + var breakpoint = s.getActiveBreakpoint(); + if (breakpoint && s.currentBreakpoint !== breakpoint) { + var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams; + var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView); + for ( var param in breakPointsParams ) { + s.params[param] = breakPointsParams[param]; + } + s.currentBreakpoint = breakpoint; + if(needsReLoop && s.destroyLoop) { + s.reLoop(true); + } + } + }; + // Set breakpoint on load + if (s.params.breakpoints) { + s.setBreakpoint(); + } + + /*========================= + Preparation - Define Container, Wrapper and Pagination + ===========================*/ + s.container = $(container); + if (s.container.length === 0) return; + if (s.container.length > 1) { + var swipers = []; + s.container.each(function () { + var container = this; + swipers.push(new Swiper(this, params)); + }); + return swipers; + } + + // Save instance in container HTML Element and in data + s.container[0].swiper = s; + s.container.data('swiper', s); + + s.classNames.push('swiper-container-' + s.params.direction); + + if (s.params.freeMode) { + s.classNames.push('swiper-container-free-mode'); + } + if (!s.support.flexbox) { + s.classNames.push('swiper-container-no-flexbox'); + s.params.slidesPerColumn = 1; + } + if (s.params.autoHeight) { + s.classNames.push('swiper-container-autoheight'); + } + // Enable slides progress when required + if (s.params.parallax || s.params.watchSlidesVisibility) { + s.params.watchSlidesProgress = true; + } + // Coverflow / 3D + if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) { + if (s.support.transforms3d) { + s.params.watchSlidesProgress = true; + s.classNames.push('swiper-container-3d'); + } + else { + s.params.effect = 'slide'; + } + } + if (s.params.effect !== 'slide') { + s.classNames.push('swiper-container-' + s.params.effect); + } + if (s.params.effect === 'cube') { + s.params.resistanceRatio = 0; + s.params.slidesPerView = 1; + s.params.slidesPerColumn = 1; + s.params.slidesPerGroup = 1; + s.params.centeredSlides = false; + s.params.spaceBetween = 0; + s.params.virtualTranslate = true; + s.params.setWrapperSize = false; + } + if (s.params.effect === 'fade' || s.params.effect === 'flip') { + s.params.slidesPerView = 1; + s.params.slidesPerColumn = 1; + s.params.slidesPerGroup = 1; + s.params.watchSlidesProgress = true; + s.params.spaceBetween = 0; + s.params.setWrapperSize = false; + if (typeof initialVirtualTranslate === 'undefined') { + s.params.virtualTranslate = true; + } + } + + // Grab Cursor + if (s.params.grabCursor && s.support.touch) { + s.params.grabCursor = false; + } + + // Wrapper + s.wrapper = s.container.children('.' + s.params.wrapperClass); + + // Pagination + if (s.params.pagination) { + s.paginationContainer = $(s.params.pagination); + if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) { + s.paginationContainer = s.container.find(s.params.pagination); + } + + if (s.params.paginationType === 'bullets' && s.params.paginationClickable) { + s.paginationContainer.addClass('swiper-pagination-clickable'); + } + else { + s.params.paginationClickable = false; + } + s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType); + } + // Next/Prev Buttons + if (s.params.nextButton || s.params.prevButton) { + if (s.params.nextButton) { + s.nextButton = $(s.params.nextButton); + if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) { + s.nextButton = s.container.find(s.params.nextButton); + } + } + if (s.params.prevButton) { + s.prevButton = $(s.params.prevButton); + if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) { + s.prevButton = s.container.find(s.params.prevButton); + } + } + } + + // Is Horizontal + s.isHorizontal = function () { + return s.params.direction === 'horizontal'; + }; + // s.isH = isH; + + // RTL + s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl'); + if (s.rtl) { + s.classNames.push('swiper-container-rtl'); + } + + // Wrong RTL support + if (s.rtl) { + s.wrongRTL = s.wrapper.css('display') === '-webkit-box'; + } + + // Columns + if (s.params.slidesPerColumn > 1) { + s.classNames.push('swiper-container-multirow'); + } + + // Check for Android + if (s.device.android) { + s.classNames.push('swiper-container-android'); + } + + // Add classes + s.container.addClass(s.classNames.join(' ')); + + // Translate + s.translate = 0; + + // Progress + s.progress = 0; + + // Velocity + s.velocity = 0; + + /*========================= + Locks, unlocks + ===========================*/ + s.lockSwipeToNext = function () { + s.params.allowSwipeToNext = false; + }; + s.lockSwipeToPrev = function () { + s.params.allowSwipeToPrev = false; + }; + s.lockSwipes = function () { + s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false; + }; + s.unlockSwipeToNext = function () { + s.params.allowSwipeToNext = true; + }; + s.unlockSwipeToPrev = function () { + s.params.allowSwipeToPrev = true; + }; + s.unlockSwipes = function () { + s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true; + }; + + /*========================= + Round helper + ===========================*/ + function round(a) { + return Math.floor(a); + } + /*========================= + Set grab cursor + ===========================*/ + if (s.params.grabCursor) { + s.container[0].style.cursor = 'move'; + s.container[0].style.cursor = '-webkit-grab'; + s.container[0].style.cursor = '-moz-grab'; + s.container[0].style.cursor = 'grab'; + } + /*========================= + Update on Images Ready + ===========================*/ + s.imagesToLoad = []; + s.imagesLoaded = 0; + + s.loadImage = function (imgElement, src, srcset, checkForComplete, callback) { + var image; + function onReady () { + if (callback) callback(); + } + if (!imgElement.complete || !checkForComplete) { + if (src) { + image = new window.Image(); + image.onload = onReady; + image.onerror = onReady; + if (srcset) { + image.srcset = srcset; + } + if (src) { + image.src = src; + } + } else { + onReady(); + } + + } else {//image already loaded... + onReady(); + } + }; + s.preloadImages = function () { + s.imagesToLoad = s.container.find('img'); + function _onReady() { + if (typeof s === 'undefined' || s === null) return; + if (s.imagesLoaded !== undefined) s.imagesLoaded++; + if (s.imagesLoaded === s.imagesToLoad.length) { + if (s.params.updateOnImagesReady) s.update(); + s.emit('onImagesReady', s); + } + } + for (var i = 0; i < s.imagesToLoad.length; i++) { + s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), true, _onReady); + } + }; + + /*========================= + Autoplay + ===========================*/ + s.autoplayTimeoutId = undefined; + s.autoplaying = false; + s.autoplayPaused = false; + function autoplay() { + s.autoplayTimeoutId = setTimeout(function () { + if (s.params.loop) { + s.fixLoop(); + s._slideNext(); + s.emit('onAutoplay', s); + } + else { + if (!s.isEnd) { + s._slideNext(); + s.emit('onAutoplay', s); + } + else { + if (!params.autoplayStopOnLast) { + s._slideTo(0); + s.emit('onAutoplay', s); + } + else { + s.stopAutoplay(); + } + } + } + }, s.params.autoplay); + } + s.startAutoplay = function () { + if (typeof s.autoplayTimeoutId !== 'undefined') return false; + if (!s.params.autoplay) return false; + if (s.autoplaying) return false; + s.autoplaying = true; + s.emit('onAutoplayStart', s); + autoplay(); + }; + s.stopAutoplay = function (internal) { + if (!s.autoplayTimeoutId) return; + if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId); + s.autoplaying = false; + s.autoplayTimeoutId = undefined; + s.emit('onAutoplayStop', s); + }; + s.pauseAutoplay = function (speed) { + if (s.autoplayPaused) return; + if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId); + s.autoplayPaused = true; + if (speed === 0) { + s.autoplayPaused = false; + autoplay(); + } + else { + s.wrapper.transitionEnd(function () { + if (!s) return; + s.autoplayPaused = false; + if (!s.autoplaying) { + s.stopAutoplay(); + } + else { + autoplay(); + } + }); + } + }; + /*========================= + Min/Max Translate + ===========================*/ + s.minTranslate = function () { + return (-s.snapGrid[0]); + }; + s.maxTranslate = function () { + return (-s.snapGrid[s.snapGrid.length - 1]); + }; + /*========================= + Slider/slides sizes + ===========================*/ + s.updateAutoHeight = function () { + // Update Height + var slide = s.slides.eq(s.activeIndex)[0]; + if (typeof slide !== 'undefined') { + var newHeight = slide.offsetHeight; + if (newHeight) s.wrapper.css('height', newHeight + 'px'); + } + }; + s.updateContainerSize = function () { + var width, height; + if (typeof s.params.width !== 'undefined') { + width = s.params.width; + } + else { + width = s.container[0].clientWidth; + } + if (typeof s.params.height !== 'undefined') { + height = s.params.height; + } + else { + height = s.container[0].clientHeight; + } + if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) { + return; + } + + //Subtract paddings + width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10); + height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10); + + // Store values + s.width = width; + s.height = height; + s.size = s.isHorizontal() ? s.width : s.height; + }; + + s.updateSlidesSize = function () { + s.slides = s.wrapper.children('.' + s.params.slideClass); + s.snapGrid = []; + s.slidesGrid = []; + s.slidesSizesGrid = []; + + var spaceBetween = s.params.spaceBetween, + slidePosition = -s.params.slidesOffsetBefore, + i, + prevSlideSize = 0, + index = 0; + if (typeof s.size === 'undefined') return; + if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { + spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size; + } + + s.virtualSize = -spaceBetween; + // reset margins + if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''}); + else s.slides.css({marginRight: '', marginBottom: ''}); + + var slidesNumberEvenToRows; + if (s.params.slidesPerColumn > 1) { + if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) { + slidesNumberEvenToRows = s.slides.length; + } + else { + slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn; + } + if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') { + slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn); + } + } + + // Calc slides + var slideSize; + var slidesPerColumn = s.params.slidesPerColumn; + var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn; + var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length); + for (i = 0; i < s.slides.length; i++) { + slideSize = 0; + var slide = s.slides.eq(i); + if (s.params.slidesPerColumn > 1) { + // Set slides order + var newSlideOrderIndex; + var column, row; + if (s.params.slidesPerColumnFill === 'column') { + column = Math.floor(i / slidesPerColumn); + row = i - column * slidesPerColumn; + if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) { + if (++row >= slidesPerColumn) { + row = 0; + column++; + } + } + newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn; + slide + .css({ + '-webkit-box-ordinal-group': newSlideOrderIndex, + '-moz-box-ordinal-group': newSlideOrderIndex, + '-ms-flex-order': newSlideOrderIndex, + '-webkit-order': newSlideOrderIndex, + 'order': newSlideOrderIndex + }); + } + else { + row = Math.floor(i / slidesPerRow); + column = i - row * slidesPerRow; + } + slide + .css({ + 'margin-top': (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px') + }) + .attr('data-swiper-column', column) + .attr('data-swiper-row', row); + + } + if (slide.css('display') === 'none') continue; + if (s.params.slidesPerView === 'auto') { + slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true); + if (s.params.roundLengths) slideSize = round(slideSize); + } + else { + slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView; + if (s.params.roundLengths) slideSize = round(slideSize); + + if (s.isHorizontal()) { + s.slides[i].style.width = slideSize + 'px'; + } + else { + s.slides[i].style.height = slideSize + 'px'; + } + } + s.slides[i].swiperSlideSize = slideSize; + s.slidesSizesGrid.push(slideSize); + + + if (s.params.centeredSlides) { + slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; + if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween; + if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; + if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition); + s.slidesGrid.push(slidePosition); + } + else { + if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition); + s.slidesGrid.push(slidePosition); + slidePosition = slidePosition + slideSize + spaceBetween; + } + + s.virtualSize += slideSize + spaceBetween; + + prevSlideSize = slideSize; + + index ++; + } + s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter; + var newSlidesGrid; + + if ( + s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) { + s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); + } + if (!s.support.flexbox || s.params.setWrapperSize) { + if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); + else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'}); + } + + if (s.params.slidesPerColumn > 1) { + s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows; + s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween; + s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); + if (s.params.centeredSlides) { + newSlidesGrid = []; + for (i = 0; i < s.snapGrid.length; i++) { + if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]); + } + s.snapGrid = newSlidesGrid; + } + } + + // Remove last grid elements depending on width + if (!s.params.centeredSlides) { + newSlidesGrid = []; + for (i = 0; i < s.snapGrid.length; i++) { + if (s.snapGrid[i] <= s.virtualSize - s.size) { + newSlidesGrid.push(s.snapGrid[i]); + } + } + s.snapGrid = newSlidesGrid; + if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) { + s.snapGrid.push(s.virtualSize - s.size); + } + } + if (s.snapGrid.length === 0) s.snapGrid = [0]; + + if (s.params.spaceBetween !== 0) { + if (s.isHorizontal()) { + if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'}); + else s.slides.css({marginRight: spaceBetween + 'px'}); + } + else s.slides.css({marginBottom: spaceBetween + 'px'}); + } + if (s.params.watchSlidesProgress) { + s.updateSlidesOffset(); + } + }; + s.updateSlidesOffset = function () { + for (var i = 0; i < s.slides.length; i++) { + s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop; + } + }; + + /*========================= + Slider/slides progress + ===========================*/ + s.updateSlidesProgress = function (translate) { + if (typeof translate === 'undefined') { + translate = s.translate || 0; + } + if (s.slides.length === 0) return; + if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset(); + + var offsetCenter = -translate; + if (s.rtl) offsetCenter = translate; + + // Visible Slides + s.slides.removeClass(s.params.slideVisibleClass); + for (var i = 0; i < s.slides.length; i++) { + var slide = s.slides[i]; + var slideProgress = (offsetCenter - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween); + if (s.params.watchSlidesVisibility) { + var slideBefore = -(offsetCenter - slide.swiperSlideOffset); + var slideAfter = slideBefore + s.slidesSizesGrid[i]; + var isVisible = + (slideBefore >= 0 && slideBefore < s.size) || + (slideAfter > 0 && slideAfter <= s.size) || + (slideBefore <= 0 && slideAfter >= s.size); + if (isVisible) { + s.slides.eq(i).addClass(s.params.slideVisibleClass); + } + } + slide.progress = s.rtl ? -slideProgress : slideProgress; + } + }; + s.updateProgress = function (translate) { + if (typeof translate === 'undefined') { + translate = s.translate || 0; + } + var translatesDiff = s.maxTranslate() - s.minTranslate(); + var wasBeginning = s.isBeginning; + var wasEnd = s.isEnd; + if (translatesDiff === 0) { + s.progress = 0; + s.isBeginning = s.isEnd = true; + } + else { + s.progress = (translate - s.minTranslate()) / (translatesDiff); + s.isBeginning = s.progress <= 0; + s.isEnd = s.progress >= 1; + } + if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s); + if (s.isEnd && !wasEnd) s.emit('onReachEnd', s); + + if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate); + s.emit('onProgress', s, s.progress); + }; + s.updateActiveIndex = function () { + var translate = s.rtl ? s.translate : -s.translate; + var newActiveIndex, i, snapIndex; + for (i = 0; i < s.slidesGrid.length; i ++) { + if (typeof s.slidesGrid[i + 1] !== 'undefined') { + if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) { + newActiveIndex = i; + } + else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) { + newActiveIndex = i + 1; + } + } + else { + if (translate >= s.slidesGrid[i]) { + newActiveIndex = i; + } + } + } + // Normalize slideIndex + if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0; + // for (i = 0; i < s.slidesGrid.length; i++) { + // if (- translate >= s.slidesGrid[i]) { + // newActiveIndex = i; + // } + // } + snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup); + if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1; + + if (newActiveIndex === s.activeIndex) { + return; + } + s.snapIndex = snapIndex; + s.previousIndex = s.activeIndex; + s.activeIndex = newActiveIndex; + s.updateClasses(); + }; + + /*========================= + Classes + ===========================*/ + s.updateClasses = function () { + s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass); + var activeSlide = s.slides.eq(s.activeIndex); + // Active classes + activeSlide.addClass(s.params.slideActiveClass); + // Next Slide + var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass); + if (s.params.loop && nextSlide.length === 0) { + s.slides.eq(0).addClass(s.params.slideNextClass); + } + // Prev Slide + var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass); + if (s.params.loop && prevSlide.length === 0) { + s.slides.eq(-1).addClass(s.params.slidePrevClass); + } + + // Pagination + if (s.paginationContainer && s.paginationContainer.length > 0) { + // Current/Total + var current, + total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length; + if (s.params.loop) { + current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup); + if (current > s.slides.length - 1 - s.loopedSlides * 2) { + current = current - (s.slides.length - s.loopedSlides * 2); + } + if (current > total - 1) current = current - total; + if (current < 0 && s.params.paginationType !== 'bullets') current = total + current; + } + else { + if (typeof s.snapIndex !== 'undefined') { + current = s.snapIndex; + } + else { + current = s.activeIndex || 0; + } + } + // Types + if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) { + s.bullets.removeClass(s.params.bulletActiveClass); + if (s.paginationContainer.length > 1) { + s.bullets.each(function () { + if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass); + }); + } + else { + s.bullets.eq(current).addClass(s.params.bulletActiveClass); + } + } + if (s.params.paginationType === 'fraction') { + s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1); + s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total); + } + if (s.params.paginationType === 'progress') { + var scale = (current + 1) / total, + scaleX = scale, + scaleY = 1; + if (!s.isHorizontal()) { + scaleY = scale; + scaleX = 1; + } + s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed); + } + if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) { + s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total)); + s.emit('onPaginationRendered', s, s.paginationContainer[0]); + } + } + + // Next/active buttons + if (!s.params.loop) { + if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { + if (s.isBeginning) { + s.prevButton.addClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton); + } + else { + s.prevButton.removeClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton); + } + } + if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { + if (s.isEnd) { + s.nextButton.addClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton); + } + else { + s.nextButton.removeClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton); + } + } + } + }; + + /*========================= + Pagination + ===========================*/ + s.updatePagination = function () { + if (!s.params.pagination) return; + if (s.paginationContainer && s.paginationContainer.length > 0) { + var paginationHTML = ''; + if (s.params.paginationType === 'bullets') { + var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length; + for (var i = 0; i < numberOfBullets; i++) { + if (s.params.paginationBulletRender) { + paginationHTML += s.params.paginationBulletRender(i, s.params.bulletClass); + } + else { + paginationHTML += '<' + s.params.paginationElement+' class="' + s.params.bulletClass + '">'; + } + } + s.paginationContainer.html(paginationHTML); + s.bullets = s.paginationContainer.find('.' + s.params.bulletClass); + if (s.params.paginationClickable && s.params.a11y && s.a11y) { + s.a11y.initPagination(); + } + } + if (s.params.paginationType === 'fraction') { + if (s.params.paginationFractionRender) { + paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass); + } + else { + paginationHTML = + '' + + ' / ' + + ''; + } + s.paginationContainer.html(paginationHTML); + } + if (s.params.paginationType === 'progress') { + if (s.params.paginationProgressRender) { + paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass); + } + else { + paginationHTML = ''; + } + s.paginationContainer.html(paginationHTML); + } + if (s.params.paginationType !== 'custom') { + s.emit('onPaginationRendered', s, s.paginationContainer[0]); + } + } + }; + /*========================= + Common update method + ===========================*/ + s.update = function (updateTranslate) { + s.updateContainerSize(); + s.updateSlidesSize(); + s.updateProgress(); + s.updatePagination(); + s.updateClasses(); + if (s.params.scrollbar && s.scrollbar) { + s.scrollbar.set(); + } + function forceSetTranslate() { + newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate()); + s.setWrapperTranslate(newTranslate); + s.updateActiveIndex(); + s.updateClasses(); + } + if (updateTranslate) { + var translated, newTranslate; + if (s.controller && s.controller.spline) { + s.controller.spline = undefined; + } + if (s.params.freeMode) { + forceSetTranslate(); + if (s.params.autoHeight) { + s.updateAutoHeight(); + } + } + else { + if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) { + translated = s.slideTo(s.slides.length - 1, 0, false, true); + } + else { + translated = s.slideTo(s.activeIndex, 0, false, true); + } + if (!translated) { + forceSetTranslate(); + } + } + } + else if (s.params.autoHeight) { + s.updateAutoHeight(); + } + }; + + /*========================= + Resize Handler + ===========================*/ + s.onResize = function (forceUpdatePagination) { + //Breakpoints + if (s.params.breakpoints) { + s.setBreakpoint(); + } + + // Disable locks on resize + var allowSwipeToPrev = s.params.allowSwipeToPrev; + var allowSwipeToNext = s.params.allowSwipeToNext; + s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true; + + s.updateContainerSize(); + s.updateSlidesSize(); + if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination(); + if (s.params.scrollbar && s.scrollbar) { + s.scrollbar.set(); + } + if (s.controller && s.controller.spline) { + s.controller.spline = undefined; + } + var slideChangedBySlideTo = false; + if (s.params.freeMode) { + var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate()); + s.setWrapperTranslate(newTranslate); + s.updateActiveIndex(); + s.updateClasses(); + + if (s.params.autoHeight) { + s.updateAutoHeight(); + } + } + else { + s.updateClasses(); + if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) { + slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true); + } + else { + slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true); + } + } + if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) { + s.lazy.load(); + } + // Return locks after resize + s.params.allowSwipeToPrev = allowSwipeToPrev; + s.params.allowSwipeToNext = allowSwipeToNext; + }; + + /*========================= + Events + ===========================*/ + + //Define Touch Events + var desktopEvents = ['mousedown', 'mousemove', 'mouseup']; + if (window.navigator.pointerEnabled) desktopEvents = ['pointerdown', 'pointermove', 'pointerup']; + else if (window.navigator.msPointerEnabled) desktopEvents = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp']; + s.touchEvents = { + start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : desktopEvents[0], + move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : desktopEvents[1], + end : s.support.touch || !s.params.simulateTouch ? 'touchend' : desktopEvents[2] + }; + + + // WP8 Touch Events Fix + if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) { + (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction); + } + + // Attach/detach events + s.initEvents = function (detach) { + var actionDom = detach ? 'off' : 'on'; + var action = detach ? 'removeEventListener' : 'addEventListener'; + var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0]; + var target = s.support.touch ? touchEventsTarget : document; + + var moveCapture = s.params.nested ? true : false; + + //Touch Events + if (s.browser.ie) { + touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false); + target[action](s.touchEvents.move, s.onTouchMove, moveCapture); + target[action](s.touchEvents.end, s.onTouchEnd, false); + } + else { + if (s.support.touch) { + touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false); + touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture); + touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, false); + } + if (params.simulateTouch && !s.device.ios && !s.device.android) { + touchEventsTarget[action]('mousedown', s.onTouchStart, false); + document[action]('mousemove', s.onTouchMove, moveCapture); + document[action]('mouseup', s.onTouchEnd, false); + } + } + window[action]('resize', s.onResize); + + // Next, Prev, Index + if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { + s.nextButton[actionDom]('click', s.onClickNext); + if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey); + } + if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { + s.prevButton[actionDom]('click', s.onClickPrev); + if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey); + } + if (s.params.pagination && s.params.paginationClickable) { + s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex); + if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey); + } + + // Prevent Links Clicks + if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true); + }; + s.attachEvents = function () { + s.initEvents(); + }; + s.detachEvents = function () { + s.initEvents(true); + }; + + /*========================= + Handle Clicks + ===========================*/ + // Prevent Clicks + s.allowClick = true; + s.preventClicks = function (e) { + if (!s.allowClick) { + if (s.params.preventClicks) e.preventDefault(); + if (s.params.preventClicksPropagation && s.animating) { + e.stopPropagation(); + e.stopImmediatePropagation(); + } + } + }; + // Clicks + s.onClickNext = function (e) { + e.preventDefault(); + if (s.isEnd && !s.params.loop) return; + s.slideNext(); + }; + s.onClickPrev = function (e) { + e.preventDefault(); + if (s.isBeginning && !s.params.loop) return; + s.slidePrev(); + }; + s.onClickIndex = function (e) { + e.preventDefault(); + var index = $(this).index() * s.params.slidesPerGroup; + if (s.params.loop) index = index + s.loopedSlides; + s.slideTo(index); + }; + + /*========================= + Handle Touches + ===========================*/ + function findElementInEvent(e, selector) { + var el = $(e.target); + if (!el.is(selector)) { + if (typeof selector === 'string') { + el = el.parents(selector); + } + else if (selector.nodeType) { + var found; + el.parents().each(function (index, _el) { + if (_el === selector) found = selector; + }); + if (!found) return undefined; + else return selector; + } + } + if (el.length === 0) { + return undefined; + } + return el[0]; + } + s.updateClickedSlide = function (e) { + var slide = findElementInEvent(e, '.' + s.params.slideClass); + var slideFound = false; + if (slide) { + for (var i = 0; i < s.slides.length; i++) { + if (s.slides[i] === slide) slideFound = true; + } + } + + if (slide && slideFound) { + s.clickedSlide = slide; + s.clickedIndex = $(slide).index(); + } + else { + s.clickedSlide = undefined; + s.clickedIndex = undefined; + return; + } + if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) { + var slideToIndex = s.clickedIndex, + realIndex, + duplicatedSlides; + if (s.params.loop) { + if (s.animating) return; + realIndex = $(s.clickedSlide).attr('data-swiper-slide-index'); + if (s.params.centeredSlides) { + if ((slideToIndex < s.loopedSlides - s.params.slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + s.params.slidesPerView/2)) { + s.fixLoop(); + slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.swiper-slide-duplicate)').eq(0).index(); + setTimeout(function () { + s.slideTo(slideToIndex); + }, 0); + } + else { + s.slideTo(slideToIndex); + } + } + else { + if (slideToIndex > s.slides.length - s.params.slidesPerView) { + s.fixLoop(); + slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.swiper-slide-duplicate)').eq(0).index(); + setTimeout(function () { + s.slideTo(slideToIndex); + }, 0); + } + else { + s.slideTo(slideToIndex); + } + } + } + else { + s.slideTo(slideToIndex); + } + } + }; + + var isTouched, + isMoved, + allowTouchCallbacks, + touchStartTime, + isScrolling, + currentTranslate, + startTranslate, + allowThresholdMove, + // Form elements to match + formElements = 'input, select, textarea, button', + // Last click time + lastClickTime = Date.now(), clickTimeout, + //Velocities + velocities = [], + allowMomentumBounce; + + // Animating Flag + s.animating = false; + + // Touches information + s.touches = { + startX: 0, + startY: 0, + currentX: 0, + currentY: 0, + diff: 0 + }; + + // Touch handlers + var isTouchEvent, startMoving; + s.onTouchStart = function (e) { + if (e.originalEvent) e = e.originalEvent; + isTouchEvent = e.type === 'touchstart'; + if (!isTouchEvent && 'which' in e && e.which === 3) return; + if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) { + s.allowClick = true; + return; + } + if (s.params.swipeHandler) { + if (!findElementInEvent(e, s.params.swipeHandler)) return; + } + + var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; + var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; + + // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore + if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) { + return; + } + + isTouched = true; + isMoved = false; + allowTouchCallbacks = true; + isScrolling = undefined; + startMoving = undefined; + s.touches.startX = startX; + s.touches.startY = startY; + touchStartTime = Date.now(); + s.allowClick = true; + s.updateContainerSize(); + s.swipeDirection = undefined; + if (s.params.threshold > 0) allowThresholdMove = false; + if (e.type !== 'touchstart') { + var preventDefault = true; + if ($(e.target).is(formElements)) preventDefault = false; + if (document.activeElement && $(document.activeElement).is(formElements)) { + document.activeElement.blur(); + } + if (preventDefault) { + e.preventDefault(); + } + } + s.emit('onTouchStart', s, e); + }; + + s.onTouchMove = function (e) { + if (e.originalEvent) e = e.originalEvent; + if (isTouchEvent && e.type === 'mousemove') return; + if (e.preventedByNestedSwiper) { + s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; + s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; + return; + } + if (s.params.onlyExternal) { + // isMoved = true; + s.allowClick = false; + if (isTouched) { + s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; + s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; + touchStartTime = Date.now(); + } + return; + } + if (isTouchEvent && document.activeElement) { + if (e.target === document.activeElement && $(e.target).is(formElements)) { + isMoved = true; + s.allowClick = false; + return; + } + } + if (allowTouchCallbacks) { + s.emit('onTouchMove', s, e); + } + if (e.targetTouches && e.targetTouches.length > 1) return; + + s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; + s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; + + if (typeof isScrolling === 'undefined') { + var touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI; + isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle); + } + if (isScrolling) { + s.emit('onTouchMoveOpposite', s, e); + } + if (typeof startMoving === 'undefined' && s.browser.ieTouch) { + if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) { + startMoving = true; + } + } + if (!isTouched) return; + if (isScrolling) { + isTouched = false; + return; + } + if (!startMoving && s.browser.ieTouch) { + return; + } + s.allowClick = false; + s.emit('onSliderMove', s, e); + e.preventDefault(); + if (s.params.touchMoveStopPropagation && !s.params.nested) { + e.stopPropagation(); + } + + if (!isMoved) { + if (params.loop) { + s.fixLoop(); + } + startTranslate = s.getWrapperTranslate(); + s.setWrapperTransition(0); + if (s.animating) { + s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd'); + } + if (s.params.autoplay && s.autoplaying) { + if (s.params.autoplayDisableOnInteraction) { + s.stopAutoplay(); + } + else { + s.pauseAutoplay(); + } + } + allowMomentumBounce = false; + //Grab Cursor + if (s.params.grabCursor) { + s.container[0].style.cursor = 'move'; + s.container[0].style.cursor = '-webkit-grabbing'; + s.container[0].style.cursor = '-moz-grabbin'; + s.container[0].style.cursor = 'grabbing'; + } + } + isMoved = true; + + var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY; + + diff = diff * s.params.touchRatio; + if (s.rtl) diff = -diff; + + s.swipeDirection = diff > 0 ? 'prev' : 'next'; + currentTranslate = diff + startTranslate; + + var disableParentSwiper = true; + if ((diff > 0 && currentTranslate > s.minTranslate())) { + disableParentSwiper = false; + if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio); + } + else if (diff < 0 && currentTranslate < s.maxTranslate()) { + disableParentSwiper = false; + if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio); + } + + if (disableParentSwiper) { + e.preventedByNestedSwiper = true; + } + + // Directions locks + if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) { + currentTranslate = startTranslate; + } + if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) { + currentTranslate = startTranslate; + } + + if (!s.params.followFinger) return; + + // Threshold + if (s.params.threshold > 0) { + if (Math.abs(diff) > s.params.threshold || allowThresholdMove) { + if (!allowThresholdMove) { + allowThresholdMove = true; + s.touches.startX = s.touches.currentX; + s.touches.startY = s.touches.currentY; + currentTranslate = startTranslate; + s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY; + return; + } + } + else { + currentTranslate = startTranslate; + return; + } + } + // Update active index in free mode + if (s.params.freeMode || s.params.watchSlidesProgress) { + s.updateActiveIndex(); + } + if (s.params.freeMode) { + //Velocity + if (velocities.length === 0) { + velocities.push({ + position: s.touches[s.isHorizontal() ? 'startX' : 'startY'], + time: touchStartTime + }); + } + velocities.push({ + position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'], + time: (new window.Date()).getTime() + }); + } + // Update progress + s.updateProgress(currentTranslate); + // Update translate + s.setWrapperTranslate(currentTranslate); + }; + s.onTouchEnd = function (e) { + if (e.originalEvent) e = e.originalEvent; + if (allowTouchCallbacks) { + s.emit('onTouchEnd', s, e); + } + allowTouchCallbacks = false; + if (!isTouched) return; + //Return Grab Cursor + if (s.params.grabCursor && isMoved && isTouched) { + s.container[0].style.cursor = 'move'; + s.container[0].style.cursor = '-webkit-grab'; + s.container[0].style.cursor = '-moz-grab'; + s.container[0].style.cursor = 'grab'; + } + + // Time diff + var touchEndTime = Date.now(); + var timeDiff = touchEndTime - touchStartTime; + + // Tap, doubleTap, Click + if (s.allowClick) { + s.updateClickedSlide(e); + s.emit('onTap', s, e); + if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) { + if (clickTimeout) clearTimeout(clickTimeout); + clickTimeout = setTimeout(function () { + if (!s) return; + if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) { + s.paginationContainer.toggleClass(s.params.paginationHiddenClass); + } + s.emit('onClick', s, e); + }, 300); + + } + if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) { + if (clickTimeout) clearTimeout(clickTimeout); + s.emit('onDoubleTap', s, e); + } + } + + lastClickTime = Date.now(); + setTimeout(function () { + if (s) s.allowClick = true; + }, 0); + + if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) { + isTouched = isMoved = false; + return; + } + isTouched = isMoved = false; + + var currentPos; + if (s.params.followFinger) { + currentPos = s.rtl ? s.translate : -s.translate; + } + else { + currentPos = -currentTranslate; + } + if (s.params.freeMode) { + if (currentPos < -s.minTranslate()) { + s.slideTo(s.activeIndex); + return; + } + else if (currentPos > -s.maxTranslate()) { + if (s.slides.length < s.snapGrid.length) { + s.slideTo(s.snapGrid.length - 1); + } + else { + s.slideTo(s.slides.length - 1); + } + return; + } + + if (s.params.freeModeMomentum) { + if (velocities.length > 1) { + var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop(); + + var distance = lastMoveEvent.position - velocityEvent.position; + var time = lastMoveEvent.time - velocityEvent.time; + s.velocity = distance / time; + s.velocity = s.velocity / 2; + if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) { + s.velocity = 0; + } + // this implies that the user stopped moving a finger then released. + // There would be no events with distance zero, so the last event is stale. + if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) { + s.velocity = 0; + } + } else { + s.velocity = 0; + } + + velocities.length = 0; + var momentumDuration = 1000 * s.params.freeModeMomentumRatio; + var momentumDistance = s.velocity * momentumDuration; + + var newPosition = s.translate + momentumDistance; + if (s.rtl) newPosition = - newPosition; + var doBounce = false; + var afterBouncePosition; + var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio; + if (newPosition < s.maxTranslate()) { + if (s.params.freeModeMomentumBounce) { + if (newPosition + s.maxTranslate() < -bounceAmount) { + newPosition = s.maxTranslate() - bounceAmount; + } + afterBouncePosition = s.maxTranslate(); + doBounce = true; + allowMomentumBounce = true; + } + else { + newPosition = s.maxTranslate(); + } + } + else if (newPosition > s.minTranslate()) { + if (s.params.freeModeMomentumBounce) { + if (newPosition - s.minTranslate() > bounceAmount) { + newPosition = s.minTranslate() + bounceAmount; + } + afterBouncePosition = s.minTranslate(); + doBounce = true; + allowMomentumBounce = true; + } + else { + newPosition = s.minTranslate(); + } + } + else if (s.params.freeModeSticky) { + var j = 0, + nextSlide; + for (j = 0; j < s.snapGrid.length; j += 1) { + if (s.snapGrid[j] > -newPosition) { + nextSlide = j; + break; + } + + } + if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') { + newPosition = s.snapGrid[nextSlide]; + } else { + newPosition = s.snapGrid[nextSlide - 1]; + } + if (!s.rtl) newPosition = - newPosition; + } + //Fix duration + if (s.velocity !== 0) { + if (s.rtl) { + momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity); + } + else { + momentumDuration = Math.abs((newPosition - s.translate) / s.velocity); + } + } + else if (s.params.freeModeSticky) { + s.slideReset(); + return; + } + + if (s.params.freeModeMomentumBounce && doBounce) { + s.updateProgress(afterBouncePosition); + s.setWrapperTransition(momentumDuration); + s.setWrapperTranslate(newPosition); + s.onTransitionStart(); + s.animating = true; + s.wrapper.transitionEnd(function () { + if (!s || !allowMomentumBounce) return; + s.emit('onMomentumBounce', s); + + s.setWrapperTransition(s.params.speed); + s.setWrapperTranslate(afterBouncePosition); + s.wrapper.transitionEnd(function () { + if (!s) return; + s.onTransitionEnd(); + }); + }); + } else if (s.velocity) { + s.updateProgress(newPosition); + s.setWrapperTransition(momentumDuration); + s.setWrapperTranslate(newPosition); + s.onTransitionStart(); + if (!s.animating) { + s.animating = true; + s.wrapper.transitionEnd(function () { + if (!s) return; + s.onTransitionEnd(); + }); + } + + } else { + s.updateProgress(newPosition); + } + + s.updateActiveIndex(); + } + if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) { + s.updateProgress(); + s.updateActiveIndex(); + } + return; + } + + // Find current slide + var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0]; + for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) { + if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') { + if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) { + stopIndex = i; + groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i]; + } + } + else { + if (currentPos >= s.slidesGrid[i]) { + stopIndex = i; + groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2]; + } + } + } + + // Find current slide size + var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize; + + if (timeDiff > s.params.longSwipesMs) { + // Long touches + if (!s.params.longSwipes) { + s.slideTo(s.activeIndex); + return; + } + if (s.swipeDirection === 'next') { + if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup); + else s.slideTo(stopIndex); + + } + if (s.swipeDirection === 'prev') { + if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup); + else s.slideTo(stopIndex); + } + } + else { + // Short swipes + if (!s.params.shortSwipes) { + s.slideTo(s.activeIndex); + return; + } + if (s.swipeDirection === 'next') { + s.slideTo(stopIndex + s.params.slidesPerGroup); + + } + if (s.swipeDirection === 'prev') { + s.slideTo(stopIndex); + } + } + }; + /*========================= + Transitions + ===========================*/ + s._slideTo = function (slideIndex, speed) { + return s.slideTo(slideIndex, speed, true, true); + }; + s.slideTo = function (slideIndex, speed, runCallbacks, internal) { + if (typeof runCallbacks === 'undefined') runCallbacks = true; + if (typeof slideIndex === 'undefined') slideIndex = 0; + if (slideIndex < 0) slideIndex = 0; + s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup); + if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1; + + var translate = - s.snapGrid[s.snapIndex]; + // Stop autoplay + if (s.params.autoplay && s.autoplaying) { + if (internal || !s.params.autoplayDisableOnInteraction) { + s.pauseAutoplay(speed); + } + else { + s.stopAutoplay(); + } + } + // Update progress + s.updateProgress(translate); + + // Normalize slideIndex + for (var i = 0; i < s.slidesGrid.length; i++) { + if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) { + slideIndex = i; + } + } + + // Directions locks + if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) { + return false; + } + if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) { + if ((s.activeIndex || 0) !== slideIndex ) return false; + } + + // Update Index + if (typeof speed === 'undefined') speed = s.params.speed; + s.previousIndex = s.activeIndex || 0; + s.activeIndex = slideIndex; + + if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) { + // Update Height + if (s.params.autoHeight) { + s.updateAutoHeight(); + } + s.updateClasses(); + if (s.params.effect !== 'slide') { + s.setWrapperTranslate(translate); + } + return false; + } + s.updateClasses(); + s.onTransitionStart(runCallbacks); + + if (speed === 0) { + s.setWrapperTranslate(translate); + s.setWrapperTransition(0); + s.onTransitionEnd(runCallbacks); + } + else { + s.setWrapperTranslate(translate); + s.setWrapperTransition(speed); + if (!s.animating) { + s.animating = true; + s.wrapper.transitionEnd(function () { + if (!s) return; + s.onTransitionEnd(runCallbacks); + }); + } + + } + + return true; + }; + + s.onTransitionStart = function (runCallbacks) { + if (typeof runCallbacks === 'undefined') runCallbacks = true; + if (s.params.autoHeight) { + s.updateAutoHeight(); + } + if (s.lazy) s.lazy.onTransitionStart(); + if (runCallbacks) { + s.emit('onTransitionStart', s); + if (s.activeIndex !== s.previousIndex) { + s.emit('onSlideChangeStart', s); + if (s.activeIndex > s.previousIndex) { + s.emit('onSlideNextStart', s); + } + else { + s.emit('onSlidePrevStart', s); + } + } + + } + }; + s.onTransitionEnd = function (runCallbacks) { + s.animating = false; + s.setWrapperTransition(0); + if (typeof runCallbacks === 'undefined') runCallbacks = true; + if (s.lazy) s.lazy.onTransitionEnd(); + if (runCallbacks) { + s.emit('onTransitionEnd', s); + if (s.activeIndex !== s.previousIndex) { + s.emit('onSlideChangeEnd', s); + if (s.activeIndex > s.previousIndex) { + s.emit('onSlideNextEnd', s); + } + else { + s.emit('onSlidePrevEnd', s); + } + } + } + if (s.params.hashnav && s.hashnav) { + s.hashnav.setHash(); + } + + }; + s.slideNext = function (runCallbacks, speed, internal) { + if (s.params.loop) { + if (s.animating) return false; + s.fixLoop(); + var clientLeft = s.container[0].clientLeft; + return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal); + } + else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal); + }; + s._slideNext = function (speed) { + return s.slideNext(true, speed, true); + }; + s.slidePrev = function (runCallbacks, speed, internal) { + if (s.params.loop) { + if (s.animating) return false; + s.fixLoop(); + var clientLeft = s.container[0].clientLeft; + return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal); + } + else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal); + }; + s._slidePrev = function (speed) { + return s.slidePrev(true, speed, true); + }; + s.slideReset = function (runCallbacks, speed, internal) { + return s.slideTo(s.activeIndex, speed, runCallbacks); + }; + + /*========================= + Translate/transition helpers + ===========================*/ + s.setWrapperTransition = function (duration, byController) { + s.wrapper.transition(duration); + if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { + s.effects[s.params.effect].setTransition(duration); + } + if (s.params.parallax && s.parallax) { + s.parallax.setTransition(duration); + } + if (s.params.scrollbar && s.scrollbar) { + s.scrollbar.setTransition(duration); + } + if (s.params.control && s.controller) { + s.controller.setTransition(duration, byController); + } + s.emit('onSetTransition', s, duration); + }; + s.setWrapperTranslate = function (translate, updateActiveIndex, byController) { + var x = 0, y = 0, z = 0; + if (s.isHorizontal()) { + x = s.rtl ? -translate : translate; + } + else { + y = translate; + } + + if (s.params.roundLengths) { + x = round(x); + y = round(y); + } + + if (!s.params.virtualTranslate) { + if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)'); + else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)'); + } + + s.translate = s.isHorizontal() ? x : y; + + // Check if we need to update progress + var progress; + var translatesDiff = s.maxTranslate() - s.minTranslate(); + if (translatesDiff === 0) { + progress = 0; + } + else { + progress = (translate - s.minTranslate()) / (translatesDiff); + } + if (progress !== s.progress) { + s.updateProgress(translate); + } + + if (updateActiveIndex) s.updateActiveIndex(); + if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { + s.effects[s.params.effect].setTranslate(s.translate); + } + if (s.params.parallax && s.parallax) { + s.parallax.setTranslate(s.translate); + } + if (s.params.scrollbar && s.scrollbar) { + s.scrollbar.setTranslate(s.translate); + } + if (s.params.control && s.controller) { + s.controller.setTranslate(s.translate, byController); + } + s.emit('onSetTranslate', s, s.translate); + }; + + s.getTranslate = function (el, axis) { + var matrix, curTransform, curStyle, transformMatrix; + + // automatic axis detection + if (typeof axis === 'undefined') { + axis = 'x'; + } + + if (s.params.virtualTranslate) { + return s.rtl ? -s.translate : s.translate; + } + + curStyle = window.getComputedStyle(el, null); + if (window.WebKitCSSMatrix) { + curTransform = curStyle.transform || curStyle.webkitTransform; + if (curTransform.split(',').length > 6) { + curTransform = curTransform.split(', ').map(function(a){ + return a.replace(',','.'); + }).join(', '); + } + // Some old versions of Webkit choke when 'none' is passed; pass + // empty string instead in this case + transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); + } + else { + transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); + matrix = transformMatrix.toString().split(','); + } + + if (axis === 'x') { + //Latest Chrome and webkits Fix + if (window.WebKitCSSMatrix) + curTransform = transformMatrix.m41; + //Crazy IE10 Matrix + else if (matrix.length === 16) + curTransform = parseFloat(matrix[12]); + //Normal Browsers + else + curTransform = parseFloat(matrix[4]); + } + if (axis === 'y') { + //Latest Chrome and webkits Fix + if (window.WebKitCSSMatrix) + curTransform = transformMatrix.m42; + //Crazy IE10 Matrix + else if (matrix.length === 16) + curTransform = parseFloat(matrix[13]); + //Normal Browsers + else + curTransform = parseFloat(matrix[5]); + } + if (s.rtl && curTransform) curTransform = -curTransform; + return curTransform || 0; + }; + s.getWrapperTranslate = function (axis) { + if (typeof axis === 'undefined') { + axis = s.isHorizontal() ? 'x' : 'y'; + } + return s.getTranslate(s.wrapper[0], axis); + }; + + /*========================= + Observer + ===========================*/ + s.observers = []; + function initObserver(target, options) { + options = options || {}; + // create an observer instance + var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; + var observer = new ObserverFunc(function (mutations) { + mutations.forEach(function (mutation) { + s.onResize(true); + s.emit('onObserverUpdate', s, mutation); + }); + }); + + observer.observe(target, { + attributes: typeof options.attributes === 'undefined' ? true : options.attributes, + childList: typeof options.childList === 'undefined' ? true : options.childList, + characterData: typeof options.characterData === 'undefined' ? true : options.characterData + }); + + s.observers.push(observer); + } + s.initObservers = function () { + if (s.params.observeParents) { + var containerParents = s.container.parents(); + for (var i = 0; i < containerParents.length; i++) { + initObserver(containerParents[i]); + } + } + + // Observe container + initObserver(s.container[0], {childList: false}); + + // Observe wrapper + initObserver(s.wrapper[0], {attributes: false}); + }; + s.disconnectObservers = function () { + for (var i = 0; i < s.observers.length; i++) { + s.observers[i].disconnect(); + } + s.observers = []; + }; + /*========================= + Loop + ===========================*/ + // Create looped slides + s.createLoop = function () { + // Remove duplicated slides + s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove(); + + var slides = s.wrapper.children('.' + s.params.slideClass); + + if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length; + + s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10); + s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides; + if (s.loopedSlides > slides.length) { + s.loopedSlides = slides.length; + } + + var prependSlides = [], appendSlides = [], i; + slides.each(function (index, el) { + var slide = $(this); + if (index < s.loopedSlides) appendSlides.push(el); + if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el); + slide.attr('data-swiper-slide-index', index); + }); + for (i = 0; i < appendSlides.length; i++) { + s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass)); + } + for (i = prependSlides.length - 1; i >= 0; i--) { + s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass)); + } + }; + s.destroyLoop = function () { + s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove(); + s.slides.removeAttr('data-swiper-slide-index'); + }; + s.reLoop = function (updatePosition) { + var oldIndex = s.activeIndex - s.loopedSlides; + s.destroyLoop(); + s.createLoop(); + s.updateSlidesSize(); + if (updatePosition) { + s.slideTo(oldIndex + s.loopedSlides, 0, false); + } + + }; + s.fixLoop = function () { + var newIndex; + //Fix For Negative Oversliding + if (s.activeIndex < s.loopedSlides) { + newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex; + newIndex = newIndex + s.loopedSlides; + s.slideTo(newIndex, 0, false, true); + } + //Fix For Positive Oversliding + else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) { + newIndex = -s.slides.length + s.activeIndex + s.loopedSlides; + newIndex = newIndex + s.loopedSlides; + s.slideTo(newIndex, 0, false, true); + } + }; + /*========================= + Append/Prepend/Remove Slides + ===========================*/ + s.appendSlide = function (slides) { + if (s.params.loop) { + s.destroyLoop(); + } + if (typeof slides === 'object' && slides.length) { + for (var i = 0; i < slides.length; i++) { + if (slides[i]) s.wrapper.append(slides[i]); + } + } + else { + s.wrapper.append(slides); + } + if (s.params.loop) { + s.createLoop(); + } + if (!(s.params.observer && s.support.observer)) { + s.update(true); + } + }; + s.prependSlide = function (slides) { + if (s.params.loop) { + s.destroyLoop(); + } + var newActiveIndex = s.activeIndex + 1; + if (typeof slides === 'object' && slides.length) { + for (var i = 0; i < slides.length; i++) { + if (slides[i]) s.wrapper.prepend(slides[i]); + } + newActiveIndex = s.activeIndex + slides.length; + } + else { + s.wrapper.prepend(slides); + } + if (s.params.loop) { + s.createLoop(); + } + if (!(s.params.observer && s.support.observer)) { + s.update(true); + } + s.slideTo(newActiveIndex, 0, false); + }; + s.removeSlide = function (slidesIndexes) { + if (s.params.loop) { + s.destroyLoop(); + s.slides = s.wrapper.children('.' + s.params.slideClass); + } + var newActiveIndex = s.activeIndex, + indexToRemove; + if (typeof slidesIndexes === 'object' && slidesIndexes.length) { + for (var i = 0; i < slidesIndexes.length; i++) { + indexToRemove = slidesIndexes[i]; + if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove(); + if (indexToRemove < newActiveIndex) newActiveIndex--; + } + newActiveIndex = Math.max(newActiveIndex, 0); + } + else { + indexToRemove = slidesIndexes; + if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove(); + if (indexToRemove < newActiveIndex) newActiveIndex--; + newActiveIndex = Math.max(newActiveIndex, 0); + } + + if (s.params.loop) { + s.createLoop(); + } + + if (!(s.params.observer && s.support.observer)) { + s.update(true); + } + if (s.params.loop) { + s.slideTo(newActiveIndex + s.loopedSlides, 0, false); + } + else { + s.slideTo(newActiveIndex, 0, false); + } + + }; + s.removeAllSlides = function () { + var slidesIndexes = []; + for (var i = 0; i < s.slides.length; i++) { + slidesIndexes.push(i); + } + s.removeSlide(slidesIndexes); + }; + + + /*========================= + Effects + ===========================*/ + s.effects = { + fade: { + setTranslate: function () { + for (var i = 0; i < s.slides.length; i++) { + var slide = s.slides.eq(i); + var offset = slide[0].swiperSlideOffset; + var tx = -offset; + if (!s.params.virtualTranslate) tx = tx - s.translate; + var ty = 0; + if (!s.isHorizontal()) { + ty = tx; + tx = 0; + } + var slideOpacity = s.params.fade.crossFade ? + Math.max(1 - Math.abs(slide[0].progress), 0) : + 1 + Math.min(Math.max(slide[0].progress, -1), 0); + slide + .css({ + opacity: slideOpacity + }) + .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)'); + + } + + }, + setTransition: function (duration) { + s.slides.transition(duration); + if (s.params.virtualTranslate && duration !== 0) { + var eventTriggered = false; + s.slides.transitionEnd(function () { + if (eventTriggered) return; + if (!s) return; + eventTriggered = true; + s.animating = false; + var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd']; + for (var i = 0; i < triggerEvents.length; i++) { + s.wrapper.trigger(triggerEvents[i]); + } + }); + } + } + }, + flip: { + setTranslate: function () { + for (var i = 0; i < s.slides.length; i++) { + var slide = s.slides.eq(i); + var progress = slide[0].progress; + if (s.params.flip.limitRotation) { + progress = Math.max(Math.min(slide[0].progress, 1), -1); + } + var offset = slide[0].swiperSlideOffset; + var rotate = -180 * progress, + rotateY = rotate, + rotateX = 0, + tx = -offset, + ty = 0; + if (!s.isHorizontal()) { + ty = tx; + tx = 0; + rotateX = -rotateY; + rotateY = 0; + } + else if (s.rtl) { + rotateY = -rotateY; + } + + slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length; + + if (s.params.flip.slideShadows) { + //Set shadows + var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); + var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); + if (shadowBefore.length === 0) { + shadowBefore = $('
'); + slide.append(shadowBefore); + } + if (shadowAfter.length === 0) { + shadowAfter = $('
'); + slide.append(shadowAfter); + } + if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); + if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); + } + + slide + .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)'); + } + }, + setTransition: function (duration) { + s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); + if (s.params.virtualTranslate && duration !== 0) { + var eventTriggered = false; + s.slides.eq(s.activeIndex).transitionEnd(function () { + if (eventTriggered) return; + if (!s) return; + if (!$(this).hasClass(s.params.slideActiveClass)) return; + eventTriggered = true; + s.animating = false; + var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd']; + for (var i = 0; i < triggerEvents.length; i++) { + s.wrapper.trigger(triggerEvents[i]); + } + }); + } + } + }, + cube: { + setTranslate: function () { + var wrapperRotate = 0, cubeShadow; + if (s.params.cube.shadow) { + if (s.isHorizontal()) { + cubeShadow = s.wrapper.find('.swiper-cube-shadow'); + if (cubeShadow.length === 0) { + cubeShadow = $('
'); + s.wrapper.append(cubeShadow); + } + cubeShadow.css({height: s.width + 'px'}); + } + else { + cubeShadow = s.container.find('.swiper-cube-shadow'); + if (cubeShadow.length === 0) { + cubeShadow = $('
'); + s.container.append(cubeShadow); + } + } + } + for (var i = 0; i < s.slides.length; i++) { + var slide = s.slides.eq(i); + var slideAngle = i * 90; + var round = Math.floor(slideAngle / 360); + if (s.rtl) { + slideAngle = -slideAngle; + round = Math.floor(-slideAngle / 360); + } + var progress = Math.max(Math.min(slide[0].progress, 1), -1); + var tx = 0, ty = 0, tz = 0; + if (i % 4 === 0) { + tx = - round * 4 * s.size; + tz = 0; + } + else if ((i - 1) % 4 === 0) { + tx = 0; + tz = - round * 4 * s.size; + } + else if ((i - 2) % 4 === 0) { + tx = s.size + round * 4 * s.size; + tz = s.size; + } + else if ((i - 3) % 4 === 0) { + tx = - s.size; + tz = 3 * s.size + s.size * 4 * round; + } + if (s.rtl) { + tx = -tx; + } + + if (!s.isHorizontal()) { + ty = tx; + tx = 0; + } + + var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)'; + if (progress <= 1 && progress > -1) { + wrapperRotate = i * 90 + progress * 90; + if (s.rtl) wrapperRotate = -i * 90 - progress * 90; + } + slide.transform(transform); + if (s.params.cube.slideShadows) { + //Set shadows + var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); + var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); + if (shadowBefore.length === 0) { + shadowBefore = $('
'); + slide.append(shadowBefore); + } + if (shadowAfter.length === 0) { + shadowAfter = $('
'); + slide.append(shadowAfter); + } + if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); + if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); + } + } + s.wrapper.css({ + '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px', + '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px', + '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px', + 'transform-origin': '50% 50% -' + (s.size / 2) + 'px' + }); + + if (s.params.cube.shadow) { + if (s.isHorizontal()) { + cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')'); + } + else { + var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90; + var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2); + var scale1 = s.params.cube.shadowScale, + scale2 = s.params.cube.shadowScale / multiplier, + offset = s.params.cube.shadowOffset; + cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)'); + } + } + var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0; + s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)'); + }, + setTransition: function (duration) { + s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); + if (s.params.cube.shadow && !s.isHorizontal()) { + s.container.find('.swiper-cube-shadow').transition(duration); + } + } + }, + coverflow: { + setTranslate: function () { + var transform = s.translate; + var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2; + var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate; + var translate = s.params.coverflow.depth; + //Each slide offset from center + for (var i = 0, length = s.slides.length; i < length; i++) { + var slide = s.slides.eq(i); + var slideSize = s.slidesSizesGrid[i]; + var slideOffset = slide[0].swiperSlideOffset; + var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier; + + var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0; + var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier; + // var rotateZ = 0 + var translateZ = -translate * Math.abs(offsetMultiplier); + + var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier); + var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0; + + //Fix for ultra small values + if (Math.abs(translateX) < 0.001) translateX = 0; + if (Math.abs(translateY) < 0.001) translateY = 0; + if (Math.abs(translateZ) < 0.001) translateZ = 0; + if (Math.abs(rotateY) < 0.001) rotateY = 0; + if (Math.abs(rotateX) < 0.001) rotateX = 0; + + var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)'; + + slide.transform(slideTransform); + slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; + if (s.params.coverflow.slideShadows) { + //Set shadows + var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); + var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); + if (shadowBefore.length === 0) { + shadowBefore = $('
'); + slide.append(shadowBefore); + } + if (shadowAfter.length === 0) { + shadowAfter = $('
'); + slide.append(shadowAfter); + } + if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; + if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0; + } + } + + //Set correct perspective for IE10 + if (s.browser.ie) { + var ws = s.wrapper[0].style; + ws.perspectiveOrigin = center + 'px 50%'; + } + }, + setTransition: function (duration) { + s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); + } + } + }; + + /*========================= + Images Lazy Loading + ===========================*/ + s.lazy = { + initialImageLoaded: false, + loadImageInSlide: function (index, loadInDuplicate) { + if (typeof index === 'undefined') return; + if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true; + if (s.slides.length === 0) return; + + var slide = s.slides.eq(index); + var img = slide.find('.swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)'); + if (slide.hasClass('swiper-lazy') && !slide.hasClass('swiper-lazy-loaded') && !slide.hasClass('swiper-lazy-loading')) { + img = img.add(slide[0]); + } + if (img.length === 0) return; + + img.each(function () { + var _img = $(this); + _img.addClass('swiper-lazy-loading'); + var background = _img.attr('data-background'); + var src = _img.attr('data-src'), + srcset = _img.attr('data-srcset'); + s.loadImage(_img[0], (src || background), srcset, false, function () { + if (background) { + _img.css('background-image', 'url("' + background + '")'); + _img.removeAttr('data-background'); + } + else { + if (srcset) { + _img.attr('srcset', srcset); + _img.removeAttr('data-srcset'); + } + if (src) { + _img.attr('src', src); + _img.removeAttr('data-src'); + } + + } + + _img.addClass('swiper-lazy-loaded').removeClass('swiper-lazy-loading'); + slide.find('.swiper-lazy-preloader, .preloader').remove(); + if (s.params.loop && loadInDuplicate) { + var slideOriginalIndex = slide.attr('data-swiper-slide-index'); + if (slide.hasClass(s.params.slideDuplicateClass)) { + var originalSlide = s.wrapper.children('[data-swiper-slide-index="' + slideOriginalIndex + '"]:not(.' + s.params.slideDuplicateClass + ')'); + s.lazy.loadImageInSlide(originalSlide.index(), false); + } + else { + var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + slideOriginalIndex + '"]'); + s.lazy.loadImageInSlide(duplicatedSlide.index(), false); + } + } + s.emit('onLazyImageReady', s, slide[0], _img[0]); + }); + + s.emit('onLazyImageLoad', s, slide[0], _img[0]); + }); + + }, + load: function () { + var i; + if (s.params.watchSlidesVisibility) { + s.wrapper.children('.' + s.params.slideVisibleClass).each(function () { + s.lazy.loadImageInSlide($(this).index()); + }); + } + else { + if (s.params.slidesPerView > 1) { + for (i = s.activeIndex; i < s.activeIndex + s.params.slidesPerView ; i++) { + if (s.slides[i]) s.lazy.loadImageInSlide(i); + } + } + else { + s.lazy.loadImageInSlide(s.activeIndex); + } + } + if (s.params.lazyLoadingInPrevNext) { + if (s.params.slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) { + var amount = s.params.lazyLoadingInPrevNextAmount; + var spv = s.params.slidesPerView; + var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length); + var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0); + // Next Slides + for (i = s.activeIndex + s.params.slidesPerView; i < maxIndex; i++) { + if (s.slides[i]) s.lazy.loadImageInSlide(i); + } + // Prev Slides + for (i = minIndex; i < s.activeIndex ; i++) { + if (s.slides[i]) s.lazy.loadImageInSlide(i); + } + } + else { + var nextSlide = s.wrapper.children('.' + s.params.slideNextClass); + if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index()); + + var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass); + if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index()); + } + } + }, + onTransitionStart: function () { + if (s.params.lazyLoading) { + if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) { + s.lazy.load(); + } + } + }, + onTransitionEnd: function () { + if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) { + s.lazy.load(); + } + } + }; + + + /*========================= + Scrollbar + ===========================*/ + s.scrollbar = { + isTouched: false, + setDragPosition: function (e) { + var sb = s.scrollbar; + var x = 0, y = 0; + var translate; + var pointerPosition = s.isHorizontal() ? + ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) : + ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ; + var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2; + var positionMin = -s.minTranslate() * sb.moveDivider; + var positionMax = -s.maxTranslate() * sb.moveDivider; + if (position < positionMin) { + position = positionMin; + } + else if (position > positionMax) { + position = positionMax; + } + position = -position / sb.moveDivider; + s.updateProgress(position); + s.setWrapperTranslate(position, true); + }, + dragStart: function (e) { + var sb = s.scrollbar; + sb.isTouched = true; + e.preventDefault(); + e.stopPropagation(); + + sb.setDragPosition(e); + clearTimeout(sb.dragTimeout); + + sb.track.transition(0); + if (s.params.scrollbarHide) { + sb.track.css('opacity', 1); + } + s.wrapper.transition(100); + sb.drag.transition(100); + s.emit('onScrollbarDragStart', s); + }, + dragMove: function (e) { + var sb = s.scrollbar; + if (!sb.isTouched) return; + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + sb.setDragPosition(e); + s.wrapper.transition(0); + sb.track.transition(0); + sb.drag.transition(0); + s.emit('onScrollbarDragMove', s); + }, + dragEnd: function (e) { + var sb = s.scrollbar; + if (!sb.isTouched) return; + sb.isTouched = false; + if (s.params.scrollbarHide) { + clearTimeout(sb.dragTimeout); + sb.dragTimeout = setTimeout(function () { + sb.track.css('opacity', 0); + sb.track.transition(400); + }, 1000); + + } + s.emit('onScrollbarDragEnd', s); + if (s.params.scrollbarSnapOnRelease) { + s.slideReset(); + } + }, + enableDraggable: function () { + var sb = s.scrollbar; + var target = s.support.touch ? sb.track : document; + $(sb.track).on(s.touchEvents.start, sb.dragStart); + $(target).on(s.touchEvents.move, sb.dragMove); + $(target).on(s.touchEvents.end, sb.dragEnd); + }, + disableDraggable: function () { + var sb = s.scrollbar; + var target = s.support.touch ? sb.track : document; + $(sb.track).off(s.touchEvents.start, sb.dragStart); + $(target).off(s.touchEvents.move, sb.dragMove); + $(target).off(s.touchEvents.end, sb.dragEnd); + }, + set: function () { + if (!s.params.scrollbar) return; + var sb = s.scrollbar; + sb.track = $(s.params.scrollbar); + if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) { + sb.track = s.container.find(s.params.scrollbar); + } + sb.drag = sb.track.find('.swiper-scrollbar-drag'); + if (sb.drag.length === 0) { + sb.drag = $('
'); + sb.track.append(sb.drag); + } + sb.drag[0].style.width = ''; + sb.drag[0].style.height = ''; + sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight; + + sb.divider = s.size / s.virtualSize; + sb.moveDivider = sb.divider * (sb.trackSize / s.size); + sb.dragSize = sb.trackSize * sb.divider; + + if (s.isHorizontal()) { + sb.drag[0].style.width = sb.dragSize + 'px'; + } + else { + sb.drag[0].style.height = sb.dragSize + 'px'; + } + + if (sb.divider >= 1) { + sb.track[0].style.display = 'none'; + } + else { + sb.track[0].style.display = ''; + } + if (s.params.scrollbarHide) { + sb.track[0].style.opacity = 0; + } + }, + setTranslate: function () { + if (!s.params.scrollbar) return; + var diff; + var sb = s.scrollbar; + var translate = s.translate || 0; + var newPos; + + var newSize = sb.dragSize; + newPos = (sb.trackSize - sb.dragSize) * s.progress; + if (s.rtl && s.isHorizontal()) { + newPos = -newPos; + if (newPos > 0) { + newSize = sb.dragSize - newPos; + newPos = 0; + } + else if (-newPos + sb.dragSize > sb.trackSize) { + newSize = sb.trackSize + newPos; + } + } + else { + if (newPos < 0) { + newSize = sb.dragSize + newPos; + newPos = 0; + } + else if (newPos + sb.dragSize > sb.trackSize) { + newSize = sb.trackSize - newPos; + } + } + if (s.isHorizontal()) { + if (s.support.transforms3d) { + sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)'); + } + else { + sb.drag.transform('translateX(' + (newPos) + 'px)'); + } + sb.drag[0].style.width = newSize + 'px'; + } + else { + if (s.support.transforms3d) { + sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)'); + } + else { + sb.drag.transform('translateY(' + (newPos) + 'px)'); + } + sb.drag[0].style.height = newSize + 'px'; + } + if (s.params.scrollbarHide) { + clearTimeout(sb.timeout); + sb.track[0].style.opacity = 1; + sb.timeout = setTimeout(function () { + sb.track[0].style.opacity = 0; + sb.track.transition(400); + }, 1000); + } + }, + setTransition: function (duration) { + if (!s.params.scrollbar) return; + s.scrollbar.drag.transition(duration); + } + }; + + /*========================= + Controller + ===========================*/ + s.controller = { + LinearSpline: function (x, y) { + this.x = x; + this.y = y; + this.lastIndex = x.length - 1; + // Given an x value (x2), return the expected y2 value: + // (x1,y1) is the known point before given value, + // (x3,y3) is the known point after given value. + var i1, i3; + var l = this.x.length; + + this.interpolate = function (x2) { + if (!x2) return 0; + + // Get the indexes of x1 and x3 (the array indexes before and after given x2): + i3 = binarySearch(this.x, x2); + i1 = i3 - 1; + + // We have our indexes i1 & i3, so we can calculate already: + // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1 + return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1]; + }; + + var binarySearch = (function() { + var maxIndex, minIndex, guess; + return function(array, val) { + minIndex = -1; + maxIndex = array.length; + while (maxIndex - minIndex > 1) + if (array[guess = maxIndex + minIndex >> 1] <= val) { + minIndex = guess; + } else { + maxIndex = guess; + } + return maxIndex; + }; + })(); + }, + //xxx: for now i will just save one spline function to to + getInterpolateFunction: function(c){ + if(!s.controller.spline) s.controller.spline = s.params.loop ? + new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) : + new s.controller.LinearSpline(s.snapGrid, c.snapGrid); + }, + setTranslate: function (translate, byController) { + var controlled = s.params.control; + var multiplier, controlledTranslate; + function setControlledTranslate(c) { + // this will create an Interpolate function based on the snapGrids + // x is the Grid of the scrolled scroller and y will be the controlled scroller + // it makes sense to create this only once and recall it for the interpolation + // the function does a lot of value caching for performance + translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate; + if (s.params.controlBy === 'slide') { + s.controller.getInterpolateFunction(c); + // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid + // but it did not work out + controlledTranslate = -s.controller.spline.interpolate(-translate); + } + + if(!controlledTranslate || s.params.controlBy === 'container'){ + multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate()); + controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate(); + } + + if (s.params.controlInverse) { + controlledTranslate = c.maxTranslate() - controlledTranslate; + } + c.updateProgress(controlledTranslate); + c.setWrapperTranslate(controlledTranslate, false, s); + c.updateActiveIndex(); + } + if (s.isArray(controlled)) { + for (var i = 0; i < controlled.length; i++) { + if (controlled[i] !== byController && controlled[i] instanceof Swiper) { + setControlledTranslate(controlled[i]); + } + } + } + else if (controlled instanceof Swiper && byController !== controlled) { + + setControlledTranslate(controlled); + } + }, + setTransition: function (duration, byController) { + var controlled = s.params.control; + var i; + function setControlledTransition(c) { + c.setWrapperTransition(duration, s); + if (duration !== 0) { + c.onTransitionStart(); + c.wrapper.transitionEnd(function(){ + if (!controlled) return; + if (c.params.loop && s.params.controlBy === 'slide') { + c.fixLoop(); + } + c.onTransitionEnd(); + + }); + } + } + if (s.isArray(controlled)) { + for (i = 0; i < controlled.length; i++) { + if (controlled[i] !== byController && controlled[i] instanceof Swiper) { + setControlledTransition(controlled[i]); + } + } + } + else if (controlled instanceof Swiper && byController !== controlled) { + setControlledTransition(controlled); + } + } + }; + + /*========================= + Hash Navigation + ===========================*/ + s.hashnav = { + init: function () { + if (!s.params.hashnav) return; + s.hashnav.initialized = true; + var hash = document.location.hash.replace('#', ''); + if (!hash) return; + var speed = 0; + for (var i = 0, length = s.slides.length; i < length; i++) { + var slide = s.slides.eq(i); + var slideHash = slide.attr('data-hash'); + if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) { + var index = slide.index(); + s.slideTo(index, speed, s.params.runCallbacksOnInit, true); + } + } + }, + setHash: function () { + if (!s.hashnav.initialized || !s.params.hashnav) return; + document.location.hash = s.slides.eq(s.activeIndex).attr('data-hash') || ''; + } + }; + + /*========================= + Keyboard Control + ===========================*/ + function handleKeyboard(e) { + if (e.originalEvent) e = e.originalEvent; //jquery fix + var kc = e.keyCode || e.charCode; + // Directions locks + if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) { + return false; + } + if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) { + return false; + } + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { + return; + } + if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) { + return; + } + if (kc === 37 || kc === 39 || kc === 38 || kc === 40) { + var inView = false; + //Check that swiper should be inside of visible area of window + if (s.container.parents('.swiper-slide').length > 0 && s.container.parents('.swiper-slide-active').length === 0) { + return; + } + var windowScroll = { + left: window.pageXOffset, + top: window.pageYOffset + }; + var windowWidth = window.innerWidth; + var windowHeight = window.innerHeight; + var swiperOffset = s.container.offset(); + if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft; + var swiperCoord = [ + [swiperOffset.left, swiperOffset.top], + [swiperOffset.left + s.width, swiperOffset.top], + [swiperOffset.left, swiperOffset.top + s.height], + [swiperOffset.left + s.width, swiperOffset.top + s.height] + ]; + for (var i = 0; i < swiperCoord.length; i++) { + var point = swiperCoord[i]; + if ( + point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth && + point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight + ) { + inView = true; + } + + } + if (!inView) return; + } + if (s.isHorizontal()) { + if (kc === 37 || kc === 39) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + } + if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext(); + if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev(); + } + else { + if (kc === 38 || kc === 40) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + } + if (kc === 40) s.slideNext(); + if (kc === 38) s.slidePrev(); + } + } + s.disableKeyboardControl = function () { + s.params.keyboardControl = false; + $(document).off('keydown', handleKeyboard); + }; + s.enableKeyboardControl = function () { + s.params.keyboardControl = true; + $(document).on('keydown', handleKeyboard); + }; + + + /*========================= + Mousewheel Control + ===========================*/ + s.mousewheel = { + event: false, + lastScrollTime: (new window.Date()).getTime() + }; + if (s.params.mousewheelControl) { + try { + new window.WheelEvent('wheel'); + s.mousewheel.event = 'wheel'; + } catch (e) { + if (window.WheelEvent || (s.container[0] && 'wheel' in s.container[0])) { + s.mousewheel.event = 'wheel'; + } + } + if (!s.mousewheel.event && window.WheelEvent) { + + } + if (!s.mousewheel.event && document.onmousewheel !== undefined) { + s.mousewheel.event = 'mousewheel'; + } + if (!s.mousewheel.event) { + s.mousewheel.event = 'DOMMouseScroll'; + } + } + function handleMousewheel(e) { + if (e.originalEvent) e = e.originalEvent; //jquery fix + var we = s.mousewheel.event; + var delta = 0; + var rtlFactor = s.rtl ? -1 : 1; + + //WebKits + if (we === 'mousewheel') { + if (s.params.mousewheelForceToAxis) { + if (s.isHorizontal()) { + if (Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY)) delta = e.wheelDeltaX * rtlFactor; + else return; + } + else { + if (Math.abs(e.wheelDeltaY) > Math.abs(e.wheelDeltaX)) delta = e.wheelDeltaY; + else return; + } + } + else { + delta = Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY) ? - e.wheelDeltaX * rtlFactor : - e.wheelDeltaY; + } + } + //Old FireFox + else if (we === 'DOMMouseScroll') delta = -e.detail; + //New FireFox + else if (we === 'wheel') { + if (s.params.mousewheelForceToAxis) { + if (s.isHorizontal()) { + if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) delta = -e.deltaX * rtlFactor; + else return; + } + else { + if (Math.abs(e.deltaY) > Math.abs(e.deltaX)) delta = -e.deltaY; + else return; + } + } + else { + delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? - e.deltaX * rtlFactor : - e.deltaY; + } + } + if (delta === 0) return; + + if (s.params.mousewheelInvert) delta = -delta; + + if (!s.params.freeMode) { + if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) { + if (delta < 0) { + if ((!s.isEnd || s.params.loop) && !s.animating) s.slideNext(); + else if (s.params.mousewheelReleaseOnEdges) return true; + } + else { + if ((!s.isBeginning || s.params.loop) && !s.animating) s.slidePrev(); + else if (s.params.mousewheelReleaseOnEdges) return true; + } + } + s.mousewheel.lastScrollTime = (new window.Date()).getTime(); + + } + else { + //Freemode or scrollContainer: + var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity; + var wasBeginning = s.isBeginning, + wasEnd = s.isEnd; + + if (position >= s.minTranslate()) position = s.minTranslate(); + if (position <= s.maxTranslate()) position = s.maxTranslate(); + + s.setWrapperTransition(0); + s.setWrapperTranslate(position); + s.updateProgress(); + s.updateActiveIndex(); + + if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) { + s.updateClasses(); + } + + if (s.params.freeModeSticky) { + clearTimeout(s.mousewheel.timeout); + s.mousewheel.timeout = setTimeout(function () { + s.slideReset(); + }, 300); + } + else { + if (s.params.lazyLoading && s.lazy) { + s.lazy.load(); + } + } + + // Return page scroll on edge positions + if (position === 0 || position === s.maxTranslate()) return; + } + if (s.params.autoplay) s.stopAutoplay(); + + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + return false; + } + s.disableMousewheelControl = function () { + if (!s.mousewheel.event) return false; + s.container.off(s.mousewheel.event, handleMousewheel); + return true; + }; + + s.enableMousewheelControl = function () { + if (!s.mousewheel.event) return false; + s.container.on(s.mousewheel.event, handleMousewheel); + return true; + }; + + + /*========================= + Parallax + ===========================*/ + function setParallaxTransform(el, progress) { + el = $(el); + var p, pX, pY; + var rtlFactor = s.rtl ? -1 : 1; + + p = el.attr('data-swiper-parallax') || '0'; + pX = el.attr('data-swiper-parallax-x'); + pY = el.attr('data-swiper-parallax-y'); + if (pX || pY) { + pX = pX || '0'; + pY = pY || '0'; + } + else { + if (s.isHorizontal()) { + pX = p; + pY = '0'; + } + else { + pY = p; + pX = '0'; + } + } + + if ((pX).indexOf('%') >= 0) { + pX = parseInt(pX, 10) * progress * rtlFactor + '%'; + } + else { + pX = pX * progress * rtlFactor + 'px' ; + } + if ((pY).indexOf('%') >= 0) { + pY = parseInt(pY, 10) * progress + '%'; + } + else { + pY = pY * progress + 'px' ; + } + + el.transform('translate3d(' + pX + ', ' + pY + ',0px)'); + } + s.parallax = { + setTranslate: function () { + s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){ + setParallaxTransform(this, s.progress); + + }); + s.slides.each(function () { + var slide = $(this); + slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () { + var progress = Math.min(Math.max(slide[0].progress, -1), 1); + setParallaxTransform(this, progress); + }); + }); + }, + setTransition: function (duration) { + if (typeof duration === 'undefined') duration = s.params.speed; + s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){ + var el = $(this); + var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration; + if (duration === 0) parallaxDuration = 0; + el.transition(parallaxDuration); + }); + } + }; + + + /*========================= + Plugins API. Collect all and init all plugins + ===========================*/ + s._plugins = []; + for (var plugin in s.plugins) { + var p = s.plugins[plugin](s, s.params[plugin]); + if (p) s._plugins.push(p); + } + // Method to call all plugins event/method + s.callPlugins = function (eventName) { + for (var i = 0; i < s._plugins.length; i++) { + if (eventName in s._plugins[i]) { + s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); + } + } + }; + + /*========================= + Events/Callbacks/Plugins Emitter + ===========================*/ + function normalizeEventName (eventName) { + if (eventName.indexOf('on') !== 0) { + if (eventName[0] !== eventName[0].toUpperCase()) { + eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1); + } + else { + eventName = 'on' + eventName; + } + } + return eventName; + } + s.emitterEventListeners = { + + }; + s.emit = function (eventName) { + // Trigger callbacks + if (s.params[eventName]) { + s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); + } + var i; + // Trigger events + if (s.emitterEventListeners[eventName]) { + for (i = 0; i < s.emitterEventListeners[eventName].length; i++) { + s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); + } + } + // Trigger plugins + if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); + }; + s.on = function (eventName, handler) { + eventName = normalizeEventName(eventName); + if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = []; + s.emitterEventListeners[eventName].push(handler); + return s; + }; + s.off = function (eventName, handler) { + var i; + eventName = normalizeEventName(eventName); + if (typeof handler === 'undefined') { + // Remove all handlers for such event + s.emitterEventListeners[eventName] = []; + return s; + } + if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return; + for (i = 0; i < s.emitterEventListeners[eventName].length; i++) { + if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1); + } + return s; + }; + s.once = function (eventName, handler) { + eventName = normalizeEventName(eventName); + var _handler = function () { + handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]); + s.off(eventName, _handler); + }; + s.on(eventName, _handler); + return s; + }; + + // Accessibility tools + s.a11y = { + makeFocusable: function ($el) { + $el.attr('tabIndex', '0'); + return $el; + }, + addRole: function ($el, role) { + $el.attr('role', role); + return $el; + }, + + addLabel: function ($el, label) { + $el.attr('aria-label', label); + return $el; + }, + + disable: function ($el) { + $el.attr('aria-disabled', true); + return $el; + }, + + enable: function ($el) { + $el.attr('aria-disabled', false); + return $el; + }, + + onEnterKey: function (event) { + if (event.keyCode !== 13) return; + if ($(event.target).is(s.params.nextButton)) { + s.onClickNext(event); + if (s.isEnd) { + s.a11y.notify(s.params.lastSlideMessage); + } + else { + s.a11y.notify(s.params.nextSlideMessage); + } + } + else if ($(event.target).is(s.params.prevButton)) { + s.onClickPrev(event); + if (s.isBeginning) { + s.a11y.notify(s.params.firstSlideMessage); + } + else { + s.a11y.notify(s.params.prevSlideMessage); + } + } + if ($(event.target).is('.' + s.params.bulletClass)) { + $(event.target)[0].click(); + } + }, + + liveRegion: $(''), + + notify: function (message) { + var notification = s.a11y.liveRegion; + if (notification.length === 0) return; + notification.html(''); + notification.html(message); + }, + init: function () { + // Setup accessibility + if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { + s.a11y.makeFocusable(s.nextButton); + s.a11y.addRole(s.nextButton, 'button'); + s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage); + } + if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { + s.a11y.makeFocusable(s.prevButton); + s.a11y.addRole(s.prevButton, 'button'); + s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage); + } + + $(s.container).append(s.a11y.liveRegion); + }, + initPagination: function () { + if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) { + s.bullets.each(function () { + var bullet = $(this); + s.a11y.makeFocusable(bullet); + s.a11y.addRole(bullet, 'button'); + s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1)); + }); + } + }, + destroy: function () { + if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove(); + } + }; + + + /*========================= + Init/Destroy + ===========================*/ + s.init = function () { + if (s.params.loop) s.createLoop(); + s.updateContainerSize(); + s.updateSlidesSize(); + s.updatePagination(); + if (s.params.scrollbar && s.scrollbar) { + s.scrollbar.set(); + if (s.params.scrollbarDraggable) { + s.scrollbar.enableDraggable(); + } + } + if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { + if (!s.params.loop) s.updateProgress(); + s.effects[s.params.effect].setTranslate(); + } + if (s.params.loop) { + s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit); + } + else { + s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit); + if (s.params.initialSlide === 0) { + if (s.parallax && s.params.parallax) s.parallax.setTranslate(); + if (s.lazy && s.params.lazyLoading) { + s.lazy.load(); + s.lazy.initialImageLoaded = true; + } + } + } + s.attachEvents(); + if (s.params.observer && s.support.observer) { + s.initObservers(); + } + if (s.params.preloadImages && !s.params.lazyLoading) { + s.preloadImages(); + } + if (s.params.autoplay) { + s.startAutoplay(); + } + if (s.params.keyboardControl) { + if (s.enableKeyboardControl) s.enableKeyboardControl(); + } + if (s.params.mousewheelControl) { + if (s.enableMousewheelControl) s.enableMousewheelControl(); + } + if (s.params.hashnav) { + if (s.hashnav) s.hashnav.init(); + } + if (s.params.a11y && s.a11y) s.a11y.init(); + s.emit('onInit', s); + }; + + // Cleanup dynamic styles + s.cleanupStyles = function () { + // Container + s.container.removeClass(s.classNames.join(' ')).removeAttr('style'); + + // Wrapper + s.wrapper.removeAttr('style'); + + // Slides + if (s.slides && s.slides.length) { + s.slides + .removeClass([ + s.params.slideVisibleClass, + s.params.slideActiveClass, + s.params.slideNextClass, + s.params.slidePrevClass + ].join(' ')) + .removeAttr('style') + .removeAttr('data-swiper-column') + .removeAttr('data-swiper-row'); + } + + // Pagination/Bullets + if (s.paginationContainer && s.paginationContainer.length) { + s.paginationContainer.removeClass(s.params.paginationHiddenClass); + } + if (s.bullets && s.bullets.length) { + s.bullets.removeClass(s.params.bulletActiveClass); + } + + // Buttons + if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass); + if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass); + + // Scrollbar + if (s.params.scrollbar && s.scrollbar) { + if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style'); + if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style'); + } + }; + + // Destroy + s.destroy = function (deleteInstance, cleanupStyles) { + // Detach evebts + s.detachEvents(); + // Stop autoplay + s.stopAutoplay(); + // Disable draggable + if (s.params.scrollbar && s.scrollbar) { + if (s.params.scrollbarDraggable) { + s.scrollbar.disableDraggable(); + } + } + // Destroy loop + if (s.params.loop) { + s.destroyLoop(); + } + // Cleanup styles + if (cleanupStyles) { + s.cleanupStyles(); + } + // Disconnect observer + s.disconnectObservers(); + // Disable keyboard/mousewheel + if (s.params.keyboardControl) { + if (s.disableKeyboardControl) s.disableKeyboardControl(); + } + if (s.params.mousewheelControl) { + if (s.disableMousewheelControl) s.disableMousewheelControl(); + } + // Disable a11y + if (s.params.a11y && s.a11y) s.a11y.destroy(); + // Destroy callback + s.emit('onDestroy'); + // Delete instance + if (deleteInstance !== false) s = null; + }; + + s.init(); + + + + // Return swiper instance + return s; + }; + + + /*================================================== + Prototype + ====================================================*/ + Swiper.prototype = { + isSafari: (function () { + var ua = navigator.userAgent.toLowerCase(); + return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0); + })(), + isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent), + isArray: function (arr) { + return Object.prototype.toString.apply(arr) === '[object Array]'; + }, + /*================================================== + Browser + ====================================================*/ + browser: { + ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled, + ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1) + }, + /*================================================== + Devices + ====================================================*/ + device: (function () { + var ua = navigator.userAgent; + var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); + var ipad = ua.match(/(iPad).*OS\s([\d_]+)/); + var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); + var iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/); + return { + ios: ipad || iphone || ipod, + android: android + }; + })(), + /*================================================== + Feature Detection + ====================================================*/ + support: { + touch : (window.Modernizr && Modernizr.touch === true) || (function () { + return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch); + })(), + + transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () { + var div = document.createElement('div').style; + return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div); + })(), + + flexbox: (function () { + var div = document.createElement('div').style; + var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' '); + for (var i = 0; i < styles.length; i++) { + if (styles[i] in div) return true; + } + })(), + + observer: (function () { + return ('MutationObserver' in window || 'WebkitMutationObserver' in window); + })() + }, + /*================================================== + Plugins + ====================================================*/ + plugins: {} + }; + + + /*=========================== + Get jQuery + ===========================*/ + + addLibraryPlugin($); + + var domLib = $; + + /*=========================== + Add .swiper plugin from Dom libraries + ===========================*/ + function addLibraryPlugin(lib) { + lib.fn.swiper = function (params) { + var firstInstance; + lib(this).each(function () { + var s = new Swiper(this, params); + if (!firstInstance) firstInstance = s; + }); + return firstInstance; + }; + } + + if (domLib) { + if (!('transitionEnd' in domLib.fn)) { + domLib.fn.transitionEnd = function (callback) { + var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'], + i, j, dom = this; + function fireCallBack(e) { + /*jshint validthis:true */ + if (e.target !== this) return; + callback.call(this, e); + for (i = 0; i < events.length; i++) { + dom.off(events[i], fireCallBack); + } + } + if (callback) { + for (i = 0; i < events.length; i++) { + dom.on(events[i], fireCallBack); + } + } + return this; + }; + } + if (!('transform' in domLib.fn)) { + domLib.fn.transform = function (transform) { + for (var i = 0; i < this.length; i++) { + var elStyle = this[i].style; + elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform; + } + return this; + }; + } + if (!('transition' in domLib.fn)) { + domLib.fn.transition = function (duration) { + if (typeof duration !== 'string') { + duration = duration + 'ms'; + } + for (var i = 0; i < this.length; i++) { + var elStyle = this[i].style; + elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration; + } + return this; + }; + } + } + + return Swiper; +})); +//# sourceMappingURL=maps/swiper.jquery.umd.js.map diff --git a/src/libs/swiper/js/swiper.jquery.umd.min.js b/src/libs/swiper/js/swiper.jquery.umd.min.js new file mode 100755 index 0000000..49f9b92 --- /dev/null +++ b/src/libs/swiper/js/swiper.jquery.umd.min.js @@ -0,0 +1,18 @@ +/** + * Swiper 3.3.1 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * + * http://www.idangero.us/swiper/ + * + * Copyright 2016, Vladimir Kharlampidi + * The iDangero.us + * http://www.idangero.us/ + * + * Licensed under MIT + * + * Released on: February 7, 2016 + */ +!function(e,a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):e.Swiper=a(e.jQuery)}(this,function(e){"use strict";function a(e){e.fn.swiper=function(a){var s;return e(this).each(function(){var e=new t(this,a);s||(s=e)}),s}}var t=function(a,s){function r(e){return Math.floor(e)}function i(){y.autoplayTimeoutId=setTimeout(function(){y.params.loop?(y.fixLoop(),y._slideNext(),y.emit("onAutoplay",y)):y.isEnd?s.autoplayStopOnLast?y.stopAutoplay():(y._slideTo(0),y.emit("onAutoplay",y)):(y._slideNext(),y.emit("onAutoplay",y))},y.params.autoplay)}function n(a,t){var s=e(a.target);if(!s.is(t))if("string"==typeof t)s=s.parents(t);else if(t.nodeType){var r;return s.parents().each(function(e,a){a===t&&(r=t)}),r?t:void 0}if(0!==s.length)return s[0]}function o(e,a){a=a||{};var t=window.MutationObserver||window.WebkitMutationObserver,s=new t(function(e){e.forEach(function(e){y.onResize(!0),y.emit("onObserverUpdate",y,e)})});s.observe(e,{attributes:"undefined"==typeof a.attributes?!0:a.attributes,childList:"undefined"==typeof a.childList?!0:a.childList,characterData:"undefined"==typeof a.characterData?!0:a.characterData}),y.observers.push(s)}function l(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!y.params.allowSwipeToNext&&(y.isHorizontal()&&39===a||!y.isHorizontal()&&40===a))return!1;if(!y.params.allowSwipeToPrev&&(y.isHorizontal()&&37===a||!y.isHorizontal()&&38===a))return!1;if(!(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||document.activeElement&&document.activeElement.nodeName&&("input"===document.activeElement.nodeName.toLowerCase()||"textarea"===document.activeElement.nodeName.toLowerCase()))){if(37===a||39===a||38===a||40===a){var t=!1;if(y.container.parents(".swiper-slide").length>0&&0===y.container.parents(".swiper-slide-active").length)return;var s={left:window.pageXOffset,top:window.pageYOffset},r=window.innerWidth,i=window.innerHeight,n=y.container.offset();y.rtl&&(n.left=n.left-y.container[0].scrollLeft);for(var o=[[n.left,n.top],[n.left+y.width,n.top],[n.left,n.top+y.height],[n.left+y.width,n.top+y.height]],l=0;l=s.left&&p[0]<=s.left+r&&p[1]>=s.top&&p[1]<=s.top+i&&(t=!0)}if(!t)return}y.isHorizontal()?((37===a||39===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!y.rtl||37===a&&y.rtl)&&y.slideNext(),(37===a&&!y.rtl||39===a&&y.rtl)&&y.slidePrev()):((38===a||40===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&y.slideNext(),38===a&&y.slidePrev())}}function p(e){e.originalEvent&&(e=e.originalEvent);var a=y.mousewheel.event,t=0,s=y.rtl?-1:1;if("mousewheel"===a)if(y.params.mousewheelForceToAxis)if(y.isHorizontal()){if(!(Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)))return;t=e.wheelDeltaX*s}else{if(!(Math.abs(e.wheelDeltaY)>Math.abs(e.wheelDeltaX)))return;t=e.wheelDeltaY}else t=Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)?-e.wheelDeltaX*s:-e.wheelDeltaY;else if("DOMMouseScroll"===a)t=-e.detail;else if("wheel"===a)if(y.params.mousewheelForceToAxis)if(y.isHorizontal()){if(!(Math.abs(e.deltaX)>Math.abs(e.deltaY)))return;t=-e.deltaX*s}else{if(!(Math.abs(e.deltaY)>Math.abs(e.deltaX)))return;t=-e.deltaY}else t=Math.abs(e.deltaX)>Math.abs(e.deltaY)?-e.deltaX*s:-e.deltaY;if(0!==t){if(y.params.mousewheelInvert&&(t=-t),y.params.freeMode){var r=y.getWrapperTranslate()+t*y.params.mousewheelSensitivity,i=y.isBeginning,n=y.isEnd;if(r>=y.minTranslate()&&(r=y.minTranslate()),r<=y.maxTranslate()&&(r=y.maxTranslate()),y.setWrapperTransition(0),y.setWrapperTranslate(r),y.updateProgress(),y.updateActiveIndex(),(!i&&y.isBeginning||!n&&y.isEnd)&&y.updateClasses(),y.params.freeModeSticky?(clearTimeout(y.mousewheel.timeout),y.mousewheel.timeout=setTimeout(function(){y.slideReset()},300)):y.params.lazyLoading&&y.lazy&&y.lazy.load(),0===r||r===y.maxTranslate())return}else{if((new window.Date).getTime()-y.mousewheel.lastScrollTime>60)if(0>t)if(y.isEnd&&!y.params.loop||y.animating){if(y.params.mousewheelReleaseOnEdges)return!0}else y.slideNext();else if(y.isBeginning&&!y.params.loop||y.animating){if(y.params.mousewheelReleaseOnEdges)return!0}else y.slidePrev();y.mousewheel.lastScrollTime=(new window.Date).getTime()}return y.params.autoplay&&y.stopAutoplay(),e.preventDefault?e.preventDefault():e.returnValue=!1,!1}}function d(a,t){a=e(a);var s,r,i,n=y.rtl?-1:1;s=a.attr("data-swiper-parallax")||"0",r=a.attr("data-swiper-parallax-x"),i=a.attr("data-swiper-parallax-y"),r||i?(r=r||"0",i=i||"0"):y.isHorizontal()?(r=s,i="0"):(i=s,r="0"),r=r.indexOf("%")>=0?parseInt(r,10)*t*n+"%":r*t*n+"px",i=i.indexOf("%")>=0?parseInt(i,10)*t+"%":i*t+"px",a.transform("translate3d("+r+", "+i+",0px)")}function u(e){return 0!==e.indexOf("on")&&(e=e[0]!==e[0].toUpperCase()?"on"+e[0].toUpperCase()+e.substring(1):"on"+e),e}if(!(this instanceof t))return new t(a,s);var c={direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,autoplay:!1,autoplayDisableOnInteraction:!0,autoplayStopOnLast:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flip:{slideShadows:!0,limitRotation:!0},cube:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fade:{crossFade:!1},parallax:!1,scrollbar:null,scrollbarHide:!0,scrollbarDraggable:!1,scrollbarSnapOnRelease:!1,keyboardControl:!1,mousewheelControl:!1,mousewheelReleaseOnEdges:!1,mousewheelInvert:!1,mousewheelForceToAxis:!1,mousewheelSensitivity:1,hashnav:!1,breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,onlyExternal:!1,threshold:0,touchMoveStopPropagation:!0,uniqueNavElements:!0,pagination:null,paginationElement:"span",paginationClickable:!1,paginationHide:!1,paginationBulletRender:null,paginationProgressRender:null,paginationFractionRender:null,paginationCustomRender:null,paginationType:"bullets",resistance:!0,resistanceRatio:.85,nextButton:null,prevButton:null,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,lazyLoading:!1,lazyLoadingInPrevNext:!1,lazyLoadingInPrevNextAmount:1,lazyLoadingOnTransitionStart:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,control:void 0,controlInverse:!1,controlBy:"slide",allowSwipeToPrev:!0,allowSwipeToNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slidePrevClass:"swiper-slide-prev",wrapperClass:"swiper-wrapper",bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",buttonDisabledClass:"swiper-button-disabled",paginationCurrentClass:"swiper-pagination-current",paginationTotalClass:"swiper-pagination-total",paginationHiddenClass:"swiper-pagination-hidden",paginationProgressbarClass:"swiper-pagination-progressbar",observer:!1,observeParents:!1,a11y:!1,prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",runCallbacksOnInit:!0},m=s&&s.virtualTranslate;s=s||{};var f={};for(var g in s)if("object"!=typeof s[g]||null===s[g]||(s[g].nodeType||s[g]===window||s[g]===document||"undefined"!=typeof Dom7&&s[g]instanceof Dom7||"undefined"!=typeof jQuery&&s[g]instanceof jQuery))f[g]=s[g];else{f[g]={};for(var h in s[g])f[g][h]=s[g][h]}for(var v in c)if("undefined"==typeof s[v])s[v]=c[v];else if("object"==typeof s[v])for(var w in c[v])"undefined"==typeof s[v][w]&&(s[v][w]=c[v][w]);var y=this;if(y.params=s,y.originalParams=f,y.classNames=[],"undefined"!=typeof e&&"undefined"!=typeof Dom7&&(e=Dom7),("undefined"!=typeof e||(e="undefined"==typeof Dom7?window.Dom7||window.Zepto||window.jQuery:Dom7))&&(y.$=e,y.currentBreakpoint=void 0,y.getActiveBreakpoint=function(){if(!y.params.breakpoints)return!1;var e,a=!1,t=[];for(e in y.params.breakpoints)y.params.breakpoints.hasOwnProperty(e)&&t.push(e);t.sort(function(e,a){return parseInt(e,10)>parseInt(a,10)});for(var s=0;s=window.innerWidth&&!a&&(a=e);return a||"max"},y.setBreakpoint=function(){var e=y.getActiveBreakpoint();if(e&&y.currentBreakpoint!==e){var a=e in y.params.breakpoints?y.params.breakpoints[e]:y.originalParams,t=y.params.loop&&a.slidesPerView!==y.params.slidesPerView;for(var s in a)y.params[s]=a[s];y.currentBreakpoint=e,t&&y.destroyLoop&&y.reLoop(!0)}},y.params.breakpoints&&y.setBreakpoint(),y.container=e(a),0!==y.container.length)){if(y.container.length>1){var b=[];return y.container.each(function(){b.push(new t(this,s))}),b}y.container[0].swiper=y,y.container.data("swiper",y),y.classNames.push("swiper-container-"+y.params.direction),y.params.freeMode&&y.classNames.push("swiper-container-free-mode"),y.support.flexbox||(y.classNames.push("swiper-container-no-flexbox"),y.params.slidesPerColumn=1),y.params.autoHeight&&y.classNames.push("swiper-container-autoheight"),(y.params.parallax||y.params.watchSlidesVisibility)&&(y.params.watchSlidesProgress=!0),["cube","coverflow","flip"].indexOf(y.params.effect)>=0&&(y.support.transforms3d?(y.params.watchSlidesProgress=!0,y.classNames.push("swiper-container-3d")):y.params.effect="slide"),"slide"!==y.params.effect&&y.classNames.push("swiper-container-"+y.params.effect),"cube"===y.params.effect&&(y.params.resistanceRatio=0,y.params.slidesPerView=1,y.params.slidesPerColumn=1,y.params.slidesPerGroup=1,y.params.centeredSlides=!1,y.params.spaceBetween=0,y.params.virtualTranslate=!0,y.params.setWrapperSize=!1),("fade"===y.params.effect||"flip"===y.params.effect)&&(y.params.slidesPerView=1,y.params.slidesPerColumn=1,y.params.slidesPerGroup=1,y.params.watchSlidesProgress=!0,y.params.spaceBetween=0,y.params.setWrapperSize=!1,"undefined"==typeof m&&(y.params.virtualTranslate=!0)),y.params.grabCursor&&y.support.touch&&(y.params.grabCursor=!1),y.wrapper=y.container.children("."+y.params.wrapperClass),y.params.pagination&&(y.paginationContainer=e(y.params.pagination),y.params.uniqueNavElements&&"string"==typeof y.params.pagination&&y.paginationContainer.length>1&&1===y.container.find(y.params.pagination).length&&(y.paginationContainer=y.container.find(y.params.pagination)),"bullets"===y.params.paginationType&&y.params.paginationClickable?y.paginationContainer.addClass("swiper-pagination-clickable"):y.params.paginationClickable=!1,y.paginationContainer.addClass("swiper-pagination-"+y.params.paginationType)),(y.params.nextButton||y.params.prevButton)&&(y.params.nextButton&&(y.nextButton=e(y.params.nextButton),y.params.uniqueNavElements&&"string"==typeof y.params.nextButton&&y.nextButton.length>1&&1===y.container.find(y.params.nextButton).length&&(y.nextButton=y.container.find(y.params.nextButton))),y.params.prevButton&&(y.prevButton=e(y.params.prevButton),y.params.uniqueNavElements&&"string"==typeof y.params.prevButton&&y.prevButton.length>1&&1===y.container.find(y.params.prevButton).length&&(y.prevButton=y.container.find(y.params.prevButton)))),y.isHorizontal=function(){return"horizontal"===y.params.direction},y.rtl=y.isHorizontal()&&("rtl"===y.container[0].dir.toLowerCase()||"rtl"===y.container.css("direction")),y.rtl&&y.classNames.push("swiper-container-rtl"),y.rtl&&(y.wrongRTL="-webkit-box"===y.wrapper.css("display")),y.params.slidesPerColumn>1&&y.classNames.push("swiper-container-multirow"),y.device.android&&y.classNames.push("swiper-container-android"),y.container.addClass(y.classNames.join(" ")),y.translate=0,y.progress=0,y.velocity=0,y.lockSwipeToNext=function(){y.params.allowSwipeToNext=!1},y.lockSwipeToPrev=function(){y.params.allowSwipeToPrev=!1},y.lockSwipes=function(){y.params.allowSwipeToNext=y.params.allowSwipeToPrev=!1},y.unlockSwipeToNext=function(){y.params.allowSwipeToNext=!0},y.unlockSwipeToPrev=function(){y.params.allowSwipeToPrev=!0},y.unlockSwipes=function(){y.params.allowSwipeToNext=y.params.allowSwipeToPrev=!0},y.params.grabCursor&&(y.container[0].style.cursor="move",y.container[0].style.cursor="-webkit-grab",y.container[0].style.cursor="-moz-grab",y.container[0].style.cursor="grab"),y.imagesToLoad=[],y.imagesLoaded=0,y.loadImage=function(e,a,t,s,r){function i(){r&&r()}var n;e.complete&&s?i():a?(n=new window.Image,n.onload=i,n.onerror=i,t&&(n.srcset=t),a&&(n.src=a)):i()},y.preloadImages=function(){function e(){"undefined"!=typeof y&&null!==y&&(void 0!==y.imagesLoaded&&y.imagesLoaded++,y.imagesLoaded===y.imagesToLoad.length&&(y.params.updateOnImagesReady&&y.update(),y.emit("onImagesReady",y)))}y.imagesToLoad=y.container.find("img");for(var a=0;a=0&&(a=parseFloat(a.replace("%",""))/100*y.size),y.virtualSize=-a,y.rtl?y.slides.css({marginLeft:"",marginTop:""}):y.slides.css({marginRight:"",marginBottom:""});var n;y.params.slidesPerColumn>1&&(n=Math.floor(y.slides.length/y.params.slidesPerColumn)===y.slides.length/y.params.slidesPerColumn?y.slides.length:Math.ceil(y.slides.length/y.params.slidesPerColumn)*y.params.slidesPerColumn,"auto"!==y.params.slidesPerView&&"row"===y.params.slidesPerColumnFill&&(n=Math.max(n,y.params.slidesPerView*y.params.slidesPerColumn)));var o,l=y.params.slidesPerColumn,p=n/l,d=p-(y.params.slidesPerColumn*p-y.slides.length);for(e=0;e1){var c,m,f;"column"===y.params.slidesPerColumnFill?(m=Math.floor(e/l),f=e-m*l,(m>d||m===d&&f===l-1)&&++f>=l&&(f=0,m++),c=m+f*n/l,u.css({"-webkit-box-ordinal-group":c,"-moz-box-ordinal-group":c,"-ms-flex-order":c,"-webkit-order":c,order:c})):(f=Math.floor(e/p),m=e-f*p),u.css({"margin-top":0!==f&&y.params.spaceBetween&&y.params.spaceBetween+"px"}).attr("data-swiper-column",m).attr("data-swiper-row",f)}"none"!==u.css("display")&&("auto"===y.params.slidesPerView?(o=y.isHorizontal()?u.outerWidth(!0):u.outerHeight(!0),y.params.roundLengths&&(o=r(o))):(o=(y.size-(y.params.slidesPerView-1)*a)/y.params.slidesPerView,y.params.roundLengths&&(o=r(o)),y.isHorizontal()?y.slides[e].style.width=o+"px":y.slides[e].style.height=o+"px"),y.slides[e].swiperSlideSize=o,y.slidesSizesGrid.push(o),y.params.centeredSlides?(t=t+o/2+s/2+a,0===e&&(t=t-y.size/2-a),Math.abs(t)<.001&&(t=0),i%y.params.slidesPerGroup===0&&y.snapGrid.push(t),y.slidesGrid.push(t)):(i%y.params.slidesPerGroup===0&&y.snapGrid.push(t),y.slidesGrid.push(t),t=t+o+a),y.virtualSize+=o+a,s=o,i++)}y.virtualSize=Math.max(y.virtualSize,y.size)+y.params.slidesOffsetAfter;var g;if(y.rtl&&y.wrongRTL&&("slide"===y.params.effect||"coverflow"===y.params.effect)&&y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}),(!y.support.flexbox||y.params.setWrapperSize)&&(y.isHorizontal()?y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}):y.wrapper.css({height:y.virtualSize+y.params.spaceBetween+"px"})),y.params.slidesPerColumn>1&&(y.virtualSize=(o+y.params.spaceBetween)*n,y.virtualSize=Math.ceil(y.virtualSize/y.params.slidesPerColumn)-y.params.spaceBetween,y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}),y.params.centeredSlides)){for(g=[],e=0;e1&&y.snapGrid.push(y.virtualSize-y.size)}0===y.snapGrid.length&&(y.snapGrid=[0]),0!==y.params.spaceBetween&&(y.isHorizontal()?y.rtl?y.slides.css({marginLeft:a+"px"}):y.slides.css({marginRight:a+"px"}):y.slides.css({marginBottom:a+"px"})),y.params.watchSlidesProgress&&y.updateSlidesOffset()}},y.updateSlidesOffset=function(){for(var e=0;e=0&&i0&&n<=y.size||0>=i&&n>=y.size;o&&y.slides.eq(t).addClass(y.params.slideVisibleClass)}s.progress=y.rtl?-r:r}}},y.updateProgress=function(e){"undefined"==typeof e&&(e=y.translate||0);var a=y.maxTranslate()-y.minTranslate(),t=y.isBeginning,s=y.isEnd;0===a?(y.progress=0,y.isBeginning=y.isEnd=!0):(y.progress=(e-y.minTranslate())/a,y.isBeginning=y.progress<=0,y.isEnd=y.progress>=1),y.isBeginning&&!t&&y.emit("onReachBeginning",y),y.isEnd&&!s&&y.emit("onReachEnd",y),y.params.watchSlidesProgress&&y.updateSlidesProgress(e),y.emit("onProgress",y,y.progress)},y.updateActiveIndex=function(){var e,a,t,s=y.rtl?y.translate:-y.translate;for(a=0;a=y.slidesGrid[a]&&s=y.slidesGrid[a]&&s=y.slidesGrid[a]&&(e=a);(0>e||"undefined"==typeof e)&&(e=0),t=Math.floor(e/y.params.slidesPerGroup),t>=y.snapGrid.length&&(t=y.snapGrid.length-1),e!==y.activeIndex&&(y.snapIndex=t,y.previousIndex=y.activeIndex,y.activeIndex=e,y.updateClasses())},y.updateClasses=function(){y.slides.removeClass(y.params.slideActiveClass+" "+y.params.slideNextClass+" "+y.params.slidePrevClass);var a=y.slides.eq(y.activeIndex);a.addClass(y.params.slideActiveClass);var t=a.next("."+y.params.slideClass).addClass(y.params.slideNextClass);y.params.loop&&0===t.length&&y.slides.eq(0).addClass(y.params.slideNextClass);var s=a.prev("."+y.params.slideClass).addClass(y.params.slidePrevClass);if(y.params.loop&&0===s.length&&y.slides.eq(-1).addClass(y.params.slidePrevClass),y.paginationContainer&&y.paginationContainer.length>0){var r,i=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length;if(y.params.loop?(r=Math.ceil((y.activeIndex-y.loopedSlides)/y.params.slidesPerGroup),r>y.slides.length-1-2*y.loopedSlides&&(r-=y.slides.length-2*y.loopedSlides),r>i-1&&(r-=i),0>r&&"bullets"!==y.params.paginationType&&(r=i+r)):r="undefined"!=typeof y.snapIndex?y.snapIndex:y.activeIndex||0,"bullets"===y.params.paginationType&&y.bullets&&y.bullets.length>0&&(y.bullets.removeClass(y.params.bulletActiveClass),y.paginationContainer.length>1?y.bullets.each(function(){e(this).index()===r&&e(this).addClass(y.params.bulletActiveClass)}):y.bullets.eq(r).addClass(y.params.bulletActiveClass)),"fraction"===y.params.paginationType&&(y.paginationContainer.find("."+y.params.paginationCurrentClass).text(r+1),y.paginationContainer.find("."+y.params.paginationTotalClass).text(i)),"progress"===y.params.paginationType){var n=(r+1)/i,o=n,l=1;y.isHorizontal()||(l=n,o=1),y.paginationContainer.find("."+y.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+o+") scaleY("+l+")").transition(y.params.speed)}"custom"===y.params.paginationType&&y.params.paginationCustomRender&&(y.paginationContainer.html(y.params.paginationCustomRender(y,r+1,i)),y.emit("onPaginationRendered",y,y.paginationContainer[0]))}y.params.loop||(y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.isBeginning?(y.prevButton.addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(y.prevButton)):(y.prevButton.removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(y.prevButton))),y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.isEnd?(y.nextButton.addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(y.nextButton)):(y.nextButton.removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(y.nextButton))))},y.updatePagination=function(){if(y.params.pagination&&y.paginationContainer&&y.paginationContainer.length>0){var e="";if("bullets"===y.params.paginationType){for(var a=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length,t=0;a>t;t++)e+=y.params.paginationBulletRender?y.params.paginationBulletRender(t,y.params.bulletClass):"<"+y.params.paginationElement+' class="'+y.params.bulletClass+'">";y.paginationContainer.html(e),y.bullets=y.paginationContainer.find("."+y.params.bulletClass),y.params.paginationClickable&&y.params.a11y&&y.a11y&&y.a11y.initPagination()}"fraction"===y.params.paginationType&&(e=y.params.paginationFractionRender?y.params.paginationFractionRender(y,y.params.paginationCurrentClass,y.params.paginationTotalClass):' / ',y.paginationContainer.html(e)),"progress"===y.params.paginationType&&(e=y.params.paginationProgressRender?y.params.paginationProgressRender(y,y.params.paginationProgressbarClass):'',y.paginationContainer.html(e)),"custom"!==y.params.paginationType&&y.emit("onPaginationRendered",y,y.paginationContainer[0])}},y.update=function(e){function a(){s=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate()),y.setWrapperTranslate(s),y.updateActiveIndex(),y.updateClasses()}if(y.updateContainerSize(),y.updateSlidesSize(),y.updateProgress(),y.updatePagination(),y.updateClasses(),y.params.scrollbar&&y.scrollbar&&y.scrollbar.set(),e){var t,s;y.controller&&y.controller.spline&&(y.controller.spline=void 0),y.params.freeMode?(a(),y.params.autoHeight&&y.updateAutoHeight()):(t=("auto"===y.params.slidesPerView||y.params.slidesPerView>1)&&y.isEnd&&!y.params.centeredSlides?y.slideTo(y.slides.length-1,0,!1,!0):y.slideTo(y.activeIndex,0,!1,!0),t||a())}else y.params.autoHeight&&y.updateAutoHeight()},y.onResize=function(e){y.params.breakpoints&&y.setBreakpoint();var a=y.params.allowSwipeToPrev,t=y.params.allowSwipeToNext;y.params.allowSwipeToPrev=y.params.allowSwipeToNext=!0,y.updateContainerSize(),y.updateSlidesSize(),("auto"===y.params.slidesPerView||y.params.freeMode||e)&&y.updatePagination(),y.params.scrollbar&&y.scrollbar&&y.scrollbar.set(),y.controller&&y.controller.spline&&(y.controller.spline=void 0);var s=!1;if(y.params.freeMode){var r=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate());y.setWrapperTranslate(r),y.updateActiveIndex(),y.updateClasses(),y.params.autoHeight&&y.updateAutoHeight()}else y.updateClasses(),s=("auto"===y.params.slidesPerView||y.params.slidesPerView>1)&&y.isEnd&&!y.params.centeredSlides?y.slideTo(y.slides.length-1,0,!1,!0):y.slideTo(y.activeIndex,0,!1,!0);y.params.lazyLoading&&!s&&y.lazy&&y.lazy.load(),y.params.allowSwipeToPrev=a,y.params.allowSwipeToNext=t};var x=["mousedown","mousemove","mouseup"];window.navigator.pointerEnabled?x=["pointerdown","pointermove","pointerup"]:window.navigator.msPointerEnabled&&(x=["MSPointerDown","MSPointerMove","MSPointerUp"]),y.touchEvents={start:y.support.touch||!y.params.simulateTouch?"touchstart":x[0],move:y.support.touch||!y.params.simulateTouch?"touchmove":x[1],end:y.support.touch||!y.params.simulateTouch?"touchend":x[2]},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===y.params.touchEventsTarget?y.container:y.wrapper).addClass("swiper-wp8-"+y.params.direction),y.initEvents=function(e){var a=e?"off":"on",t=e?"removeEventListener":"addEventListener",r="container"===y.params.touchEventsTarget?y.container[0]:y.wrapper[0],i=y.support.touch?r:document,n=y.params.nested?!0:!1;y.browser.ie?(r[t](y.touchEvents.start,y.onTouchStart,!1),i[t](y.touchEvents.move,y.onTouchMove,n),i[t](y.touchEvents.end,y.onTouchEnd,!1)):(y.support.touch&&(r[t](y.touchEvents.start,y.onTouchStart,!1),r[t](y.touchEvents.move,y.onTouchMove,n),r[t](y.touchEvents.end,y.onTouchEnd,!1)),!s.simulateTouch||y.device.ios||y.device.android||(r[t]("mousedown",y.onTouchStart,!1),document[t]("mousemove",y.onTouchMove,n),document[t]("mouseup",y.onTouchEnd,!1))),window[t]("resize",y.onResize),y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.nextButton[a]("click",y.onClickNext),y.params.a11y&&y.a11y&&y.nextButton[a]("keydown",y.a11y.onEnterKey)),y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.prevButton[a]("click",y.onClickPrev),y.params.a11y&&y.a11y&&y.prevButton[a]("keydown",y.a11y.onEnterKey)),y.params.pagination&&y.params.paginationClickable&&(y.paginationContainer[a]("click","."+y.params.bulletClass,y.onClickIndex),y.params.a11y&&y.a11y&&y.paginationContainer[a]("keydown","."+y.params.bulletClass,y.a11y.onEnterKey)),(y.params.preventClicks||y.params.preventClicksPropagation)&&r[t]("click",y.preventClicks,!0)},y.attachEvents=function(){y.initEvents()},y.detachEvents=function(){y.initEvents(!0)},y.allowClick=!0,y.preventClicks=function(e){y.allowClick||(y.params.preventClicks&&e.preventDefault(),y.params.preventClicksPropagation&&y.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},y.onClickNext=function(e){e.preventDefault(),(!y.isEnd||y.params.loop)&&y.slideNext()},y.onClickPrev=function(e){e.preventDefault(),(!y.isBeginning||y.params.loop)&&y.slidePrev()},y.onClickIndex=function(a){a.preventDefault();var t=e(this).index()*y.params.slidesPerGroup;y.params.loop&&(t+=y.loopedSlides),y.slideTo(t)},y.updateClickedSlide=function(a){var t=n(a,"."+y.params.slideClass),s=!1;if(t)for(var r=0;ry.slides.length-y.loopedSlides+y.params.slidesPerView/2?(y.fixLoop(),o=y.wrapper.children("."+y.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.swiper-slide-duplicate)').eq(0).index(),setTimeout(function(){y.slideTo(o)},0)):y.slideTo(o):o>y.slides.length-y.params.slidesPerView?(y.fixLoop(),o=y.wrapper.children("."+y.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.swiper-slide-duplicate)').eq(0).index(),setTimeout(function(){y.slideTo(o)},0)):y.slideTo(o)}else y.slideTo(o)}};var T,S,C,z,M,P,I,k,E,B,D="input, select, textarea, button",L=Date.now(),H=[];y.animating=!1,y.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var G,A;if(y.onTouchStart=function(a){if(a.originalEvent&&(a=a.originalEvent),G="touchstart"===a.type,G||!("which"in a)||3!==a.which){if(y.params.noSwiping&&n(a,"."+y.params.noSwipingClass))return void(y.allowClick=!0);if(!y.params.swipeHandler||n(a,y.params.swipeHandler)){var t=y.touches.currentX="touchstart"===a.type?a.targetTouches[0].pageX:a.pageX,s=y.touches.currentY="touchstart"===a.type?a.targetTouches[0].pageY:a.pageY;if(!(y.device.ios&&y.params.iOSEdgeSwipeDetection&&t<=y.params.iOSEdgeSwipeThreshold)){if(T=!0,S=!1,C=!0,M=void 0,A=void 0,y.touches.startX=t,y.touches.startY=s,z=Date.now(),y.allowClick=!0,y.updateContainerSize(),y.swipeDirection=void 0,y.params.threshold>0&&(k=!1),"touchstart"!==a.type){var r=!0;e(a.target).is(D)&&(r=!1),document.activeElement&&e(document.activeElement).is(D)&&document.activeElement.blur(),r&&a.preventDefault()}y.emit("onTouchStart",y,a)}}}},y.onTouchMove=function(a){if(a.originalEvent&&(a=a.originalEvent),!G||"mousemove"!==a.type){if(a.preventedByNestedSwiper)return y.touches.startX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,void(y.touches.startY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY);if(y.params.onlyExternal)return y.allowClick=!1,void(T&&(y.touches.startX=y.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,y.touches.startY=y.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,z=Date.now()));if(G&&document.activeElement&&a.target===document.activeElement&&e(a.target).is(D))return S=!0,void(y.allowClick=!1);if(C&&y.emit("onTouchMove",y,a),!(a.targetTouches&&a.targetTouches.length>1)){if(y.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,y.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,"undefined"==typeof M){var t=180*Math.atan2(Math.abs(y.touches.currentY-y.touches.startY),Math.abs(y.touches.currentX-y.touches.startX))/Math.PI;M=y.isHorizontal()?t>y.params.touchAngle:90-t>y.params.touchAngle}if(M&&y.emit("onTouchMoveOpposite",y,a),"undefined"==typeof A&&y.browser.ieTouch&&(y.touches.currentX!==y.touches.startX||y.touches.currentY!==y.touches.startY)&&(A=!0),T){if(M)return void(T=!1);if(A||!y.browser.ieTouch){y.allowClick=!1,y.emit("onSliderMove",y,a),a.preventDefault(),y.params.touchMoveStopPropagation&&!y.params.nested&&a.stopPropagation(),S||(s.loop&&y.fixLoop(),I=y.getWrapperTranslate(),y.setWrapperTransition(0),y.animating&&y.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),y.params.autoplay&&y.autoplaying&&(y.params.autoplayDisableOnInteraction?y.stopAutoplay():y.pauseAutoplay()),B=!1,y.params.grabCursor&&(y.container[0].style.cursor="move",y.container[0].style.cursor="-webkit-grabbing",y.container[0].style.cursor="-moz-grabbin",y.container[0].style.cursor="grabbing")),S=!0;var r=y.touches.diff=y.isHorizontal()?y.touches.currentX-y.touches.startX:y.touches.currentY-y.touches.startY;r*=y.params.touchRatio,y.rtl&&(r=-r),y.swipeDirection=r>0?"prev":"next",P=r+I;var i=!0;if(r>0&&P>y.minTranslate()?(i=!1, +y.params.resistance&&(P=y.minTranslate()-1+Math.pow(-y.minTranslate()+I+r,y.params.resistanceRatio))):0>r&&PP&&(P=I),!y.params.allowSwipeToPrev&&"prev"===y.swipeDirection&&P>I&&(P=I),y.params.followFinger){if(y.params.threshold>0){if(!(Math.abs(r)>y.params.threshold||k))return void(P=I);if(!k)return k=!0,y.touches.startX=y.touches.currentX,y.touches.startY=y.touches.currentY,P=I,void(y.touches.diff=y.isHorizontal()?y.touches.currentX-y.touches.startX:y.touches.currentY-y.touches.startY)}(y.params.freeMode||y.params.watchSlidesProgress)&&y.updateActiveIndex(),y.params.freeMode&&(0===H.length&&H.push({position:y.touches[y.isHorizontal()?"startX":"startY"],time:z}),H.push({position:y.touches[y.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),y.updateProgress(P),y.setWrapperTranslate(P)}}}}}},y.onTouchEnd=function(a){if(a.originalEvent&&(a=a.originalEvent),C&&y.emit("onTouchEnd",y,a),C=!1,T){y.params.grabCursor&&S&&T&&(y.container[0].style.cursor="move",y.container[0].style.cursor="-webkit-grab",y.container[0].style.cursor="-moz-grab",y.container[0].style.cursor="grab");var t=Date.now(),s=t-z;if(y.allowClick&&(y.updateClickedSlide(a),y.emit("onTap",y,a),300>s&&t-L>300&&(E&&clearTimeout(E),E=setTimeout(function(){y&&(y.params.paginationHide&&y.paginationContainer.length>0&&!e(a.target).hasClass(y.params.bulletClass)&&y.paginationContainer.toggleClass(y.params.paginationHiddenClass),y.emit("onClick",y,a))},300)),300>s&&300>t-L&&(E&&clearTimeout(E),y.emit("onDoubleTap",y,a))),L=Date.now(),setTimeout(function(){y&&(y.allowClick=!0)},0),!T||!S||!y.swipeDirection||0===y.touches.diff||P===I)return void(T=S=!1);T=S=!1;var r;if(r=y.params.followFinger?y.rtl?y.translate:-y.translate:-P,y.params.freeMode){if(r<-y.minTranslate())return void y.slideTo(y.activeIndex);if(r>-y.maxTranslate())return void(y.slides.length1){var i=H.pop(),n=H.pop(),o=i.position-n.position,l=i.time-n.time;y.velocity=o/l,y.velocity=y.velocity/2,Math.abs(y.velocity)150||(new window.Date).getTime()-i.time>300)&&(y.velocity=0)}else y.velocity=0;H.length=0;var p=1e3*y.params.freeModeMomentumRatio,d=y.velocity*p,u=y.translate+d;y.rtl&&(u=-u);var c,m=!1,f=20*Math.abs(y.velocity)*y.params.freeModeMomentumBounceRatio;if(uy.minTranslate())y.params.freeModeMomentumBounce?(u-y.minTranslate()>f&&(u=y.minTranslate()+f),c=y.minTranslate(),m=!0,B=!0):u=y.minTranslate();else if(y.params.freeModeSticky){var g,h=0;for(h=0;h-u){g=h;break}u=Math.abs(y.snapGrid[g]-u)=y.params.longSwipesMs)&&(y.updateProgress(),y.updateActiveIndex()))}var v,w=0,b=y.slidesSizesGrid[0];for(v=0;v=y.slidesGrid[v]&&r=y.slidesGrid[v]&&(w=v,b=y.slidesGrid[y.slidesGrid.length-1]-y.slidesGrid[y.slidesGrid.length-2]);var x=(r-y.slidesGrid[w])/b;if(s>y.params.longSwipesMs){if(!y.params.longSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&(x>=y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w)),"prev"===y.swipeDirection&&(x>1-y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w))}else{if(!y.params.shortSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&y.slideTo(w+y.params.slidesPerGroup),"prev"===y.swipeDirection&&y.slideTo(w)}}},y._slideTo=function(e,a){return y.slideTo(e,a,!0,!0)},y.slideTo=function(e,a,t,s){"undefined"==typeof t&&(t=!0),"undefined"==typeof e&&(e=0),0>e&&(e=0),y.snapIndex=Math.floor(e/y.params.slidesPerGroup),y.snapIndex>=y.snapGrid.length&&(y.snapIndex=y.snapGrid.length-1);var r=-y.snapGrid[y.snapIndex];y.params.autoplay&&y.autoplaying&&(s||!y.params.autoplayDisableOnInteraction?y.pauseAutoplay(a):y.stopAutoplay()),y.updateProgress(r);for(var i=0;i=Math.floor(100*y.slidesGrid[i])&&(e=i);return!y.params.allowSwipeToNext&&ry.translate&&r>y.maxTranslate()&&(y.activeIndex||0)!==e?!1:("undefined"==typeof a&&(a=y.params.speed),y.previousIndex=y.activeIndex||0,y.activeIndex=e,y.rtl&&-r===y.translate||!y.rtl&&r===y.translate?(y.params.autoHeight&&y.updateAutoHeight(),y.updateClasses(),"slide"!==y.params.effect&&y.setWrapperTranslate(r),!1):(y.updateClasses(),y.onTransitionStart(t),0===a?(y.setWrapperTranslate(r),y.setWrapperTransition(0),y.onTransitionEnd(t)):(y.setWrapperTranslate(r),y.setWrapperTransition(a),y.animating||(y.animating=!0,y.wrapper.transitionEnd(function(){y&&y.onTransitionEnd(t)}))),!0))},y.onTransitionStart=function(e){"undefined"==typeof e&&(e=!0),y.params.autoHeight&&y.updateAutoHeight(),y.lazy&&y.lazy.onTransitionStart(),e&&(y.emit("onTransitionStart",y),y.activeIndex!==y.previousIndex&&(y.emit("onSlideChangeStart",y),y.activeIndex>y.previousIndex?y.emit("onSlideNextStart",y):y.emit("onSlidePrevStart",y)))},y.onTransitionEnd=function(e){y.animating=!1,y.setWrapperTransition(0),"undefined"==typeof e&&(e=!0),y.lazy&&y.lazy.onTransitionEnd(),e&&(y.emit("onTransitionEnd",y),y.activeIndex!==y.previousIndex&&(y.emit("onSlideChangeEnd",y),y.activeIndex>y.previousIndex?y.emit("onSlideNextEnd",y):y.emit("onSlidePrevEnd",y))),y.params.hashnav&&y.hashnav&&y.hashnav.setHash()},y.slideNext=function(e,a,t){if(y.params.loop){if(y.animating)return!1;y.fixLoop();y.container[0].clientLeft;return y.slideTo(y.activeIndex+y.params.slidesPerGroup,a,e,t)}return y.slideTo(y.activeIndex+y.params.slidesPerGroup,a,e,t)},y._slideNext=function(e){return y.slideNext(!0,e,!0)},y.slidePrev=function(e,a,t){if(y.params.loop){if(y.animating)return!1;y.fixLoop();y.container[0].clientLeft;return y.slideTo(y.activeIndex-1,a,e,t)}return y.slideTo(y.activeIndex-1,a,e,t)},y._slidePrev=function(e){return y.slidePrev(!0,e,!0)},y.slideReset=function(e,a,t){return y.slideTo(y.activeIndex,a,e)},y.setWrapperTransition=function(e,a){y.wrapper.transition(e),"slide"!==y.params.effect&&y.effects[y.params.effect]&&y.effects[y.params.effect].setTransition(e),y.params.parallax&&y.parallax&&y.parallax.setTransition(e),y.params.scrollbar&&y.scrollbar&&y.scrollbar.setTransition(e),y.params.control&&y.controller&&y.controller.setTransition(e,a),y.emit("onSetTransition",y,e)},y.setWrapperTranslate=function(e,a,t){var s=0,i=0,n=0;y.isHorizontal()?s=y.rtl?-e:e:i=e,y.params.roundLengths&&(s=r(s),i=r(i)),y.params.virtualTranslate||(y.support.transforms3d?y.wrapper.transform("translate3d("+s+"px, "+i+"px, "+n+"px)"):y.wrapper.transform("translate("+s+"px, "+i+"px)")),y.translate=y.isHorizontal()?s:i;var o,l=y.maxTranslate()-y.minTranslate();o=0===l?0:(e-y.minTranslate())/l,o!==y.progress&&y.updateProgress(e),a&&y.updateActiveIndex(),"slide"!==y.params.effect&&y.effects[y.params.effect]&&y.effects[y.params.effect].setTranslate(y.translate),y.params.parallax&&y.parallax&&y.parallax.setTranslate(y.translate),y.params.scrollbar&&y.scrollbar&&y.scrollbar.setTranslate(y.translate),y.params.control&&y.controller&&y.controller.setTranslate(y.translate,t),y.emit("onSetTranslate",y,y.translate)},y.getTranslate=function(e,a){var t,s,r,i;return"undefined"==typeof a&&(a="x"),y.params.virtualTranslate?y.rtl?-y.translate:y.translate:(r=window.getComputedStyle(e,null),window.WebKitCSSMatrix?(s=r.transform||r.webkitTransform,s.split(",").length>6&&(s=s.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),i=new window.WebKitCSSMatrix("none"===s?"":s)):(i=r.MozTransform||r.OTransform||r.MsTransform||r.msTransform||r.transform||r.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=i.toString().split(",")),"x"===a&&(s=window.WebKitCSSMatrix?i.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(s=window.WebKitCSSMatrix?i.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),y.rtl&&s&&(s=-s),s||0)},y.getWrapperTranslate=function(e){return"undefined"==typeof e&&(e=y.isHorizontal()?"x":"y"),y.getTranslate(y.wrapper[0],e)},y.observers=[],y.initObservers=function(){if(y.params.observeParents)for(var e=y.container.parents(),a=0;aa.length&&(y.loopedSlides=a.length);var t,s=[],r=[];for(a.each(function(t,i){var n=e(this);t=a.length-y.loopedSlides&&s.push(i),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)y.wrapper.prepend(e(s[t].cloneNode(!0)).addClass(y.params.slideDuplicateClass))},y.destroyLoop=function(){y.wrapper.children("."+y.params.slideClass+"."+y.params.slideDuplicateClass).remove(),y.slides.removeAttr("data-swiper-slide-index")},y.reLoop=function(e){var a=y.activeIndex-y.loopedSlides;y.destroyLoop(),y.createLoop(),y.updateSlidesSize(),e&&y.slideTo(a+y.loopedSlides,0,!1)},y.fixLoop=function(){var e;y.activeIndex=2*y.loopedSlides||y.activeIndex>y.slides.length-2*y.params.slidesPerView)&&(e=-y.slides.length+y.activeIndex+y.loopedSlides,e+=y.loopedSlides,y.slideTo(e,0,!1,!0))},y.appendSlide=function(e){if(y.params.loop&&y.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;aa&&t--;t=Math.max(t,0)}else a=e,y.slides[a]&&y.slides.eq(a).remove(),t>a&&t--,t=Math.max(t,0);y.params.loop&&y.createLoop(),y.params.observer&&y.support.observer||y.update(!0),y.params.loop?y.slideTo(t+y.loopedSlides,0,!1):y.slideTo(t,0,!1)},y.removeAllSlides=function(){for(var e=[],a=0;a'),t.append(d)),0===u.length&&(u=e('
'),t.append(u)),d.length&&(d[0].style.opacity=Math.max(-s,0)),u.length&&(u[0].style.opacity=Math.max(s,0))}t.transform("translate3d("+l+"px, "+p+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(a){if(y.slides.transition(a).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(a),y.params.virtualTranslate&&0!==a){var t=!1;y.slides.eq(y.activeIndex).transitionEnd(function(){if(!t&&y&&e(this).hasClass(y.params.slideActiveClass)){t=!0,y.animating=!1;for(var a=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],s=0;s'),y.wrapper.append(a)),a.css({height:y.width+"px"})):(a=y.container.find(".swiper-cube-shadow"),0===a.length&&(a=e('
'),y.container.append(a))));for(var s=0;s=o&&o>-1&&(t=90*s+90*o,y.rtl&&(t=90*-s-90*o)),r.transform(u),y.params.cube.slideShadows){var c=y.isHorizontal()?r.find(".swiper-slide-shadow-left"):r.find(".swiper-slide-shadow-top"),m=y.isHorizontal()?r.find(".swiper-slide-shadow-right"):r.find(".swiper-slide-shadow-bottom");0===c.length&&(c=e('
'),r.append(c)),0===m.length&&(m=e('
'),r.append(m)),c.length&&(c[0].style.opacity=Math.max(-o,0)),m.length&&(m[0].style.opacity=Math.max(o,0))}}if(y.wrapper.css({"-webkit-transform-origin":"50% 50% -"+y.size/2+"px","-moz-transform-origin":"50% 50% -"+y.size/2+"px","-ms-transform-origin":"50% 50% -"+y.size/2+"px","transform-origin":"50% 50% -"+y.size/2+"px"}),y.params.cube.shadow)if(y.isHorizontal())a.transform("translate3d(0px, "+(y.width/2+y.params.cube.shadowOffset)+"px, "+-y.width/2+"px) rotateX(90deg) rotateZ(0deg) scale("+y.params.cube.shadowScale+")");else{var f=Math.abs(t)-90*Math.floor(Math.abs(t)/90),g=1.5-(Math.sin(2*f*Math.PI/360)/2+Math.cos(2*f*Math.PI/360)/2),h=y.params.cube.shadowScale,v=y.params.cube.shadowScale/g,w=y.params.cube.shadowOffset;a.transform("scale3d("+h+", 1, "+v+") translate3d(0px, "+(y.height/2+w)+"px, "+-y.height/2/v+"px) rotateX(-90deg)")}var b=y.isSafari||y.isUiWebView?-y.size/2:0;y.wrapper.transform("translate3d(0px,0,"+b+"px) rotateX("+(y.isHorizontal()?0:t)+"deg) rotateY("+(y.isHorizontal()?-t:0)+"deg)")},setTransition:function(e){y.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),y.params.cube.shadow&&!y.isHorizontal()&&y.container.find(".swiper-cube-shadow").transition(e)}},coverflow:{setTranslate:function(){for(var a=y.translate,t=y.isHorizontal()?-a+y.width/2:-a+y.height/2,s=y.isHorizontal()?y.params.coverflow.rotate:-y.params.coverflow.rotate,r=y.params.coverflow.depth,i=0,n=y.slides.length;n>i;i++){var o=y.slides.eq(i),l=y.slidesSizesGrid[i],p=o[0].swiperSlideOffset,d=(t-p-l/2)/l*y.params.coverflow.modifier,u=y.isHorizontal()?s*d:0,c=y.isHorizontal()?0:s*d,m=-r*Math.abs(d),f=y.isHorizontal()?0:y.params.coverflow.stretch*d,g=y.isHorizontal()?y.params.coverflow.stretch*d:0;Math.abs(g)<.001&&(g=0),Math.abs(f)<.001&&(f=0),Math.abs(m)<.001&&(m=0),Math.abs(u)<.001&&(u=0),Math.abs(c)<.001&&(c=0);var h="translate3d("+g+"px,"+f+"px,"+m+"px) rotateX("+c+"deg) rotateY("+u+"deg)";if(o.transform(h),o[0].style.zIndex=-Math.abs(Math.round(d))+1,y.params.coverflow.slideShadows){var v=y.isHorizontal()?o.find(".swiper-slide-shadow-left"):o.find(".swiper-slide-shadow-top"),w=y.isHorizontal()?o.find(".swiper-slide-shadow-right"):o.find(".swiper-slide-shadow-bottom");0===v.length&&(v=e('
'),o.append(v)),0===w.length&&(w=e('
'),o.append(w)),v.length&&(v[0].style.opacity=d>0?d:0),w.length&&(w[0].style.opacity=-d>0?-d:0)}}if(y.browser.ie){var b=y.wrapper[0].style;b.perspectiveOrigin=t+"px 50%"}},setTransition:function(e){y.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}}},y.lazy={initialImageLoaded:!1,loadImageInSlide:function(a,t){if("undefined"!=typeof a&&("undefined"==typeof t&&(t=!0),0!==y.slides.length)){var s=y.slides.eq(a),r=s.find(".swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)");!s.hasClass("swiper-lazy")||s.hasClass("swiper-lazy-loaded")||s.hasClass("swiper-lazy-loading")||(r=r.add(s[0])),0!==r.length&&r.each(function(){var a=e(this);a.addClass("swiper-lazy-loading");var r=a.attr("data-background"),i=a.attr("data-src"),n=a.attr("data-srcset");y.loadImage(a[0],i||r,n,!1,function(){if(r?(a.css("background-image",'url("'+r+'")'),a.removeAttr("data-background")):(n&&(a.attr("srcset",n),a.removeAttr("data-srcset")),i&&(a.attr("src",i),a.removeAttr("data-src"))),a.addClass("swiper-lazy-loaded").removeClass("swiper-lazy-loading"),s.find(".swiper-lazy-preloader, .preloader").remove(),y.params.loop&&t){var e=s.attr("data-swiper-slide-index");if(s.hasClass(y.params.slideDuplicateClass)){var o=y.wrapper.children('[data-swiper-slide-index="'+e+'"]:not(.'+y.params.slideDuplicateClass+")");y.lazy.loadImageInSlide(o.index(),!1)}else{var l=y.wrapper.children("."+y.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');y.lazy.loadImageInSlide(l.index(),!1)}}y.emit("onLazyImageReady",y,s[0],a[0])}),y.emit("onLazyImageLoad",y,s[0],a[0])})}},load:function(){var a;if(y.params.watchSlidesVisibility)y.wrapper.children("."+y.params.slideVisibleClass).each(function(){y.lazy.loadImageInSlide(e(this).index())});else if(y.params.slidesPerView>1)for(a=y.activeIndex;a1||y.params.lazyLoadingInPrevNextAmount&&y.params.lazyLoadingInPrevNextAmount>1){var t=y.params.lazyLoadingInPrevNextAmount,s=y.params.slidesPerView,r=Math.min(y.activeIndex+s+Math.max(t,s),y.slides.length),i=Math.max(y.activeIndex-Math.max(s,t),0);for(a=y.activeIndex+y.params.slidesPerView;r>a;a++)y.slides[a]&&y.lazy.loadImageInSlide(a);for(a=i;a0&&y.lazy.loadImageInSlide(n.index());var o=y.wrapper.children("."+y.params.slidePrevClass);o.length>0&&y.lazy.loadImageInSlide(o.index())}},onTransitionStart:function(){y.params.lazyLoading&&(y.params.lazyLoadingOnTransitionStart||!y.params.lazyLoadingOnTransitionStart&&!y.lazy.initialImageLoaded)&&y.lazy.load()},onTransitionEnd:function(){y.params.lazyLoading&&!y.params.lazyLoadingOnTransitionStart&&y.lazy.load()}},y.scrollbar={isTouched:!1,setDragPosition:function(e){var a=y.scrollbar,t=y.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY,s=t-a.track.offset()[y.isHorizontal()?"left":"top"]-a.dragSize/2,r=-y.minTranslate()*a.moveDivider,i=-y.maxTranslate()*a.moveDivider;r>s?s=r:s>i&&(s=i),s=-s/a.moveDivider,y.updateProgress(s),y.setWrapperTranslate(s,!0)},dragStart:function(e){var a=y.scrollbar;a.isTouched=!0,e.preventDefault(),e.stopPropagation(),a.setDragPosition(e),clearTimeout(a.dragTimeout),a.track.transition(0),y.params.scrollbarHide&&a.track.css("opacity",1),y.wrapper.transition(100),a.drag.transition(100),y.emit("onScrollbarDragStart",y)},dragMove:function(e){var a=y.scrollbar;a.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,a.setDragPosition(e),y.wrapper.transition(0),a.track.transition(0),a.drag.transition(0),y.emit("onScrollbarDragMove",y))},dragEnd:function(e){var a=y.scrollbar;a.isTouched&&(a.isTouched=!1,y.params.scrollbarHide&&(clearTimeout(a.dragTimeout),a.dragTimeout=setTimeout(function(){a.track.css("opacity",0),a.track.transition(400)},1e3)),y.emit("onScrollbarDragEnd",y),y.params.scrollbarSnapOnRelease&&y.slideReset())},enableDraggable:function(){var a=y.scrollbar,t=y.support.touch?a.track:document;e(a.track).on(y.touchEvents.start,a.dragStart),e(t).on(y.touchEvents.move,a.dragMove),e(t).on(y.touchEvents.end,a.dragEnd)},disableDraggable:function(){var a=y.scrollbar,t=y.support.touch?a.track:document;e(a.track).off(y.touchEvents.start,a.dragStart),e(t).off(y.touchEvents.move,a.dragMove),e(t).off(y.touchEvents.end,a.dragEnd)},set:function(){if(y.params.scrollbar){var a=y.scrollbar;a.track=e(y.params.scrollbar),y.params.uniqueNavElements&&"string"==typeof y.params.scrollbar&&a.track.length>1&&1===y.container.find(y.params.scrollbar).length&&(a.track=y.container.find(y.params.scrollbar)),a.drag=a.track.find(".swiper-scrollbar-drag"),0===a.drag.length&&(a.drag=e('
'),a.track.append(a.drag)),a.drag[0].style.width="",a.drag[0].style.height="",a.trackSize=y.isHorizontal()?a.track[0].offsetWidth:a.track[0].offsetHeight,a.divider=y.size/y.virtualSize,a.moveDivider=a.divider*(a.trackSize/y.size),a.dragSize=a.trackSize*a.divider,y.isHorizontal()?a.drag[0].style.width=a.dragSize+"px":a.drag[0].style.height=a.dragSize+"px",a.divider>=1?a.track[0].style.display="none":a.track[0].style.display="",y.params.scrollbarHide&&(a.track[0].style.opacity=0)}},setTranslate:function(){if(y.params.scrollbar){var e,a=y.scrollbar,t=(y.translate||0,a.dragSize);e=(a.trackSize-a.dragSize)*y.progress,y.rtl&&y.isHorizontal()?(e=-e,e>0?(t=a.dragSize-e,e=0):-e+a.dragSize>a.trackSize&&(t=a.trackSize+e)):0>e?(t=a.dragSize+e,e=0):e+a.dragSize>a.trackSize&&(t=a.trackSize-e),y.isHorizontal()?(y.support.transforms3d?a.drag.transform("translate3d("+e+"px, 0, 0)"):a.drag.transform("translateX("+e+"px)"),a.drag[0].style.width=t+"px"):(y.support.transforms3d?a.drag.transform("translate3d(0px, "+e+"px, 0)"):a.drag.transform("translateY("+e+"px)"),a.drag[0].style.height=t+"px"),y.params.scrollbarHide&&(clearTimeout(a.timeout),a.track[0].style.opacity=1,a.timeout=setTimeout(function(){a.track[0].style.opacity=0,a.track.transition(400)},1e3))}},setTransition:function(e){y.params.scrollbar&&y.scrollbar.drag.transition(e)}},y.controller={LinearSpline:function(e,a){this.x=e,this.y=a,this.lastIndex=e.length-1;var t,s;this.x.length;this.interpolate=function(e){return e?(s=r(this.x,e),t=s-1,(e-this.x[t])*(this.y[s]-this.y[t])/(this.x[s]-this.x[t])+this.y[t]):0};var r=function(){var e,a,t;return function(s,r){for(a=-1,e=s.length;e-a>1;)s[t=e+a>>1]<=r?a=t:e=t;return e}}()},getInterpolateFunction:function(e){y.controller.spline||(y.controller.spline=y.params.loop?new y.controller.LinearSpline(y.slidesGrid,e.slidesGrid):new y.controller.LinearSpline(y.snapGrid,e.snapGrid))},setTranslate:function(e,a){function s(a){e=a.rtl&&"horizontal"===a.params.direction?-y.translate:y.translate,"slide"===y.params.controlBy&&(y.controller.getInterpolateFunction(a),i=-y.controller.spline.interpolate(-e)),i&&"container"!==y.params.controlBy||(r=(a.maxTranslate()-a.minTranslate())/(y.maxTranslate()-y.minTranslate()),i=(e-y.minTranslate())*r+a.minTranslate()),y.params.controlInverse&&(i=a.maxTranslate()-i),a.updateProgress(i),a.setWrapperTranslate(i,!1,y),a.updateActiveIndex()}var r,i,n=y.params.control;if(y.isArray(n))for(var o=0;ot;t++){var r=y.slides.eq(t),i=r.attr("data-hash");if(i===e&&!r.hasClass(y.params.slideDuplicateClass)){var n=r.index();y.slideTo(n,a,y.params.runCallbacksOnInit,!0)}}}},setHash:function(){y.hashnav.initialized&&y.params.hashnav&&(document.location.hash=y.slides.eq(y.activeIndex).attr("data-hash")||"")}},y.disableKeyboardControl=function(){y.params.keyboardControl=!1,e(document).off("keydown",l)},y.enableKeyboardControl=function(){y.params.keyboardControl=!0,e(document).on("keydown",l)},y.mousewheel={event:!1,lastScrollTime:(new window.Date).getTime()},y.params.mousewheelControl){try{new window.WheelEvent("wheel"),y.mousewheel.event="wheel"}catch(O){(window.WheelEvent||y.container[0]&&"wheel"in y.container[0])&&(y.mousewheel.event="wheel")}!y.mousewheel.event&&window.WheelEvent,y.mousewheel.event||void 0===document.onmousewheel||(y.mousewheel.event="mousewheel"),y.mousewheel.event||(y.mousewheel.event="DOMMouseScroll")}y.disableMousewheelControl=function(){return y.mousewheel.event?(y.container.off(y.mousewheel.event,p),!0):!1},y.enableMousewheelControl=function(){return y.mousewheel.event?(y.container.on(y.mousewheel.event,p),!0):!1},y.parallax={setTranslate:function(){y.container.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){d(this,y.progress)}),y.slides.each(function(){var a=e(this);a.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var e=Math.min(Math.max(a[0].progress,-1),1);d(this,e)})})},setTransition:function(a){"undefined"==typeof a&&(a=y.params.speed),y.container.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var t=e(this),s=parseInt(t.attr("data-swiper-parallax-duration"),10)||a;0===a&&(s=0),t.transition(s)})}},y._plugins=[];for(var N in y.plugins){var R=y.plugins[N](y,y.params[N]);R&&y._plugins.push(R)}return y.callPlugins=function(e){for(var a=0;a'),notify:function(e){var a=y.a11y.liveRegion;0!==a.length&&(a.html(""),a.html(e))},init:function(){y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.a11y.makeFocusable(y.nextButton),y.a11y.addRole(y.nextButton,"button"),y.a11y.addLabel(y.nextButton,y.params.nextSlideMessage)),y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.a11y.makeFocusable(y.prevButton),y.a11y.addRole(y.prevButton,"button"),y.a11y.addLabel(y.prevButton,y.params.prevSlideMessage)),e(y.container).append(y.a11y.liveRegion)},initPagination:function(){y.params.pagination&&y.params.paginationClickable&&y.bullets&&y.bullets.length&&y.bullets.each(function(){var a=e(this);y.a11y.makeFocusable(a),y.a11y.addRole(a,"button"),y.a11y.addLabel(a,y.params.paginationBulletMessage.replace(/{{index}}/,a.index()+1))})},destroy:function(){y.a11y.liveRegion&&y.a11y.liveRegion.length>0&&y.a11y.liveRegion.remove()}},y.init=function(){y.params.loop&&y.createLoop(),y.updateContainerSize(),y.updateSlidesSize(),y.updatePagination(),y.params.scrollbar&&y.scrollbar&&(y.scrollbar.set(),y.params.scrollbarDraggable&&y.scrollbar.enableDraggable()),"slide"!==y.params.effect&&y.effects[y.params.effect]&&(y.params.loop||y.updateProgress(),y.effects[y.params.effect].setTranslate()),y.params.loop?y.slideTo(y.params.initialSlide+y.loopedSlides,0,y.params.runCallbacksOnInit):(y.slideTo(y.params.initialSlide,0,y.params.runCallbacksOnInit),0===y.params.initialSlide&&(y.parallax&&y.params.parallax&&y.parallax.setTranslate(),y.lazy&&y.params.lazyLoading&&(y.lazy.load(),y.lazy.initialImageLoaded=!0))),y.attachEvents(),y.params.observer&&y.support.observer&&y.initObservers(), +y.params.preloadImages&&!y.params.lazyLoading&&y.preloadImages(),y.params.autoplay&&y.startAutoplay(),y.params.keyboardControl&&y.enableKeyboardControl&&y.enableKeyboardControl(),y.params.mousewheelControl&&y.enableMousewheelControl&&y.enableMousewheelControl(),y.params.hashnav&&y.hashnav&&y.hashnav.init(),y.params.a11y&&y.a11y&&y.a11y.init(),y.emit("onInit",y)},y.cleanupStyles=function(){y.container.removeClass(y.classNames.join(" ")).removeAttr("style"),y.wrapper.removeAttr("style"),y.slides&&y.slides.length&&y.slides.removeClass([y.params.slideVisibleClass,y.params.slideActiveClass,y.params.slideNextClass,y.params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-column").removeAttr("data-swiper-row"),y.paginationContainer&&y.paginationContainer.length&&y.paginationContainer.removeClass(y.params.paginationHiddenClass),y.bullets&&y.bullets.length&&y.bullets.removeClass(y.params.bulletActiveClass),y.params.prevButton&&e(y.params.prevButton).removeClass(y.params.buttonDisabledClass),y.params.nextButton&&e(y.params.nextButton).removeClass(y.params.buttonDisabledClass),y.params.scrollbar&&y.scrollbar&&(y.scrollbar.track&&y.scrollbar.track.length&&y.scrollbar.track.removeAttr("style"),y.scrollbar.drag&&y.scrollbar.drag.length&&y.scrollbar.drag.removeAttr("style"))},y.destroy=function(e,a){y.detachEvents(),y.stopAutoplay(),y.params.scrollbar&&y.scrollbar&&y.params.scrollbarDraggable&&y.scrollbar.disableDraggable(),y.params.loop&&y.destroyLoop(),a&&y.cleanupStyles(),y.disconnectObservers(),y.params.keyboardControl&&y.disableKeyboardControl&&y.disableKeyboardControl(),y.params.mousewheelControl&&y.disableMousewheelControl&&y.disableMousewheelControl(),y.params.a11y&&y.a11y&&y.a11y.destroy(),y.emit("onDestroy"),e!==!1&&(y=null)},y.init(),y}};t.prototype={isSafari:function(){var e=navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent),isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},browser:{ie:window.navigator.pointerEnabled||window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled&&window.navigator.msMaxTouchPoints>1||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>1},device:function(){var e=navigator.userAgent,a=e.match(/(Android);?[\s\/]+([\d.]+)?/),t=e.match(/(iPad).*OS\s([\d_]+)/),s=e.match(/(iPod)(.*OS\s([\d_]+))?/),r=!t&&e.match(/(iPhone\sOS)\s([\d_]+)/);return{ios:t||r||s,android:a}}(),support:{touch:window.Modernizr&&Modernizr.touch===!0||function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}(),transforms3d:window.Modernizr&&Modernizr.csstransforms3d===!0||function(){var e=document.createElement("div").style;return"webkitPerspective"in e||"MozPerspective"in e||"OPerspective"in e||"MsPerspective"in e||"perspective"in e}(),flexbox:function(){for(var e=document.createElement("div").style,a="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),t=0;t parseInt(b, 10); + }); + for (var i = 0; i < points.length; i++) { + point = points[i]; + if (point >= window.innerWidth && !breakpoint) { + breakpoint = point; + } + } + return breakpoint || 'max'; + }; + s.setBreakpoint = function () { + //Set breakpoint for window width and update parameters + var breakpoint = s.getActiveBreakpoint(); + if (breakpoint && s.currentBreakpoint !== breakpoint) { + var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams; + var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView); + for ( var param in breakPointsParams ) { + s.params[param] = breakPointsParams[param]; + } + s.currentBreakpoint = breakpoint; + if(needsReLoop && s.destroyLoop) { + s.reLoop(true); + } + } + }; + // Set breakpoint on load + if (s.params.breakpoints) { + s.setBreakpoint(); + } + + /*========================= + Preparation - Define Container, Wrapper and Pagination + ===========================*/ + s.container = $(container); + if (s.container.length === 0) return; + if (s.container.length > 1) { + var swipers = []; + s.container.each(function () { + var container = this; + swipers.push(new Swiper(this, params)); + }); + return swipers; + } + + // Save instance in container HTML Element and in data + s.container[0].swiper = s; + s.container.data('swiper', s); + + s.classNames.push('swiper-container-' + s.params.direction); + + if (s.params.freeMode) { + s.classNames.push('swiper-container-free-mode'); + } + if (!s.support.flexbox) { + s.classNames.push('swiper-container-no-flexbox'); + s.params.slidesPerColumn = 1; + } + if (s.params.autoHeight) { + s.classNames.push('swiper-container-autoheight'); + } + // Enable slides progress when required + if (s.params.parallax || s.params.watchSlidesVisibility) { + s.params.watchSlidesProgress = true; + } + // Coverflow / 3D + if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) { + if (s.support.transforms3d) { + s.params.watchSlidesProgress = true; + s.classNames.push('swiper-container-3d'); + } + else { + s.params.effect = 'slide'; + } + } + if (s.params.effect !== 'slide') { + s.classNames.push('swiper-container-' + s.params.effect); + } + if (s.params.effect === 'cube') { + s.params.resistanceRatio = 0; + s.params.slidesPerView = 1; + s.params.slidesPerColumn = 1; + s.params.slidesPerGroup = 1; + s.params.centeredSlides = false; + s.params.spaceBetween = 0; + s.params.virtualTranslate = true; + s.params.setWrapperSize = false; + } + if (s.params.effect === 'fade' || s.params.effect === 'flip') { + s.params.slidesPerView = 1; + s.params.slidesPerColumn = 1; + s.params.slidesPerGroup = 1; + s.params.watchSlidesProgress = true; + s.params.spaceBetween = 0; + s.params.setWrapperSize = false; + if (typeof initialVirtualTranslate === 'undefined') { + s.params.virtualTranslate = true; + } + } + + // Grab Cursor + if (s.params.grabCursor && s.support.touch) { + s.params.grabCursor = false; + } + + // Wrapper + s.wrapper = s.container.children('.' + s.params.wrapperClass); + + // Pagination + if (s.params.pagination) { + s.paginationContainer = $(s.params.pagination); + if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) { + s.paginationContainer = s.container.find(s.params.pagination); + } + + if (s.params.paginationType === 'bullets' && s.params.paginationClickable) { + s.paginationContainer.addClass('swiper-pagination-clickable'); + } + else { + s.params.paginationClickable = false; + } + s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType); + } + // Next/Prev Buttons + if (s.params.nextButton || s.params.prevButton) { + if (s.params.nextButton) { + s.nextButton = $(s.params.nextButton); + if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) { + s.nextButton = s.container.find(s.params.nextButton); + } + } + if (s.params.prevButton) { + s.prevButton = $(s.params.prevButton); + if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) { + s.prevButton = s.container.find(s.params.prevButton); + } + } + } + + // Is Horizontal + s.isHorizontal = function () { + return s.params.direction === 'horizontal'; + }; + // s.isH = isH; + + // RTL + s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl'); + if (s.rtl) { + s.classNames.push('swiper-container-rtl'); + } + + // Wrong RTL support + if (s.rtl) { + s.wrongRTL = s.wrapper.css('display') === '-webkit-box'; + } + + // Columns + if (s.params.slidesPerColumn > 1) { + s.classNames.push('swiper-container-multirow'); + } + + // Check for Android + if (s.device.android) { + s.classNames.push('swiper-container-android'); + } + + // Add classes + s.container.addClass(s.classNames.join(' ')); + + // Translate + s.translate = 0; + + // Progress + s.progress = 0; + + // Velocity + s.velocity = 0; + + /*========================= + Locks, unlocks + ===========================*/ + s.lockSwipeToNext = function () { + s.params.allowSwipeToNext = false; + }; + s.lockSwipeToPrev = function () { + s.params.allowSwipeToPrev = false; + }; + s.lockSwipes = function () { + s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false; + }; + s.unlockSwipeToNext = function () { + s.params.allowSwipeToNext = true; + }; + s.unlockSwipeToPrev = function () { + s.params.allowSwipeToPrev = true; + }; + s.unlockSwipes = function () { + s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true; + }; + + /*========================= + Round helper + ===========================*/ + function round(a) { + return Math.floor(a); + } + /*========================= + Set grab cursor + ===========================*/ + if (s.params.grabCursor) { + s.container[0].style.cursor = 'move'; + s.container[0].style.cursor = '-webkit-grab'; + s.container[0].style.cursor = '-moz-grab'; + s.container[0].style.cursor = 'grab'; + } + /*========================= + Update on Images Ready + ===========================*/ + s.imagesToLoad = []; + s.imagesLoaded = 0; + + s.loadImage = function (imgElement, src, srcset, checkForComplete, callback) { + var image; + function onReady () { + if (callback) callback(); + } + if (!imgElement.complete || !checkForComplete) { + if (src) { + image = new window.Image(); + image.onload = onReady; + image.onerror = onReady; + if (srcset) { + image.srcset = srcset; + } + if (src) { + image.src = src; + } + } else { + onReady(); + } + + } else {//image already loaded... + onReady(); + } + }; + s.preloadImages = function () { + s.imagesToLoad = s.container.find('img'); + function _onReady() { + if (typeof s === 'undefined' || s === null) return; + if (s.imagesLoaded !== undefined) s.imagesLoaded++; + if (s.imagesLoaded === s.imagesToLoad.length) { + if (s.params.updateOnImagesReady) s.update(); + s.emit('onImagesReady', s); + } + } + for (var i = 0; i < s.imagesToLoad.length; i++) { + s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), true, _onReady); + } + }; + + /*========================= + Autoplay + ===========================*/ + s.autoplayTimeoutId = undefined; + s.autoplaying = false; + s.autoplayPaused = false; + function autoplay() { + s.autoplayTimeoutId = setTimeout(function () { + if (s.params.loop) { + s.fixLoop(); + s._slideNext(); + s.emit('onAutoplay', s); + } + else { + if (!s.isEnd) { + s._slideNext(); + s.emit('onAutoplay', s); + } + else { + if (!params.autoplayStopOnLast) { + s._slideTo(0); + s.emit('onAutoplay', s); + } + else { + s.stopAutoplay(); + } + } + } + }, s.params.autoplay); + } + s.startAutoplay = function () { + if (typeof s.autoplayTimeoutId !== 'undefined') return false; + if (!s.params.autoplay) return false; + if (s.autoplaying) return false; + s.autoplaying = true; + s.emit('onAutoplayStart', s); + autoplay(); + }; + s.stopAutoplay = function (internal) { + if (!s.autoplayTimeoutId) return; + if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId); + s.autoplaying = false; + s.autoplayTimeoutId = undefined; + s.emit('onAutoplayStop', s); + }; + s.pauseAutoplay = function (speed) { + if (s.autoplayPaused) return; + if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId); + s.autoplayPaused = true; + if (speed === 0) { + s.autoplayPaused = false; + autoplay(); + } + else { + s.wrapper.transitionEnd(function () { + if (!s) return; + s.autoplayPaused = false; + if (!s.autoplaying) { + s.stopAutoplay(); + } + else { + autoplay(); + } + }); + } + }; + /*========================= + Min/Max Translate + ===========================*/ + s.minTranslate = function () { + return (-s.snapGrid[0]); + }; + s.maxTranslate = function () { + return (-s.snapGrid[s.snapGrid.length - 1]); + }; + /*========================= + Slider/slides sizes + ===========================*/ + s.updateAutoHeight = function () { + // Update Height + var slide = s.slides.eq(s.activeIndex)[0]; + if (typeof slide !== 'undefined') { + var newHeight = slide.offsetHeight; + if (newHeight) s.wrapper.css('height', newHeight + 'px'); + } + }; + s.updateContainerSize = function () { + var width, height; + if (typeof s.params.width !== 'undefined') { + width = s.params.width; + } + else { + width = s.container[0].clientWidth; + } + if (typeof s.params.height !== 'undefined') { + height = s.params.height; + } + else { + height = s.container[0].clientHeight; + } + if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) { + return; + } + + //Subtract paddings + width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10); + height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10); + + // Store values + s.width = width; + s.height = height; + s.size = s.isHorizontal() ? s.width : s.height; + }; + + s.updateSlidesSize = function () { + s.slides = s.wrapper.children('.' + s.params.slideClass); + s.snapGrid = []; + s.slidesGrid = []; + s.slidesSizesGrid = []; + + var spaceBetween = s.params.spaceBetween, + slidePosition = -s.params.slidesOffsetBefore, + i, + prevSlideSize = 0, + index = 0; + if (typeof s.size === 'undefined') return; + if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { + spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size; + } + + s.virtualSize = -spaceBetween; + // reset margins + if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''}); + else s.slides.css({marginRight: '', marginBottom: ''}); + + var slidesNumberEvenToRows; + if (s.params.slidesPerColumn > 1) { + if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) { + slidesNumberEvenToRows = s.slides.length; + } + else { + slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn; + } + if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') { + slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn); + } + } + + // Calc slides + var slideSize; + var slidesPerColumn = s.params.slidesPerColumn; + var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn; + var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length); + for (i = 0; i < s.slides.length; i++) { + slideSize = 0; + var slide = s.slides.eq(i); + if (s.params.slidesPerColumn > 1) { + // Set slides order + var newSlideOrderIndex; + var column, row; + if (s.params.slidesPerColumnFill === 'column') { + column = Math.floor(i / slidesPerColumn); + row = i - column * slidesPerColumn; + if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) { + if (++row >= slidesPerColumn) { + row = 0; + column++; + } + } + newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn; + slide + .css({ + '-webkit-box-ordinal-group': newSlideOrderIndex, + '-moz-box-ordinal-group': newSlideOrderIndex, + '-ms-flex-order': newSlideOrderIndex, + '-webkit-order': newSlideOrderIndex, + 'order': newSlideOrderIndex + }); + } + else { + row = Math.floor(i / slidesPerRow); + column = i - row * slidesPerRow; + } + slide + .css({ + 'margin-top': (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px') + }) + .attr('data-swiper-column', column) + .attr('data-swiper-row', row); + + } + if (slide.css('display') === 'none') continue; + if (s.params.slidesPerView === 'auto') { + slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true); + if (s.params.roundLengths) slideSize = round(slideSize); + } + else { + slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView; + if (s.params.roundLengths) slideSize = round(slideSize); + + if (s.isHorizontal()) { + s.slides[i].style.width = slideSize + 'px'; + } + else { + s.slides[i].style.height = slideSize + 'px'; + } + } + s.slides[i].swiperSlideSize = slideSize; + s.slidesSizesGrid.push(slideSize); + + + if (s.params.centeredSlides) { + slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; + if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween; + if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; + if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition); + s.slidesGrid.push(slidePosition); + } + else { + if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition); + s.slidesGrid.push(slidePosition); + slidePosition = slidePosition + slideSize + spaceBetween; + } + + s.virtualSize += slideSize + spaceBetween; + + prevSlideSize = slideSize; + + index ++; + } + s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter; + var newSlidesGrid; + + if ( + s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) { + s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); + } + if (!s.support.flexbox || s.params.setWrapperSize) { + if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); + else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'}); + } + + if (s.params.slidesPerColumn > 1) { + s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows; + s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween; + s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'}); + if (s.params.centeredSlides) { + newSlidesGrid = []; + for (i = 0; i < s.snapGrid.length; i++) { + if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]); + } + s.snapGrid = newSlidesGrid; + } + } + + // Remove last grid elements depending on width + if (!s.params.centeredSlides) { + newSlidesGrid = []; + for (i = 0; i < s.snapGrid.length; i++) { + if (s.snapGrid[i] <= s.virtualSize - s.size) { + newSlidesGrid.push(s.snapGrid[i]); + } + } + s.snapGrid = newSlidesGrid; + if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) { + s.snapGrid.push(s.virtualSize - s.size); + } + } + if (s.snapGrid.length === 0) s.snapGrid = [0]; + + if (s.params.spaceBetween !== 0) { + if (s.isHorizontal()) { + if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'}); + else s.slides.css({marginRight: spaceBetween + 'px'}); + } + else s.slides.css({marginBottom: spaceBetween + 'px'}); + } + if (s.params.watchSlidesProgress) { + s.updateSlidesOffset(); + } + }; + s.updateSlidesOffset = function () { + for (var i = 0; i < s.slides.length; i++) { + s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop; + } + }; + + /*========================= + Slider/slides progress + ===========================*/ + s.updateSlidesProgress = function (translate) { + if (typeof translate === 'undefined') { + translate = s.translate || 0; + } + if (s.slides.length === 0) return; + if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset(); + + var offsetCenter = -translate; + if (s.rtl) offsetCenter = translate; + + // Visible Slides + s.slides.removeClass(s.params.slideVisibleClass); + for (var i = 0; i < s.slides.length; i++) { + var slide = s.slides[i]; + var slideProgress = (offsetCenter - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween); + if (s.params.watchSlidesVisibility) { + var slideBefore = -(offsetCenter - slide.swiperSlideOffset); + var slideAfter = slideBefore + s.slidesSizesGrid[i]; + var isVisible = + (slideBefore >= 0 && slideBefore < s.size) || + (slideAfter > 0 && slideAfter <= s.size) || + (slideBefore <= 0 && slideAfter >= s.size); + if (isVisible) { + s.slides.eq(i).addClass(s.params.slideVisibleClass); + } + } + slide.progress = s.rtl ? -slideProgress : slideProgress; + } + }; + s.updateProgress = function (translate) { + if (typeof translate === 'undefined') { + translate = s.translate || 0; + } + var translatesDiff = s.maxTranslate() - s.minTranslate(); + var wasBeginning = s.isBeginning; + var wasEnd = s.isEnd; + if (translatesDiff === 0) { + s.progress = 0; + s.isBeginning = s.isEnd = true; + } + else { + s.progress = (translate - s.minTranslate()) / (translatesDiff); + s.isBeginning = s.progress <= 0; + s.isEnd = s.progress >= 1; + } + if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s); + if (s.isEnd && !wasEnd) s.emit('onReachEnd', s); + + if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate); + s.emit('onProgress', s, s.progress); + }; + s.updateActiveIndex = function () { + var translate = s.rtl ? s.translate : -s.translate; + var newActiveIndex, i, snapIndex; + for (i = 0; i < s.slidesGrid.length; i ++) { + if (typeof s.slidesGrid[i + 1] !== 'undefined') { + if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) { + newActiveIndex = i; + } + else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) { + newActiveIndex = i + 1; + } + } + else { + if (translate >= s.slidesGrid[i]) { + newActiveIndex = i; + } + } + } + // Normalize slideIndex + if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0; + // for (i = 0; i < s.slidesGrid.length; i++) { + // if (- translate >= s.slidesGrid[i]) { + // newActiveIndex = i; + // } + // } + snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup); + if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1; + + if (newActiveIndex === s.activeIndex) { + return; + } + s.snapIndex = snapIndex; + s.previousIndex = s.activeIndex; + s.activeIndex = newActiveIndex; + s.updateClasses(); + }; + + /*========================= + Classes + ===========================*/ + s.updateClasses = function () { + s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass); + var activeSlide = s.slides.eq(s.activeIndex); + // Active classes + activeSlide.addClass(s.params.slideActiveClass); + // Next Slide + var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass); + if (s.params.loop && nextSlide.length === 0) { + s.slides.eq(0).addClass(s.params.slideNextClass); + } + // Prev Slide + var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass); + if (s.params.loop && prevSlide.length === 0) { + s.slides.eq(-1).addClass(s.params.slidePrevClass); + } + + // Pagination + if (s.paginationContainer && s.paginationContainer.length > 0) { + // Current/Total + var current, + total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length; + if (s.params.loop) { + current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup); + if (current > s.slides.length - 1 - s.loopedSlides * 2) { + current = current - (s.slides.length - s.loopedSlides * 2); + } + if (current > total - 1) current = current - total; + if (current < 0 && s.params.paginationType !== 'bullets') current = total + current; + } + else { + if (typeof s.snapIndex !== 'undefined') { + current = s.snapIndex; + } + else { + current = s.activeIndex || 0; + } + } + // Types + if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) { + s.bullets.removeClass(s.params.bulletActiveClass); + if (s.paginationContainer.length > 1) { + s.bullets.each(function () { + if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass); + }); + } + else { + s.bullets.eq(current).addClass(s.params.bulletActiveClass); + } + } + if (s.params.paginationType === 'fraction') { + s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1); + s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total); + } + if (s.params.paginationType === 'progress') { + var scale = (current + 1) / total, + scaleX = scale, + scaleY = 1; + if (!s.isHorizontal()) { + scaleY = scale; + scaleX = 1; + } + s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed); + } + if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) { + s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total)); + s.emit('onPaginationRendered', s, s.paginationContainer[0]); + } + } + + // Next/active buttons + if (!s.params.loop) { + if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { + if (s.isBeginning) { + s.prevButton.addClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton); + } + else { + s.prevButton.removeClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton); + } + } + if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { + if (s.isEnd) { + s.nextButton.addClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton); + } + else { + s.nextButton.removeClass(s.params.buttonDisabledClass); + if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton); + } + } + } + }; + + /*========================= + Pagination + ===========================*/ + s.updatePagination = function () { + if (!s.params.pagination) return; + if (s.paginationContainer && s.paginationContainer.length > 0) { + var paginationHTML = ''; + if (s.params.paginationType === 'bullets') { + var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length; + for (var i = 0; i < numberOfBullets; i++) { + if (s.params.paginationBulletRender) { + paginationHTML += s.params.paginationBulletRender(i, s.params.bulletClass); + } + else { + paginationHTML += '<' + s.params.paginationElement+' class="' + s.params.bulletClass + '">'; + } + } + s.paginationContainer.html(paginationHTML); + s.bullets = s.paginationContainer.find('.' + s.params.bulletClass); + if (s.params.paginationClickable && s.params.a11y && s.a11y) { + s.a11y.initPagination(); + } + } + if (s.params.paginationType === 'fraction') { + if (s.params.paginationFractionRender) { + paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass); + } + else { + paginationHTML = + '' + + ' / ' + + ''; + } + s.paginationContainer.html(paginationHTML); + } + if (s.params.paginationType === 'progress') { + if (s.params.paginationProgressRender) { + paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass); + } + else { + paginationHTML = ''; + } + s.paginationContainer.html(paginationHTML); + } + if (s.params.paginationType !== 'custom') { + s.emit('onPaginationRendered', s, s.paginationContainer[0]); + } + } + }; + /*========================= + Common update method + ===========================*/ + s.update = function (updateTranslate) { + s.updateContainerSize(); + s.updateSlidesSize(); + s.updateProgress(); + s.updatePagination(); + s.updateClasses(); + if (s.params.scrollbar && s.scrollbar) { + s.scrollbar.set(); + } + function forceSetTranslate() { + newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate()); + s.setWrapperTranslate(newTranslate); + s.updateActiveIndex(); + s.updateClasses(); + } + if (updateTranslate) { + var translated, newTranslate; + if (s.controller && s.controller.spline) { + s.controller.spline = undefined; + } + if (s.params.freeMode) { + forceSetTranslate(); + if (s.params.autoHeight) { + s.updateAutoHeight(); + } + } + else { + if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) { + translated = s.slideTo(s.slides.length - 1, 0, false, true); + } + else { + translated = s.slideTo(s.activeIndex, 0, false, true); + } + if (!translated) { + forceSetTranslate(); + } + } + } + else if (s.params.autoHeight) { + s.updateAutoHeight(); + } + }; + + /*========================= + Resize Handler + ===========================*/ + s.onResize = function (forceUpdatePagination) { + //Breakpoints + if (s.params.breakpoints) { + s.setBreakpoint(); + } + + // Disable locks on resize + var allowSwipeToPrev = s.params.allowSwipeToPrev; + var allowSwipeToNext = s.params.allowSwipeToNext; + s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true; + + s.updateContainerSize(); + s.updateSlidesSize(); + if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination(); + if (s.params.scrollbar && s.scrollbar) { + s.scrollbar.set(); + } + if (s.controller && s.controller.spline) { + s.controller.spline = undefined; + } + var slideChangedBySlideTo = false; + if (s.params.freeMode) { + var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate()); + s.setWrapperTranslate(newTranslate); + s.updateActiveIndex(); + s.updateClasses(); + + if (s.params.autoHeight) { + s.updateAutoHeight(); + } + } + else { + s.updateClasses(); + if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) { + slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true); + } + else { + slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true); + } + } + if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) { + s.lazy.load(); + } + // Return locks after resize + s.params.allowSwipeToPrev = allowSwipeToPrev; + s.params.allowSwipeToNext = allowSwipeToNext; + }; + + /*========================= + Events + ===========================*/ + + //Define Touch Events + var desktopEvents = ['mousedown', 'mousemove', 'mouseup']; + if (window.navigator.pointerEnabled) desktopEvents = ['pointerdown', 'pointermove', 'pointerup']; + else if (window.navigator.msPointerEnabled) desktopEvents = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp']; + s.touchEvents = { + start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : desktopEvents[0], + move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : desktopEvents[1], + end : s.support.touch || !s.params.simulateTouch ? 'touchend' : desktopEvents[2] + }; + + + // WP8 Touch Events Fix + if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) { + (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction); + } + + // Attach/detach events + s.initEvents = function (detach) { + var actionDom = detach ? 'off' : 'on'; + var action = detach ? 'removeEventListener' : 'addEventListener'; + var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0]; + var target = s.support.touch ? touchEventsTarget : document; + + var moveCapture = s.params.nested ? true : false; + + //Touch Events + if (s.browser.ie) { + touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false); + target[action](s.touchEvents.move, s.onTouchMove, moveCapture); + target[action](s.touchEvents.end, s.onTouchEnd, false); + } + else { + if (s.support.touch) { + touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false); + touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture); + touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, false); + } + if (params.simulateTouch && !s.device.ios && !s.device.android) { + touchEventsTarget[action]('mousedown', s.onTouchStart, false); + document[action]('mousemove', s.onTouchMove, moveCapture); + document[action]('mouseup', s.onTouchEnd, false); + } + } + window[action]('resize', s.onResize); + + // Next, Prev, Index + if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { + s.nextButton[actionDom]('click', s.onClickNext); + if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey); + } + if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { + s.prevButton[actionDom]('click', s.onClickPrev); + if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey); + } + if (s.params.pagination && s.params.paginationClickable) { + s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex); + if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey); + } + + // Prevent Links Clicks + if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true); + }; + s.attachEvents = function () { + s.initEvents(); + }; + s.detachEvents = function () { + s.initEvents(true); + }; + + /*========================= + Handle Clicks + ===========================*/ + // Prevent Clicks + s.allowClick = true; + s.preventClicks = function (e) { + if (!s.allowClick) { + if (s.params.preventClicks) e.preventDefault(); + if (s.params.preventClicksPropagation && s.animating) { + e.stopPropagation(); + e.stopImmediatePropagation(); + } + } + }; + // Clicks + s.onClickNext = function (e) { + e.preventDefault(); + if (s.isEnd && !s.params.loop) return; + s.slideNext(); + }; + s.onClickPrev = function (e) { + e.preventDefault(); + if (s.isBeginning && !s.params.loop) return; + s.slidePrev(); + }; + s.onClickIndex = function (e) { + e.preventDefault(); + var index = $(this).index() * s.params.slidesPerGroup; + if (s.params.loop) index = index + s.loopedSlides; + s.slideTo(index); + }; + + /*========================= + Handle Touches + ===========================*/ + function findElementInEvent(e, selector) { + var el = $(e.target); + if (!el.is(selector)) { + if (typeof selector === 'string') { + el = el.parents(selector); + } + else if (selector.nodeType) { + var found; + el.parents().each(function (index, _el) { + if (_el === selector) found = selector; + }); + if (!found) return undefined; + else return selector; + } + } + if (el.length === 0) { + return undefined; + } + return el[0]; + } + s.updateClickedSlide = function (e) { + var slide = findElementInEvent(e, '.' + s.params.slideClass); + var slideFound = false; + if (slide) { + for (var i = 0; i < s.slides.length; i++) { + if (s.slides[i] === slide) slideFound = true; + } + } + + if (slide && slideFound) { + s.clickedSlide = slide; + s.clickedIndex = $(slide).index(); + } + else { + s.clickedSlide = undefined; + s.clickedIndex = undefined; + return; + } + if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) { + var slideToIndex = s.clickedIndex, + realIndex, + duplicatedSlides; + if (s.params.loop) { + if (s.animating) return; + realIndex = $(s.clickedSlide).attr('data-swiper-slide-index'); + if (s.params.centeredSlides) { + if ((slideToIndex < s.loopedSlides - s.params.slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + s.params.slidesPerView/2)) { + s.fixLoop(); + slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.swiper-slide-duplicate)').eq(0).index(); + setTimeout(function () { + s.slideTo(slideToIndex); + }, 0); + } + else { + s.slideTo(slideToIndex); + } + } + else { + if (slideToIndex > s.slides.length - s.params.slidesPerView) { + s.fixLoop(); + slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.swiper-slide-duplicate)').eq(0).index(); + setTimeout(function () { + s.slideTo(slideToIndex); + }, 0); + } + else { + s.slideTo(slideToIndex); + } + } + } + else { + s.slideTo(slideToIndex); + } + } + }; + + var isTouched, + isMoved, + allowTouchCallbacks, + touchStartTime, + isScrolling, + currentTranslate, + startTranslate, + allowThresholdMove, + // Form elements to match + formElements = 'input, select, textarea, button', + // Last click time + lastClickTime = Date.now(), clickTimeout, + //Velocities + velocities = [], + allowMomentumBounce; + + // Animating Flag + s.animating = false; + + // Touches information + s.touches = { + startX: 0, + startY: 0, + currentX: 0, + currentY: 0, + diff: 0 + }; + + // Touch handlers + var isTouchEvent, startMoving; + s.onTouchStart = function (e) { + if (e.originalEvent) e = e.originalEvent; + isTouchEvent = e.type === 'touchstart'; + if (!isTouchEvent && 'which' in e && e.which === 3) return; + if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) { + s.allowClick = true; + return; + } + if (s.params.swipeHandler) { + if (!findElementInEvent(e, s.params.swipeHandler)) return; + } + + var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; + var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; + + // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore + if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) { + return; + } + + isTouched = true; + isMoved = false; + allowTouchCallbacks = true; + isScrolling = undefined; + startMoving = undefined; + s.touches.startX = startX; + s.touches.startY = startY; + touchStartTime = Date.now(); + s.allowClick = true; + s.updateContainerSize(); + s.swipeDirection = undefined; + if (s.params.threshold > 0) allowThresholdMove = false; + if (e.type !== 'touchstart') { + var preventDefault = true; + if ($(e.target).is(formElements)) preventDefault = false; + if (document.activeElement && $(document.activeElement).is(formElements)) { + document.activeElement.blur(); + } + if (preventDefault) { + e.preventDefault(); + } + } + s.emit('onTouchStart', s, e); + }; + + s.onTouchMove = function (e) { + if (e.originalEvent) e = e.originalEvent; + if (isTouchEvent && e.type === 'mousemove') return; + if (e.preventedByNestedSwiper) { + s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; + s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; + return; + } + if (s.params.onlyExternal) { + // isMoved = true; + s.allowClick = false; + if (isTouched) { + s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; + s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; + touchStartTime = Date.now(); + } + return; + } + if (isTouchEvent && document.activeElement) { + if (e.target === document.activeElement && $(e.target).is(formElements)) { + isMoved = true; + s.allowClick = false; + return; + } + } + if (allowTouchCallbacks) { + s.emit('onTouchMove', s, e); + } + if (e.targetTouches && e.targetTouches.length > 1) return; + + s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; + s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; + + if (typeof isScrolling === 'undefined') { + var touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI; + isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle); + } + if (isScrolling) { + s.emit('onTouchMoveOpposite', s, e); + } + if (typeof startMoving === 'undefined' && s.browser.ieTouch) { + if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) { + startMoving = true; + } + } + if (!isTouched) return; + if (isScrolling) { + isTouched = false; + return; + } + if (!startMoving && s.browser.ieTouch) { + return; + } + s.allowClick = false; + s.emit('onSliderMove', s, e); + e.preventDefault(); + if (s.params.touchMoveStopPropagation && !s.params.nested) { + e.stopPropagation(); + } + + if (!isMoved) { + if (params.loop) { + s.fixLoop(); + } + startTranslate = s.getWrapperTranslate(); + s.setWrapperTransition(0); + if (s.animating) { + s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd'); + } + if (s.params.autoplay && s.autoplaying) { + if (s.params.autoplayDisableOnInteraction) { + s.stopAutoplay(); + } + else { + s.pauseAutoplay(); + } + } + allowMomentumBounce = false; + //Grab Cursor + if (s.params.grabCursor) { + s.container[0].style.cursor = 'move'; + s.container[0].style.cursor = '-webkit-grabbing'; + s.container[0].style.cursor = '-moz-grabbin'; + s.container[0].style.cursor = 'grabbing'; + } + } + isMoved = true; + + var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY; + + diff = diff * s.params.touchRatio; + if (s.rtl) diff = -diff; + + s.swipeDirection = diff > 0 ? 'prev' : 'next'; + currentTranslate = diff + startTranslate; + + var disableParentSwiper = true; + if ((diff > 0 && currentTranslate > s.minTranslate())) { + disableParentSwiper = false; + if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio); + } + else if (diff < 0 && currentTranslate < s.maxTranslate()) { + disableParentSwiper = false; + if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio); + } + + if (disableParentSwiper) { + e.preventedByNestedSwiper = true; + } + + // Directions locks + if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) { + currentTranslate = startTranslate; + } + if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) { + currentTranslate = startTranslate; + } + + if (!s.params.followFinger) return; + + // Threshold + if (s.params.threshold > 0) { + if (Math.abs(diff) > s.params.threshold || allowThresholdMove) { + if (!allowThresholdMove) { + allowThresholdMove = true; + s.touches.startX = s.touches.currentX; + s.touches.startY = s.touches.currentY; + currentTranslate = startTranslate; + s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY; + return; + } + } + else { + currentTranslate = startTranslate; + return; + } + } + // Update active index in free mode + if (s.params.freeMode || s.params.watchSlidesProgress) { + s.updateActiveIndex(); + } + if (s.params.freeMode) { + //Velocity + if (velocities.length === 0) { + velocities.push({ + position: s.touches[s.isHorizontal() ? 'startX' : 'startY'], + time: touchStartTime + }); + } + velocities.push({ + position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'], + time: (new window.Date()).getTime() + }); + } + // Update progress + s.updateProgress(currentTranslate); + // Update translate + s.setWrapperTranslate(currentTranslate); + }; + s.onTouchEnd = function (e) { + if (e.originalEvent) e = e.originalEvent; + if (allowTouchCallbacks) { + s.emit('onTouchEnd', s, e); + } + allowTouchCallbacks = false; + if (!isTouched) return; + //Return Grab Cursor + if (s.params.grabCursor && isMoved && isTouched) { + s.container[0].style.cursor = 'move'; + s.container[0].style.cursor = '-webkit-grab'; + s.container[0].style.cursor = '-moz-grab'; + s.container[0].style.cursor = 'grab'; + } + + // Time diff + var touchEndTime = Date.now(); + var timeDiff = touchEndTime - touchStartTime; + + // Tap, doubleTap, Click + if (s.allowClick) { + s.updateClickedSlide(e); + s.emit('onTap', s, e); + if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) { + if (clickTimeout) clearTimeout(clickTimeout); + clickTimeout = setTimeout(function () { + if (!s) return; + if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) { + s.paginationContainer.toggleClass(s.params.paginationHiddenClass); + } + s.emit('onClick', s, e); + }, 300); + + } + if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) { + if (clickTimeout) clearTimeout(clickTimeout); + s.emit('onDoubleTap', s, e); + } + } + + lastClickTime = Date.now(); + setTimeout(function () { + if (s) s.allowClick = true; + }, 0); + + if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) { + isTouched = isMoved = false; + return; + } + isTouched = isMoved = false; + + var currentPos; + if (s.params.followFinger) { + currentPos = s.rtl ? s.translate : -s.translate; + } + else { + currentPos = -currentTranslate; + } + if (s.params.freeMode) { + if (currentPos < -s.minTranslate()) { + s.slideTo(s.activeIndex); + return; + } + else if (currentPos > -s.maxTranslate()) { + if (s.slides.length < s.snapGrid.length) { + s.slideTo(s.snapGrid.length - 1); + } + else { + s.slideTo(s.slides.length - 1); + } + return; + } + + if (s.params.freeModeMomentum) { + if (velocities.length > 1) { + var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop(); + + var distance = lastMoveEvent.position - velocityEvent.position; + var time = lastMoveEvent.time - velocityEvent.time; + s.velocity = distance / time; + s.velocity = s.velocity / 2; + if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) { + s.velocity = 0; + } + // this implies that the user stopped moving a finger then released. + // There would be no events with distance zero, so the last event is stale. + if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) { + s.velocity = 0; + } + } else { + s.velocity = 0; + } + + velocities.length = 0; + var momentumDuration = 1000 * s.params.freeModeMomentumRatio; + var momentumDistance = s.velocity * momentumDuration; + + var newPosition = s.translate + momentumDistance; + if (s.rtl) newPosition = - newPosition; + var doBounce = false; + var afterBouncePosition; + var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio; + if (newPosition < s.maxTranslate()) { + if (s.params.freeModeMomentumBounce) { + if (newPosition + s.maxTranslate() < -bounceAmount) { + newPosition = s.maxTranslate() - bounceAmount; + } + afterBouncePosition = s.maxTranslate(); + doBounce = true; + allowMomentumBounce = true; + } + else { + newPosition = s.maxTranslate(); + } + } + else if (newPosition > s.minTranslate()) { + if (s.params.freeModeMomentumBounce) { + if (newPosition - s.minTranslate() > bounceAmount) { + newPosition = s.minTranslate() + bounceAmount; + } + afterBouncePosition = s.minTranslate(); + doBounce = true; + allowMomentumBounce = true; + } + else { + newPosition = s.minTranslate(); + } + } + else if (s.params.freeModeSticky) { + var j = 0, + nextSlide; + for (j = 0; j < s.snapGrid.length; j += 1) { + if (s.snapGrid[j] > -newPosition) { + nextSlide = j; + break; + } + + } + if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') { + newPosition = s.snapGrid[nextSlide]; + } else { + newPosition = s.snapGrid[nextSlide - 1]; + } + if (!s.rtl) newPosition = - newPosition; + } + //Fix duration + if (s.velocity !== 0) { + if (s.rtl) { + momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity); + } + else { + momentumDuration = Math.abs((newPosition - s.translate) / s.velocity); + } + } + else if (s.params.freeModeSticky) { + s.slideReset(); + return; + } + + if (s.params.freeModeMomentumBounce && doBounce) { + s.updateProgress(afterBouncePosition); + s.setWrapperTransition(momentumDuration); + s.setWrapperTranslate(newPosition); + s.onTransitionStart(); + s.animating = true; + s.wrapper.transitionEnd(function () { + if (!s || !allowMomentumBounce) return; + s.emit('onMomentumBounce', s); + + s.setWrapperTransition(s.params.speed); + s.setWrapperTranslate(afterBouncePosition); + s.wrapper.transitionEnd(function () { + if (!s) return; + s.onTransitionEnd(); + }); + }); + } else if (s.velocity) { + s.updateProgress(newPosition); + s.setWrapperTransition(momentumDuration); + s.setWrapperTranslate(newPosition); + s.onTransitionStart(); + if (!s.animating) { + s.animating = true; + s.wrapper.transitionEnd(function () { + if (!s) return; + s.onTransitionEnd(); + }); + } + + } else { + s.updateProgress(newPosition); + } + + s.updateActiveIndex(); + } + if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) { + s.updateProgress(); + s.updateActiveIndex(); + } + return; + } + + // Find current slide + var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0]; + for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) { + if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') { + if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) { + stopIndex = i; + groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i]; + } + } + else { + if (currentPos >= s.slidesGrid[i]) { + stopIndex = i; + groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2]; + } + } + } + + // Find current slide size + var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize; + + if (timeDiff > s.params.longSwipesMs) { + // Long touches + if (!s.params.longSwipes) { + s.slideTo(s.activeIndex); + return; + } + if (s.swipeDirection === 'next') { + if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup); + else s.slideTo(stopIndex); + + } + if (s.swipeDirection === 'prev') { + if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup); + else s.slideTo(stopIndex); + } + } + else { + // Short swipes + if (!s.params.shortSwipes) { + s.slideTo(s.activeIndex); + return; + } + if (s.swipeDirection === 'next') { + s.slideTo(stopIndex + s.params.slidesPerGroup); + + } + if (s.swipeDirection === 'prev') { + s.slideTo(stopIndex); + } + } + }; + /*========================= + Transitions + ===========================*/ + s._slideTo = function (slideIndex, speed) { + return s.slideTo(slideIndex, speed, true, true); + }; + s.slideTo = function (slideIndex, speed, runCallbacks, internal) { + if (typeof runCallbacks === 'undefined') runCallbacks = true; + if (typeof slideIndex === 'undefined') slideIndex = 0; + if (slideIndex < 0) slideIndex = 0; + s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup); + if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1; + + var translate = - s.snapGrid[s.snapIndex]; + // Stop autoplay + if (s.params.autoplay && s.autoplaying) { + if (internal || !s.params.autoplayDisableOnInteraction) { + s.pauseAutoplay(speed); + } + else { + s.stopAutoplay(); + } + } + // Update progress + s.updateProgress(translate); + + // Normalize slideIndex + for (var i = 0; i < s.slidesGrid.length; i++) { + if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) { + slideIndex = i; + } + } + + // Directions locks + if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) { + return false; + } + if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) { + if ((s.activeIndex || 0) !== slideIndex ) return false; + } + + // Update Index + if (typeof speed === 'undefined') speed = s.params.speed; + s.previousIndex = s.activeIndex || 0; + s.activeIndex = slideIndex; + + if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) { + // Update Height + if (s.params.autoHeight) { + s.updateAutoHeight(); + } + s.updateClasses(); + if (s.params.effect !== 'slide') { + s.setWrapperTranslate(translate); + } + return false; + } + s.updateClasses(); + s.onTransitionStart(runCallbacks); + + if (speed === 0) { + s.setWrapperTranslate(translate); + s.setWrapperTransition(0); + s.onTransitionEnd(runCallbacks); + } + else { + s.setWrapperTranslate(translate); + s.setWrapperTransition(speed); + if (!s.animating) { + s.animating = true; + s.wrapper.transitionEnd(function () { + if (!s) return; + s.onTransitionEnd(runCallbacks); + }); + } + + } + + return true; + }; + + s.onTransitionStart = function (runCallbacks) { + if (typeof runCallbacks === 'undefined') runCallbacks = true; + if (s.params.autoHeight) { + s.updateAutoHeight(); + } + if (s.lazy) s.lazy.onTransitionStart(); + if (runCallbacks) { + s.emit('onTransitionStart', s); + if (s.activeIndex !== s.previousIndex) { + s.emit('onSlideChangeStart', s); + if (s.activeIndex > s.previousIndex) { + s.emit('onSlideNextStart', s); + } + else { + s.emit('onSlidePrevStart', s); + } + } + + } + }; + s.onTransitionEnd = function (runCallbacks) { + s.animating = false; + s.setWrapperTransition(0); + if (typeof runCallbacks === 'undefined') runCallbacks = true; + if (s.lazy) s.lazy.onTransitionEnd(); + if (runCallbacks) { + s.emit('onTransitionEnd', s); + if (s.activeIndex !== s.previousIndex) { + s.emit('onSlideChangeEnd', s); + if (s.activeIndex > s.previousIndex) { + s.emit('onSlideNextEnd', s); + } + else { + s.emit('onSlidePrevEnd', s); + } + } + } + if (s.params.hashnav && s.hashnav) { + s.hashnav.setHash(); + } + + }; + s.slideNext = function (runCallbacks, speed, internal) { + if (s.params.loop) { + if (s.animating) return false; + s.fixLoop(); + var clientLeft = s.container[0].clientLeft; + return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal); + } + else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal); + }; + s._slideNext = function (speed) { + return s.slideNext(true, speed, true); + }; + s.slidePrev = function (runCallbacks, speed, internal) { + if (s.params.loop) { + if (s.animating) return false; + s.fixLoop(); + var clientLeft = s.container[0].clientLeft; + return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal); + } + else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal); + }; + s._slidePrev = function (speed) { + return s.slidePrev(true, speed, true); + }; + s.slideReset = function (runCallbacks, speed, internal) { + return s.slideTo(s.activeIndex, speed, runCallbacks); + }; + + /*========================= + Translate/transition helpers + ===========================*/ + s.setWrapperTransition = function (duration, byController) { + s.wrapper.transition(duration); + if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { + s.effects[s.params.effect].setTransition(duration); + } + if (s.params.parallax && s.parallax) { + s.parallax.setTransition(duration); + } + if (s.params.scrollbar && s.scrollbar) { + s.scrollbar.setTransition(duration); + } + if (s.params.control && s.controller) { + s.controller.setTransition(duration, byController); + } + s.emit('onSetTransition', s, duration); + }; + s.setWrapperTranslate = function (translate, updateActiveIndex, byController) { + var x = 0, y = 0, z = 0; + if (s.isHorizontal()) { + x = s.rtl ? -translate : translate; + } + else { + y = translate; + } + + if (s.params.roundLengths) { + x = round(x); + y = round(y); + } + + if (!s.params.virtualTranslate) { + if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)'); + else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)'); + } + + s.translate = s.isHorizontal() ? x : y; + + // Check if we need to update progress + var progress; + var translatesDiff = s.maxTranslate() - s.minTranslate(); + if (translatesDiff === 0) { + progress = 0; + } + else { + progress = (translate - s.minTranslate()) / (translatesDiff); + } + if (progress !== s.progress) { + s.updateProgress(translate); + } + + if (updateActiveIndex) s.updateActiveIndex(); + if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { + s.effects[s.params.effect].setTranslate(s.translate); + } + if (s.params.parallax && s.parallax) { + s.parallax.setTranslate(s.translate); + } + if (s.params.scrollbar && s.scrollbar) { + s.scrollbar.setTranslate(s.translate); + } + if (s.params.control && s.controller) { + s.controller.setTranslate(s.translate, byController); + } + s.emit('onSetTranslate', s, s.translate); + }; + + s.getTranslate = function (el, axis) { + var matrix, curTransform, curStyle, transformMatrix; + + // automatic axis detection + if (typeof axis === 'undefined') { + axis = 'x'; + } + + if (s.params.virtualTranslate) { + return s.rtl ? -s.translate : s.translate; + } + + curStyle = window.getComputedStyle(el, null); + if (window.WebKitCSSMatrix) { + curTransform = curStyle.transform || curStyle.webkitTransform; + if (curTransform.split(',').length > 6) { + curTransform = curTransform.split(', ').map(function(a){ + return a.replace(',','.'); + }).join(', '); + } + // Some old versions of Webkit choke when 'none' is passed; pass + // empty string instead in this case + transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); + } + else { + transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); + matrix = transformMatrix.toString().split(','); + } + + if (axis === 'x') { + //Latest Chrome and webkits Fix + if (window.WebKitCSSMatrix) + curTransform = transformMatrix.m41; + //Crazy IE10 Matrix + else if (matrix.length === 16) + curTransform = parseFloat(matrix[12]); + //Normal Browsers + else + curTransform = parseFloat(matrix[4]); + } + if (axis === 'y') { + //Latest Chrome and webkits Fix + if (window.WebKitCSSMatrix) + curTransform = transformMatrix.m42; + //Crazy IE10 Matrix + else if (matrix.length === 16) + curTransform = parseFloat(matrix[13]); + //Normal Browsers + else + curTransform = parseFloat(matrix[5]); + } + if (s.rtl && curTransform) curTransform = -curTransform; + return curTransform || 0; + }; + s.getWrapperTranslate = function (axis) { + if (typeof axis === 'undefined') { + axis = s.isHorizontal() ? 'x' : 'y'; + } + return s.getTranslate(s.wrapper[0], axis); + }; + + /*========================= + Observer + ===========================*/ + s.observers = []; + function initObserver(target, options) { + options = options || {}; + // create an observer instance + var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; + var observer = new ObserverFunc(function (mutations) { + mutations.forEach(function (mutation) { + s.onResize(true); + s.emit('onObserverUpdate', s, mutation); + }); + }); + + observer.observe(target, { + attributes: typeof options.attributes === 'undefined' ? true : options.attributes, + childList: typeof options.childList === 'undefined' ? true : options.childList, + characterData: typeof options.characterData === 'undefined' ? true : options.characterData + }); + + s.observers.push(observer); + } + s.initObservers = function () { + if (s.params.observeParents) { + var containerParents = s.container.parents(); + for (var i = 0; i < containerParents.length; i++) { + initObserver(containerParents[i]); + } + } + + // Observe container + initObserver(s.container[0], {childList: false}); + + // Observe wrapper + initObserver(s.wrapper[0], {attributes: false}); + }; + s.disconnectObservers = function () { + for (var i = 0; i < s.observers.length; i++) { + s.observers[i].disconnect(); + } + s.observers = []; + }; + /*========================= + Loop + ===========================*/ + // Create looped slides + s.createLoop = function () { + // Remove duplicated slides + s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove(); + + var slides = s.wrapper.children('.' + s.params.slideClass); + + if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length; + + s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10); + s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides; + if (s.loopedSlides > slides.length) { + s.loopedSlides = slides.length; + } + + var prependSlides = [], appendSlides = [], i; + slides.each(function (index, el) { + var slide = $(this); + if (index < s.loopedSlides) appendSlides.push(el); + if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el); + slide.attr('data-swiper-slide-index', index); + }); + for (i = 0; i < appendSlides.length; i++) { + s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass)); + } + for (i = prependSlides.length - 1; i >= 0; i--) { + s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass)); + } + }; + s.destroyLoop = function () { + s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove(); + s.slides.removeAttr('data-swiper-slide-index'); + }; + s.reLoop = function (updatePosition) { + var oldIndex = s.activeIndex - s.loopedSlides; + s.destroyLoop(); + s.createLoop(); + s.updateSlidesSize(); + if (updatePosition) { + s.slideTo(oldIndex + s.loopedSlides, 0, false); + } + + }; + s.fixLoop = function () { + var newIndex; + //Fix For Negative Oversliding + if (s.activeIndex < s.loopedSlides) { + newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex; + newIndex = newIndex + s.loopedSlides; + s.slideTo(newIndex, 0, false, true); + } + //Fix For Positive Oversliding + else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) { + newIndex = -s.slides.length + s.activeIndex + s.loopedSlides; + newIndex = newIndex + s.loopedSlides; + s.slideTo(newIndex, 0, false, true); + } + }; + /*========================= + Append/Prepend/Remove Slides + ===========================*/ + s.appendSlide = function (slides) { + if (s.params.loop) { + s.destroyLoop(); + } + if (typeof slides === 'object' && slides.length) { + for (var i = 0; i < slides.length; i++) { + if (slides[i]) s.wrapper.append(slides[i]); + } + } + else { + s.wrapper.append(slides); + } + if (s.params.loop) { + s.createLoop(); + } + if (!(s.params.observer && s.support.observer)) { + s.update(true); + } + }; + s.prependSlide = function (slides) { + if (s.params.loop) { + s.destroyLoop(); + } + var newActiveIndex = s.activeIndex + 1; + if (typeof slides === 'object' && slides.length) { + for (var i = 0; i < slides.length; i++) { + if (slides[i]) s.wrapper.prepend(slides[i]); + } + newActiveIndex = s.activeIndex + slides.length; + } + else { + s.wrapper.prepend(slides); + } + if (s.params.loop) { + s.createLoop(); + } + if (!(s.params.observer && s.support.observer)) { + s.update(true); + } + s.slideTo(newActiveIndex, 0, false); + }; + s.removeSlide = function (slidesIndexes) { + if (s.params.loop) { + s.destroyLoop(); + s.slides = s.wrapper.children('.' + s.params.slideClass); + } + var newActiveIndex = s.activeIndex, + indexToRemove; + if (typeof slidesIndexes === 'object' && slidesIndexes.length) { + for (var i = 0; i < slidesIndexes.length; i++) { + indexToRemove = slidesIndexes[i]; + if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove(); + if (indexToRemove < newActiveIndex) newActiveIndex--; + } + newActiveIndex = Math.max(newActiveIndex, 0); + } + else { + indexToRemove = slidesIndexes; + if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove(); + if (indexToRemove < newActiveIndex) newActiveIndex--; + newActiveIndex = Math.max(newActiveIndex, 0); + } + + if (s.params.loop) { + s.createLoop(); + } + + if (!(s.params.observer && s.support.observer)) { + s.update(true); + } + if (s.params.loop) { + s.slideTo(newActiveIndex + s.loopedSlides, 0, false); + } + else { + s.slideTo(newActiveIndex, 0, false); + } + + }; + s.removeAllSlides = function () { + var slidesIndexes = []; + for (var i = 0; i < s.slides.length; i++) { + slidesIndexes.push(i); + } + s.removeSlide(slidesIndexes); + }; + + + /*========================= + Effects + ===========================*/ + s.effects = { + fade: { + setTranslate: function () { + for (var i = 0; i < s.slides.length; i++) { + var slide = s.slides.eq(i); + var offset = slide[0].swiperSlideOffset; + var tx = -offset; + if (!s.params.virtualTranslate) tx = tx - s.translate; + var ty = 0; + if (!s.isHorizontal()) { + ty = tx; + tx = 0; + } + var slideOpacity = s.params.fade.crossFade ? + Math.max(1 - Math.abs(slide[0].progress), 0) : + 1 + Math.min(Math.max(slide[0].progress, -1), 0); + slide + .css({ + opacity: slideOpacity + }) + .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)'); + + } + + }, + setTransition: function (duration) { + s.slides.transition(duration); + if (s.params.virtualTranslate && duration !== 0) { + var eventTriggered = false; + s.slides.transitionEnd(function () { + if (eventTriggered) return; + if (!s) return; + eventTriggered = true; + s.animating = false; + var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd']; + for (var i = 0; i < triggerEvents.length; i++) { + s.wrapper.trigger(triggerEvents[i]); + } + }); + } + } + }, + flip: { + setTranslate: function () { + for (var i = 0; i < s.slides.length; i++) { + var slide = s.slides.eq(i); + var progress = slide[0].progress; + if (s.params.flip.limitRotation) { + progress = Math.max(Math.min(slide[0].progress, 1), -1); + } + var offset = slide[0].swiperSlideOffset; + var rotate = -180 * progress, + rotateY = rotate, + rotateX = 0, + tx = -offset, + ty = 0; + if (!s.isHorizontal()) { + ty = tx; + tx = 0; + rotateX = -rotateY; + rotateY = 0; + } + else if (s.rtl) { + rotateY = -rotateY; + } + + slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length; + + if (s.params.flip.slideShadows) { + //Set shadows + var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); + var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); + if (shadowBefore.length === 0) { + shadowBefore = $('
'); + slide.append(shadowBefore); + } + if (shadowAfter.length === 0) { + shadowAfter = $('
'); + slide.append(shadowAfter); + } + if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); + if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); + } + + slide + .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)'); + } + }, + setTransition: function (duration) { + s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); + if (s.params.virtualTranslate && duration !== 0) { + var eventTriggered = false; + s.slides.eq(s.activeIndex).transitionEnd(function () { + if (eventTriggered) return; + if (!s) return; + if (!$(this).hasClass(s.params.slideActiveClass)) return; + eventTriggered = true; + s.animating = false; + var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd']; + for (var i = 0; i < triggerEvents.length; i++) { + s.wrapper.trigger(triggerEvents[i]); + } + }); + } + } + }, + cube: { + setTranslate: function () { + var wrapperRotate = 0, cubeShadow; + if (s.params.cube.shadow) { + if (s.isHorizontal()) { + cubeShadow = s.wrapper.find('.swiper-cube-shadow'); + if (cubeShadow.length === 0) { + cubeShadow = $('
'); + s.wrapper.append(cubeShadow); + } + cubeShadow.css({height: s.width + 'px'}); + } + else { + cubeShadow = s.container.find('.swiper-cube-shadow'); + if (cubeShadow.length === 0) { + cubeShadow = $('
'); + s.container.append(cubeShadow); + } + } + } + for (var i = 0; i < s.slides.length; i++) { + var slide = s.slides.eq(i); + var slideAngle = i * 90; + var round = Math.floor(slideAngle / 360); + if (s.rtl) { + slideAngle = -slideAngle; + round = Math.floor(-slideAngle / 360); + } + var progress = Math.max(Math.min(slide[0].progress, 1), -1); + var tx = 0, ty = 0, tz = 0; + if (i % 4 === 0) { + tx = - round * 4 * s.size; + tz = 0; + } + else if ((i - 1) % 4 === 0) { + tx = 0; + tz = - round * 4 * s.size; + } + else if ((i - 2) % 4 === 0) { + tx = s.size + round * 4 * s.size; + tz = s.size; + } + else if ((i - 3) % 4 === 0) { + tx = - s.size; + tz = 3 * s.size + s.size * 4 * round; + } + if (s.rtl) { + tx = -tx; + } + + if (!s.isHorizontal()) { + ty = tx; + tx = 0; + } + + var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)'; + if (progress <= 1 && progress > -1) { + wrapperRotate = i * 90 + progress * 90; + if (s.rtl) wrapperRotate = -i * 90 - progress * 90; + } + slide.transform(transform); + if (s.params.cube.slideShadows) { + //Set shadows + var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); + var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); + if (shadowBefore.length === 0) { + shadowBefore = $('
'); + slide.append(shadowBefore); + } + if (shadowAfter.length === 0) { + shadowAfter = $('
'); + slide.append(shadowAfter); + } + if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); + if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); + } + } + s.wrapper.css({ + '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px', + '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px', + '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px', + 'transform-origin': '50% 50% -' + (s.size / 2) + 'px' + }); + + if (s.params.cube.shadow) { + if (s.isHorizontal()) { + cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')'); + } + else { + var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90; + var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2); + var scale1 = s.params.cube.shadowScale, + scale2 = s.params.cube.shadowScale / multiplier, + offset = s.params.cube.shadowOffset; + cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)'); + } + } + var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0; + s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)'); + }, + setTransition: function (duration) { + s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); + if (s.params.cube.shadow && !s.isHorizontal()) { + s.container.find('.swiper-cube-shadow').transition(duration); + } + } + }, + coverflow: { + setTranslate: function () { + var transform = s.translate; + var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2; + var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate; + var translate = s.params.coverflow.depth; + //Each slide offset from center + for (var i = 0, length = s.slides.length; i < length; i++) { + var slide = s.slides.eq(i); + var slideSize = s.slidesSizesGrid[i]; + var slideOffset = slide[0].swiperSlideOffset; + var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier; + + var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0; + var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier; + // var rotateZ = 0 + var translateZ = -translate * Math.abs(offsetMultiplier); + + var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier); + var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0; + + //Fix for ultra small values + if (Math.abs(translateX) < 0.001) translateX = 0; + if (Math.abs(translateY) < 0.001) translateY = 0; + if (Math.abs(translateZ) < 0.001) translateZ = 0; + if (Math.abs(rotateY) < 0.001) rotateY = 0; + if (Math.abs(rotateX) < 0.001) rotateX = 0; + + var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)'; + + slide.transform(slideTransform); + slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; + if (s.params.coverflow.slideShadows) { + //Set shadows + var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top'); + var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom'); + if (shadowBefore.length === 0) { + shadowBefore = $('
'); + slide.append(shadowBefore); + } + if (shadowAfter.length === 0) { + shadowAfter = $('
'); + slide.append(shadowAfter); + } + if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; + if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0; + } + } + + //Set correct perspective for IE10 + if (s.browser.ie) { + var ws = s.wrapper[0].style; + ws.perspectiveOrigin = center + 'px 50%'; + } + }, + setTransition: function (duration) { + s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); + } + } + }; + + /*========================= + Images Lazy Loading + ===========================*/ + s.lazy = { + initialImageLoaded: false, + loadImageInSlide: function (index, loadInDuplicate) { + if (typeof index === 'undefined') return; + if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true; + if (s.slides.length === 0) return; + + var slide = s.slides.eq(index); + var img = slide.find('.swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)'); + if (slide.hasClass('swiper-lazy') && !slide.hasClass('swiper-lazy-loaded') && !slide.hasClass('swiper-lazy-loading')) { + img = img.add(slide[0]); + } + if (img.length === 0) return; + + img.each(function () { + var _img = $(this); + _img.addClass('swiper-lazy-loading'); + var background = _img.attr('data-background'); + var src = _img.attr('data-src'), + srcset = _img.attr('data-srcset'); + s.loadImage(_img[0], (src || background), srcset, false, function () { + if (background) { + _img.css('background-image', 'url("' + background + '")'); + _img.removeAttr('data-background'); + } + else { + if (srcset) { + _img.attr('srcset', srcset); + _img.removeAttr('data-srcset'); + } + if (src) { + _img.attr('src', src); + _img.removeAttr('data-src'); + } + + } + + _img.addClass('swiper-lazy-loaded').removeClass('swiper-lazy-loading'); + slide.find('.swiper-lazy-preloader, .preloader').remove(); + if (s.params.loop && loadInDuplicate) { + var slideOriginalIndex = slide.attr('data-swiper-slide-index'); + if (slide.hasClass(s.params.slideDuplicateClass)) { + var originalSlide = s.wrapper.children('[data-swiper-slide-index="' + slideOriginalIndex + '"]:not(.' + s.params.slideDuplicateClass + ')'); + s.lazy.loadImageInSlide(originalSlide.index(), false); + } + else { + var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + slideOriginalIndex + '"]'); + s.lazy.loadImageInSlide(duplicatedSlide.index(), false); + } + } + s.emit('onLazyImageReady', s, slide[0], _img[0]); + }); + + s.emit('onLazyImageLoad', s, slide[0], _img[0]); + }); + + }, + load: function () { + var i; + if (s.params.watchSlidesVisibility) { + s.wrapper.children('.' + s.params.slideVisibleClass).each(function () { + s.lazy.loadImageInSlide($(this).index()); + }); + } + else { + if (s.params.slidesPerView > 1) { + for (i = s.activeIndex; i < s.activeIndex + s.params.slidesPerView ; i++) { + if (s.slides[i]) s.lazy.loadImageInSlide(i); + } + } + else { + s.lazy.loadImageInSlide(s.activeIndex); + } + } + if (s.params.lazyLoadingInPrevNext) { + if (s.params.slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) { + var amount = s.params.lazyLoadingInPrevNextAmount; + var spv = s.params.slidesPerView; + var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length); + var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0); + // Next Slides + for (i = s.activeIndex + s.params.slidesPerView; i < maxIndex; i++) { + if (s.slides[i]) s.lazy.loadImageInSlide(i); + } + // Prev Slides + for (i = minIndex; i < s.activeIndex ; i++) { + if (s.slides[i]) s.lazy.loadImageInSlide(i); + } + } + else { + var nextSlide = s.wrapper.children('.' + s.params.slideNextClass); + if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index()); + + var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass); + if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index()); + } + } + }, + onTransitionStart: function () { + if (s.params.lazyLoading) { + if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) { + s.lazy.load(); + } + } + }, + onTransitionEnd: function () { + if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) { + s.lazy.load(); + } + } + }; + + + /*========================= + Scrollbar + ===========================*/ + s.scrollbar = { + isTouched: false, + setDragPosition: function (e) { + var sb = s.scrollbar; + var x = 0, y = 0; + var translate; + var pointerPosition = s.isHorizontal() ? + ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) : + ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ; + var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2; + var positionMin = -s.minTranslate() * sb.moveDivider; + var positionMax = -s.maxTranslate() * sb.moveDivider; + if (position < positionMin) { + position = positionMin; + } + else if (position > positionMax) { + position = positionMax; + } + position = -position / sb.moveDivider; + s.updateProgress(position); + s.setWrapperTranslate(position, true); + }, + dragStart: function (e) { + var sb = s.scrollbar; + sb.isTouched = true; + e.preventDefault(); + e.stopPropagation(); + + sb.setDragPosition(e); + clearTimeout(sb.dragTimeout); + + sb.track.transition(0); + if (s.params.scrollbarHide) { + sb.track.css('opacity', 1); + } + s.wrapper.transition(100); + sb.drag.transition(100); + s.emit('onScrollbarDragStart', s); + }, + dragMove: function (e) { + var sb = s.scrollbar; + if (!sb.isTouched) return; + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + sb.setDragPosition(e); + s.wrapper.transition(0); + sb.track.transition(0); + sb.drag.transition(0); + s.emit('onScrollbarDragMove', s); + }, + dragEnd: function (e) { + var sb = s.scrollbar; + if (!sb.isTouched) return; + sb.isTouched = false; + if (s.params.scrollbarHide) { + clearTimeout(sb.dragTimeout); + sb.dragTimeout = setTimeout(function () { + sb.track.css('opacity', 0); + sb.track.transition(400); + }, 1000); + + } + s.emit('onScrollbarDragEnd', s); + if (s.params.scrollbarSnapOnRelease) { + s.slideReset(); + } + }, + enableDraggable: function () { + var sb = s.scrollbar; + var target = s.support.touch ? sb.track : document; + $(sb.track).on(s.touchEvents.start, sb.dragStart); + $(target).on(s.touchEvents.move, sb.dragMove); + $(target).on(s.touchEvents.end, sb.dragEnd); + }, + disableDraggable: function () { + var sb = s.scrollbar; + var target = s.support.touch ? sb.track : document; + $(sb.track).off(s.touchEvents.start, sb.dragStart); + $(target).off(s.touchEvents.move, sb.dragMove); + $(target).off(s.touchEvents.end, sb.dragEnd); + }, + set: function () { + if (!s.params.scrollbar) return; + var sb = s.scrollbar; + sb.track = $(s.params.scrollbar); + if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) { + sb.track = s.container.find(s.params.scrollbar); + } + sb.drag = sb.track.find('.swiper-scrollbar-drag'); + if (sb.drag.length === 0) { + sb.drag = $('
'); + sb.track.append(sb.drag); + } + sb.drag[0].style.width = ''; + sb.drag[0].style.height = ''; + sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight; + + sb.divider = s.size / s.virtualSize; + sb.moveDivider = sb.divider * (sb.trackSize / s.size); + sb.dragSize = sb.trackSize * sb.divider; + + if (s.isHorizontal()) { + sb.drag[0].style.width = sb.dragSize + 'px'; + } + else { + sb.drag[0].style.height = sb.dragSize + 'px'; + } + + if (sb.divider >= 1) { + sb.track[0].style.display = 'none'; + } + else { + sb.track[0].style.display = ''; + } + if (s.params.scrollbarHide) { + sb.track[0].style.opacity = 0; + } + }, + setTranslate: function () { + if (!s.params.scrollbar) return; + var diff; + var sb = s.scrollbar; + var translate = s.translate || 0; + var newPos; + + var newSize = sb.dragSize; + newPos = (sb.trackSize - sb.dragSize) * s.progress; + if (s.rtl && s.isHorizontal()) { + newPos = -newPos; + if (newPos > 0) { + newSize = sb.dragSize - newPos; + newPos = 0; + } + else if (-newPos + sb.dragSize > sb.trackSize) { + newSize = sb.trackSize + newPos; + } + } + else { + if (newPos < 0) { + newSize = sb.dragSize + newPos; + newPos = 0; + } + else if (newPos + sb.dragSize > sb.trackSize) { + newSize = sb.trackSize - newPos; + } + } + if (s.isHorizontal()) { + if (s.support.transforms3d) { + sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)'); + } + else { + sb.drag.transform('translateX(' + (newPos) + 'px)'); + } + sb.drag[0].style.width = newSize + 'px'; + } + else { + if (s.support.transforms3d) { + sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)'); + } + else { + sb.drag.transform('translateY(' + (newPos) + 'px)'); + } + sb.drag[0].style.height = newSize + 'px'; + } + if (s.params.scrollbarHide) { + clearTimeout(sb.timeout); + sb.track[0].style.opacity = 1; + sb.timeout = setTimeout(function () { + sb.track[0].style.opacity = 0; + sb.track.transition(400); + }, 1000); + } + }, + setTransition: function (duration) { + if (!s.params.scrollbar) return; + s.scrollbar.drag.transition(duration); + } + }; + + /*========================= + Controller + ===========================*/ + s.controller = { + LinearSpline: function (x, y) { + this.x = x; + this.y = y; + this.lastIndex = x.length - 1; + // Given an x value (x2), return the expected y2 value: + // (x1,y1) is the known point before given value, + // (x3,y3) is the known point after given value. + var i1, i3; + var l = this.x.length; + + this.interpolate = function (x2) { + if (!x2) return 0; + + // Get the indexes of x1 and x3 (the array indexes before and after given x2): + i3 = binarySearch(this.x, x2); + i1 = i3 - 1; + + // We have our indexes i1 & i3, so we can calculate already: + // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1 + return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1]; + }; + + var binarySearch = (function() { + var maxIndex, minIndex, guess; + return function(array, val) { + minIndex = -1; + maxIndex = array.length; + while (maxIndex - minIndex > 1) + if (array[guess = maxIndex + minIndex >> 1] <= val) { + minIndex = guess; + } else { + maxIndex = guess; + } + return maxIndex; + }; + })(); + }, + //xxx: for now i will just save one spline function to to + getInterpolateFunction: function(c){ + if(!s.controller.spline) s.controller.spline = s.params.loop ? + new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) : + new s.controller.LinearSpline(s.snapGrid, c.snapGrid); + }, + setTranslate: function (translate, byController) { + var controlled = s.params.control; + var multiplier, controlledTranslate; + function setControlledTranslate(c) { + // this will create an Interpolate function based on the snapGrids + // x is the Grid of the scrolled scroller and y will be the controlled scroller + // it makes sense to create this only once and recall it for the interpolation + // the function does a lot of value caching for performance + translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate; + if (s.params.controlBy === 'slide') { + s.controller.getInterpolateFunction(c); + // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid + // but it did not work out + controlledTranslate = -s.controller.spline.interpolate(-translate); + } + + if(!controlledTranslate || s.params.controlBy === 'container'){ + multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate()); + controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate(); + } + + if (s.params.controlInverse) { + controlledTranslate = c.maxTranslate() - controlledTranslate; + } + c.updateProgress(controlledTranslate); + c.setWrapperTranslate(controlledTranslate, false, s); + c.updateActiveIndex(); + } + if (s.isArray(controlled)) { + for (var i = 0; i < controlled.length; i++) { + if (controlled[i] !== byController && controlled[i] instanceof Swiper) { + setControlledTranslate(controlled[i]); + } + } + } + else if (controlled instanceof Swiper && byController !== controlled) { + + setControlledTranslate(controlled); + } + }, + setTransition: function (duration, byController) { + var controlled = s.params.control; + var i; + function setControlledTransition(c) { + c.setWrapperTransition(duration, s); + if (duration !== 0) { + c.onTransitionStart(); + c.wrapper.transitionEnd(function(){ + if (!controlled) return; + if (c.params.loop && s.params.controlBy === 'slide') { + c.fixLoop(); + } + c.onTransitionEnd(); + + }); + } + } + if (s.isArray(controlled)) { + for (i = 0; i < controlled.length; i++) { + if (controlled[i] !== byController && controlled[i] instanceof Swiper) { + setControlledTransition(controlled[i]); + } + } + } + else if (controlled instanceof Swiper && byController !== controlled) { + setControlledTransition(controlled); + } + } + }; + + /*========================= + Hash Navigation + ===========================*/ + s.hashnav = { + init: function () { + if (!s.params.hashnav) return; + s.hashnav.initialized = true; + var hash = document.location.hash.replace('#', ''); + if (!hash) return; + var speed = 0; + for (var i = 0, length = s.slides.length; i < length; i++) { + var slide = s.slides.eq(i); + var slideHash = slide.attr('data-hash'); + if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) { + var index = slide.index(); + s.slideTo(index, speed, s.params.runCallbacksOnInit, true); + } + } + }, + setHash: function () { + if (!s.hashnav.initialized || !s.params.hashnav) return; + document.location.hash = s.slides.eq(s.activeIndex).attr('data-hash') || ''; + } + }; + + /*========================= + Keyboard Control + ===========================*/ + function handleKeyboard(e) { + if (e.originalEvent) e = e.originalEvent; //jquery fix + var kc = e.keyCode || e.charCode; + // Directions locks + if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) { + return false; + } + if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) { + return false; + } + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { + return; + } + if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) { + return; + } + if (kc === 37 || kc === 39 || kc === 38 || kc === 40) { + var inView = false; + //Check that swiper should be inside of visible area of window + if (s.container.parents('.swiper-slide').length > 0 && s.container.parents('.swiper-slide-active').length === 0) { + return; + } + var windowScroll = { + left: window.pageXOffset, + top: window.pageYOffset + }; + var windowWidth = window.innerWidth; + var windowHeight = window.innerHeight; + var swiperOffset = s.container.offset(); + if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft; + var swiperCoord = [ + [swiperOffset.left, swiperOffset.top], + [swiperOffset.left + s.width, swiperOffset.top], + [swiperOffset.left, swiperOffset.top + s.height], + [swiperOffset.left + s.width, swiperOffset.top + s.height] + ]; + for (var i = 0; i < swiperCoord.length; i++) { + var point = swiperCoord[i]; + if ( + point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth && + point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight + ) { + inView = true; + } + + } + if (!inView) return; + } + if (s.isHorizontal()) { + if (kc === 37 || kc === 39) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + } + if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext(); + if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev(); + } + else { + if (kc === 38 || kc === 40) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + } + if (kc === 40) s.slideNext(); + if (kc === 38) s.slidePrev(); + } + } + s.disableKeyboardControl = function () { + s.params.keyboardControl = false; + $(document).off('keydown', handleKeyboard); + }; + s.enableKeyboardControl = function () { + s.params.keyboardControl = true; + $(document).on('keydown', handleKeyboard); + }; + + + /*========================= + Mousewheel Control + ===========================*/ + s.mousewheel = { + event: false, + lastScrollTime: (new window.Date()).getTime() + }; + if (s.params.mousewheelControl) { + try { + new window.WheelEvent('wheel'); + s.mousewheel.event = 'wheel'; + } catch (e) { + if (window.WheelEvent || (s.container[0] && 'wheel' in s.container[0])) { + s.mousewheel.event = 'wheel'; + } + } + if (!s.mousewheel.event && window.WheelEvent) { + + } + if (!s.mousewheel.event && document.onmousewheel !== undefined) { + s.mousewheel.event = 'mousewheel'; + } + if (!s.mousewheel.event) { + s.mousewheel.event = 'DOMMouseScroll'; + } + } + function handleMousewheel(e) { + if (e.originalEvent) e = e.originalEvent; //jquery fix + var we = s.mousewheel.event; + var delta = 0; + var rtlFactor = s.rtl ? -1 : 1; + + //WebKits + if (we === 'mousewheel') { + if (s.params.mousewheelForceToAxis) { + if (s.isHorizontal()) { + if (Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY)) delta = e.wheelDeltaX * rtlFactor; + else return; + } + else { + if (Math.abs(e.wheelDeltaY) > Math.abs(e.wheelDeltaX)) delta = e.wheelDeltaY; + else return; + } + } + else { + delta = Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY) ? - e.wheelDeltaX * rtlFactor : - e.wheelDeltaY; + } + } + //Old FireFox + else if (we === 'DOMMouseScroll') delta = -e.detail; + //New FireFox + else if (we === 'wheel') { + if (s.params.mousewheelForceToAxis) { + if (s.isHorizontal()) { + if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) delta = -e.deltaX * rtlFactor; + else return; + } + else { + if (Math.abs(e.deltaY) > Math.abs(e.deltaX)) delta = -e.deltaY; + else return; + } + } + else { + delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? - e.deltaX * rtlFactor : - e.deltaY; + } + } + if (delta === 0) return; + + if (s.params.mousewheelInvert) delta = -delta; + + if (!s.params.freeMode) { + if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) { + if (delta < 0) { + if ((!s.isEnd || s.params.loop) && !s.animating) s.slideNext(); + else if (s.params.mousewheelReleaseOnEdges) return true; + } + else { + if ((!s.isBeginning || s.params.loop) && !s.animating) s.slidePrev(); + else if (s.params.mousewheelReleaseOnEdges) return true; + } + } + s.mousewheel.lastScrollTime = (new window.Date()).getTime(); + + } + else { + //Freemode or scrollContainer: + var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity; + var wasBeginning = s.isBeginning, + wasEnd = s.isEnd; + + if (position >= s.minTranslate()) position = s.minTranslate(); + if (position <= s.maxTranslate()) position = s.maxTranslate(); + + s.setWrapperTransition(0); + s.setWrapperTranslate(position); + s.updateProgress(); + s.updateActiveIndex(); + + if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) { + s.updateClasses(); + } + + if (s.params.freeModeSticky) { + clearTimeout(s.mousewheel.timeout); + s.mousewheel.timeout = setTimeout(function () { + s.slideReset(); + }, 300); + } + else { + if (s.params.lazyLoading && s.lazy) { + s.lazy.load(); + } + } + + // Return page scroll on edge positions + if (position === 0 || position === s.maxTranslate()) return; + } + if (s.params.autoplay) s.stopAutoplay(); + + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + return false; + } + s.disableMousewheelControl = function () { + if (!s.mousewheel.event) return false; + s.container.off(s.mousewheel.event, handleMousewheel); + return true; + }; + + s.enableMousewheelControl = function () { + if (!s.mousewheel.event) return false; + s.container.on(s.mousewheel.event, handleMousewheel); + return true; + }; + + + /*========================= + Parallax + ===========================*/ + function setParallaxTransform(el, progress) { + el = $(el); + var p, pX, pY; + var rtlFactor = s.rtl ? -1 : 1; + + p = el.attr('data-swiper-parallax') || '0'; + pX = el.attr('data-swiper-parallax-x'); + pY = el.attr('data-swiper-parallax-y'); + if (pX || pY) { + pX = pX || '0'; + pY = pY || '0'; + } + else { + if (s.isHorizontal()) { + pX = p; + pY = '0'; + } + else { + pY = p; + pX = '0'; + } + } + + if ((pX).indexOf('%') >= 0) { + pX = parseInt(pX, 10) * progress * rtlFactor + '%'; + } + else { + pX = pX * progress * rtlFactor + 'px' ; + } + if ((pY).indexOf('%') >= 0) { + pY = parseInt(pY, 10) * progress + '%'; + } + else { + pY = pY * progress + 'px' ; + } + + el.transform('translate3d(' + pX + ', ' + pY + ',0px)'); + } + s.parallax = { + setTranslate: function () { + s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){ + setParallaxTransform(this, s.progress); + + }); + s.slides.each(function () { + var slide = $(this); + slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () { + var progress = Math.min(Math.max(slide[0].progress, -1), 1); + setParallaxTransform(this, progress); + }); + }); + }, + setTransition: function (duration) { + if (typeof duration === 'undefined') duration = s.params.speed; + s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){ + var el = $(this); + var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration; + if (duration === 0) parallaxDuration = 0; + el.transition(parallaxDuration); + }); + } + }; + + + /*========================= + Plugins API. Collect all and init all plugins + ===========================*/ + s._plugins = []; + for (var plugin in s.plugins) { + var p = s.plugins[plugin](s, s.params[plugin]); + if (p) s._plugins.push(p); + } + // Method to call all plugins event/method + s.callPlugins = function (eventName) { + for (var i = 0; i < s._plugins.length; i++) { + if (eventName in s._plugins[i]) { + s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); + } + } + }; + + /*========================= + Events/Callbacks/Plugins Emitter + ===========================*/ + function normalizeEventName (eventName) { + if (eventName.indexOf('on') !== 0) { + if (eventName[0] !== eventName[0].toUpperCase()) { + eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1); + } + else { + eventName = 'on' + eventName; + } + } + return eventName; + } + s.emitterEventListeners = { + + }; + s.emit = function (eventName) { + // Trigger callbacks + if (s.params[eventName]) { + s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); + } + var i; + // Trigger events + if (s.emitterEventListeners[eventName]) { + for (i = 0; i < s.emitterEventListeners[eventName].length; i++) { + s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); + } + } + // Trigger plugins + if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); + }; + s.on = function (eventName, handler) { + eventName = normalizeEventName(eventName); + if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = []; + s.emitterEventListeners[eventName].push(handler); + return s; + }; + s.off = function (eventName, handler) { + var i; + eventName = normalizeEventName(eventName); + if (typeof handler === 'undefined') { + // Remove all handlers for such event + s.emitterEventListeners[eventName] = []; + return s; + } + if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return; + for (i = 0; i < s.emitterEventListeners[eventName].length; i++) { + if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1); + } + return s; + }; + s.once = function (eventName, handler) { + eventName = normalizeEventName(eventName); + var _handler = function () { + handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]); + s.off(eventName, _handler); + }; + s.on(eventName, _handler); + return s; + }; + + // Accessibility tools + s.a11y = { + makeFocusable: function ($el) { + $el.attr('tabIndex', '0'); + return $el; + }, + addRole: function ($el, role) { + $el.attr('role', role); + return $el; + }, + + addLabel: function ($el, label) { + $el.attr('aria-label', label); + return $el; + }, + + disable: function ($el) { + $el.attr('aria-disabled', true); + return $el; + }, + + enable: function ($el) { + $el.attr('aria-disabled', false); + return $el; + }, + + onEnterKey: function (event) { + if (event.keyCode !== 13) return; + if ($(event.target).is(s.params.nextButton)) { + s.onClickNext(event); + if (s.isEnd) { + s.a11y.notify(s.params.lastSlideMessage); + } + else { + s.a11y.notify(s.params.nextSlideMessage); + } + } + else if ($(event.target).is(s.params.prevButton)) { + s.onClickPrev(event); + if (s.isBeginning) { + s.a11y.notify(s.params.firstSlideMessage); + } + else { + s.a11y.notify(s.params.prevSlideMessage); + } + } + if ($(event.target).is('.' + s.params.bulletClass)) { + $(event.target)[0].click(); + } + }, + + liveRegion: $(''), + + notify: function (message) { + var notification = s.a11y.liveRegion; + if (notification.length === 0) return; + notification.html(''); + notification.html(message); + }, + init: function () { + // Setup accessibility + if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) { + s.a11y.makeFocusable(s.nextButton); + s.a11y.addRole(s.nextButton, 'button'); + s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage); + } + if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) { + s.a11y.makeFocusable(s.prevButton); + s.a11y.addRole(s.prevButton, 'button'); + s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage); + } + + $(s.container).append(s.a11y.liveRegion); + }, + initPagination: function () { + if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) { + s.bullets.each(function () { + var bullet = $(this); + s.a11y.makeFocusable(bullet); + s.a11y.addRole(bullet, 'button'); + s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1)); + }); + } + }, + destroy: function () { + if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove(); + } + }; + + + /*========================= + Init/Destroy + ===========================*/ + s.init = function () { + if (s.params.loop) s.createLoop(); + s.updateContainerSize(); + s.updateSlidesSize(); + s.updatePagination(); + if (s.params.scrollbar && s.scrollbar) { + s.scrollbar.set(); + if (s.params.scrollbarDraggable) { + s.scrollbar.enableDraggable(); + } + } + if (s.params.effect !== 'slide' && s.effects[s.params.effect]) { + if (!s.params.loop) s.updateProgress(); + s.effects[s.params.effect].setTranslate(); + } + if (s.params.loop) { + s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit); + } + else { + s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit); + if (s.params.initialSlide === 0) { + if (s.parallax && s.params.parallax) s.parallax.setTranslate(); + if (s.lazy && s.params.lazyLoading) { + s.lazy.load(); + s.lazy.initialImageLoaded = true; + } + } + } + s.attachEvents(); + if (s.params.observer && s.support.observer) { + s.initObservers(); + } + if (s.params.preloadImages && !s.params.lazyLoading) { + s.preloadImages(); + } + if (s.params.autoplay) { + s.startAutoplay(); + } + if (s.params.keyboardControl) { + if (s.enableKeyboardControl) s.enableKeyboardControl(); + } + if (s.params.mousewheelControl) { + if (s.enableMousewheelControl) s.enableMousewheelControl(); + } + if (s.params.hashnav) { + if (s.hashnav) s.hashnav.init(); + } + if (s.params.a11y && s.a11y) s.a11y.init(); + s.emit('onInit', s); + }; + + // Cleanup dynamic styles + s.cleanupStyles = function () { + // Container + s.container.removeClass(s.classNames.join(' ')).removeAttr('style'); + + // Wrapper + s.wrapper.removeAttr('style'); + + // Slides + if (s.slides && s.slides.length) { + s.slides + .removeClass([ + s.params.slideVisibleClass, + s.params.slideActiveClass, + s.params.slideNextClass, + s.params.slidePrevClass + ].join(' ')) + .removeAttr('style') + .removeAttr('data-swiper-column') + .removeAttr('data-swiper-row'); + } + + // Pagination/Bullets + if (s.paginationContainer && s.paginationContainer.length) { + s.paginationContainer.removeClass(s.params.paginationHiddenClass); + } + if (s.bullets && s.bullets.length) { + s.bullets.removeClass(s.params.bulletActiveClass); + } + + // Buttons + if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass); + if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass); + + // Scrollbar + if (s.params.scrollbar && s.scrollbar) { + if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style'); + if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style'); + } + }; + + // Destroy + s.destroy = function (deleteInstance, cleanupStyles) { + // Detach evebts + s.detachEvents(); + // Stop autoplay + s.stopAutoplay(); + // Disable draggable + if (s.params.scrollbar && s.scrollbar) { + if (s.params.scrollbarDraggable) { + s.scrollbar.disableDraggable(); + } + } + // Destroy loop + if (s.params.loop) { + s.destroyLoop(); + } + // Cleanup styles + if (cleanupStyles) { + s.cleanupStyles(); + } + // Disconnect observer + s.disconnectObservers(); + // Disable keyboard/mousewheel + if (s.params.keyboardControl) { + if (s.disableKeyboardControl) s.disableKeyboardControl(); + } + if (s.params.mousewheelControl) { + if (s.disableMousewheelControl) s.disableMousewheelControl(); + } + // Disable a11y + if (s.params.a11y && s.a11y) s.a11y.destroy(); + // Destroy callback + s.emit('onDestroy'); + // Delete instance + if (deleteInstance !== false) s = null; + }; + + s.init(); + + + + // Return swiper instance + return s; + }; + + + /*================================================== + Prototype + ====================================================*/ + Swiper.prototype = { + isSafari: (function () { + var ua = navigator.userAgent.toLowerCase(); + return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0); + })(), + isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent), + isArray: function (arr) { + return Object.prototype.toString.apply(arr) === '[object Array]'; + }, + /*================================================== + Browser + ====================================================*/ + browser: { + ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled, + ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1) + }, + /*================================================== + Devices + ====================================================*/ + device: (function () { + var ua = navigator.userAgent; + var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); + var ipad = ua.match(/(iPad).*OS\s([\d_]+)/); + var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); + var iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/); + return { + ios: ipad || iphone || ipod, + android: android + }; + })(), + /*================================================== + Feature Detection + ====================================================*/ + support: { + touch : (window.Modernizr && Modernizr.touch === true) || (function () { + return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch); + })(), + + transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () { + var div = document.createElement('div').style; + return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div); + })(), + + flexbox: (function () { + var div = document.createElement('div').style; + var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' '); + for (var i = 0; i < styles.length; i++) { + if (styles[i] in div) return true; + } + })(), + + observer: (function () { + return ('MutationObserver' in window || 'WebkitMutationObserver' in window); + })() + }, + /*================================================== + Plugins + ====================================================*/ + plugins: {} + }; + + + /*=========================== + Dom7 Library + ===========================*/ + var Dom7 = (function () { + var Dom7 = function (arr) { + var _this = this, i = 0; + // Create array-like object + for (i = 0; i < arr.length; i++) { + _this[i] = arr[i]; + } + _this.length = arr.length; + // Return collection with methods + return this; + }; + var $ = function (selector, context) { + var arr = [], i = 0; + if (selector && !context) { + if (selector instanceof Dom7) { + return selector; + } + } + if (selector) { + // String + if (typeof selector === 'string') { + var els, tempParent, html = selector.trim(); + if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) { + var toCreate = 'div'; + if (html.indexOf(':~]/)) { + // Pure ID selector + els = [document.getElementById(selector.split('#')[1])]; + } + else { + // Other selectors + els = (context || document).querySelectorAll(selector); + } + for (i = 0; i < els.length; i++) { + if (els[i]) arr.push(els[i]); + } + } + } + // Node/element + else if (selector.nodeType || selector === window || selector === document) { + arr.push(selector); + } + //Array of elements or instance of Dom + else if (selector.length > 0 && selector[0].nodeType) { + for (i = 0; i < selector.length; i++) { + arr.push(selector[i]); + } + } + } + return new Dom7(arr); + }; + Dom7.prototype = { + // Classes and attriutes + addClass: function (className) { + if (typeof className === 'undefined') { + return this; + } + var classes = className.split(' '); + for (var i = 0; i < classes.length; i++) { + for (var j = 0; j < this.length; j++) { + this[j].classList.add(classes[i]); + } + } + return this; + }, + removeClass: function (className) { + var classes = className.split(' '); + for (var i = 0; i < classes.length; i++) { + for (var j = 0; j < this.length; j++) { + this[j].classList.remove(classes[i]); + } + } + return this; + }, + hasClass: function (className) { + if (!this[0]) return false; + else return this[0].classList.contains(className); + }, + toggleClass: function (className) { + var classes = className.split(' '); + for (var i = 0; i < classes.length; i++) { + for (var j = 0; j < this.length; j++) { + this[j].classList.toggle(classes[i]); + } + } + return this; + }, + attr: function (attrs, value) { + if (arguments.length === 1 && typeof attrs === 'string') { + // Get attr + if (this[0]) return this[0].getAttribute(attrs); + else return undefined; + } + else { + // Set attrs + for (var i = 0; i < this.length; i++) { + if (arguments.length === 2) { + // String + this[i].setAttribute(attrs, value); + } + else { + // Object + for (var attrName in attrs) { + this[i][attrName] = attrs[attrName]; + this[i].setAttribute(attrName, attrs[attrName]); + } + } + } + return this; + } + }, + removeAttr: function (attr) { + for (var i = 0; i < this.length; i++) { + this[i].removeAttribute(attr); + } + return this; + }, + data: function (key, value) { + if (typeof value === 'undefined') { + // Get value + if (this[0]) { + var dataKey = this[0].getAttribute('data-' + key); + if (dataKey) return dataKey; + else if (this[0].dom7ElementDataStorage && (key in this[0].dom7ElementDataStorage)) return this[0].dom7ElementDataStorage[key]; + else return undefined; + } + else return undefined; + } + else { + // Set value + for (var i = 0; i < this.length; i++) { + var el = this[i]; + if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {}; + el.dom7ElementDataStorage[key] = value; + } + return this; + } + }, + // Transforms + transform : function (transform) { + for (var i = 0; i < this.length; i++) { + var elStyle = this[i].style; + elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform; + } + return this; + }, + transition: function (duration) { + if (typeof duration !== 'string') { + duration = duration + 'ms'; + } + for (var i = 0; i < this.length; i++) { + var elStyle = this[i].style; + elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration; + } + return this; + }, + //Events + on: function (eventName, targetSelector, listener, capture) { + function handleLiveEvent(e) { + var target = e.target; + if ($(target).is(targetSelector)) listener.call(target, e); + else { + var parents = $(target).parents(); + for (var k = 0; k < parents.length; k++) { + if ($(parents[k]).is(targetSelector)) listener.call(parents[k], e); + } + } + } + var events = eventName.split(' '); + var i, j; + for (i = 0; i < this.length; i++) { + if (typeof targetSelector === 'function' || targetSelector === false) { + // Usual events + if (typeof targetSelector === 'function') { + listener = arguments[1]; + capture = arguments[2] || false; + } + for (j = 0; j < events.length; j++) { + this[i].addEventListener(events[j], listener, capture); + } + } + else { + //Live events + for (j = 0; j < events.length; j++) { + if (!this[i].dom7LiveListeners) this[i].dom7LiveListeners = []; + this[i].dom7LiveListeners.push({listener: listener, liveListener: handleLiveEvent}); + this[i].addEventListener(events[j], handleLiveEvent, capture); + } + } + } + + return this; + }, + off: function (eventName, targetSelector, listener, capture) { + var events = eventName.split(' '); + for (var i = 0; i < events.length; i++) { + for (var j = 0; j < this.length; j++) { + if (typeof targetSelector === 'function' || targetSelector === false) { + // Usual events + if (typeof targetSelector === 'function') { + listener = arguments[1]; + capture = arguments[2] || false; + } + this[j].removeEventListener(events[i], listener, capture); + } + else { + // Live event + if (this[j].dom7LiveListeners) { + for (var k = 0; k < this[j].dom7LiveListeners.length; k++) { + if (this[j].dom7LiveListeners[k].listener === listener) { + this[j].removeEventListener(events[i], this[j].dom7LiveListeners[k].liveListener, capture); + } + } + } + } + } + } + return this; + }, + once: function (eventName, targetSelector, listener, capture) { + var dom = this; + if (typeof targetSelector === 'function') { + targetSelector = false; + listener = arguments[1]; + capture = arguments[2]; + } + function proxy(e) { + listener(e); + dom.off(eventName, targetSelector, proxy, capture); + } + dom.on(eventName, targetSelector, proxy, capture); + }, + trigger: function (eventName, eventData) { + for (var i = 0; i < this.length; i++) { + var evt; + try { + evt = new window.CustomEvent(eventName, {detail: eventData, bubbles: true, cancelable: true}); + } + catch (e) { + evt = document.createEvent('Event'); + evt.initEvent(eventName, true, true); + evt.detail = eventData; + } + this[i].dispatchEvent(evt); + } + return this; + }, + transitionEnd: function (callback) { + var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'], + i, j, dom = this; + function fireCallBack(e) { + /*jshint validthis:true */ + if (e.target !== this) return; + callback.call(this, e); + for (i = 0; i < events.length; i++) { + dom.off(events[i], fireCallBack); + } + } + if (callback) { + for (i = 0; i < events.length; i++) { + dom.on(events[i], fireCallBack); + } + } + return this; + }, + // Sizing/Styles + width: function () { + if (this[0] === window) { + return window.innerWidth; + } + else { + if (this.length > 0) { + return parseFloat(this.css('width')); + } + else { + return null; + } + } + }, + outerWidth: function (includeMargins) { + if (this.length > 0) { + if (includeMargins) + return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left')); + else + return this[0].offsetWidth; + } + else return null; + }, + height: function () { + if (this[0] === window) { + return window.innerHeight; + } + else { + if (this.length > 0) { + return parseFloat(this.css('height')); + } + else { + return null; + } + } + }, + outerHeight: function (includeMargins) { + if (this.length > 0) { + if (includeMargins) + return this[0].offsetHeight + parseFloat(this.css('margin-top')) + parseFloat(this.css('margin-bottom')); + else + return this[0].offsetHeight; + } + else return null; + }, + offset: function () { + if (this.length > 0) { + var el = this[0]; + var box = el.getBoundingClientRect(); + var body = document.body; + var clientTop = el.clientTop || body.clientTop || 0; + var clientLeft = el.clientLeft || body.clientLeft || 0; + var scrollTop = window.pageYOffset || el.scrollTop; + var scrollLeft = window.pageXOffset || el.scrollLeft; + return { + top: box.top + scrollTop - clientTop, + left: box.left + scrollLeft - clientLeft + }; + } + else { + return null; + } + }, + css: function (props, value) { + var i; + if (arguments.length === 1) { + if (typeof props === 'string') { + if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props); + } + else { + for (i = 0; i < this.length; i++) { + for (var prop in props) { + this[i].style[prop] = props[prop]; + } + } + return this; + } + } + if (arguments.length === 2 && typeof props === 'string') { + for (i = 0; i < this.length; i++) { + this[i].style[props] = value; + } + return this; + } + return this; + }, + + //Dom manipulation + each: function (callback) { + for (var i = 0; i < this.length; i++) { + callback.call(this[i], i, this[i]); + } + return this; + }, + html: function (html) { + if (typeof html === 'undefined') { + return this[0] ? this[0].innerHTML : undefined; + } + else { + for (var i = 0; i < this.length; i++) { + this[i].innerHTML = html; + } + return this; + } + }, + text: function (text) { + if (typeof text === 'undefined') { + if (this[0]) { + return this[0].textContent.trim(); + } + else return null; + } + else { + for (var i = 0; i < this.length; i++) { + this[i].textContent = text; + } + return this; + } + }, + is: function (selector) { + if (!this[0]) return false; + var compareWith, i; + if (typeof selector === 'string') { + var el = this[0]; + if (el === document) return selector === document; + if (el === window) return selector === window; + + if (el.matches) return el.matches(selector); + else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector); + else if (el.mozMatchesSelector) return el.mozMatchesSelector(selector); + else if (el.msMatchesSelector) return el.msMatchesSelector(selector); + else { + compareWith = $(selector); + for (i = 0; i < compareWith.length; i++) { + if (compareWith[i] === this[0]) return true; + } + return false; + } + } + else if (selector === document) return this[0] === document; + else if (selector === window) return this[0] === window; + else { + if (selector.nodeType || selector instanceof Dom7) { + compareWith = selector.nodeType ? [selector] : selector; + for (i = 0; i < compareWith.length; i++) { + if (compareWith[i] === this[0]) return true; + } + return false; + } + return false; + } + + }, + index: function () { + if (this[0]) { + var child = this[0]; + var i = 0; + while ((child = child.previousSibling) !== null) { + if (child.nodeType === 1) i++; + } + return i; + } + else return undefined; + }, + eq: function (index) { + if (typeof index === 'undefined') return this; + var length = this.length; + var returnIndex; + if (index > length - 1) { + return new Dom7([]); + } + if (index < 0) { + returnIndex = length + index; + if (returnIndex < 0) return new Dom7([]); + else return new Dom7([this[returnIndex]]); + } + return new Dom7([this[index]]); + }, + append: function (newChild) { + var i, j; + for (i = 0; i < this.length; i++) { + if (typeof newChild === 'string') { + var tempDiv = document.createElement('div'); + tempDiv.innerHTML = newChild; + while (tempDiv.firstChild) { + this[i].appendChild(tempDiv.firstChild); + } + } + else if (newChild instanceof Dom7) { + for (j = 0; j < newChild.length; j++) { + this[i].appendChild(newChild[j]); + } + } + else { + this[i].appendChild(newChild); + } + } + return this; + }, + prepend: function (newChild) { + var i, j; + for (i = 0; i < this.length; i++) { + if (typeof newChild === 'string') { + var tempDiv = document.createElement('div'); + tempDiv.innerHTML = newChild; + for (j = tempDiv.childNodes.length - 1; j >= 0; j--) { + this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]); + } + // this[i].insertAdjacentHTML('afterbegin', newChild); + } + else if (newChild instanceof Dom7) { + for (j = 0; j < newChild.length; j++) { + this[i].insertBefore(newChild[j], this[i].childNodes[0]); + } + } + else { + this[i].insertBefore(newChild, this[i].childNodes[0]); + } + } + return this; + }, + insertBefore: function (selector) { + var before = $(selector); + for (var i = 0; i < this.length; i++) { + if (before.length === 1) { + before[0].parentNode.insertBefore(this[i], before[0]); + } + else if (before.length > 1) { + for (var j = 0; j < before.length; j++) { + before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]); + } + } + } + }, + insertAfter: function (selector) { + var after = $(selector); + for (var i = 0; i < this.length; i++) { + if (after.length === 1) { + after[0].parentNode.insertBefore(this[i], after[0].nextSibling); + } + else if (after.length > 1) { + for (var j = 0; j < after.length; j++) { + after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling); + } + } + } + }, + next: function (selector) { + if (this.length > 0) { + if (selector) { + if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) return new Dom7([this[0].nextElementSibling]); + else return new Dom7([]); + } + else { + if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]); + else return new Dom7([]); + } + } + else return new Dom7([]); + }, + nextAll: function (selector) { + var nextEls = []; + var el = this[0]; + if (!el) return new Dom7([]); + while (el.nextElementSibling) { + var next = el.nextElementSibling; + if (selector) { + if($(next).is(selector)) nextEls.push(next); + } + else nextEls.push(next); + el = next; + } + return new Dom7(nextEls); + }, + prev: function (selector) { + if (this.length > 0) { + if (selector) { + if (this[0].previousElementSibling && $(this[0].previousElementSibling).is(selector)) return new Dom7([this[0].previousElementSibling]); + else return new Dom7([]); + } + else { + if (this[0].previousElementSibling) return new Dom7([this[0].previousElementSibling]); + else return new Dom7([]); + } + } + else return new Dom7([]); + }, + prevAll: function (selector) { + var prevEls = []; + var el = this[0]; + if (!el) return new Dom7([]); + while (el.previousElementSibling) { + var prev = el.previousElementSibling; + if (selector) { + if($(prev).is(selector)) prevEls.push(prev); + } + else prevEls.push(prev); + el = prev; + } + return new Dom7(prevEls); + }, + parent: function (selector) { + var parents = []; + for (var i = 0; i < this.length; i++) { + if (selector) { + if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode); + } + else { + parents.push(this[i].parentNode); + } + } + return $($.unique(parents)); + }, + parents: function (selector) { + var parents = []; + for (var i = 0; i < this.length; i++) { + var parent = this[i].parentNode; + while (parent) { + if (selector) { + if ($(parent).is(selector)) parents.push(parent); + } + else { + parents.push(parent); + } + parent = parent.parentNode; + } + } + return $($.unique(parents)); + }, + find : function (selector) { + var foundElements = []; + for (var i = 0; i < this.length; i++) { + var found = this[i].querySelectorAll(selector); + for (var j = 0; j < found.length; j++) { + foundElements.push(found[j]); + } + } + return new Dom7(foundElements); + }, + children: function (selector) { + var children = []; + for (var i = 0; i < this.length; i++) { + var childNodes = this[i].childNodes; + + for (var j = 0; j < childNodes.length; j++) { + if (!selector) { + if (childNodes[j].nodeType === 1) children.push(childNodes[j]); + } + else { + if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) children.push(childNodes[j]); + } + } + } + return new Dom7($.unique(children)); + }, + remove: function () { + for (var i = 0; i < this.length; i++) { + if (this[i].parentNode) this[i].parentNode.removeChild(this[i]); + } + return this; + }, + add: function () { + var dom = this; + var i, j; + for (i = 0; i < arguments.length; i++) { + var toAdd = $(arguments[i]); + for (j = 0; j < toAdd.length; j++) { + dom[dom.length] = toAdd[j]; + dom.length++; + } + } + return dom; + } + }; + $.fn = Dom7.prototype; + $.unique = function (arr) { + var unique = []; + for (var i = 0; i < arr.length; i++) { + if (unique.indexOf(arr[i]) === -1) unique.push(arr[i]); + } + return unique; + }; + + return $; + })(); + + + /*=========================== + Get Dom libraries + ===========================*/ + var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7']; + for (var i = 0; i < swiperDomPlugins.length; i++) { + if (window[swiperDomPlugins[i]]) { + addLibraryPlugin(window[swiperDomPlugins[i]]); + } + } + // Required DOM Plugins + var domLib; + if (typeof Dom7 === 'undefined') { + domLib = window.Dom7 || window.Zepto || window.jQuery; + } + else { + domLib = Dom7; + } + + /*=========================== + Add .swiper plugin from Dom libraries + ===========================*/ + function addLibraryPlugin(lib) { + lib.fn.swiper = function (params) { + var firstInstance; + lib(this).each(function () { + var s = new Swiper(this, params); + if (!firstInstance) firstInstance = s; + }); + return firstInstance; + }; + } + + if (domLib) { + if (!('transitionEnd' in domLib.fn)) { + domLib.fn.transitionEnd = function (callback) { + var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'], + i, j, dom = this; + function fireCallBack(e) { + /*jshint validthis:true */ + if (e.target !== this) return; + callback.call(this, e); + for (i = 0; i < events.length; i++) { + dom.off(events[i], fireCallBack); + } + } + if (callback) { + for (i = 0; i < events.length; i++) { + dom.on(events[i], fireCallBack); + } + } + return this; + }; + } + if (!('transform' in domLib.fn)) { + domLib.fn.transform = function (transform) { + for (var i = 0; i < this.length; i++) { + var elStyle = this[i].style; + elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform; + } + return this; + }; + } + if (!('transition' in domLib.fn)) { + domLib.fn.transition = function (duration) { + if (typeof duration !== 'string') { + duration = duration + 'ms'; + } + for (var i = 0; i < this.length; i++) { + var elStyle = this[i].style; + elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration; + } + return this; + }; + } + } + + window.Swiper = Swiper; +})(); +/*=========================== +Swiper AMD Export +===========================*/ +if (typeof(module) !== 'undefined') +{ + module.exports = window.Swiper; +} +else if (typeof define === 'function' && define.amd) { + define([], function () { + 'use strict'; + return window.Swiper; + }); +} +//# sourceMappingURL=maps/swiper.js.map diff --git a/src/libs/swiper/js/swiper.min.js b/src/libs/swiper/js/swiper.min.js new file mode 100755 index 0000000..678fba4 --- /dev/null +++ b/src/libs/swiper/js/swiper.min.js @@ -0,0 +1,18 @@ +/** + * Swiper 3.3.1 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * + * http://www.idangero.us/swiper/ + * + * Copyright 2016, Vladimir Kharlampidi + * The iDangero.us + * http://www.idangero.us/ + * + * Licensed under MIT + * + * Released on: February 7, 2016 + */ +!function(){"use strict";function e(e){e.fn.swiper=function(a){var r;return e(this).each(function(){var e=new t(this,a);r||(r=e)}),r}}var a,t=function(e,i){function s(e){return Math.floor(e)}function n(){b.autoplayTimeoutId=setTimeout(function(){b.params.loop?(b.fixLoop(),b._slideNext(),b.emit("onAutoplay",b)):b.isEnd?i.autoplayStopOnLast?b.stopAutoplay():(b._slideTo(0),b.emit("onAutoplay",b)):(b._slideNext(),b.emit("onAutoplay",b))},b.params.autoplay)}function o(e,t){var r=a(e.target);if(!r.is(t))if("string"==typeof t)r=r.parents(t);else if(t.nodeType){var i;return r.parents().each(function(e,a){a===t&&(i=t)}),i?t:void 0}if(0!==r.length)return r[0]}function l(e,a){a=a||{};var t=window.MutationObserver||window.WebkitMutationObserver,r=new t(function(e){e.forEach(function(e){b.onResize(!0),b.emit("onObserverUpdate",b,e)})});r.observe(e,{attributes:"undefined"==typeof a.attributes?!0:a.attributes,childList:"undefined"==typeof a.childList?!0:a.childList,characterData:"undefined"==typeof a.characterData?!0:a.characterData}),b.observers.push(r)}function p(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!b.params.allowSwipeToNext&&(b.isHorizontal()&&39===a||!b.isHorizontal()&&40===a))return!1;if(!b.params.allowSwipeToPrev&&(b.isHorizontal()&&37===a||!b.isHorizontal()&&38===a))return!1;if(!(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||document.activeElement&&document.activeElement.nodeName&&("input"===document.activeElement.nodeName.toLowerCase()||"textarea"===document.activeElement.nodeName.toLowerCase()))){if(37===a||39===a||38===a||40===a){var t=!1;if(b.container.parents(".swiper-slide").length>0&&0===b.container.parents(".swiper-slide-active").length)return;var r={left:window.pageXOffset,top:window.pageYOffset},i=window.innerWidth,s=window.innerHeight,n=b.container.offset();b.rtl&&(n.left=n.left-b.container[0].scrollLeft);for(var o=[[n.left,n.top],[n.left+b.width,n.top],[n.left,n.top+b.height],[n.left+b.width,n.top+b.height]],l=0;l=r.left&&p[0]<=r.left+i&&p[1]>=r.top&&p[1]<=r.top+s&&(t=!0)}if(!t)return}b.isHorizontal()?((37===a||39===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!b.rtl||37===a&&b.rtl)&&b.slideNext(),(37===a&&!b.rtl||39===a&&b.rtl)&&b.slidePrev()):((38===a||40===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&b.slideNext(),38===a&&b.slidePrev())}}function d(e){e.originalEvent&&(e=e.originalEvent);var a=b.mousewheel.event,t=0,r=b.rtl?-1:1;if("mousewheel"===a)if(b.params.mousewheelForceToAxis)if(b.isHorizontal()){if(!(Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)))return;t=e.wheelDeltaX*r}else{if(!(Math.abs(e.wheelDeltaY)>Math.abs(e.wheelDeltaX)))return;t=e.wheelDeltaY}else t=Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)?-e.wheelDeltaX*r:-e.wheelDeltaY;else if("DOMMouseScroll"===a)t=-e.detail;else if("wheel"===a)if(b.params.mousewheelForceToAxis)if(b.isHorizontal()){if(!(Math.abs(e.deltaX)>Math.abs(e.deltaY)))return;t=-e.deltaX*r}else{if(!(Math.abs(e.deltaY)>Math.abs(e.deltaX)))return;t=-e.deltaY}else t=Math.abs(e.deltaX)>Math.abs(e.deltaY)?-e.deltaX*r:-e.deltaY;if(0!==t){if(b.params.mousewheelInvert&&(t=-t),b.params.freeMode){var i=b.getWrapperTranslate()+t*b.params.mousewheelSensitivity,s=b.isBeginning,n=b.isEnd;if(i>=b.minTranslate()&&(i=b.minTranslate()),i<=b.maxTranslate()&&(i=b.maxTranslate()),b.setWrapperTransition(0),b.setWrapperTranslate(i),b.updateProgress(),b.updateActiveIndex(),(!s&&b.isBeginning||!n&&b.isEnd)&&b.updateClasses(),b.params.freeModeSticky?(clearTimeout(b.mousewheel.timeout),b.mousewheel.timeout=setTimeout(function(){b.slideReset()},300)):b.params.lazyLoading&&b.lazy&&b.lazy.load(),0===i||i===b.maxTranslate())return}else{if((new window.Date).getTime()-b.mousewheel.lastScrollTime>60)if(0>t)if(b.isEnd&&!b.params.loop||b.animating){if(b.params.mousewheelReleaseOnEdges)return!0}else b.slideNext();else if(b.isBeginning&&!b.params.loop||b.animating){if(b.params.mousewheelReleaseOnEdges)return!0}else b.slidePrev();b.mousewheel.lastScrollTime=(new window.Date).getTime()}return b.params.autoplay&&b.stopAutoplay(),e.preventDefault?e.preventDefault():e.returnValue=!1,!1}}function u(e,t){e=a(e);var r,i,s,n=b.rtl?-1:1;r=e.attr("data-swiper-parallax")||"0",i=e.attr("data-swiper-parallax-x"),s=e.attr("data-swiper-parallax-y"),i||s?(i=i||"0",s=s||"0"):b.isHorizontal()?(i=r,s="0"):(s=r,i="0"),i=i.indexOf("%")>=0?parseInt(i,10)*t*n+"%":i*t*n+"px",s=s.indexOf("%")>=0?parseInt(s,10)*t+"%":s*t+"px",e.transform("translate3d("+i+", "+s+",0px)")}function c(e){return 0!==e.indexOf("on")&&(e=e[0]!==e[0].toUpperCase()?"on"+e[0].toUpperCase()+e.substring(1):"on"+e),e}if(!(this instanceof t))return new t(e,i);var m={direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,autoplay:!1,autoplayDisableOnInteraction:!0,autoplayStopOnLast:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flip:{slideShadows:!0,limitRotation:!0},cube:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fade:{crossFade:!1},parallax:!1,scrollbar:null,scrollbarHide:!0,scrollbarDraggable:!1,scrollbarSnapOnRelease:!1,keyboardControl:!1,mousewheelControl:!1,mousewheelReleaseOnEdges:!1,mousewheelInvert:!1,mousewheelForceToAxis:!1,mousewheelSensitivity:1,hashnav:!1,breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,onlyExternal:!1,threshold:0,touchMoveStopPropagation:!0,uniqueNavElements:!0,pagination:null,paginationElement:"span",paginationClickable:!1,paginationHide:!1,paginationBulletRender:null,paginationProgressRender:null,paginationFractionRender:null,paginationCustomRender:null,paginationType:"bullets",resistance:!0,resistanceRatio:.85,nextButton:null,prevButton:null,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,lazyLoading:!1,lazyLoadingInPrevNext:!1,lazyLoadingInPrevNextAmount:1,lazyLoadingOnTransitionStart:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,control:void 0,controlInverse:!1,controlBy:"slide",allowSwipeToPrev:!0,allowSwipeToNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slidePrevClass:"swiper-slide-prev",wrapperClass:"swiper-wrapper",bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",buttonDisabledClass:"swiper-button-disabled",paginationCurrentClass:"swiper-pagination-current",paginationTotalClass:"swiper-pagination-total",paginationHiddenClass:"swiper-pagination-hidden",paginationProgressbarClass:"swiper-pagination-progressbar",observer:!1,observeParents:!1,a11y:!1,prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",runCallbacksOnInit:!0},h=i&&i.virtualTranslate;i=i||{};var f={};for(var g in i)if("object"!=typeof i[g]||null===i[g]||(i[g].nodeType||i[g]===window||i[g]===document||"undefined"!=typeof r&&i[g]instanceof r||"undefined"!=typeof jQuery&&i[g]instanceof jQuery))f[g]=i[g];else{f[g]={};for(var v in i[g])f[g][v]=i[g][v]}for(var w in m)if("undefined"==typeof i[w])i[w]=m[w];else if("object"==typeof i[w])for(var y in m[w])"undefined"==typeof i[w][y]&&(i[w][y]=m[w][y]);var b=this;if(b.params=i,b.originalParams=f,b.classNames=[],"undefined"!=typeof a&&"undefined"!=typeof r&&(a=r),("undefined"!=typeof a||(a="undefined"==typeof r?window.Dom7||window.Zepto||window.jQuery:r))&&(b.$=a,b.currentBreakpoint=void 0,b.getActiveBreakpoint=function(){if(!b.params.breakpoints)return!1;var e,a=!1,t=[];for(e in b.params.breakpoints)b.params.breakpoints.hasOwnProperty(e)&&t.push(e);t.sort(function(e,a){return parseInt(e,10)>parseInt(a,10)});for(var r=0;r=window.innerWidth&&!a&&(a=e);return a||"max"},b.setBreakpoint=function(){var e=b.getActiveBreakpoint();if(e&&b.currentBreakpoint!==e){var a=e in b.params.breakpoints?b.params.breakpoints[e]:b.originalParams,t=b.params.loop&&a.slidesPerView!==b.params.slidesPerView;for(var r in a)b.params[r]=a[r];b.currentBreakpoint=e,t&&b.destroyLoop&&b.reLoop(!0)}},b.params.breakpoints&&b.setBreakpoint(),b.container=a(e),0!==b.container.length)){if(b.container.length>1){var x=[];return b.container.each(function(){x.push(new t(this,i))}),x}b.container[0].swiper=b,b.container.data("swiper",b),b.classNames.push("swiper-container-"+b.params.direction),b.params.freeMode&&b.classNames.push("swiper-container-free-mode"),b.support.flexbox||(b.classNames.push("swiper-container-no-flexbox"),b.params.slidesPerColumn=1),b.params.autoHeight&&b.classNames.push("swiper-container-autoheight"),(b.params.parallax||b.params.watchSlidesVisibility)&&(b.params.watchSlidesProgress=!0),["cube","coverflow","flip"].indexOf(b.params.effect)>=0&&(b.support.transforms3d?(b.params.watchSlidesProgress=!0,b.classNames.push("swiper-container-3d")):b.params.effect="slide"),"slide"!==b.params.effect&&b.classNames.push("swiper-container-"+b.params.effect),"cube"===b.params.effect&&(b.params.resistanceRatio=0,b.params.slidesPerView=1,b.params.slidesPerColumn=1,b.params.slidesPerGroup=1,b.params.centeredSlides=!1,b.params.spaceBetween=0,b.params.virtualTranslate=!0,b.params.setWrapperSize=!1),("fade"===b.params.effect||"flip"===b.params.effect)&&(b.params.slidesPerView=1,b.params.slidesPerColumn=1,b.params.slidesPerGroup=1,b.params.watchSlidesProgress=!0,b.params.spaceBetween=0,b.params.setWrapperSize=!1,"undefined"==typeof h&&(b.params.virtualTranslate=!0)),b.params.grabCursor&&b.support.touch&&(b.params.grabCursor=!1),b.wrapper=b.container.children("."+b.params.wrapperClass),b.params.pagination&&(b.paginationContainer=a(b.params.pagination),b.params.uniqueNavElements&&"string"==typeof b.params.pagination&&b.paginationContainer.length>1&&1===b.container.find(b.params.pagination).length&&(b.paginationContainer=b.container.find(b.params.pagination)),"bullets"===b.params.paginationType&&b.params.paginationClickable?b.paginationContainer.addClass("swiper-pagination-clickable"):b.params.paginationClickable=!1,b.paginationContainer.addClass("swiper-pagination-"+b.params.paginationType)),(b.params.nextButton||b.params.prevButton)&&(b.params.nextButton&&(b.nextButton=a(b.params.nextButton),b.params.uniqueNavElements&&"string"==typeof b.params.nextButton&&b.nextButton.length>1&&1===b.container.find(b.params.nextButton).length&&(b.nextButton=b.container.find(b.params.nextButton))),b.params.prevButton&&(b.prevButton=a(b.params.prevButton),b.params.uniqueNavElements&&"string"==typeof b.params.prevButton&&b.prevButton.length>1&&1===b.container.find(b.params.prevButton).length&&(b.prevButton=b.container.find(b.params.prevButton)))),b.isHorizontal=function(){return"horizontal"===b.params.direction},b.rtl=b.isHorizontal()&&("rtl"===b.container[0].dir.toLowerCase()||"rtl"===b.container.css("direction")),b.rtl&&b.classNames.push("swiper-container-rtl"),b.rtl&&(b.wrongRTL="-webkit-box"===b.wrapper.css("display")),b.params.slidesPerColumn>1&&b.classNames.push("swiper-container-multirow"),b.device.android&&b.classNames.push("swiper-container-android"),b.container.addClass(b.classNames.join(" ")),b.translate=0,b.progress=0,b.velocity=0,b.lockSwipeToNext=function(){b.params.allowSwipeToNext=!1},b.lockSwipeToPrev=function(){b.params.allowSwipeToPrev=!1},b.lockSwipes=function(){b.params.allowSwipeToNext=b.params.allowSwipeToPrev=!1},b.unlockSwipeToNext=function(){b.params.allowSwipeToNext=!0},b.unlockSwipeToPrev=function(){b.params.allowSwipeToPrev=!0},b.unlockSwipes=function(){b.params.allowSwipeToNext=b.params.allowSwipeToPrev=!0},b.params.grabCursor&&(b.container[0].style.cursor="move",b.container[0].style.cursor="-webkit-grab",b.container[0].style.cursor="-moz-grab",b.container[0].style.cursor="grab"),b.imagesToLoad=[],b.imagesLoaded=0,b.loadImage=function(e,a,t,r,i){function s(){i&&i()}var n;e.complete&&r?s():a?(n=new window.Image,n.onload=s,n.onerror=s,t&&(n.srcset=t),a&&(n.src=a)):s()},b.preloadImages=function(){function e(){"undefined"!=typeof b&&null!==b&&(void 0!==b.imagesLoaded&&b.imagesLoaded++,b.imagesLoaded===b.imagesToLoad.length&&(b.params.updateOnImagesReady&&b.update(),b.emit("onImagesReady",b)))}b.imagesToLoad=b.container.find("img");for(var a=0;a=0&&(a=parseFloat(a.replace("%",""))/100*b.size),b.virtualSize=-a,b.rtl?b.slides.css({marginLeft:"",marginTop:""}):b.slides.css({marginRight:"",marginBottom:""});var n;b.params.slidesPerColumn>1&&(n=Math.floor(b.slides.length/b.params.slidesPerColumn)===b.slides.length/b.params.slidesPerColumn?b.slides.length:Math.ceil(b.slides.length/b.params.slidesPerColumn)*b.params.slidesPerColumn,"auto"!==b.params.slidesPerView&&"row"===b.params.slidesPerColumnFill&&(n=Math.max(n,b.params.slidesPerView*b.params.slidesPerColumn)));var o,l=b.params.slidesPerColumn,p=n/l,d=p-(b.params.slidesPerColumn*p-b.slides.length);for(e=0;e1){var c,m,h;"column"===b.params.slidesPerColumnFill?(m=Math.floor(e/l),h=e-m*l,(m>d||m===d&&h===l-1)&&++h>=l&&(h=0,m++),c=m+h*n/l,u.css({"-webkit-box-ordinal-group":c,"-moz-box-ordinal-group":c,"-ms-flex-order":c,"-webkit-order":c,order:c})):(h=Math.floor(e/p),m=e-h*p),u.css({"margin-top":0!==h&&b.params.spaceBetween&&b.params.spaceBetween+"px"}).attr("data-swiper-column",m).attr("data-swiper-row",h)}"none"!==u.css("display")&&("auto"===b.params.slidesPerView?(o=b.isHorizontal()?u.outerWidth(!0):u.outerHeight(!0),b.params.roundLengths&&(o=s(o))):(o=(b.size-(b.params.slidesPerView-1)*a)/b.params.slidesPerView,b.params.roundLengths&&(o=s(o)),b.isHorizontal()?b.slides[e].style.width=o+"px":b.slides[e].style.height=o+"px"),b.slides[e].swiperSlideSize=o,b.slidesSizesGrid.push(o),b.params.centeredSlides?(t=t+o/2+r/2+a,0===e&&(t=t-b.size/2-a),Math.abs(t)<.001&&(t=0),i%b.params.slidesPerGroup===0&&b.snapGrid.push(t),b.slidesGrid.push(t)):(i%b.params.slidesPerGroup===0&&b.snapGrid.push(t),b.slidesGrid.push(t),t=t+o+a),b.virtualSize+=o+a,r=o,i++)}b.virtualSize=Math.max(b.virtualSize,b.size)+b.params.slidesOffsetAfter;var f;if(b.rtl&&b.wrongRTL&&("slide"===b.params.effect||"coverflow"===b.params.effect)&&b.wrapper.css({width:b.virtualSize+b.params.spaceBetween+"px"}),(!b.support.flexbox||b.params.setWrapperSize)&&(b.isHorizontal()?b.wrapper.css({width:b.virtualSize+b.params.spaceBetween+"px"}):b.wrapper.css({height:b.virtualSize+b.params.spaceBetween+"px"})),b.params.slidesPerColumn>1&&(b.virtualSize=(o+b.params.spaceBetween)*n,b.virtualSize=Math.ceil(b.virtualSize/b.params.slidesPerColumn)-b.params.spaceBetween,b.wrapper.css({width:b.virtualSize+b.params.spaceBetween+"px"}),b.params.centeredSlides)){for(f=[],e=0;e1&&b.snapGrid.push(b.virtualSize-b.size)}0===b.snapGrid.length&&(b.snapGrid=[0]),0!==b.params.spaceBetween&&(b.isHorizontal()?b.rtl?b.slides.css({marginLeft:a+"px"}):b.slides.css({marginRight:a+"px"}):b.slides.css({marginBottom:a+"px"})),b.params.watchSlidesProgress&&b.updateSlidesOffset()}},b.updateSlidesOffset=function(){for(var e=0;e=0&&s0&&n<=b.size||0>=s&&n>=b.size;o&&b.slides.eq(t).addClass(b.params.slideVisibleClass)}r.progress=b.rtl?-i:i}}},b.updateProgress=function(e){"undefined"==typeof e&&(e=b.translate||0);var a=b.maxTranslate()-b.minTranslate(),t=b.isBeginning,r=b.isEnd;0===a?(b.progress=0,b.isBeginning=b.isEnd=!0):(b.progress=(e-b.minTranslate())/a,b.isBeginning=b.progress<=0,b.isEnd=b.progress>=1),b.isBeginning&&!t&&b.emit("onReachBeginning",b),b.isEnd&&!r&&b.emit("onReachEnd",b),b.params.watchSlidesProgress&&b.updateSlidesProgress(e),b.emit("onProgress",b,b.progress)},b.updateActiveIndex=function(){var e,a,t,r=b.rtl?b.translate:-b.translate;for(a=0;a=b.slidesGrid[a]&&r=b.slidesGrid[a]&&r=b.slidesGrid[a]&&(e=a);(0>e||"undefined"==typeof e)&&(e=0),t=Math.floor(e/b.params.slidesPerGroup),t>=b.snapGrid.length&&(t=b.snapGrid.length-1),e!==b.activeIndex&&(b.snapIndex=t,b.previousIndex=b.activeIndex,b.activeIndex=e,b.updateClasses())},b.updateClasses=function(){b.slides.removeClass(b.params.slideActiveClass+" "+b.params.slideNextClass+" "+b.params.slidePrevClass);var e=b.slides.eq(b.activeIndex);e.addClass(b.params.slideActiveClass);var t=e.next("."+b.params.slideClass).addClass(b.params.slideNextClass);b.params.loop&&0===t.length&&b.slides.eq(0).addClass(b.params.slideNextClass);var r=e.prev("."+b.params.slideClass).addClass(b.params.slidePrevClass);if(b.params.loop&&0===r.length&&b.slides.eq(-1).addClass(b.params.slidePrevClass),b.paginationContainer&&b.paginationContainer.length>0){var i,s=b.params.loop?Math.ceil((b.slides.length-2*b.loopedSlides)/b.params.slidesPerGroup):b.snapGrid.length;if(b.params.loop?(i=Math.ceil((b.activeIndex-b.loopedSlides)/b.params.slidesPerGroup),i>b.slides.length-1-2*b.loopedSlides&&(i-=b.slides.length-2*b.loopedSlides),i>s-1&&(i-=s),0>i&&"bullets"!==b.params.paginationType&&(i=s+i)):i="undefined"!=typeof b.snapIndex?b.snapIndex:b.activeIndex||0,"bullets"===b.params.paginationType&&b.bullets&&b.bullets.length>0&&(b.bullets.removeClass(b.params.bulletActiveClass),b.paginationContainer.length>1?b.bullets.each(function(){a(this).index()===i&&a(this).addClass(b.params.bulletActiveClass)}):b.bullets.eq(i).addClass(b.params.bulletActiveClass)),"fraction"===b.params.paginationType&&(b.paginationContainer.find("."+b.params.paginationCurrentClass).text(i+1),b.paginationContainer.find("."+b.params.paginationTotalClass).text(s)),"progress"===b.params.paginationType){var n=(i+1)/s,o=n,l=1;b.isHorizontal()||(l=n,o=1),b.paginationContainer.find("."+b.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+o+") scaleY("+l+")").transition(b.params.speed)}"custom"===b.params.paginationType&&b.params.paginationCustomRender&&(b.paginationContainer.html(b.params.paginationCustomRender(b,i+1,s)),b.emit("onPaginationRendered",b,b.paginationContainer[0]))}b.params.loop||(b.params.prevButton&&b.prevButton&&b.prevButton.length>0&&(b.isBeginning?(b.prevButton.addClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.disable(b.prevButton)):(b.prevButton.removeClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.enable(b.prevButton))),b.params.nextButton&&b.nextButton&&b.nextButton.length>0&&(b.isEnd?(b.nextButton.addClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.disable(b.nextButton)):(b.nextButton.removeClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.enable(b.nextButton))))},b.updatePagination=function(){if(b.params.pagination&&b.paginationContainer&&b.paginationContainer.length>0){var e="";if("bullets"===b.params.paginationType){for(var a=b.params.loop?Math.ceil((b.slides.length-2*b.loopedSlides)/b.params.slidesPerGroup):b.snapGrid.length,t=0;a>t;t++)e+=b.params.paginationBulletRender?b.params.paginationBulletRender(t,b.params.bulletClass):"<"+b.params.paginationElement+' class="'+b.params.bulletClass+'">";b.paginationContainer.html(e),b.bullets=b.paginationContainer.find("."+b.params.bulletClass),b.params.paginationClickable&&b.params.a11y&&b.a11y&&b.a11y.initPagination()}"fraction"===b.params.paginationType&&(e=b.params.paginationFractionRender?b.params.paginationFractionRender(b,b.params.paginationCurrentClass,b.params.paginationTotalClass):' / ',b.paginationContainer.html(e)),"progress"===b.params.paginationType&&(e=b.params.paginationProgressRender?b.params.paginationProgressRender(b,b.params.paginationProgressbarClass):'',b.paginationContainer.html(e)),"custom"!==b.params.paginationType&&b.emit("onPaginationRendered",b,b.paginationContainer[0])}},b.update=function(e){function a(){r=Math.min(Math.max(b.translate,b.maxTranslate()),b.minTranslate()),b.setWrapperTranslate(r),b.updateActiveIndex(),b.updateClasses()}if(b.updateContainerSize(),b.updateSlidesSize(),b.updateProgress(),b.updatePagination(),b.updateClasses(),b.params.scrollbar&&b.scrollbar&&b.scrollbar.set(),e){var t,r;b.controller&&b.controller.spline&&(b.controller.spline=void 0),b.params.freeMode?(a(),b.params.autoHeight&&b.updateAutoHeight()):(t=("auto"===b.params.slidesPerView||b.params.slidesPerView>1)&&b.isEnd&&!b.params.centeredSlides?b.slideTo(b.slides.length-1,0,!1,!0):b.slideTo(b.activeIndex,0,!1,!0),t||a())}else b.params.autoHeight&&b.updateAutoHeight()},b.onResize=function(e){b.params.breakpoints&&b.setBreakpoint();var a=b.params.allowSwipeToPrev,t=b.params.allowSwipeToNext;b.params.allowSwipeToPrev=b.params.allowSwipeToNext=!0,b.updateContainerSize(),b.updateSlidesSize(),("auto"===b.params.slidesPerView||b.params.freeMode||e)&&b.updatePagination(),b.params.scrollbar&&b.scrollbar&&b.scrollbar.set(),b.controller&&b.controller.spline&&(b.controller.spline=void 0);var r=!1;if(b.params.freeMode){var i=Math.min(Math.max(b.translate,b.maxTranslate()),b.minTranslate());b.setWrapperTranslate(i),b.updateActiveIndex(),b.updateClasses(),b.params.autoHeight&&b.updateAutoHeight()}else b.updateClasses(),r=("auto"===b.params.slidesPerView||b.params.slidesPerView>1)&&b.isEnd&&!b.params.centeredSlides?b.slideTo(b.slides.length-1,0,!1,!0):b.slideTo(b.activeIndex,0,!1,!0);b.params.lazyLoading&&!r&&b.lazy&&b.lazy.load(),b.params.allowSwipeToPrev=a,b.params.allowSwipeToNext=t};var T=["mousedown","mousemove","mouseup"];window.navigator.pointerEnabled?T=["pointerdown","pointermove","pointerup"]:window.navigator.msPointerEnabled&&(T=["MSPointerDown","MSPointerMove","MSPointerUp"]),b.touchEvents={start:b.support.touch||!b.params.simulateTouch?"touchstart":T[0],move:b.support.touch||!b.params.simulateTouch?"touchmove":T[1],end:b.support.touch||!b.params.simulateTouch?"touchend":T[2]},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===b.params.touchEventsTarget?b.container:b.wrapper).addClass("swiper-wp8-"+b.params.direction),b.initEvents=function(e){var a=e?"off":"on",t=e?"removeEventListener":"addEventListener",r="container"===b.params.touchEventsTarget?b.container[0]:b.wrapper[0],s=b.support.touch?r:document,n=b.params.nested?!0:!1;b.browser.ie?(r[t](b.touchEvents.start,b.onTouchStart,!1),s[t](b.touchEvents.move,b.onTouchMove,n),s[t](b.touchEvents.end,b.onTouchEnd,!1)):(b.support.touch&&(r[t](b.touchEvents.start,b.onTouchStart,!1),r[t](b.touchEvents.move,b.onTouchMove,n),r[t](b.touchEvents.end,b.onTouchEnd,!1)),!i.simulateTouch||b.device.ios||b.device.android||(r[t]("mousedown",b.onTouchStart,!1),document[t]("mousemove",b.onTouchMove,n),document[t]("mouseup",b.onTouchEnd,!1))),window[t]("resize",b.onResize),b.params.nextButton&&b.nextButton&&b.nextButton.length>0&&(b.nextButton[a]("click",b.onClickNext),b.params.a11y&&b.a11y&&b.nextButton[a]("keydown",b.a11y.onEnterKey)),b.params.prevButton&&b.prevButton&&b.prevButton.length>0&&(b.prevButton[a]("click",b.onClickPrev),b.params.a11y&&b.a11y&&b.prevButton[a]("keydown",b.a11y.onEnterKey)),b.params.pagination&&b.params.paginationClickable&&(b.paginationContainer[a]("click","."+b.params.bulletClass,b.onClickIndex),b.params.a11y&&b.a11y&&b.paginationContainer[a]("keydown","."+b.params.bulletClass,b.a11y.onEnterKey)),(b.params.preventClicks||b.params.preventClicksPropagation)&&r[t]("click",b.preventClicks,!0)},b.attachEvents=function(){b.initEvents()},b.detachEvents=function(){b.initEvents(!0)},b.allowClick=!0,b.preventClicks=function(e){b.allowClick||(b.params.preventClicks&&e.preventDefault(),b.params.preventClicksPropagation&&b.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},b.onClickNext=function(e){e.preventDefault(),(!b.isEnd||b.params.loop)&&b.slideNext()},b.onClickPrev=function(e){e.preventDefault(),(!b.isBeginning||b.params.loop)&&b.slidePrev()},b.onClickIndex=function(e){e.preventDefault();var t=a(this).index()*b.params.slidesPerGroup;b.params.loop&&(t+=b.loopedSlides),b.slideTo(t)},b.updateClickedSlide=function(e){var t=o(e,"."+b.params.slideClass),r=!1;if(t)for(var i=0;ib.slides.length-b.loopedSlides+b.params.slidesPerView/2?(b.fixLoop(),n=b.wrapper.children("."+b.params.slideClass+'[data-swiper-slide-index="'+s+'"]:not(.swiper-slide-duplicate)').eq(0).index(),setTimeout(function(){b.slideTo(n)},0)):b.slideTo(n):n>b.slides.length-b.params.slidesPerView?(b.fixLoop(),n=b.wrapper.children("."+b.params.slideClass+'[data-swiper-slide-index="'+s+'"]:not(.swiper-slide-duplicate)').eq(0).index(),setTimeout(function(){b.slideTo(n)},0)):b.slideTo(n)}else b.slideTo(n)}};var S,C,z,M,E,P,k,I,L,B,D="input, select, textarea, button",H=Date.now(),A=[];b.animating=!1,b.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var G,O;if(b.onTouchStart=function(e){if(e.originalEvent&&(e=e.originalEvent),G="touchstart"===e.type,G||!("which"in e)||3!==e.which){if(b.params.noSwiping&&o(e,"."+b.params.noSwipingClass))return void(b.allowClick=!0);if(!b.params.swipeHandler||o(e,b.params.swipeHandler)){var t=b.touches.currentX="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,r=b.touches.currentY="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY;if(!(b.device.ios&&b.params.iOSEdgeSwipeDetection&&t<=b.params.iOSEdgeSwipeThreshold)){if(S=!0,C=!1,z=!0,E=void 0,O=void 0,b.touches.startX=t,b.touches.startY=r,M=Date.now(),b.allowClick=!0,b.updateContainerSize(),b.swipeDirection=void 0,b.params.threshold>0&&(I=!1),"touchstart"!==e.type){var i=!0;a(e.target).is(D)&&(i=!1),document.activeElement&&a(document.activeElement).is(D)&&document.activeElement.blur(),i&&e.preventDefault()}b.emit("onTouchStart",b,e)}}}},b.onTouchMove=function(e){if(e.originalEvent&&(e=e.originalEvent),!G||"mousemove"!==e.type){if(e.preventedByNestedSwiper)return b.touches.startX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,void(b.touches.startY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY);if(b.params.onlyExternal)return b.allowClick=!1,void(S&&(b.touches.startX=b.touches.currentX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,b.touches.startY=b.touches.currentY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,M=Date.now()));if(G&&document.activeElement&&e.target===document.activeElement&&a(e.target).is(D))return C=!0,void(b.allowClick=!1);if(z&&b.emit("onTouchMove",b,e),!(e.targetTouches&&e.targetTouches.length>1)){if(b.touches.currentX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,b.touches.currentY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,"undefined"==typeof E){var t=180*Math.atan2(Math.abs(b.touches.currentY-b.touches.startY),Math.abs(b.touches.currentX-b.touches.startX))/Math.PI;E=b.isHorizontal()?t>b.params.touchAngle:90-t>b.params.touchAngle}if(E&&b.emit("onTouchMoveOpposite",b,e),"undefined"==typeof O&&b.browser.ieTouch&&(b.touches.currentX!==b.touches.startX||b.touches.currentY!==b.touches.startY)&&(O=!0),S){if(E)return void(S=!1);if(O||!b.browser.ieTouch){b.allowClick=!1,b.emit("onSliderMove",b,e),e.preventDefault(),b.params.touchMoveStopPropagation&&!b.params.nested&&e.stopPropagation(),C||(i.loop&&b.fixLoop(),k=b.getWrapperTranslate(),b.setWrapperTransition(0),b.animating&&b.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),b.params.autoplay&&b.autoplaying&&(b.params.autoplayDisableOnInteraction?b.stopAutoplay():b.pauseAutoplay()),B=!1,b.params.grabCursor&&(b.container[0].style.cursor="move",b.container[0].style.cursor="-webkit-grabbing",b.container[0].style.cursor="-moz-grabbin",b.container[0].style.cursor="grabbing")),C=!0;var r=b.touches.diff=b.isHorizontal()?b.touches.currentX-b.touches.startX:b.touches.currentY-b.touches.startY;r*=b.params.touchRatio,b.rtl&&(r=-r),b.swipeDirection=r>0?"prev":"next",P=r+k;var s=!0;if(r>0&&P>b.minTranslate()?(s=!1,b.params.resistance&&(P=b.minTranslate()-1+Math.pow(-b.minTranslate()+k+r,b.params.resistanceRatio))):0>r&&PP&&(P=k),!b.params.allowSwipeToPrev&&"prev"===b.swipeDirection&&P>k&&(P=k),b.params.followFinger){if(b.params.threshold>0){if(!(Math.abs(r)>b.params.threshold||I))return void(P=k);if(!I)return I=!0,b.touches.startX=b.touches.currentX,b.touches.startY=b.touches.currentY,P=k,void(b.touches.diff=b.isHorizontal()?b.touches.currentX-b.touches.startX:b.touches.currentY-b.touches.startY)}(b.params.freeMode||b.params.watchSlidesProgress)&&b.updateActiveIndex(),b.params.freeMode&&(0===A.length&&A.push({position:b.touches[b.isHorizontal()?"startX":"startY"],time:M}),A.push({position:b.touches[b.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),b.updateProgress(P),b.setWrapperTranslate(P)}}}}}},b.onTouchEnd=function(e){if(e.originalEvent&&(e=e.originalEvent),z&&b.emit("onTouchEnd",b,e),z=!1,S){b.params.grabCursor&&C&&S&&(b.container[0].style.cursor="move",b.container[0].style.cursor="-webkit-grab",b.container[0].style.cursor="-moz-grab",b.container[0].style.cursor="grab");var t=Date.now(),r=t-M;if(b.allowClick&&(b.updateClickedSlide(e),b.emit("onTap",b,e),300>r&&t-H>300&&(L&&clearTimeout(L),L=setTimeout(function(){b&&(b.params.paginationHide&&b.paginationContainer.length>0&&!a(e.target).hasClass(b.params.bulletClass)&&b.paginationContainer.toggleClass(b.params.paginationHiddenClass),b.emit("onClick",b,e))},300)),300>r&&300>t-H&&(L&&clearTimeout(L),b.emit("onDoubleTap",b,e))),H=Date.now(),setTimeout(function(){b&&(b.allowClick=!0)},0),!S||!C||!b.swipeDirection||0===b.touches.diff||P===k)return void(S=C=!1);S=C=!1;var i;if(i=b.params.followFinger?b.rtl?b.translate:-b.translate:-P,b.params.freeMode){if(i<-b.minTranslate())return void b.slideTo(b.activeIndex);if(i>-b.maxTranslate())return void(b.slides.length1){var s=A.pop(),n=A.pop(),o=s.position-n.position,l=s.time-n.time;b.velocity=o/l,b.velocity=b.velocity/2,Math.abs(b.velocity)150||(new window.Date).getTime()-s.time>300)&&(b.velocity=0)}else b.velocity=0;A.length=0;var p=1e3*b.params.freeModeMomentumRatio,d=b.velocity*p,u=b.translate+d;b.rtl&&(u=-u);var c,m=!1,h=20*Math.abs(b.velocity)*b.params.freeModeMomentumBounceRatio;if(ub.minTranslate())b.params.freeModeMomentumBounce?(u-b.minTranslate()>h&&(u=b.minTranslate()+h),c=b.minTranslate(),m=!0,B=!0):u=b.minTranslate();else if(b.params.freeModeSticky){var f,g=0;for(g=0;g-u){f=g;break}u=Math.abs(b.snapGrid[f]-u)=b.params.longSwipesMs)&&(b.updateProgress(),b.updateActiveIndex()))}var v,w=0,y=b.slidesSizesGrid[0];for(v=0;v=b.slidesGrid[v]&&i=b.slidesGrid[v]&&(w=v,y=b.slidesGrid[b.slidesGrid.length-1]-b.slidesGrid[b.slidesGrid.length-2]);var x=(i-b.slidesGrid[w])/y;if(r>b.params.longSwipesMs){if(!b.params.longSwipes)return void b.slideTo(b.activeIndex);"next"===b.swipeDirection&&(x>=b.params.longSwipesRatio?b.slideTo(w+b.params.slidesPerGroup):b.slideTo(w)),"prev"===b.swipeDirection&&(x>1-b.params.longSwipesRatio?b.slideTo(w+b.params.slidesPerGroup):b.slideTo(w))}else{if(!b.params.shortSwipes)return void b.slideTo(b.activeIndex);"next"===b.swipeDirection&&b.slideTo(w+b.params.slidesPerGroup),"prev"===b.swipeDirection&&b.slideTo(w)}}},b._slideTo=function(e,a){return b.slideTo(e,a,!0,!0)},b.slideTo=function(e,a,t,r){"undefined"==typeof t&&(t=!0),"undefined"==typeof e&&(e=0),0>e&&(e=0),b.snapIndex=Math.floor(e/b.params.slidesPerGroup),b.snapIndex>=b.snapGrid.length&&(b.snapIndex=b.snapGrid.length-1);var i=-b.snapGrid[b.snapIndex];b.params.autoplay&&b.autoplaying&&(r||!b.params.autoplayDisableOnInteraction?b.pauseAutoplay(a):b.stopAutoplay()),b.updateProgress(i);for(var s=0;s=Math.floor(100*b.slidesGrid[s])&&(e=s);return!b.params.allowSwipeToNext&&ib.translate&&i>b.maxTranslate()&&(b.activeIndex||0)!==e?!1:("undefined"==typeof a&&(a=b.params.speed),b.previousIndex=b.activeIndex||0,b.activeIndex=e,b.rtl&&-i===b.translate||!b.rtl&&i===b.translate?(b.params.autoHeight&&b.updateAutoHeight(),b.updateClasses(),"slide"!==b.params.effect&&b.setWrapperTranslate(i),!1):(b.updateClasses(),b.onTransitionStart(t),0===a?(b.setWrapperTranslate(i),b.setWrapperTransition(0),b.onTransitionEnd(t)):(b.setWrapperTranslate(i),b.setWrapperTransition(a),b.animating||(b.animating=!0,b.wrapper.transitionEnd(function(){b&&b.onTransitionEnd(t)}))),!0))},b.onTransitionStart=function(e){"undefined"==typeof e&&(e=!0),b.params.autoHeight&&b.updateAutoHeight(),b.lazy&&b.lazy.onTransitionStart(),e&&(b.emit("onTransitionStart",b),b.activeIndex!==b.previousIndex&&(b.emit("onSlideChangeStart",b),b.activeIndex>b.previousIndex?b.emit("onSlideNextStart",b):b.emit("onSlidePrevStart",b)))},b.onTransitionEnd=function(e){b.animating=!1,b.setWrapperTransition(0),"undefined"==typeof e&&(e=!0),b.lazy&&b.lazy.onTransitionEnd(),e&&(b.emit("onTransitionEnd",b),b.activeIndex!==b.previousIndex&&(b.emit("onSlideChangeEnd",b),b.activeIndex>b.previousIndex?b.emit("onSlideNextEnd",b):b.emit("onSlidePrevEnd",b))),b.params.hashnav&&b.hashnav&&b.hashnav.setHash()},b.slideNext=function(e,a,t){if(b.params.loop){if(b.animating)return!1;b.fixLoop();b.container[0].clientLeft;return b.slideTo(b.activeIndex+b.params.slidesPerGroup,a,e,t)}return b.slideTo(b.activeIndex+b.params.slidesPerGroup,a,e,t)},b._slideNext=function(e){return b.slideNext(!0,e,!0)},b.slidePrev=function(e,a,t){if(b.params.loop){if(b.animating)return!1;b.fixLoop();b.container[0].clientLeft;return b.slideTo(b.activeIndex-1,a,e,t)}return b.slideTo(b.activeIndex-1,a,e,t)},b._slidePrev=function(e){return b.slidePrev(!0,e,!0)},b.slideReset=function(e,a,t){return b.slideTo(b.activeIndex,a,e)},b.setWrapperTransition=function(e,a){b.wrapper.transition(e),"slide"!==b.params.effect&&b.effects[b.params.effect]&&b.effects[b.params.effect].setTransition(e),b.params.parallax&&b.parallax&&b.parallax.setTransition(e),b.params.scrollbar&&b.scrollbar&&b.scrollbar.setTransition(e),b.params.control&&b.controller&&b.controller.setTransition(e,a),b.emit("onSetTransition",b,e)},b.setWrapperTranslate=function(e,a,t){var r=0,i=0,n=0;b.isHorizontal()?r=b.rtl?-e:e:i=e,b.params.roundLengths&&(r=s(r),i=s(i)),b.params.virtualTranslate||(b.support.transforms3d?b.wrapper.transform("translate3d("+r+"px, "+i+"px, "+n+"px)"):b.wrapper.transform("translate("+r+"px, "+i+"px)")),b.translate=b.isHorizontal()?r:i;var o,l=b.maxTranslate()-b.minTranslate();o=0===l?0:(e-b.minTranslate())/l,o!==b.progress&&b.updateProgress(e),a&&b.updateActiveIndex(),"slide"!==b.params.effect&&b.effects[b.params.effect]&&b.effects[b.params.effect].setTranslate(b.translate),b.params.parallax&&b.parallax&&b.parallax.setTranslate(b.translate),b.params.scrollbar&&b.scrollbar&&b.scrollbar.setTranslate(b.translate),b.params.control&&b.controller&&b.controller.setTranslate(b.translate,t),b.emit("onSetTranslate",b,b.translate)},b.getTranslate=function(e,a){var t,r,i,s;return"undefined"==typeof a&&(a="x"),b.params.virtualTranslate?b.rtl?-b.translate:b.translate:(i=window.getComputedStyle(e,null),window.WebKitCSSMatrix?(r=i.transform||i.webkitTransform,r.split(",").length>6&&(r=r.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),s=new window.WebKitCSSMatrix("none"===r?"":r)):(s=i.MozTransform||i.OTransform||i.MsTransform||i.msTransform||i.transform||i.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=s.toString().split(",")),"x"===a&&(r=window.WebKitCSSMatrix?s.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(r=window.WebKitCSSMatrix?s.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),b.rtl&&r&&(r=-r),r||0)},b.getWrapperTranslate=function(e){return"undefined"==typeof e&&(e=b.isHorizontal()?"x":"y"),b.getTranslate(b.wrapper[0],e)},b.observers=[],b.initObservers=function(){if(b.params.observeParents)for(var e=b.container.parents(),a=0;ae.length&&(b.loopedSlides=e.length);var t,r=[],i=[];for(e.each(function(t,s){var n=a(this);t=e.length-b.loopedSlides&&r.push(s),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)b.wrapper.prepend(a(r[t].cloneNode(!0)).addClass(b.params.slideDuplicateClass))},b.destroyLoop=function(){b.wrapper.children("."+b.params.slideClass+"."+b.params.slideDuplicateClass).remove(),b.slides.removeAttr("data-swiper-slide-index")},b.reLoop=function(e){var a=b.activeIndex-b.loopedSlides;b.destroyLoop(),b.createLoop(),b.updateSlidesSize(),e&&b.slideTo(a+b.loopedSlides,0,!1)},b.fixLoop=function(){var e;b.activeIndex=2*b.loopedSlides||b.activeIndex>b.slides.length-2*b.params.slidesPerView)&&(e=-b.slides.length+b.activeIndex+b.loopedSlides,e+=b.loopedSlides,b.slideTo(e,0,!1,!0))},b.appendSlide=function(e){if(b.params.loop&&b.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;aa&&t--;t=Math.max(t,0)}else a=e,b.slides[a]&&b.slides.eq(a).remove(),t>a&&t--,t=Math.max(t,0);b.params.loop&&b.createLoop(),b.params.observer&&b.support.observer||b.update(!0),b.params.loop?b.slideTo(t+b.loopedSlides,0,!1):b.slideTo(t,0,!1)},b.removeAllSlides=function(){for(var e=[],a=0;a'),t.append(d)),0===u.length&&(u=a('
'),t.append(u)),d.length&&(d[0].style.opacity=Math.max(-r,0)),u.length&&(u[0].style.opacity=Math.max(r,0))}t.transform("translate3d("+l+"px, "+p+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(e){if(b.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),b.params.virtualTranslate&&0!==e){var t=!1;b.slides.eq(b.activeIndex).transitionEnd(function(){if(!t&&b&&a(this).hasClass(b.params.slideActiveClass)){t=!0,b.animating=!1;for(var e=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],r=0;r'),b.wrapper.append(e)),e.css({height:b.width+"px"})):(e=b.container.find(".swiper-cube-shadow"),0===e.length&&(e=a('
'),b.container.append(e))));for(var r=0;r=o&&o>-1&&(t=90*r+90*o,b.rtl&&(t=90*-r-90*o)),i.transform(u),b.params.cube.slideShadows){var c=b.isHorizontal()?i.find(".swiper-slide-shadow-left"):i.find(".swiper-slide-shadow-top"),m=b.isHorizontal()?i.find(".swiper-slide-shadow-right"):i.find(".swiper-slide-shadow-bottom");0===c.length&&(c=a('
'),i.append(c)),0===m.length&&(m=a('
'),i.append(m)),c.length&&(c[0].style.opacity=Math.max(-o,0)),m.length&&(m[0].style.opacity=Math.max(o,0))}}if(b.wrapper.css({"-webkit-transform-origin":"50% 50% -"+b.size/2+"px","-moz-transform-origin":"50% 50% -"+b.size/2+"px","-ms-transform-origin":"50% 50% -"+b.size/2+"px","transform-origin":"50% 50% -"+b.size/2+"px"}),b.params.cube.shadow)if(b.isHorizontal())e.transform("translate3d(0px, "+(b.width/2+b.params.cube.shadowOffset)+"px, "+-b.width/2+"px) rotateX(90deg) rotateZ(0deg) scale("+b.params.cube.shadowScale+")");else{var h=Math.abs(t)-90*Math.floor(Math.abs(t)/90),f=1.5-(Math.sin(2*h*Math.PI/360)/2+Math.cos(2*h*Math.PI/360)/2),g=b.params.cube.shadowScale,v=b.params.cube.shadowScale/f,w=b.params.cube.shadowOffset;e.transform("scale3d("+g+", 1, "+v+") translate3d(0px, "+(b.height/2+w)+"px, "+-b.height/2/v+"px) rotateX(-90deg)")}var y=b.isSafari||b.isUiWebView?-b.size/2:0;b.wrapper.transform("translate3d(0px,0,"+y+"px) rotateX("+(b.isHorizontal()?0:t)+"deg) rotateY("+(b.isHorizontal()?-t:0)+"deg)")},setTransition:function(e){b.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),b.params.cube.shadow&&!b.isHorizontal()&&b.container.find(".swiper-cube-shadow").transition(e)}},coverflow:{setTranslate:function(){for(var e=b.translate,t=b.isHorizontal()?-e+b.width/2:-e+b.height/2,r=b.isHorizontal()?b.params.coverflow.rotate:-b.params.coverflow.rotate,i=b.params.coverflow.depth,s=0,n=b.slides.length;n>s;s++){var o=b.slides.eq(s),l=b.slidesSizesGrid[s],p=o[0].swiperSlideOffset,d=(t-p-l/2)/l*b.params.coverflow.modifier,u=b.isHorizontal()?r*d:0,c=b.isHorizontal()?0:r*d,m=-i*Math.abs(d),h=b.isHorizontal()?0:b.params.coverflow.stretch*d,f=b.isHorizontal()?b.params.coverflow.stretch*d:0;Math.abs(f)<.001&&(f=0),Math.abs(h)<.001&&(h=0),Math.abs(m)<.001&&(m=0),Math.abs(u)<.001&&(u=0),Math.abs(c)<.001&&(c=0);var g="translate3d("+f+"px,"+h+"px,"+m+"px) rotateX("+c+"deg) rotateY("+u+"deg)";if(o.transform(g),o[0].style.zIndex=-Math.abs(Math.round(d))+1,b.params.coverflow.slideShadows){var v=b.isHorizontal()?o.find(".swiper-slide-shadow-left"):o.find(".swiper-slide-shadow-top"),w=b.isHorizontal()?o.find(".swiper-slide-shadow-right"):o.find(".swiper-slide-shadow-bottom");0===v.length&&(v=a('
'),o.append(v)),0===w.length&&(w=a('
'),o.append(w)),v.length&&(v[0].style.opacity=d>0?d:0),w.length&&(w[0].style.opacity=-d>0?-d:0)}}if(b.browser.ie){var y=b.wrapper[0].style;y.perspectiveOrigin=t+"px 50%"}},setTransition:function(e){b.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}}},b.lazy={initialImageLoaded:!1,loadImageInSlide:function(e,t){if("undefined"!=typeof e&&("undefined"==typeof t&&(t=!0),0!==b.slides.length)){var r=b.slides.eq(e),i=r.find(".swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)");!r.hasClass("swiper-lazy")||r.hasClass("swiper-lazy-loaded")||r.hasClass("swiper-lazy-loading")||(i=i.add(r[0])),0!==i.length&&i.each(function(){var e=a(this);e.addClass("swiper-lazy-loading");var i=e.attr("data-background"),s=e.attr("data-src"),n=e.attr("data-srcset");b.loadImage(e[0],s||i,n,!1,function(){if(i?(e.css("background-image",'url("'+i+'")'),e.removeAttr("data-background")):(n&&(e.attr("srcset",n),e.removeAttr("data-srcset")),s&&(e.attr("src",s),e.removeAttr("data-src"))),e.addClass("swiper-lazy-loaded").removeClass("swiper-lazy-loading"),r.find(".swiper-lazy-preloader, .preloader").remove(),b.params.loop&&t){var a=r.attr("data-swiper-slide-index");if(r.hasClass(b.params.slideDuplicateClass)){var o=b.wrapper.children('[data-swiper-slide-index="'+a+'"]:not(.'+b.params.slideDuplicateClass+")");b.lazy.loadImageInSlide(o.index(),!1)}else{var l=b.wrapper.children("."+b.params.slideDuplicateClass+'[data-swiper-slide-index="'+a+'"]');b.lazy.loadImageInSlide(l.index(),!1)}}b.emit("onLazyImageReady",b,r[0],e[0])}),b.emit("onLazyImageLoad",b,r[0],e[0])})}},load:function(){var e;if(b.params.watchSlidesVisibility)b.wrapper.children("."+b.params.slideVisibleClass).each(function(){b.lazy.loadImageInSlide(a(this).index())});else if(b.params.slidesPerView>1)for(e=b.activeIndex;e1||b.params.lazyLoadingInPrevNextAmount&&b.params.lazyLoadingInPrevNextAmount>1){var t=b.params.lazyLoadingInPrevNextAmount,r=b.params.slidesPerView,i=Math.min(b.activeIndex+r+Math.max(t,r),b.slides.length),s=Math.max(b.activeIndex-Math.max(r,t),0);for(e=b.activeIndex+b.params.slidesPerView;i>e;e++)b.slides[e]&&b.lazy.loadImageInSlide(e);for(e=s;e0&&b.lazy.loadImageInSlide(n.index());var o=b.wrapper.children("."+b.params.slidePrevClass);o.length>0&&b.lazy.loadImageInSlide(o.index())}},onTransitionStart:function(){b.params.lazyLoading&&(b.params.lazyLoadingOnTransitionStart||!b.params.lazyLoadingOnTransitionStart&&!b.lazy.initialImageLoaded)&&b.lazy.load()},onTransitionEnd:function(){b.params.lazyLoading&&!b.params.lazyLoadingOnTransitionStart&&b.lazy.load()}},b.scrollbar={isTouched:!1,setDragPosition:function(e){var a=b.scrollbar,t=b.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY,r=t-a.track.offset()[b.isHorizontal()?"left":"top"]-a.dragSize/2,i=-b.minTranslate()*a.moveDivider,s=-b.maxTranslate()*a.moveDivider;i>r?r=i:r>s&&(r=s),r=-r/a.moveDivider,b.updateProgress(r),b.setWrapperTranslate(r,!0)},dragStart:function(e){var a=b.scrollbar;a.isTouched=!0,e.preventDefault(),e.stopPropagation(),a.setDragPosition(e),clearTimeout(a.dragTimeout),a.track.transition(0),b.params.scrollbarHide&&a.track.css("opacity",1),b.wrapper.transition(100),a.drag.transition(100),b.emit("onScrollbarDragStart",b)},dragMove:function(e){var a=b.scrollbar;a.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,a.setDragPosition(e),b.wrapper.transition(0),a.track.transition(0),a.drag.transition(0),b.emit("onScrollbarDragMove",b))},dragEnd:function(e){var a=b.scrollbar;a.isTouched&&(a.isTouched=!1,b.params.scrollbarHide&&(clearTimeout(a.dragTimeout),a.dragTimeout=setTimeout(function(){a.track.css("opacity",0),a.track.transition(400)},1e3)),b.emit("onScrollbarDragEnd",b),b.params.scrollbarSnapOnRelease&&b.slideReset())},enableDraggable:function(){var e=b.scrollbar,t=b.support.touch?e.track:document;a(e.track).on(b.touchEvents.start,e.dragStart),a(t).on(b.touchEvents.move,e.dragMove),a(t).on(b.touchEvents.end,e.dragEnd)},disableDraggable:function(){var e=b.scrollbar,t=b.support.touch?e.track:document;a(e.track).off(b.touchEvents.start,e.dragStart),a(t).off(b.touchEvents.move,e.dragMove),a(t).off(b.touchEvents.end,e.dragEnd)},set:function(){if(b.params.scrollbar){var e=b.scrollbar;e.track=a(b.params.scrollbar),b.params.uniqueNavElements&&"string"==typeof b.params.scrollbar&&e.track.length>1&&1===b.container.find(b.params.scrollbar).length&&(e.track=b.container.find(b.params.scrollbar)),e.drag=e.track.find(".swiper-scrollbar-drag"),0===e.drag.length&&(e.drag=a('
'),e.track.append(e.drag)),e.drag[0].style.width="",e.drag[0].style.height="",e.trackSize=b.isHorizontal()?e.track[0].offsetWidth:e.track[0].offsetHeight,e.divider=b.size/b.virtualSize,e.moveDivider=e.divider*(e.trackSize/b.size),e.dragSize=e.trackSize*e.divider,b.isHorizontal()?e.drag[0].style.width=e.dragSize+"px":e.drag[0].style.height=e.dragSize+"px",e.divider>=1?e.track[0].style.display="none":e.track[0].style.display="",b.params.scrollbarHide&&(e.track[0].style.opacity=0)}},setTranslate:function(){if(b.params.scrollbar){var e,a=b.scrollbar,t=(b.translate||0,a.dragSize);e=(a.trackSize-a.dragSize)*b.progress,b.rtl&&b.isHorizontal()?(e=-e,e>0?(t=a.dragSize-e,e=0):-e+a.dragSize>a.trackSize&&(t=a.trackSize+e)):0>e?(t=a.dragSize+e,e=0):e+a.dragSize>a.trackSize&&(t=a.trackSize-e),b.isHorizontal()?(b.support.transforms3d?a.drag.transform("translate3d("+e+"px, 0, 0)"):a.drag.transform("translateX("+e+"px)"),a.drag[0].style.width=t+"px"):(b.support.transforms3d?a.drag.transform("translate3d(0px, "+e+"px, 0)"):a.drag.transform("translateY("+e+"px)"),a.drag[0].style.height=t+"px"),b.params.scrollbarHide&&(clearTimeout(a.timeout),a.track[0].style.opacity=1,a.timeout=setTimeout(function(){a.track[0].style.opacity=0,a.track.transition(400)},1e3))}},setTransition:function(e){b.params.scrollbar&&b.scrollbar.drag.transition(e)}},b.controller={LinearSpline:function(e,a){this.x=e,this.y=a,this.lastIndex=e.length-1;var t,r;this.x.length;this.interpolate=function(e){return e?(r=i(this.x,e),t=r-1,(e-this.x[t])*(this.y[r]-this.y[t])/(this.x[r]-this.x[t])+this.y[t]):0};var i=function(){var e,a,t;return function(r,i){for(a=-1,e=r.length;e-a>1;)r[t=e+a>>1]<=i?a=t:e=t;return e}}()},getInterpolateFunction:function(e){b.controller.spline||(b.controller.spline=b.params.loop?new b.controller.LinearSpline(b.slidesGrid,e.slidesGrid):new b.controller.LinearSpline(b.snapGrid,e.snapGrid))},setTranslate:function(e,a){function r(a){e=a.rtl&&"horizontal"===a.params.direction?-b.translate:b.translate,"slide"===b.params.controlBy&&(b.controller.getInterpolateFunction(a),s=-b.controller.spline.interpolate(-e)),s&&"container"!==b.params.controlBy||(i=(a.maxTranslate()-a.minTranslate())/(b.maxTranslate()-b.minTranslate()),s=(e-b.minTranslate())*i+a.minTranslate()),b.params.controlInverse&&(s=a.maxTranslate()-s),a.updateProgress(s),a.setWrapperTranslate(s,!1,b),a.updateActiveIndex()}var i,s,n=b.params.control;if(b.isArray(n))for(var o=0;ot;t++){var i=b.slides.eq(t),s=i.attr("data-hash");if(s===e&&!i.hasClass(b.params.slideDuplicateClass)){var n=i.index();b.slideTo(n,a,b.params.runCallbacksOnInit,!0)}}}},setHash:function(){b.hashnav.initialized&&b.params.hashnav&&(document.location.hash=b.slides.eq(b.activeIndex).attr("data-hash")||"")}},b.disableKeyboardControl=function(){b.params.keyboardControl=!1,a(document).off("keydown",p)},b.enableKeyboardControl=function(){b.params.keyboardControl=!0,a(document).on("keydown",p)},b.mousewheel={event:!1,lastScrollTime:(new window.Date).getTime()},b.params.mousewheelControl){try{new window.WheelEvent("wheel"),b.mousewheel.event="wheel"}catch(N){(window.WheelEvent||b.container[0]&&"wheel"in b.container[0])&&(b.mousewheel.event="wheel")}!b.mousewheel.event&&window.WheelEvent,b.mousewheel.event||void 0===document.onmousewheel||(b.mousewheel.event="mousewheel"),b.mousewheel.event||(b.mousewheel.event="DOMMouseScroll")}b.disableMousewheelControl=function(){return b.mousewheel.event?(b.container.off(b.mousewheel.event,d),!0):!1},b.enableMousewheelControl=function(){return b.mousewheel.event?(b.container.on(b.mousewheel.event,d),!0):!1},b.parallax={setTranslate:function(){b.container.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){u(this,b.progress)}),b.slides.each(function(){var e=a(this);e.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var a=Math.min(Math.max(e[0].progress,-1),1);u(this,a)})})},setTransition:function(e){"undefined"==typeof e&&(e=b.params.speed),b.container.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var t=a(this),r=parseInt(t.attr("data-swiper-parallax-duration"),10)||e;0===e&&(r=0),t.transition(r)})}},b._plugins=[];for(var R in b.plugins){var W=b.plugins[R](b,b.params[R]);W&&b._plugins.push(W)}return b.callPlugins=function(e){for(var a=0;a'),notify:function(e){var a=b.a11y.liveRegion;0!==a.length&&(a.html(""),a.html(e))},init:function(){b.params.nextButton&&b.nextButton&&b.nextButton.length>0&&(b.a11y.makeFocusable(b.nextButton),b.a11y.addRole(b.nextButton,"button"),b.a11y.addLabel(b.nextButton,b.params.nextSlideMessage)),b.params.prevButton&&b.prevButton&&b.prevButton.length>0&&(b.a11y.makeFocusable(b.prevButton),b.a11y.addRole(b.prevButton,"button"),b.a11y.addLabel(b.prevButton,b.params.prevSlideMessage)),a(b.container).append(b.a11y.liveRegion)},initPagination:function(){b.params.pagination&&b.params.paginationClickable&&b.bullets&&b.bullets.length&&b.bullets.each(function(){var e=a(this);b.a11y.makeFocusable(e),b.a11y.addRole(e,"button"),b.a11y.addLabel(e,b.params.paginationBulletMessage.replace(/{{index}}/,e.index()+1))})},destroy:function(){b.a11y.liveRegion&&b.a11y.liveRegion.length>0&&b.a11y.liveRegion.remove()}},b.init=function(){b.params.loop&&b.createLoop(),b.updateContainerSize(),b.updateSlidesSize(),b.updatePagination(),b.params.scrollbar&&b.scrollbar&&(b.scrollbar.set(),b.params.scrollbarDraggable&&b.scrollbar.enableDraggable()),"slide"!==b.params.effect&&b.effects[b.params.effect]&&(b.params.loop||b.updateProgress(),b.effects[b.params.effect].setTranslate()),b.params.loop?b.slideTo(b.params.initialSlide+b.loopedSlides,0,b.params.runCallbacksOnInit):(b.slideTo(b.params.initialSlide,0,b.params.runCallbacksOnInit),0===b.params.initialSlide&&(b.parallax&&b.params.parallax&&b.parallax.setTranslate(),b.lazy&&b.params.lazyLoading&&(b.lazy.load(),b.lazy.initialImageLoaded=!0))),b.attachEvents(),b.params.observer&&b.support.observer&&b.initObservers(),b.params.preloadImages&&!b.params.lazyLoading&&b.preloadImages(),b.params.autoplay&&b.startAutoplay(),b.params.keyboardControl&&b.enableKeyboardControl&&b.enableKeyboardControl(),b.params.mousewheelControl&&b.enableMousewheelControl&&b.enableMousewheelControl(), +b.params.hashnav&&b.hashnav&&b.hashnav.init(),b.params.a11y&&b.a11y&&b.a11y.init(),b.emit("onInit",b)},b.cleanupStyles=function(){b.container.removeClass(b.classNames.join(" ")).removeAttr("style"),b.wrapper.removeAttr("style"),b.slides&&b.slides.length&&b.slides.removeClass([b.params.slideVisibleClass,b.params.slideActiveClass,b.params.slideNextClass,b.params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-column").removeAttr("data-swiper-row"),b.paginationContainer&&b.paginationContainer.length&&b.paginationContainer.removeClass(b.params.paginationHiddenClass),b.bullets&&b.bullets.length&&b.bullets.removeClass(b.params.bulletActiveClass),b.params.prevButton&&a(b.params.prevButton).removeClass(b.params.buttonDisabledClass),b.params.nextButton&&a(b.params.nextButton).removeClass(b.params.buttonDisabledClass),b.params.scrollbar&&b.scrollbar&&(b.scrollbar.track&&b.scrollbar.track.length&&b.scrollbar.track.removeAttr("style"),b.scrollbar.drag&&b.scrollbar.drag.length&&b.scrollbar.drag.removeAttr("style"))},b.destroy=function(e,a){b.detachEvents(),b.stopAutoplay(),b.params.scrollbar&&b.scrollbar&&b.params.scrollbarDraggable&&b.scrollbar.disableDraggable(),b.params.loop&&b.destroyLoop(),a&&b.cleanupStyles(),b.disconnectObservers(),b.params.keyboardControl&&b.disableKeyboardControl&&b.disableKeyboardControl(),b.params.mousewheelControl&&b.disableMousewheelControl&&b.disableMousewheelControl(),b.params.a11y&&b.a11y&&b.a11y.destroy(),b.emit("onDestroy"),e!==!1&&(b=null)},b.init(),b}};t.prototype={isSafari:function(){var e=navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent),isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},browser:{ie:window.navigator.pointerEnabled||window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled&&window.navigator.msMaxTouchPoints>1||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>1},device:function(){var e=navigator.userAgent,a=e.match(/(Android);?[\s\/]+([\d.]+)?/),t=e.match(/(iPad).*OS\s([\d_]+)/),r=e.match(/(iPod)(.*OS\s([\d_]+))?/),i=!t&&e.match(/(iPhone\sOS)\s([\d_]+)/);return{ios:t||i||r,android:a}}(),support:{touch:window.Modernizr&&Modernizr.touch===!0||function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}(),transforms3d:window.Modernizr&&Modernizr.csstransforms3d===!0||function(){var e=document.createElement("div").style;return"webkitPerspective"in e||"MozPerspective"in e||"OPerspective"in e||"MsPerspective"in e||"perspective"in e}(),flexbox:function(){for(var e=document.createElement("div").style,a="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),t=0;t=0&&o.indexOf(">")>=0){var l="div";for(0===o.indexOf(":~]/)?(t||document).querySelectorAll(a):[document.getElementById(a.split("#")[1])],i=0;i0&&a[0].nodeType)for(i=0;i0?parseFloat(this.css("width")):null},outerWidth:function(e){return this.length>0?e?this[0].offsetWidth+parseFloat(this.css("margin-right"))+parseFloat(this.css("margin-left")):this[0].offsetWidth:null},height:function(){return this[0]===window?window.innerHeight:this.length>0?parseFloat(this.css("height")):null},outerHeight:function(e){return this.length>0?e?this[0].offsetHeight+parseFloat(this.css("margin-top"))+parseFloat(this.css("margin-bottom")):this[0].offsetHeight:null},offset:function(){if(this.length>0){var e=this[0],a=e.getBoundingClientRect(),t=document.body,r=e.clientTop||t.clientTop||0,i=e.clientLeft||t.clientLeft||0,s=window.pageYOffset||e.scrollTop,n=window.pageXOffset||e.scrollLeft;return{top:a.top+s-r,left:a.left+n-i}}return null},css:function(e,a){var t;if(1===arguments.length){if("string"!=typeof e){for(t=0;tr-1?new e([]):0>a?(t=r+a,new e(0>t?[]:[this[t]])):new e([this[a]])},append:function(a){var t,r;for(t=0;t=0;r--)this[t].insertBefore(i.childNodes[r],this[t].childNodes[0])}else if(a instanceof e)for(r=0;r1)for(var i=0;i1)for(var i=0;i0?t?this[0].nextElementSibling&&a(this[0].nextElementSibling).is(t)?[this[0].nextElementSibling]:[]:this[0].nextElementSibling?[this[0].nextElementSibling]:[]:[])},nextAll:function(t){var r=[],i=this[0];if(!i)return new e([]);for(;i.nextElementSibling;){var s=i.nextElementSibling;t?a(s).is(t)&&r.push(s):r.push(s),i=s}return new e(r)},prev:function(t){return new e(this.length>0?t?this[0].previousElementSibling&&a(this[0].previousElementSibling).is(t)?[this[0].previousElementSibling]:[]:this[0].previousElementSibling?[this[0].previousElementSibling]:[]:[])},prevAll:function(t){var r=[],i=this[0];if(!i)return new e([]);for(;i.previousElementSibling;){var s=i.previousElementSibling;t?a(s).is(t)&&r.push(s):r.push(s),i=s}return new e(r)},parent:function(e){for(var t=[],r=0;r