diff --git a/dashboard-ui/bower_components/Swiper/.bower.json b/dashboard-ui/bower_components/Swiper/.bower.json
new file mode 100644
index 0000000000..9b0a6f040d
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/.bower.json
@@ -0,0 +1,58 @@
+{
+ "name": "Swiper",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/nolimits4web/Swiper.git"
+ },
+ "description": "Most modern mobile touch slider and framework with hardware accelerated transitions",
+ "version": "3.3.0",
+ "author": "Vladimir Kharlampidi",
+ "homepage": "http://www.idangero.us/swiper/",
+ "keywords": [
+ "swiper",
+ "swipe",
+ "slider",
+ "touch",
+ "ios",
+ "mobile",
+ "cordova",
+ "phonegap",
+ "app",
+ "framework",
+ "carousel",
+ "gallery"
+ ],
+ "dependencies": {},
+ "scripts": [
+ "dist/js/swiper.js"
+ ],
+ "main": [
+ "dist/js/swiper.js",
+ "dist/css/swiper.css"
+ ],
+ "styles": [
+ "dist/css/swiper.css"
+ ],
+ "license": [
+ "MIT"
+ ],
+ "ignore": [
+ ".*",
+ "demos",
+ "gulpfile",
+ "build",
+ "node_modules",
+ "playground",
+ "package.json"
+ ],
+ "_release": "3.3.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v3.3.0",
+ "commit": "d1b5b19c872068ebb14bfb854af838c30285cecd"
+ },
+ "_source": "git://github.com/nolimits4web/Swiper.git",
+ "_target": "~3.3.0",
+ "_originalSource": "swiper",
+ "_direct": true
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/CHANGELOG.md b/dashboard-ui/bower_components/Swiper/CHANGELOG.md
new file mode 100644
index 0000000000..f022142a34
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/CHANGELOG.md
@@ -0,0 +1,227 @@
+# Change Log
+
+## Swiper 3.3.0 - Released on January 10, 2016
+ * New 3D Flip effect. Can be enabled with `effect: 'flip' parameter
+ * New types of pagination with new parameters:
+ * `paginationType` - type of pagination. Can be `'bullets'` (default) or `'fraction'` or `'progress'` or `'custom'`
+ * `paginationFractionRender(swiper, currentClass, totalClass)` - custom function to render "fraction" type pagination
+ * `paginationProgressRender(swiper, progressbarClass)` - custom function to render "progress" type pagination
+ * `paginationCustomRender(swiper, current, total)` - custom function to render "custom" type pagination
+ * New `lazyLoadingInPrevNextAmount` parameter allows to lazy load images in specified amount of next/prev slides
+ * New `autoplayStopOnLast` parameter (`true` by default) tells to autoplay should it stop on last slide or start from first slide
+ * New `onAutoplay(swiper)` callback
+ * Minor fixes
+
+## Swiper 3.2.7 - Released on December 7, 2015
+ * Fixed issue with using HTMLElements for next/prevButton parameters with breakpoints
+ * Fixed issue with not working Auto Height when using Controller
+
+## Swiper 3.2.6 - Released on November 28, 2015
+ * Fixed issue in RTL layout using `mousewheelControl`
+ * Fixed issue in RTL layout using Parallax
+
+## Swiper 3.2.5 - Released on November 21, 2015
+ * New "Auto Height" mode when container/wrapper adopts to the height of currently active slide. Can be enabled with `autoHeight: true` parameter
+ * Fixed issue with break points in FireFox
+ * Fixed issue with wrong slides position when using effects
+ * Fixed issue with none-updated scroll bar after using `setWrapperTranslate`
+ * Minor fixes
+
+## Swiper 3.2.0 - Released on November 7, 2015
+ * Added responsive breakpoints support using new `breakpoints` parameter. Now you can specify different `slidesPerView` and other similar parameters for different sizes:
+ ```js
+ slidesPerView: 5,
+ spaceBetween: 50,
+ breakpoints: {
+ 1024: {
+ slidesPerView: 4,
+ spaceBetween: 40
+ },
+ 768: {
+ slidesPerView: 3,
+ spaceBetween: 30
+ },
+ 320: {
+ slidesPerView: 1,
+ spaceBetween: 10
+ }
+ }
+ ```
+
+ * New callbacks: `onSlideNextStart`, `onSlideNextEnd`, `onSlidePrevStart`, `onSlidePrevEnd`
+ * Added Meteor package `meteor add nolimits4web:swiper`
+ * Fixed issue with mouse touchMove/End callbacks firing all the time
+ * Fixed issue with mousewheel in Chrome
+ * Minor fixes
+
+## Swiper 3.1.7 - Released on October 10, 2015
+ * Fixed issue with lazy loading trying to download `undefined`-src images
+ * Fixed lazy loading on slides using jQuery version
+ * Fixed issue with `slideToClickedSlide` with `loop` and `centeredSlides`
+ * Fixed issue with wrong slides fill when number of slides less than `slidesPerView * slidesPerColumn` with `slidesPerColumnFill: 'row'`
+ * Minor fixes
+
+## Swiper 3.1.5 - Released on September 28, 2015
+ * Added support for images `srcset` with lazy loading using `data-srcset` attribute
+ * Fixed new Chrome errors with `WebkitCSSMatrix`
+ * Fixed issue with `slideToClickedSlide` with `loop` and `centeredSlides`
+ * New `freeModeMinimumVelocity` parameter to set minimum required touch velocity to trigger free mode momentum
+ * Ability to make the Scrollbar draggable using new paramaters:
+ * `scrollbarDraggable` - (boolean) by default is `false`. Allows to enable draggable scrollbar
+ * `scrollbarSnapOnRelease` - (boolean) by default is `false`. Control slider snap on scrollbar release
+ * Minor fixes
+
+## Swiper 3.1.2 - Released on August 22, 2015
+ * Fixed issues with loop and mousewheel when swiper stopped on last slide
+ * Imporved mouse wheel behavior in latest Chrome
+ * Fixed issue with `slidesPerView: 'auto'` and enabled `loop:true` mode to set `loopedSlides` to the amount of slides by default (if not specified)
+ * New `mousewheelSensitivity: 1` parameter allows to tweak mouse wheel sensitivity
+ * Fixed issue with updating swiper when swiping is locked (with `allowSwipeToNext`/`allowSwipeToPrev`)
+ * Fixed issue with wrong calculating of "visible" slides with enabled `centeredSlides`
+ * CSS fixes for 3D effects
+ * New options to release Swiper events for swipe-to-go-back work in iOS UIWebView with two options:
+ * `iOSEdgeSwipeDetection` (by default is `false`) - enable ios edge detection and release Swiper events
+ * `iOSEdgeSwipeThreshold` (default value is `20`) - area in `px` from left edge of screen to release events
+ * Improved source maps
+ * Minor fixes
+
+## Swiper 3.1.0 - Released on July 14, 2015
+ * Accessibility (a11y)
+ * Fixed issue with wrong buttons labels
+ * Added support for pagination bullets
+ * New accessibility parameter for pagination label `paginationBulletMessage: 'Go to slide {{index}}'`
+ * Controler
+ * New parameter `controlBy` which can be 'slide' (by default) or 'container'. Defines a way how to control another slider: slide by slide or depending on all slides/container (like before)
+ * Now controllers in `controlBy: 'slide'` (default) mode will respect grid of each other
+ * Pagination
+ * New `paginationElement` parameter defines which HTML tag will be use to represent single pagination bullet. By default it is `span`
+ * New `roundLengths` parameter (by default is `false`) to round values of slides width and height to prevent blurry texts on usual resolution screens
+ * New `slidesOffsetBefore: 0` and `slidesOffsetAfter: 0` (in px) parameters to add additional slide offset within a container
+ * Correct calculation for slides size when use CSS padding on `.swiper-container`
+ * Fixed issue with not working onResize handler when swipes are locked
+ * Fixed issue with "jumping" effect when you disable `onlyExternal` during touchmove
+ * Fixed issue when slider goes to previos slide from last slide after window resize
+ * Added new `swiper.jquery.umd.js` version for the environment where both Swiper and jQuery included as modules
+ * Minor fixes
+
+## Swiper 3.0.8 - Released on June 14, 2015
+ * Fixed issue with wrong active index and callbacks in Fade effect
+ * New mousewheel parameters:
+ * `mousewheelReleaseOnEdges` - will release mousewheel event and allow page scrolling when swiper is on edge positions (in the beginning or in the end)
+ * `mousewheelInvert` - option to invert mousewheel slides
+ * Fixed issue with lazy loading in next slides when `slidesPerView` > 1
+ * Fixed issue with resistance bounds when swiping is locked
+ * Fixed issue with wrong slides order in multi-row mode (when `slidesPerColumn` > 1)
+ * Fixed issue with not working keyboard control in RTL mode
+ * Fixed issue with nested fade-effect swipers
+ * Minor fixes
+
+## Swiper 3.0.7 - Released on April 25, 2015
+ * New `width` and `height` parameters to force Swiper size, useful when it is hidden on intialization
+ * Better support for "Scroll Container". So now Swiper can be used as a scroll container with one single "scrollable"/"swipeable" slide
+ * Added lazy loading for background images with `data-background` attribute on required elements
+ * New "Sticky Free Mode" (with `freeModeSticky` parameter) which will snap to slides positions in free mode
+ * Fixed issues with lazy loading
+ * Fixed slide removing when loop mode is enabled
+ * Fixed issues with Autoplay and Fade effect
+ * Minor fixes
+
+## Swiper 3.0.6 - Released on March 27, 2015
+ * Fixed sometimes wrong slides position when using "Fade" effect
+ * `.destroy(deleteInstance, cleanupStyles)` method now has second `cleanupStyles` argument, when passed - all custom styles will be removed from slides, wrapper and container. Useful if you need to destroy Swiper and to init again with new options or in different direction
+ * Minor fixes
+
+## Swiper 3.0.5 - Released on March 21, 2015
+ * New Keyboard accessibility module to provide foucsable navigation buttons and basic ARIA for screen readers with new parameters:
+ * `a11y: false` - enable accessibility
+ * `prevSlideMessage: 'Previous slide'` - message for screen readers for previous button
+ * `nextSlideMessage: 'Next slide'` - message for screen readers for next button
+ * `firstSlideMessage: 'This is the first slide'` - message for screen readers for previous button when swiper is on first slide
+ * `lastSlideMessage: 'This is the last slide'` - message for screen readers for next button when swiper is on last slide
+ * New Emitter module. It allows to work with callbacks like with events, even adding them after initialization with new methods:
+ * `.on(event, handler)` - add event/callback
+ * `.off(event, handler)` - remove this event/callback
+ * `.once(event, handler)` - add event/callback that will be executed only once
+ * Plugins API is back. It allows to write custom Swiper plugins
+ * Better support for browser that don't support flexbox layout
+ * New parameter `setWrapperSize` (be default it is `false`) to provide better compatibility with browser without flexbox support. Enabled this option and plugin will set width/height on swiper wrapper equal to total size of all slides
+ * New `virtualTranslate` parameter. When it is enabled swiper will be operated as usual except it will not move. Useful when you may need to create custom slide transition
+ * Added support for multiple Pagination containers
+ * Fixed `onLazyImage...` callbacks
+ * Fixed issue with not accessible links inside of Slides on Android < 4.4
+ * Fixed pagination bullets behavior in loop mode with specified `slidesPerGroup`
+ * Fixed issues with clicks on IE 10+ touch devices
+ * Fixed issues with Coverflow support on IE 10+
+ * Hashnav now will update document hash after transition to prevent browsers UI lags, not in the beginning like before
+ * Super basic support for IE 9 with swiper.jquery version. No animation and transitions, but basic stuff like switching slides/pagination/scrollbars works
+
+
+## Swiper 3.0.4 - Released on March 6, 2015
+ * New Images Lazy Load component
+ * With new parameters `lazyLoading`, `lazyLoadingInPrevNext`, `lazyLoadingOnTransitionStart` (all disabled by default)
+ * With new callbacks `onLazyImageLoad` and `onLazyImageReady`
+ * `updateOnImages` ready split into 2 parameters:
+ * `preloadImages` (by default is true) - to preload all images on swiper init
+ * `updateOnImages` (by default is true) - update swiper when all images loaded
+ * Fixed issues with touchmove on fouces form elements
+ * New `onObserverUpdate` callback function to be called after updates by ovserver
+ * Fixed issue with not working inputs with keyboard control for jQuery version
+ * New `paginationBulletRender` parameter that accepts function which allow custom pagination elements layout
+ * Hash Navigation will run callback dpending on `runCallbacksOnInit` parameter
+ * `watchVisibility` parameter renamed to `watchSlidesVisibility`
+
+## Swiper 3.0.3 - Released on March 1, 2015
+ * Fixed issue with not firing onSlideChangeEnd callback after calling .slideTo with
+runCallbacks=false
+ * Fixed values of isBeginning/isEnd when there is only one slide
+ * New `crossFade` option for fade effect
+ * Improved support for devices with both touch and mouse inputs, not yet on IE
+ * Fixed not correctly working mousewheel and keyobard control in swiper.jquery version
+ * New parallax module for transitions with parallax effects on internal elements
+ * Improved .update and .onResize methods
+ * Minor fixes
+
+## Swiper 3.0.2 - Released on February 22, 2015
+ * Fixed issue with keyboard events not cleaned up with Swiper.destroy
+ * Encoded inline SVG images for IE support
+ * New callbacks
+ * onInit (swiper)
+ * onTouchMoveOpposite (swiper, e)
+ * Fixed free mode momentum in RTL layout
+ * `.update` method improved to fully cover what `onResize` do for full and correct update
+ * Exposed `swiper.touches` object with the following properties: `startX`, `startY`, `currentX`, `currentY`, `diff`
+ * New methods to remove slides
+ * `.removeSlide(index)` or `.removeSlide([indexes])` - to remove selected slides
+ * `.removeAllSlides()` - to remove all slides
+
+## Swiper 3.0.1 - Released on February 13, 2015
+ * Fixed issue with navigation buttons in Firefox in loop mode
+ * Fixed issue with image dragging in IE 10+
+
+## Swiper 3.0.0 - Released on February 11, 2015
+ * Initial release of all new Swiper 3
+ * Removed features
+ * Dropped support for old browsers. Now it is compatible with:
+ * iOS 7+
+ * Android 4+ (multirow mode only for Android 4.4+)
+ * Latest Chrome, Safari, Firefox and Opera desktop browsers
+ * WP 8+, IE 10+ (3D effects may not work correctly on IE because of wrong nested 3D transform support)
+ * Scroll Container. Removed in favor of pure CSS `overflow: auto` with `-webkit-overflow-scrolling: touch`
+ * New features
+ * Swiper now uses modern flexbox layout, which by itself give more features and advantages
+ * Such Swiper 2.x plugins as Hash Navigation, Smooth Progress, 3D Flow and Scrollbar are now incoroporated into Swiper 3.x core
+ * Full RTL support
+ * Built-in navigation buttons/arrows
+ * Controller. Now one Swiper could be controlled (or control itself) by another Swiper
+ * Multi row slides layout with `slidesPerColumn` option
+ * Better support for nested Swipers, now it is possible to use same-direction nested Swipers, like horizontal in horizontal
+ * Space between slides
+ * New transition effects: 3D Coverflow, 3D Cube and Fade transitions
+ * Slides are `border-box` now, so it is possible to use borders and paddings directly on slides
+ * Auto layout mode (`slidesPerView: 'auto'`) now gives more freedom, you can even specify slides sizes in % and use margins on them
+ * Mutation Observers. If enabled, Swiper will watch for changes in Dom and update its layout automatically
+ * Better clicks prevention during swiping
+ * Many of API methods, parameters and callbacks are changed
+ * Added a bit lightweight jQuery/Zepto version of Swiper that can be used if you use jQuery/Zepto in your project
+
+
diff --git a/dashboard-ui/bower_components/Swiper/LICENSE b/dashboard-ui/bower_components/Swiper/LICENSE
new file mode 100644
index 0000000000..1e18fd4120
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Vladimir Kharlampidi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/dashboard-ui/bower_components/Swiper/bower.json b/dashboard-ui/bower_components/Swiper/bower.json
new file mode 100644
index 0000000000..4d8ee8a23b
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/bower.json
@@ -0,0 +1,35 @@
+{
+ "name": "Swiper",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/nolimits4web/Swiper.git"
+ },
+ "description": "Most modern mobile touch slider and framework with hardware accelerated transitions",
+ "version": "3.3.0",
+ "author": "Vladimir Kharlampidi",
+ "homepage": "http://www.idangero.us/swiper/",
+ "keywords": ["swiper", "swipe", "slider", "touch", "ios", "mobile", "cordova", "phonegap", "app", "framework", "carousel", "gallery"],
+ "dependencies": {
+ },
+ "scripts": [
+ "dist/js/swiper.js"
+ ],
+ "main": [
+ "dist/js/swiper.js",
+ "dist/css/swiper.css"
+ ],
+ "styles": [
+ "dist/css/swiper.css"
+ ],
+ "license": ["MIT"],
+ "dependencies": {},
+ "ignore": [
+ ".*",
+ "demos",
+ "gulpfile",
+ "build",
+ "node_modules",
+ "playground",
+ "package.json"
+ ]
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/component.json b/dashboard-ui/bower_components/Swiper/component.json
new file mode 100644
index 0000000000..56ced8b4ea
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/component.json
@@ -0,0 +1,17 @@
+{
+ "name": "swiper",
+ "repo": "https://github.com/nolimits4web/Swiper.git",
+ "description": "Most modern mobile touch slider and framework with hardware accelerated transitions",
+ "version": "3.3.0",
+ "keywords": ["swiper", "swipe", "slider", "touch", "ios", "mobile", "cordova", "phonegap", "app", "framework", "carousel", "gallery"],
+ "dependencies": {
+ },
+ "scripts": [
+ "dist/js/swiper.js"
+ ],
+ "main": "dist/js/swiper.js",
+ "styles": [
+ "dist/css/swiper.css"
+ ],
+ "license": ["MIT"]
+}
diff --git a/dashboard-ui/bower_components/Swiper/dist/css/swiper.css b/dashboard-ui/bower_components/Swiper/dist/css/swiper.css
new file mode 100644
index 0000000000..d4e4e0e61f
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/dist/css/swiper.css
@@ -0,0 +1,547 @@
+/**
+ * Swiper 3.3.0
+ * 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: January 10, 2016
+ */
+.swiper-container {
+ margin: 0 auto;
+ position: relative;
+ overflow: hidden;
+ /* Fix of Webkit flickering */
+ 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(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/dashboard-ui/bower_components/Swiper/dist/css/swiper.min.css b/dashboard-ui/bower_components/Swiper/dist/css/swiper.min.css
new file mode 100644
index 0000000000..7354722b33
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/dist/css/swiper.min.css
@@ -0,0 +1,15 @@
+/**
+ * Swiper 3.3.0
+ * 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: January 10, 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/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.jquery.min.js.map b/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.jquery.min.js.map
new file mode 100644
index 0000000000..80ec0f0741
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/dist/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","detail","mousewheelForceToAxis","abs","wheelDeltaX","wheelDeltaY","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","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","data","support","flexbox","transforms3d","touch","wrapper","children","paginationContainer","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","find","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","next","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","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","nextSlide","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","destroyLoop","removeAttr","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","prevSlide","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.0\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: January 10, 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 // 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 for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\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 s.container.each(function () {\n new Swiper(this, params);\n });\n return;\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.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 \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 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])) {\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 activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\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 }\n }\n \n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton) {\n if (s.isBeginning) {\n $(s.params.prevButton).addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.prevButton));\n }\n else {\n $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.prevButton));\n }\n }\n if (s.params.nextButton) {\n if (s.isEnd) {\n $(s.params.nextButton).addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.nextButton));\n }\n else {\n $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.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 + '\">' + s.params.paginationElement + '>';\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 }\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 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 s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n s.slideTo(s.activeIndex, 0, false, true);\n }\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) {\n $(s.params.nextButton)[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) $(s.params.nextButton)[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton) {\n $(s.params.prevButton)[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) $(s.params.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 (detach) {\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) return;\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.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 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 \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 //Opera & IE\n if (e.detail) delta = -e.detail;\n //WebKits\n else 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) {\n var nextButton = $(s.params.nextButton);\n s.a11y.makeFocusable(nextButton);\n s.a11y.addRole(nextButton, 'button');\n s.a11y.addLabel(nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton) {\n var prevButton = $(s.params.prevButton);\n s.a11y.makeFocusable(prevButton);\n s.a11y.addRole(prevButton, 'button');\n s.a11y.addLabel(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}"],"sourceRoot":"/source/"}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.jquery.umd.min.js.map b/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.jquery.umd.min.js.map
new file mode 100644
index 0000000000..afda29ede2
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/dist/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","detail","mousewheelForceToAxis","abs","wheelDeltaX","wheelDeltaY","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","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","data","support","flexbox","transforms3d","touch","wrapper","children","paginationContainer","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","find","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","next","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","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","nextSlide","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","destroyLoop","removeAttr","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","prevSlide","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.0\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: January 10, 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 // 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 for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\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 s.container.each(function () {\n new Swiper(this, params);\n });\n return;\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.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 \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 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])) {\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 activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\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 }\n }\n \n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton) {\n if (s.isBeginning) {\n $(s.params.prevButton).addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.prevButton));\n }\n else {\n $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.prevButton));\n }\n }\n if (s.params.nextButton) {\n if (s.isEnd) {\n $(s.params.nextButton).addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.nextButton));\n }\n else {\n $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.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 + '\">' + s.params.paginationElement + '>';\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 }\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 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 s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n s.slideTo(s.activeIndex, 0, false, true);\n }\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) {\n $(s.params.nextButton)[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) $(s.params.nextButton)[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton) {\n $(s.params.prevButton)[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) $(s.params.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 (detach) {\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) return;\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.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 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 \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 //Opera & IE\n if (e.detail) delta = -e.detail;\n //WebKits\n else 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) {\n var nextButton = $(s.params.nextButton);\n s.a11y.makeFocusable(nextButton);\n s.a11y.addRole(nextButton, 'button');\n s.a11y.addLabel(nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton) {\n var prevButton = $(s.params.prevButton);\n s.a11y.makeFocusable(prevButton);\n s.a11y.addRole(prevButton, 'button');\n s.a11y.addLabel(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}));"],"sourceRoot":"/source/"}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.min.js.map b/dashboard-ui/bower_components/Swiper/dist/js/maps/swiper.min.js.map
new file mode 100644
index 0000000000..414dc6e76c
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/dist/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","detail","mousewheelForceToAxis","abs","wheelDeltaX","wheelDeltaY","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","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","data","support","flexbox","transforms3d","touch","wrapper","children","paginationContainer","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","find","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","next","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","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","nextSlide","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","destroyLoop","removeAttr","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","prevSlide","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.0\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: January 10, 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 // 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 for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\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 s.container.each(function () {\n new Swiper(this, params);\n });\n return;\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.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 \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 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])) {\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 activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\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 }\n }\n \n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton) {\n if (s.isBeginning) {\n $(s.params.prevButton).addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.prevButton));\n }\n else {\n $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.prevButton));\n }\n }\n if (s.params.nextButton) {\n if (s.isEnd) {\n $(s.params.nextButton).addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.nextButton));\n }\n else {\n $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.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 + '\">' + s.params.paginationElement + '>';\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 }\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 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 s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n s.slideTo(s.activeIndex, 0, false, true);\n }\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) {\n $(s.params.nextButton)[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) $(s.params.nextButton)[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton) {\n $(s.params.prevButton)[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) $(s.params.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 (detach) {\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) return;\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.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 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 \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 //Opera & IE\n if (e.detail) delta = -e.detail;\n //WebKits\n else 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) {\n var nextButton = $(s.params.nextButton);\n s.a11y.makeFocusable(nextButton);\n s.a11y.addRole(nextButton, 'button');\n s.a11y.addLabel(nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton) {\n var prevButton = $(s.params.prevButton);\n s.a11y.makeFocusable(prevButton);\n s.a11y.addRole(prevButton, 'button');\n s.a11y.addLabel(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}"],"sourceRoot":"/source/"}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.js b/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.js
new file mode 100644
index 0000000000..49d252db53
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.js
@@ -0,0 +1,3713 @@
+/**
+ * Swiper 3.3.0
+ * 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: January 10, 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,
+ // 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;
+ for ( var param in breakPointsParams ) {
+ s.params[param] = breakPointsParams[param];
+ }
+ s.currentBreakpoint = breakpoint;
+ }
+ };
+ // 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) {
+ s.container.each(function () {
+ new Swiper(this, params);
+ });
+ return;
+ }
+
+ // 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.paginationType === 'bullets' && s.params.paginationClickable) {
+ s.paginationContainer.addClass('swiper-pagination-clickable');
+ }
+ else {
+ s.params.paginationClickable = false;
+ }
+ s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType);
+ }
+
+ // 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 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])) {
+ 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);
+ activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);
+ activeSlide.prev('.' + s.params.slideClass).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));
+ }
+ }
+
+ // Next/active buttons
+ if (!s.params.loop) {
+ if (s.params.prevButton) {
+ if (s.isBeginning) {
+ $(s.params.prevButton).addClass(s.params.buttonDisabledClass);
+ if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.prevButton));
+ }
+ else {
+ $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);
+ if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.prevButton));
+ }
+ }
+ if (s.params.nextButton) {
+ if (s.isEnd) {
+ $(s.params.nextButton).addClass(s.params.buttonDisabledClass);
+ if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.nextButton));
+ }
+ else {
+ $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);
+ if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.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.params.paginationElement + '>';
+ }
+ }
+ 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);
+ }
+ }
+ };
+ /*=========================
+ 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;
+ }
+ 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) {
+ s.slideTo(s.slides.length - 1, 0, false, true);
+ }
+ else {
+ s.slideTo(s.activeIndex, 0, false, true);
+ }
+ }
+ // 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.params.nextButton)[actionDom]('click', s.onClickNext);
+ if (s.params.a11y && s.a11y) $(s.params.nextButton)[actionDom]('keydown', s.a11y.onEnterKey);
+ }
+ if (s.params.prevButton) {
+ $(s.params.prevButton)[actionDom]('click', s.onClickPrev);
+ if (s.params.a11y && s.a11y) $(s.params.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 (detach) {
+ 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) 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.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);
+ 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 (!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;
+ //Opera & IE
+ if (e.detail) delta = -e.detail;
+ //WebKits
+ else 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) {
+ var nextButton = $(s.params.nextButton);
+ s.a11y.makeFocusable(nextButton);
+ s.a11y.addRole(nextButton, 'button');
+ s.a11y.addLabel(nextButton, s.params.nextSlideMessage);
+ }
+ if (s.params.prevButton) {
+ var prevButton = $(s.params.prevButton);
+ s.a11y.makeFocusable(prevButton);
+ s.a11y.addRole(prevButton, 'button');
+ s.a11y.addLabel(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;
+ });
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.min.js b/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.min.js
new file mode 100644
index 0000000000..b2a64858fd
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.min.js
@@ -0,0 +1,18 @@
+/**
+ * Swiper 3.3.0
+ * 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: January 10, 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(e.detail)t=-e.detail;else 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,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 h in s)if("object"!=typeof s[h]||null===s[h]||(s[h].nodeType||s[h]===window||s[h]===document||"undefined"!=typeof Dom7&&s[h]instanceof Dom7||"undefined"!=typeof jQuery&&s[h]instanceof jQuery))f[h]=s[h];else{f[h]={};for(var g in s[h])f[h][g]=s[h][g]}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;for(var t in a)y.params[t]=a[t];y.currentBreakpoint=e}},y.params.breakpoints&&y.setBreakpoint(),y.container=a(e),0!==y.container.length)){if(y.container.length>1)return void y.container.each(function(){new t(this,s)});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),"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.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 h;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(h=[],e=0;eMath.floor(y.snapGrid[y.snapGrid.length-1])&&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);if(e.addClass(y.params.slideActiveClass),e.next("."+y.params.slideClass).addClass(y.params.slideNextClass),e.prev("."+y.params.slideClass).addClass(y.params.slidePrevClass),y.paginationContainer&&y.paginationContainer.length>0){var t,s=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length;if(y.params.loop?(t=Math.ceil(y.activeIndex-y.loopedSlides)/y.params.slidesPerGroup,t>y.slides.length-1-2*y.loopedSlides&&(t-=y.slides.length-2*y.loopedSlides),t>s-1&&(t-=s),0>t&&"bullets"!==y.params.paginationType&&(t=s+t)):t="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()===t&&a(this).addClass(y.params.bulletActiveClass)}):y.bullets.eq(t).addClass(y.params.bulletActiveClass)),"fraction"===y.params.paginationType&&(y.paginationContainer.find("."+y.params.paginationCurrentClass).text(t+1),y.paginationContainer.find("."+y.params.paginationTotalClass).text(s)),"progress"===y.params.paginationType){var r=(t+1)/s,i=r,n=1;y.isHorizontal()||(n=r,i=1),y.paginationContainer.find("."+y.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+i+") scaleY("+n+")").transition(y.params.speed)}"custom"===y.params.paginationType&&y.params.paginationCustomRender&&y.paginationContainer.html(y.params.paginationCustomRender(y,t+1,s))}y.params.loop||(y.params.prevButton&&(y.isBeginning?(a(y.params.prevButton).addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(a(y.params.prevButton))):(a(y.params.prevButton).removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(a(y.params.prevButton)))),y.params.nextButton&&(y.isEnd?(a(y.params.nextButton).addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(a(y.params.nextButton))):(a(y.params.nextButton).removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(a(y.params.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.params.paginationElement+">";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))}},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;if(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),y.params.freeMode){var s=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate());y.setWrapperTranslate(s),y.updateActiveIndex(),y.updateClasses(),y.params.autoHeight&&y.updateAutoHeight()}else y.updateClasses(),("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.allowSwipeToPrev=a,y.params.allowSwipeToNext=t};var b=["mousedown","mousemove","mouseup"];window.navigator.pointerEnabled?b=["pointerdown","pointermove","pointerup"]:window.navigator.msPointerEnabled&&(b=["MSPointerDown","MSPointerMove","MSPointerUp"]),y.touchEvents={start:y.support.touch||!y.params.simulateTouch?"touchstart":b[0],move:y.support.touch||!y.params.simulateTouch?"touchmove":b[1],end:y.support.touch||!y.params.simulateTouch?"touchend":b[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 t=e?"off":"on",r=e?"removeEventListener":"addEventListener",i="container"===y.params.touchEventsTarget?y.container[0]:y.wrapper[0],n=y.support.touch?i:document,o=y.params.nested?!0:!1;y.browser.ie?(i[r](y.touchEvents.start,y.onTouchStart,!1),n[r](y.touchEvents.move,y.onTouchMove,o),n[r](y.touchEvents.end,y.onTouchEnd,!1)):(y.support.touch&&(i[r](y.touchEvents.start,y.onTouchStart,!1),i[r](y.touchEvents.move,y.onTouchMove,o),i[r](y.touchEvents.end,y.onTouchEnd,!1)),!s.simulateTouch||y.device.ios||y.device.android||(i[r]("mousedown",y.onTouchStart,!1),document[r]("mousemove",y.onTouchMove,o),document[r]("mouseup",y.onTouchEnd,!1))),window[r]("resize",y.onResize),y.params.nextButton&&(a(y.params.nextButton)[t]("click",y.onClickNext),y.params.a11y&&y.a11y&&a(y.params.nextButton)[t]("keydown",y.a11y.onEnterKey)),y.params.prevButton&&(a(y.params.prevButton)[t]("click",y.onClickPrev),y.params.a11y&&y.a11y&&a(y.params.prevButton)[t]("keydown",y.a11y.onEnterKey)),y.params.pagination&&y.params.paginationClickable&&(a(y.paginationContainer)[t]("click","."+y.params.bulletClass,y.onClickIndex),y.params.a11y&&y.a11y&&a(y.paginationContainer)[t]("keydown","."+y.params.bulletClass,y.a11y.onEnterKey)),(y.params.preventClicks||y.params.preventClicksPropagation)&&i[r]("click",y.preventClicks,!0)},y.attachEvents=function(e){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,x,S,C,z,M,P,I,k,E,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,B;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,x=!1,S=!0,z=void 0,B=void 0,y.touches.startX=t,y.touches.startY=s,C=Date.now(),y.allowClick=!0,y.updateContainerSize(),y.swipeDirection=void 0,y.params.threshold>0&&(I=!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||e.preventedByNestedSwiper)){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,C=Date.now()));if(G&&document.activeElement&&e.target===document.activeElement&&a(e.target).is(D))return x=!0,void(y.allowClick=!1);if(S&&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 z){var t=180*Math.atan2(Math.abs(y.touches.currentY-y.touches.startY),Math.abs(y.touches.currentX-y.touches.startX))/Math.PI;z=y.isHorizontal()?t>y.params.touchAngle:90-t>y.params.touchAngle}if(z&&y.emit("onTouchMoveOpposite",y,e),"undefined"==typeof B&&y.browser.ieTouch&&(y.touches.currentX!==y.touches.startX||y.touches.currentY!==y.touches.startY)&&(B=!0),T){if(z)return void(T=!1);if(B||!y.browser.ieTouch){y.allowClick=!1,y.emit("onSliderMove",y,e),e.preventDefault(),y.params.touchMoveStopPropagation&&!y.params.nested&&e.stopPropagation(),x||(s.loop&&y.fixLoop(),P=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()),E=!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")),x=!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",M=r+P;var i=!0;if(r>0&&M>y.minTranslate()?(i=!1,y.params.resistance&&(M=y.minTranslate()-1+Math.pow(-y.minTranslate()+P+r,y.params.resistanceRatio))):0>r&&MM&&(M=P),!y.params.allowSwipeToPrev&&"prev"===y.swipeDirection&&M>P&&(M=P),y.params.followFinger){if(y.params.threshold>0){if(!(Math.abs(r)>y.params.threshold||I))return void(M=P);if(!I)return I=!0,y.touches.startX=y.touches.currentX,y.touches.startY=y.touches.currentY,M=P,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:C}),H.push({position:y.touches[y.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),y.updateProgress(M),y.setWrapperTranslate(M)}}}}}},y.onTouchEnd=function(e){if(e.originalEvent&&(e=e.originalEvent),S&&y.emit("onTouchEnd",y,e),S=!1,T){y.params.grabCursor&&x&&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-C;if(y.allowClick&&(y.updateClickedSlide(e),y.emit("onTap",y,e),300>s&&t-L>300&&(k&&clearTimeout(k),k=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&&(k&&clearTimeout(k),y.emit("onDoubleTap",y,e))),L=Date.now(),setTimeout(function(){y&&(y.allowClick=!0)},0),!T||!x||!y.swipeDirection||0===y.touches.diff||M===P)return void(T=x=!1);T=x=!1;var r;if(r=y.params.followFinger?y.rtl?y.translate:-y.translate:-M,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,E=!0):u=y.minTranslate();else if(y.params.freeModeSticky){var h,g=0;for(g=0;g-u){h=g;break}u=Math.abs(y.snapGrid[h]-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 z=(r-y.slidesGrid[w])/b;if(s>y.params.longSwipesMs){if(!y.params.longSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&(z>=y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w)),"prev"===y.swipeDirection&&(z>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.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),h=1.5-(Math.sin(2*f*Math.PI/360)/2+Math.cos(2*f*Math.PI/360)/2),g=y.params.cube.shadowScale,v=y.params.cube.shadowScale/h,w=y.params.cube.shadowOffset;e.transform("scale3d("+g+", 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,h=y.isHorizontal()?y.params.coverflow.stretch*d:0;Math.abs(h)<.001&&(h=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 g="translate3d("+h+"px,"+f+"px,"+m+"px) rotateX("+c+"deg) rotateY("+u+"deg)";if(o.transform(g),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),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(A){}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 O in y.plugins){var R=y.plugins[O](y,y.params[O]);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(){if(y.params.nextButton){var e=a(y.params.nextButton);y.a11y.makeFocusable(e),y.a11y.addRole(e,"button"),y.a11y.addLabel(e,y.params.nextSlideMessage)}if(y.params.prevButton){var t=a(y.params.prevButton);y.a11y.makeFocusable(t),y.a11y.addRole(t,"button"),y.a11y.addLabel(t,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;
+ for ( var param in breakPointsParams ) {
+ s.params[param] = breakPointsParams[param];
+ }
+ s.currentBreakpoint = breakpoint;
+ }
+ };
+ // 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) {
+ s.container.each(function () {
+ new Swiper(this, params);
+ });
+ return;
+ }
+
+ // 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.paginationType === 'bullets' && s.params.paginationClickable) {
+ s.paginationContainer.addClass('swiper-pagination-clickable');
+ }
+ else {
+ s.params.paginationClickable = false;
+ }
+ s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType);
+ }
+
+ // 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 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])) {
+ 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);
+ activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);
+ activeSlide.prev('.' + s.params.slideClass).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));
+ }
+ }
+
+ // Next/active buttons
+ if (!s.params.loop) {
+ if (s.params.prevButton) {
+ if (s.isBeginning) {
+ $(s.params.prevButton).addClass(s.params.buttonDisabledClass);
+ if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.prevButton));
+ }
+ else {
+ $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);
+ if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.prevButton));
+ }
+ }
+ if (s.params.nextButton) {
+ if (s.isEnd) {
+ $(s.params.nextButton).addClass(s.params.buttonDisabledClass);
+ if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.nextButton));
+ }
+ else {
+ $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);
+ if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.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.params.paginationElement + '>';
+ }
+ }
+ 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);
+ }
+ }
+ };
+ /*=========================
+ 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;
+ }
+ 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) {
+ s.slideTo(s.slides.length - 1, 0, false, true);
+ }
+ else {
+ s.slideTo(s.activeIndex, 0, false, true);
+ }
+ }
+ // 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.params.nextButton)[actionDom]('click', s.onClickNext);
+ if (s.params.a11y && s.a11y) $(s.params.nextButton)[actionDom]('keydown', s.a11y.onEnterKey);
+ }
+ if (s.params.prevButton) {
+ $(s.params.prevButton)[actionDom]('click', s.onClickPrev);
+ if (s.params.a11y && s.a11y) $(s.params.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 (detach) {
+ 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) 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.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);
+ 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 (!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;
+ //Opera & IE
+ if (e.detail) delta = -e.detail;
+ //WebKits
+ else 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) {
+ var nextButton = $(s.params.nextButton);
+ s.a11y.makeFocusable(nextButton);
+ s.a11y.addRole(nextButton, 'button');
+ s.a11y.addLabel(nextButton, s.params.nextSlideMessage);
+ }
+ if (s.params.prevButton) {
+ var prevButton = $(s.params.prevButton);
+ s.a11y.makeFocusable(prevButton);
+ s.a11y.addRole(prevButton, 'button');
+ s.a11y.addLabel(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;
+}));
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.umd.min.js b/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.umd.min.js
new file mode 100644
index 0000000000..f436ece627
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/dist/js/swiper.jquery.umd.min.js
@@ -0,0 +1,18 @@
+/**
+ * Swiper 3.3.0
+ * 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: January 10, 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(e.detail)t=-e.detail;else 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,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 h in s)if("object"!=typeof s[h]||null===s[h]||(s[h].nodeType||s[h]===window||s[h]===document||"undefined"!=typeof Dom7&&s[h]instanceof Dom7||"undefined"!=typeof jQuery&&s[h]instanceof jQuery))f[h]=s[h];else{f[h]={};for(var g in s[h])f[h][g]=s[h][g]}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;for(var t in a)y.params[t]=a[t];y.currentBreakpoint=e}},y.params.breakpoints&&y.setBreakpoint(),y.container=e(a),0!==y.container.length)){if(y.container.length>1)return void y.container.each(function(){new t(this,s)});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),"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.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 h;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(h=[],e=0;eMath.floor(y.snapGrid[y.snapGrid.length-1])&&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);if(a.addClass(y.params.slideActiveClass),a.next("."+y.params.slideClass).addClass(y.params.slideNextClass),a.prev("."+y.params.slideClass).addClass(y.params.slidePrevClass),y.paginationContainer&&y.paginationContainer.length>0){var t,s=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length;if(y.params.loop?(t=Math.ceil(y.activeIndex-y.loopedSlides)/y.params.slidesPerGroup,t>y.slides.length-1-2*y.loopedSlides&&(t-=y.slides.length-2*y.loopedSlides),t>s-1&&(t-=s),0>t&&"bullets"!==y.params.paginationType&&(t=s+t)):t="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()===t&&e(this).addClass(y.params.bulletActiveClass)}):y.bullets.eq(t).addClass(y.params.bulletActiveClass)),"fraction"===y.params.paginationType&&(y.paginationContainer.find("."+y.params.paginationCurrentClass).text(t+1),y.paginationContainer.find("."+y.params.paginationTotalClass).text(s)),"progress"===y.params.paginationType){var r=(t+1)/s,i=r,n=1;y.isHorizontal()||(n=r,i=1),y.paginationContainer.find("."+y.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+i+") scaleY("+n+")").transition(y.params.speed)}"custom"===y.params.paginationType&&y.params.paginationCustomRender&&y.paginationContainer.html(y.params.paginationCustomRender(y,t+1,s))}y.params.loop||(y.params.prevButton&&(y.isBeginning?(e(y.params.prevButton).addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(e(y.params.prevButton))):(e(y.params.prevButton).removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(e(y.params.prevButton)))),y.params.nextButton&&(y.isEnd?(e(y.params.nextButton).addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(e(y.params.nextButton))):(e(y.params.nextButton).removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(e(y.params.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.params.paginationElement+">";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))}},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;if(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),y.params.freeMode){var s=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate());y.setWrapperTranslate(s),y.updateActiveIndex(),y.updateClasses(),y.params.autoHeight&&y.updateAutoHeight()}else y.updateClasses(),("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.allowSwipeToPrev=a,y.params.allowSwipeToNext=t};var b=["mousedown","mousemove","mouseup"];window.navigator.pointerEnabled?b=["pointerdown","pointermove","pointerup"]:window.navigator.msPointerEnabled&&(b=["MSPointerDown","MSPointerMove","MSPointerUp"]),y.touchEvents={start:y.support.touch||!y.params.simulateTouch?"touchstart":b[0],move:y.support.touch||!y.params.simulateTouch?"touchmove":b[1],end:y.support.touch||!y.params.simulateTouch?"touchend":b[2]},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===y.params.touchEventsTarget?y.container:y.wrapper).addClass("swiper-wp8-"+y.params.direction),y.initEvents=function(a){var t=a?"off":"on",r=a?"removeEventListener":"addEventListener",i="container"===y.params.touchEventsTarget?y.container[0]:y.wrapper[0],n=y.support.touch?i:document,o=y.params.nested?!0:!1;y.browser.ie?(i[r](y.touchEvents.start,y.onTouchStart,!1),n[r](y.touchEvents.move,y.onTouchMove,o),n[r](y.touchEvents.end,y.onTouchEnd,!1)):(y.support.touch&&(i[r](y.touchEvents.start,y.onTouchStart,!1),i[r](y.touchEvents.move,y.onTouchMove,o),i[r](y.touchEvents.end,y.onTouchEnd,!1)),!s.simulateTouch||y.device.ios||y.device.android||(i[r]("mousedown",y.onTouchStart,!1),document[r]("mousemove",y.onTouchMove,o),document[r]("mouseup",y.onTouchEnd,!1))),window[r]("resize",y.onResize),y.params.nextButton&&(e(y.params.nextButton)[t]("click",y.onClickNext),y.params.a11y&&y.a11y&&e(y.params.nextButton)[t]("keydown",y.a11y.onEnterKey)),y.params.prevButton&&(e(y.params.prevButton)[t]("click",y.onClickPrev),y.params.a11y&&y.a11y&&e(y.params.prevButton)[t]("keydown",y.a11y.onEnterKey)),y.params.pagination&&y.params.paginationClickable&&(e(y.paginationContainer)[t]("click","."+y.params.bulletClass,y.onClickIndex),y.params.a11y&&y.a11y&&e(y.paginationContainer)[t]("keydown","."+y.params.bulletClass,y.a11y.onEnterKey)),(y.params.preventClicks||y.params.preventClicksPropagation)&&i[r]("click",y.preventClicks,!0)},y.attachEvents=function(e){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 x,T,S,C,z,M,P,I,k,E,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,B;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(x=!0,T=!1,S=!0,z=void 0,B=void 0,y.touches.startX=t,y.touches.startY=s,C=Date.now(),y.allowClick=!0,y.updateContainerSize(),y.swipeDirection=void 0,y.params.threshold>0&&(I=!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||a.preventedByNestedSwiper)){if(y.params.onlyExternal)return y.allowClick=!1,void(x&&(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,C=Date.now()));if(G&&document.activeElement&&a.target===document.activeElement&&e(a.target).is(D))return T=!0,void(y.allowClick=!1);if(S&&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 z){var t=180*Math.atan2(Math.abs(y.touches.currentY-y.touches.startY),Math.abs(y.touches.currentX-y.touches.startX))/Math.PI;z=y.isHorizontal()?t>y.params.touchAngle:90-t>y.params.touchAngle}if(z&&y.emit("onTouchMoveOpposite",y,a),"undefined"==typeof B&&y.browser.ieTouch&&(y.touches.currentX!==y.touches.startX||y.touches.currentY!==y.touches.startY)&&(B=!0),x){if(z)return void(x=!1);if(B||!y.browser.ieTouch){y.allowClick=!1,y.emit("onSliderMove",y,a),a.preventDefault(),y.params.touchMoveStopPropagation&&!y.params.nested&&a.stopPropagation(),T||(s.loop&&y.fixLoop(),P=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()),E=!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")),T=!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",M=r+P;var i=!0;if(r>0&&M>y.minTranslate()?(i=!1,y.params.resistance&&(M=y.minTranslate()-1+Math.pow(-y.minTranslate()+P+r,y.params.resistanceRatio))):0>r&&MM&&(M=P),!y.params.allowSwipeToPrev&&"prev"===y.swipeDirection&&M>P&&(M=P),y.params.followFinger){if(y.params.threshold>0){if(!(Math.abs(r)>y.params.threshold||I))return void(M=P);if(!I)return I=!0,y.touches.startX=y.touches.currentX,y.touches.startY=y.touches.currentY,M=P,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:C}),H.push({position:y.touches[y.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),y.updateProgress(M),y.setWrapperTranslate(M)}}}}}},y.onTouchEnd=function(a){if(a.originalEvent&&(a=a.originalEvent),S&&y.emit("onTouchEnd",y,a),S=!1,x){y.params.grabCursor&&T&&x&&(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-C;if(y.allowClick&&(y.updateClickedSlide(a),y.emit("onTap",y,a),300>s&&t-L>300&&(k&&clearTimeout(k),
+k=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&&(k&&clearTimeout(k),y.emit("onDoubleTap",y,a))),L=Date.now(),setTimeout(function(){y&&(y.allowClick=!0)},0),!x||!T||!y.swipeDirection||0===y.touches.diff||M===P)return void(x=T=!1);x=T=!1;var r;if(r=y.params.followFinger?y.rtl?y.translate:-y.translate:-M,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,E=!0):u=y.minTranslate();else if(y.params.freeModeSticky){var h,g=0;for(g=0;g-u){h=g;break}u=Math.abs(y.snapGrid[h]-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 z=(r-y.slidesGrid[w])/b;if(s>y.params.longSwipesMs){if(!y.params.longSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&(z>=y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w)),"prev"===y.swipeDirection&&(z>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.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),h=1.5-(Math.sin(2*f*Math.PI/360)/2+Math.cos(2*f*Math.PI/360)/2),g=y.params.cube.shadowScale,v=y.params.cube.shadowScale/h,w=y.params.cube.shadowOffset;a.transform("scale3d("+g+", 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,h=y.isHorizontal()?y.params.coverflow.stretch*d:0;Math.abs(h)<.001&&(h=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 g="translate3d("+h+"px,"+f+"px,"+m+"px) rotateX("+c+"deg) rotateY("+u+"deg)";if(o.transform(g),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),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(A){}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 O in y.plugins){var R=y.plugins[O](y,y.params[O]);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(){if(y.params.nextButton){var a=e(y.params.nextButton);y.a11y.makeFocusable(a),y.a11y.addRole(a,"button"),y.a11y.addLabel(a,y.params.nextSlideMessage)}if(y.params.prevButton){var t=e(y.params.prevButton);y.a11y.makeFocusable(t),y.a11y.addRole(t,"button"),y.a11y.addLabel(t,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;
+ for ( var param in breakPointsParams ) {
+ s.params[param] = breakPointsParams[param];
+ }
+ s.currentBreakpoint = breakpoint;
+ }
+ };
+ // 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) {
+ s.container.each(function () {
+ new Swiper(this, params);
+ });
+ return;
+ }
+
+ // 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.paginationType === 'bullets' && s.params.paginationClickable) {
+ s.paginationContainer.addClass('swiper-pagination-clickable');
+ }
+ else {
+ s.params.paginationClickable = false;
+ }
+ s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType);
+ }
+
+ // 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 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])) {
+ 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);
+ activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);
+ activeSlide.prev('.' + s.params.slideClass).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));
+ }
+ }
+
+ // Next/active buttons
+ if (!s.params.loop) {
+ if (s.params.prevButton) {
+ if (s.isBeginning) {
+ $(s.params.prevButton).addClass(s.params.buttonDisabledClass);
+ if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.prevButton));
+ }
+ else {
+ $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);
+ if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.prevButton));
+ }
+ }
+ if (s.params.nextButton) {
+ if (s.isEnd) {
+ $(s.params.nextButton).addClass(s.params.buttonDisabledClass);
+ if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.nextButton));
+ }
+ else {
+ $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);
+ if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.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.params.paginationElement + '>';
+ }
+ }
+ 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);
+ }
+ }
+ };
+ /*=========================
+ 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;
+ }
+ 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) {
+ s.slideTo(s.slides.length - 1, 0, false, true);
+ }
+ else {
+ s.slideTo(s.activeIndex, 0, false, true);
+ }
+ }
+ // 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.params.nextButton)[actionDom]('click', s.onClickNext);
+ if (s.params.a11y && s.a11y) $(s.params.nextButton)[actionDom]('keydown', s.a11y.onEnterKey);
+ }
+ if (s.params.prevButton) {
+ $(s.params.prevButton)[actionDom]('click', s.onClickPrev);
+ if (s.params.a11y && s.a11y) $(s.params.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 (detach) {
+ 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) 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.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);
+ 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 (!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;
+ //Opera & IE
+ if (e.detail) delta = -e.detail;
+ //WebKits
+ else 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) {
+ var nextButton = $(s.params.nextButton);
+ s.a11y.makeFocusable(nextButton);
+ s.a11y.addRole(nextButton, 'button');
+ s.a11y.addLabel(nextButton, s.params.nextSlideMessage);
+ }
+ if (s.params.prevButton) {
+ var prevButton = $(s.params.prevButton);
+ s.a11y.makeFocusable(prevButton);
+ s.a11y.addRole(prevButton, 'button');
+ s.a11y.addLabel(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;
+ });
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/dist/js/swiper.min.js b/dashboard-ui/bower_components/Swiper/dist/js/swiper.min.js
new file mode 100644
index 0000000000..a5c363b835
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/dist/js/swiper.min.js
@@ -0,0 +1,18 @@
+/**
+ * Swiper 3.3.0
+ * 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: January 10, 2016
+ */
+!function(){"use strict";function e(e){e.fn.swiper=function(a){var i;return e(this).each(function(){var e=new t(this,a);i||(i=e)}),i}}var a,t=function(e,r){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?r.autoplayStopOnLast?b.stopAutoplay():(b._slideTo(0),b.emit("onAutoplay",b)):(b._slideNext(),b.emit("onAutoplay",b))},b.params.autoplay)}function o(e,t){var i=a(e.target);if(!i.is(t))if("string"==typeof t)i=i.parents(t);else if(t.nodeType){var r;return i.parents().each(function(e,a){a===t&&(r=t)}),r?t:void 0}if(0!==i.length)return i[0]}function l(e,a){a=a||{};var t=window.MutationObserver||window.WebkitMutationObserver,i=new t(function(e){e.forEach(function(e){b.onResize(!0),b.emit("onObserverUpdate",b,e)})});i.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(i)}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 i={left:window.pageXOffset,top:window.pageYOffset},r=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=i.left&&p[0]<=i.left+r&&p[1]>=i.top&&p[1]<=i.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,i=b.rtl?-1:1;if(e.detail)t=-e.detail;else if("mousewheel"===a)if(b.params.mousewheelForceToAxis)if(b.isHorizontal()){if(!(Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)))return;t=e.wheelDeltaX*i}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*i:-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*i}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*i:-e.deltaY;if(0!==t){if(b.params.mousewheelInvert&&(t=-t),b.params.freeMode){var r=b.getWrapperTranslate()+t*b.params.mousewheelSensitivity,s=b.isBeginning,n=b.isEnd;if(r>=b.minTranslate()&&(r=b.minTranslate()),r<=b.maxTranslate()&&(r=b.maxTranslate()),b.setWrapperTransition(0),b.setWrapperTranslate(r),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===r||r===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 i,r,s,n=b.rtl?-1:1;i=e.attr("data-swiper-parallax")||"0",r=e.attr("data-swiper-parallax-x"),s=e.attr("data-swiper-parallax-y"),r||s?(r=r||"0",s=s||"0"):b.isHorizontal()?(r=i,s="0"):(s=i,r="0"),r=r.indexOf("%")>=0?parseInt(r,10)*t*n+"%":r*t*n+"px",s=s.indexOf("%")>=0?parseInt(s,10)*t+"%":s*t+"px",e.transform("translate3d("+r+", "+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,r);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,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},f=r&&r.virtualTranslate;r=r||{};var h={};for(var g in r)if("object"!=typeof r[g]||null===r[g]||(r[g].nodeType||r[g]===window||r[g]===document||"undefined"!=typeof i&&r[g]instanceof i||"undefined"!=typeof jQuery&&r[g]instanceof jQuery))h[g]=r[g];else{h[g]={};for(var v in r[g])h[g][v]=r[g][v]}for(var w in m)if("undefined"==typeof r[w])r[w]=m[w];else if("object"==typeof r[w])for(var y in m[w])"undefined"==typeof r[w][y]&&(r[w][y]=m[w][y]);var b=this;if(b.params=r,b.originalParams=h,b.classNames=[],"undefined"!=typeof a&&"undefined"!=typeof i&&(a=i),("undefined"!=typeof a||(a="undefined"==typeof i?window.Dom7||window.Zepto||window.jQuery:i))&&(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 i=0;i=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;for(var t in a)b.params[t]=a[t];b.currentBreakpoint=e}},b.params.breakpoints&&b.setBreakpoint(),b.container=a(e),0!==b.container.length)){if(b.container.length>1)return void b.container.each(function(){new t(this,r)});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 f&&(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),"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.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,i,r){function s(){r&&r()}var n;e.complete&&i?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,f;"column"===b.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&&b.params.spaceBetween&&b.params.spaceBetween+"px"}).attr("data-swiper-column",m).attr("data-swiper-row",f)}"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+i/2+a,0===e&&(t=t-b.size/2-a),Math.abs(t)<.001&&(t=0),r%b.params.slidesPerGroup===0&&b.snapGrid.push(t),b.slidesGrid.push(t)):(r%b.params.slidesPerGroup===0&&b.snapGrid.push(t),b.slidesGrid.push(t),t=t+o+a),b.virtualSize+=o+a,i=o,r++)}b.virtualSize=Math.max(b.virtualSize,b.size)+b.params.slidesOffsetAfter;var h;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(h=[],e=0;eMath.floor(b.snapGrid[b.snapGrid.length-1])&&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)}i.progress=b.rtl?-r:r}}},b.updateProgress=function(e){"undefined"==typeof e&&(e=b.translate||0);var a=b.maxTranslate()-b.minTranslate(),t=b.isBeginning,i=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&&!i&&b.emit("onReachEnd",b),b.params.watchSlidesProgress&&b.updateSlidesProgress(e),b.emit("onProgress",b,b.progress)},b.updateActiveIndex=function(){var e,a,t,i=b.rtl?b.translate:-b.translate;for(a=0;a=b.slidesGrid[a]&&i=b.slidesGrid[a]&&i=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);if(e.addClass(b.params.slideActiveClass),e.next("."+b.params.slideClass).addClass(b.params.slideNextClass),e.prev("."+b.params.slideClass).addClass(b.params.slidePrevClass),b.paginationContainer&&b.paginationContainer.length>0){var t,i=b.params.loop?Math.ceil((b.slides.length-2*b.loopedSlides)/b.params.slidesPerGroup):b.snapGrid.length;if(b.params.loop?(t=Math.ceil(b.activeIndex-b.loopedSlides)/b.params.slidesPerGroup,t>b.slides.length-1-2*b.loopedSlides&&(t-=b.slides.length-2*b.loopedSlides),t>i-1&&(t-=i),0>t&&"bullets"!==b.params.paginationType&&(t=i+t)):t="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()===t&&a(this).addClass(b.params.bulletActiveClass)}):b.bullets.eq(t).addClass(b.params.bulletActiveClass)),"fraction"===b.params.paginationType&&(b.paginationContainer.find("."+b.params.paginationCurrentClass).text(t+1),b.paginationContainer.find("."+b.params.paginationTotalClass).text(i)),"progress"===b.params.paginationType){var r=(t+1)/i,s=r,n=1;b.isHorizontal()||(n=r,s=1),b.paginationContainer.find("."+b.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+s+") scaleY("+n+")").transition(b.params.speed)}"custom"===b.params.paginationType&&b.params.paginationCustomRender&&b.paginationContainer.html(b.params.paginationCustomRender(b,t+1,i))}b.params.loop||(b.params.prevButton&&(b.isBeginning?(a(b.params.prevButton).addClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.disable(a(b.params.prevButton))):(a(b.params.prevButton).removeClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.enable(a(b.params.prevButton)))),b.params.nextButton&&(b.isEnd?(a(b.params.nextButton).addClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.disable(a(b.params.nextButton))):(a(b.params.nextButton).removeClass(b.params.buttonDisabledClass),b.params.a11y&&b.a11y&&b.a11y.enable(a(b.params.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.params.paginationElement+">";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))}},b.update=function(e){function a(){i=Math.min(Math.max(b.translate,b.maxTranslate()),b.minTranslate()),b.setWrapperTranslate(i),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,i;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;if(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),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(),("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.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 t=e?"off":"on",i=e?"removeEventListener":"addEventListener",s="container"===b.params.touchEventsTarget?b.container[0]:b.wrapper[0],n=b.support.touch?s:document,o=b.params.nested?!0:!1;b.browser.ie?(s[i](b.touchEvents.start,b.onTouchStart,!1),n[i](b.touchEvents.move,b.onTouchMove,o),n[i](b.touchEvents.end,b.onTouchEnd,!1)):(b.support.touch&&(s[i](b.touchEvents.start,b.onTouchStart,!1),s[i](b.touchEvents.move,b.onTouchMove,o),s[i](b.touchEvents.end,b.onTouchEnd,!1)),!r.simulateTouch||b.device.ios||b.device.android||(s[i]("mousedown",b.onTouchStart,!1),document[i]("mousemove",b.onTouchMove,o),document[i]("mouseup",b.onTouchEnd,!1))),window[i]("resize",b.onResize),b.params.nextButton&&(a(b.params.nextButton)[t]("click",b.onClickNext),b.params.a11y&&b.a11y&&a(b.params.nextButton)[t]("keydown",b.a11y.onEnterKey)),b.params.prevButton&&(a(b.params.prevButton)[t]("click",b.onClickPrev),b.params.a11y&&b.a11y&&a(b.params.prevButton)[t]("keydown",b.a11y.onEnterKey)),b.params.pagination&&b.params.paginationClickable&&(a(b.paginationContainer)[t]("click","."+b.params.bulletClass,b.onClickIndex),b.params.a11y&&b.a11y&&a(b.paginationContainer)[t]("keydown","."+b.params.bulletClass,b.a11y.onEnterKey)),(b.params.preventClicks||b.params.preventClicksPropagation)&&s[i]("click",b.preventClicks,!0)},b.attachEvents=function(e){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),i=!1;if(t)for(var r=0;rb.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 x,S,C,z,M,P,E,k,I,L,D="input, select, textarea, button",H=Date.now(),B=[];b.animating=!1,b.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var A,G;if(b.onTouchStart=function(e){if(e.originalEvent&&(e=e.originalEvent),A="touchstart"===e.type,A||!("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,i=b.touches.currentY="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY;if(!(b.device.ios&&b.params.iOSEdgeSwipeDetection&&t<=b.params.iOSEdgeSwipeThreshold)){if(x=!0,S=!1,C=!0,M=void 0,G=void 0,b.touches.startX=t,b.touches.startY=i,z=Date.now(),b.allowClick=!0,b.updateContainerSize(),b.swipeDirection=void 0,b.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()}b.emit("onTouchStart",b,e)}}}},b.onTouchMove=function(e){if(e.originalEvent&&(e=e.originalEvent),!(A&&"mousemove"===e.type||e.preventedByNestedSwiper)){if(b.params.onlyExternal)return b.allowClick=!1,void(x&&(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,z=Date.now()));if(A&&document.activeElement&&e.target===document.activeElement&&a(e.target).is(D))return S=!0,void(b.allowClick=!1);if(C&&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 M){var t=180*Math.atan2(Math.abs(b.touches.currentY-b.touches.startY),Math.abs(b.touches.currentX-b.touches.startX))/Math.PI;M=b.isHorizontal()?t>b.params.touchAngle:90-t>b.params.touchAngle}if(M&&b.emit("onTouchMoveOpposite",b,e),"undefined"==typeof G&&b.browser.ieTouch&&(b.touches.currentX!==b.touches.startX||b.touches.currentY!==b.touches.startY)&&(G=!0),x){if(M)return void(x=!1);if(G||!b.browser.ieTouch){b.allowClick=!1,b.emit("onSliderMove",b,e),e.preventDefault(),b.params.touchMoveStopPropagation&&!b.params.nested&&e.stopPropagation(),S||(r.loop&&b.fixLoop(),E=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()),L=!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")),S=!0;var i=b.touches.diff=b.isHorizontal()?b.touches.currentX-b.touches.startX:b.touches.currentY-b.touches.startY;i*=b.params.touchRatio,b.rtl&&(i=-i),b.swipeDirection=i>0?"prev":"next",P=i+E;var s=!0;if(i>0&&P>b.minTranslate()?(s=!1,b.params.resistance&&(P=b.minTranslate()-1+Math.pow(-b.minTranslate()+E+i,b.params.resistanceRatio))):0>i&&PP&&(P=E),!b.params.allowSwipeToPrev&&"prev"===b.swipeDirection&&P>E&&(P=E),b.params.followFinger){if(b.params.threshold>0){if(!(Math.abs(i)>b.params.threshold||k))return void(P=E);if(!k)return k=!0,b.touches.startX=b.touches.currentX,b.touches.startY=b.touches.currentY,P=E,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===B.length&&B.push({position:b.touches[b.isHorizontal()?"startX":"startY"],time:z}),B.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),C&&b.emit("onTouchEnd",b,e),C=!1,x){b.params.grabCursor&&S&&x&&(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(),i=t-z;if(b.allowClick&&(b.updateClickedSlide(e),b.emit("onTap",b,e),300>i&&t-H>300&&(I&&clearTimeout(I),I=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>i&&300>t-H&&(I&&clearTimeout(I),b.emit("onDoubleTap",b,e))),H=Date.now(),setTimeout(function(){b&&(b.allowClick=!0)},0),!x||!S||!b.swipeDirection||0===b.touches.diff||P===E)return void(x=S=!1);x=S=!1;var r;if(r=b.params.followFinger?b.rtl?b.translate:-b.translate:-P,b.params.freeMode){if(r<-b.minTranslate())return void b.slideTo(b.activeIndex);if(r>-b.maxTranslate())return void(b.slides.length1){var s=B.pop(),n=B.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;B.length=0;var p=1e3*b.params.freeModeMomentumRatio,d=b.velocity*p,u=b.translate+d;b.rtl&&(u=-u);var c,m=!1,f=20*Math.abs(b.velocity)*b.params.freeModeMomentumBounceRatio;if(ub.minTranslate())b.params.freeModeMomentumBounce?(u-b.minTranslate()>f&&(u=b.minTranslate()+f),c=b.minTranslate(),m=!0,L=!0):u=b.minTranslate();else if(b.params.freeModeSticky){var h,g=0;for(g=0;g-u){h=g;break}u=Math.abs(b.snapGrid[h]-u)=b.params.longSwipesMs)&&(b.updateProgress(),b.updateActiveIndex()))}var v,w=0,y=b.slidesSizesGrid[0];for(v=0;v=b.slidesGrid[v]&&r=b.slidesGrid[v]&&(w=v,y=b.slidesGrid[b.slidesGrid.length-1]-b.slidesGrid[b.slidesGrid.length-2]);var T=(r-b.slidesGrid[w])/y;if(i>b.params.longSwipesMs){if(!b.params.longSwipes)return void b.slideTo(b.activeIndex);"next"===b.swipeDirection&&(T>=b.params.longSwipesRatio?b.slideTo(w+b.params.slidesPerGroup):b.slideTo(w)),"prev"===b.swipeDirection&&(T>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,i){"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 r=-b.snapGrid[b.snapIndex];b.params.autoplay&&b.autoplaying&&(i||!b.params.autoplayDisableOnInteraction?b.pauseAutoplay(a):b.stopAutoplay()),b.updateProgress(r);for(var s=0;s=Math.floor(100*b.slidesGrid[s])&&(e=s);return!b.params.allowSwipeToNext&&rb.translate&&r>b.maxTranslate()&&(b.activeIndex||0)!==e?!1:("undefined"==typeof a&&(a=b.params.speed),b.previousIndex=b.activeIndex||0,b.activeIndex=e,b.rtl&&-r===b.translate||!b.rtl&&r===b.translate?(b.params.autoHeight&&b.updateAutoHeight(),b.updateClasses(),"slide"!==b.params.effect&&b.setWrapperTranslate(r),!1):(b.updateClasses(),b.onTransitionStart(t),0===a?(b.setWrapperTranslate(r),b.setWrapperTransition(0),b.onTransitionEnd(t)):(b.setWrapperTranslate(r),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 i=0,r=0,n=0;b.isHorizontal()?i=b.rtl?-e:e:r=e,b.params.roundLengths&&(i=s(i),r=s(r)),b.params.virtualTranslate||(b.support.transforms3d?b.wrapper.transform("translate3d("+i+"px, "+r+"px, "+n+"px)"):b.wrapper.transform("translate("+i+"px, "+r+"px)")),b.translate=b.isHorizontal()?i:r;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,i,r,s;return"undefined"==typeof a&&(a="x"),b.params.virtualTranslate?b.rtl?-b.translate:b.translate:(r=window.getComputedStyle(e,null),window.WebKitCSSMatrix?(i=r.transform||r.webkitTransform,i.split(",").length>6&&(i=i.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),s=new window.WebKitCSSMatrix("none"===i?"":i)):(s=r.MozTransform||r.OTransform||r.MsTransform||r.msTransform||r.transform||r.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=s.toString().split(",")),"x"===a&&(i=window.WebKitCSSMatrix?s.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(i=window.WebKitCSSMatrix?s.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),b.rtl&&i&&(i=-i),i||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,i=[],r=[];for(e.each(function(t,s){var n=a(this);t=e.length-b.loopedSlides&&i.push(s),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)b.wrapper.prepend(a(i[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.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(-i,0)),u.length&&(u[0].style.opacity=Math.max(i,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"],i=0;i'),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 i=0;i=o&&o>-1&&(t=90*i+90*o,b.rtl&&(t=90*-i-90*o)),r.transform(u),b.params.cube.slideShadows){var c=b.isHorizontal()?r.find(".swiper-slide-shadow-left"):r.find(".swiper-slide-shadow-top"),m=b.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(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 f=Math.abs(t)-90*Math.floor(Math.abs(t)/90),h=1.5-(Math.sin(2*f*Math.PI/360)/2+Math.cos(2*f*Math.PI/360)/2),g=b.params.cube.shadowScale,v=b.params.cube.shadowScale/h,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,i=b.isHorizontal()?b.params.coverflow.rotate:-b.params.coverflow.rotate,r=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()?i*d:0,c=b.isHorizontal()?0:i*d,m=-r*Math.abs(d),f=b.isHorizontal()?0:b.params.coverflow.stretch*d,h=b.isHorizontal()?b.params.coverflow.stretch*d:0;Math.abs(h)<.001&&(h=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 g="translate3d("+h+"px,"+f+"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 i=b.slides.eq(e),r=i.find(".swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)");!i.hasClass("swiper-lazy")||i.hasClass("swiper-lazy-loaded")||i.hasClass("swiper-lazy-loading")||(r=r.add(i[0])),0!==r.length&&r.each(function(){var e=a(this);e.addClass("swiper-lazy-loading");var r=e.attr("data-background"),s=e.attr("data-src"),n=e.attr("data-srcset");b.loadImage(e[0],s||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")),s&&(e.attr("src",s),e.removeAttr("data-src"))),e.addClass("swiper-lazy-loaded").removeClass("swiper-lazy-loading"),i.find(".swiper-lazy-preloader, .preloader").remove(),b.params.loop&&t){var a=i.attr("data-swiper-slide-index");if(i.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,i[0],e[0])}),b.emit("onLazyImageLoad",b,i[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,i=b.params.slidesPerView,r=Math.min(b.activeIndex+i+Math.max(t,i),b.slides.length),s=Math.max(b.activeIndex-Math.max(i,t),0);for(e=b.activeIndex+b.params.slidesPerView;r>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,i=t-a.track.offset()[b.isHorizontal()?"left":"top"]-a.dragSize/2,r=-b.minTranslate()*a.moveDivider,s=-b.maxTranslate()*a.moveDivider;r>i?i=r:i>s&&(i=s),i=-i/a.moveDivider,b.updateProgress(i),b.setWrapperTranslate(i,!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),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,i;this.x.length;this.interpolate=function(e){return e?(i=r(this.x,e),t=i-1,(e-this.x[t])*(this.y[i]-this.y[t])/(this.x[i]-this.x[t])+this.y[t]):0};var r=function(){var e,a,t;return function(i,r){for(a=-1,e=i.length;e-a>1;)i[t=e+a>>1]<=r?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 i(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||(r=(a.maxTranslate()-a.minTranslate())/(b.maxTranslate()-b.minTranslate()),s=(e-b.minTranslate())*r+a.minTranslate()),b.params.controlInverse&&(s=a.maxTranslate()-s),a.updateProgress(s),a.setWrapperTranslate(s,!1,b),a.updateActiveIndex()}var r,s,n=b.params.control;if(b.isArray(n))for(var o=0;ot;t++){var r=b.slides.eq(t),s=r.attr("data-hash");if(s===e&&!r.hasClass(b.params.slideDuplicateClass)){var n=r.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(O){}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),i=parseInt(t.attr("data-swiper-parallax-duration"),10)||e;0===e&&(i=0),t.transition(i)})}},b._plugins=[];for(var N in b.plugins){var R=b.plugins[N](b,b.params[N]);R&&b._plugins.push(R)}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(){if(b.params.nextButton){var e=a(b.params.nextButton);b.a11y.makeFocusable(e),b.a11y.addRole(e,"button"),b.a11y.addLabel(e,b.params.nextSlideMessage)}if(b.params.prevButton){var t=a(b.params.prevButton);b.a11y.makeFocusable(t),b.a11y.addRole(t,"button"),b.a11y.addLabel(t,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_]+)/),i=e.match(/(iPod)(.*OS\s([\d_]+))?/),r=!t&&e.match(/(iPhone\sOS)\s([\d_]+)/);return{ios:t||r||i,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])],r=0;r0&&a[0].nodeType)for(r=0;r0?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,i=e.clientTop||t.clientTop||0,r=e.clientLeft||t.clientLeft||0,s=window.pageYOffset||e.scrollTop,n=window.pageXOffset||e.scrollLeft;return{top:a.top+s-i,left:a.left+n-r}}return null},css:function(e,a){var t;if(1===arguments.length){if("string"!=typeof e){for(t=0;ti-1?new e([]):0>a?(t=i+a,new e(0>t?[]:[this[t]])):new e([this[a]])},append:function(a){var t,i;for(t=0;t=0;i--)this[t].insertBefore(r.childNodes[i],this[t].childNodes[0])}else if(a instanceof e)for(i=0;i1)for(var r=0;r1)for(var r=0;r0?t?this[0].nextElementSibling&&a(this[0].nextElementSibling).is(t)?[this[0].nextElementSibling]:[]:this[0].nextElementSibling?[this[0].nextElementSibling]:[]:[])},nextAll:function(t){var i=[],r=this[0];if(!r)return new e([]);for(;r.nextElementSibling;){var s=r.nextElementSibling;t?a(s).is(t)&&i.push(s):i.push(s),r=s}return new e(i)},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 i=[],r=this[0];if(!r)return new e([]);for(;r.previousElementSibling;){var s=r.previousElementSibling;t?a(s).is(t)&&i.push(s):i.push(s),r=s}return new e(i)},parent:function(e){for(var t=[],i=0;i',
+ ' * <%= pkg.description %>',
+ ' * ',
+ ' * <%= pkg.homepage %>',
+ ' * ',
+ ' * Copyright <%= date.year %>, <%= pkg.author %>',
+ ' * The iDangero.us',
+ ' * http://www.idangero.us/',
+ ' * ',
+ ' * Licensed under <%= pkg.license.join(" & ") %>',
+ ' * ',
+ ' * Released on: <%= date.month %> <%= date.day %>, <%= date.year %>',
+ ' */',
+ ''].join('\n'),
+ date: {
+ year: new Date().getFullYear(),
+ month: ('January February March April May June July August September October November December').split(' ')[new Date().getMonth()],
+ day: new Date().getDate()
+ }
+ };
+
+ function addJSIndent (file, t, minusIndent) {
+ var addIndent = ' ';
+ var filename = file.path.split('src/js/')[1];
+ if (['wrap-start.js', 'wrap-start-umd.js', 'wrap-end.js', 'wrap-end-umd.js', 'amd.js'].indexOf(filename) !== -1) {
+ addIndent = '';
+ }
+ if (filename === 'swiper-intro.js' || filename === 'swiper-intro-f7.js' || filename === 'swiper-outro.js' || filename === 'dom.js' || filename === 'get-dom-lib.js' || filename === 'get-jquery.js' || filename === 'dom-plugins.js' || filename === 'swiper-proto.js') addIndent = ' ';
+ if (minusIndent) {
+ addIndent = addIndent.substring(4);
+ }
+ if (addIndent !== '') {
+ var fileLines = fs.readFileSync(file.path).toString().split('\n');
+ var newFileContents = '';
+ for (var i = 0; i < fileLines.length; i++) {
+ newFileContents += addIndent + fileLines[i] + (i === fileLines.length ? '' : '\n');
+ }
+ file.contents = new Buffer(newFileContents);
+ }
+ }
+ gulp.task('scripts', function (cb) {
+ gulp.src(swiper.jsFiles)
+ .pipe(tap(function (file, t){
+ addJSIndent (file, t);
+ }))
+ .pipe(concat(swiper.filename + '.js'))
+ .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } ))
+ .pipe(gulp.dest(paths.build.scripts))
+
+ .pipe(jshint())
+ .pipe(jshint.reporter(stylish));
+ gulp.src(swiper.jQueryFiles)
+ .pipe(tap(function (file, t){
+ addJSIndent (file, t);
+ }))
+ .pipe(concat(swiper.filename + '.jquery.js'))
+ .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } ))
+ .pipe(gulp.dest(paths.build.scripts));
+ gulp.src(swiper.jQueryUMDFiles)
+ .pipe(tap(function (file, t){
+ addJSIndent (file, t);
+ }))
+ .pipe(concat(swiper.filename + '.jquery.umd.js'))
+ .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } ))
+ .pipe(gulp.dest(paths.build.scripts));
+ gulp.src(swiper.Framework7Files)
+ .pipe(tap(function (file, t){
+ addJSIndent (file, t, true);
+ }))
+ .pipe(concat(swiper.filename + '.framework7.js'))
+ .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } ))
+ .pipe(gulp.dest(paths.build.scripts))
+ .pipe(connect.reload());
+ cb();
+ });
+ gulp.task('styles', function (cb) {
+
+ gulp.src(paths.source.styles + 'swiper.less')
+ .pipe(less({
+ paths: [ path.join(__dirname, 'less', 'includes') ]
+ }))
+ .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date }))
+ .pipe(rename(function(path) {
+ path.basename = swiper.filename;
+ }))
+ .pipe(gulp.dest(paths.build.styles))
+ .pipe(connect.reload());
+
+ gulp.src([
+ paths.source.styles + 'core.less',
+ paths.source.styles + 'navigation-f7.less',
+ paths.source.styles + 'effects.less',
+ paths.source.styles + 'scrollbar.less',
+ paths.source.styles + 'preloader-f7.less',
+ ])
+ .pipe(concat(swiper.filename + '.framework7.less'))
+ .pipe(header('/* === Swiper === */\n'))
+ .pipe(gulp.dest(paths.build.styles));
+ cb();
+ });
+ gulp.task('build', ['scripts', 'styles'], function (cb) {
+ cb();
+ });
+
+ gulp.task('dist', function () {
+ gulp.src([paths.build.scripts + swiper.filename + '.js'])
+ .pipe(gulp.dest(paths.dist.scripts))
+ .pipe(sourcemaps.init())
+ .pipe(uglify())
+ .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date }))
+ .pipe(rename(function(path) {
+ path.basename = swiper.filename + '.min';
+ }))
+ .pipe(sourcemaps.write('./maps'))
+ .pipe(gulp.dest(paths.dist.scripts));
+
+ gulp.src([paths.build.scripts + swiper.filename + '.jquery.js'])
+ .pipe(gulp.dest(paths.dist.scripts))
+ .pipe(sourcemaps.init())
+ .pipe(uglify())
+ .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } ))
+ .pipe(rename(function(path) {
+ path.basename = swiper.filename + '.jquery.min';
+ }))
+ .pipe(sourcemaps.write('./maps'))
+ .pipe(gulp.dest(paths.dist.scripts));
+
+ gulp.src([paths.build.scripts + swiper.filename + '.jquery.umd.js'])
+ .pipe(gulp.dest(paths.dist.scripts))
+ .pipe(sourcemaps.init())
+ .pipe(uglify())
+ .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date } ))
+ .pipe(rename(function(path) {
+ path.basename = swiper.filename + '.jquery.umd.min';
+ }))
+ .pipe(sourcemaps.write('./maps'))
+ .pipe(gulp.dest(paths.dist.scripts));
+
+ gulp.src(paths.build.styles + '*.css')
+ .pipe(gulp.dest(paths.dist.styles))
+ .pipe(minifyCSS({
+ advanced: false,
+ aggressiveMerging: false,
+ }))
+ .pipe(header(swiper.banner, { pkg : swiper.pkg, date: swiper.date }))
+ .pipe(rename(function(path) {
+ path.basename = swiper.filename + '.min';
+ }))
+ .pipe(gulp.dest(paths.dist.styles));
+ });
+
+ gulp.task('watch', function () {
+ gulp.watch(paths.source.scripts, [ 'scripts' ]);
+ gulp.watch(paths.source.styles + '*.less', [ 'styles' ]);
+ });
+
+ gulp.task('connect', function () {
+ return connect.server({
+ root: [ paths.root ],
+ livereload: true,
+ port:'3000'
+ });
+ });
+
+ gulp.task('open', function () {
+ return gulp.src(paths.playground.root + 'index.html').pipe(open({ uri: 'http://localhost:3000/' + paths.playground.root + 'index.html'}));
+ });
+
+ gulp.task('server', [ 'watch', 'connect', 'open' ]);
+
+ gulp.task('default', [ 'server' ]);
+})();
diff --git a/dashboard-ui/bower_components/Swiper/package.js b/dashboard-ui/bower_components/Swiper/package.js
new file mode 100644
index 0000000000..e301257ccd
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/package.js
@@ -0,0 +1,24 @@
+var version = '3.3.0';
+
+Package.describe({
+ name: 'nolimits4web:swiper',
+ summary: 'iDangero.us Swiper - mobile touch slider with hardware accelerated transitions and native behavior',
+ version: version,
+ git: 'https://github.com/nolimits4web/Swiper'
+});
+
+Package.onUse(function (api) {
+ api.versionsFrom('1.1.0.2');
+
+ api.addFiles([
+ 'dist/css/swiper.min.css',
+ 'dist/js/swiper.js'
+ ], ['client']
+ );
+
+ // Since swiper is attached to window, we do not need to export Swiper
+ // api.export('Swiper');
+});
+
+Package.onTest(function (api) {
+});
diff --git a/dashboard-ui/bower_components/Swiper/src/js/a11y.js b/dashboard-ui/bower_components/Swiper/src/js/a11y.js
new file mode 100644
index 0000000000..b290da1cdd
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/a11y.js
@@ -0,0 +1,90 @@
+// 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) {
+ var nextButton = $(s.params.nextButton);
+ s.a11y.makeFocusable(nextButton);
+ s.a11y.addRole(nextButton, 'button');
+ s.a11y.addLabel(nextButton, s.params.nextSlideMessage);
+ }
+ if (s.params.prevButton) {
+ var prevButton = $(s.params.prevButton);
+ s.a11y.makeFocusable(prevButton);
+ s.a11y.addRole(prevButton, 'button');
+ s.a11y.addLabel(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();
+ }
+};
diff --git a/dashboard-ui/bower_components/Swiper/src/js/amd.js b/dashboard-ui/bower_components/Swiper/src/js/amd.js
new file mode 100644
index 0000000000..4d1d2b5d1d
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/amd.js
@@ -0,0 +1,13 @@
+/*===========================
+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;
+ });
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/controller.js b/dashboard-ui/bower_components/Swiper/src/js/controller.js
new file mode 100644
index 0000000000..b6b5d7acb6
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/controller.js
@@ -0,0 +1,116 @@
+/*=========================
+ 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);
+ }
+ }
+};
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/core.js b/dashboard-ui/bower_components/Swiper/src/js/core.js
new file mode 100644
index 0000000000..2b275ddddf
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/core.js
@@ -0,0 +1,2230 @@
+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,
+ // 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;
+ for ( var param in breakPointsParams ) {
+ s.params[param] = breakPointsParams[param];
+ }
+ s.currentBreakpoint = breakpoint;
+ }
+};
+// 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) {
+ s.container.each(function () {
+ new Swiper(this, params);
+ });
+ return;
+}
+
+// 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.paginationType === 'bullets' && s.params.paginationClickable) {
+ s.paginationContainer.addClass('swiper-pagination-clickable');
+ }
+ else {
+ s.params.paginationClickable = false;
+ }
+ s.paginationContainer.addClass('swiper-pagination-' + s.params.paginationType);
+}
+
+// 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 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])) {
+ 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);
+ activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);
+ activeSlide.prev('.' + s.params.slideClass).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));
+ }
+ }
+
+ // Next/active buttons
+ if (!s.params.loop) {
+ if (s.params.prevButton) {
+ if (s.isBeginning) {
+ $(s.params.prevButton).addClass(s.params.buttonDisabledClass);
+ if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.prevButton));
+ }
+ else {
+ $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);
+ if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.prevButton));
+ }
+ }
+ if (s.params.nextButton) {
+ if (s.isEnd) {
+ $(s.params.nextButton).addClass(s.params.buttonDisabledClass);
+ if (s.params.a11y && s.a11y) s.a11y.disable($(s.params.nextButton));
+ }
+ else {
+ $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);
+ if (s.params.a11y && s.a11y) s.a11y.enable($(s.params.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.params.paginationElement + '>';
+ }
+ }
+ 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);
+ }
+ }
+};
+/*=========================
+ 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;
+ }
+ 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) {
+ s.slideTo(s.slides.length - 1, 0, false, true);
+ }
+ else {
+ s.slideTo(s.activeIndex, 0, false, true);
+ }
+ }
+ // 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.params.nextButton)[actionDom]('click', s.onClickNext);
+ if (s.params.a11y && s.a11y) $(s.params.nextButton)[actionDom]('keydown', s.a11y.onEnterKey);
+ }
+ if (s.params.prevButton) {
+ $(s.params.prevButton)[actionDom]('click', s.onClickPrev);
+ if (s.params.a11y && s.a11y) $(s.params.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 (detach) {
+ 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) 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.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);
+};
diff --git a/dashboard-ui/bower_components/Swiper/src/js/dom-plugins.js b/dashboard-ui/bower_components/Swiper/src/js/dom-plugins.js
new file mode 100644
index 0000000000..c54de3192c
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/dom-plugins.js
@@ -0,0 +1,57 @@
+/*===========================
+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;
+ };
+ }
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/dom.js b/dashboard-ui/bower_components/Swiper/src/js/dom.js
new file mode 100644
index 0000000000..995f6fb565
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/dom.js
@@ -0,0 +1,664 @@
+/*===========================
+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 $;
+})();
diff --git a/dashboard-ui/bower_components/Swiper/src/js/effects.js b/dashboard-ui/bower_components/Swiper/src/js/effects.js
new file mode 100644
index 0000000000..e2c530028a
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/effects.js
@@ -0,0 +1,276 @@
+/*=========================
+ 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);
+ }
+ }
+};
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/emitter.js b/dashboard-ui/bower_components/Swiper/src/js/emitter.js
new file mode 100644
index 0000000000..836111f305
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/emitter.js
@@ -0,0 +1,61 @@
+/*=========================
+ 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;
+};
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/get-dom-lib.js b/dashboard-ui/bower_components/Swiper/src/js/get-dom-lib.js
new file mode 100644
index 0000000000..aff1d835f9
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/get-dom-lib.js
@@ -0,0 +1,17 @@
+/*===========================
+ 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;
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/get-jquery.js b/dashboard-ui/bower_components/Swiper/src/js/get-jquery.js
new file mode 100644
index 0000000000..07ba61dcf8
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/get-jquery.js
@@ -0,0 +1,7 @@
+/*===========================
+ Get jQuery
+ ===========================*/
+
+addLibraryPlugin($);
+
+var domLib = $;
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/hashnav.js b/dashboard-ui/bower_components/Swiper/src/js/hashnav.js
new file mode 100644
index 0000000000..d4965e4303
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/hashnav.js
@@ -0,0 +1,24 @@
+/*=========================
+ 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') || '';
+ }
+};
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/init.js b/dashboard-ui/bower_components/Swiper/src/js/init.js
new file mode 100644
index 0000000000..d21b373214
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/init.js
@@ -0,0 +1,133 @@
+/*=========================
+ 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();
diff --git a/dashboard-ui/bower_components/Swiper/src/js/keyboard.js b/dashboard-ui/bower_components/Swiper/src/js/keyboard.js
new file mode 100644
index 0000000000..53dd5f4891
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/keyboard.js
@@ -0,0 +1,76 @@
+/*=========================
+ 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);
+};
diff --git a/dashboard-ui/bower_components/Swiper/src/js/lazy-load.js b/dashboard-ui/bower_components/Swiper/src/js/lazy-load.js
new file mode 100644
index 0000000000..8fc6c12664
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/lazy-load.js
@@ -0,0 +1,114 @@
+/*=========================
+ 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();
+ }
+ }
+};
diff --git a/dashboard-ui/bower_components/Swiper/src/js/mousewheel.js b/dashboard-ui/bower_components/Swiper/src/js/mousewheel.js
new file mode 100644
index 0000000000..c9456eb7a2
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/mousewheel.js
@@ -0,0 +1,129 @@
+/*=========================
+ 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 (!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;
+ //Opera & IE
+ if (e.detail) delta = -e.detail;
+ //WebKits
+ else 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;
+};
diff --git a/dashboard-ui/bower_components/Swiper/src/js/parallax.js b/dashboard-ui/bower_components/Swiper/src/js/parallax.js
new file mode 100644
index 0000000000..78ad997154
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/parallax.js
@@ -0,0 +1,65 @@
+/*=========================
+ 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);
+ });
+ }
+};
diff --git a/dashboard-ui/bower_components/Swiper/src/js/plugins.js b/dashboard-ui/bower_components/Swiper/src/js/plugins.js
new file mode 100644
index 0000000000..012b58bb85
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/plugins.js
@@ -0,0 +1,16 @@
+/*=========================
+ 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]);
+ }
+ }
+};
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/scrollbar.js b/dashboard-ui/bower_components/Swiper/src/js/scrollbar.js
new file mode 100644
index 0000000000..add88850c6
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/scrollbar.js
@@ -0,0 +1,178 @@
+/*=========================
+ 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);
+ 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);
+ }
+};
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/swiper-intro-f7.js b/dashboard-ui/bower_components/Swiper/src/js/swiper-intro-f7.js
new file mode 100644
index 0000000000..9ec3ad5476
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/swiper-intro-f7.js
@@ -0,0 +1,5 @@
+/*===========================
+Swiper
+===========================*/
+window.Swiper = function (container, params) {
+ if (!(this instanceof Swiper)) return new Swiper(container, params);
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/swiper-intro.js b/dashboard-ui/bower_components/Swiper/src/js/swiper-intro.js
new file mode 100644
index 0000000000..884f10bb04
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/swiper-intro.js
@@ -0,0 +1,5 @@
+/*===========================
+Swiper
+===========================*/
+var Swiper = function (container, params) {
+ if (!(this instanceof Swiper)) return new Swiper(container, params);
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/swiper-outro.js b/dashboard-ui/bower_components/Swiper/src/js/swiper-outro.js
new file mode 100644
index 0000000000..ffafa22823
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/swiper-outro.js
@@ -0,0 +1,4 @@
+
+ // Return swiper instance
+ return s;
+};
diff --git a/dashboard-ui/bower_components/Swiper/src/js/swiper-proto.js b/dashboard-ui/bower_components/Swiper/src/js/swiper-proto.js
new file mode 100644
index 0000000000..53746a571f
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/swiper-proto.js
@@ -0,0 +1,63 @@
+/*==================================================
+ 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: {}
+};
diff --git a/dashboard-ui/bower_components/Swiper/src/js/wrap-end-umd.js b/dashboard-ui/bower_components/Swiper/src/js/wrap-end-umd.js
new file mode 100644
index 0000000000..ccafdf4015
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/wrap-end-umd.js
@@ -0,0 +1,2 @@
+ return Swiper;
+}));
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/wrap-end.js b/dashboard-ui/bower_components/Swiper/src/js/wrap-end.js
new file mode 100644
index 0000000000..5f3d75ca38
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/wrap-end.js
@@ -0,0 +1,2 @@
+ window.Swiper = Swiper;
+})();
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/js/wrap-start-umd.js b/dashboard-ui/bower_components/Swiper/src/js/wrap-start-umd.js
new file mode 100644
index 0000000000..7dff9f2c8e
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/wrap-start-umd.js
@@ -0,0 +1,17 @@
+(function (root, factory) {
+ 'use strict';
+
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['jquery'], factory);
+ } else if (typeof exports === 'object') {
+ // Node. Does not work with strict CommonJS, but
+ // only CommonJS-like environments that support module.exports,
+ // like Node.
+ module.exports = factory(require('jquery'));
+ } else {
+ // Browser globals (root is window)
+ root.Swiper = factory(root.jQuery);
+ }
+}(this, function ($) {
+ 'use strict';
diff --git a/dashboard-ui/bower_components/Swiper/src/js/wrap-start.js b/dashboard-ui/bower_components/Swiper/src/js/wrap-start.js
new file mode 100644
index 0000000000..3628709ca3
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/js/wrap-start.js
@@ -0,0 +1,3 @@
+(function () {
+ 'use strict';
+ var $;
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/core.less b/dashboard-ui/bower_components/Swiper/src/less/core.less
new file mode 100644
index 0000000000..88b359c9be
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/less/core.less
@@ -0,0 +1,104 @@
+.swiper-container {
+ margin:0 auto;
+ position:relative;
+ overflow:hidden;
+ /* Fix of Webkit flickering */
+ 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(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;
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/effects.less b/dashboard-ui/bower_components/Swiper/src/less/effects.less
new file mode 100644
index 0000000000..dcc7c7c9db
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/less/effects.less
@@ -0,0 +1,142 @@
+/* 3D Container */
+.swiper-container-3d {
+ -webkit-perspective: 1200px;
+ -moz-perspective: 1200px;
+ -o-perspective: 1200px;
+ perspective: 1200px;
+ .swiper-wrapper, .swiper-slide, .swiper-slide-shadow-left, .swiper-slide-shadow-right, .swiper-slide-shadow-top, .swiper-slide-shadow-bottom, .swiper-cube-shadow {
+ .preserve3d();
+ }
+ .swiper-slide-shadow-left, .swiper-slide-shadow-right, .swiper-slide-shadow-top, .swiper-slide-shadow-bottom {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ pointer-events: none;
+ z-index: 10;
+ }
+ .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-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-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-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-container-flip {
+ .swiper-wrapper {
+ /* Windows 8 IE 10 fix */
+ -ms-perspective:1200px;
+ }
+}
+/* Cube + Flip */
+.swiper-container-cube, .swiper-container-flip {
+ overflow: visible;
+ .swiper-slide {
+ pointer-events: none;
+ -webkit-backface-visibility: hidden;
+ -moz-backface-visibility: hidden;
+ -ms-backface-visibility: hidden;
+ backface-visibility: hidden;
+ z-index: 1;
+ .swiper-slide {
+ pointer-events: none;
+ }
+ }
+ .swiper-slide-active {
+ &, & .swiper-slide-active {
+ pointer-events: auto;
+ }
+ }
+ .swiper-slide-shadow-top, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left, .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-rtl .swiper-slide{
+ -webkit-transform-origin: 100% 0;
+ -moz-transform-origin: 100% 0;
+ -ms-transform-origin: 100% 0;
+ transform-origin: 100% 0;
+ }
+ .swiper-slide-active, .swiper-slide-next, .swiper-slide-prev, .swiper-slide-next + .swiper-slide {
+ pointer-events: auto;
+ visibility: visible;
+ }
+ .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-slide {
+ pointer-events: none;
+ -webkit-transition-property: opacity;
+ -moz-transition-property: opacity;
+ -o-transition-property: opacity;
+ transition-property: opacity;
+ .swiper-slide {
+ pointer-events: none;
+ }
+ }
+ .swiper-slide-active {
+ &, & .swiper-slide-active {
+ pointer-events: auto;
+ }
+ }
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/mixins.less b/dashboard-ui/bower_components/Swiper/src/less/mixins.less
new file mode 100644
index 0000000000..c0e1aa339b
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/less/mixins.less
@@ -0,0 +1,10 @@
+.preserve3d() {
+ -webkit-transform-style: preserve-3d;
+ -moz-transform-style: preserve-3d;
+ -ms-transform-style: preserve-3d;
+ transform-style: preserve-3d;
+}
+.encoded-svg-background(@svg) {
+ @url: `encodeURIComponent(@{svg})`;
+ background-image: url("data:image/svg+xml;charset=utf-8,@{url}");
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/navigation-f7.less b/dashboard-ui/bower_components/Swiper/src/less/navigation-f7.less
new file mode 100644
index 0000000000..00f185f625
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/less/navigation-f7.less
@@ -0,0 +1,143 @@
+/* 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-disabled {
+ opacity: 0.35;
+ cursor: auto;
+ pointer-events: none;
+ }
+}
+.swiper-button-prev, .swiper-container-rtl .swiper-button-next {
+ .encoded-svg-background(" ");
+ left: 10px;
+ right: auto;
+}
+.swiper-button-next, .swiper-container-rtl .swiper-button-prev {
+ .encoded-svg-background(" ");
+ right: 10px;
+ left: auto;
+}
+
+/* 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-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& {
+ border: none;
+ margin: 0;
+ padding: 0;
+ box-shadow: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -webkit-appearance: none;
+ appearance: none;
+ }
+ .swiper-pagination-clickable & {
+ cursor: pointer;
+ }
+}
+.swiper-pagination-bullet-active {
+ opacity: 1;
+ background: #007aff;
+}
+.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-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-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-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 > & {
+ width: 100%;
+ height: 4px;
+ left: 0;
+ top: 0;
+ }
+ .swiper-container-vertical > & {
+ width: 4px;
+ height: 100%;
+ left: 0;
+ top: 0;
+ }
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/navigation.less b/dashboard-ui/bower_components/Swiper/src/less/navigation.less
new file mode 100644
index 0000000000..39cea89f46
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/less/navigation.less
@@ -0,0 +1,174 @@
+/* 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-disabled {
+ opacity: 0.35;
+ cursor: auto;
+ pointer-events: none;
+ }
+}
+.swiper-button-prev, .swiper-container-rtl .swiper-button-next {
+ .encoded-svg-background(" ");
+ left: 10px;
+ right: auto;
+ &.swiper-button-black {
+ .encoded-svg-background(" ");
+ }
+ &.swiper-button-white {
+ .encoded-svg-background(" ");
+ }
+}
+.swiper-button-next, .swiper-container-rtl .swiper-button-prev {
+ .encoded-svg-background(" ");
+ right: 10px;
+ left: auto;
+ &.swiper-button-black {
+ .encoded-svg-background(" ");
+ }
+ &.swiper-button-white {
+ .encoded-svg-background(" ");
+ }
+}
+/* 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-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& {
+ border: none;
+ margin: 0;
+ padding: 0;
+ box-shadow: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -webkit-appearance: none;
+ appearance: none;
+ }
+ .swiper-pagination-clickable & {
+ cursor: pointer;
+ }
+ .swiper-pagination-white & {
+ background: #fff;
+ }
+}
+.swiper-pagination-bullet-active {
+ opacity: 1;
+ background: #007aff;
+ .swiper-pagination-white & {
+ background: #fff;
+ }
+ .swiper-pagination-black & {
+ 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-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-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-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 > & {
+ width: 100%;
+ height: 4px;
+ left: 0;
+ top: 0;
+ }
+ .swiper-container-vertical > & {
+ width: 4px;
+ height: 100%;
+ left: 0;
+ top: 0;
+ }
+ &.swiper-pagination-white {
+ background: rgba(255,255,255,0.5);
+ .swiper-pagination-progressbar {
+ background: #fff;
+ }
+ }
+ &.swiper-pagination-black {
+ .swiper-pagination-progressbar {
+ background: #000;
+ }
+ }
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/preloader-f7.less b/dashboard-ui/bower_components/Swiper/src/less/preloader-f7.less
new file mode 100644
index 0000000000..1b422e9e39
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/less/preloader-f7.less
@@ -0,0 +1,11 @@
+/* Preloader */
+.swiper-slide .preloader {
+ width: 42px;
+ height: 42px;
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ margin-left: -21px;
+ margin-top: -21px;
+ z-index: 10;
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/preloader.less b/dashboard-ui/bower_components/Swiper/src/less/preloader.less
new file mode 100644
index 0000000000..b15f8efc59
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/less/preloader.less
@@ -0,0 +1,42 @@
+/* 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%;
+ .encoded-svg-background(" ");
+ background-position: 50%;
+ -webkit-background-size: 100%;
+ background-size: 100%;
+ background-repeat: no-repeat;
+
+}
+.swiper-lazy-preloader-white:after {
+ .encoded-svg-background(" ");
+}
+@-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/dashboard-ui/bower_components/Swiper/src/less/scrollbar.less b/dashboard-ui/bower_components/Swiper/src/less/scrollbar.less
new file mode 100644
index 0000000000..624f1dfd86
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/less/scrollbar.less
@@ -0,0 +1,35 @@
+/* Scrollbar */
+.swiper-scrollbar {
+ border-radius: 10px;
+ position: relative;
+ -ms-touch-action: none;
+ background: rgba(0,0,0,0.1);
+ .swiper-container-horizontal > & {
+ position: absolute;
+ left: 1%;
+ bottom: 3px;
+ z-index: 50;
+ height: 5px;
+ width: 98%;
+ }
+ .swiper-container-vertical > & {
+ 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;
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/Swiper/src/less/swiper.less b/dashboard-ui/bower_components/Swiper/src/less/swiper.less
new file mode 100644
index 0000000000..d8ec9136e9
--- /dev/null
+++ b/dashboard-ui/bower_components/Swiper/src/less/swiper.less
@@ -0,0 +1,6 @@
+@import url('mixins.less');
+@import url('core.less');
+@import url('navigation.less');
+@import url('effects.less');
+@import url('scrollbar.less');
+@import url('preloader.less');
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json
index ac4fe8801a..0560b9e652 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json
+++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json
@@ -15,12 +15,12 @@
},
"devDependencies": {},
"ignore": [],
- "version": "1.0.42",
- "_release": "1.0.42",
+ "version": "1.0.49",
+ "_release": "1.0.49",
"_resolution": {
"type": "version",
- "tag": "1.0.42",
- "commit": "72b4735c586da9d565a9ff268cec1156a71da144"
+ "tag": "1.0.49",
+ "commit": "460488b5fd0723a72995cc23f9f8cb5a860bd370"
},
"_source": "git://github.com/MediaBrowser/emby-webcomponents.git",
"_target": "~1.0.0",
diff --git a/dashboard-ui/bower_components/emby-webcomponents/slideshow/icons.html b/dashboard-ui/bower_components/emby-webcomponents/slideshow/icons.html
new file mode 100644
index 0000000000..e3862c5f9d
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/slideshow/icons.html
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js b/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js
new file mode 100644
index 0000000000..6b4ad57349
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js
@@ -0,0 +1,409 @@
+define(['paperdialoghelper', 'inputManager', 'connectionManager', 'browser', 'css!./style', 'html!./icons', 'iron-icon-set'], function (paperdialoghelper, inputmanager, connectionManager, browser) {
+
+ return function (options) {
+
+ var self = this;
+ var swiperInstance;
+ var dlg;
+
+ function createElements(options) {
+
+ dlg = paperdialoghelper.createDialog({
+ exitAnimationDuration: 800,
+ size: 'fullscreen'
+ });
+
+ dlg.classList.add('slideshowDialog');
+
+ var html = '';
+
+ if (options.interactive) {
+
+ html += '';
+ html += '
';
+
+ html += '
';
+
+ html += '
';
+ html += '
';
+ html += '
';
+ html += '
';
+ html += '
';
+ html += '
';
+
+ } else {
+ html += '
';
+ }
+
+ dlg.innerHTML = html;
+
+ if (options.interactive) {
+ dlg.querySelector('.btnSlideshowExit').addEventListener('click', function (e) {
+
+ paperdialoghelper.close(dlg);
+ });
+ dlg.querySelector('.btnSlideshowNext').addEventListener('click', nextImage);
+ dlg.querySelector('.btnSlideshowPrevious').addEventListener('click', previousImage);
+ dlg.querySelector('.btnSlideshowPause').addEventListener('click', playPause);
+ }
+
+ document.body.appendChild(dlg);
+
+ paperdialoghelper.open(dlg).then(function () {
+
+ stopInterval();
+ dlg.parentNode.removeChild(dlg);
+ });
+
+ inputmanager.on(window, onInputCommand);
+
+ dlg.addEventListener('iron-overlay-closed', onDialogClosed);
+
+ if (options.interactive) {
+ loadSwiper(dlg);
+ }
+ }
+
+ function loadSwiper(dlg) {
+
+ if (currentOptions.slides) {
+ dlg.querySelector('.swiper-wrapper').innerHTML = currentOptions.slides.map(getSwiperSlideHtmlFromSlide).join('');
+ } else {
+ dlg.querySelector('.swiper-wrapper').innerHTML = currentOptions.items.map(getSwiperSlideHtmlFromItem).join('');
+ }
+
+ require(['swiper'], function (swiper) {
+
+ swiperInstance = new Swiper(dlg.querySelector('.slideshowSwiperContainer'), {
+ // Optional parameters
+ direction: 'horizontal',
+ loop: true,
+ autoplay: options.interval || 8000,
+ // Disable preloading of all images
+ preloadImages: false,
+ // Enable lazy loading
+ lazyLoading: true,
+ autoplayDisableOnInteraction: false,
+ initialSlide: options.startIndex || 0
+ });
+
+ if (browser.mobile) {
+ pause();
+ } else {
+ play();
+ }
+ });
+ }
+
+ function getSwiperSlideHtmlFromItem(item) {
+
+ return getSwiperSlideHtmlFromSlide({
+ imageUrl: getImgUrl(item)
+ //title: item.Name,
+ //description: item.Overview
+ });
+ }
+
+ function getSwiperSlideHtmlFromSlide(item) {
+
+ var html = '';
+ html += '';
+ html += '
';
+ //html += '
';
+ if (item.title || item.subtitle) {
+ html += '
';
+ html += '
';
+ if (item.title) {
+ html += '
';
+ html += item.title;
+ html += '
';
+ }
+ if (item.description) {
+ html += '
';
+ html += item.description;
+ html += '
';
+ }
+ html += '
';
+ html += '
';
+ }
+ html += '
';
+
+ return html;
+ }
+
+ function previousImage() {
+ if (swiperInstance) {
+ swiperInstance.slidePrev();
+ } else {
+ stopInterval();
+ showNextImage(currentIndex - 1);
+ }
+ }
+
+ function nextImage() {
+ if (swiperInstance) {
+ swiperInstance.slideNext();
+ } else {
+ stopInterval();
+ showNextImage(currentIndex + 1);
+ }
+ }
+
+ function play() {
+
+ dlg.querySelector('.btnSlideshowPause').icon = "slideshow:pause";
+ swiperInstance.startAutoplay();
+ }
+
+ function pause() {
+
+ dlg.querySelector('.btnSlideshowPause').icon = "slideshow:play-arrow";
+ swiperInstance.stopAutoplay();
+ }
+
+ function playPause() {
+
+ var paused = dlg.querySelector('.btnSlideshowPause').icon != "slideshow:pause";
+ if (paused) {
+ play();
+ } else {
+ pause();
+ }
+ }
+
+ function onDialogClosed() {
+
+ var swiper = swiperInstance;
+ if (swiper) {
+ swiper.destroy(true, true);
+ swiperInstance = null;
+ }
+
+ inputmanager.off(window, onInputCommand);
+ }
+
+ var currentTimeout;
+ var currentIntervalMs;
+ var currentOptions;
+ var currentIndex;
+
+ function startInterval(options) {
+
+ currentOptions = options;
+
+ stopInterval();
+ createElements(options);
+
+ if (!options.interactive) {
+ currentIntervalMs = options.interval || 8000;
+ showNextImage(options.startIndex || 0, true);
+ }
+ }
+
+ function getImgUrl(item) {
+
+ var apiClient = connectionManager.getApiClient(item.ServerId);
+ if (item.BackdropImageTags && item.BackdropImageTags.length) {
+ return getBackdropImageUrl(item, {
+ maxWidth: screen.availWidth
+ }, apiClient);
+ } else {
+ return getImageUrl(item, {
+ type: "Primary",
+ maxWidth: screen.availWidth
+ }, apiClient);
+ }
+ }
+
+ function getBackdropImageUrl(item, options, apiClient) {
+
+ options = options || {};
+ options.type = options.type || "Backdrop";
+
+ options.width = null;
+ delete options.width;
+ options.maxWidth = null;
+ delete options.maxWidth;
+ options.maxHeight = null;
+ delete options.maxHeight;
+ options.height = null;
+ delete options.height;
+
+ // If not resizing, get the original image
+ if (!options.maxWidth && !options.width && !options.maxHeight && !options.height) {
+ options.quality = 100;
+ options.format = 'jpg';
+ }
+
+ if (item.BackdropImageTags && item.BackdropImageTags.length) {
+
+ options.tag = item.BackdropImageTags[0];
+ return apiClient.getScaledImageUrl(item.Id, options);
+ }
+
+ return null;
+ }
+
+ function getImageUrl(item, options, apiClient) {
+
+ options = options || {};
+ options.type = options.type || "Primary";
+
+ if (typeof (item) === 'string') {
+ return apiClient.getScaledImageUrl(item, options);
+ }
+
+ if (item.ImageTags && item.ImageTags[options.type]) {
+
+ options.tag = item.ImageTags[options.type];
+ return apiClient.getScaledImageUrl(item.Id, options);
+ }
+
+ if (options.type == 'Primary') {
+ if (item.AlbumId && item.AlbumPrimaryImageTag) {
+
+ options.tag = item.AlbumPrimaryImageTag;
+ return apiClient.getScaledImageUrl(item.AlbumId, options);
+ }
+
+ //else if (item.AlbumId && item.SeriesPrimaryImageTag) {
+
+ // imgUrl = ApiClient.getScaledImageUrl(item.SeriesId, {
+ // type: "Primary",
+ // width: downloadWidth,
+ // tag: item.SeriesPrimaryImageTag,
+ // minScale: minScale
+ // });
+
+ //}
+ //else if (item.ParentPrimaryImageTag) {
+
+ // imgUrl = ApiClient.getImageUrl(item.ParentPrimaryImageItemId, {
+ // type: "Primary",
+ // width: downloadWidth,
+ // tag: item.ParentPrimaryImageTag,
+ // minScale: minScale
+ // });
+ //}
+ }
+
+ return null;
+ }
+
+ function showNextImage(index, skipPreload) {
+
+ index = Math.max(0, index);
+ if (index >= currentOptions.items.length) {
+ index = 0;
+ }
+ currentIndex = index;
+
+ var options = currentOptions;
+ var items = options.items;
+ var item = items[index];
+ var imgUrl = getImgUrl(item);
+
+ var onSrcLoaded = function () {
+ var cardImageContainer = dlg.querySelector('.slideshowImage');
+
+ var newCardImageContainer = document.createElement('div');
+ newCardImageContainer.className = cardImageContainer.className;
+
+ if (options.cover) {
+ newCardImageContainer.classList.add('cover');
+ }
+
+ newCardImageContainer.style.backgroundImage = "url('" + imgUrl + "')";
+ newCardImageContainer.classList.add('hide');
+ cardImageContainer.parentNode.appendChild(newCardImageContainer);
+
+ if (options.showTitle) {
+ dlg.querySelector('.slideshowImageText').innerHTML = item.Name;
+ } else {
+ dlg.querySelector('.slideshowImageText').innerHTML = '';
+ }
+
+ newCardImageContainer.classList.remove('hide');
+ var onAnimationFinished = function () {
+
+ var parentNode = cardImageContainer.parentNode;
+ if (parentNode) {
+ parentNode.removeChild(cardImageContainer);
+ }
+ };
+
+ if (newCardImageContainer.animate) {
+
+ var keyframes = [
+ { opacity: '0', offset: 0 },
+ { opacity: '1', offset: 1 }];
+ var timing = { duration: 1200, iterations: 1 };
+ newCardImageContainer.animate(keyframes, timing).onfinish = onAnimationFinished;
+ } else {
+ onAnimationFinished();
+ }
+
+ stopInterval();
+ currentTimeout = setTimeout(function () {
+ showNextImage(index + 1, true);
+
+ }, currentIntervalMs);
+ };
+
+ if (!skipPreload) {
+ var img = new Image();
+ img.onload = onSrcLoaded;
+ img.src = imgUrl;
+ } else {
+ onSrcLoaded();
+ }
+ }
+
+ function stopInterval() {
+ if (currentTimeout) {
+ clearTimeout(currentTimeout);
+ currentTimeout = null;
+ }
+ }
+
+ function onInputCommand(e) {
+
+ switch (e.detail.command) {
+
+ case 'left':
+ previousImage();
+ break;
+ case 'right':
+ nextImage();
+ break;
+ case 'play':
+ play();
+ break;
+ case 'pause':
+ pause();
+ break;
+ case 'playpause':
+ playPause();
+ break;
+ default:
+ return
+ break;
+ }
+
+ e.preventDefault();
+ }
+
+ self.show = function () {
+ startInterval(options);
+ };
+
+ self.hide = function () {
+
+ var dialog = dlg;
+ if (dialog) {
+
+ paperdialoghelper.close(dialog);
+ }
+ };
+ }
+});
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/emby-webcomponents/slideshow/style.css b/dashboard-ui/bower_components/emby-webcomponents/slideshow/style.css
new file mode 100644
index 0000000000..370f0291e0
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/slideshow/style.css
@@ -0,0 +1,104 @@
+.slideshowImage, .slideshowSwiperContainer {
+ position: fixed;
+ top: 0;
+ right: 0;
+ left: 0;
+ bottom: 0;
+ z-index: 1001;
+ background-position: center center;
+ background-size: contain;
+ background-repeat: no-repeat;
+ margin: 0 !important;
+ color: #fff;
+}
+
+ .slideshowImage.cover {
+ background-size: cover;
+ }
+
+.slideshowImageText {
+ position: fixed;
+ bottom: .25em;
+ right: .5em;
+ color: #fff;
+ z-index: 1002;
+ font-weight: 400;
+}
+
+.swiper-slide {
+ background: #000;
+}
+
+ .swiper-slide img {
+ width: auto;
+ height: auto;
+ max-width: 100%;
+ max-height: 100%;
+ -ms-transform: translate(-50%, -50%);
+ -webkit-transform: translate(-50%, -50%);
+ -moz-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ }
+
+.btnSlideshowExit {
+ z-index: 1002;
+ position: absolute;
+ top: 1%;
+ left: .5%;
+ width: 6vh;
+ height: 6vh;
+ color: #eee;
+}
+
+.slideshowControlBar {
+ position: fixed;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ z-index: 1002;
+ background: rgba(0,0,0,.5);
+ text-align: center;
+ color: #eee;
+}
+
+.mouseIdle .btnSlideshowExit {
+ display: none;
+}
+
+.mouseIdle .slideshowControlBar {
+ transform: translateY(100%);
+ transition: transform 600ms ease-out;
+}
+
+.slideshowButton {
+ width: 8vh;
+ height: 8vh;
+}
+
+.slideText {
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 10vh;
+ text-align: center;
+}
+
+.slideTextInner {
+ margin: 0 auto;
+ max-width: 60%;
+ background: rgba(0,0,0,.8);
+ display: inline-block;
+ padding: .5em 1em;
+ border-radius: .25em;
+}
+
+.slideTitle {
+ font-size: 180%;
+}
+
+.slideSubtitle {
+ color: #ccc;
+}
diff --git a/dashboard-ui/bower_components/iron-meta/.bower.json b/dashboard-ui/bower_components/iron-meta/.bower.json
index e1304d174b..f4bfef4a7c 100644
--- a/dashboard-ui/bower_components/iron-meta/.bower.json
+++ b/dashboard-ui/bower_components/iron-meta/.bower.json
@@ -26,14 +26,14 @@
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
},
"main": "iron-meta.html",
- "homepage": "https://github.com/PolymerElements/iron-meta",
+ "homepage": "https://github.com/polymerelements/iron-meta",
"_release": "1.1.1",
"_resolution": {
"type": "version",
"tag": "v1.1.1",
"commit": "e171ee234b482219c9514e6f9551df48ef48bd9f"
},
- "_source": "git://github.com/PolymerElements/iron-meta.git",
+ "_source": "git://github.com/polymerelements/iron-meta.git",
"_target": "^1.0.0",
- "_originalSource": "PolymerElements/iron-meta"
+ "_originalSource": "polymerelements/iron-meta"
}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/iron-selector/.bower.json b/dashboard-ui/bower_components/iron-selector/.bower.json
index d583d34022..aa1f383231 100644
--- a/dashboard-ui/bower_components/iron-selector/.bower.json
+++ b/dashboard-ui/bower_components/iron-selector/.bower.json
@@ -36,7 +36,7 @@
"tag": "v1.1.0",
"commit": "abd9ee7c29f0aae7b583abfe0af9db7f2555eabf"
},
- "_source": "git://github.com/PolymerElements/iron-selector.git",
+ "_source": "git://github.com/polymerelements/iron-selector.git",
"_target": "^1.0.0",
- "_originalSource": "PolymerElements/iron-selector"
+ "_originalSource": "polymerelements/iron-selector"
}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/paper-ripple/.bower.json b/dashboard-ui/bower_components/paper-ripple/.bower.json
index 2f654d71c6..157225ee71 100644
--- a/dashboard-ui/bower_components/paper-ripple/.bower.json
+++ b/dashboard-ui/bower_components/paper-ripple/.bower.json
@@ -32,14 +32,14 @@
"iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0"
},
"ignore": [],
- "homepage": "https://github.com/polymerelements/paper-ripple",
+ "homepage": "https://github.com/PolymerElements/paper-ripple",
"_release": "1.0.5",
"_resolution": {
"type": "version",
"tag": "v1.0.5",
"commit": "d72e7a9a8ab518b901ed18dde492df3b87a93be5"
},
- "_source": "git://github.com/polymerelements/paper-ripple.git",
+ "_source": "git://github.com/PolymerElements/paper-ripple.git",
"_target": "^1.0.0",
- "_originalSource": "polymerelements/paper-ripple"
+ "_originalSource": "PolymerElements/paper-ripple"
}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/swipebox/.bower.json b/dashboard-ui/bower_components/swipebox/.bower.json
deleted file mode 100644
index 49613cab0f..0000000000
--- a/dashboard-ui/bower_components/swipebox/.bower.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "name": "swipebox",
- "version": "1.4.1",
- "main": "src/js/jquery.swipebox.js",
- "ignore": [],
- "homepage": "https://github.com/brutaldesign/swipebox",
- "_release": "1.4.1",
- "_resolution": {
- "type": "version",
- "tag": "1.4.1",
- "commit": "80c68575772aacfbcffe4203a9f0ad57d4db8a62"
- },
- "_source": "git://github.com/brutaldesign/swipebox.git",
- "_target": "~1.4.1",
- "_originalSource": "swipebox",
- "_direct": true
-}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/swipebox/.gitattributes b/dashboard-ui/bower_components/swipebox/.gitattributes
deleted file mode 100644
index dfe0770424..0000000000
--- a/dashboard-ui/bower_components/swipebox/.gitattributes
+++ /dev/null
@@ -1,2 +0,0 @@
-# Auto detect text files and perform LF normalization
-* text=auto
diff --git a/dashboard-ui/bower_components/swipebox/.gitignore b/dashboard-ui/bower_components/swipebox/.gitignore
deleted file mode 100644
index 733be0a119..0000000000
--- a/dashboard-ui/bower_components/swipebox/.gitignore
+++ /dev/null
@@ -1,20 +0,0 @@
-# Ignore dist
-dist/
-stage/
-
-# Ignore demo scss
-demo/scss/
-
-# Ignore grunt stuff
-**/.sass-cache
-**/.grunt
-**/node_modules
-
-# Windows image file caches
-Thumbs.db
-
-# Folder config file
-Desktop.ini
-
-# Mac crap
-.DS_Store
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/swipebox/bower.json b/dashboard-ui/bower_components/swipebox/bower.json
deleted file mode 100644
index 8a5c3dea17..0000000000
--- a/dashboard-ui/bower_components/swipebox/bower.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "name": "swipebox",
- "version": "1.4.1",
- "main": "src/js/jquery.swipebox.js",
- "ignore": []
-}
diff --git a/dashboard-ui/bower_components/swipebox/demo/bagpakk.min.css b/dashboard-ui/bower_components/swipebox/demo/bagpakk.min.css
deleted file mode 100644
index fd6db6fb61..0000000000
--- a/dashboard-ui/bower_components/swipebox/demo/bagpakk.min.css
+++ /dev/null
@@ -1 +0,0 @@
-/*! Bagpakk v1.0.0b | Constantin Saguin csag.co | MIT License | github.com/brutaldesign/bagpakk */*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.centered,.clear,.clearfix,.pagination ul.page-numbers,.small-width,.wrap,blockquote,hr{zoom:1}.centered:after,.centered:before,.clear:after,.clear:before,.clearfix:after,.clearfix:before,.pagination ul.page-numbers:after,.pagination ul.page-numbers:before,.small-width:after,.small-width:before,.wrap:after,.wrap:before,blockquote:after,blockquote:before,hr:after,hr:before{content:"";display:table}.centered:after,.clear:after,.clearfix:after,.pagination ul.page-numbers:after,.small-width:after,.wrap:after,blockquote:after,hr:after{clear:both}html{height:100%;max-height:100%;overflow-x:hidden!important}body{overflow-x:hidden!important;overflow-y:auto}article,aside,details,div,figcaption,figure,footer,header,hgroup,main,nav,section,summary{-ms-word-wrap:break-word;word-wrap:break-word}a>img{-webkit-backface-visibility:hidden;-webkit-transition:opacity .2s;-moz-transition:opacity .2s;-ms-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}a>img:hover{opacity:.8}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-justify{text-align:justify}.left{float:left}.right{float:right}.caption{opacity:.8}.centered,.small-width,blockquote{margin-left:auto!important;margin-right:auto!important;display:block;float:none!important}.no-margin{margin:0!important}.no-padding{padding:0!important}.no-border,.no-border img{border:none!important}.table{display:table}.table .table-cell{display:table-cell;vertical-align:middle}ul.inline-list li{display:inline;margin:0 1rem;list-style-type:none!important}.wrap{margin:0 auto;max-width:1140px;width:92%}.hero{font-size:1.1rem;padding:6rem 0}.container{padding:4.2358rem 0}.small-width{max-width:740px}.font-color-alt{color:#f2f2f2}.font-color-alt a,.font-color-alt h1,.font-color-alt h2,.font-color-alt h3,.font-color-alt h4,.font-color-alt h5,.font-color-alt h6{color:#fff}.box-emboss{background:rgba(0,0,0,.05);-webkit-box-shadow:rgba(255,255,255,.5)0 1px 0,inset rgba(0,0,0,.05)0 1px 0;-moz-box-shadow:rgba(255,255,255,.5)0 1px 0,inset rgba(0,0,0,.05)0 1px 0;box-shadow:rgba(255,255,255,.5)0 1px 0,inset rgba(0,0,0,.05)0 1px 0}.col-1,.col-10,.col-11,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9{width:100%;margin-bottom:3rem}.site-footer{padding:5rem 0;background:#393939;color:#767676}.site-footer h1,.site-footer h2,.site-footer h3,.site-footer h4,.site-footer h5,.site-footer h6{color:#767676}.site-footer a{color:#b6b6b6;text-decoration:none}.site-footer a:hover{color:#4bbd93}.gist{margin:1.618em 0}.gist a{border:none!important}table{border-collapse:collapse;border-spacing:0;font-size:1.618rem;line-height:2;margin:0 0 1.5em;width:100%}caption,td,th{font-weight:400;text-align:left}caption{font-size:1em;margin:.5em 0}th{font-weight:700;text-transform:uppercase}td{border-bottom:2px solid rgba(0,0,0,.05);padding:.5rem .5rem .5rem 0}.gist table{margin-bottom:0}.gist table td{border-bottom:none}html{font-size:62.5%}body{background:#fff;color:#666;font-size:1.8rem;line-height:1.7;font-family:Georgia,serif}a{color:#4bbd93}a:focus{outline:0}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:#333}h1 a:hover,h2 a:hover,h3 a:hover,h4 a:hover,h5 a:hover,h6 a:hover{color:#4bbd93}i{-webkit-backface-visibility:hidden}h1,h2,h3,h4,h5{font-family:Helvetica,Arial,sans-serif}h1,h2,h3,h4,h5,h6{font-weight:700;text-rendering:optimizeLegibility;line-height:1.618;margin-top:0;margin-bottom:1rem}h1,h2,h3,h4{color:#333}h1,h2{font-size:3rem;line-height:1.1em}h3{font-size:2.8rem}h4{font-size:2.3rem}h5{font-size:2.5rem}h6{font-size:2rem}ol,p,ul{margin:0 0 1.618rem}.dropcap:first-letter{color:#333;font-size:6rem;margin-top:-1.618rem;margin-right:1.3rem;margin-bottom:0;float:left}hr{display:block;border:none;height:4px;background:rgba(0,0,0,.05);margin:4rem auto;width:100%}blockquote{font-size:1.1em;font-style:italic;max-width:740px;color:#333;font-family:Georgia,serif;margin:1em 0 1.618em -2.2em;padding:0 0 0 1em;border-left:rgba(0,0,0,.05).5em solid}blockquote p{margin:.8em 0;font-style:italic}blockquote .small,blockquote small{display:inline-block;margin:.8em 0 .8em 1.5em;font-size:.9em;color:#ccc}cite{font-size:.8em;font-weight:400;display:inline-block;width:100%;font-style:normal}cite:before{content:'\2014 \00A0'}.small,small{font-size:.9em}ol,ul{margin:0;padding:0;margin-bottom:1.5em;margin-left:1em}ul li{list-style-type:square}code,pre{font:.7em "andale mono","lucida console",monospace;line-height:1.618;color:#333}code{margin:0 .5em;background:#FFF;line-height:1em;display:inline;padding:.5em}pre{-ms-word-wrap:normal;word-wrap:normal;background:#FFF;padding:.5em 1em;overflow-x:auto;overflow-y:hidden;margin:1.618em 0 3em;border:1px solid rgba(0,0,0,.1)}pre span{color:green}address{margin-bottom:.875rem}address p{margin-bottom:0}abbr[title],acronym[title]{border-bottom:1px dotted;cursor:help}dt{font-weight:700;text-decoration:underline}dd{margin:0;padding:0 0 .5rem}.big{font-size:3em}.pagination{margin:2rem 0}.pagination ul.page-numbers{font-family:Helvetica,Arial,sans-serif;margin-left:0}.pagination ul.page-numbers li{list-style-type:none;display:inline-block}.pagination ul.page-numbers li .page-numbers{font-size:15px;line-height:27px;position:relative;color:#333!important;font-weight:700;float:left;cursor:pointer;display:inline-block;height:28px;width:28px;margin:10px 5px 10px 0;text-align:center;text-shadow:none;text-decoration:none!important;border:none;border:solid 1px rgba(0,0,0,.08)}.pagination ul.page-numbers li .page-numbers:hover{opacity:.7}.pagination ul.page-numbers li .page-numbers.current{color:#fff!important;background-color:#4bbd93!important;border:solid 1px #4bbd93;opacity:1}.pagination ul.page-numbers li .page-numbers.dots{opacity:1!important;background:0 0;border:none}.pagination ul.page-numbers li .page-numbers.next,.pagination ul.page-numbers li .page-numbers.prev{line-height:25px}@font-face{font-family:icomoon;src:url(fonts/icomoon.eot);src:url(fonts/icomoon.eot?#iefix) format("embedded-opentype"),url(fonts/icomoon.svg#icomoon) format("svg"),url(fonts/icomoon.woff) format("woff"),url(fonts/icomoon.ttf) format("truetype");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-weight:400!important;font-style:normal!important;text-decoration:none!important;border:none!important;display:inline-block;width:auto;height:auto;vertical-align:middle;background-image:none!important;background-position:0 0;background-repeat:repeat;position:relative;margin-bottom:1rem}.icon-align-left,.icon-align-right{margin-bottom:5px}.icon-align-left{float:left;margin-right:10px}.icon-align-right{float:right;margin-left:10px}.icon-align-center{display:block;margin-left:auto;margin-right:auto;text-align:center;margin-bottom:1.618em}.icon-align-none{display:inline-block;margin:.1em .3em}[class*=" icon-"]:before,[class^=icon-]:before{display:inline-block;vertical-align:baseline;speak:none;line-height:1;color:#333}.icon-1x{position:relative;font-size:1em}.icon-1x.icon-align-left{margin-top:11px;margin-right:11px}.icon-1x.icon-align-right{margin-top:11px;margin-left:11px}.icon-1x.icon-type-round{border-radius:1em}.icon-2x{position:relative;font-size:2em}.icon-2x.icon-align-left{margin-top:12px;margin-right:12px}.icon-2x.icon-align-right{margin-top:12px;margin-left:12px}.icon-2x.icon-type-round{border-radius:2em}.icon-3x{position:relative;font-size:3em}.icon-3x.icon-align-left{margin-top:13px;margin-right:13px}.icon-3x.icon-align-right{margin-top:13px;margin-left:13px}.icon-3x.icon-type-round{border-radius:3em}.icon-4x{position:relative;font-size:4em}.icon-4x.icon-align-left{margin-top:14px;margin-right:14px}.icon-4x.icon-align-right{margin-top:14px;margin-left:14px}.icon-4x.icon-type-round{border-radius:4em}.icon-5x{position:relative;font-size:5em}.icon-5x.icon-align-left{margin-top:15px;margin-right:15px}.icon-5x.icon-align-right{margin-top:15px;margin-left:15px}.icon-5x.icon-type-round{border-radius:5em}.icon-6x{position:relative;font-size:6em}.icon-6x.icon-align-left{margin-top:16px;margin-right:16px}.icon-6x.icon-align-right{margin-top:16px;margin-left:16px}.icon-6x.icon-type-round{border-radius:6em}.icon-7x{position:relative;font-size:7em}.icon-7x.icon-align-left{margin-top:17px;margin-right:17px}.icon-7x.icon-align-right{margin-top:17px;margin-left:17px}.icon-7x.icon-type-round{border-radius:7em}.icon-8x{position:relative;font-size:8em}.icon-8x.icon-align-left{margin-top:18px;margin-right:18px}.icon-8x.icon-align-right{margin-top:18px;margin-left:18px}.icon-8x.icon-type-round{border-radius:8em}.icon-9x{position:relative;font-size:9em}.icon-9x.icon-align-left{margin-top:19px;margin-right:19px}.icon-9x.icon-align-right{margin-top:19px;margin-left:19px}.icon-9x.icon-type-round{border-radius:9em}.icon-10x{position:relative;font-size:10em}.icon-10x.icon-align-left{margin-top:110px;margin-right:110px}.icon-10x.icon-align-right{margin-top:110px;margin-left:110px}.icon-10x.icon-type-round{border-radius:10em}.icon-type-round,.icon-type-square{background:#333;padding:1em}.icon-type-round:before,.icon-type-square:before{color:#fff;margin-top:-.5em;margin-left:-1em;width:100%;text-align:center;position:absolute;top:50%;left:50%}.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}[class*=" icon-"],[class^=icon-]{font-family:icomoon;speak:none;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-pinterest:before{content:"\e600"}.icon-facebook:before{content:"\e601"}.icon-twitter:before{content:"\e602"}.icon-tumblr:before{content:"\e603"}.icon-soundcloud:before{content:"\e604"}.icon-skype:before{content:"\e605"}.icon-deviantart:before{content:"\e606"}.icon-forrst:before{content:"\e607"}.icon-dribbble:before{content:"\e608"}.icon-flickr:before{content:"\e609"}.icon-vimeo:before{content:"\e60a"}.icon-lastfm:before{content:"\e60b"}.icon-stackoverflow:before{content:"\e60c"}.icon-feed:before{content:"\e60d"}.icon-css3:before{content:"\e60e"}.icon-html5:before{content:"\e60f"}.icon-chrome:before{content:"\e610"}.icon-firefox:before{content:"\e611"}.icon-IE:before{content:"\e612"}.icon-opera:before{content:"\e613"}.icon-safari:before{content:"\e614"}.icon-googleplus:before{content:"\e615"}.icon-github:before{content:"\e616"}.icon-stumbleupon:before{content:"\e617"}.icon-foursquare:before{content:"\e618"}.icon-paypal:before{content:"\e619"}.icon-pencil:before{content:"\e61a"}.icon-pen:before{content:"\e61b"}.icon-droplet:before{content:"\e61c"}.icon-music:before{content:"\e61d"}.icon-play:before{content:"\e61e"}.icon-camera:before{content:"\e61f"}.icon-film:before{content:"\e620"}.icon-folder-open:before{content:"\e621"}.icon-tag:before{content:"\e622"}.icon-tags:before{content:"\e623"}.icon-cart:before{content:"\e624"}.icon-support:before{content:"\e625"}.icon-phone:before{content:"\e626"}.icon-envelope:before{content:"\e627"}.icon-pushpin:before{content:"\e628"}.icon-clock:before{content:"\e629"}.icon-calendar:before{content:"\e62a"}.icon-print:before{content:"\e62b"}.icon-settings:before{content:"\e62c"}.icon-home:before{content:"\e62e"}.icon-image:before{content:"\e62f"}.icon-images:before{content:"\e630"}.icon-camera2:before{content:"\e631"}.icon-bullhorn:before{content:"\e632"}.icon-books:before{content:"\e633"}.icon-library:before{content:"\e634"}.icon-file:before{content:"\e635"}.icon-profile:before{content:"\e636"}.icon-ticket:before{content:"\e637"}.icon-location:before{content:"\e638"}.icon-screen:before{content:"\e639"}.icon-laptop:before{content:"\e63a"}.icon-mobile:before{content:"\e63b"}.icon-mobile2:before{content:"\e63c"}.icon-tablet:before{content:"\e63d"}.icon-spinner:before{content:"\e63e"}.icon-spinner2:before{content:"\e63f"}.icon-spinner3:before{content:"\e640"}.icon-zoomin:before{content:"\e641"}.icon-zoomout:before{content:"\e642"}.icon-expand:before{content:"\e643"}.icon-reply:before{content:"\e644"}.icon-forward:before{content:"\e645"}.icon-bubbles:before{content:"\e646"}.icon-bubble:before{content:"\e647"}.icon-user:before{content:"\e648"}.icon-users:before{content:"\e649"}.icon-quotes-left:before{content:"\e64a"}.icon-search:before{content:"\e64b"}.icon-binoculars:before{content:"\e64c"}.icon-key:before{content:"\e64d"}.icon-lock:before{content:"\e64e"}.icon-unlocked:before{content:"\e64f"}.icon-cogs:before{content:"\e650"}.icon-cog:before{content:"\e651"}.icon-bug:before{content:"\e652"}.icon-stats:before{content:"\e653"}.icon-glass:before{content:"\e654"}.icon-mug:before{content:"\e655"}.icon-rocket:before{content:"\e656"}.icon-meter:before{content:"\e657"}.icon-fire:before{content:"\e658"}.icon-lab:before{content:"\e659"}.icon-remove:before{content:"\e65a"}.icon-truck:before{content:"\e65b"}.icon-powercord:before{content:"\e65c"}.icon-list:before{content:"\e65d"}.icon-numbered-list:before{content:"\e65e"}.icon-menu:before{content:"\e65f"}.icon-tree:before{content:"\e660"}.icon-cloud-download:before{content:"\e661"}.icon-cloud-upload:before{content:"\e662"}.icon-earth:before{content:"\e663"}.icon-link:before{content:"\e664"}.icon-flag:before{content:"\e665"}.icon-attachment:before{content:"\e666"}.icon-eye:before{content:"\e667"}.icon-bookmark:before{content:"\e668"}.icon-heart:before{content:"\e669"}.icon-heart2:before{content:"\e66a"}.icon-smiley:before{content:"\e66b"}.icon-sad:before{content:"\e66c"}.icon-tongue:before{content:"\e66d"}.icon-happy:before{content:"\e66e"}.icon-shocked:before{content:"\e66f"}.icon-confused:before{content:"\e670"}.icon-neutral:before{content:"\e671"}.icon-wondering:before{content:"\e672"}.icon-wink:before{content:"\e673"}.icon-cool:before{content:"\e674"}.icon-grin:before{content:"\e675"}.icon-angry:before{content:"\e676"}.icon-evil:before{content:"\e677"}.icon-info:before{content:"\e678"}.icon-warning:before{content:"\e679"}.icon-checkmark:before{content:"\e67a"}.icon-close:before{content:"\e67b"}.icon-minus:before{content:"\e67c"}.icon-plus:before{content:"\e67d"}.icon-enter:before{content:"\e67e"}.icon-exit:before{content:"\e67f"}.icon-volume-medium:before{content:"\e680"}.icon-loop:before{content:"\e681"}.icon-loop2:before{content:"\e682"}.icon-shuffle:before{content:"\e683"}.icon-loop3:before{content:"\e684"}.icon-crop:before{content:"\e685"}.icon-console:before{content:"\e686"}.icon-share:before{content:"\e687"}.icon-google-drive:before{content:"\e688"}.icon-youtube:before{content:"\e689"}.icon-picassa:before{content:"\e68a"}.icon-steam:before{content:"\e68b"}.icon-wordpress:before{content:"\e68c"}.icon-joomla:before{content:"\e68d"}.icon-yahoo:before{content:"\e68e"}.icon-apple:before{content:"\e68f"}.icon-code:before{content:"\e690"}.icon-embed:before{content:"\e691"}.icon-newtab:before{content:"\e692"}.icon-file-pdf:before{content:"\e693"}.icon-file-word:before{content:"\e694"}.icon-yelp:before{content:"\e695"}.icon-file-zip:before{content:"\e696"}.icon-file-xml:before{content:"\e697"}.icon-file-css:before{content:"\e698"}.icon-file-excel:before{content:"\e699"}.icon-delicious:before{content:"\e69a"}.icon-font:before{content:"\e62d"}.icon-thumbs-up:before{content:"\e69b"}.icon-thumbs-down:before{content:"\e69c"}.icon-camera-retro:before{content:"\e69d"}.icon-star:before{content:"\e69e"}.icon-star-empty:before{content:"\e69f"}.icon-youtube2:before{content:"\e6a0"}.icon-windows:before{content:"\e6a1"}.icon-android:before{content:"\e6a2"}.icon-dropbox:before{content:"\e6a3"}.icon-anchor:before{content:"\e6a4"}.icon-euro:before{content:"\e6a5"}.icon-gbp:before{content:"\e6a6"}.icon-dollar:before{content:"\e6a7"}.icon-yen:before{content:"\e6a8"}.icon-shield:before{content:"\e6a9"}.icon-linkedin:before{content:"\e6aa"}.icon-coffee:before{content:"\e6ab"}.icon-code-fork:before{content:"\e6ac"}.icon-magic:before{content:"\e6ad"}.icon-credit:before{content:"\e6ae"}.icon-legal:before{content:"\e6af"}.icon-medkit:before{content:"\e6b0"}.icon-beer:before{content:"\e6b1"}.icon-sun:before{content:"\e6b2"}.icon-moon:before{content:"\e6b3"}.icon-money:before{content:"\e6b4"}.icon-right-arrow:before{content:"\e04b"}.icon-top-arrow:before{content:"\e04c"}.icon-bottom-arrow:before{content:"\e04d"}.icon-left-arrow:before{content:"\e04a"}.icon-spotify:before{content:"\e045"}.icon-behance:before{content:"\e055"}.icon-digg:before{content:"\e054"}.icon-evernote:before{content:"\e053"}.icon-app-store:before{content:"\e056"}.icon-500px:before{content:"\e059"}.icon-amazon:before{content:"\e058"}.icon-grooveshark:before{content:"\e052"}.icon-myspace:before{content:"\e051"}.icon-zerply:before{content:"\e050"}.icon-amp:before{content:"\e01d"}.icon-quote-top:before{content:"\e002"}.icon-quote-bottom:before{content:"\e003"}.icon-instagram:before{content:"\e04f"}.icon-diamond:before{content:"\e6b6"}img{max-width:100%;height:auto}audio,canvas,embed,iframe,object,video{border:none!important;max-width:100%}.fluid-video{display:block;width:100%;margin-bottom:2rem;height:0;padding-bottom:56.25%;overflow:hidden;position:relative}.fluid-video embed,.fluid-video iframe,.fluid-video object,.fluid-video video{width:100%!important;height:100%!important;position:absolute;top:0;left:0}form{margin-top:2rem}input[name=post_password],input[type=email],input[type=password],input[type=search],input[type=tel],input[type=text],select,textarea{max-width:100%!important;font-family:inherit;font-size:inherit;color:#333;line-height:inherit;padding:.5rem .7rem;border:1px solid rgba(0,0,0,.1);border-color:rgba(0,0,0,.3);text-shadow:none}input[name=post_password]:focus,input[type=email]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,select:focus,textarea:focus{outline:0;border-color:rgba(0,0,0,.5)}option,select{padding:.5rem .7rem;min-width:200px}textarea{height:250px}input[type=submit]{margin-left:0!important}input[type=email],input[type=search],input[type=tel],input[type=text],select,textarea{width:100%}input[type=email],input[type=search],input[type=tel],input[type=text],textarea{background:rgba(255,255,255,.9);color:#000}input[type=checkbox],input[type=radio]{margin-left:.1rem;margin-right:.625rem}p label{display:block;margin-bottom:.5rem;width:100%}.button,input[type=submit]{cursor:pointer;outline:0!important;position:relative;opacity:1!important;line-height:1!important;font-style:normal!important;vertical-align:middle;text-shadow:none!important;font-family:Helvetica,Arial,sans-serif;text-align:center;font-weight:700!important;text-decoration:none!important;display:inline-block;letter-spacing:0;color:#fff!important;border:none!important;background-image:none;background-color:#4bbd93;-webkit-border-radius:4px;border-radius:4px;padding:1.618rem 3.236rem;font-size:1.618rem;width:100%;margin-bottom:1.618rem;box-shadow:0 4px 0 #328969;top:-2px}.button:active,.button:focus,.button:hover,input[type=submit]:active,input[type=submit]:focus,input[type=submit]:hover{background-color:#4bbd93}.button:hover,input[type=submit]:hover{top:0;box-shadow:0 2px 0 #328969}.button:active,.button:focus,input[type=submit]:active,input[type=submit]:focus{top:2px;box-shadow:0 0 0 #328969}.button-big{cursor:pointer;outline:0!important;position:relative;opacity:1!important;line-height:1!important;font-style:normal!important;vertical-align:middle;text-shadow:none!important;font-family:Helvetica,Arial,sans-serif;text-align:center;font-weight:700!important;text-decoration:none!important;display:inline-block;letter-spacing:0;color:#fff!important;border:none!important;background-image:none;background-color:#4bbd93;-webkit-border-radius:4px;border-radius:4px;width:100%;margin-bottom:1.618rem;box-shadow:0 6px 0 #328969;top:-3px}.button-big:active,.button-big:focus,.button-big:hover{background-color:#4bbd93}.button-big:hover{top:-1px;box-shadow:0 4px 0 #328969}.button-big:active,.button-big:focus{top:3px;box-shadow:0 0 0 #328969}.button-alt,.button-alt-big,.button-alt-light,.button-alt-light-big{-webkit-transition:all .1s;-moz-transition:all .1s;-ms-transition:all .1s;-o-transition:all .1s;transition:all .1s;cursor:pointer;outline:0!important;position:relative;opacity:1!important;line-height:1!important;font-style:normal!important;vertical-align:middle;text-shadow:none!important;font-family:Helvetica,Arial,sans-serif;text-align:center;font-weight:700!important;text-decoration:none!important;display:inline-block;letter-spacing:0;border:none!important;padding:1.618rem 3.236rem;font-size:1.618rem;width:100%;margin-bottom:1.618rem;color:#666!important;-webkit-border-radius:0;border-radius:0;box-shadow:0 0 0 transparent;background:none!important;border-color:#666!important;border-style:solid!important;border-width:2px!important}.button-alt-big:active,.button-alt-big:focus,.button-alt-big:hover,.button-alt-light-big:active,.button-alt-light-big:focus,.button-alt-light-big:hover,.button-alt-light:active,.button-alt-light:focus,.button-alt-light:hover,.button-alt:active,.button-alt:focus,.button-alt:hover{box-shadow:0 0 transparent;color:#fff!important;background-color:#4bbd93!important;border-color:#4bbd93!important}.button-alt-light-big{border-width:3px!important}.button-alt-light,.button-alt-light-big{color:#fff!important;border-color:#fff!important}.button-alt-light-big:active,.button-alt-light-big:focus,.button-alt-light-big:hover,.button-alt-light:active,.button-alt-light:focus,.button-alt-light:hover{color:#fff!important}.button-alt-big,.button-alt-light-big,.button-big{padding:2.1034rem 4.2068rem;font-size:2.1034rem}@media screen and (min-width:500px){h1{font-size:4.8rem;line-height:1.2em}h2{font-size:3.8rem;line-height:1.2em}h3{font-size:3.3rem}h4{font-size:2.8rem}blockquote{margin-left:1.6em}.button,.button-alt,.button-alt-big,.button-alt-light,.button-alt-light-big,.button-big,input[type=submit]{width:auto}.button,.button-alt,.button-alt-light,.button-alt-light-big,input[type=submit]{margin:.3rem}.button-alt-big,.button-alt-light-big,.button-big{margin:.4rem}input[type=email],input[type=search],input[type=tel],input[type=text],select{width:60%}}@media screen and (min-width:900px){h1{font-size:5rem;line-height:1.2em}h2{font-size:4rem;line-height:1.2em}h3{font-size:3.5rem}h4{font-size:3rem}.container{padding:6.85353rem 0}hr{margin:4rem 0}ol,ul{margin-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9{float:left;position:relative;margin-left:3.236%;margin-right:3.236%;margin-bottom:0}.col-1{width:2.40067%}.col-2{width:11.27333%}.col-3{width:20.146%}.col-4{width:29.01867%}.col-5{width:37.89133%}.col-6{width:46.764%}.col-7{width:55.63667%}.col-8{width:64.50933%}.col-9{width:73.382%}.col-10{width:82.25467%}.col-11{width:91.12733%}.col-12{width:100%}.alpha,.first{margin-left:0!important}.last,.omega{margin-right:0!important}}@media screen and (min-width:1600px){.container{padding:11.08901rem 0}hr{margin:5rem 0}}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/swipebox/demo/fork.png b/dashboard-ui/bower_components/swipebox/demo/fork.png
deleted file mode 100644
index 0edf76c3dd..0000000000
Binary files a/dashboard-ui/bower_components/swipebox/demo/fork.png and /dev/null differ
diff --git a/dashboard-ui/bower_components/swipebox/demo/normalize.css b/dashboard-ui/bower_components/swipebox/demo/normalize.css
deleted file mode 100644
index b14732420e..0000000000
--- a/dashboard-ui/bower_components/swipebox/demo/normalize.css
+++ /dev/null
@@ -1 +0,0 @@
-/*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/swipebox/demo/style.css b/dashboard-ui/bower_components/swipebox/demo/style.css
deleted file mode 100644
index 5e52773d5c..0000000000
--- a/dashboard-ui/bower_components/swipebox/demo/style.css
+++ /dev/null
@@ -1 +0,0 @@
-body{font-family:'Merriweather', serif;border-top:5px solid #4BBD93;overflow-x:hidden !important;background:#FFF;color:#666}body img{opacity:1 !important}h1,h2,h3,h4,h4,h6{font-family:'Raleway', sans-serif}a{text-decoration:none}ol{margin-left:2em;margin-bottom:2em}ul{margin-left:1em;margin-bottom:0}ul ul{margin-left:1em}header h1{margin-top:0;font-size:12rem}.lead{margin-bottom:2em}#fork-this{position:absolute;z-index:1;right:0;top:5px;width:0px;height:0px;border-style:solid;border-width:0 150px 150px 0;border-color:transparent #4BBD93 transparent transparent}#fork-this a{display:block;position:absolute;z-index:10;width:150px;height:150px;top:0;right:-150px;z-index:10;background:url("fork.png") no-repeat 0 0;background-size:150px 150px}#share{margin-bottom:3rem}#share #fb,#share #twitter{display:inline-block}#share #fb{position:relative;top:-8px}.container:nth-child(even){background:whitesmoke}.container:nth-child(odd){background:#fff}#box-container{margin:0;padding:0}.box{list-style-type:none;float:left;margin-bottom:1rem;margin-left:1%;margin-right:1%;width:48%}.box:nth-child(2n+1){clear:both;margin-left:0}.box:nth-child(2n+0){margin-right:0}.box a{display:block;width:100%;height:auto}.box a img{-webkit-back-visibility:hidden;display:block;width:100%;height:auto;vertical-align:bottom}footer{font-size:1.3rem;font-family:"Helvetica neue", Helvetica, Arial, sans-serif;text-align:center;color:#666;margin:2rem 0}footer a{color:#666}@media screen and (max-width: 799px){header h1{font-size:8rem}hr{margin:2rem 0}#fork-this{display:none}#share #fb{top:-8px}.button{margin-left:0;margin-right:0;width:100%}.button{font-size:1.3rem;padding:1.4rem 2rem}}@media screen and (max-width: 410px){header h1{font-size:5rem}.box{width:100%;margin-left:0;margin-right:0}}
diff --git a/dashboard-ui/bower_components/swipebox/grunt/.jshintrc b/dashboard-ui/bower_components/swipebox/grunt/.jshintrc
deleted file mode 100644
index 2039914926..0000000000
--- a/dashboard-ui/bower_components/swipebox/grunt/.jshintrc
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "boss": true,
- "curly": true,
- "eqeqeq": true,
- "eqnull": true,
- "es3": true,
- "expr": true,
- "immed": true,
- "noarg": true,
- "onevar": true,
- "quotmark": "single",
- "trailing": true,
- "undef": true,
- "unused": true,
-
- "browser": true,
-
- "globals": {
- "_": false,
- "Backbone": false,
- "jQuery": false,
- "wp": false
- }
-}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/swipebox/grunt/gruntfile.js b/dashboard-ui/bower_components/swipebox/grunt/gruntfile.js
deleted file mode 100644
index d17f411cc5..0000000000
--- a/dashboard-ui/bower_components/swipebox/grunt/gruntfile.js
+++ /dev/null
@@ -1,168 +0,0 @@
-module.exports = function(grunt) {
-
- // don't forget to update the version in the package.json and bower.json file
-
- // load dependencies
- require('load-grunt-tasks')(grunt);
-
- grunt.initConfig({
-
- version: grunt.file.readJSON('package.json').version,
- pkg: grunt.file.readJSON('package.json'),
-
- // notify cross-OS - see https://github.com/dylang/grunt-notify
- notify: {
-
- scss: {
- options: {
- title: 'SCSS compiled',
- message: 'CSS is in the hood'
- }
- },
-
- js: {
- options: {
- title: 'JS checked and minified',
- message: 'JS is all good'
- }
- },
-
- dist: {
- options: {
- title: 'Project Compiled',
- message: 'All good'
- }
- }
- },
-
- // compile scss
- sass: {
-
- dist:{
- options:{
- style: 'expanded'
- },
-
- files:{
- '../src/css/swipebox.css': '../scss/swipebox.scss',
- }
- },
-
- demo:{
- options:{
- style: 'compressed'
- },
-
- files:{
- '../demo/style.css': '../demo/scss/style.scss',
- }
- }
-
- },
-
- // https://github.com/nDmitry/grunt-autoprefixer
- autoprefixer: {
- options: {
- browsers: ['last 3 versions', 'bb 10', 'android 3']
- },
- no_dest: {
- src: '../src/css/swipebox.css',
- }
- },
-
- // minify css asset files
- cssmin: {
- minify: {
- expand: true,
- cwd: '../src/css/',
- src: ['*.css', '!*.min.css'],
- dest: '../src/css/',
- ext: '.min.css'
- }
- },
-
- // chech our JS
- jshint: {
- options : {
- jshintrc : '.jshintrc'
- },
- all: [ '../src/js/jquery.swipebox.js' ]
- },
-
- // minify JS
- uglify: {
-
- options:{
- banner : '/*! Swipebox v<%= version %> | Constantin Saguin csag.co | MIT License | github.com/brutaldesign/swipebox */\n'
- },
-
- admin: {
- files: {
- '../src/js/jquery.swipebox.min.js': [ '../src/js/jquery.swipebox.js']
- }
- }
- },
-
- // watch it live
- watch: {
- js: {
- files: [ '../src/js/*.js' ],
- tasks: [
- 'jshint',
- 'uglify',
- 'notify:js'
- ],
- },
- scss: {
-
- files: ['../scss/*.scss', '../demo/scss/*.scss'],
- tasks: [
- 'sass',
- 'autoprefixer',
- 'cssmin',
- 'notify:scss'
- ],
- },
-
- css: {
- files: ['*.css']
- },
-
- livereload: {
- files: [ '../src/css/*.css', '../demo/*.css' ],
- options: { livereload: true }
- }
- },
-
-
- } ); // end init config
-
- /**
- * Default task
- */
- grunt.registerTask( 'default', [
- 'sass:dist',
- 'autoprefixer',
- 'cssmin',
- 'jshint',
- 'uglify',
- 'sass:demo',
- 'notify:dist'
- ] );
-
- /**
- * Dev task
- *
- * The main tasks for development
- *
- */
- grunt.registerTask( 'dev', [
- 'sass:dist',
- 'autoprefixer',
- 'cssmin',
- 'jshint',
- 'uglify',
- 'sass:demo',
- 'watch'
- ] );
-};
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/swipebox/grunt/package.json b/dashboard-ui/bower_components/swipebox/grunt/package.json
deleted file mode 100644
index a7675de795..0000000000
--- a/dashboard-ui/bower_components/swipebox/grunt/package.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "grunt-swipebox",
- "version": "1.4.1",
- "description": "A touchable jQuery lightbox",
- "repository": {
- "type": "git",
- "url": "git://github.com/brutaldesign/swipebox.git"
- },
- "license": "MIT",
- "devDependencies": {
- "grunt": "~0.4.5",
- "load-grunt-tasks": "~1.0.0",
- "grunt-contrib-sass": "~0.8.1",
- "grunt-autoprefixer": "~2.0.0",
- "grunt-contrib-cssmin": "~0.10.0",
- "grunt-contrib-jshint": "~0.10.0",
- "grunt-contrib-uglify": "~0.6.0",
- "grunt-contrib-watch": "~0.6.1",
- "grunt-notify": "~0.3.1"
- }
-}
diff --git a/dashboard-ui/bower_components/swipebox/index.html b/dashboard-ui/bower_components/swipebox/index.html
deleted file mode 100644
index c2294071de..0000000000
--- a/dashboard-ui/bower_components/swipebox/index.html
+++ /dev/null
@@ -1,274 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Swipebox | A touchable jQuery lightbox
-
-
-
-
-
-
-
-
-
-
-
-
Swipebox.
-
A touchable jQuery lightbox
-
-
-
-
-
-
-
-
-
-
-
-
-
What is Swipebox ?
-
Swipebox is a jQuery "lightbox" plugin for desktop, mobile and tablet.
-
-
-
Main Features
-
- Swipe gestures for mobile
- Keyboard Navigation for desktop
- CSS transitions with jQuery fallback
- Retina support for UI icons
- Easy CSS customization
-
-
-
-
Compatibility
-
Chrome, Safari, Firefox, Opera, IE9+, IOS4+, Android, windows phone.
-
-
-
-
-
-
-
Basic Usage
-
Javascript
-
-
Include jquery and the swipebox script in your head
tags or right before your body
closing tag.
-
<script src="lib/jquery-2.0.3.js"></script>
-<script src="src/js/jquery.swipebox.js"></script>
-
-
CSS
-
Include the swipebox CSS style in your head
tags.
-
<link rel="stylesheet" href="src/css/swipebox.css">
-
HTML
-
Use a specific class for your links and use the title attribute as caption.
-
<a href="big/image.jpg" class="swipebox" title="My Caption">
-<img src="small/image.jpg" alt="image">
-</a>
-
Fire the plugin
-
Bind the swipebox behaviour on every link with the "swipebox" class.
-
<script type="text/javascript">
-;( function( $ ) {
-
- $( '.swipebox' ).swipebox();
-
-} )( jQuery );
-</script>
-
-
-
-
-
-
-
Advanced
-
-
-
Gallery
-
You can add a rel
attribute to your links to seperate your galleries.
-
-<!-- Gallery 1 -->
-<a rel="gallery-1" href="big/image1.jpg" class="swipebox">
- <img src="small/image1.jpg" alt="image">
-</a>
-<a rel="gallery-1" href="big/image2.jpg" class="swipebox">
- <img src="small/image2.jpg" alt="image">
-</a>
-<!-- Gallery 2 -->
-<a rel="gallery-2" href="big/image3.jpg" class="swipebox">
- <img src="small/image3.jpg" alt="image">
-</a>
-<a rel="gallery-2" href="big/image4.jpg" class="swipebox">
- <img src="small/image4.jpg" alt="image">
-</a>
-
-
-
Video support
-
Simply paste a youtube or vimeo video URL in your href attribute. The script will automatically check if it's a youtube or vimeo URL and open the video in the swipebox.
-
- My Video
-
-
<a class="swipebox-video" rel="vimeo" href="http://vimeo.com/29193046">My Videos</a>
-
-
-
Load slides dynamically
-
You can set your gallery dynamically by passing an array object to the swipebox.
-
View gallery
-
-
-$( '#gallery' ).click( function( e ) {
- e.preventDefault();
- $.swipebox( [
- { href:'big/image1.jpg', title:'My Caption' },
- { href:'big/image2.jpg', title:'My Second Caption' }
- ] );
-} );
-
-
Check open state
-
if ( $.swipebox.isOpen ) {
- // do stuff
-}
-
-
-
Options
-
-<script type="text/javascript">
-;( function( $ ) {
-
- $( '.swipebox' ).swipebox( {
- useCSS : true, // false will force the use of jQuery for animations
- useSVG : true, // false to force the use of png for buttons
- initialIndexOnArray : 0, // which image index to init when a array is passed
- hideCloseButtonOnMobile : false, // true will hide the close button on mobile devices
- hideBarsDelay : 3000, // delay before hiding bars on desktop
- videoMaxWidth : 1140, // videos max width
- beforeOpen: function() {}, // called before opening
- afterOpen: null, // called after opening
- afterClose: function() {}, // called after closing
- loopAtEnd: false // true will return to the first image after the last image is reached
- } );
-
-} )( jQuery );
-</script>
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/dashboard-ui/bower_components/swipebox/lib/ios-orientationchange-fix.js b/dashboard-ui/bower_components/swipebox/lib/ios-orientationchange-fix.js
deleted file mode 100644
index 2cf6241c93..0000000000
--- a/dashboard-ui/bower_components/swipebox/lib/ios-orientationchange-fix.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/*! A fix for the iOS orientationchange zoom bug.
- Script by @scottjehl, rebound by @wilto.
- MIT / GPLv2 License.
-*/
-(function(w){
-
- // This fix addresses an iOS bug, so return early if the UA claims it's something else.
- var ua = navigator.userAgent;
- if( !( /iPhone|iPad|iPod/.test( navigator.platform ) && /OS [1-5]_[0-9_]* like Mac OS X/i.test(ua) && ua.indexOf( "AppleWebKit" ) > -1 ) ){
- return;
- }
-
- var doc = w.document;
-
- if( !doc.querySelector ){ return; }
-
- var meta = doc.querySelector( "meta[name=viewport]" ),
- initialContent = meta && meta.getAttribute( "content" ),
- disabledZoom = initialContent + ",maximum-scale=1",
- enabledZoom = initialContent + ",maximum-scale=10",
- enabled = true,
- x, y, z, aig;
-
- if( !meta ){ return; }
-
- function restoreZoom(){
- meta.setAttribute( "content", enabledZoom );
- enabled = true;
- }
-
- function disableZoom(){
- meta.setAttribute( "content", disabledZoom );
- enabled = false;
- }
-
- function checkTilt( e ){
- aig = e.accelerationIncludingGravity;
- x = Math.abs( aig.x );
- y = Math.abs( aig.y );
- z = Math.abs( aig.z );
-
- // If portrait orientation and in one of the danger zones
- if( (!w.orientation || w.orientation === 180) && ( x > 7 || ( ( z > 6 && y < 8 || z < 8 && y > 6 ) && x > 5 ) ) ){
- if( enabled ){
- disableZoom();
- }
- }
- else if( !enabled ){
- restoreZoom();
- }
- }
-
- w.addEventListener( "orientationchange", restoreZoom, false );
- w.addEventListener( "devicemotion", checkTilt, false );
-
-})( this );
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/swipebox/lib/jquery-2.1.0.min.js b/dashboard-ui/bower_components/swipebox/lib/jquery-2.1.0.min.js
deleted file mode 100644
index 2adda35a5b..0000000000
--- a/dashboard-ui/bower_components/swipebox/lib/jquery-2.1.0.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v2.1.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m=a.document,n="2.1.0",o=function(a,b){return new o.fn.init(a,b)},p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};o.fn=o.prototype={jquery:n,constructor:o,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=o.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return o.each(this,a,b)},map:function(a){return this.pushStack(o.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},o.extend=o.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||o.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(o.isPlainObject(d)||(e=o.isArray(d)))?(e?(e=!1,f=c&&o.isArray(c)?c:[]):f=c&&o.isPlainObject(c)?c:{},g[b]=o.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},o.extend({expando:"jQuery"+(n+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===o.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isPlainObject:function(a){if("object"!==o.type(a)||a.nodeType||o.isWindow(a))return!1;try{if(a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=o.trim(a),a&&(1===a.indexOf("use strict")?(b=m.createElement("script"),b.text=a,m.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":k.call(a)},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?o.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),o.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||o.guid++,f):void 0},now:Date.now,support:l}),o.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=o.type(a);return"function"===c||o.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML=" ",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML=" ","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML=" ",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);o.find=t,o.expr=t.selectors,o.expr[":"]=o.expr.pseudos,o.unique=t.uniqueSort,o.text=t.getText,o.isXMLDoc=t.isXML,o.contains=t.contains;var u=o.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(o.isFunction(b))return o.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return o.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return o.filter(b,a,c);b=o.filter(b,a)}return o.grep(a,function(a){return g.call(b,a)>=0!==c})}o.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?o.find.matchesSelector(d,a)?[d]:[]:o.find.matches(a,o.grep(b,function(a){return 1===a.nodeType}))},o.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(o(a).filter(function(){for(b=0;c>b;b++)if(o.contains(e[b],this))return!0}));for(b=0;c>b;b++)o.find(a,e[b],d);return d=this.pushStack(c>1?o.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?o(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=o.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof o?b[0]:b,o.merge(this,o.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:m,!0)),v.test(c[1])&&o.isPlainObject(b))for(c in b)o.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=m.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=m,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):o.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(o):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),o.makeArray(a,this))};A.prototype=o.fn,y=o(m);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};o.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&o(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),o.fn.extend({has:function(a){var b=o(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(o.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?o(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&o.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?o.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(o(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(o.unique(o.merge(this.get(),o(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}o.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return o.dir(a,"parentNode")},parentsUntil:function(a,b,c){return o.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return o.dir(a,"nextSibling")},prevAll:function(a){return o.dir(a,"previousSibling")},nextUntil:function(a,b,c){return o.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return o.dir(a,"previousSibling",c)},siblings:function(a){return o.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return o.sibling(a.firstChild)},contents:function(a){return a.contentDocument||o.merge([],a.childNodes)}},function(a,b){o.fn[a]=function(c,d){var e=o.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=o.filter(d,e)),this.length>1&&(C[a]||o.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return o.each(a.match(E)||[],function(a,c){b[c]=!0}),b}o.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):o.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){o.each(b,function(b,c){var d=o.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&o.each(arguments,function(a,b){var c;while((c=o.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?o.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},o.extend({Deferred:function(a){var b=[["resolve","done",o.Callbacks("once memory"),"resolved"],["reject","fail",o.Callbacks("once memory"),"rejected"],["notify","progress",o.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return o.Deferred(function(c){o.each(b,function(b,f){var g=o.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&o.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?o.extend(a,d):d}},e={};return d.pipe=d.then,o.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&o.isFunction(a.promise)?e:0,g=1===f?a:o.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&o.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;o.fn.ready=function(a){return o.ready.promise().done(a),this},o.extend({isReady:!1,readyWait:1,holdReady:function(a){a?o.readyWait++:o.ready(!0)},ready:function(a){(a===!0?--o.readyWait:o.isReady)||(o.isReady=!0,a!==!0&&--o.readyWait>0||(H.resolveWith(m,[o]),o.fn.trigger&&o(m).trigger("ready").off("ready")))}});function I(){m.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),o.ready()}o.ready.promise=function(b){return H||(H=o.Deferred(),"complete"===m.readyState?setTimeout(o.ready):(m.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},o.ready.promise();var J=o.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===o.type(c)){e=!0;for(h in c)o.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,o.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(o(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};o.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=o.expando+Math.random()}K.uid=1,K.accepts=o.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,o.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(o.isEmptyObject(f))o.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,o.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{o.isArray(b)?d=b.concat(b.map(o.camelCase)):(e=o.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!o.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?o.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}o.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),o.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;
-while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=o.camelCase(d.slice(5)),P(f,d,e[d]));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=o.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),o.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||o.isArray(c)?d=L.access(a,b,o.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=o.queue(a,b),d=c.length,e=c.shift(),f=o._queueHooks(a,b),g=function(){o.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:o.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),o.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length ",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";l.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return m.activeElement}catch(a){}}o.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=o.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof o!==U&&o.event.triggered!==b.type?o.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],n=q=h[1],p=(h[2]||"").split(".").sort(),n&&(l=o.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=o.event.special[n]||{},k=o.extend({type:n,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&o.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(n,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),o.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],n=q=h[1],p=(h[2]||"").split(".").sort(),n){l=o.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||o.removeEvent(a,n,r.handle),delete i[n])}else for(n in i)o.event.remove(a,n+b[j],c,d,!0);o.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,p=[d||m],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||m,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+o.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[o.expando]?b:new o.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:o.makeArray(c,[b]),n=o.event.special[q]||{},e||!n.trigger||n.trigger.apply(d,c)!==!1)){if(!e&&!n.noBubble&&!o.isWindow(d)){for(i=n.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||m)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:n.bindType||q,l=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),l&&l.apply(g,c),l=k&&g[k],l&&l.apply&&o.acceptData(g)&&(b.result=l.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||n._default&&n._default.apply(p.pop(),c)!==!1||!o.acceptData(d)||k&&o.isFunction(d[q])&&!o.isWindow(d)&&(h=d[k],h&&(d[k]=null),o.event.triggered=q,d[q](),o.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=o.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=o.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=o.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((o.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?o(e,this).index(i)>=0:o.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""," "],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return o.nodeName(a,"table")&&o.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)o.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=o.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&o.nodeName(a,b)?o.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}o.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=o.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||o.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,n=a.length;n>m;m++)if(e=a[m],e||0===e)if("object"===o.type(e))o.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>$2>")+h[2],j=h[0];while(j--)f=f.lastChild;o.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===o.inArray(e,d))&&(i=o.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f,g,h=o.event.special,i=0;void 0!==(c=a[i]);i++){if(o.acceptData(c)&&(f=c[L.expando],f&&(b=L.cache[f]))){if(d=Object.keys(b.events||{}),d.length)for(g=0;void 0!==(e=d[g]);g++)h[e]?o.event.remove(c,e):o.removeEvent(c,e,b.handle);L.cache[f]&&delete L.cache[f]}delete M.cache[c[M.expando]]}}}),o.fn.extend({text:function(a){return J(this,function(a){return void 0===a?o.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?o.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||o.cleanData(ob(c)),c.parentNode&&(b&&o.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(o.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return o.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(o.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,o.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,n=k-1,p=a[0],q=o.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(c=o.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=o.map(ob(c,"script"),kb),g=f.length;k>j;j++)h=c,j!==n&&(h=o.clone(h,!0,!0),g&&o.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,o.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&o.contains(i,h)&&(h.src?o._evalUrl&&o._evalUrl(h.src):o.globalEval(h.textContent.replace(hb,"")))}return this}}),o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){o.fn[a]=function(a){for(var c,d=[],e=o(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),o(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d=o(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:o.css(d[0],"display");return d.detach(),e}function tb(a){var b=m,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||o("")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||o.contains(a.ownerDocument,a)||(g=o.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",e=m.documentElement,f=m.createElement("div"),g=m.createElement("div");g.style.backgroundClip="content-box",g.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===g.style.backgroundClip,f.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",f.appendChild(g);function h(){g.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",e.appendChild(f);var d=a.getComputedStyle(g,null);b="1%"!==d.top,c="4px"===d.width,e.removeChild(f)}a.getComputedStyle&&o.extend(l,{pixelPosition:function(){return h(),b},boxSizingReliable:function(){return null==c&&h(),c},reliableMarginRight:function(){var b,c=g.appendChild(m.createElement("div"));return c.style.cssText=g.style.cssText=d,c.style.marginRight=c.style.width="0",g.style.width="1px",e.appendChild(f),b=!parseFloat(a.getComputedStyle(c,null).marginRight),e.removeChild(f),g.innerHTML="",b}})}(),o.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:0,fontWeight:400},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=o.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=o.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=o.css(a,"border"+R[f]+"Width",!0,e))):(g+=o.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=o.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===o.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):f[g]||(e=S(d),(c&&"none"!==c||!e)&&L.set(d,"olddisplay",e?c:o.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}o.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=o.camelCase(b),i=a.style;return b=o.cssProps[h]||(o.cssProps[h]=Fb(i,h)),g=o.cssHooks[b]||o.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(o.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||o.cssNumber[h]||(c+="px"),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]="",i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=o.camelCase(b);return b=o.cssProps[h]||(o.cssProps[h]=Fb(a.style,h)),g=o.cssHooks[b]||o.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||o.isNumeric(f)?f||0:e):e}}),o.each(["height","width"],function(a,b){o.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&zb.test(o.css(a,"display"))?o.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===o.css(a,"boxSizing",!1,e),e):0)}}}),o.cssHooks.marginRight=yb(l.reliableMarginRight,function(a,b){return b?o.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),o.each({margin:"",padding:"",border:"Width"},function(a,b){o.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(o.cssHooks[a+b].set=Gb)}),o.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(o.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=o.css(a,b[g],!1,d);return f}return void 0!==c?o.style(a,b,c):o.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?o(this).show():o(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}o.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(o.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?o.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=o.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){o.fx.step[a.prop]?o.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[o.cssProps[a.prop]]||o.cssHooks[a.prop])?o.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},o.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},o.fx=Kb.prototype.init,o.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(o.cssNumber[a]?"":"px"),g=(o.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(o.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,o.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=o.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k=this,l={},m=a.style,n=a.nodeType&&S(a),p=L.get(a,"fxshow");c.queue||(h=o._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,k.always(function(){k.always(function(){h.unqueued--,o.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],j=o.css(a,"display"),"none"===j&&(j=tb(a.nodeName)),"inline"===j&&"none"===o.css(a,"float")&&(m.display="inline-block")),c.overflow&&(m.overflow="hidden",k.always(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(n?"hide":"show")){if("show"!==e||!p||void 0===p[d])continue;n=!0}l[d]=p&&p[d]||o.style(a,d)}if(!o.isEmptyObject(l)){p?"hidden"in p&&(n=p.hidden):p=L.access(a,"fxshow",{}),f&&(p.hidden=!n),n?o(a).show():k.done(function(){o(a).hide()}),k.done(function(){var b;L.remove(a,"fxshow");for(b in l)o.style(a,b,l[b])});for(d in l)g=Ub(n?p[d]:0,d,k),d in p||(p[d]=g.start,n&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=o.camelCase(c),e=b[d],f=a[c],o.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=o.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=o.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:o.extend({},b),opts:o.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=o.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return o.map(k,Ub,j),o.isFunction(j.opts.start)&&j.opts.start.call(a,j),o.fx.timer(o.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}o.Animation=o.extend(Xb,{tweener:function(a,b){o.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),o.speed=function(a,b,c){var d=a&&"object"==typeof a?o.extend({},a):{complete:c||!c&&b||o.isFunction(a)&&a,duration:a,easing:c&&b||b&&!o.isFunction(b)&&b};return d.duration=o.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in o.fx.speeds?o.fx.speeds[d.duration]:o.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){o.isFunction(d.old)&&d.old.call(this),d.queue&&o.dequeue(this,d.queue)},d},o.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=o.isEmptyObject(a),f=o.speed(b,c,d),g=function(){var b=Xb(this,o.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=o.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&o.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=o.timers,g=d?d.length:0;for(c.finish=!0,o.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),o.each(["toggle","show","hide"],function(a,b){var c=o.fn[b];o.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),o.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){o.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),o.timers=[],o.fx.tick=function(){var a,b=0,c=o.timers;for(Lb=o.now();b1)},removeAttr:function(a){return this.each(function(){o.removeAttr(this,a)})}}),o.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?o.prop(a,b,c):(1===f&&o.isXMLDoc(a)||(b=b.toLowerCase(),d=o.attrHooks[b]||(o.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=o.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void o.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=o.propFix[c]||c,o.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&o.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?o.removeAttr(a,c):a.setAttribute(c,c),c}},o.each(o.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||o.find.attr;$b[b]=function(a,b,d){var e,f;
-return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;o.fn.extend({prop:function(a,b){return J(this,o.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[o.propFix[a]||a]})}}),o.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!o.isXMLDoc(a),f&&(b=o.propFix[b]||b,e=o.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),l.optSelected||(o.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),o.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){o.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;o.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(o.isFunction(a))return this.each(function(b){o(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=o.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(o.isFunction(a))return this.each(function(b){o(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?o.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(o.isFunction(a)?function(c){o(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=o(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;o.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=o.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,o(this).val()):a,null==e?e="":"number"==typeof e?e+="":o.isArray(e)&&(e=o.map(e,function(a){return null==a?"":a+""})),b=o.valHooks[this.type]||o.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=o.valHooks[e.type]||o.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),o.extend({valHooks:{select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&o.nodeName(c.parentNode,"optgroup"))){if(b=o(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=o.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=o.inArray(o(d).val(),f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),o.each(["radio","checkbox"],function(){o.valHooks[this]={set:function(a,b){return o.isArray(b)?a.checked=o.inArray(o(a).val(),b)>=0:void 0}},l.checkOn||(o.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),o.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){o.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),o.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=o.now(),dc=/\?/;o.parseJSON=function(a){return JSON.parse(a+"")},o.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&o.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=m.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(o.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,o.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=o.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&o.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}o.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":o.parseJSON,"text xml":o.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,o.ajaxSettings),b):tc(o.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=o.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?o(l):o.event,n=o.Deferred(),p=o.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(n.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=o.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=o.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===o.active++&&o.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(o.lastModified[d]&&v.setRequestHeader("If-Modified-Since",o.lastModified[d]),o.etag[d]&&v.setRequestHeader("If-None-Match",o.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(o.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(o.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?n.resolveWith(l,[r,x,v]):n.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--o.active||o.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return o.get(a,b,c,"json")},getScript:function(a,b){return o.get(a,void 0,b,"script")}}),o.each(["get","post"],function(a,b){o[b]=function(a,c,d,e){return o.isFunction(c)&&(e=e||d,d=c,c=void 0),o.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),o.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){o.fn[b]=function(a){return this.on(b,a)}}),o._evalUrl=function(a){return o.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},o.fn.extend({wrapAll:function(a){var b;return o.isFunction(a)?this.each(function(b){o(this).wrapAll(a.call(this,b))}):(this[0]&&(b=o(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(o.isFunction(a)?function(b){o(this).wrapInner(a.call(this,b))}:function(){var b=o(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=o.isFunction(a);return this.each(function(c){o(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){o.nodeName(this,"body")||o(this).replaceWith(this.childNodes)}).end()}}),o.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},o.expr.filters.visible=function(a){return!o.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(o.isArray(b))o.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==o.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}o.param=function(a,b){var c,d=[],e=function(a,b){b=o.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=o.ajaxSettings&&o.ajaxSettings.traditional),o.isArray(a)||a.jquery&&!o.isPlainObject(a))o.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},o.fn.extend({serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=o.prop(this,"elements");return a?o.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!o(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=o(this).val();return null==c?null:o.isArray(c)?o.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),o.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=o.ajaxSettings.xhr();a.ActiveXObject&&o(a).on("unload",function(){for(var a in Dc)Dc[a]()}),l.cors=!!Fc&&"withCredentials"in Fc,l.ajax=Fc=!!Fc,o.ajaxTransport(function(a){var b;return l.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort"),f.send(a.hasContent&&a.data||null)},abort:function(){b&&b()}}:void 0}),o.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return o.globalEval(a),a}}}),o.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),o.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=o("