Samsung Galaxy Watch6 (2024)

Galaxy Watch6

BUY NOW

PRE-REGISTER

Pre-order now

Samsung Galaxy Watch6 (1)

The watch that knows you best is back with a more personalized health experience and better yet, upgraded sleep tracking. Start off your day with a good night's sleep with Sleep coaching now available on Galaxy Watch6.

Galaxy Watch6Start your everyday wellness journey

Sleep Tracking
Display
Health
Exercise
Customise

Samsung Galaxy Watch6 (2)

Samsung Galaxy Watch6 (3)

Galaxy Watch6 can be seen displaying Sleep score screen. The progress bar is advancing as the sleep score '82' appears with the text 'Excellent' below. The sleep animal, a lion, appears at the bottom of the screen.

Develop healthy sleeping habits Go to Sleep Tracking

Samsung Galaxy Watch6 (5)

Samsung Galaxy Watch6 (6)

Galaxy Watch6 can be seen rotating and then facing the front. Black margin of the display is being reduced to emphasize the larger display.

Large space to view, tap, swipe and scroll Go to Display

Samsung Galaxy Watch6 (8)

Samsung Galaxy Watch6 (9)

GUI of ECG being measured can be seen, with the measure time changing from 15 to 10 seconds and the bpm changing between 72 and 77. Under the numbers is a moving graph illustrating the heartbeat.

Get detailed insights on your body and wellness Go to Health

Samsung Galaxy Watch6 (11)

Set your own goals and get tips on your fitness journey Go to Exercise

Samsung Galaxy Watch6 (13)

Express your own unique style Go to Customize

Display Sleep Tracking Health Exercise Customise

Close Popup

20% larger
30% slimmer

Get even more info at a glance on up to 20% more display. The up to 30% slimmer black margin makes way for Galaxy Watch's biggest screen yet, and more space for self expression with customizable watch faces.1, 2

More screen.

Thinner bezel

Samsung Galaxy Watch6 (15)

Samsung Galaxy Watch6 (16)

Introducing
a slimmer form

Two Galaxy Watch6 can be seen. The first one is positioned to show its thinness. The second one is zoomed in to emphasize the slim design of Galaxy Watch6.

Samsung Galaxy Watch6 (17)

Samsung Galaxy Watch6 (18)

Style and comfort join forces in this slimmer, sleeker shape. Galaxy Watch6 has been redesigned with a trimmed-down watch form, making it easier to wear. The seamless fit and timeless circular design are an ultra-comfortable, lightweight trick up your sleeve.3

Switching bands is One-Click easy

Press the band release button to detach your watch straps easily. Swap them out to change from workout to go-out styles with just one touch. The band guide makes it easy to align, with a satisfying click once it's reattached.4

Scratches are no
match for Sapphire
Crystal glass

Ready for anything, rain or shine. Ultra-durable Sapphire Crystal glass makes for a resilient and sturdy watch display, while IP68 and 5ATM ratings mean your watch is tough enough to stay with you on your adventures.5, 6

Samsung Galaxy Watch6 (21)

Defy the dangers of dust

Samsung Galaxy Watch6 (22)

Afraid of water? Not on our watch

Samsung Galaxy Watch6 (23)

Samsung Galaxy Watch6 (24)

Galaxy Watch6 can be seen facing upward with the display zoomed in, with waterdrops next to the Watch to indicate that it is waterproof. A gleam of light goes over the display to emphasize the durability of the Sapphire Crystal glass.

18% faster processor

Samsung Galaxy Watch6 (25)

Lasts 40 hours

Samsung Galaxy Watch6 (26)

Charge up
in
record time

With one full charge, the watch lasts up to 40 hours. Fast charge the watch to 45% in just 30 minutes and you're all set to explore the great outdoors or enjoy a well-deserved break in bed.7, 8, 9

Up to 45 %

charged in 30 min

Samsung Galaxy Watch6 (27)

Samsung Galaxy Watch6 (28)

Front view of Galaxy Watch6 can be seen with the charging screen GUI on display. The number on the screen goes up from '50%' to '100%', implying the battery is being fully charged.

Our most powerful watch ever

The upgraded processor makes Galaxy Watch6 18% faster than before, improving app launch speed. So whether you're starting off the day with a run or settling in for the night, it keeps up with every gesture.3

Samsung Galaxy Watch6 (29)

Samsung Galaxy Watch6 (30)

Galaxy Watch6 processor is being assembled with the bezel and display.

Better days
begin with
better nights

Samsung Galaxy Watch6 (31)

Understand your nights to make the most of your days. Wear your Galaxy Watch6 to bed and monitor your nightly sleep stage, sleep score and sleep consistency to improve your sleep. And now you can access Sleep Coaching directly on your watch, so you can check tips right on your wrist.10, 11, 12, 13, 14, 15, 16

Information on the time spent in each sleep stage can be seen: Awake 35m, REM 1h 30m, Light 4h 30m, Deep 55m. The information is also displayed as a graph.

Samsung Galaxy Watch6 (32)

Samsung Galaxy Watch6 (33)

Samsung Galaxy Watch6 (34)

Better together

Fabric Band

Light and comfortable Optimized for sleep

Learn more

Samsung Galaxy Watch6 (37)

Be prepared with Cycle Tracking

Get in tune with your health and body. Cycle Tracking powered by Samsung Galaxy Watch6 (38) uses your nightly skin temperature from your watch, measured while you sleep, to predict the dates of your period and other cycles. Plan ahead and live life to the fullest with Galaxy Watch6.17

A heart monitoring package that watches over you

Lessen your worries with a heart monitoring package that brings you peace of mind, so you can focus on your day. The built-in PPG sensor periodically measures heart rate while you wear your Galaxy Watch6, and will alert you if your heart rate is too high or too low. Use the ECG sensor for more detailed measurements. 18, 19

Samsung Galaxy Watch6 (39)

Samsung Galaxy Watch6 (40)

GUI of ECG being measured can be seen, with the measure time changing from 26 to 31 seconds and the bpm changing between 72 and 77. Under the numbers is a moving graph illustrating the heartbeat.

Add a quick BP check to your wellness routine

Maintain a healthy lifestyle by adding a quick blood pressure check to your daily routine. Measure and track your blood pressure right on your wrist with Galaxy Watch6. No additional equipment required!21, 22, 23, 24

Samsung Galaxy Watch6 (41)

Samsung Galaxy Watch6 (42)

Know your body inside and out with BIA

Skip the clunky machines - collect data on your body any time you like, with the Bioelectrical Impedance Analysis (BIA) sensor on your Galaxy Watch6. These measurements will help you take a data-driven approach to monitor your body and health better and set personalized fitness goals.25, 26, 27

Samsung Galaxy Watch6 (43)

Safety features for your peace of mind

Your watch is on standby in case of an emergency. Should you take a tumble, Fall Detection will catch it and ask if you need help. For other emergencies, simply press the home button five times to send SOS to emergency services. When help arrives, quickly access your Medical info from the lock screen with a single tap. Rest assured, now you're in good hands.27, 28, 29, 30

Samsung Galaxy Watch6 (44)

Samsung Galaxy Watch6 (45)

Samsung Galaxy Watch6 (46)

Daily activity screen can be seen, with the progress bars advancing.

Exercise tracking - Monitor your
fitness journey

Record each of your physical accomplishments, and check all of your progress with Galaxy Watch6. Track your movements for over 90 workouts, including indoor swimming and yoga, or you can even create your own custom workout. Forget to hit start? Your watch will automatically recognize and record select workouts such as running, walking and now, even cycling, so you don't lose precious data.26, 31, 32

Samsung Galaxy Watch6 (47)

Samsung Galaxy Watch6 (48)

Different workout icons can be seen. In the middle is the cycling icon with the person sitting upright. The person begins cycling and slowly bends forward as other workout icons appear from the right.

Set your perfect
intensity with
personalized HR Zone

Samsung Galaxy Watch6 (49)

Samsung Galaxy Watch6 (50)

Set a personalized HR Zone. Or just start running and Galaxy Watch6 will measure your heart rate based on your fitness capacity and optimize an HR Zone that suits you. Once set, you can get notified when you enter your goal HR Zone and make sure you're still in the zone as you move, run and work out to your own beat.34

Start a healthy competition amongst friends and family

Create challenges and let your competitive side shine. Invite your workout buddies, and encourage each other to go the extra mile. Celebrate progress, achievements and personal bests together.

Samsung Galaxy Watch6 (51)

Snap remote
Galaxy Z Flip5 photos from
your watch

Pair your watch with Galaxy Z Flip5 to capture the healthy you up close or from a distance. Galaxy Z Flip5's Flex mode and Camera Controller let you easily switch between photo and video mode, or zoom in and out, all from the comfort of your wrist. Then tap the shutter button on your watch to take a pic.34, 35

Samsung Galaxy Watch6 (52)

Samsung Galaxy Watch6 (53)

On the right is Galaxy Z Flip5 on Flex mode. On the left is Galaxy Watch6 displaying the same screen as Galaxy Z Flip5, illustrating the Camera Controller feature.

More than just a watch

Way more than just a clock. With Galaxy Watch6, you can still text, call, stream music and more, even without your phone. Stay productive and carry on with your day.36, 37

Call Text Stream Music

Call Samsung Galaxy Watch6 (54)

Text Samsung Galaxy Watch6 (55)

Stream Music Samsung Galaxy Watch6 (56)

International Roaming keeps contacts close

Explore the world without getting lost. International Roaming on Galaxy Watch6 allows you to use the map to find your way to landmarks, all from your watch. If you do get into trouble, no need to worry — you'll be able to make calls or send texts to ask for help.38, 39

Samsung Galaxy Watch6 (57)

Samsung Wallet is available on your watch

Don't fumble in your pockets or rummage through your bag looking for cash or cards — you've got Samsung Wallet for that. Now you can pay and ride without taking out your phone, because everything you need is just a swipe or tap away.41

Samsung Galaxy Watch6 (58)

GPS points you in the right direction

By enabling your watch's built-in GPS on Google Maps, you'll stay on the right path. So even when your adventures take you far, you can find your way home with ease.42, 43

Samsung Galaxy Watch6 (59)

Samsung Galaxy Watch6 (60)

Customise to suit your personality

Make Galaxy Watch6 uniquely your own. Choose from a wide collection of bands in different styles and materials. You can also customize your watch face with your favorite colours, complications, designs or even photos of your pet. The only limit is your imagination.4

Samsung Galaxy Watch6 (61)

Switch and upgrade.
It's so easy

Trade in and save

LEARN MORE

Samsung Galaxy Watch6 (62)

Watch how easy switching is

Smart Switch is the sure and secure way to transfer your data to Galaxy. Take all your apps, watch faces, settings and more, with you when you make the switch.46, 47, 48, 49

LEARN MORE

Samsung Galaxy Watch6 (63)

It's time to find your Watch

  • Galaxy Watch6

    Samsung Galaxy Watch6 (64)

    Samsung Galaxy Watch6 (65)

    Samsung Galaxy Watch6 (66)

    Samsung Galaxy Watch6 (67)

    Buy Now

    Learn More

    • Samsung Galaxy Watch6 (68) Display Sapphire Crystal
    • Samsung Galaxy Watch6 (69) Screen Size 37.3mm | 33.3mm
    • Samsung Galaxy Watch6 (70) Fast Charge8, 9 Samsung Galaxy Watch6 (71)
    • Samsung Galaxy Watch6 (72) Infrared
      Temperature
      Sensor
      Samsung Galaxy Watch6 (73)
    • Material Armor
      Aluminum
    • Battery
      (typical)7
      425mAh |
      300mAh
    • Sleep
      Tracking
      Samsung Galaxy Watch6 (74)
    • Cycle
      Tracking
      Samsung Galaxy Watch6 (75)
    • Body
      Composition
      Samsung Galaxy Watch6 (76)
    • Route
      Workout /
      Track Back
      Samsung Galaxy Watch6 (77)
    • Durability 5ATM+IP68/
      MIL-STD-810H
    • Size 44mm | 40mm
    • Weight 33.3g | 28.7g
  • Galaxy Watch6 Classic

    Samsung Galaxy Watch6 (78)

    Samsung Galaxy Watch6 (79)

    Samsung Galaxy Watch6 (80)

    Samsung Galaxy Watch6 (81)

    Buy Now

    Learn More

    • Samsung Galaxy Watch6 (82) Display Sapphire Crystal
    • Samsung Galaxy Watch6 (83) Screen Size 37.3mm | 33.3mm
    • Samsung Galaxy Watch6 (84) Fast Charge8, 9 Samsung Galaxy Watch6 (85)
    • Samsung Galaxy Watch6 (86) Infrared
      Temperature
      Sensor
      Samsung Galaxy Watch6 (87)
    • Material Stainless Steel
    • Battery
      (typical)7
      425mAh |
      300mAh
    • Sleep
      Tracking
      Samsung Galaxy Watch6 (88)
    • Cycle
      Tracking
      Samsung Galaxy Watch6 (89)
    • Body
      Composition
      Samsung Galaxy Watch6 (90)
    • Route
      Workout /
      Track Back
      Samsung Galaxy Watch6 (91)
    • Durability 5ATM+IP68/
      MIL-STD-810H
    • Size 47mm | 43mm
    • Weight 59.0g | 52.0g
  • Galaxy Watch4

    Samsung Galaxy Watch6 (92)

    Samsung Galaxy Watch6 (93)

    Samsung Galaxy Watch6 (94)

    Samsung Galaxy Watch6 (95)

    Samsung Galaxy Watch6 (96)

    Samsung Galaxy Watch6 (97)

    Buy Now

    Learn More

    • Samsung Galaxy Watch6 (98) Display Corning®
      Gorilla® Glass
      with DX+
    • Samsung Galaxy Watch6 (99) Screen Size 34.6mm | 30.4mm
    • Samsung Galaxy Watch6 (100) Fast Charge50 Samsung Galaxy Watch6 (101)
    • Samsung Galaxy Watch6 (102) Infrared
      Temperature
      Sensor
      Samsung Galaxy Watch6 (103)
    • Material Armor
      Aluminum
    • Battery
      (typical)50
      361mAh |
      247mAh
    • Sleep
      Tracking
      Samsung Galaxy Watch6 (104)
    • Cycle
      Tracking
      Samsung Galaxy Watch6 (105)
    • Body
      Composition
      Samsung Galaxy Watch6 (106)
    • Route
      Workout /
      Track Back
      Samsung Galaxy Watch6 (107)
    • Durability 5ATM+IP68/
      MIL-STD-810G
    • Size 44mm | 40mm
    • Weight 30.3g | 25.9g
  • Galaxy Watch5 Pro

    Samsung Galaxy Watch6 (108)

    Samsung Galaxy Watch6 (109)

    Buy Now

    Learn More

    • Samsung Galaxy Watch6 (110) Display Sapphire Crystal
    • Samsung Galaxy Watch6 (111) Screen Size 34.6mm
    • Samsung Galaxy Watch6 (112) Fast Charge51 Samsung Galaxy Watch6 (113)
    • Samsung Galaxy Watch6 (114) Infrared
      Temperature
      Sensor
      Samsung Galaxy Watch6 (115)
    • Material Titanium
    • Battery
      (typical)52
      590mAh
    • Sleep
      Tracking
      Samsung Galaxy Watch6 (116)
    • Cycle
      Tracking
      Samsung Galaxy Watch6 (117)
    • Body
      Composition
      Samsung Galaxy Watch6 (118)
    • Route
      Workout /
      Track Back
      Samsung Galaxy Watch6 (119)
    • Durability 5ATM+IP68/
      MIL-STD-810H
    • Size 45mm
    • Weight 46.5g

Join the Flip side

GO TO GALAXY Z FLIP5

Samsung Galaxy Watch6 (120)

Unfold your world

GO TO GALAXY Z FOLD5

Samsung Galaxy Watch6 (121)

Galaxy
Tab S9 | S9+ | S9
Ultra

GO TO GALAXY TAB S9

Samsung Galaxy Watch6 (122)

Galaxy Watch6 Classic

GO TO GALAXY WATCH6 CLASSIC

Samsung Galaxy Watch6 (123)

C C

  1. Galaxy Watch6 display size is compared to that of Galaxy Watch5.
  2. The screen size and black margin comparisons are based on Galaxy Watch6 40mm model. Based on Galaxy Watch6 44mm model, the screen size and black margin comparisons are 16.5% and 28%, respectively.
  3. Compared to Galaxy Watch5.
  4. Availability of Watch bands may vary by country or region. Additional Watch bands are sold separately.
  5. Galaxy Watch6 is water resistant to up to 50 meters in depth for 10 minutes under the 5ATM rating. It is not suitable for diving or high-pressure water activities. If the device or your hands are wet, they must be dried thoroughly prior to handling. Galaxy Watch6 provides ingress protection (IP68) against dust and fresh water to a maximum of 1.5 meters for up to 30 minutes. Refer to user manual for further information, including care/use instructions.
  6. Based on Vickers hardness measured with constant load of 200gf.
  7. Actual battery life may vary depending on network environment, usage patterns and other factors.
  8. Testing conducted by Samsung using pre-released version of Galaxy Watch6 (BT & LTE), each paired to a Samsung phone; all devices tested with prerelease software, Galaxy Watch Magnetic Fast Charging USB C Cable (EP-OR900), and Samsung 25W USB C Power Adapter (EP-TA800). Charge time varies with region, settings, usage pattern and environmental factors; actual results may vary.
  9. Samsung 25W USB C Power Adapter (EP-TA800) sold separately.
  10. Requires Samsung Health application version 6.24 or later.
  11. Galaxy Watch6 must be paired with a Samsung Galaxy smartphone with Android 10.0 and minimum 1.5GB Memory.
  12. Sleep tracking features are intended for general wellness and fitness purposes only. Not intended for use in detection, diagnosis, treatment of any medical condition or sleep disorder. The measurements are for your personal reference only. Please consult a medical professional for advice.
  13. Sleep Coaching requires sleep data of at least 7 days, including 2 days off.
  14. Availability of blood oxygen level feature may vary by country or regions.
  15. Invisible LED is enabled when sleep mode is turned on.
  16. Fabric Band is sold separately and compatible with Galaxy Watch4 and later released Galaxy Watch series. Availability of watch bands may vary by country/region or carrier
  17. Cycle Tracking is available for cycle and period prediction which is powered by Natural Cycles. Due to country restrictions in obtaining approval/registration as a Software as a medical device (SaMD), Cycle Tracking based on skin temperature only works on phones and watches purchased in the countries where the service is currently available. NOT INTENDED FOR CONTRACEPTION. If you are currently taking hormonal birth control or undergoing hormonal treatment that inhibits ovulation, this service will not be useful for tracking ovulation. Predictions displayed are for personal reference only. To improve the accuracy of predictions, it is recommended to wear your watch for at least 4 hours during sleep, 5 times a week. Predictions may vary depending on the proper use of your watch, input data, environmental conditions, etc. Intended for users 18 years old and above. Users should not interpret or take clinical action based on the predictions made without consultation of a qualified healthcare professional. Requires latest version of Samsung Health app.
  18. HR alerts is intended for general wellness and fitness purposes only. Not intended for use in detection, diagnosis, treatment, monitoring or management of any medical condition or disease. Any health-related information accessed through the device and application should not be treated as medical advice. Users should seek any medical advice from a physician.
  19. Availability of ECG app may vary by country or region. Due to country restrictions in obtaining approval/registration as a Software as a medical device (SaMD), ECG app only works on watches and smartphones purchased in the countries where service is currently available (however, service may be restricted when users travel to non-service countries). Check out https://www.samsung.com/apps/samsung-health-monitor for more information and latest update on service countries. It is not intended for users by people under 22 years old. Users should not interpret or take clinical action based on the device output without consultation of a qualified healthcare professional.
  20. For accurate blood pressure readings, a calibration is required every 4 weeks by BP monitor & arm cuff. Requires a Galaxy smartphone running Android 10.0 or above.
  21. For accurate blood pressure readings, a calibration is required every 4 weeks by BP monitor & arm cuff. Requires a Galaxy smartphone running Android 9.0 or above.
  22. Users should measure their blood pressure when at rest, as they would do with a traditional cuff, and refrain from measuring when they are working out, smoking, or drinking. Blood pressure app is not intended for any diagnostic purposes regarding hypertension or other heart conditions or users under 22 years old. Users should not interpret or take clinical action based on the device output without consultation of a qualified healthcare professional. Blood pressure app is not intended to replace traditional methods of diagnosis or treatment.
  23. Measured blood pressure history can be reviewed within the Samsung Health Monitor app on a paired smartphone.
  24. Not intended for use in detection, diagnosis, treatment. Intended for general wellness and fitness purposes only.
  25. Body composition is only supported in Samsung Galaxy Watch4 series and later released Galaxy Watch models. Body composition should not be used if you have an implanted pacemaker or other implanted medical devices, or if you are pregnant. Any health-related information accessed through the device and application should not be treated as medical advice. Measurement results may not be accurate if you are under 20 years old. The measurements are for your personal reference only. Please consult a medical professional for advice.
  26. Compatible smartphones and available features may vary by country/region, carrier or device.
  27. Galaxy Watch6 must have the latest Wear OS version installed.
  28. Detect falls feature must be enabled on the Galaxy Wearable app on your Galaxy smartphone to use Fall Detection on the watch.
  29. Emergency call requires network connection or pairing with Galaxy smartphone.
  30. Information gathered from the watch, Samsung Health app or related software is not intended to diagnose, cure, mitigate, treat or prevent disease or other conditions.
  31. Auto detect workouts must be turned on in Settings. Auto detect is not available for all workouts.
  32. Only available on Galaxy Watch6 series and must be paired with a compatible mobile device.
  33. To update the ranges of each HR zone for running based on cardiopulmonary capabilities, it is required to run outdoors more than 10 min with constant speed of 4km/h or faster.
  34. Galaxy Z Flip5 sold separately.
  35. Camera Controller is supported on Galaxy Watch4 and later released Galaxy Watch models when paired with Galaxy S9 series and later. Camera Controller zoom feature is available on Samsung Galaxy Watch4 series and later released Galaxy Watch models that are paired with a Galaxy S series, Galaxy Note series and Galaxy Z series smartphone running One UI 5.1 or above with Camera Controller support.
  36. LTE connection required to use select features on Galaxy Watch6. LTE connectivity only available in LTE models.
  37. Not all apps and services are compatible with Wear OS.
  38. Available on LTE models.
  39. Enabling International Roaming may result in roaming charges depending on your smartphone carrier's plan.
  40. Bluetooth, Wi-Fi or LTE connection is required.
  41. Third-party apps must be downloaded separately.
  42. GPS function requires internet connection. Can be used on LTE models without paired smartphone. Non-LTE models require Bluetooth connection to paired smartphone.
  43. By enabling GPS, your current location information may be gathered and used by Galaxy apps and third-party apps to provide location-based services.
  44. Discount values for broken devices will be considerably lower than those for fully-functional devices, unless there is a separate promotion running that specifically alters the value of broken devices.
  45. Purchase from Samsung.com before DD/MM/YY. £XX value based on any XXX (brand, product) smartwatch. Charges apply if you fail to send us your trade-in device. T&Cs apply.
  46. Bluetooth, Wi-Fi or LTE connection is required.
  47. Third-party apps must be downloaded separately.
  48. Compatible with Galaxy Watch in Wear OS powered by Samsung. Requires pairing with smartphone with latest version of Smart Switch installed.
  49. Data and content available for transfer may vary by OS.
  50. The typical capacity has been tested under third party laboratory conditions. The typical capacity is the estimated average capacity considering the deviation in battery capacity among the battery samples tested under the IEC 61960-3 standard.
  51. Testing conducted by Samsung in June 2022 using pre-released version of Galaxy Watch5 (BT & LTE), each paired to a Samsung phone; all devices tested with prerelease software, Galaxy Watch Magnetic Fast Charging USB C Cable (EP-OR900), and Samsung 25W USB C Power Adapter (EP-TA800). Charge time varies with region, settings, usage pattern and environmental factors; actual results may vary.
  52. The typical capacity has been tested under third party laboratory conditions. The typical capacity is the estimated average capacity considering the deviation in battery capacity among the battery samples tested under the IEC 61960-3 standard. Rated capacity is 573mAh. Actual battery life may vary depending on network environment, usage patterns and other factors.

"); return t.attr("data-swiper-slide-index") || t.attr("data-swiper-slide-index", e), i.cache && (this.virtual.cache[e] = t), t }, appendSlide: function (t) { if ("object" == typeof t && "length" in t) for (var e = 0; e < t.length; e += 1)t[e] && this.virtual.slides.push(t[e]); else this.virtual.slides.push(t); this.virtual.update(!0) }, prependSlide: function (t) { var s, a, e = this.activeIndex, i = e + 1, n = 1; if (Array.isArray(t)) { for (var r = 0; r < t.length; r += 1)t[r] && this.virtual.slides.unshift(t[r]); i = e + t.length, n = t.length } else this.virtual.slides.unshift(t); this.params.virtual.cache && (s = this.virtual.cache, a = {}, Object.keys(s).forEach(function (t) { var e = s[t], i = e.attr("data-swiper-slide-index"); i && e.attr("data-swiper-slide-index", parseInt(i, 10) + 1), a[parseInt(t, 10) + n] = e }), this.virtual.cache = a), this.virtual.update(!0), this.slideTo(i, 0) }, removeSlide: function (t) { if (null != t) { var e = this.activeIndex; if (Array.isArray(t)) for (var i = t.length - 1; 0 <= i; --i)this.virtual.slides.splice(t[i], 1), this.params.virtual.cache && delete this.virtual.cache[t[i]], t[i] < e && --e, e = Math.max(e, 0); else this.virtual.slides.splice(t, 1), this.params.virtual.cache && delete this.virtual.cache[t], t < e && --e, e = Math.max(e, 0); this.virtual.update(!0), this.slideTo(e, 0) } }, removeAllSlides: function () { this.virtual.slides = [], this.params.virtual.cache && (this.virtual.cache = {}), this.virtual.update(!0), this.slideTo(0, 0) } }, y = { name: "virtual", params: { virtual: { enabled: !1, slides: [], cache: !0, renderSlide: null, renderExternal: null, addSlidesBefore: 0, addSlidesAfter: 0 } }, create: function () { U.extend(this, { virtual: { update: w.update.bind(this), appendSlide: w.appendSlide.bind(this), prependSlide: w.prependSlide.bind(this), removeSlide: w.removeSlide.bind(this), removeAllSlides: w.removeAllSlides.bind(this), renderSlide: w.renderSlide.bind(this), slides: this.params.virtual.slides, cache: {} } }) }, on: { beforeInit: function () { var t; this.params.virtual.enabled && (this.classNames.push(this.params.containerModifierClass + "virtual"), U.extend(this.params, t = { watchSlidesProgress: !0 }), U.extend(this.originalParams, t), this.params.initialSlide || this.virtual.update()) }, setTranslate: function () { this.params.virtual.enabled && this.virtual.update() } } }, K = { handle: function (t) { var e = this.rtlTranslate, i = (t = t.originalEvent ? t.originalEvent : t).keyCode || t.charCode; if (!this.allowSlideNext && (this.isHorizontal() && 39 === i || this.isVertical() && 40 === i || 34 === i)) return !1; if (!this.allowSlidePrev && (this.isHorizontal() && 37 === i || this.isVertical() && 38 === i || 33 === i)) return !1; if (!(t.shiftKey || t.altKey || t.ctrlKey || t.metaKey || c.activeElement && c.activeElement.nodeName && ("input" === c.activeElement.nodeName.toLowerCase() || "textarea" === c.activeElement.nodeName.toLowerCase()))) { if (this.params.keyboard.onlyInViewport && (33 === i || 34 === i || 37 === i || 39 === i || 38 === i || 40 === i)) { var s = !1; if (0 < this.$el.parents("." + this.params.slideClass).length && 0 === this.$el.parents("." + this.params.slideActiveClass).length) return; var a = X.innerWidth, n = X.innerHeight, r = this.$el.offset(); e && (r.left -= this.$el[0].scrollLeft); for (var o = [[r.left, r.top], [r.left + this.width, r.top], [r.left, r.top + this.height], [r.left + this.width, r.top + this.height]], l = 0; l < o.length; l += 1) { var h = o[l]; 0 <= h[0] && h[0] <= a && 0 <= h[1] && h[1] <= n && (s = !0) } if (!s) return } this.isHorizontal() ? (33 !== i && 34 !== i && 37 !== i && 39 !== i || (t.preventDefault ? t.preventDefault() : t.returnValue = !1), (34 !== i && 39 !== i || e) && (33 !== i && 37 !== i || !e) || this.slideNext(), (33 !== i && 37 !== i || e) && (34 !== i && 39 !== i || !e) || this.slidePrev()) : (33 !== i && 34 !== i && 38 !== i && 40 !== i || (t.preventDefault ? t.preventDefault() : t.returnValue = !1), 34 !== i && 40 !== i || this.slideNext(), 33 !== i && 38 !== i || this.slidePrev()), this.emit("keyPress", i) } }, enable: function () { this.keyboard.enabled || (S(c).on("keydown", this.keyboard.handle), this.keyboard.enabled = !0) }, disable: function () { this.keyboard.enabled && (S(c).off("keydown", this.keyboard.handle), this.keyboard.enabled = !1) } }, E = { name: "keyboard", params: { keyboard: { enabled: !1, onlyInViewport: !0 } }, create: function () { U.extend(this, { keyboard: { enabled: !1, enable: K.enable.bind(this), disable: K.disable.bind(this), handle: K.handle.bind(this) } }) }, on: { init: function () { this.params.keyboard.enabled && this.keyboard.enable() }, destroy: function () { this.keyboard.enabled && this.keyboard.disable() } } }; function C() { for (var i, t = [], e = arguments.length; e--;)t[e] = arguments[e]; i = (i = 1 === t.length && t[0].constructor && t[0].constructor === Object ? t[0] : (n = t[0], t[1])) || {}, i = U.extend({}, i), n && !i.el && (i.el = n), d.call(this, i), Object.keys(R).forEach(function (e) { Object.keys(R[e]).forEach(function (t) { C.prototype[t] || (C.prototype[t] = R[e][t]) }) }); var s, a, n, r = this, o = (void 0 === r.modules && (r.modules = {}), Object.keys(r.modules).forEach(function (t) { var e, t = r.modules[t]; t.params && (e = Object.keys(t.params)[0], "object" == typeof (t = t.params[e]) && null !== t && e in i && "enabled" in t && (!0 === i[e] && (i[e] = { enabled: !0 }), "object" != typeof i[e] || "enabled" in i[e] || (i[e].enabled = !0), i[e] || (i[e] = { enabled: !1 }))) }), U.extend({}, $)), l = (r.useModulesParams(o), r.params = U.extend({}, o, j, i), r.originalParams = U.extend({}, r.params), r.passedParams = U.extend({}, i), (r.$ = S)(r.params.el)); if (n = l[0]) return 1 < l.length ? (s = [], l.each(function (t, e) { e = U.extend({}, i, { el: e }); s.push(new C(e)) }), s) : (n.swiper = r, l.data("swiper", r), n && n.shadowRoot && n.shadowRoot.querySelector ? (a = S(n.shadowRoot.querySelector("." + r.params.wrapperClass))).children = function (t) { return l.children(t) } : a = l.children("." + r.params.wrapperClass), U.extend(r, { $el: l, el: n, $wrapperEl: a, wrapperEl: a[0], classNames: [], slides: S(), slidesGrid: [], snapGrid: [], slidesSizesGrid: [], isHorizontal: function () { return "horizontal" === r.params.direction }, isVertical: function () { return "vertical" === r.params.direction }, rtl: "rtl" === n.dir.toLowerCase() || "rtl" === l.css("direction"), rtlTranslate: "horizontal" === r.params.direction && ("rtl" === n.dir.toLowerCase() || "rtl" === l.css("direction")), wrongRTL: "-webkit-box" === a.css("display"), activeIndex: 0, realIndex: 0, isBeginning: !0, isEnd: !1, translate: 0, previousTranslate: 0, progress: 0, velocity: 0, animating: !1, allowSlideNext: r.params.allowSlideNext, allowSlidePrev: r.params.allowSlidePrev, touchEvents: (o = b.pointerEvents ? ["pointerdown", "pointermove", "pointerup"] : ["mousedown", "mousemove", "mouseup"], r.touchEventsTouch = { start: (n = ["touchstart", "touchmove", "touchend", "touchcancel"])[0], move: n[1], end: n[2], cancel: n[3] }, r.touchEventsDesktop = { start: o[0], move: o[1], end: o[2] }, b.touch || !r.params.simulateTouch ? r.touchEventsTouch : r.touchEventsDesktop), touchEventsData: { isTouched: void 0, isMoved: void 0, allowTouchCallbacks: void 0, touchStartTime: void 0, isScrolling: void 0, currentTranslate: void 0, startTranslate: void 0, allowThresholdMove: void 0, formElements: "input, select, option, textarea, button, video", lastClickTime: U.now(), clickTimeout: void 0, velocities: [], allowMomentumBounce: void 0, isTouchEvent: void 0, startMoving: void 0 }, allowClick: !0, allowTouchMove: r.params.allowTouchMove, touches: { startX: 0, startY: 0, currentX: 0, currentY: 0, diff: 0 }, imagesToLoad: [], imagesLoaded: 0 }), r.useModules(), r.params.init && r.init(), r) } var x = { lastScrollTime: U.now(), lastEventBeforeSnap: void 0, recentWheelEvents: [], event: function () { return -1 < X.navigator.userAgent.indexOf("firefox") ? "DOMMouseScroll" : ((e = "onwheel" in c) || ((t = c.createElement("div")).setAttribute("onwheel", "return;"), e = "function" == typeof t.onwheel), (e = !e && c.implementation && c.implementation.hasFeature && !0 !== c.implementation.hasFeature("", "") ? c.implementation.hasFeature("Events.wheel", "3.0") : e) ? "wheel" : "mousewheel"); var t, e }, normalize: function (t) { var e = 0, i = 0, s = 0, a = 0; return "detail" in t && (i = t.detail), "wheelDelta" in t && (i = -t.wheelDelta / 120), "wheelDeltaY" in t && (i = -t.wheelDeltaY / 120), "wheelDeltaX" in t && (e = -t.wheelDeltaX / 120), "axis" in t && t.axis === t.HORIZONTAL_AXIS && (e = i, i = 0), s = 10 * e, a = 10 * i, "deltaY" in t && (a = t.deltaY), "deltaX" in t && (s = t.deltaX), t.shiftKey && !s && (s = a, a = 0), (s || a) && t.deltaMode && (1 === t.deltaMode ? (s *= 40, a *= 40) : (s *= 800, a *= 800)), { spinX: e = s && !e ? s < 1 ? -1 : 1 : e, spinY: i = a && !i ? a < 1 ? -1 : 1 : i, pixelX: s, pixelY: a } }, handleMouseEnter: function () { this.mouseEntered = !0 }, handleMouseLeave: function () { this.mouseEntered = !1 }, handle: function (t) { var e = t, i = this, s = i.params.mousewheel; if (i.params.cssMode && e.preventDefault(), !i.mouseEntered && !s.releaseOnEdges) return !0; e.originalEvent && (e = e.originalEvent); var a = 0, n = i.rtlTranslate ? -1 : 1, r = x.normalize(e); if (s.forceToAxis) if (i.isHorizontal()) { if (!(Math.abs(r.pixelX) > Math.abs(r.pixelY))) return !0; a = r.pixelX * n } else { if (!(Math.abs(r.pixelY) > Math.abs(r.pixelX))) return !0; a = r.pixelY } else a = Math.abs(r.pixelX) > Math.abs(r.pixelY) ? -r.pixelX * n : -r.pixelY; if (0 === a) return !0; if (s.invert && (a = -a), i.params.freeMode) { var o = { time: U.now(), delta: Math.abs(a), direction: Math.sign(a) }, n = i.mousewheel.lastEventBeforeSnap, r = n && o.time < n.time + 500 && o.delta <= n.delta && o.direction === n.direction; if (!r) { i.mousewheel.lastEventBeforeSnap = void 0, i.params.loop && i.loopFix(); var l, h, n = i.getTranslate() + a * s.sensitivity, s = i.isBeginning, d = i.isEnd; if ((n = n >= i.minTranslate() ? i.minTranslate() : n) <= i.maxTranslate() && (n = i.maxTranslate()), i.setTransition(0), i.setTranslate(n), i.updateProgress(), i.updateActiveIndex(), i.updateSlidesClasses(), (!s && i.isBeginning || !d && i.isEnd) && i.updateSlidesClasses(), i.params.freeModeSticky && (clearTimeout(i.mousewheel.timeout), i.mousewheel.timeout = void 0, 15 <= (l = i.mousewheel.recentWheelEvents).length && l.shift(), s = l.length ? l[l.length - 1] : void 0, d = l[0], l.push(o), s && (o.delta > s.delta || o.direction !== s.direction) ? l.splice(0) : 15 <= l.length && o.time - d.time < 500 && 1 <= d.delta - o.delta && o.delta <= 6 && (h = 0 < a ? .8 : .2, i.mousewheel.lastEventBeforeSnap = o, l.splice(0), i.mousewheel.timeout = U.nextTick(function () { i.slideToClosest(i.params.speed, !0, void 0, h) }, 0)), i.mousewheel.timeout || (i.mousewheel.timeout = U.nextTick(function () { i.mousewheel.lastEventBeforeSnap = o, l.splice(0), i.slideToClosest(i.params.speed, !0, void 0, .5) }, 500))), r || i.emit("scroll", e), i.params.autoplay && i.params.autoplayDisableOnInteraction && i.autoplay.stop(), n === i.minTranslate() || n === i.maxTranslate()) return !0 } } else { s = { time: U.now(), delta: Math.abs(a), direction: Math.sign(a), raw: t }, d = i.mousewheel.recentWheelEvents, r = (2 <= d.length && d.shift(), d.length ? d[d.length - 1] : void 0); if (d.push(s), (!r || s.direction !== r.direction || s.delta > r.delta) && i.mousewheel.animateSlider(s), i.mousewheel.releaseScroll(s)) return !0 } return e.preventDefault ? e.preventDefault() : e.returnValue = !1, !1 }, animateSlider: function (t) { return 6 <= t.delta && U.now() - this.mousewheel.lastScrollTime < 60 || (t.direction < 0 ? this.isEnd && !this.params.loop || this.animating || (this.slideNext(), this.emit("scroll", t.raw)) : this.isBeginning && !this.params.loop || this.animating || (this.slidePrev(), this.emit("scroll", t.raw)), this.mousewheel.lastScrollTime = (new X.Date).getTime(), !1) }, releaseScroll: function (t) { var e = this.params.mousewheel; if (t.direction < 0) { if (this.isEnd && !this.params.loop && e.releaseOnEdges) return !0 } else if (this.isBeginning && !this.params.loop && e.releaseOnEdges) return !0; return !1 }, enable: function () { var t = x.event(); if (this.params.cssMode) return this.wrapperEl.removeEventListener(t, this.mousewheel.handle), !0; if (!t) return !1; if (this.mousewheel.enabled) return !1; var e = this.$el; return (e = "container" !== this.params.mousewheel.eventsTarged ? S(this.params.mousewheel.eventsTarged) : e).on("mouseenter", this.mousewheel.handleMouseEnter), e.on("mouseleave", this.mousewheel.handleMouseLeave), e.on(t, this.mousewheel.handle), this.mousewheel.enabled = !0 }, disable: function () { var t = x.event(); if (this.params.cssMode) return this.wrapperEl.addEventListener(t, this.mousewheel.handle), !0; if (!t) return !1; if (!this.mousewheel.enabled) return !1; var e = this.$el; return (e = "container" !== this.params.mousewheel.eventsTarged ? S(this.params.mousewheel.eventsTarged) : e).off(t, this.mousewheel.handle), !(this.mousewheel.enabled = !1) } }, L = { update: function () { var t, e, i = this.params.navigation; this.params.loop || (t = (e = this.navigation).$nextEl, (e = e.$prevEl) && 0 < e.length && (this.isBeginning ? e.addClass(i.disabledClass) : e.removeClass(i.disabledClass), e[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](i.lockClass)), t && 0 < t.length && (this.isEnd ? t.addClass(i.disabledClass) : t.removeClass(i.disabledClass), t[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](i.lockClass))) }, onPrevClick: function (t) { t.preventDefault(), this.isBeginning && !this.params.loop || this.slidePrev() }, onNextClick: function (t) { t.preventDefault(), this.isEnd && !this.params.loop || this.slideNext() }, init: function () { var t, e, i = this.params.navigation; (i.nextEl || i.prevEl) && (i.nextEl && (t = S(i.nextEl), this.params.uniqueNavElements && "string" == typeof i.nextEl && 1 < t.length && 1 === this.$el.find(i.nextEl).length && (t = this.$el.find(i.nextEl))), i.prevEl && (e = S(i.prevEl), this.params.uniqueNavElements && "string" == typeof i.prevEl && 1 < e.length && 1 === this.$el.find(i.prevEl).length && (e = this.$el.find(i.prevEl))), t && 0 < t.length && t.on("click", this.navigation.onNextClick), e && 0 < e.length && e.on("click", this.navigation.onPrevClick), U.extend(this.navigation, { $nextEl: t, nextEl: t && t[0], $prevEl: e, prevEl: e && e[0] })) }, destroy: function () { var t = this.navigation, e = t.$nextEl, t = t.$prevEl; e && e.length && (e.off("click", this.navigation.onNextClick), e.removeClass(this.params.navigation.disabledClass)), t && t.length && (t.off("click", this.navigation.onPrevClick), t.removeClass(this.params.navigation.disabledClass)) } }, A = { update: function () { var t = this.rtl, s = this.params.pagination; if (s.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length) { var a, e = (this.virtual && this.params.virtual.enabled ? this.virtual : this).slides.length, i = this.pagination.$el, n = this.params.loop ? Math.ceil((e - 2 * this.loopedSlides) / this.params.slidesPerGroup) : this.snapGrid.length; if (this.params.loop ? ((a = Math.ceil((this.activeIndex - this.loopedSlides) / this.params.slidesPerGroup)) > e - 1 - 2 * this.loopedSlides && (a -= e - 2 * this.loopedSlides), n - 1 < a && (a -= n), a < 0 && "bullets" !== this.params.paginationType && (a = n + a)) : a = void 0 !== this.snapIndex ? this.snapIndex : this.activeIndex || 0, "bullets" === s.type && this.pagination.bullets && 0 < this.pagination.bullets.length) { var r, o, l, h = this.pagination.bullets; if (s.dynamicBullets && (this.pagination.bulletSize = h.eq(0)[this.isHorizontal() ? "outerWidth" : "outerHeight"](!0), i.css(this.isHorizontal() ? "width" : "height", this.pagination.bulletSize * (s.dynamicMainBullets + 4) + "px"), 1 < s.dynamicMainBullets && void 0 !== this.previousIndex && (this.pagination.dynamicBulletIndex += a - this.previousIndex, this.pagination.dynamicBulletIndex > s.dynamicMainBullets - 1 ? this.pagination.dynamicBulletIndex = s.dynamicMainBullets - 1 : this.pagination.dynamicBulletIndex < 0 && (this.pagination.dynamicBulletIndex = 0)), r = a - this.pagination.dynamicBulletIndex, l = ((o = r + (Math.min(h.length, s.dynamicMainBullets) - 1)) + r) / 2), h.removeClass(s.bulletActiveClass + " " + s.bulletActiveClass + "-next " + s.bulletActiveClass + "-next-next " + s.bulletActiveClass + "-prev " + s.bulletActiveClass + "-prev-prev " + s.bulletActiveClass + "-main"), 1 < i.length) h.each(function (t, e) { var e = S(e), i = e.index(); i === a && e.addClass(s.bulletActiveClass), s.dynamicBullets && (r <= i && i <= o && e.addClass(s.bulletActiveClass + "-main"), i === r && e.prev().addClass(s.bulletActiveClass + "-prev").prev().addClass(s.bulletActiveClass + "-prev-prev"), i === o && e.next().addClass(s.bulletActiveClass + "-next").next().addClass(s.bulletActiveClass + "-next-next")) }); else { var e = h.eq(a), d = e.index(); if (e.addClass(s.bulletActiveClass), s.dynamicBullets) { for (var e = h.eq(r), c = h.eq(o), u = r; u <= o; u += 1)h.eq(u).addClass(s.bulletActiveClass + "-main"); if (this.params.loop) if (d >= h.length - s.dynamicMainBullets) { for (var p = s.dynamicMainBullets; 0 <= p; --p)h.eq(h.length - p).addClass(s.bulletActiveClass + "-main"); h.eq(h.length - s.dynamicMainBullets - 1).addClass(s.bulletActiveClass + "-prev") } else e.prev().addClass(s.bulletActiveClass + "-prev").prev().addClass(s.bulletActiveClass + "-prev-prev"), c.next().addClass(s.bulletActiveClass + "-next").next().addClass(s.bulletActiveClass + "-next-next"); else e.prev().addClass(s.bulletActiveClass + "-prev").prev().addClass(s.bulletActiveClass + "-prev-prev"), c.next().addClass(s.bulletActiveClass + "-next").next().addClass(s.bulletActiveClass + "-next-next") } } s.dynamicBullets && (d = Math.min(h.length, s.dynamicMainBullets + 4), e = (this.pagination.bulletSize * d - this.pagination.bulletSize) / 2 - l * this.pagination.bulletSize, c = t ? "right" : "left", h.css(this.isHorizontal() ? c : "top", e + "px")) } "fraction" === s.type && (i.find("." + s.currentClass).text(s.formatFractionCurrent(a + 1)), i.find("." + s.totalClass).text(s.formatFractionTotal(n))), "progressbar" === s.type && (d = s.progressbarOpposite ? this.isHorizontal() ? "vertical" : "horizontal" : this.isHorizontal() ? "horizontal" : "vertical", l = (a + 1) / n, c = t = 1, "horizontal" == d ? t = l : c = l, i.find("." + s.progressbarFillClass).transform("translate3d(0,0,0) scaleX(" + t + ") scaleY(" + c + ")").transition(this.params.speed)), "custom" === s.type && s.renderCustom ? (i.html(s.renderCustom(this, a + 1, n)), this.emit("paginationRender", this, i[0])) : this.emit("paginationUpdate", this, i[0]), i[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](s.lockClass) } }, render: function () { var t = this.params.pagination; if (t.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length) { var e = (this.virtual && this.params.virtual.enabled ? this.virtual : this).slides.length, i = this.pagination.$el, s = ""; if ("bullets" === t.type) { for (var a = this.params.loop ? Math.ceil((e - 2 * this.loopedSlides) / this.params.slidesPerGroup) : this.snapGrid.length, n = 0; n < a; n += 1)t.renderBullet ? s += t.renderBullet.call(this, n, t.bulletClass) : s += "<" + t.bulletElement + ' class="' + t.bulletClass + '">' + t.bulletElement + ">"; i.html(s), this.pagination.bullets = i.find("." + t.bulletClass) } "fraction" === t.type && (s = t.renderFraction ? t.renderFraction.call(this, t.currentClass, t.totalClass) : ' / ', i.html(s)), "progressbar" === t.type && (s = t.renderProgressbar ? t.renderProgressbar.call(this, t.progressbarFillClass) : '', i.html(s)), "custom" !== t.type && this.emit("paginationRender", this.pagination.$el[0]) } }, init: function () { var t, e = this, i = e.params.pagination; i.el && 0 !== (t = S(i.el)).length && (e.params.uniqueNavElements && "string" == typeof i.el && 1 < t.length && 1 === e.$el.find(i.el).length && (t = e.$el.find(i.el)), "bullets" === i.type && i.clickable && t.addClass(i.clickableClass), t.addClass(i.modifierClass + i.type), "bullets" === i.type && i.dynamicBullets && (t.addClass("" + i.modifierClass + i.type + "-dynamic"), e.pagination.dynamicBulletIndex = 0, i.dynamicMainBullets < 1 && (i.dynamicMainBullets = 1)), "progressbar" === i.type && i.progressbarOpposite && t.addClass(i.progressbarOppositeClass), i.clickable && t.on("click", "." + i.bulletClass, function (t) { t.preventDefault(); t = S(this).index() * e.params.slidesPerGroup; e.params.loop && (t += e.loopedSlides), e.slideTo(t) }), U.extend(e.pagination, { $el: t, el: t[0] })) }, destroy: function () { var t, e = this.params.pagination; e.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length && ((t = this.pagination.$el).removeClass(e.hiddenClass), t.removeClass(e.modifierClass + e.type), this.pagination.bullets && this.pagination.bullets.removeClass(e.bulletActiveClass), e.clickable && t.off("click", "." + e.bulletClass)) } }, k = { setTranslate: function () { var t, e, i, s, a, n, r, o; this.params.scrollbar.el && this.scrollbar.el && (n = this.scrollbar, t = this.rtlTranslate, o = this.progress, e = n.dragSize, i = n.trackSize, s = n.$dragEl, a = n.$el, n = this.params.scrollbar, o = (i - (r = e)) * o, t ? 0 < (o = -o) ? (r = e - o, o = 0) : i < -o + e && (r = i + o) : o < 0 ? (r = e + o, o = 0) : i < o + e && (r = i - o), this.isHorizontal() ? (s.transform("translate3d(" + o + "px, 0, 0)"), s[0].style.width = r + "px") : (s.transform("translate3d(0px, " + o + "px, 0)"), s[0].style.height = r + "px"), n.hide && (clearTimeout(this.scrollbar.timeout), a[0].style.opacity = 1, this.scrollbar.timeout = setTimeout(function () { a[0].style.opacity = 0, a.transition(400) }, 1e3))) }, setTransition: function (t) { this.params.scrollbar.el && this.scrollbar.el && this.scrollbar.$dragEl.transition(t) }, updateSize: function () { var t, e, i, s, a, n, r; this.params.scrollbar.el && this.scrollbar.el && (e = (t = this.scrollbar).$dragEl, i = t.$el, e[0].style.width = "", e[0].style.height = "", s = this.isHorizontal() ? i[0].offsetWidth : i[0].offsetHeight, n = (a = this.size / this.virtualSize) * (s / this.size), r = "auto" === this.params.scrollbar.dragSize ? s * a : parseInt(this.params.scrollbar.dragSize, 10), this.isHorizontal() ? e[0].style.width = r + "px" : e[0].style.height = r + "px", i[0].style.display = 1 <= a ? "none" : "", this.params.scrollbar.hide && (i[0].style.opacity = 0), U.extend(t, { trackSize: s, divider: a, moveDivider: n, dragSize: r }), t.$el[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](this.params.scrollbar.lockClass)) }, getPointerPosition: function (t) { return this.isHorizontal() ? ("touchstart" === t.type || "touchmove" === t.type ? t.targetTouches[0] : t).clientX : ("touchstart" === t.type || "touchmove" === t.type ? t.targetTouches[0] : t).clientY }, setDragPosition: function (t) { var e = this.scrollbar, i = this.rtlTranslate, s = e.$el, a = e.dragSize, n = e.trackSize, r = e.dragStartPos, e = (e.getPointerPosition(t) - s.offset()[this.isHorizontal() ? "left" : "top"] - (null !== r ? r : a / 2)) / (n - a), t = (e = Math.max(Math.min(e, 1), 0), i && (e = 1 - e), this.minTranslate() + (this.maxTranslate() - this.minTranslate()) * e); this.updateProgress(t), this.setTranslate(t), this.updateActiveIndex(), this.updateSlidesClasses() }, onDragStart: function (t) { var e = this.params.scrollbar, i = this.scrollbar, s = this.$wrapperEl, a = i.$el, n = i.$dragEl; this.scrollbar.isTouched = !0, this.scrollbar.dragStartPos = t.target === n[0] || t.target === n ? i.getPointerPosition(t) - t.target.getBoundingClientRect()[this.isHorizontal() ? "left" : "top"] : null, t.preventDefault(), t.stopPropagation(), s.transition(100), n.transition(100), i.setDragPosition(t), clearTimeout(this.scrollbar.dragTimeout), a.transition(0), e.hide && a.css("opacity", 1), this.params.cssMode && this.$wrapperEl.css("scroll-snap-type", "none"), this.emit("scrollbarDragStart", t) }, onDragMove: function (t) { var e = this.scrollbar, i = this.$wrapperEl, s = e.$el, a = e.$dragEl; this.scrollbar.isTouched && (t.preventDefault ? t.preventDefault() : t.returnValue = !1, e.setDragPosition(t), i.transition(0), s.transition(0), a.transition(0), this.emit("scrollbarDragMove", t)) }, onDragEnd: function (t) { var e = this.params.scrollbar, i = this.scrollbar, s = this.$wrapperEl, a = i.$el; this.scrollbar.isTouched && (this.scrollbar.isTouched = !1, this.params.cssMode && (this.$wrapperEl.css("scroll-snap-type", ""), s.transition("")), e.hide && (clearTimeout(this.scrollbar.dragTimeout), this.scrollbar.dragTimeout = U.nextTick(function () { a.css("opacity", 0), a.transition(400) }, 1e3)), this.emit("scrollbarDragEnd", t), e.snapOnRelease && this.slideToClosest()) }, enableDraggable: function () { var t, e, i, s, a; this.params.scrollbar.el && (i = this.scrollbar, t = this.touchEventsTouch, e = this.touchEventsDesktop, a = this.params, i = i.$el[0], s = !(!b.passiveListener || !a.passiveListeners) && { passive: !1, capture: !1 }, a = !(!b.passiveListener || !a.passiveListeners) && { passive: !0, capture: !1 }, b.touch ? (i.addEventListener(t.start, this.scrollbar.onDragStart, s), i.addEventListener(t.move, this.scrollbar.onDragMove, s), i.addEventListener(t.end, this.scrollbar.onDragEnd, a)) : (i.addEventListener(e.start, this.scrollbar.onDragStart, s), c.addEventListener(e.move, this.scrollbar.onDragMove, s), c.addEventListener(e.end, this.scrollbar.onDragEnd, a))) }, disableDraggable: function () { var t, e, i, s, a; this.params.scrollbar.el && (i = this.scrollbar, t = this.touchEventsTouch, e = this.touchEventsDesktop, a = this.params, i = i.$el[0], s = !(!b.passiveListener || !a.passiveListeners) && { passive: !1, capture: !1 }, a = !(!b.passiveListener || !a.passiveListeners) && { passive: !0, capture: !1 }, b.touch ? (i.removeEventListener(t.start, this.scrollbar.onDragStart, s), i.removeEventListener(t.move, this.scrollbar.onDragMove, s), i.removeEventListener(t.end, this.scrollbar.onDragEnd, a)) : (i.removeEventListener(e.start, this.scrollbar.onDragStart, s), c.removeEventListener(e.move, this.scrollbar.onDragMove, s), c.removeEventListener(e.end, this.scrollbar.onDragEnd, a))) }, init: function () { var t, e, i, s; this.params.scrollbar.el && (t = this.scrollbar, s = this.$el, i = S((e = this.params.scrollbar).el), 0 === (s = (i = this.params.uniqueNavElements && "string" == typeof e.el && 1 < i.length && 1 === s.find(e.el).length ? s.find(e.el) : i).find("." + this.params.scrollbar.dragClass)).length && (s = S('

'), i.append(s)), U.extend(t, { $el: i, el: i[0], $dragEl: s, dragEl: s[0] }), e.draggable && t.enableDraggable()) }, destroy: function () { this.scrollbar.disableDraggable() } }, Q = { setTransform: function (t, e) { var i = this.rtl, t = S(t), i = i ? -1 : 1, s = t.attr("data-swiper-parallax") || "0", a = t.attr("data-swiper-parallax-x"), n = t.attr("data-swiper-parallax-y"), r = t.attr("data-swiper-parallax-scale"), o = t.attr("data-swiper-parallax-opacity"); a || n ? (a = a || "0", n = n || "0") : this.isHorizontal() ? (a = s, n = "0") : (n = s, a = "0"), a = 0 <= a.indexOf("%") ? parseInt(a, 10) * e * i + "%" : a * e * i + "px", n = 0 <= n.indexOf("%") ? parseInt(n, 10) * e + "%" : n * e + "px", null != o && (s = o - (o - 1) * (1 - Math.abs(e)), t[0].style.opacity = s), null == r ? t.transform("translate3d(" + a + ", " + n + ", 0px)") : (i = r - (r - 1) * (1 - Math.abs(e)), t.transform("translate3d(" + a + ", " + n + ", 0px) scale(" + i + ")")) }, setTranslate: function () { var s = this, t = s.$el, e = s.slides, a = s.progress, n = s.snapGrid; t.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each(function (t, e) { s.parallax.setTransform(e, a) }), e.each(function (t, e) { var i = e.progress; 1 < s.params.slidesPerGroup && "auto" !== s.params.slidesPerView && (i += Math.ceil(t / 2) - a * (n.length - 1)), i = Math.min(Math.max(i, -1), 1), S(e).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each(function (t, e) { s.parallax.setTransform(e, i) }) }) }, setTransition: function (s) { void 0 === s && (s = this.params.speed), this.$el.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each(function (t, e) { var e = S(e), i = parseInt(e.attr("data-swiper-parallax-duration"), 10) || s; 0 === s && (i = 0), e.transition(i) }) } }, J = { getDistanceBetweenTouches: function (t) { if (t.targetTouches.length < 2) return 1; var e = t.targetTouches[0].pageX, i = t.targetTouches[0].pageY, s = t.targetTouches[1].pageX, t = t.targetTouches[1].pageY; return Math.sqrt(Math.pow(s - e, 2) + Math.pow(t - i, 2)) }, onGestureStart: function (t) { var e = this.params.zoom, i = this.zoom, s = i.gesture; if (i.fakeGestureTouched = !1, i.fakeGestureMoved = !1, !b.gestures) { if ("touchstart" !== t.type || "touchstart" === t.type && t.targetTouches.length < 2) return; i.fakeGestureTouched = !0, s.scaleStart = J.getDistanceBetweenTouches(t) } s.$slideEl && s.$slideEl.length || (s.$slideEl = S(t.target).closest(".swiper-slide"), 0 === s.$slideEl.length && (s.$slideEl = this.slides.eq(this.activeIndex)), s.$imageEl = s.$slideEl.find("img, svg, canvas"), s.$imageWrapEl = s.$imageEl.parent("." + e.containerClass), s.maxRatio = s.$imageWrapEl.attr("data-swiper-zoom") || e.maxRatio, 0 !== s.$imageWrapEl.length) ? (s.$imageEl.transition(0), this.zoom.isScaling = !0) : s.$imageEl = void 0 }, onGestureChange: function (t) { var e = this.params.zoom, i = this.zoom, s = i.gesture; if (!b.gestures) { if ("touchmove" !== t.type || "touchmove" === t.type && t.targetTouches.length < 2) return; i.fakeGestureMoved = !0, s.scaleMove = J.getDistanceBetweenTouches(t) } s.$imageEl && 0 !== s.$imageEl.length && (i.scale = b.gestures ? t.scale * i.currentScale : s.scaleMove / s.scaleStart * i.currentScale, i.scale > s.maxRatio && (i.scale = s.maxRatio - 1 + Math.pow(i.scale - s.maxRatio + 1, .5)), i.scale < e.minRatio && (i.scale = e.minRatio + 1 - Math.pow(e.minRatio - i.scale + 1, .5)), s.$imageEl.transform("translate3d(0,0,0) scale(" + i.scale + ")")) }, onGestureEnd: function (t) { var e = this.params.zoom, i = this.zoom, s = i.gesture; if (!b.gestures) { if (!i.fakeGestureTouched || !i.fakeGestureMoved) return; if ("touchend" !== t.type || "touchend" === t.type && t.changedTouches.length < 2 && !o.android) return; i.fakeGestureTouched = !1, i.fakeGestureMoved = !1 } s.$imageEl && 0 !== s.$imageEl.length && (i.scale = Math.max(Math.min(i.scale, s.maxRatio), e.minRatio), s.$imageEl.transition(this.params.speed).transform("translate3d(0,0,0) scale(" + i.scale + ")"), i.currentScale = i.scale, i.isScaling = !1, 1 === i.scale && (s.$slideEl = void 0)) }, onTouchStart: function (t) { var e = this.zoom, i = e.gesture, e = e.image; i.$imageEl && 0 !== i.$imageEl.length && !e.isTouched && (o.android && t.preventDefault(), e.isTouched = !0, e.touchesStart.x = ("touchstart" === t.type ? t.targetTouches[0] : t).pageX, e.touchesStart.y = ("touchstart" === t.type ? t.targetTouches[0] : t).pageY) }, onTouchMove: function (t) { var e = this.zoom, i = e.gesture, s = e.image, a = e.velocity; if (i.$imageEl && 0 !== i.$imageEl.length && (this.allowClick = !1, s.isTouched && i.$slideEl)) { s.isMoved || (s.width = i.$imageEl[0].offsetWidth, s.height = i.$imageEl[0].offsetHeight, s.startX = U.getTranslate(i.$imageWrapEl[0], "x") || 0, s.startY = U.getTranslate(i.$imageWrapEl[0], "y") || 0, i.slideWidth = i.$slideEl[0].offsetWidth, i.slideHeight = i.$slideEl[0].offsetHeight, i.$imageWrapEl.transition(0), this.rtl && (s.startX = -s.startX, s.startY = -s.startY)); var n = s.width * e.scale, r = s.height * e.scale; if (!(n < i.slideWidth && r < i.slideHeight)) { if (s.minX = Math.min(i.slideWidth / 2 - n / 2, 0), s.maxX = -s.minX, s.minY = Math.min(i.slideHeight / 2 - r / 2, 0), s.maxY = -s.minY, s.touchesCurrent.x = ("touchmove" === t.type ? t.targetTouches[0] : t).pageX, s.touchesCurrent.y = ("touchmove" === t.type ? t.targetTouches[0] : t).pageY, !s.isMoved && !e.isScaling) { if (this.isHorizontal() && (Math.floor(s.minX) === Math.floor(s.startX) && s.touchesCurrent.x < s.touchesStart.x || Math.floor(s.maxX) === Math.floor(s.startX) && s.touchesCurrent.x > s.touchesStart.x)) return void (s.isTouched = !1); if (!this.isHorizontal() && (Math.floor(s.minY) === Math.floor(s.startY) && s.touchesCurrent.y < s.touchesStart.y || Math.floor(s.maxY) === Math.floor(s.startY) && s.touchesCurrent.y > s.touchesStart.y)) return void (s.isTouched = !1) } t.preventDefault(), t.stopPropagation(), s.isMoved = !0, s.currentX = s.touchesCurrent.x - s.touchesStart.x + s.startX, s.currentY = s.touchesCurrent.y - s.touchesStart.y + s.startY, s.currentX < s.minX && (s.currentX = s.minX + 1 - Math.pow(s.minX - s.currentX + 1, .8)), s.currentX > s.maxX && (s.currentX = s.maxX - 1 + Math.pow(s.currentX - s.maxX + 1, .8)), s.currentY < s.minY && (s.currentY = s.minY + 1 - Math.pow(s.minY - s.currentY + 1, .8)), s.currentY > s.maxY && (s.currentY = s.maxY - 1 + Math.pow(s.currentY - s.maxY + 1, .8)), a.prevPositionX || (a.prevPositionX = s.touchesCurrent.x), a.prevPositionY || (a.prevPositionY = s.touchesCurrent.y), a.prevTime || (a.prevTime = Date.now()), a.x = (s.touchesCurrent.x - a.prevPositionX) / (Date.now() - a.prevTime) / 2, a.y = (s.touchesCurrent.y - a.prevPositionY) / (Date.now() - a.prevTime) / 2, Math.abs(s.touchesCurrent.x - a.prevPositionX) < 2 && (a.x = 0), Math.abs(s.touchesCurrent.y - a.prevPositionY) < 2 && (a.y = 0), a.prevPositionX = s.touchesCurrent.x, a.prevPositionY = s.touchesCurrent.y, a.prevTime = Date.now(), i.$imageWrapEl.transform("translate3d(" + s.currentX + "px, " + s.currentY + "px,0)") } } }, onTouchEnd: function () { var t = this.zoom, e = t.gesture, i = t.image, s = t.velocity; if (e.$imageEl && 0 !== e.$imageEl.length) { if (!i.isTouched || !i.isMoved) return i.isTouched = !1, void (i.isMoved = !1); i.isTouched = !1, i.isMoved = !1; var a = 300, n = 300, r = s.x * a, r = i.currentX + r, o = s.y * n, o = i.currentY + o, s = (0 !== s.x && (a = Math.abs((r - i.currentX) / s.x)), 0 !== s.y && (n = Math.abs((o - i.currentY) / s.y)), Math.max(a, n)), a = (i.currentX = r, i.currentY = o, i.width * t.scale), n = i.height * t.scale; i.minX = Math.min(e.slideWidth / 2 - a / 2, 0), i.maxX = -i.minX, i.minY = Math.min(e.slideHeight / 2 - n / 2, 0), i.maxY = -i.minY, i.currentX = Math.max(Math.min(i.currentX, i.maxX), i.minX), i.currentY = Math.max(Math.min(i.currentY, i.maxY), i.minY), e.$imageWrapEl.transition(s).transform("translate3d(" + i.currentX + "px, " + i.currentY + "px,0)") } }, onTransitionEnd: function () { var t = this.zoom, e = t.gesture; e.$slideEl && this.previousIndex !== this.activeIndex && (e.$imageEl.transform("translate3d(0,0,0) scale(1)"), e.$imageWrapEl.transform("translate3d(0,0,0)"), t.scale = 1, t.currentScale = 1, e.$slideEl = void 0, e.$imageEl = void 0, e.$imageWrapEl = void 0) }, toggle: function (t) { var e = this.zoom; e.scale && 1 !== e.scale ? e.out() : e.in(t) }, in: function (t) { var e, i, s, a, n = this.zoom, r = this.params.zoom, o = n.gesture, l = n.image; o.$slideEl || (o.$slideEl = this.clickedSlide ? S(this.clickedSlide) : this.slides.eq(this.activeIndex), o.$imageEl = o.$slideEl.find("img, svg, canvas"), o.$imageWrapEl = o.$imageEl.parent("." + r.containerClass)), o.$imageEl && 0 !== o.$imageEl.length && (o.$slideEl.addClass("" + r.zoomedSlideClass), l = void 0 === l.touchesStart.x && t ? (e = ("touchend" === t.type ? t.changedTouches[0] : t).pageX, ("touchend" === t.type ? t.changedTouches[0] : t).pageY) : (e = l.touchesStart.x, l.touchesStart.y), n.scale = o.$imageWrapEl.attr("data-swiper-zoom") || r.maxRatio, n.currentScale = o.$imageWrapEl.attr("data-swiper-zoom") || r.maxRatio, t ? (r = o.$slideEl[0].offsetWidth, t = o.$slideEl[0].offsetHeight, e = o.$slideEl.offset().left + r / 2 - e, l = o.$slideEl.offset().top + t / 2 - l, s = o.$imageEl[0].offsetWidth, a = o.$imageEl[0].offsetHeight, s = s * n.scale, a = a * n.scale, s = -(r = Math.min(r / 2 - s / 2, 0)), a = -(t = Math.min(t / 2 - a / 2, 0)), s < (i = (i = e * n.scale) < r ? r : i) && (i = s), a < (s = (s = l * n.scale) < t ? t : s) && (s = a)) : s = i = 0, o.$imageWrapEl.transition(300).transform("translate3d(" + i + "px, " + s + "px,0)"), o.$imageEl.transition(300).transform("translate3d(0,0,0) scale(" + n.scale + ")")) }, out: function () { var t = this.zoom, e = this.params.zoom, i = t.gesture; i.$slideEl || (i.$slideEl = this.clickedSlide ? S(this.clickedSlide) : this.slides.eq(this.activeIndex), i.$imageEl = i.$slideEl.find("img, svg, canvas"), i.$imageWrapEl = i.$imageEl.parent("." + e.containerClass)), i.$imageEl && 0 !== i.$imageEl.length && (t.scale = 1, t.currentScale = 1, i.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"), i.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"), i.$slideEl.removeClass("" + e.zoomedSlideClass), i.$slideEl = void 0) }, enable: function () { var t, e, i = this.zoom; i.enabled || (i.enabled = !0, t = !("touchstart" !== this.touchEvents.start || !b.passiveListener || !this.params.passiveListeners) && { passive: !0, capture: !1 }, e = !b.passiveListener || { passive: !1, capture: !0 }, b.gestures ? (this.$wrapperEl.on("gesturestart", ".swiper-slide", i.onGestureStart, t), this.$wrapperEl.on("gesturechange", ".swiper-slide", i.onGestureChange, t), this.$wrapperEl.on("gestureend", ".swiper-slide", i.onGestureEnd, t)) : "touchstart" === this.touchEvents.start && (this.$wrapperEl.on(this.touchEvents.start, ".swiper-slide", i.onGestureStart, t), this.$wrapperEl.on(this.touchEvents.move, ".swiper-slide", i.onGestureChange, e), this.$wrapperEl.on(this.touchEvents.end, ".swiper-slide", i.onGestureEnd, t), this.touchEvents.cancel && this.$wrapperEl.on(this.touchEvents.cancel, ".swiper-slide", i.onGestureEnd, t)), this.$wrapperEl.on(this.touchEvents.move, "." + this.params.zoom.containerClass, i.onTouchMove, e)) }, disable: function () { var t, e, i = this.zoom; i.enabled && (this.zoom.enabled = !1, t = !("touchstart" !== this.touchEvents.start || !b.passiveListener || !this.params.passiveListeners) && { passive: !0, capture: !1 }, e = !b.passiveListener || { passive: !1, capture: !0 }, b.gestures ? (this.$wrapperEl.off("gesturestart", ".swiper-slide", i.onGestureStart, t), this.$wrapperEl.off("gesturechange", ".swiper-slide", i.onGestureChange, t), this.$wrapperEl.off("gestureend", ".swiper-slide", i.onGestureEnd, t)) : "touchstart" === this.touchEvents.start && (this.$wrapperEl.off(this.touchEvents.start, ".swiper-slide", i.onGestureStart, t), this.$wrapperEl.off(this.touchEvents.move, ".swiper-slide", i.onGestureChange, e), this.$wrapperEl.off(this.touchEvents.end, ".swiper-slide", i.onGestureEnd, t), this.touchEvents.cancel && this.$wrapperEl.off(this.touchEvents.cancel, ".swiper-slide", i.onGestureEnd, t)), this.$wrapperEl.off(this.touchEvents.move, "." + this.params.zoom.containerClass, i.onTouchMove, e)) } }, Z = { loadInSlide: function (t, o) { void 0 === o && (o = !0); var l, h = this, d = h.params.lazy; void 0 !== t && 0 !== h.slides.length && (t = (l = h.virtual && h.params.virtual.enabled ? h.$wrapperEl.children("." + h.params.slideClass + '[data-swiper-slide-index="' + t + '"]') : h.slides.eq(t)).find("." + d.elementClass + ":not(." + d.loadedClass + "):not(." + d.loadingClass + ")"), 0 !== (t = !l.hasClass(d.elementClass) || l.hasClass(d.loadedClass) || l.hasClass(d.loadingClass) ? t : t.add(l[0])).length && t.each(function (t, e) { var i = S(e), s = (i.addClass(d.loadingClass), i.attr("data-background")), a = i.attr("data-src"), n = i.attr("data-srcset"), r = i.attr("data-sizes"); h.loadImage(i[0], a || s, n, r, !1, function () { var t, e; null == h || !h || h && !h.params || h.destroyed || (s ? (i.css("background-image", 'url("' + s + '")'), i.removeAttr("data-background")) : (n && (i.attr("srcset", n), i.removeAttr("data-srcset")), r && (i.attr("sizes", r), i.removeAttr("data-sizes")), a && (i.attr("src", a), i.removeAttr("data-src"))), i.addClass(d.loadedClass).removeClass(d.loadingClass), l.find("." + d.preloaderClass).remove(), h.params.loop && o && (t = l.attr("data-swiper-slide-index"), l.hasClass(h.params.slideDuplicateClass) ? (e = h.$wrapperEl.children('[data-swiper-slide-index="' + t + '"]:not(.' + h.params.slideDuplicateClass + ")"), h.lazy.loadInSlide(e.index(), !1)) : (e = h.$wrapperEl.children("." + h.params.slideDuplicateClass + '[data-swiper-slide-index="' + t + '"]'), h.lazy.loadInSlide(e.index(), !1))), h.emit("lazyImageReady", l[0], i[0])) }), h.emit("lazyImageLoad", l[0], i[0]) })) }, load: function () { var i = this, e = i.$wrapperEl, s = i.params, a = i.slides, t = i.activeIndex, n = i.virtual && s.virtual.enabled, r = s.lazy, o = s.slidesPerView; function l(t) { if (n) { if (e.children("." + s.slideClass + '[data-swiper-slide-index="' + t + '"]').length) return 1 } else if (a[t]) return 1 } function h(t) { return n ? S(t).attr("data-swiper-slide-index") : S(t).index() } if ("auto" === o && (o = 0), i.lazy.initialImageLoaded || (i.lazy.initialImageLoaded = !0), i.params.watchSlidesVisibility) e.children("." + s.slideVisibleClass).each(function (t, e) { e = n ? S(e).attr("data-swiper-slide-index") : S(e).index(); i.lazy.loadInSlide(e) }); else if (1 < o) for (var d = t; d < t + o; d += 1)l(d) && i.lazy.loadInSlide(d); else i.lazy.loadInSlide(t); if (r.loadPrevNext) if (1 < o || r.loadPrevNextAmount && 1 < r.loadPrevNextAmount) { for (var r = r.loadPrevNextAmount, c = o, u = Math.min(t + c + Math.max(r, c), a.length), c = Math.max(t - Math.max(c, r), 0), p = t + o; p < u; p += 1)l(p) && i.lazy.loadInSlide(p); for (var m = c; m < t; m += 1)l(m) && i.lazy.loadInSlide(m) } else { r = e.children("." + s.slideNextClass), c = (0 < r.length && i.lazy.loadInSlide(h(r)), e.children("." + s.slidePrevClass)); 0 < c.length && i.lazy.loadInSlide(h(c)) } } }, z = { LinearSpline: function (t, e) { var i, s, a, n, r; return this.x = t, this.y = e, this.lastIndex = t.length - 1, this.interpolate = function (t) { return t ? (r = function (t, e) { for (s = -1, i = t.length; 1 < i - s;)t[a = i + s >> 1] <= e ? s = a : i = a; return i }(this.x, t), n = r - 1, (t - this.x[n]) * (this.y[r] - this.y[n]) / (this.x[r] - this.x[n]) + this.y[n]) : 0 }, this }, getInterpolateFunction: function (t) { this.controller.spline || (this.controller.spline = this.params.loop ? new z.LinearSpline(this.slidesGrid, t.slidesGrid) : new z.LinearSpline(this.snapGrid, t.snapGrid)) }, setTranslate: function (t, e) { var i, s, a = this, n = a.controller.control; function r(t) { var e = a.rtlTranslate ? -a.translate : a.translate; "slide" === a.params.controller.by && (a.controller.getInterpolateFunction(t), s = -a.controller.spline.interpolate(-e)), s && "container" !== a.params.controller.by || (i = (t.maxTranslate() - t.minTranslate()) / (a.maxTranslate() - a.minTranslate()), s = (e - a.minTranslate()) * i + t.minTranslate()), a.params.controller.inverse && (s = t.maxTranslate() - s), t.updateProgress(s), t.setTranslate(s, a), t.updateActiveIndex(), t.updateSlidesClasses() } if (Array.isArray(n)) for (var o = 0; o < n.length; o += 1)n[o] !== e && n[o] instanceof p && r(n[o]); else n instanceof p && e !== n && r(n) }, setTransition: function (e, t) { var i, s = this, a = s.controller.control; function n(t) { t.setTransition(e, s), 0 !== e && (t.transitionStart(), t.params.autoHeight && U.nextTick(function () { t.updateAutoHeight() }), t.$wrapperEl.transitionEnd(function () { a && (t.params.loop && "slide" === s.params.controller.by && t.loopFix(), t.transitionEnd()) })) } if (Array.isArray(a)) for (i = 0; i < a.length; i += 1)a[i] !== t && a[i] instanceof p && n(a[i]); else a instanceof p && t !== a && n(a) } }, tt = { makeElFocusable: function (t) { return t.attr("tabIndex", "0"), t }, addElRole: function (t, e) { return t.attr("role", e), t }, addElLabel: function (t, e) { return t.attr("aria-label", e), t }, disableEl: function (t) { return t.attr("aria-disabled", !0), t }, enableEl: function (t) { return t.attr("aria-disabled", !1), t }, onEnterKey: function (t) { var e = this.params.a11y; 13 === t.keyCode && (t = S(t.target), this.navigation && this.navigation.$nextEl && t.is(this.navigation.$nextEl) && (this.isEnd && !this.params.loop || this.slideNext(), this.isEnd ? this.a11y.notify(e.lastSlideMessage) : this.a11y.notify(e.nextSlideMessage)), this.navigation && this.navigation.$prevEl && t.is(this.navigation.$prevEl) && (this.isBeginning && !this.params.loop || this.slidePrev(), this.isBeginning ? this.a11y.notify(e.firstSlideMessage) : this.a11y.notify(e.prevSlideMessage)), this.pagination && t.is("." + this.params.pagination.bulletClass) && t[0].click()) }, notify: function (t) { var e = this.a11y.liveRegion; 0 !== e.length && (e.html(""), e.html(t)) }, updateNavigation: function () { var t, e; !this.params.loop && this.navigation && (t = (e = this.navigation).$nextEl, (e = e.$prevEl) && 0 < e.length && (this.isBeginning ? this.a11y.disableEl(e) : this.a11y.enableEl(e)), t && 0 < t.length && (this.isEnd ? this.a11y.disableEl(t) : this.a11y.enableEl(t))) }, updatePagination: function () { var i = this, s = i.params.a11y; i.pagination && i.params.pagination.clickable && i.pagination.bullets && i.pagination.bullets.length && i.pagination.bullets.each(function (t, e) { e = S(e); i.a11y.makeElFocusable(e), i.a11y.addElRole(e, "button"), i.a11y.addElLabel(e, s.paginationBulletMessage.replace(/{{index}}/, e.index() + 1)) }) }, init: function () { this.$el.append(this.a11y.liveRegion); var t, e, i = this.params.a11y; this.navigation && this.navigation.$nextEl && (t = this.navigation.$nextEl), this.navigation && this.navigation.$prevEl && (e = this.navigation.$prevEl), t && (this.a11y.makeElFocusable(t), this.a11y.addElRole(t, "button"), this.a11y.addElLabel(t, i.nextSlideMessage), t.on("keydown", this.a11y.onEnterKey)), e && (this.a11y.makeElFocusable(e), this.a11y.addElRole(e, "button"), this.a11y.addElLabel(e, i.prevSlideMessage), e.on("keydown", this.a11y.onEnterKey)), this.pagination && this.params.pagination.clickable && this.pagination.bullets && this.pagination.bullets.length && this.pagination.$el.on("keydown", "." + this.params.pagination.bulletClass, this.a11y.onEnterKey) }, destroy: function () { var t, e; this.a11y.liveRegion && 0 < this.a11y.liveRegion.length && this.a11y.liveRegion.remove(), this.navigation && this.navigation.$nextEl && (t = this.navigation.$nextEl), this.navigation && this.navigation.$prevEl && (e = this.navigation.$prevEl), t && t.off("keydown", this.a11y.onEnterKey), e && e.off("keydown", this.a11y.onEnterKey), this.pagination && this.params.pagination.clickable && this.pagination.bullets && this.pagination.bullets.length && this.pagination.$el.off("keydown", "." + this.params.pagination.bulletClass, this.a11y.onEnterKey) } }, I = { init: function () { if (this.params.history) { if (!X.history || !X.history.pushState) return this.params.history.enabled = !1, void (this.params.hashNavigation.enabled = !0); var t = this.history; t.initialized = !0, t.paths = I.getPathValues(), (t.paths.key || t.paths.value) && (t.scrollToSlide(0, t.paths.value, this.params.runCallbacksOnInit), this.params.history.replaceState || X.addEventListener("popstate", this.history.setHistoryPopState)) } }, destroy: function () { this.params.history.replaceState || X.removeEventListener("popstate", this.history.setHistoryPopState) }, setHistoryPopState: function () { this.history.paths = I.getPathValues(), this.history.scrollToSlide(this.params.speed, this.history.paths.value, !1) }, getPathValues: function () { var t = X.location.pathname.slice(1).split("/").filter(function (t) { return "" !== t }), e = t.length; return { key: t[e - 2], value: t[e - 1] } }, setHistory: function (t, e) { this.history.initialized && this.params.history.enabled && (e = this.slides.eq(e), e = I.slugify(e.attr("data-history")), X.location.pathname.includes(t) || (e = t + "/" + e), (t = X.history.state) && t.value === e || (this.params.history.replaceState ? X.history.replaceState({ value: e }, null, e) : X.history.pushState({ value: e }, null, e))) }, slugify: function (t) { return t.toString().replace(/\s+/g, "-").replace(/[^\w-]+/g, "").replace(/--+/g, "-").replace(/^-+/, "").replace(/-+$/, "") }, scrollToSlide: function (t, e, i) { if (e) for (var s = 0, a = this.slides.length; s < a; s += 1) { var n = this.slides.eq(s); I.slugify(n.attr("data-history")) !== e || n.hasClass(this.params.slideDuplicateClass) || (n = n.index(), this.slideTo(n, t, i)) } else this.slideTo(0, t, i) } }, P = { onHashCange: function () { var t = c.location.hash.replace("#", ""); t !== this.slides.eq(this.activeIndex).attr("data-hash") && void 0 !== (t = this.$wrapperEl.children("." + this.params.slideClass + '[data-hash="' + t + '"]').index()) && this.slideTo(t) }, setHash: function () { var t; this.hashNavigation.initialized && this.params.hashNavigation.enabled && (this.params.hashNavigation.replaceState && X.history && X.history.replaceState ? X.history.replaceState(null, null, "#" + this.slides.eq(this.activeIndex).attr("data-hash") || "") : (t = (t = this.slides.eq(this.activeIndex)).attr("data-hash") || t.attr("data-history"), c.location.hash = t || "")) }, init: function () { if (!(!this.params.hashNavigation.enabled || this.params.history && this.params.history.enabled)) { this.hashNavigation.initialized = !0; var t = c.location.hash.replace("#", ""); if (t) for (var e = 0, i = this.slides.length; e < i; e += 1) { var s = this.slides.eq(e); (s.attr("data-hash") || s.attr("data-history")) !== t || s.hasClass(this.params.slideDuplicateClass) || (s = s.index(), this.slideTo(s, 0, this.params.runCallbacksOnInit, !0)) } this.params.hashNavigation.watchState && S(X).on("hashchange", this.hashNavigation.onHashCange) } }, destroy: function () { this.params.hashNavigation.watchState && S(X).off("hashchange", this.hashNavigation.onHashCange) } }, H = { run: function () { var t = this, e = t.slides.eq(t.activeIndex), i = t.params.autoplay.delay; e.attr("data-swiper-autoplay") && (i = e.attr("data-swiper-autoplay") || t.params.autoplay.delay), clearTimeout(t.autoplay.timeout), t.autoplay.timeout = U.nextTick(function () { t.params.autoplay.reverseDirection ? t.params.loop ? (t.loopFix(), t.slidePrev(t.params.speed, !0, !0), t.emit("autoplay")) : t.isBeginning ? t.params.autoplay.stopOnLastSlide ? t.autoplay.stop() : (t.slideTo(t.slides.length - 1, t.params.speed, !0, !0), t.emit("autoplay")) : (t.slidePrev(t.params.speed, !0, !0), t.emit("autoplay")) : t.params.loop ? (t.loopFix(), t.slideNext(t.params.speed, !0, !0), t.emit("autoplay")) : t.isEnd ? t.params.autoplay.stopOnLastSlide ? t.autoplay.stop() : (t.slideTo(0, t.params.speed, !0, !0), t.emit("autoplay")) : (t.slideNext(t.params.speed, !0, !0), t.emit("autoplay")), t.params.cssMode && t.autoplay.running && t.autoplay.run() }, i) }, start: function () { return void 0 === this.autoplay.timeout && !this.autoplay.running && (this.autoplay.running = !0, this.emit("autoplayStart"), this.autoplay.run(), !0) }, stop: function () { return !!this.autoplay.running && void 0 !== this.autoplay.timeout && (this.autoplay.timeout && (clearTimeout(this.autoplay.timeout), this.autoplay.timeout = void 0), this.autoplay.running = !1, this.emit("autoplayStop"), !0) }, pause: function (t) { !this.autoplay.running || this.autoplay.paused || (this.autoplay.timeout && clearTimeout(this.autoplay.timeout), this.autoplay.paused = !0, 0 !== t && this.params.autoplay.waitForTransition ? (this.$wrapperEl[0].addEventListener("transitionend", this.autoplay.onTransitionEnd), this.$wrapperEl[0].addEventListener("webkitTransitionEnd", this.autoplay.onTransitionEnd)) : (this.autoplay.paused = !1, this.autoplay.run())) } }, et = { setTranslate: function () { for (var t = this.slides, e = 0; e < t.length; e += 1) { var i = this.slides.eq(e), s = -i[0].swiperSlideOffset, a = (this.params.virtualTranslate || (s -= this.translate), 0), n = (this.isHorizontal() || (a = s, s = 0), this.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(i[0].progress), 0) : 1 + Math.min(Math.max(i[0].progress, -1), 0)); i.css({ opacity: n }).transform("translate3d(" + s + "px, " + a + "px, 0px)") } }, setTransition: function (t) { var i, s = this, e = s.slides, a = s.$wrapperEl; e.transition(t), s.params.virtualTranslate && 0 !== t && (i = !1, e.transitionEnd(function () { if (!i && s && !s.destroyed) { i = !0, s.animating = !1; for (var t = ["webkitTransitionEnd", "transitionend"], e = 0; e < t.length; e += 1)a.trigger(t[e]) } })) } }, it = { setTranslate: function () { var t, e = this.$el, i = this.$wrapperEl, s = this.slides, a = this.width, n = this.height, r = this.rtlTranslate, o = this.size, l = this.params.cubeEffect, h = this.isHorizontal(), d = this.virtual && this.params.virtual.enabled, c = 0; l.shadow && (h ? (0 === (t = i.find(".swiper-cube-shadow")).length && (t = S('

'), i.append(t)), t.css({ height: a + "px" })) : 0 === (t = e.find(".swiper-cube-shadow")).length && (t = S('

'), e.append(t))); for (var u, p = 0; p < s.length; p += 1) { var m = s.eq(p), v = p, f = 90 * (v = d ? parseInt(m.attr("data-swiper-slide-index"), 10) : v), g = Math.floor(f / 360), w = (r && (f = -f, g = Math.floor(-f / 360)), Math.max(Math.min(m[0].progress, 1), -1)), y = 0, b = 0, E = 0, g = (v % 4 == 0 ? (y = 4 * -g * o, E = 0) : (v - 1) % 4 == 0 ? (y = 0, E = 4 * -g * o) : (v - 2) % 4 == 0 ? (y = o + 4 * g * o, E = o) : (v - 3) % 4 == 0 && (y = -o, E = 3 * o + 4 * o * g), r && (y = -y), h || (b = y, y = 0), "rotateX(" + (h ? 0 : -f) + "deg) rotateY(" + (h ? f : 0) + "deg) translate3d(" + y + "px, " + b + "px, " + E + "px)"); w <= 1 && -1 < w && (c = r ? 90 * -v - 90 * w : 90 * v + 90 * w), m.transform(g), l.slideShadows && (f = h ? m.find(".swiper-slide-shadow-left") : m.find(".swiper-slide-shadow-top"), y = h ? m.find(".swiper-slide-shadow-right") : m.find(".swiper-slide-shadow-bottom"), 0 === f.length && (f = S('

'), m.append(f)), 0 === y.length && (y = S('

'), m.append(y)), f.length && (f[0].style.opacity = Math.max(-w, 0)), y.length && (y[0].style.opacity = Math.max(w, 0))) } i.css({ "-webkit-transform-origin": "50% 50% -" + o / 2 + "px", "-moz-transform-origin": "50% 50% -" + o / 2 + "px", "-ms-transform-origin": "50% 50% -" + o / 2 + "px", "transform-origin": "50% 50% -" + o / 2 + "px" }), l.shadow && (h ? t.transform("translate3d(0px, " + (a / 2 + l.shadowOffset) + "px, " + -a / 2 + "px) rotateX(90deg) rotateZ(0deg) scale(" + l.shadowScale + ")") : (e = Math.abs(c) - 90 * Math.floor(Math.abs(c) / 90), a = 1.5 - (Math.sin(2 * e * Math.PI / 360) / 2 + Math.cos(2 * e * Math.PI / 360) / 2), e = l.shadowScale, a = l.shadowScale / a, u = l.shadowOffset, t.transform("scale3d(" + e + ", 1, " + a + ") translate3d(0px, " + (n / 2 + u) + "px, " + -n / 2 / a + "px) rotateX(-90deg)"))), i.transform("translate3d(0px,0," + (T.isSafari || T.isUiWebView ? -o / 2 : 0) + "px) rotateX(" + (this.isHorizontal() ? 0 : c) + "deg) rotateY(" + (this.isHorizontal() ? -c : 0) + "deg)") }, setTransition: function (t) { var e = this.$el; this.slides.transition(t).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(t), this.params.cubeEffect.shadow && !this.isHorizontal() && e.find(".swiper-cube-shadow").transition(t) } }, st = { setTranslate: function () { for (var t = this.slides, e = this.rtlTranslate, i = 0; i < t.length; i += 1) { var s, a, n = t.eq(i), r = n[0].progress, o = -180 * (r = this.params.flipEffect.limitRotation ? Math.max(Math.min(n[0].progress, 1), -1) : r), l = 0, h = -n[0].swiperSlideOffset, d = 0; this.isHorizontal() ? e && (o = -o) : (d = h, l = -o, o = h = 0), n[0].style.zIndex = -Math.abs(Math.round(r)) + t.length, this.params.flipEffect.slideShadows && (s = this.isHorizontal() ? n.find(".swiper-slide-shadow-left") : n.find(".swiper-slide-shadow-top"), a = this.isHorizontal() ? n.find(".swiper-slide-shadow-right") : n.find(".swiper-slide-shadow-bottom"), 0 === s.length && (s = S('

'), n.append(s)), 0 === a.length && (a = S('

'), n.append(a)), s.length && (s[0].style.opacity = Math.max(-r, 0)), a.length && (a[0].style.opacity = Math.max(r, 0))), n.transform("translate3d(" + h + "px, " + d + "px, 0px) rotateX(" + l + "deg) rotateY(" + o + "deg)") } }, setTransition: function (t) { var i, s = this, e = s.slides, a = s.activeIndex, n = s.$wrapperEl; e.transition(t).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(t), s.params.virtualTranslate && 0 !== t && (i = !1, e.eq(a).transitionEnd(function () { if (!i && s && !s.destroyed) { i = !0, s.animating = !1; for (var t = ["webkitTransitionEnd", "transitionend"], e = 0; e < t.length; e += 1)n.trigger(t[e]) } })) } }, at = { setTranslate: function () { for (var t = this.width, e = this.height, i = this.slides, s = this.$wrapperEl, a = this.slidesSizesGrid, n = this.params.coverflowEffect, r = this.isHorizontal(), o = this.translate, l = r ? t / 2 - o : e / 2 - o, h = r ? n.rotate : -n.rotate, d = n.depth, c = 0, u = i.length; c < u; c += 1) { var p = i.eq(c), m = a[c], m = (l - p[0].swiperSlideOffset - m / 2) / m * n.modifier, v = r ? h * m : 0, f = r ? 0 : h * m, g = -d * Math.abs(m), w = r ? 0 : n.stretch * m, y = r ? n.stretch * m : 0, y = (Math.abs(y) < .001 && (y = 0), Math.abs(w) < .001 && (w = 0), Math.abs(g) < .001 && (g = 0), Math.abs(v) < .001 && (v = 0), "translate3d(" + y + "px," + w + "px," + g + "px) rotateX(" + (f = Math.abs(f) < .001 ? 0 : f) + "deg) rotateY(" + v + "deg)"); p.transform(y), p[0].style.zIndex = 1 - Math.abs(Math.round(m)), n.slideShadows && (w = r ? p.find(".swiper-slide-shadow-left") : p.find(".swiper-slide-shadow-top"), g = r ? p.find(".swiper-slide-shadow-right") : p.find(".swiper-slide-shadow-bottom"), 0 === w.length && (w = S('

'), p.append(w)), 0 === g.length && (g = S('

'), p.append(g)), w.length && (w[0].style.opacity = 0 < m ? m : 0), g.length && (g[0].style.opacity = 0 < -m ? -m : 0)) } (b.pointerEvents || b.prefixedPointerEvents) && (s[0].style.perspectiveOrigin = l + "px 50%") }, setTransition: function (t) { this.slides.transition(t).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(t) } }, nt = { init: function () { var t = this.params.thumbs, e = this.constructor; t.swiper instanceof e ? (this.thumbs.swiper = t.swiper, U.extend(this.thumbs.swiper.originalParams, { watchSlidesProgress: !0, slideToClickedSlide: !1 }), U.extend(this.thumbs.swiper.params, { watchSlidesProgress: !0, slideToClickedSlide: !1 })) : U.isObject(t.swiper) && (this.thumbs.swiper = new e(U.extend({}, t.swiper, { watchSlidesVisibility: !0, watchSlidesProgress: !0, slideToClickedSlide: !1 })), this.thumbs.swiperCreated = !0), this.thumbs.swiper.$el.addClass(this.params.thumbs.thumbsContainerClass), this.thumbs.swiper.on("tap", this.thumbs.onThumbClick) }, onThumbClick: function () { var t, e, i, s = this.thumbs.swiper; s && (t = s.clickedIndex, (i = s.clickedSlide) && S(i).hasClass(this.params.thumbs.slideThumbActiveClass) || null == t || (i = s.params.loop ? parseInt(S(s.clickedSlide).attr("data-swiper-slide-index"), 10) : t, this.params.loop && (s = this.activeIndex, this.slides.eq(s).hasClass(this.params.slideDuplicateClass) && (this.loopFix(), this._clientLeft = this.$wrapperEl[0].clientLeft, s = this.activeIndex), t = this.slides.eq(s).prevAll('[data-swiper-slide-index="' + i + '"]').eq(0).index(), e = this.slides.eq(s).nextAll('[data-swiper-slide-index="' + i + '"]').eq(0).index(), i = void 0 === t || void 0 !== e && e - s < s - t ? e : t), this.slideTo(i))) }, update: function (t) { var e = this.thumbs.swiper; if (e) { var i, s, a, n = "auto" === e.params.slidesPerView ? e.slidesPerViewDynamic() : e.params.slidesPerView, r = (this.realIndex !== e.realIndex && (i = e.activeIndex, a = e.params.loop ? (e.slides.eq(i).hasClass(e.params.slideDuplicateClass) && (e.loopFix(), e._clientLeft = e.$wrapperEl[0].clientLeft, i = e.activeIndex), s = e.slides.eq(i).prevAll('[data-swiper-slide-index="' + this.realIndex + '"]').eq(0).index(), a = e.slides.eq(i).nextAll('[data-swiper-slide-index="' + this.realIndex + '"]').eq(0).index(), void 0 === s ? a : void 0 === a ? s : a - i == i - s ? i : a - i < i - s ? a : s) : this.realIndex, e.visibleSlidesIndexes && e.visibleSlidesIndexes.indexOf(a) < 0 && (e.params.centeredSlides ? a = i < a ? a - Math.floor(n / 2) + 1 : a + Math.floor(n / 2) - 1 : i < a && (a = a - n + 1), e.slideTo(a, t ? 0 : void 0))), 1), o = this.params.thumbs.slideThumbActiveClass; if (1 < this.params.slidesPerView && !this.params.centeredSlides && (r = this.params.slidesPerView), this.params.thumbs.multipleActiveThumbs || (r = 1), r = Math.floor(r), e.slides.removeClass(o), e.params.loop || e.params.virtual && e.params.virtual.enabled) for (var l = 0; l < r; l += 1)e.$wrapperEl.children('[data-swiper-slide-index="' + (this.realIndex + l) + '"]').addClass(o); else for (var h = 0; h < r; h += 1)e.slides.eq(this.realIndex + h).addClass(o) } } }, M = [m, Y, G, v, g, y, E, { name: "mousewheel", params: { mousewheel: { enabled: !1, releaseOnEdges: !1, invert: !1, forceToAxis: !1, sensitivity: 1, eventsTarged: "container" } }, create: function () { U.extend(this, { mousewheel: { enabled: !1, enable: x.enable.bind(this), disable: x.disable.bind(this), handle: x.handle.bind(this), handleMouseEnter: x.handleMouseEnter.bind(this), handleMouseLeave: x.handleMouseLeave.bind(this), animateSlider: x.animateSlider.bind(this), releaseScroll: x.releaseScroll.bind(this), lastScrollTime: U.now(), lastEventBeforeSnap: void 0, recentWheelEvents: [] } }) }, on: { init: function () { !this.params.mousewheel.enabled && this.params.cssMode && this.mousewheel.disable(), this.params.mousewheel.enabled && this.mousewheel.enable() }, destroy: function () { this.params.cssMode && this.mousewheel.enable(), this.mousewheel.enabled && this.mousewheel.disable() } } }, { name: "navigation", params: { navigation: { nextEl: null, prevEl: null, hideOnClick: !1, disabledClass: "swiper-button-disabled", hiddenClass: "swiper-button-hidden", lockClass: "swiper-button-lock" } }, create: function () { U.extend(this, { navigation: { init: L.init.bind(this), update: L.update.bind(this), destroy: L.destroy.bind(this), onNextClick: L.onNextClick.bind(this), onPrevClick: L.onPrevClick.bind(this) } }) }, on: { init: function () { this.navigation.init(), this.navigation.update() }, toEdge: function () { this.navigation.update() }, fromEdge: function () { this.navigation.update() }, destroy: function () { this.navigation.destroy() }, click: function (t) { var e, i = this.navigation, s = i.$nextEl, i = i.$prevEl; !this.params.navigation.hideOnClick || S(t.target).is(i) || S(t.target).is(s) || (s ? e = s.hasClass(this.params.navigation.hiddenClass) : i && (e = i.hasClass(this.params.navigation.hiddenClass)), !0 === e ? this.emit("navigationShow", this) : this.emit("navigationHide", this), s && s.toggleClass(this.params.navigation.hiddenClass), i && i.toggleClass(this.params.navigation.hiddenClass)) } } }, { name: "pagination", params: { pagination: { el: null, bulletElement: "span", clickable: !1, hideOnClick: !1, renderBullet: null, renderProgressbar: null, renderFraction: null, renderCustom: null, progressbarOpposite: !1, type: "bullets", dynamicBullets: !1, dynamicMainBullets: 1, formatFractionCurrent: function (t) { return t }, formatFractionTotal: function (t) { return t }, bulletClass: "swiper-pagination-bullet", bulletActiveClass: "swiper-pagination-bullet-active", modifierClass: "swiper-pagination-", currentClass: "swiper-pagination-current", totalClass: "swiper-pagination-total", hiddenClass: "swiper-pagination-hidden", progressbarFillClass: "swiper-pagination-progressbar-fill", progressbarOppositeClass: "swiper-pagination-progressbar-opposite", clickableClass: "swiper-pagination-clickable", lockClass: "swiper-pagination-lock" } }, create: function () { U.extend(this, { pagination: { init: A.init.bind(this), render: A.render.bind(this), update: A.update.bind(this), destroy: A.destroy.bind(this), dynamicBulletIndex: 0 } }) }, on: { init: function () { this.pagination.init(), this.pagination.render(), this.pagination.update() }, activeIndexChange: function () { !this.params.loop && void 0 !== this.snapIndex || this.pagination.update() }, snapIndexChange: function () { this.params.loop || this.pagination.update() }, slidesLengthChange: function () { this.params.loop && (this.pagination.render(), this.pagination.update()) }, snapGridLengthChange: function () { this.params.loop || (this.pagination.render(), this.pagination.update()) }, destroy: function () { this.pagination.destroy() }, click: function (t) { this.params.pagination.el && this.params.pagination.hideOnClick && 0 < this.pagination.$el.length && !S(t.target).hasClass(this.params.pagination.bulletClass) && (!0 === this.pagination.$el.hasClass(this.params.pagination.hiddenClass) ? this.emit("paginationShow", this) : this.emit("paginationHide", this), this.pagination.$el.toggleClass(this.params.pagination.hiddenClass)) } } }, { name: "scrollbar", params: { scrollbar: { el: null, dragSize: "auto", hide: !1, draggable: !1, snapOnRelease: !0, lockClass: "swiper-scrollbar-lock", dragClass: "swiper-scrollbar-drag" } }, create: function () { U.extend(this, { scrollbar: { init: k.init.bind(this), destroy: k.destroy.bind(this), updateSize: k.updateSize.bind(this), setTranslate: k.setTranslate.bind(this), setTransition: k.setTransition.bind(this), enableDraggable: k.enableDraggable.bind(this), disableDraggable: k.disableDraggable.bind(this), setDragPosition: k.setDragPosition.bind(this), getPointerPosition: k.getPointerPosition.bind(this), onDragStart: k.onDragStart.bind(this), onDragMove: k.onDragMove.bind(this), onDragEnd: k.onDragEnd.bind(this), isTouched: !1, timeout: null, dragTimeout: null } }) }, on: { init: function () { this.scrollbar.init(), this.scrollbar.updateSize(), this.scrollbar.setTranslate() }, update: function () { this.scrollbar.updateSize() }, resize: function () { this.scrollbar.updateSize() }, observerUpdate: function () { this.scrollbar.updateSize() }, setTranslate: function () { this.scrollbar.setTranslate() }, setTransition: function (t) { this.scrollbar.setTransition(t) }, destroy: function () { this.scrollbar.destroy() } } }, { name: "parallax", params: { parallax: { enabled: !1 } }, create: function () { U.extend(this, { parallax: { setTransform: Q.setTransform.bind(this), setTranslate: Q.setTranslate.bind(this), setTransition: Q.setTransition.bind(this) } }) }, on: { beforeInit: function () { this.params.parallax.enabled && (this.params.watchSlidesProgress = !0, this.originalParams.watchSlidesProgress = !0) }, init: function () { this.params.parallax.enabled && this.parallax.setTranslate() }, setTranslate: function () { this.params.parallax.enabled && this.parallax.setTranslate() }, setTransition: function (t) { this.params.parallax.enabled && this.parallax.setTransition(t) } } }, { name: "zoom", params: { zoom: { enabled: !1, maxRatio: 3, minRatio: 1, toggle: !0, containerClass: "swiper-zoom-container", zoomedSlideClass: "swiper-slide-zoomed" } }, create: function () { var s = this, e = { enabled: !1, scale: 1, currentScale: 1, isScaling: !1, gesture: { $slideEl: void 0, slideWidth: void 0, slideHeight: void 0, $imageEl: void 0, $imageWrapEl: void 0, maxRatio: 3 }, image: { isTouched: void 0, isMoved: void 0, currentX: void 0, currentY: void 0, minX: void 0, minY: void 0, maxX: void 0, maxY: void 0, width: void 0, height: void 0, startX: void 0, startY: void 0, touchesStart: {}, touchesCurrent: {} }, velocity: { x: void 0, y: void 0, prevPositionX: void 0, prevPositionY: void 0, prevTime: void 0 } }, a = ("onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out".split(" ").forEach(function (t) { e[t] = J[t].bind(s) }), U.extend(s, { zoom: e }), 1); Object.defineProperty(s.zoom, "scale", { get: function () { return a }, set: function (t) { var e, i; a !== t && (e = s.zoom.gesture.$imageEl ? s.zoom.gesture.$imageEl[0] : void 0, i = s.zoom.gesture.$slideEl ? s.zoom.gesture.$slideEl[0] : void 0, s.emit("zoomChange", t, e, i)), a = t } }) }, on: { init: function () { this.params.zoom.enabled && this.zoom.enable() }, destroy: function () { this.zoom.disable() }, touchStart: function (t) { this.zoom.enabled && this.zoom.onTouchStart(t) }, touchEnd: function (t) { this.zoom.enabled && this.zoom.onTouchEnd(t) }, doubleTap: function (t) { this.params.zoom.enabled && this.zoom.enabled && this.params.zoom.toggle && this.zoom.toggle(t) }, transitionEnd: function () { this.zoom.enabled && this.params.zoom.enabled && this.zoom.onTransitionEnd() }, slideChange: function () { this.zoom.enabled && this.params.zoom.enabled && this.params.cssMode && this.zoom.onTransitionEnd() } } }, { name: "lazy", params: { lazy: { enabled: !1, loadPrevNext: !1, loadPrevNextAmount: 1, loadOnTransitionStart: !1, elementClass: "swiper-lazy", loadingClass: "swiper-lazy-loading", loadedClass: "swiper-lazy-loaded", preloaderClass: "swiper-lazy-preloader" } }, create: function () { U.extend(this, { lazy: { initialImageLoaded: !1, load: Z.load.bind(this), loadInSlide: Z.loadInSlide.bind(this) } }) }, on: { beforeInit: function () { this.params.lazy.enabled && this.params.preloadImages && (this.params.preloadImages = !1) }, init: function () { this.params.lazy.enabled && !this.params.loop && 0 === this.params.initialSlide && this.lazy.load() }, scroll: function () { this.params.freeMode && !this.params.freeModeSticky && this.lazy.load() }, resize: function () { this.params.lazy.enabled && this.lazy.load() }, scrollbarDragMove: function () { this.params.lazy.enabled && this.lazy.load() }, transitionStart: function () { this.params.lazy.enabled && (this.params.lazy.loadOnTransitionStart || !this.params.lazy.loadOnTransitionStart && !this.lazy.initialImageLoaded) && this.lazy.load() }, transitionEnd: function () { this.params.lazy.enabled && !this.params.lazy.loadOnTransitionStart && this.lazy.load() }, slideChange: function () { this.params.lazy.enabled && this.params.cssMode && this.lazy.load() } } }, { name: "controller", params: { controller: { control: void 0, inverse: !1, by: "slide" } }, create: function () { U.extend(this, { controller: { control: this.params.controller.control, getInterpolateFunction: z.getInterpolateFunction.bind(this), setTranslate: z.setTranslate.bind(this), setTransition: z.setTransition.bind(this) } }) }, on: { update: function () { this.controller.control && this.controller.spline && (this.controller.spline = void 0, delete this.controller.spline) }, resize: function () { this.controller.control && this.controller.spline && (this.controller.spline = void 0, delete this.controller.spline) }, observerUpdate: function () { this.controller.control && this.controller.spline && (this.controller.spline = void 0, delete this.controller.spline) }, setTranslate: function (t, e) { this.controller.control && this.controller.setTranslate(t, e) }, setTransition: function (t, e) { this.controller.control && this.controller.setTransition(t, e) } } }, { name: "a11y", params: { a11y: { enabled: !0, notificationClass: "swiper-notification", prevSlideMessage: "Previous slide", nextSlideMessage: "Next slide", firstSlideMessage: "This is the first slide", lastSlideMessage: "This is the last slide", paginationBulletMessage: "Go to slide {{index}}" } }, create: function () { var e = this; U.extend(e, { a11y: { liveRegion: S('') } }), Object.keys(tt).forEach(function (t) { e.a11y[t] = tt[t].bind(e) }) }, on: { init: function () { this.params.a11y.enabled && (this.a11y.init(), this.a11y.updateNavigation()) }, toEdge: function () { this.params.a11y.enabled && this.a11y.updateNavigation() }, fromEdge: function () { this.params.a11y.enabled && this.a11y.updateNavigation() }, paginationUpdate: function () { this.params.a11y.enabled && this.a11y.updatePagination() }, destroy: function () { this.params.a11y.enabled && this.a11y.destroy() } } }, { name: "history", params: { history: { enabled: !1, replaceState: !1, key: "slides" } }, create: function () { U.extend(this, { history: { init: I.init.bind(this), setHistory: I.setHistory.bind(this), setHistoryPopState: I.setHistoryPopState.bind(this), scrollToSlide: I.scrollToSlide.bind(this), destroy: I.destroy.bind(this) } }) }, on: { init: function () { this.params.history.enabled && this.history.init() }, destroy: function () { this.params.history.enabled && this.history.destroy() }, transitionEnd: function () { this.history.initialized && this.history.setHistory(this.params.history.key, this.activeIndex) }, slideChange: function () { this.history.initialized && this.params.cssMode && this.history.setHistory(this.params.history.key, this.activeIndex) } } }, { name: "hash-navigation", params: { hashNavigation: { enabled: !1, replaceState: !1, watchState: !1 } }, create: function () { U.extend(this, { hashNavigation: { initialized: !1, init: P.init.bind(this), destroy: P.destroy.bind(this), setHash: P.setHash.bind(this), onHashCange: P.onHashCange.bind(this) } }) }, on: { init: function () { this.params.hashNavigation.enabled && this.hashNavigation.init() }, destroy: function () { this.params.hashNavigation.enabled && this.hashNavigation.destroy() }, transitionEnd: function () { this.hashNavigation.initialized && this.hashNavigation.setHash() }, slideChange: function () { this.hashNavigation.initialized && this.params.cssMode && this.hashNavigation.setHash() } } }, { name: "autoplay", params: { autoplay: { enabled: !1, delay: 3e3, waitForTransition: !0, disableOnInteraction: !0, stopOnLastSlide: !1, reverseDirection: !1 } }, create: function () { var e = this; U.extend(e, { autoplay: { running: !1, paused: !1, run: H.run.bind(e), start: H.start.bind(e), stop: H.stop.bind(e), pause: H.pause.bind(e), onVisibilityChange: function () { "hidden" === document.visibilityState && e.autoplay.running && e.autoplay.pause(), "visible" === document.visibilityState && e.autoplay.paused && (e.autoplay.run(), e.autoplay.paused = !1) }, onTransitionEnd: function (t) { e && !e.destroyed && e.$wrapperEl && t.target === this && (e.$wrapperEl[0].removeEventListener("transitionend", e.autoplay.onTransitionEnd), e.$wrapperEl[0].removeEventListener("webkitTransitionEnd", e.autoplay.onTransitionEnd), e.autoplay.paused = !1, e.autoplay.running ? e.autoplay.run() : e.autoplay.stop()) } } }) }, on: { init: function () { this.params.autoplay.enabled && (this.autoplay.start(), document.addEventListener("visibilitychange", this.autoplay.onVisibilityChange)) }, beforeTransitionStart: function (t, e) { this.autoplay.running && (e || !this.params.autoplay.disableOnInteraction ? this.autoplay.pause(t) : this.autoplay.stop()) }, sliderFirstMove: function () { this.autoplay.running && (this.params.autoplay.disableOnInteraction ? this.autoplay.stop() : this.autoplay.pause()) }, touchEnd: function () { this.params.cssMode && this.autoplay.paused && !this.params.autoplay.disableOnInteraction && this.autoplay.run() }, destroy: function () { this.autoplay.running && this.autoplay.stop(), document.removeEventListener("visibilitychange", this.autoplay.onVisibilityChange) } } }, { name: "effect-fade", params: { fadeEffect: { crossFade: !1 } }, create: function () { U.extend(this, { fadeEffect: { setTranslate: et.setTranslate.bind(this), setTransition: et.setTransition.bind(this) } }) }, on: { beforeInit: function () { var t; "fade" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "fade"), U.extend(this.params, t = { slidesPerView: 1, slidesPerColumn: 1, slidesPerGroup: 1, watchSlidesProgress: !0, spaceBetween: 0, virtualTranslate: !0 }), U.extend(this.originalParams, t)) }, setTranslate: function () { "fade" === this.params.effect && this.fadeEffect.setTranslate() }, setTransition: function (t) { "fade" === this.params.effect && this.fadeEffect.setTransition(t) } } }, { name: "effect-cube", params: { cubeEffect: { slideShadows: !0, shadow: !0, shadowOffset: 20, shadowScale: .94 } }, create: function () { U.extend(this, { cubeEffect: { setTranslate: it.setTranslate.bind(this), setTransition: it.setTransition.bind(this) } }) }, on: { beforeInit: function () { var t; "cube" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "cube"), this.classNames.push(this.params.containerModifierClass + "3d"), U.extend(this.params, t = { slidesPerView: 1, slidesPerColumn: 1, slidesPerGroup: 1, watchSlidesProgress: !0, resistanceRatio: 0, spaceBetween: 0, centeredSlides: !1, virtualTranslate: !0 }), U.extend(this.originalParams, t)) }, setTranslate: function () { "cube" === this.params.effect && this.cubeEffect.setTranslate() }, setTransition: function (t) { "cube" === this.params.effect && this.cubeEffect.setTransition(t) } } }, { name: "effect-flip", params: { flipEffect: { slideShadows: !0, limitRotation: !0 } }, create: function () { U.extend(this, { flipEffect: { setTranslate: st.setTranslate.bind(this), setTransition: st.setTransition.bind(this) } }) }, on: { beforeInit: function () { var t; "flip" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "flip"), this.classNames.push(this.params.containerModifierClass + "3d"), U.extend(this.params, t = { slidesPerView: 1, slidesPerColumn: 1, slidesPerGroup: 1, watchSlidesProgress: !0, spaceBetween: 0, virtualTranslate: !0 }), U.extend(this.originalParams, t)) }, setTranslate: function () { "flip" === this.params.effect && this.flipEffect.setTranslate() }, setTransition: function (t) { "flip" === this.params.effect && this.flipEffect.setTransition(t) } } }, { name: "effect-coverflow", params: { coverflowEffect: { rotate: 50, stretch: 0, depth: 100, modifier: 1, slideShadows: !0 } }, create: function () { U.extend(this, { coverflowEffect: { setTranslate: at.setTranslate.bind(this), setTransition: at.setTransition.bind(this) } }) }, on: { beforeInit: function () { "coverflow" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "coverflow"), this.classNames.push(this.params.containerModifierClass + "3d"), this.params.watchSlidesProgress = !0, this.originalParams.watchSlidesProgress = !0) }, setTranslate: function () { "coverflow" === this.params.effect && this.coverflowEffect.setTranslate() }, setTransition: function (t) { "coverflow" === this.params.effect && this.coverflowEffect.setTransition(t) } } }, { name: "thumbs", params: { thumbs: { multipleActiveThumbs: !0, swiper: null, slideThumbActiveClass: "swiper-slide-thumb-active", thumbsContainerClass: "swiper-container-thumbs" } }, create: function () { U.extend(this, { thumbs: { swiper: null, init: nt.init.bind(this), update: nt.update.bind(this), onThumbClick: nt.onThumbClick.bind(this) } }) }, on: { beforeInit: function () { var t = this.params.thumbs; t && t.swiper && (this.thumbs.init(), this.thumbs.update(!0)) }, slideChange: function () { this.thumbs.swiper && this.thumbs.update() }, update: function () { this.thumbs.swiper && this.thumbs.update() }, resize: function () { this.thumbs.swiper && this.thumbs.update() }, observerUpdate: function () { this.thumbs.swiper && this.thumbs.update() }, setTransition: function (t) { var e = this.thumbs.swiper; e && e.setTransition(t) }, beforeDestroy: function () { var t = this.thumbs.swiper; t && this.thumbs.swiperCreated && t && t.destroy() } } }]; return void 0 === p.use && (p.use = p.Class.use, p.installModule = p.Class.installModule), p.use(M), p }); var ANIUTIL = function () { function e(t) { function e(t) { this.opts = t, this.resizeTiming = t.resizeTiming || 100, this.setElement(), this.setVideoStyle(), this.bindEvent() } var i = e.prototype; i.setElement = function () { void 0 !== this.opts.wrapElement && (this.wrapElement = this.opts.wrapElement.jquery ? this.opts.wrapElement[0] : this.opts.wrapElement), void 0 !== this.opts.targetVideo && (this.targetVideo = this.opts.targetVideo.jquery ? this.opts.targetVideo[0] : this.opts.targetVideo) }, i.setVideoStyle = function () { this.wrapElement.style.overflow = "hidden", this.targetVideo.style.position = "absolute", this.targetVideo.style.top = "50%", this.targetVideo.style.left = "50%", this.targetVideo.style.transform = "translate(-50%, -50%)" }, i.bindEvent = function () { var t = this; window.addEventListener("load", function () { t.setVideoSize() }), window.addEventListener("resize", function () { t.setVideoSize() }) }, i.getVideoInfo = function () { this.wrapWidth = this.wrapElement.clientWidth, this.wrapHeight = this.wrapElement.clientHeight, this.videoWidth = this.targetVideo.clientWidth, this.videoHeight = this.targetVideo.clientHeight, this.wrapRatio = this.wrapHeight / this.wrapWidth, this.videoRatio = this.videoHeight / this.videoWidth }, i.setVideoSize = function () { var t = this; clearTimeout(null), setTimeout(function () { t.getVideoInfo(), t.wrapRatio < t.videoRatio ? (t.targetVideo.style.width = "100%", t.targetVideo.style.height = "auto") : (t.targetVideo.style.width = "auto", t.targetVideo.style.height = "100%") }, this.resizeTiming) }, new e(t) } function i(t) { var e, i, s = null, a = null, n = t ? t + 200 : 200, r = function () { null == s ? (i = document.scrollingElement || document.documentElement || document.body.parentNode || document.body, e = document.body.clientHeight, i = window.pageYOffset + i.clientHeight, s = i / e) : e = document.body.clientHeight }, o = function () { clearTimeout(a), a = setTimeout(function () { window.scrollTo(0, e * s - window.innerHeight), s = null }, n) }; window.addEventListener("resize", function () { r(), o() }) } function s() { return !(-1 < navigator.userAgent.indexOf("Windows") || -1 < navigator.userAgent.indexOf("Macintosh")) && (!!("ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch) || void 0) } return { calRange: function (t) { return 0 < (t = { targetValue: (t = t).targetValue, progress: t.progress, startPoint: t.startPoint || 0, endPoint: t.endPoint || 100 }).startPoint && (t.endPoint = 0 < t.endPoint - t.startPoint ? t.endPoint - t.startPoint : t.endPoint), e = (e = (e = t.targetValue * (t.progress - t.startPoint) / t.endPoint) > t.targetValue ? t.targetValue : e) < 0 ? 0 : e; var e }, videoObjectFit: function (t) { e(t) }, addClass: function (t) { for (var e = t, i = e.classList.length, s = 0; s < i; s++)e.targetElement.classList.add(e.classList[s]) }, removeClass: function (t) { for (var e = t, i = e.classList.length, s = 0; s < i; s++)e.targetElement.classList.remove(e.classList[s]) }, scrollController: function (t) { var i, s = (s = t) || {}, e = navigator.userAgent.toLowerCase(), a = document.scrollingElement || document.documentElement || document.body.parentNode || document.body, n = s.speed || 120, r = 0 <= s.duration ? s.duration : 1, o = a.scrollTop, l = a === document.body && document.documentElement ? document.documentElement : a, h = !1, d = null, t = function () { "Netscape" == navigator.appName && -1 != navigator.userAgent.search("Trident") || -1 != e.indexOf("msie") ? document.addEventListener("mousewheel", function (t) { "hidden" != document.documentElement.style.overflow && u.scrollEvent(t) }, { passive: !1 }) : document.addEventListener("wheel", function (t) { u.hasScrollBox(t.target) || u.scrollEvent(t) }, { passive: !1 }) }, c = function () { window.addEventListener("scroll", function () { "hidden" == document.documentElement.style.overflow || h || (o = a.scrollTop) }) }, u = { scrollEvent: function (t) { t.preventDefault(); var e = document.body.getAttribute("data-scroll-speed"), t = this.normalizeWheelDelta(t), e = s.currDelta && e ? e : e || n ? n : 120; o += -t * e, i = Math.max(0, Math.min(o, a.scrollHeight - l.clientHeight)), this.update() }, normalizeWheelDelta: function (t) { return t.detail ? t.wheelDelta ? t.wheelDelta / t.detail / 40 * (0 < t.detail ? 1 : -1) : -t.detail / 3 : t.wheelDelta / 120 }, update: function () { var t = i - a.scrollTop, t = Math.ceil(a.scrollTop + t) <= 0 ? 0 : i < o ? i : Math.ceil(a.scrollTop + t); h = !0, TweenMax.to(a, r, { ease: "power1.out", scrollTop: t, onComplete: function () { clearTimeout(d), d = null, d = setTimeout(function () { h = !1, o = a.scrollTop }, 500) } }), o <= 0 ? o = 0 : i <= o && (o = i) }, hasScrollBox: function (t) { for (; t && t !== document.body && t !== document;) { var e = window.getComputedStyle(t).overflow; if (e && (-1 < e.indexOf("auto") || -1 < e.indexOf("scroll"))) return !0; t = t.parentNode } return !1 } }; window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame, -1 == e.indexOf("chrome") && -1 != e.indexOf("safari") || (t(), c()) }, resizeScrollOffset: function (t) { i(t) }, checkTouchDevice: s, checkFold: function () { var t, e = screen.width / screen.height, i = s() && .7137 < e && e < .8 && "width=768" == document.getElementsByName("viewport")[0].content, e = s() && .8 < e && e < .95 && "width=768" == document.getElementsByName("viewport")[0].content; return i ? t = "isFold" : e && (t = "isFoldLatest"), t }, deviceConsole: function (t, e) { var i, s; document.querySelector(".console-layer") || ((i = document.createElement("div")).classList.add("console-layer"), i.setAttribute("style", "position: fixed; left: 0; top: 0; padding: 20px; z-index:1000000000; background: #fff;"), document.querySelector("body").append(i)), "multi" == e ? (i = document.querySelector(".console-layer"), (s = document.createElement("div")).classList.add("console-value"), s.setAttribute("style", "border: 1px #ddd solid; float: left; padding: 10px;"), i.append(s)) : s = (document.querySelector(".console-value") || ((s = document.createElement("div")).classList.add("console-value"), s.setAttribute("style", "border: 1px #ddd solid; float: left; padding: 10px;"), i.append(s)), document.querySelector(".console-value")), s.innerHTML = t }, percentToPixel: function (t) { return t.targetValue * (t.progress / 100) }, responsiveHandler: function (s) { var a, t, n, r, e = window.resolutionStatus = null, s = (window.innerWidth, { resolution: s.resolution, statusName: s.statusName || [], callback: s.callback || [], activeTiming: s.activeTiming || 100 }), i = function () { r = window.innerWidth; for (var t = 0; t < s.resolution.length; t++) { var e = s.resolution[t], i = s.resolution[t + 1] || 0; r <= e && i < r && a != s.statusName[t] || r <= e && i < r && n != t ? (document.documentElement.classList.remove(a), a = s.statusName[t] || t, n = t, document.documentElement.classList.add(a)) : (r >= s.resolution[0] && a != s.statusName[0] || r >= s.resolution[0] && !n) && (document.documentElement.classList.remove(a), a = s.statusName[0] || t, n = t, document.documentElement.classList.add(a)) } }, o = function () { clearTimeout(e), console.log(s.activeTiming), t != n && s.callback[n] && (e = setTimeout(function () { s.callback[n](), e = null, t = n }, s.activeTiming)) }; return function () { return window.addEventListener("DOMContentLoaded", function () { i(), t = n }), window.addEventListener("resize", function () { i(), o() }), this }() } } }(); window.WATCH6 = window.WATCH6 || {}; const UTILS = function () { return { isIosDevice: ((s = /iPad|iPhone|iPod/.test(navigator.userAgent)) ? document.documentElement.classList.add("isIosDevice") : document.documentElement.classList.add("isNotIosDevice"), s), checkGlobal: void (0 === location.pathname.indexOf("/global/galaxy") || !0 === window.IS_CAMPAIGN ? document.documentElement.classList.add("global") : document.documentElement.classList.add("dotcom")), checkOS: (s = (s = navigator.appVersion.match(/(mac|win|linux)/i)) ? s[1].toLowerCase() : "", void document.documentElement.classList.add(s)), isFireFox: void (/firefox/i.test(navigator.userAgent) && document.documentElement.classList.add("firefox")), isWebkit: void (/applewebkit/i.test(navigator.userAgent) && document.documentElement.classList.add("webkit")), isChrome: void (/chrome/i.test(navigator.userAgent) && document.documentElement.classList.add("chrome")), isOpera: void (/opera/i.test(navigator.userAgent) && document.documentElement.classList.add("opera")), isIos: void (/ip(ad|hone|od)/i.test(navigator.userAgent) && document.documentElement.classList.add("ios")), isCrIos: void (/crios/i.test(navigator.userAgent) && document.documentElement.classList.add("crios")), isAndroid: void (/android/i.test(navigator.userAgent) && document.documentElement.classList.add("android")), isSafari: (s = /applewebkit/i.test(navigator.userAgent), i = /chrome/i.test(navigator.userAgent), void (s && !i && document.documentElement.classList.add("safari"))), isHuawei: void (/HUAWEICLT/i.test(navigator.userAgent) && document.documentElement.classList.add("huawei")), isUCBrowser: void (/UCBrowser/i.test(navigator.userAgent) && document.documentElement.classList.add("ucbrowser")), winSize: (s = "Netscape" === navigator.appName, i = -1 !== navigator.appVersion.indexOf("Mac"), t = -1 !== navigator.userAgent.indexOf("Safari"), e = -1 !== navigator.userAgent.indexOf("Chrome"), s && !i && t && !e ? function () { return { w: $(win).width(), h: $(win).height() } } : function () { return { w: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, h: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight } }), requestAFrame: window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (t) { return window.setTimeout(t, 1e3 / 60) }, cancelAFrame: window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame || function (t) { window.clearTimeout(t) }, isObject: function (t) { return "object" == typeof t && null !== t && t.constructor && t.constructor === Object }, def: function () { for (var t = [], e = arguments.length; e--;)t[e] = arguments[e]; for (var i = Object(t[0]), s = 1; s < t.length; s += 1) { var a = t[s]; if (null != a) for (var n = Object.keys(Object(a)), r = 0, o = n.length; r < o; r += 1) { var l = n[r], h = Object.getOwnPropertyDescriptor(a, l); void 0 !== h && h.enumerable && (this.isObject(i[l]) && this.isObject(a[l]) ? this.def(i[l], a[l]) : !this.isObject(i[l]) && this.isObject(a[l]) ? (i[l] = {}, this.def(i[l], a[l])) : i[l] = a[l]) } } return i }, convertArray: function (t) { return Array.prototype.slice.call(t) }, getOffset: function (t) { return { top: t.getBoundingClientRect().top + window.pageYOffset, bottom: t.getBoundingClientRect().bottom + window.pageYOffset } }, getScroll: function () { var t = window.pageYOffset; return { top: t, bottom: t + window.innerHeight } }, getViewPort: function () { var t = window, e = "inner"; return "innerWidth" in window || (e = "client", t = document.documentElement || document.body), { width: t[e + "Width"], height: t[e + "Height"] } }, getCurrentDevice: function () { var t = UTILS.getViewPort().width; return 1024 <= t ? "desktop" : t < 1024 && 768 <= t ? "tablet" : "mobile" }, isInVerticalViewPort: function (t) { t = t.getBoundingClientRect(); return t.top - 200 <= UTILS.getViewPort().height && 0 <= t.bottom }, isInHorizontalViewPort: function (t) { t = t.getBoundingClientRect(); return t.left - 200 <= UTILS.getViewPort().width && 0 <= t.right + 200 }, isVerticalVisible: function (t) { return UTILS.isInVerticalViewPort(t) && !!(t.offsetWidth || t.offsetHeight || t.getClientRects().length) }, isHorizontalVisible: function (t) { return UTILS.isInHorizontalViewPort(t) && !!(t.offsetWidth || t.offsetHeight || t.getClientRects().length) }, setCookie: function (t, e, i) { var s = new Date; s.setTime(s.getTime() + 60 * i * 60 * 24 * 1e3), document.cookie = t + "=" + e + "; exprires=" + s.toUTCString() + "; path=/" }, getCookie: function (t) { t = document.cookie.match("(^|;) ?" + t + "=([^;]*)(;|$)"); return t ? t[2] : null }, triggerEvent: function (t, e, i, s, a) { var n, i = i || null, s = s || !1, a = a || !0; null == i ? (n = document.createEvent("HTMLEvents")).initEvent(e, s, a) : (n = document.createEvent("CustomEvent")).initCustomEvent(e, s, a, i), t.dispatchEvent(n) }, visibleScroll: function () { document.documentElement.classList.contains("isTouchDevice") || !0 === this.scrollFlag && (this.scrollFlag = !1, document.body.style.position = "", document.body.style.width = "", document.body.style.top = "", document.body.style.boxSizing = "", document.body.style.paddingRight = "", document.documentElement.style.overflow = "", null !== this.popupEl && (this.popupEl.style.paddingRight = "", this.popupEl = null), window.scrollTo(0, this.currentPos)) }, hiddenScroll: function (t) { var e; document.documentElement.classList.contains("isTouchDevice") || (this.popupEl = t || null, this.scrollFlag = !0, this.currentPos = window.pageYOffset || document.documentElement.scrollTop, t = window.innerWidth - document.documentElement.clientWidth, e = 0 < this.currentPos ? "-" + this.currentPos + "px" : 0, document.body.style.position = "fixed", document.body.style.width = "100%", document.body.style.top = e, document.body.style.boxSizing = "border-box", document.body.style.paddingRight = t + "px", document.documentElement.style.overflow = "hidden", null !== this.popupEl && (this.popupEl.style.paddingRight = t + "px")) }, closest: function (t, e) { do { if (t == document.documentElement) return null; if (t.matches ? t.matches(e) : t.msMatchesSelector(e)) return t } while (null !== (t = t.parentElement || t.parentNode) || 1 === t.nodeType); return null }, onPopupAccessibility: function (t) { t.setAttribute("aria-hidden", !0), t.setAttribute("tabindex", -1); for (var e = t.querySelectorAll("a, button, input, select, iframe"), i = 0; i < e.length; i++) { var s = e[i].getAttribute("aria-hidden"), a = e[i].getAttribute("tabindex"); null != s && null == e[i].getAttribute("data-prev-aria-hidden") && e[i].setAttribute("data-prev-aria-hidden", s), null != a && null == e[i].getAttribute("data-prev-tabindex") && e[i].setAttribute("data-prev-tabindex", a), e[i].setAttribute("tabindex", -1), e[i].setAttribute("aria-hidden", !0) } }, offPopupAccessibility: function (t) { t.removeAttribute("aria-hidden"), t.removeAttribute("tabindex"); for (var e = t.querySelectorAll("a, button, input, select, iframe"), i = 0; i < e.length; i++) { var s = e[i].getAttribute("data-prev-aria-hidden"), a = e[i].getAttribute("data-prev-tabindex"); null != s ? e[i].setAttribute("aria-hidden", s) : e[i].removeAttribute("aria-hidden"), null != a ? e[i].setAttribute("tabindex", a) : e[i].removeAttribute("tabindex"), e[i].removeAttribute("data-prev-aria-hidden"), e[i].removeAttribute("data-prev-tabindex") } }, onAccessibility: function (t) { if (!document.documentElement.classList.contains("is-layer-popup-opened")) { t.setAttribute("aria-hidden", !0), t.setAttribute("tabindex", -1); for (var e = t.querySelectorAll("a, button, input, select, iframe"), i = 0; i < e.length; i++)e[i].setAttribute("tabindex", -1), e[i].setAttribute("aria-hidden", !0) } }, offAccessibility: function (t) { if (!document.documentElement.classList.contains("is-layer-popup-opened")) { t.removeAttribute("aria-hidden"), t.removeAttribute("tabindex"); for (var e = t.querySelectorAll("a, button, input, select, iframe"), i = 0; i < e.length; i++)e[i].removeAttribute("tabindex"), e[i].removeAttribute("aria-hidden") } }, extend: function (e, i) { return Object.keys(i).forEach(function (t) { e[t] = i[t] }), e }, getHeight: function (t) { var e, i, s; return t ? (e = (i = window.getComputedStyle(t)).display, i = parseInt(i.maxHeight), s = 0, "none" != e && 0 != i ? t.offsetHeight : (t.style.position = "absolute", t.style.visibility = "hidden", t.style.display = "block", s = t.offsetHeight, t.style.display = "", t.style.position = "", t.style.visibility = "", s)) : 0 }, setLastActiveItem: function (t) { this.lastActiveItem = t || null }, getLastActiveItem: function () { return null != this.lastActiveItem ? this.lastActiveItem : null }, isRTL: function () { return document.documentElement.classList.contains("rtl") }, checkRegion: function () { for (var t = document.getElementsByTagName("meta"), e = "", i = 0; i < t.length; i++)if ("sitecode" == t[i].getAttribute("name")) return e = t[i].getAttribute("content"); if ("" == e) return -1 < document.location.pathname.indexOf("global") ? "global" : "jp" }, isLowNetwork: function () { var t = "___GALAXY_SPEED"; return null != UTILS.getCookie(t) && null != UTILS.getCookie(t) && ("L" == UTILS.getCookie(t) || "H" != UTILS.getCookie(t) && void 0) }, getQueryString: function (t) { var e = (s = location.href).indexOf("?") + 1, i = -1 < s.indexOf("#") ? s.indexOf("#") + 1 : s.length; if (0 == e) return ""; for (var s = (s = s.substring(e, i)).split("&"), a = "", n = 0; n < s.length; n++) { var r = s[n].split("="); if (2 != r.length) break; r[0] == t && (a = r[1]); break } return a }, customParallax: function (t) { var e = t.mode || "center", i = t.delay || 0, s = t.ease || "Power0.easeNone", a = t.transZ || 0, n = t.duration || .3, r = t.distance || 0, o = t.correction || 0, l = t.windowCorrection ? window.innerHeight * t.windowCorrection : 0, h = t.direction || 1, d = t.activeElement, c = t.targetElement || d, u = t.wrapperElement || d, t = t.unit || "px", p = window.pageYOffset, m = window.pageYOffset + window.innerHeight, d = d.getBoundingClientRect(), v = p + u.getBoundingClientRect().top, u = v + u.getBoundingClientRect().height, f = window.innerHeight + d.height + 2 * l, g = "center" == e ? d.top - (window.innerHeight - d.height) / 2 : d.top - window.innerHeight; "px" == t && (r = d.height * r / 100), v <= m + l && p - l <= u && TweenMax.to(c, n, { y: o + g * ("center" == e ? 2 * r : r) / f * h + t, z: a, ease: s, delay: i }) }, getNavHeight: function () { var t, e, i = 0, s = document.querySelector(".pd-g-header-navigation") || document.querySelector("#subnav") || document.querySelector(".sticky-menu") || document.querySelector(".pd-g-floating-nav"); return i = s ? s.classList.contains("pd-g-header-navigation") ? (e = (t = s.querySelector(".pd-header-navigation")).querySelector(".pd-header-navigation__menu-wrap"), t.clientHeight + e.clientHeight) : s.clientHeight : i }, isBrokenFixed: function () { var t = window.innerWidth, e = window.innerHeight, i = !1; return document.documentElement.classList.remove("is-broken-fixed"), 1440 <= t && e <= 540 || t <= 810 && e / t < .5277 || t / window.outerWidth < .4 || e < UTILS.MIN_VIEW_HEIGHT ? (document.documentElement.classList.add("is-broken-fixed"), i = !0) : document.documentElement.classList.remove("is-broken-fixed"), i }, isFullAnimationBrokenFixed: () => { var t = window.innerWidth, e = window.innerHeight, i = !!UTILS.isTouchDevice && window.matchMedia("(orientation: landscape)").matches; let s = !1; return !!UTILS.isTouchDevice && !window.matchMedia("(orientation: landscape)").matches && e / t < 1.5 || i || e < 700 ? (document.documentElement.classList.add("is-animation-broken-fixed"), s = !0) : document.documentElement.classList.remove("is-animation-broken-fixed"), s }, isTouchDevice: ((s = "ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch) ? document.documentElement.classList.add("isTouchDevice") : document.documentElement.classList.add("isNotTouchDevice"), s), isIEorEdge: function () { var t, e = navigator.userAgent.toLowerCase(); if ("Microsoft Internet Explorer" == navigator.appName) t = "msie "; else if (-1 < e.search("trident")) t = "trident/.*rv:"; else { if (!(-1 < e.search("edge/"))) return -1; t = "edge/" } return null != new RegExp(t + "([0-9]{1,})(\\.{0,}[0-9]{0,1})").exec(e) ? (document.documentElement.classList.add("isIEorEdge"), parseFloat(RegExp.$1 + RegExp.$2)) : -1 }(), page: { scrollLock: { className: "is-no-scroll", barWidth: function () { return window.innerWidth - document.documentElement.clientWidth }, el: $("html"), run: function (t) { document.documentElement.style.paddingRight = t + "px" }, off: function () { this.barWidth(); this.el.removeClass(this.className), this.el.removeClass("hive-layer-scroll-lock"), this.run(0) }, on: function () { var t = this.barWidth(); this.el.addClass(this.className), this.run(t) } } }, MIN_VIEW_HEIGHT: 400, RESPONSIVE: { PC: { NAME: "pc", WIDTH: 1440 }, TABLET: { NAME: "tablet", WIDTH: 1024 }, MOBILE: { NAME: "mobile", WIDTH: 767 } } }; var t, e, i, s }(); WATCH6.UTILS = UTILS; var SCROLLER = function () { function e(t) { this.initialize = !0, this.opts = t, this.correction = t.correction || 0, this.removeCorrection = t.removeCorrection || 0, this.trackHeight = t.trackHeight || 0, this.activeClass = t.activeClass, this.activeCallbackClass = t.activeCallbackClass || "callback-active", this.useStrictMode = null == t.useStrictMode || t.useStrictMode, this.useFixed = t.useFixed || !1, this.useFixedStyle = null == t.useFixedStyle || t.useFixedStyle, this.useSticky = t.useSticky || !1, this.useStickyStyle = null == t.useStickyStyle || t.useStickyStyle, this.useViewportOver = t.useViewportOver || !0, this.activeVisibility = t.activeVisibility || "before", this.activeType = t.activeType ? this.opts.activeType : "reverse", this.autoHeight = null == t.autoHeight || t.autoHeight, this.offsetY = t.offsetY || 0, this.resize = null == t.resize || t.resize, this.resizeTiming = null != t.resizeTiming && t.resizeTiming, this.windowHeight = window.innerHeight, this.oldPregress = 0, this.oldWinScrollTop = 0, this.elementInformation = {}, this.isFixedArea = !1, this.checkTouchDevice = !1, this.elementEventList.setElement.call(this), this.bindEvent() } var t = e.prototype; return t.bindEvent = function () { var t = this, e = null; this.elementHandler(), this.resize && (this.addEventList = function () { t.resizeTiming ? (clearTimeout(e), e = setTimeout(function () { t.windowHeight = window.innerHeight, t.elementHandler() }, t.resizeTiming)) : (t.windowHeight = window.innerHeight, t.elementHandler()) }, window.addEventListener("resize", this.addEventList)), this.opts.IEScroll && this.utilList.IEScrollHandler.call(this) }, t.elementHandler = function () { return this.elementEventList.setTrackStyle.call(this), this.getFixedState(), 1 < this.trackHeight && this.elementEventList.setTrackHeigh.call(this), !this.useSticky && this.useFixed && this.useFixedStyle && this.elementEventList.setFixedStyle.call(this), this.useSticky && !this.useFixed && this.useStickyStyle && this.elementEventList.setStickyStyle.call(this), this }, t.utilList = { checkTouchDevice: function () { return -1 < navigator.userAgent.indexOf("Windows") || -1 < navigator.userAgent.indexOf("Macintosh") ? this.checkTouchDevice = !1 : "ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch ? this.checkTouchDevice = !0 : void 0 }, IEScrollHandler: function () { navigator.userAgent.match(/Trident\/7\./) && (this.body.addEventListener("mousewheel", function (t) { t.preventDefault(); var t = t.wheelDelta, e = window.pageYOffset; window.scrollTo(0, e - t) }), this.body.addEventListener("keydown", function (t) { var e = window.pageYOffset; switch (t.which) { case 38: t.preventDefault(), window.scrollTo(0, e - 40); break; case 40: t.preventDefault(), window.scrollTo(0, e + 40); break; default: return } })) }, getScroll: function () { var t = window.pageYOffset; return { top: t, bottom: t + this.windowHeight } }, getOffset: function (t) { return { top: t.getBoundingClientRect().top + window.pageYOffset, bottom: t.getBoundingClientRect().bottom + window.pageYOffset } }, getUserAgent: function () { return navigator.userAgent } }, t.elementEventList = { setElement: function () { this.body = document.querySelector("body"), void 0 !== this.opts.trackElement && (this.trackElement = this.opts.trackElement.jquery ? this.opts.trackElement[0] : this.opts.trackElement), void 0 !== this.opts.fixedElement && (this.fixedElement = this.opts.fixedElement.jquery ? this.opts.fixedElement[0] : this.opts.fixedElement), void 0 !== this.opts.activeElement && (this.activeElement = this.opts.activeElement.jquery ? this.opts.activeElement[0] : this.opts.activeElement) }, setTrackHeigh: function () { var t, e; this.trackHeight <= 1 || (this.trackElement.style.height = "", t = 0 == this.trackElement.clientHeight, e = this.windowHeight * this.trackHeight, t && (this.trackElement.style.height = this.windowHeight + "px"), this.trackElement.style.height = e + "px") }, setTrackStyle: function () { this.trackElement && this.useFixed && "static" == window.getComputedStyle(this.trackElement).position && (this.trackElement.style.position = "relative") }, setFixedStyle: function () { this.isFixedArea || (this.fixedElement.style.height = "", this.fixedElement.style.top = "", this.fixedElement.style.position = "absolute"), 0 == this.fixedElement.clientWidth && (this.fixedElement.style.width = "100%"), this.autoHeight && ("string" == typeof this.offsetY ? (this.fixedElement.style.height = "calc(" + this.windowHeight + "px - " + this.offsetY + ")", this.fixedElement.style.top = this.offsetY) : (this.fixedElement.style.height = this.windowHeight - this.offsetY + "px", this.fixedElement.style.top = this.offsetY + "px")) }, setStickyStyle: function () { this.isFixedArea || (this.fixedElement.style.position = "sticky"), 0 == this.fixedElement.clientWidth && (this.fixedElement.style.width = "100%") }, setFixedElement: function () { this.diffHeight = this.windowHeight - this.fixedElement.clientHeight, this.trackTopOffset = this.utilList.getOffset.call(this, this.trackElement).top, this.trackBottomOffset = this.utilList.getOffset.call(this, this.trackElement).bottom, this.winScrollTop <= this.trackTopOffset ? (this.fixedElement.style.position = "absolute", "string" == typeof this.offsetY ? this.fixedElement.style.top = this.offsetY : this.fixedElement.style.top = this.offsetY + "px", this.fixedElement.style.bottom = "") : this.winScrollBottom >= this.trackBottomOffset ? (this.fixedElement.style.position = "absolute", this.fixedElement.style.top = this.trackElement.clientHeight - this.fixedElement.clientHeight + "px") : this.isFixedArea || (this.fixedElement.style.position = "fixed", this.fixedElement.style.top = "0") } }, t.getWheelDirection = function () { this.winScrollTop >= this.oldWinScrollTop ? this.wheelDirection = "down" : this.wheelDirection = "up", this.oldWinScrollTop = this.winScrollTop }, t.getProgress = function () { var t = this.utilList.getOffset.call(this, this.trackElement).top - this.windowHeight * this.correction, e = this.useFixed || this.useSticky ? Math.abs(this.trackElement.clientHeight - this.windowHeight) : this.useViewportOver ? this.trackElement.clientHeight + this.windowHeight : this.trackElement.clientHeight, i = this.winScrollTop - t, t = this.winScrollBottom - t, i = this.useFixed || this.useSticky ? i / e * 100 : t / e * 100; return this.useStrictMode ? this.progress = Math.floor(i) < 0 ? 0 : 100 < Math.floor(i) ? 100 : Math.floor(i) : this.progress = i, this.getWheelDirection(), this.progress }, t.getFixedState = function () { 0 < this.progress && this.progress < 100 ? this.isFixedArea = !0 : this.isFixedArea = !1 }, t.trackAnimation = function (t) { this.initialize && (this.winScrollTop = this.utilList.getScroll.call(this).top - this.windowHeight * this.correction, this.winScrollBottom = this.utilList.getScroll.call(this).bottom, this.useFixed && !this.useSticky && this.elementEventList.setFixedElement.call(this), this.getProgress(), this.getFixedState(), t && (this.oldPregress !== this.progress && t.call(this), this.oldPregress = this.progress)) }, t.activeAnimation = function () { if (this.initialize) { this.winScrollTop = this.utilList.getScroll.call(this).top, this.winScrollBottom = this.utilList.getScroll.call(this).bottom, this.trackElementHeight = this.trackElement.clientHeight, this.correctionValue = this.trackElementHeight * this.correction, this.removeCorrectionValue = this.trackElementHeight * this.removeCorrection, this.elementOffsetTop = this.utilList.getOffset.call(this, this.trackElement).top, this.elementOffsetBottom = this.utilList.getOffset.call(this, this.trackElement).bottom, this.downScrollTop = this.winScrollTop - this.correctionValue, this.downScrollBottom = this.winScrollBottom - this.correctionValue, this.upScrollTop = this.winScrollTop + this.correctionValue, this.upScrollBottom = this.winScrollBottom + this.correctionValue; function t() { l(), r() } function e() { h(), o() } var i = this, s = this.activeVisibility, a = this.activeType, n = this.windowHeight / 2, r = function () { if (i.activeClass) if ("object" == typeof i.activeClass) for (var t = i.activeClass.length, e = 0; e < t; e++)i.activeElement.classList.contains(i.activeClass[e]) || i.activeElement.classList.add(i.activeClass[e]); else i.activeElement.classList.contains(i.activeClass) || i.activeElement.classList.add(i.activeClass) }, o = function () { if ("object" == typeof i.activeClass) for (var t = i.activeClass.length, e = 0; e < t; e++)i.activeElement.classList.contains(i.activeClass[e]) && i.activeElement.classList.remove(i.activeClass[e]); else i.activeElement.classList.contains(i.activeClass) && i.activeElement.classList.remove(i.activeClass); i.activeElement.classList.contains(i.activeCallbackClass) && i.activeElement.classList.remove(i.activeCallbackClass) }, l = function () { i.activeElement.classList.contains(i.activeCallbackClass) || i.opts.activeCallback && (i.opts.activeCallback.call(i), i.activeElement.classList.add(i.activeCallbackClass)) }, h = function () { i.activeElement.classList.contains(i.activeCallbackClass) && i.opts.endCallback && i.opts.endCallback.call(i) }; switch (this.getWheelDirection(), s) { case "before": ("down" == this.wheelDirection && this.downScrollBottom >= this.elementOffsetTop && this.downScrollTop <= this.elementOffsetTop || "up" == this.wheelDirection && this.upScrollTop <= this.elementOffsetBottom && this.upScrollBottom >= this.elementOffsetBottom || "oneWay" == this.activeType && this.downScrollBottom >= this.elementOffsetTop) && (t(), this.activeStatus = !0); break; case "visible": ("down" == this.wheelDirection && this.downScrollBottom >= this.elementOffsetTop + n && this.downScrollTop <= this.elementOffsetTop || "up" == this.wheelDirection && this.upScrollTop <= this.elementOffsetBottom - n && this.upScrollBottom >= this.elementOffsetBottom || "oneWay" == this.activeType && this.downScrollBottom >= this.elementOffsetTop + n) && (t(), this.activeStatus = !0) }switch (a) { case "reverse": "visible" == s ? (this.activeStatus && "down" == this.wheelDirection && this.winScrollTop > this.elementOffsetBottom || this.activeStatus && "up" == this.wheelDirection && this.winScrollBottom < this.elementOffsetTop) && (e(), this.activeStatus = !1) : (this.activeStatus && this.winScrollTop < this.elementOffsetTop && this.winScrollBottom < this.elementOffsetTop || this.activeStatus && this.winScrollTop > this.elementOffsetBottom && this.winScrollBottom > this.elementOffsetBottom) && (e(), this.activeStatus = !1); break; case "oneWay": "visible" == s ? this.activeStatus && this.winScrollBottom < this.elementOffsetTop + n && (e(), this.activeStatus = !1) : this.activeStatus && this.winScrollTop < this.elementOffsetTop && this.winScrollBottom < this.elementOffsetTop && (e(), this.activeStatus = !1) } } }, t.getElementInformation = function () { return this.trackElement && (this.elementInformation.trackElement = { element: this.trackElement, width: this.trackElement.clientWidth, height: this.trackElement.clientHeight, topOffset: this.utilList.getOffset.call(this, this.trackElement).top, bottomOffset: this.utilList.getOffset.call(this, this.trackElement).bottom }), this.activeElement && (this.elementInformation.activeElement = { element: this.activeElement, width: this.activeElement.clientWidth, height: this.activeElement.clientHeight, topOffset: this.utilList.getOffset.call(this, this.activeElement).top, bottomOffset: this.utilList.getOffset.call(this, this.activeElement).bottom }), this.elementInformation }, t.destroy = function (t) { this.trackElement && (this.trackElement.style.position = "", this.trackElement.style.height = ""), this.fixedElement && (this.fixedElement.style.position = "", this.fixedElement.style.top = "", this.fixedElement.style.height = ""), this.trackElement = "", this.fixedElement = "", this.activeElement = "", this.correction = "", this.trackHeight = "", this.activeCallbackClass = "", this.useFixed = "", this.activeVisibility = "", this.activeType = "", this.offsetY = "", this.resize = "", this.windowHeight = "", this.elementInformation = "", window.removeEventListener("load", this.addEventList), window.removeEventListener("resize", this.addEventList), this.initialize = !1 }, function (t) { return new e(t) } }(); !function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const u = WATCH6.UTILS; WATCH6.ImageLoader = class { constructor(t = container, e) { e = { el: t, lazyClass: ".js-img-src", lazyCompleteClass: "load-complete", startLazyClass: e.startLazyClass || ".js-start-img-src", endLazyClass: e.endLazyClass || ".js-end-img-src", responsiveClass: e.responsiveClass || ".js-res-img", loadOption: e.loadOption, visiblePoint: e.visiblePoint || 0, useDefaultImg: e.useDefaultImg, resizeStart: null }; this.opts = e, this.classes = e.classes, this.el = document.querySelector(t), this.init() } init() { this.initOpts(), this.getLazyImage(), this.getResponsiveImage(), this.bindEvents() } initOpts() { this.targetAttr = this.opts.loadOption[0].attribute, this.responsiveCheck = this.opts.loadOption, this.dynamicCallCount = 0, this.dynamicLoadedComplate = !1, this.opts.useDefaultImg && this.setDefaultImage() } getLazyImage() { const t = Array.from(this.el.querySelectorAll(this.opts.lazyClass)); var e = Array.from(this.el.querySelectorAll(this.opts.startLazyClass)), e = t.concat(e); this.lazyImages = e, this.lazyLength = e.length } getResponsiveImage() { var t = this.el.querySelectorAll(this.opts.responsiveClass); this.responsiveImages = t, this.responsiveLength = t.length } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener("scroll", this.lazyEvent.bind(this)), this.responsiveCheck && window.addEventListener("resize", this.onResizeHandler.bind(this)) } onLoadHandler() { this.responsiveHandler(), this.lazyEvent() } onResizeHandler() { clearTimeout(this.opts.resizeStart), this.opts.resizeStart = setTimeout(() => { this.responsiveHandler(), this.lazyEvent() }, 80) } lazyEvent() { this.setLazyImage(), this.lazyLength === this.lazyCompleteLength && window.removeEventListener("scroll", this.lazyEvent.bind(this)) } responsiveHandler() { this.windowWidth = window.innerWidth; var a = this.opts.loadOption.length; for (let s = 0; s < a; s++) { let t = s + 1, e = t == a ? 0 : this.opts.loadOption[t].resolution, i = !1; (i = (0 == s || this.windowWidth <= this.opts.loadOption[s].resolution) && this.windowWidth > e) && this.opts.loadOption[s].attribute !== this.oldAttr && (this.targetAttr = this.opts.loadOption[s].attribute, this.oldAttr = this.targetAttr, this.attrIndex = s, this.dynamicCallCount = 0, this.setResponsiveImage()) } } setResponsiveImage(i) { if (i) for (let e = 0; e < i.length; e++) { var s = i[e]; let t = i[e].getAttribute(this.targetAttr); t = t || this.findImageHandler(s), i[e].classList.contains(this.opts.lazyCompleteClass) || (i[e].setAttribute("src", t), i[e].classList.add(this.opts.lazyCompleteClass)) } else for (let i = 0; i < this.responsiveLength; i++) { let t = this.responsiveImages[i], e = t.getAttribute(this.targetAttr); e = e || this.findImageHandler(t), t.classList.contains(this.opts.lazyCompleteClass) && t.setAttribute("src", e) } } checkCompleteImage() { var t = this.el.querySelectorAll("." + this.opts.lazyCompleteClass); this.lazyCompleteLength = t.length } setDefaultImage() { for (var t = 0; t < this.lazyLength; t++)this.lazyImages[t].setAttribute("src", "data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH/C1hNUCBEYXRhWE1QAz94cAAh+QQFAAAAACwAAAAAAQABAAACAkQBADs=") } setLazyImage() { this.windowHeight = window.innerHeight; for (let d = 0; d < this.lazyLength; d++) { let e = this.lazyImages[d], t = this.windowHeight * this.opts.visiblePoint, i = u.getScroll.call(this).top - t, s = u.getScroll.call(this).bottom + t, a = u.getOffset.call(this, e).top, n = u.getOffset.call(this, e).bottom, r = this.opts.lazyClass.split("."), o = r[r.length - 1], l = this.opts.startLazyClass.split("."), h = l[l.length - 1]; if ((a < s && i <= a || i < n && n < s || i < a && n < s || a < i && s < n) && null != e.offsetParent) { let t = e.getAttribute(this.targetAttr); var c; t = t || this.findImageHandler(e), e.classList.contains(this.opts.lazyCompleteClass) || (e.setAttribute("src", t), c = () => { 1 == this.opts.startLazyClass.split(" ").length && e.classList.remove(h), 1 == this.opts.lazyClass.split(" ").length && e.classList.remove(o), this.checkCompleteImage(), e.removeEventListener("load", c) }, e.addEventListener("load", c), e.classList.add(this.opts.lazyCompleteClass)) } } } findRemainingImageAttr(t) { for (var e = this.opts.loadOption.length, i = 0; i < e; i++) { var s = t.getAttribute(this.opts.loadOption[i].attribute); if (s) return s } } findNextImageAttr(e) { for (let t = this.attrIndex; 0 <= t; t--) { var i = e.getAttribute(this.opts.loadOption[t].attribute); if (i) return i; if (0 == t && null == i) return this.findRemainingImageAttr(e) } } findImageHandler(t) { return 0 !== this.attrIndex ? this.findNextImageAttr(t) : this.findRemainingImageAttr(t) } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const t = WATCH6.UTILS, e = t.RESPONSIVE; WATCH6.VideoLoader = class { constructor(t = container, e) { e = { el: t, lazyClass: e.lazyClass || ".js-video-src", responsiveClass: e.responsiveClass || ".js-res-video", imageLazyCompleteClass: "load-complete", imageEndLazyClass: e.imageEndLazyClass || ".js-end-img-src", notLoadElement: e.notLoadElement || [], loadOption: e.loadOption, visiblePoint: e.visiblePoint || 0, resizeStart: null, classes: { loaded: "loaded", ended: "ended" } }; this.opts = e, this.classes = e.classes, this.el = document.querySelector(t), this.init() } init() { this.initOpts(), this.getLazyVideo(), this.getResponsiveVideo(), this.bindEvents() } initOpts() { this.getCurrentDevice(); var t = "mobile" !== this.currentDevice ? 0 : 1; this.prevVideoSrc = "", this.targetAttr = this.opts.loadOption[t].attribute, this.responsiveCheck = this.opts.loadOption, this.videoCallStack = [] } getLazyVideo() { let t = Array.from(this.el.querySelectorAll(this.opts.lazyClass)).filter(e => { e.isVideoInit = !1; { let t = 0; if (t < this.opts.notLoadElement.length) return !e.closest(this.opts.notLoadElement[t]) } }); t = t.filter(t => { if (t.querySelector("video")) return t }), this.lazyVideos = t, this.lazyLength = t.length } getResponsiveVideo() { var t = Array.from(this.el.querySelectorAll(this.opts.responsiveClass)).filter(e => { { let t = 0; if (t < this.opts.notLoadElement.length) return !e.closest(this.opts.notLoadElement[t]) } }); this.responsiveVideos = t, this.responsiveLength = t.length } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener("scroll", this.lazyEvent.bind(this)), this.responsiveCheck && window.addEventListener("resize", this.onResizeHandler.bind(this)) } getCurrentDevice() { this.winWidth = t.winSize().w, this.winWidth >= e.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.prevDevice = this.currentDevice } onLoadHandler() { this.getCurrentDevice(), this.responsiveHandler(), this.lazyEvent() } onResizeHandler() { clearTimeout(this.opts.resizeStart), this.opts.resizeStart = setTimeout(() => { this.getCurrentDevice(), this.responsiveHandler(), this.lazyEvent() }, 80) } lazyEvent() { this.setLazyVideo(), this.lazyLength === this.lazyCompleteLength && window.removeEventListener("scroll", this.lazyEvent.bind(this)) } responsiveHandler() { this.windowWidth = window.innerWidth; var a = this.opts.loadOption.length; for (let s = 0; s < a; s++) { let t = s + 1, e = t == a ? 0 : this.opts.loadOption[t].resolution, i = !1; (i = (0 == s || this.windowWidth <= this.opts.loadOption[s].resolution) && this.windowWidth > e) && this.opts.loadOption[s].attribute !== this.oldAttr && (this.targetAttr = this.opts.loadOption[s].attribute, this.oldAttr = this.targetAttr, this.attrIndex = s, this.setResponsiveVideo()) } } setResponsiveVideo() { for (let t = 0; t < this.responsiveLength; t++) { const i = this.responsiveVideos[t], s = i.querySelector("video"), a = i.getAttribute(this.targetAttr); i.classList.contains(this.classes.loaded) && i.isVideoInit && s.querySelectorAll("source").forEach(t => { const e = t.getAttribute("type"); -1 < e.indexOf("webm") && (t.src = a + ".webm"), -1 < e.indexOf("mp4") && (t.src = a + ".mp4"), s.load(), s.addEventListener("canplaythrough", () => { window.setTimeout(() => { i.classList.add(this.classes.loaded) }, 500), this.checkCompleteVideo(), this.getEndImage(i) }, { once: !0 }) }) } } setLazyVideo() { for (let t = 0; t < this.lazyLength; t++) { var e = window.pageYOffset, i = e + window.innerHeight; const n = this.lazyVideos[t]; var s = n.getBoundingClientRect(), a = e + s.top, s = e + s.bottom; i > a - window.innerHeight * (0 != window.pageYOffset ? this.opts.visiblePoint : 0) && e < s + window.innerHeight * (0 != window.pageYOffset ? this.opts.visiblePoint : 0) && !n.isVideoInit && this.videoCallStack.indexOf(t) < 0 && (this.videoCallStack.push(t), this.setVideoSrc()) } } setVideoSrc() { var t = this.videoCallStack[0]; const e = this.lazyVideos[t], i = e.querySelector("video"), s = e.getAttribute(this.targetAttr); t = this.opts.lazyClass.split("."); const a = t[t.length - 1]; t = s; this.prevVideoSrc !== t && (i.querySelectorAll("source").forEach(t => { const e = t.getAttribute("type"); -1 < e.indexOf("webm") && (t.src = s + ".webm"), -1 < e.indexOf("mp4") && (t.src = s + ".mp4") }), i.load(), i.addEventListener("canplaythrough", () => { window.setTimeout(() => { e.classList.add(this.classes.loaded) }, 500), 1 == this.opts.lazyClass.split(" ").length && e.classList.remove(a), this.checkCompleteVideo(), this.getEndImage(e), this.videoCallStack.splice(0, 1), 0 < this.videoCallStack.length && this.setVideoSrc() }, { once: !0 }), e.isVideoInit = !0), this.prevVideoSrc = t } getEndImage(t) { var e = "desktop" === this.currentDevice ? "data-src-pc" : "tablet" === this.currentDevice ? "data-src-tablet" : "data-src-mobile"; const i = t.querySelector(this.opts.imageEndLazyClass); t = this.opts.imageEndLazyClass.split("."); const s = t[t.length - 1]; i && !i.classList.contains(this.opts.imageLazyCompleteClass) && (i.src = i.getAttribute(e), i.addEventListener("load", () => { 1 == this.opts.imageEndLazyClass.split(" ").length && i.classList.remove(s), i.classList.add(this.opts.imageLazyCompleteClass) }, { once: !0 })) } checkCompleteVideo() { var t = Array.from(this.el.querySelectorAll("." + this.classes.loaded)).filter(e => { { let t = 0; if (t < this.opts.notLoadElement.length) return !e.closest(this.opts.notLoadElement[t]) } }); this.lazyCompleteLength = t.length } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const d = WATCH6.UTILS, t = d.RESPONSIVE; WATCH6.VideoPlayer = class { constructor(t, e) { t = { sectionElement: e.sectionElement, videoParentElement: null, videoElement: t, videoController: ".video__controller", hiddenElement: ".blind", endImage: ".video__end-frame img", videoLazyClass: ".js-video-src", lazyCompleteClass: "load-complete", imageEndLazyClass: ".js-end-img-src", visiblePoint: e.visiblePoint || 0, classes: { loaded: "loaded", ended: "ended", paused: "paused", playing: "playing", isPaused: "is-paused" }, resizeStart: null, on: { updateController: null, updatePlayState: null } }; this.opts = d.def(t, e || {}), this.classes = t.classes, this.init() } init() { this.setElements(), this.initOpts(), null !== this.video && (this.video.paused || this.video.pause(), this.videoElement.playState = !1, this.updateController(), this.bindEvents()) } setElements() { this.videoElement = this.opts.videoElement, this.video = this.videoElement.querySelector("video"), null !== this.video && (null !== this.opts.videoParentElement ? this.videoParentElement = this.video.closest(this.opts.videoParentElement) : this.videoParentElement = this.videoElement, this.videoController = this.videoParentElement.querySelector(this.opts.videoController)) } initOpts() { this.getCurrentDevice(), this.autoPlay = !!this.videoElement.dataset.autoPlay && JSON.parse(this.videoElement.dataset.autoPlay), this.videoElement.playState = !1, this.videoElement.autoPlayState = !1, this.useController = !!this.videoController } getCurrentDevice() { this.winWidth = d.winSize().w, this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.prevDevice = this.currentDevice } getEndImage() { var t = "desktop" === this.currentDevice ? "data-src-pc" : "tablet" === this.currentDevice ? "data-src-tablet" : "data-src-mobile"; const e = this.videoElement.querySelector(this.opts.imageEndLazyClass); var i = this.opts.imageEndLazyClass.split("."); const s = i[i.length - 1]; e && (e.src = e.getAttribute(t), e.addEventListener("load", () => { 1 == this.opts.imageEndLazyClass.split(" ").length && e.classList.remove(s), e.classList.add(this.opts.lazyCompleteClass) }, { once: !0 })) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), window.addEventListener("scroll", this.onScrollHandler.bind(this)), this.video.addEventListener("canplaythrough", this.onCanplayThrough.bind(this), { once: !0 }), this.useController && this.videoController.addEventListener("click", this.onClickController.bind(this)) } onChange(t) { if (t === this.videoElement) { t = "mobile" !== this.currentDevice ? "data-media-pc" : "data-media-mo"; const i = this.videoElement.getAttribute(t); t = i; this.prevVideoSrc !== t && (this.videoElement.playState = !1, this.video.querySelectorAll("source").forEach(t => { const e = t.getAttribute("type"); -1 < e.indexOf("webm") && (t.src = i + ".webm"), -1 < e.indexOf("mp4") && (t.src = i + ".mp4"), this.video.load() }), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.remove(this.classes.paused), this.video.addEventListener("canplaythrough", () => { d.isLowNetwork() || this.onPlay(), this.getEndImage() }, { once: !0 })), this.prevVideoSrc = t } } onLoad(t) { if (t === this.videoElement) { t = "mobile" !== this.currentDevice ? "data-media-pc" : "data-media-mo"; const i = this.videoElement.getAttribute(t); this.videoElement.playState = !1, this.video.querySelectorAll("source").forEach(t => { const e = t.getAttribute("type"); -1 < e.indexOf("webm") && (t.src = i + ".webm"), -1 < e.indexOf("mp4") && (t.src = i + ".mp4"), this.video.load() }), this.video.addEventListener("canplaythrough", () => { d.isLowNetwork() || this.onPlay(), this.getEndImage() }, { once: !0 }) } } onPlay(t) { var e = () => { 0 < this.video.readyState && !this.videoElement.playState && (this.video.currentTime === this.video.duration && (this.video.currentTime = 0), this.autoPlay && (this.videoElement.autoPlayState = !0), this.videoElement.playState = !0, this.videoElement.classList.contains(this.classes.paused) ? this.videoElement.classList.add(this.classes.playing) : window.setTimeout(() => { this.videoElement.classList.add(this.classes.playing) }, 350), this.videoElement.classList.remove(this.classes.ended), this.videoElement.classList.remove(this.classes.paused), window.setTimeout(() => { this.video.play(), this.updateController(), this.outCallback("updatePlayState", !0) }, 350), this.video.addEventListener("ended", this.updatePlayEnded.bind(this), { once: !0 })) }; t && t !== this.videoElement || e() } onPause() { this.video.paused || this.video.pause(), this.videoElement.playState = !1, this.videoElement.classList.remove(this.classes.ended), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.add(this.classes.paused), this.updateController() } onEnded() { 3 < this.video.readyState && (this.video.ended || this.video.pause(), this.video.currentTime = this.video.duration, this.videoElement.playState = !1, this.videoElement.classList.add(this.classes.ended), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.remove(this.classes.paused), this.updateController()) } onReset(t) { var e = () => { this.video.pause(), this.video.currentTime = 0, this.videoElement.playState = !1, this.autoPlay && (this.videoElement.autoPlayState = !1), this.videoElement.classList.remove(this.classes.ended), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.remove(this.classes.paused), this.updateController() }; t && t !== this.videoElement || e() } onCanplayThrough() { var t = this.opts.videoLazyClass.split("."), t = t[t.length - 1]; this.useController && window.setTimeout(() => { this.videoController.style.display = "block" }, 500), this.videoElement.classList.add(this.classes.loaded), 1 == this.opts.videoLazyClass.split(" ").length && this.videoElement.classList.remove(t), this.isCanplay = !0, this.onScrollHandler(), this.isCanplay = !1 } onClickController(t) { t.preventDefault(), this.videoElement.playState ? this.onPause() : this.onPlay() } updatePlayEnded() { this.onPause() } updateController() { var t; this.useController && (this.videoElement.playState ? this.videoController.classList.add(this.classes.isPaused) : this.videoController.classList.remove(this.classes.isPaused), t = { el: this.videoController, playState: this.videoElement.playState }, this.outCallback("updateController", t)) } onScrollHandler() { if (!this.videoElement.closest(".cm-layer")) { var t = window.scrollY, e = t > this.lastScrollY ? "down" : "up", i = d.getHeight(this.videoElement), i = (d.winSize().h, .5 * i), s = d.getScroll().top, a = d.getScroll().bottom, n = d.getOffset(this.videoElement).top, r = d.getOffset(this.videoElement).bottom - i; const h = this.videoElement.classList.contains(this.classes.playing) && this.videoElement.playState; var o = this.videoElement.classList.contains(this.classes.paused) && !this.videoElement.playState, l = this.videoElement.classList.contains(this.classes.ended) && !this.videoElement.playState; if (r + i < s) this.autoPlay && (this.videoElement.autoPlayState ? (h || o) && this.onEnded() : this.videoElement.classList.add(this.classes.ended)); else if (a < n) this.autoPlay && this.videoElement.autoPlayState && (h || o || l) && this.onReset(); else if (r < a && s < n) { const h = this.isCanplay || "down" == e; !h || !this.autoPlay || this.videoElement.playState || this.videoElement.autoPlayState || d.isLowNetwork() || this.onPlay() } this.lastScrollY = t } } onResponsiveChange() { window.setTimeout(() => { this.isCanplay = !0, this.onReset(), this.onScrollHandler(), this.isCanplay = !1 }, 20) } onResizeHandler() { d.winSize().w !== this.winWidth && (this.winWidth = d.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.resizeRequestFrame = d.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, d.cancelAFrame.call(window, this.resizeRequestFrame) } setLayout() { this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } outCallback(t, e) { t = this.opts.on[t]; null != t && t(e) } } }(), function () { "use strict"; t = !(r = {}), l = e = null, s = function () { a(), n(), UTILS.isLowNetwork() && document.documentElement.classList.add("low_network"), document.documentElement.classList.add("load"), window.removeEventListener("load", s) }, a = function () { t = 1024 <= window.innerWidth ? "desktop" : 768 <= window.innerWidth && window.innerWidth < 1024 ? "tablet" : "mobile", clearTimeout(r.resizeTimeout), r.resizeTimeout = setTimeout(function () { UTILS.isBrokenFixed() }, 100), t != e && (document.documentElement.classList.add(t), document.documentElement.classList.remove(e), e = t) }, n = function () { for (var t = window.pageYOffset, e = t + window.innerHeight, i = 0; i < r.allClickables.length; i++) { var s = r.allClickables[i], a = t + s.getBoundingClientRect().top, n = t + UTILS.getNavHeight(); n <= a && a <= e ? s.isVisible = !0 : (a < n || e < a) && (s.isVisible = !1) } }, o = function (t) { t.preventDefault(), t.stopPropagation(); var e = this, i = parseFloat(this.innerText), s = document.querySelectorAll("#desc-section li"), i = document.querySelectorAll("#desc-section li")[i - 1], a = i.querySelector("span"), n = a.innerText, r = (a.innerHTML = '' + n + "", l = t.currentTarget, function () { d.call(e), a.removeEventListener("focusin", r) }), o = function () { a.innerHTML = n, a.removeAttribute("tabindex"), a.removeEventListener("focusout", o) }; t.currentTarget.closest(".cm-layer") && (t = t.currentTarget.closest(".cm-layer"), $(t).trigger("closeLayer", !1)), a.addEventListener("focusin", r), a.addEventListener("focusout", o), i.querySelector("a").focus(), s.forEach(t => t.classList.remove("is-active")), i.classList.add("is-active") }, h = function (t) { var t = t.target.closest("li"), e = t.getAttribute("data-sup"), i = document.querySelectorAll(".click_sup"); for (let t = 0; t < i.length; t++)i[t].innerText === e && (d.call(this), l.focus()); var s = l.closest(".cm-layer"); if (s) { var a = s.id; const n = s.parentNode, r = n.querySelector(`[data-layer-target="#${a}"]`); l.innerText === e && r.focus() } t.classList.remove("is-active") }, d = function (t) { var s; !document.documentElement.classList.contains("ios") && t && null == t.relatedTarget || ((s = this).isClicked || this.isVisible || i(this) || setTimeout(function () { var t = window.pageYOffset, e = s.getBoundingClientRect(), i = (window.innerHeight - UTILS.getNavHeight()) / 2, t = t - UTILS.getNavHeight() + e.top + e.height / 2; window.scrollTo(0, t - i) }, 10), this.isClicked = !1) }, i = function (t) { var t = t.parentNode, e = t.getAttribute("id"); return "contents" != e && t != document.body && (!("subnav" != e && !t.classList.contains("sc-s22ultra-popup")) || i(t)) }, c = function () { this.isClicked = !0 }; var r, t, e, l, s, a, n, o, h, d, i, c, u = { init: function () { r.resizeTimeout = null, r.supClicker = document.querySelectorAll("a.click_sup"), r.supTopBtn = document.querySelectorAll("button.click_disclaimer"), r.contents = document.getElementById("contents") || document.getElementById("content"), r.allClickables = r.contents.querySelectorAll("a, button, input, select"); var t = 0; for (window.addEventListener("load", s), window.addEventListener("resize", a), window.addEventListener("scroll", n), t = 0; t < r.allClickables.length; t++) { var e = r.allClickables[t]; e.isClicked = !1, e.isVisible = !1, e.addEventListener("focusin", d), e.addEventListener("mousedown", c) } for (t = 0; t < r.supClicker.length; t++)r.supClicker[t].addEventListener("click", o); for (t = 0; t < r.supTopBtn.length; t++)r.supTopBtn[t].addEventListener("click", h); var i = document.documentElement.classList; "global" == UTILS.checkRegion() || i.contains("mac") || i.contains("safari") || ANIUTIL.scrollController({ speed: 120, duration: .5 }) } }; window.initialize = u }(), function (t) { t.TrapFocus = function () { "use strict"; var t, g = void 0, e = window, i = e.document, w = e.jQuery, s = null, a = e.WATCH6.UTILS; function n(t, e) { if (!(this instanceof n)) return new n(t, e); var i = { obj: t, prevStep: null, isDestroy: false, IgnoreUtilFocusChanges: false, ariaAttr: { hidden: "aria-hidden", disabled: "aria-disabled", modal: "aria-modal" }, ariaNotHidden: (() => { return e && e.ariaNotHidden ? e.ariaNotHidden : [] })(), classAttr: { clone: "trapfocus" }, elAttr: { tabIndex: "tabindex", role: "role" }, customEvent: ".TrapFocus" + (new Date).getTime() + Math.random() }; this.opts = a.def(i, e || {}); if (!(this.obj = w(this.opts.obj)).length) return; if (s != null) s.destroy(); s = this; this.init() } return n.prototype = { init: function () { this.initLayout(); this.buildAria(); this.bindEvents(true); this.loadComponent(); this.obj.data("TrapFocus", this) }, initLayout: function () { var t = this.opts.ariaAttr; var e = this.opts.elAttr; this.obj.attr(t.modal, "true"); this.obj.attr(e.role, "dialog") }, buildAria: function () { var v = this.opts.ariaAttr; var f = this.opts.elAttr; var t = "head, script, noscript, link, style, meta"; var e = this.opts.ariaNotHidden.length > 0 ? `, ${this.opts.ariaNotHidden.join(",")}` : ""; a.def(this, { aria: { notHidden: Array(t + e), focusType: ["A", "BUTTON", "INPUT", "SELECT", "TEXTAREA"], dataAttr: { ariaHidden: "trapfocusariahidden", ariaDisabled: "trapfocusariadisabled", tabIndex: "trapfocustabindex", role: "trapfocusrole" }, destroy: w.proxy(function () { var a = this.aria.dataAttr; var n = this.aria.hiddenEls; var s = this.aria.focusEls; var r = this.aria.tabindexEls; for (var t = 0, e = n.length; t < e; t++)(function (t) { var e = n.eq(t), i = e.data(a.ariaHidden), s = e.data(a.role); if (i != g) { e.attr(v.hidden, i); e.removeData(a.ariaHidden) } else e.removeAttr(v.hidden); if (s != g) { e.attr(f.role, s); e.removeData(a.role) } else e.removeAttr(f.role) })(t); for (var i = 0, o = s.length; i < o; i++)(function (t) { var e = s.eq(t), i = e.data(a.ariaDisabled); e.removeAttr(f.tabIndex); if (i != g) { e.attr(v.disabled, i); e.removeData(a.ariaDisabled) } else e.removeAttr(v.disabled) })(i); for (var l = 0, h = r.length; l < h; l++)(function (t) { var e = r.eq(t), i = e.data(a.tabIndex); if (i != g) { e.attr(f.tabIndex, i); e.removeData(a.tabIndex) } else e.removeAttr(f.tabIndex) })(l); var d = document.getElementById("teconsent"); if (d) { var c = d.querySelector("a"); if (c && c.getAttribute("tabindex") === "-1") { c.setAttribute("tabindex", "0"); c.removeAttribute("aria-disabled") } } }, this), build: w.proxy(function () { var i = this; var t = this.aria.focusType; var a = this.aria.dataAttr; var s = this.obj.parents(); var n = this.obj.siblings().not(i.aria.notHidden.join(",")); var r = w("

"); var o = w(""); for (var e = 0, l = s.length; e < l; e++)(function (t) { var e = s.eq(t); n = n.add(e.siblings().not(i.aria.notHidden.join(","))) })(e); r = r.add(n); o = o.add(n); this.obj.removeAttr(v.hidden); for (var h = 0, d = n.length; h < d; h++)(function (t) { var e = n.eq(t), i = e.attr(v.hidden), s = e.attr(f.role); if (i != g) e.data(a.ariaHidden, i); if (s != g) e.data(a.role, s); e.attr(v.hidden, "true"); e.attr(f.role, "none presentation") })(h); r = r.add(n.find(t.join(",").toLowerCase())); for (var c = 0, u = r.length; c < u; c++)(function (t) { var e = r.eq(t), i = e.attr(v.disabled); if (i != g) e.data(a.ariaDisabled, i); e.attr(v.disabled, "true"); setTimeout(() => { e.attr(f.tabIndex, -1) }) })(c); o = o.add(n.find("[" + f.tabIndex + "]")); for (var p = 0, m = o.length; p < m; p++)(function (t) { var e = o.eq(t), i = e.attr(f.tabIndex); if (i != g) e.data(a.tabIndex, i); e.attr(f.tabIndex, -1) })(p); this.aria.hiddenEls = n; this.aria.focusEls = r; this.aria.tabindexEls = o }, this) } }) }, changeEvents: function (t) { var e = [], i = t.split(" "); for (var s in i) e.push(i[s] + this.opts.customEvent); return e.join(" ") }, bindEvents: function (t) { if (t) w(i).on(this.changeEvents("focusin"), w.proxy(this.trapFocus, this)); else w(i).off(this.changeEvents("focusin")) }, focusFirstDescendant: function (t) { for (var e = 0; e < t.childNodes.length; e++) { var i = t.childNodes[e]; if (this.attemptFocus(i) || this.focusFirstDescendant(i)) return true } return false }, focusLastDescendant: function (t) { for (var e = t.childNodes.length - 1; e >= 0; e--) { var i = t.childNodes[e]; if (this.attemptFocus(i) || this.focusLastDescendant(i)) return true } return false }, isFocusable: function (t) { if (t.tabIndex > 0 || t.tabIndex === 0 && t.getAttribute("tabIndex") !== null) return true; if (t.disabled) return false; switch (t.nodeName) { case "A": return !!t.href && t.rel != "ignore"; case "INPUT": return t.type != "hidden" && t.type != "file"; case "BUTTON": case "SELECT": case "TEXTAREA": case "VIDEO": case "SOURCE": case "IFRAME": return true; default: return false } }, attemptFocus: function (t) { if (this.opts.isDestroy) return; if (!this.isFocusable(t)) return false; this.opts.IgnoreUtilFocusChanges = true; try { t.focus() } catch (t) { } this.opts.IgnoreUtilFocusChanges = false; return document.activeElement === t }, trapFocus: function (t) { if (this.opts.isDestroy) return; if (this.opts.IgnoreUtilFocusChanges) return; var e = document; this.dynamicComponentFocus() }, loadComponent: function () { this.dynamicComponentFocus(); setTimeout(() => { this.dynamicComponentFocus() }, 3e3); this.focusFirstDescendant(this.obj[0]); this.lastFocus = document.activeElement; this.aria.build() }, dynamicComponentFocus: function () { const o = this.opts.ariaAttr; const l = this.opts.elAttr; setTimeout(() => { var t = document.getElementById("QSIFeedbackButton-btn"); var e = document.getElementById("QSIFeedbackButton-close-btn"); var i = document.getElementById("nebula_div_btn"); var s = document.getElementById("spr-live-chat-app"); var a = document.getElementById("teconsent"); if (t) { var n = t.parentElement; t.setAttribute(o.disabled, "true"); t.setAttribute(l.tabIndex, "-1"); n.setAttribute(o.disabled, "true"); n.setAttribute(o.hidden, "true"); n.setAttribute(l.tabIndex, "-1"); n.setAttribute(l.role, "none presentation") } if (i) { var r = i.parentElement; i.setAttribute(o.disabled, "true"); i.setAttribute(l.tabIndex, "0"); r.setAttribute(o.disabled, "true"); r.setAttribute(o.hidden, "true"); r.setAttribute(l.tabIndex, "-1"); r.setAttribute(l.role, "none presentation") } if (s) { s.setAttribute(o.disabled, "true"); s.setAttribute(o.hidden, "true"); s.setAttribute(l.tabIndex, "-1"); s.setAttribute(l.role, "none presentation") } if (a && a.hasAttribute("aria-label")) setTimeout(() => { var t = a.querySelector("a"); t.setAttribute(l.tabIndex, "-1"); t.setAttribute(o.disabled, "true"); t.setAttribute(o.hidden, "true") }) }) }, destroy: function () { s = null; this.opts.isDestroy = true; var t = this.opts.ariaAttr; var e = this.opts.elAttr; this.bindEvents(false); this.aria.destroy(); this.obj.removeAttr(t.modal) } }, n }() }(window), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const n = WATCH6.UTILS, t = n.RESPONSIVE; WATCH6.HeightMatch = class { constructor(t = container, e) { var i = { container: t || ".heightmatch-wrap", childElement: ">li", notCompareElement: null, pushElement: null, matchElement: ".heightmatch-cont", column: 3, pushObjs: null, useDestroyHeight: !0, destroyType: !1, resizeStart: null, breakpoints: {}, matchBefore: null, matchAfter: null, loadAfter: null }; this.opts = n.def(i, e || {}), this.classes = i.classes, this.obj = $(document.querySelector(t)), this.init() } init() { null !== this.obj && (this.setElements(), this.setOpts(), this.setRows(), this.buildHeightControl(), this.outCallback("loadAfter"), this.bindEvents()) } setElements() { this.objChild = this.obj.find(this.opts.childElement), (this.opts.pushObjs = null) == this.opts.pushElement ? this.opts.pushObjs = this.objChild.not(this.opts.notCompareElement) : this.opts.pushObjs = this.objChild.not(this.opts.notCompareElement).find(this.opts.pushElement) } setOpts() { this.currentDevice = !1, this.prevDevice = null; var t, e, i = n.winSize().w, s = this.opts.breakpoints, a = []; for (e in s) t = i <= e ? (a.push(e), Math.min.apply(null, a)) : null; this.breakOpts = n.def({}, this.opts), null != t && (this.breakOpts = n.def(this.breakOpts, s[t])) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)) } onResizeHandler() { n.winSize().w !== this.winWidth && (this.winWidth = n.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.outCallback("matchBefore"), this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.setOpts(), this.setRows(), this.buildHeightControl(), this.resizeRequestFrame = n.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, this.setOpts(), this.setRows(), this.buildHeightControl(), this.outCallback("matchAfter"), n.cancelAFrame.call(window, this.resizeRequestFrame) } setLayout() { this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice, this.prevDevice, this.prevDevice = this.currentDevice } setRows() { this.rowNum = Math.ceil(this.objChild.length / this.breakOpts.column) } buildHeightControl() { this.breakOpts.column <= 1 ? null !== this.opts.pushObjs && this.opts.pushObjs.css("height", "") : this.buildHeight() } buildHeight() { this.heightArray = []; for (var t = 0; t < this.rowNum; t++)this.heightArray[t] = []; for (var t = 0, e = this.objChild.length; t < e; t++) { var i = parseInt(t / this.breakOpts.column, 10), s = this.objChild.eq(t).not(this.opts.notCompareElement).find(this.opts.matchElement), s = s.is(":visible") ? Math.ceil(s.outerHeight()) : 0; this.heightArray[i].push(s) } for (t = 0; t < this.rowNum; t++)this.heightArray[t] = Math.max.apply(null, this.heightArray[t]); this.setHeightLayout() } setHeightLayout() { for (var t = 0, e = this.objChild.length; t < e; t++) { var i = parseInt(t / this.breakOpts.column, 10); (null == this.opts.pushElement ? this.objChild.eq(t).not(this.opts.notCompareElement) : this.objChild.eq(t).not(this.opts.notCompareElement).find(this.opts.pushElement)).height(this.heightArray[i]) } } destroy() { this.opts.useDestroyHeight && null !== this.opts.pushObjs && this.opts.pushObjs.css("height", ""), this.opts.destroyType = !0, this.bindEvents(!1) } reInit() { this.setElements(), this.setOpts(), this.setRows(), this.buildHeightControl(), this.onResizeHandler(), this.opts.destroyType && (this.opts.destroyType = !1, this.bindEvents(!0)) } outCallback(t) { t = this.opts[t]; null != t && t() } } }(), function (t) { t.HiveLayer = function () { "use strict"; var t, o = window, l = o.jQuery, e = o.document, h = o.WATCH6.UTILS, d = []; function s(t, e) { if (!(this instanceof s)) return new s(t, e); var i = { effect: "fade", layerWrapElements: t, layerBody: ".cm-layer__body", layerElements: ".cm-layer__wrapper", openerElements: ".js-layer-opener", closerElements: ".js-layer-closer", dimmedElements: ".cm-layer__dimmed", classAttr: { htmlToggle: "is-layer-open", isAsync: "is-async" }, focusOutObj: { CSS: { overflow: "hidden", position: "absolute", left: 0, top: 0, "z-index": -1, width: 1, height: 1, "font-size": "1px", "line-height": 0 } }, customEvent: ".HiveLayer" + (new Date).getTime() + Math.random(), openerTarget: null, useOutside: false, useEscape: true, useCloseFocus: true, useScrollLock: true, useTrapFocus: true, flip: { CLASS: "hive-layer-flip", direction: "horizontal", rotateStart: 90, rotateEnd: 0 }, customToggle: false, dimmedDuration: 250, fps: 120, easing: "swing", duration: 250, on: { buildTools: null, layerMove: null, layerOpenBefore: null, layerOpenAfter: null, layerCloseBefore: null, layerCloseAfter: null }, ariaNotHidden: [] }; if (!(this.layerWrap = i.layerWrapElements).length) return; this.layerWrap = l(i.layerWrapElements); this.opts = h.def(i, e || {}); this.init() } return s.prototype = { init: function () { this.initOpts(); this.setElements(); this.initLayout(); this.buildTween(); this.buildTrapFocus(); this.bindEvents(true); this.layerWrap.data("HiveLayer", this) }, initOpts: function () { this.layerWrapInstance = "#" + this.layerWrap.attr("id"); if (!this.opts.isSupportTransition && this.opts.effect === "flip") this.opts.effect = "default"; if (this.opts.effect == "custom") { this.opts.effect = "default"; this.opts.customToggle = true } }, setElements: function () { this.layerBody = this.layerWrap.find(this.opts.layerBody); this.layerObj = this.layerWrap.find(this.opts.layerElements); this.closerObj = this.layerWrap.find(this.opts.closerElements); this.dimmedObj = this.layerWrap.find(this.opts.dimmedElements) }, initLayout: function () { if (this.opts.effect === "slide") { this.dimmedObj.hide(); this.layerObj.hide() } else if (this.opts.effect === "flip") { var t = this.opts.flip.direction; if (t !== "vertical") this.opts.flip.cssD = "rotateY"; else this.opts.flip.cssD = "rotateX"; this.dimmedObj.hide(); this.layerObj.hide(); this.layerWrap.addClass(this.opts.flip.CLASS) } }, buildTween: function () { h.def(this, { tweens: { instance: [], kill: l.proxy(function () { for (var t = 0, e = this.tweens.instance.length; t < e; t++)this.tweens.instance[t].kill(); this.tweens.instance = [] }, this) } }) }, buildTrapFocus: function () { if (!this.opts.useTrapFocus) return; h.def(this, { trapfocus: { instance: null, destroy: l.proxy(function () { if (this.trapfocus.instance == null) return; this.trapfocus.instance.destroy(); this.trapfocus.instance = null }, this), build: l.proxy(function () { if (this.trapfocus.instance !== null) return; this.trapfocus.instance = new TrapFocus(this.layerObj, { ariaNotHidden: this.opts.ariaNotHidden }) }, this) } }) }, bindEvents: function (t) { if (t) { l(e).on("click clickCustom", this.opts.openerElements + '[data-layer-target="' + this.layerWrapInstance + '"]', l.proxy(this.onLayerOpen, this)); this.layerWrap.on("openLayer", l.proxy(this.onLayerOpen, this)); this.closerObj.on("mousedown click clickCustom", l.proxy(this.onLayerClose, this)); this.layerWrap.on("layerSetOptions", l.proxy(this.setOptions, this)); if (this.opts.useEscape) this.layerObj.on("keydown", l.proxy(this.onEscapeClose, this)) } else { l(e).off("click clickCustom"); this.layerWrap.off("openLayer"); this.closerObj.off("mousedown click clickCustom"); this.layerWrap.off("layerSetOptions"); if (this.opts.useEscape) this.layerObj.off("keydown") } }, bindOutsideEvents: function (t) { if (!this.opts.useOutside) return; if (t) this.layerObj.on("clickoutside touchendoutside", l.proxy(this.onLayerOutsideFunc, this)); else this.layerObj.off("clickoutside touchendoutside") }, bindCloseEvents: function (t) { if (t) this.layerWrap.on("closeLayer", l.proxy(this.closeLayer, this)); else this.layerWrap.off("closeLayer") }, setOptions: function (t, e) { h.def(this.opts, e || {}); if (e.customToggle) this.opts.effect = "default" }, setScrollLock: function (t) { if (!this.opts.useScrollLock) return; if (t) h.page.scrollLock.on(); else h.page.scrollLock.off(); l("html").toggleClass(this.opts.classAttr.htmlToggle, t) }, onLayerOpen: function (t) { t.preventDefault(); setTimeout(() => { this.dimmedObj.on("mousedown click clickCustom", l.proxy(this.onLayerClose, this)) }, 500); if (t.type === "click" || t.type === "clickCustom") this.opts.openerTarget = l(t.currentTarget); if (t.type === "click") if (this.opts.openerTarget.hasClass(this.opts.classAttr.isAsync)) return; this.layerViewType = "open"; d.push({ POPUPWRAP: this.layerWrap }); if (document.querySelector("html.load div#header")) { document.querySelector("html.load div#header").style.opacity = 0; document.querySelector("html.load div#header").style.pointerEvents = "none" } this.setScrollLock(true); this.bindCloseEvents(true); if (this.opts.effect === "default") if (!this.opts.customToggle) { this.layerWrap.css({ opacity: 0, display: "block" }); this.outCallback("layerOpenBefore"); this.outCallback("buildTools"); this.layerWrap.css("opacity", ""); this.openAfterBugFunc() } else this.outCallback("layerOpenBefore"); else if (this.opts.effect === "fade") { this.layerWrap.css({ opacity: 0, display: "block" }); this.outCallback("layerOpenBefore"); TweenLite.set(this.layerBody, { opacity: 0, scale: 1, overflow: "hidden" }); this.outCallback("buildTools"); var e = TweenLite.to(this.layerWrap, this.opts.duration / 1e3, { opacity: 1, onComplete: l.proxy(function () { var t = TweenLite.to(this.layerBody, .25, { ease: Expo.easeOut, opacity: 1, scale: 1, onComplete: l.proxy(function () { this.layerBody.css({ overflow: "", transform: "" }); this.openAfterBugFunc() }, this) }); this.tweens.instance.push(t) }, this) }); this.tweens.instance.push(e) } else if (this.opts.effect === "slide") { var i = 1; TweenLite.set(this.dimmedObj, { display: "block", opacity: 0 }); TweenLite.set(this.layerWrap, { display: "block" }); TweenLite.set(this.layerBody, { overflow: "hidden" }); TweenLite.set(this.layerObj, { display: "", y: -h.winSize().h }); TweenLite.set(this.layerObj, { display: "" }); this.outCallback("layerOpenBefore"); var e = TweenLite.to(this.dimmedObj, i, { opacity: .9 }); var s = TweenLite.to(this.layerObj, i, { y: 0, onComplete: l.proxy(function () { this.outCallback("buildTools"); this.layerBody.css({ overflow: "" }); this.layerObj.css({ transform: "" }); this.openAfterBugFunc() }, this) }); this.tweens.instance.push(e); this.tweens.instance.push(s) } else if (this.opts.effect === "slide2") { var i = .6; TweenLite.set(this.dimmedObj, { display: "block", opacity: 0 }); TweenLite.set(this.layerWrap, { display: "block" }); TweenLite.set(this.layerObj, { display: "", y: h.winSize().h }); TweenLite.set(this.layerObj, { display: "" }); this.outCallback("layerOpenBefore"); var e = TweenLite.to(this.dimmedObj, i, { opacity: .9 }); var s = TweenLite.to(this.layerObj, i, { y: 0, onComplete: l.proxy(function () { this.outCallback("buildTools"); this.layerBody.css({ overflow: "" }); this.layerObj.css({ transform: "" }); this.openAfterBugFunc() }, this) }); this.tweens.instance.push(e); this.tweens.instance.push(s) } else if (this.opts.effect === "flip") { var a = this.opts.flip.rotateEnd - this.opts.flip.rotateStart, n = a / this.opts.duration * (1e3 / this.opts.fps), r = 0; this.opts.flip.moveData = { startDistance: this.opts.flip.rotateStart, endDistance: this.opts.flip.rotateEnd, moveDistance: a, moveOneStep: n, currentStep: r }; this.layerWrap.show(); this.dimmedObj.fadeIn(this.opts.dimmedDuration, l.proxy(function () { this.outCallback("layerOpenBefore"); this.outCallback("buildTools"); this.layerObj.show(); this.initStep(this.opts.flip.moveData); this.flipFunc() }, this)); o.setTimeout(l.proxy(function () { this.outCallback("buildTools") }, this), 30) } this.ariaAccessbility(true, this.layerWrap) }, initStep: function (t) { this.opts.stepTimeOld = new Date; this.direction = t.startDistance > t.moveDistance ? "toNext" : "toPrev"; this.condition = this.direction === "toNext" ? t.currentStep > t.moveDistance : t.currentStep < t.moveDistance }, moveStep: function (t) { this.opts.stepTimeNew = new Date; this.opts.remaining = Math.max(0, this.opts.stepTimeOld - this.opts.stepTimeNew + this.opts.duration); var e = this.opts.remaining / this.opts.duration || 0, i = 1 - e, s = l.easing[this.opts.easing](i, this.opts.duration * i, 0, 1, this.opts.duration); t.currentStep = (t.endDistance - t.startDistance) * s }, flipFunc: function () { var t = this.opts.flip.moveData; this.moveStep(t); if (this.condition) { o.clearTimeout(this.stepTimeout); this.stepTimeout = o.setTimeout(l.proxy(function () { this.flipFunc() }, this), 1e3 / this.opts.fps); this.condition = this.direction === "toNext" ? t.currentStep > t.moveDistance : t.currentStep < t.moveDistance; this.outCallback("layerMove", t.currentStep, t) } else { this.opts.remaining = this.opts.duration; if (this.layerViewType === "close" || !this.layerViewType) { this.closeAfterBugFunc(); this.dimmedObj.fadeOut(this.opts.dimmedDuration, l.proxy(function () { this.layerWrap.hide(); this.layerObj.hide() }, this)) } else this.openAfterBugFunc() } var e = t.startDistance + t.currentStep; this.layerObj.css({ transform: this.opts.flip.cssD + "(" + e + "deg)" }) }, onLayerOpenAfter: function () { if (this.trapfocus) this.trapfocus.build(); this.bindOutsideEvents(true); this.outCallback("layerOpenAfter") }, openAfterBugFunc: function () { o.clearTimeout(this.openAfterTimeout); this.openAfterTimeout = o.setTimeout(l.proxy(this.onLayerOpenAfter, this), 30) }, onLayerClose: function (t) { var e = l(t.currentTarget); if (t.type === "mousedown") { if (!h.isDevice) { t.stopPropagation(); this.opts.useCloseFocus = false } } else if (t.type === "click" || t.type === "clickCustom") { t.preventDefault(); if (t.type === "click") if (e.hasClass(this.opts.classAttr.isAsync)) return; this.layerWrap.trigger("closeLayer"); this.dimmedObj.off("mousedown click clickCustom") } }, closeLayer: function () { this.closeType = arguments[1]; this.layerViewType = "close"; this.outCallback("layerCloseBefore"); this.popupOpenPropsControl(); this.setScrollLock(false); if (this.trapfocus) this.trapfocus.destroy(); if (document.querySelector("html.load div#header")) { document.querySelector("html.load div#header").style.opacity = 1; document.querySelector("html.load div#header").style.pointerEvents = "unset" } this.ariaAccessbility(false, this.layerWrap); o.clearTimeout(this.closeBeforeTimeout); this.closeBeforeTimeout = o.setTimeout(l.proxy(this.closeBeforeBugFunc, this), 30); this.bindOutsideEvents(false) }, onEscapeClose: function (t) { var e = t.which || t.keyCode; if (e !== 27) return; this.layerWrap.trigger("closeLayer") }, onLayerOutsideFunc: function () { this.layerWrap.trigger("closeLayer") }, closeBeforeBugFunc: function () { if (this.opts.effect === "default") { if (!this.opts.customToggle) this.layerWrap.stop(true, true).hide(); this.closeAfterBugFunc() } else if (this.opts.effect === "fade") { var t = TweenLite.to(this.layerBody, this.opts.duration / 1e3, { overflow: "hidden", opacity: 0, scale: 1, onComplete: l.proxy(function () { this.layerBody.css("overflow", ""); var t = TweenLite.to(this.layerWrap, this.opts.duration / 1e3, { opacity: 0, display: "none", onComplete: l.proxy(this.closeAfterBugFunc, this) }); this.tweens.instance.push(t) }, this) }); this.tweens.instance.push(t) } else if (this.opts.effect === "slide") { var e = 1; TweenLite.set(this.layerBody, { overflow: "hidden" }); var t = TweenLite.to(this.dimmedObj, e, { opacity: 0 }); var i = TweenLite.to(this.layerObj, e, { y: -h.winSize().h, onComplete: l.proxy(function () { this.closeAfterBugFunc(); this.dimmedObj.hide(); this.layerWrap.hide(); this.layerBody.css("overflow", ""); this.layerObj.hide() }, this) }); this.tweens.instance.push(t); this.tweens.instance.push(i) } else if (this.opts.effect === "slide2") { var e = .5; var t = TweenLite.to(this.dimmedObj, e, { opacity: 0 }); var i = TweenLite.to(this.layerObj, e, { y: h.winSize().h, onComplete: l.proxy(function () { this.closeAfterBugFunc(); this.dimmedObj.hide(); this.layerWrap.hide(); this.layerBody.css("overflow", ""); this.layerObj.hide() }, this) }); this.tweens.instance.push(t); this.tweens.instance.push(i) } else if (this.opts.effect === "flip") { var s = -this.opts.flip.rotateStart - this.opts.flip.rotateEnd, a = s / this.opts.duration * (1e3 / this.opts.fps), n = 0; this.opts.flip.moveData = { startDistance: this.opts.flip.rotateEnd, endDistance: -this.opts.flip.rotateStart, moveDistance: s, moveOneStep: a, currentStep: n }; this.initStep(this.opts.flip.moveData); this.flipFunc() } }, closeAfterBugFunc: function () { o.clearTimeout(this.closeAfterTimeout); this.closeAfterTimeout = o.setTimeout(l.proxy(this.onLayerCloseAfter, this), 30) }, popupOpenPropsControl: function () { var t = d; for (var e = 0, i = t.length; e < i; e++) { var s = t[e], a = s["POPUPWRAP"][0]; if (a === this.layerWrap[0]) t[e] = null } for (var n = 0, r = t.length; n < r; r--) { var o = t[r - 1]; if (o === null) t.splice(r - 1, 1) } }, onLayerCloseAfter: function () { if (this.opts.openerTarget !== null) { if (this.closeType !== false) this.opts.openerTarget.focus(); this.opts.openerTarget = null } this.opts.useCloseFocus = true; this.bindCloseEvents(false); this.outCallback("layerCloseAfter") }, ariaAccessbility: function (t, e) { }, outCallback: function (t) { var e = this.opts.on[t]; if (t === "layerMove") this.layerWrap.trigger(t, arguments[1], arguments[2], this); else this.layerWrap.trigger(t, this); if (e == null) return; if (t === "layerMove") e(arguments[1], arguments[2], this); else e(this) }, styleDestroy: function () { this.dimmedObj.attr("style", ""); this.layerWrap.attr("style", ""); this.layerBody.attr("style", ""); this.layerObj.attr("style", "") }, destroy: function () { this.tweens.kill(); if (this.trapfocus) this.trapfocus.destroy(); this.styleDestroy(); this.bindEvents(false); this.bindOutsideEvents(false); this.bindCloseEvents(false) } }, s }() }(window), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const r = WATCH6.UTILS; r.RESPONSIVE; WATCH6.SubNav = class { constructor(t = container, e) { var i = { navItems: "ul li>a", navDests: '[class*="js-nav-"]', visSections: ".js-visible", resizeStart: null, classes: { isOn: "on" } }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(t), this.init() } init() { null !== this.el && (this.setElements(), this.initOpts(), this.bindEvents()) } setElements() { this.navItems = r.convertArray(this.el.querySelectorAll(this.opts.navItems)), this.navDests = document.querySelectorAll(this.opts.navDests), this.visSections = r.convertArray(document.querySelectorAll(this.opts.visSections)) } initOpts() { this.visCount = -1, this.visSections.forEach(t => { t.dataset.visIndex = t.classList.contains("js-count") ? ++this.visCount : this.visCount }), this.winOffsetTop = window.pageYOffset } bindEvents() { this.onScrollHandler(), window.addEventListener("resize", this.onResizeHandler.bind(this)), window.addEventListener("scroll", this.onScrollHandler.bind(this)); const i = window.location.hash; this.navItems.forEach((t, e) => { -1 < t.getAttribute("href").indexOf("#") && (t.dataset.navIndex = e, t.addEventListener("click", this.onNavItemClickEvent.bind(this))), i && -1 < t.getAttribute("href").indexOf(i) && (t.parentNode.classList.remove(this.classes.isOn), t.click()) }) } onNavItemClickEvent(e) { e.preventDefault(); e = e.target; const i = e.parentNode; if (!this.el.classList.contains("hold") && !i.classList.contains(this.classes.isOn)) { this.navItems.forEach(t => { t.parentNode.classList.remove(this.classes.isOn) }), i.classList.contains(this.classes.isOn) || i.classList.add(this.classes.isOn); e = e.dataset.navIndex; const n = this.navDests[e]; var e = n.getBoundingClientRect(), s = parseInt(window.getComputedStyle(n).paddingTop), a = (window.innerHeight - (e.height - s) + r.getNavHeight()) / 2; let t = 0; (t = n.classList.contains("js-nav-center") ? this.winOffsetTop + e.top + s - a : this.winOffsetTop + e.top - r.getNavHeight()) < 150 && (t = 0), this.el.classList.add("hold"), GALAXY.setSmoothScrollTop(t, 1500, () => { this.el.classList.contains("hold") && this.el.classList.remove("hold"), GALAXY.header && GALAXY.header.resetSubNav() }) } } onScrollHandler() { this.winOffsetTop = window.pageYOffset; var a = (window.innerHeight + r.getNavHeight()) / 2; this.visSections.forEach(t => { var i, e = t.getBoundingClientRect(), s = this.winOffsetTop + e.top, e = this.winOffsetTop + e.bottom; this.winOffsetTop + a >= s && this.winOffsetTop + a <= e && (i = t.dataset.visIndex, this.navItems.forEach((t, e) => { e != i && t.parentNode.classList.contains(this.classes.isOn) && t.parentNode.classList.remove(this.classes.isOn) }), (s = this.navItems[i].parentNode).classList.contains(this.classes.isOn) || (s.classList.add(this.classes.isOn), !this.el.classList.contains("hold") && s.classList.contains(this.classes.isOn) && GALAXY.header && GALAXY.header.resetSubNav())) }) } onResizeHandler() { r.winSize().w !== this.winWidth && (this.winWidth = r.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.onScrollHandler(), this.resizeRequestFrame = r.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, r.cancelAFrame.call(window, this.resizeRequestFrame) } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.Band = class { constructor(t = container, e) { this.opts = { el: t, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el })) } }, this.videoPlayer.build() } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const t = WATCH6.UTILS, e = t.RESPONSIVE; WATCH6.Battery = class { constructor(t = container, e) { var i = { el: t, popupEl: ".wearable-watch-battery-processor__popup", processorLayerEl: ".wearable-watch-battery-processor__popup.processor-popup", batteryLayerEl: ".wearable-watch-battery-processor__popup.battery-popup", videoElement: ".video__container", featureHide: "is-feature-hide", resizeStart: null }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer(), this.buildLayer(), this.bindEvents()) } setElements() { this.processorLayerEl = this.el.querySelector(this.opts.processorLayerEl), this.batteryLayerEl = this.el.querySelector(this.opts.batteryLayerEl), this.videoElement = this.el.querySelectorAll(this.opts.videoElement), this.processorVideoElement = this.processorLayerEl.querySelector(this.opts.videoElement), this.batteryVideoElement = this.batteryLayerEl.querySelector(this.opts.videoElement) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)) } onResizeHandler() { t.winSize().w !== this.winWidth && (this.winWidth = t.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.resizeRequestFrame = t.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, t.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() { "block" === this.processorLayerEl.style.display && this.videoPlayer.change(this.processorVideoElement), "block" === this.batteryLayerEl.style.display && this.videoPlayer.change(this.batteryVideoElement) } setLayout() { this.winWidth >= e.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } buildVideoPlayer() { this.videoPlayer = { instance: [], load: e => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(t => { t.onLoad(e) }) }, reset: e => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(t => { t.onReset(e) }) }, play: e => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(t => { t.onPlay(e) }) }, change: e => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(t => { t.onChange(e) }) }, build: () => { this.videoPlayer.instance.length || this.videoElement.forEach((t, e) => { this.videoPlayer.instance.push(new WATCH6.VideoPlayer(t, { sectionElement: this.opts.el, videoParentElement: this.opts.popupEl })) }) } }, this.videoPlayer.build() } buildLayer() { this.layer = { instance: [], build: () => { this.layer.instance.length || (this.layer.instance.push(new HiveLayer(this.opts.processorLayerEl, { effect: "default", on: { layerOpenBefore: () => { this.processorVideoElement && this.videoPlayer.load(this.processorVideoElement) }, layerCloseAfter: () => { this.videoPlayer.reset(this.processorVideoElement) } } })), this.layer.instance.push(new HiveLayer(this.opts.batteryLayerEl, { effect: "default", on: { layerOpenBefore: () => { this.batteryVideoElement && this.videoPlayer.load(this.batteryVideoElement) }, layerCloseAfter: () => { this.videoPlayer.reset(this.batteryVideoElement) } } }))) } }, this.layer.build() } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const o = WATCH6.UTILS, t = o.RESPONSIVE; WATCH6.Compare = class { constructor(t = container, e) { var i = { el: t, trackElement: ".wearable-watch-compare__track", fixedElement: ".wearable-watch-compare__fixed", compareWrapEl: ".wearable-watch-compare__list-wrap", compareListEl: ".wearable-watch-compare__list", compareItemEl: ".wearable-watch-compare__list-item", compareImgEl: ".wearable-watch-compare__product-img", compareInfo: ".wearable-watch-compare__info", compareInfoItem: ".wearable-watch-compare__info-item", navigationEl: ".wearable-watch-compare__navigation", colorChipEl: ".wearable-watch-compare__color-chip", colorList: ".wearable-watch-compare__color", tabPanel: ".wearable-watch-compare__product", tabPanels: ".wearable-watch-compare__product-item", scrollbarEl: ".swiper-scrollbar", viewMoreCta: ".view-more__cta", featureHide: "is-feature-hide", viewmore: ".viewmore", collapse: ".collapse", matchElements: [".wearable-watch-compare__info-item--display", ".wearable-watch-compare__info-item--screen", ".wearable-watch-compare__info-item--charge", ".wearable-watch-compare__info-item--sensor", ".wearable-watch-compare__info-item--material", ".wearable-watch-compare__info-item--battery", ".wearable-watch-compare__info-item--sleep", ".wearable-watch-compare__info-item--cycle", ".wearable-watch-compare__info-item--composition", ".wearable-watch-compare__info-item--route", ".wearable-watch-compare__info-item--durability", ".wearable-watch-compare__info-item--size", ".wearable-watch-compare__info-item--weight", ".wearable-watch-compare__cta", ".wearable-watch-compare__size", ".wearable-watch-compare__color", ".wearable-watch-common__sub-headline"], matchCommonOpts: { childElement: ".wearable-watch-compare__list-item", useDestroyHeight: !1, breakpoints: {} }, classes: { isFixed: "is-fixed", isCollapse: "is-collapse", isExpanded: "is-expanded" }, resizeStart: null, on: { updateImageLoader: null } }; this.opts = o.def(i, e || {}), this.classes = i.classes, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.initLayout(), this.bindEvents(), this.buildHeightMatch(), this.buildSwiper(), this.buildCompareItem(), this.onResizeHandler()) } initOpts() { this.getCurrentDevice(), this.scroller = null, this.prevDevice = null, this.expanded = !1, this.scrollMoveState = !1, this.firstImageLoad = !1, this.viewMoreCtaTagging = this.viewMoreCta.getAttribute("data-omni"), this.viewMoreTagging = this.viewMoreCta.querySelector(this.opts.viewmore).getAttribute("data-tagging"), this.collapseTagging = this.viewMoreCta.querySelector(this.opts.collapse).getAttribute("data-tagging") } initLayout() { this.updateViewMoreHeight() } setElements() { this.trackElement = this.el.querySelector(this.opts.trackElement), this.fixedElement = this.el.querySelector(this.opts.fixedElement), this.compareWrapEl = this.el.querySelector(this.opts.compareWrapEl), this.compareListEl = this.compareWrapEl.querySelector(this.opts.compareListEl), this.contentsEl = this.el.querySelectorAll(this.opts.colorChipEl), this.compareItemEl = this.compareWrapEl.querySelectorAll(this.opts.compareItemEl), this.compareInfo = this.el.querySelectorAll(this.opts.compareInfo), this.viewMoreCta = this.el.querySelector(this.opts.viewMoreCta), this.navigationEl = this.el.querySelector(this.opts.navigationEl), this.scrollbarEl = this.el.querySelector(this.opts.scrollbarEl) } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener("resize", this.onResizeHandler.bind(this)), window.addEventListener("scroll", this.onScrollHandler.bind(this)), this.viewMoreCta.addEventListener("click", this.onClickViewMoreCta.bind(this)) } getCurrentDevice() { this.winWidth = o.winSize().w, this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.prevDevice = this.currentDevice } updateViewMoreHeight() { this.expanded ? (this.viewMoreCta.classList.add(this.classes.isCollapse), this.el.classList.add(this.classes.isExpanded), this.viewMoreCta.setAttribute("data-omni", this.viewMoreCtaTagging + this.collapseTagging), this.viewMoreCta.setAttribute("ga-la", this.viewMoreCtaTagging + this.collapseTagging), this.heightMatch.reInit()) : (this.viewMoreCta.classList.remove(this.classes.isCollapse), this.el.classList.remove(this.classes.isExpanded), this.viewMoreCta.setAttribute("data-omni", this.viewMoreCtaTagging + this.viewMoreTagging), this.viewMoreCta.setAttribute("ga-la", this.viewMoreCtaTagging + this.viewMoreTagging)) } updateImageLoader(t) { this.outCallback("updateImageLoader", t), this.firstImageLoad = !0 } buildHeightMatch() { this.heightMatch = { instance: [], reInit: () => { this.heightMatch.instance.length && this.heightMatch.instance.forEach(t => { t.reInit() }) }, initLayout: () => { for (let t = 0, e = this.opts.matchElements.length; t < e; t++) { const s = this.opts.matchElements[t]; var i = "js-" + s.split(".")[1]; for (let t = 0, e = this.compareItemEl.length; t < e; t++) { const a = this.compareItemEl[t]; if (null === a.querySelector("." + i)) { const n = document.createElement("div"), r = a.querySelector(s); n.innerHTML = r.innerHTML, n.classList.add(i), r.innerHTML = "", r.appendChild(n) } } } }, build: () => { this.heightMatch.initLayout(); var t = { column: this.compareItemEl.length }; o.def(this.opts.matchCommonOpts, t); for (let t = 0, e = this.opts.matchElements.length; t < e; t++) { const a = this.opts.matchElements[t]; var i = { pushElement: "." + a.split(".")[1], childElement: this.opts.compareItemEl, matchElement: ".js-" + a.split(".")[1] }, s = JSON.parse(JSON.stringify(this.opts.matchCommonOpts)); o.def(s, i), this.heightMatch.instance.push(new WATCH6.HeightMatch(this.opts.compareWrapEl, s)) } } }, this.heightMatch.build() } buildCompareItem() { this.compareItem = { instance: [], build: () => { this.compareItem.instance.length || this.compareItemEl.forEach(t => { this.compareItem.instance.push(new WATCH6.CompareItem(t, { on: { updateImageLoader: t => { } } })) }) } }, this.compareItem.build() } buildSwiper() { this.swiper = { instance: null, options: { freeMode: !0, slidesPerView: "auto", direction: "horizontal", a11y: !1, scrollbar: { el: this.opts.scrollbarEl } }, destroy: () => { null !== this.swiper.instance && (this.swiper.instance.destroy(), this.swiper.instance = null) }, updateTranslate: t => { null !== this.swiper.instance && this.swiper.instance.setTranslate(-t) }, updateLayout: () => { null !== this.swiper.instance && (this.swiperWidth = this.compareWrapEl.getBoundingClientRect().width, this.swiperListWidth = this.swiper.instance.virtualSize) }, build: () => { this.winWidth < 1024 ? null === this.swiper.instance && (this.swiper.instance = new Swiper(this.compareWrapEl, this.swiper.options), this.swiper.updateLayout()) : this.swiper.destroy() } }, this.swiper.build() } onClickViewMoreCta(t) { t.preventDefault(), this.expanded = !this.expanded, this.updateViewMoreHeight() } onLoadHandler() { this.heightMatch.reInit(), this.onResponsiveChange(), this.onScrollHandler(), window.removeEventListener("load", this.onLoadHandler.bind(this)) } onScrollHandler() { this.scrollY = window.scrollY; this.scrollY, this.lastScrollY; var t = window.innerHeight, e = o.getScroll().top - t, i = o.getScroll().bottom, s = o.getOffset(this.el), a = this.swiperWidth, n = (o.getHeight(this.compareWrapEl), o.getOffset(this.compareWrapEl)), r = this.swiperListWidth; Math.ceil(r - a), o.getOffset(this.trackElement).top, Math.abs(this.trackElement.clientHeight); o.getNavHeight(); if (i > s.top && e <= s.top || e < s.bottom && i > s.bottom || e < s.top && i > s.bottom || e > s.top && i < s.bottom) { if (this.firstImageLoad) return; r = this.el.querySelectorAll(".js-start-img-src"); this.updateImageLoader(r) } o.getScroll().top + o.getNavHeight() >= n.top && i <= n.bottom ? this.el.classList.contains(this.classes.isFixed) || this.el.classList.add(this.classes.isFixed) : this.el.classList.contains(this.classes.isFixed) && this.el.classList.remove(this.classes.isFixed), this.lastScrollY = scrollY } onResizeHandler() { o.winSize().w !== this.winWidth && (this.winWidth = o.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.updateViewMoreHeight(), this.swiper.build(), this.resizeRequestFrame = o.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, this.updateViewMoreHeight(), this.swiper.build(), o.cancelAFrame.call(window, this.resizeRequestFrame) } setLayout() { this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } onResponsiveChange() { } outCallback(t, e) { t = this.opts.on[t]; null != t && t(e) } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.CompareItem = class { constructor(t = container, e) { var i = { el: t, productEl: ".wearable-watch-compare__product", productItem: ".wearable-watch-compare__product-item", productImage: ".wearable-watch-compare__product-image", sizeEl: ".wearable-watch-compare__size", sizeCta: ".wearable-watch-compare__size-cta", colorEl: ".wearable-watch-compare__color", colorItem: ".wearable-watch-compare__color-item", colorChip: ".wearable-watch-compare__color-chip", buyNowCta: ".buy__cta", learnMoreCta: ".learn-more__cta", classes: { isActive: "is-active" }, resizeStart: null }; this.opts = i, this.classes = i.classes, this.el = t, this.init() } init() { null !== this.el && (this.setElements(), this.initOpts(), this.initLayout(), this.bindEvnts()) } initOpts() { this.currentProduct = this.el.dataset.modelName, this.currentSize = this.el.dataset.defaultSize, this.currentColor = {}, this.colorItem.forEach(t => { let e = t.querySelector("." + this.classes.isActive); e || (e = t.querySelectorAll(this.opts.colorChip)[0]).classList.add(this.classes.isActive), this.currentColor[e.dataset.size] = e.dataset.color }), this.colorChip.forEach(t => { t.removeAttribute("aria-selected"), t.removeAttribute("aria-hidden") }), this.DATA = LOCAL_DATA[this.currentProduct] } initLayout() { this.updateSizeLayout(), this.updateColorItemlayout(), this.updateColorChip(), this.updateProductItemLayout(), this.updateProductImage(), this.updateLink() } setElements() { this.productEl = this.el.querySelector(this.opts.productEl), this.productItem = this.productEl.querySelectorAll(this.opts.productItem), this.sizeEl = this.el.querySelector(this.opts.sizeEl), this.sizeCta = this.sizeEl.querySelectorAll(this.opts.sizeCta), this.colorEl = this.el.querySelector(this.opts.colorEl), this.colorItem = this.colorEl.querySelectorAll(this.opts.colorItem), this.colorChip = this.colorEl.querySelectorAll(this.opts.colorChip), this.buyNowCta = this.el.querySelector(this.opts.buyNowCta), this.learnMoreCta = this.el.querySelector(this.opts.learnMoreCta) } bindEvnts() { this.sizeCta.forEach(t => { t.addEventListener("click", this.handlerClickSizeCta.bind(this)) }), this.colorChip.forEach(t => { t.addEventListener("click", this.handlerClickColorChip.bind(this)) }) } handlerClickColorChip(t) { t = t.currentTarget; this.currentColor[this.currentSize] = t.dataset.color, this.updateColorChip(), this.updateProductImage(), this.updateLink() } handlerClickSizeCta(t) { t = t.currentTarget; this.currentSize = t.dataset.size, this.updateSizeLayout(), this.updateColorItemlayout(), this.updateProductItemLayout(), this.updateProductImage(), this.updateLink() } updateLink() { var t = this.currentSize, e = this.currentColor[t]; const i = this.DATA[t][e]; this.learnMoreCta && (i.hasOwnProperty("learnmore") ? (this.learnMoreCta.parentElement.style.display = "block", this.learnMoreCta.setAttribute("href", i.learnmore)) : this.learnMoreCta.parentElement.style.display = "none"), this.buyNowCta && (i.hasOwnProperty("buynow") ? (this.buyNowCta.parentElement.style.display = "block", this.buyNowCta.setAttribute("href", i.buynow)) : this.buyNowCta.parentElement.style.display = "none") } updateSizeLayout() { this.sizeCta.forEach(t => { this.currentSize === t.dataset.size ? (t.classList.add(this.classes.isActive), t.setAttribute("title", "selected")) : (t.classList.remove(this.classes.isActive), t.removeAttribute("title")) }) } updateColorItemlayout() { this.currentColorItem = Array.from(this.colorItem).filter(t => { if (this.currentSize === t.dataset.size) return t.classList.add(this.classes.isActive), t; t.classList.remove(this.classes.isActive) })[0] } updateColorChip() { const t = this.currentColorItem.querySelectorAll(this.opts.colorChip); t.forEach(t => { this.currentColor[this.currentSize] === t.dataset.color ? (t.classList.add(this.classes.isActive), t.setAttribute("title", "selected")) : (t.classList.remove(this.classes.isActive), t.removeAttribute("title")) }) } updateProductItemLayout() { this.currentProductItem = Array.from(this.productItem).filter(t => { if (this.currentSize === t.dataset.size) return t.classList.add(this.classes.isActive), t; t.classList.remove(this.classes.isActive) })[0] } updateProductImage() { const t = this.currentProductItem.querySelectorAll(this.opts.productImage); t.forEach(t => { this.currentColor[this.currentSize] === t.dataset.color ? (t.classList.add(this.classes.isActive), t.removeAttribute("tabindex"), t.setAttribute("aria-hidden", !1)) : (t.classList.remove(this.classes.isActive), t.setAttribute("tabindex", -1), t.setAttribute("aria-hidden", !0)) }) } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const e = WATCH6.UTILS; e.RESPONSIVE; WATCH6.Contrast = class { constructor(t = container, e) { var i = { el: t, defaultBtn: ".type-default", contrastBtn: ".type-contrast", cookieName: "highContrastMode", featureHide: "is-feature-hide" }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.bindEvents()) } setElements() { this.defaultBtn = this.el.querySelector(this.opts.defaultBtn), this.defaultBtnTitle = this.defaultBtn.getAttribute("title").trim(), this.contrastBtn = this.el.querySelector(this.opts.contrastBtn), this.contrastBtnTitle = this.contrastBtn.getAttribute("title").trim(), this.cookieName = this.opts.cookieName } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), this.defaultBtn && this.defaultBtn.addEventListener("click", this.onClickDefaultBtn.bind(this)), this.contrastBtn && this.contrastBtn.addEventListener("click", this.onClickContrastBtn.bind(this)) } onLoadHandler() { this.activeContrast() } onClickDefaultBtn(t) { t.preventDefault(), e.setCookie(this.cookieName, "0", 1), this.activeContrast() } onClickContrastBtn(t) { t.preventDefault(), e.setCookie(this.cookieName, "1", 1), this.activeContrast() } activeContrast() { var t = e.getCookie(this.cookieName); null != t && t.length && "1" == t ? (document.documentElement.classList.add("color_yb"), this.contrastBtn.setAttribute("title", this.contrastBtnTitle + " selected"), this.defaultBtn.setAttribute("title", this.defaultBtnTitle)) : (document.documentElement.classList.remove("color_yb"), this.contrastBtn.setAttribute("title", this.contrastBtnTitle), this.defaultBtn.setAttribute("title", this.defaultBtnTitle + " selected")) } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.Glass = class { constructor(t = container, e) { this.opts = { el: t, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el, videoParentElement: this.opts.el })) } }, this.videoPlayer.build() } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.KeyVisual = class { constructor(t = container, e) { var i = { el: t, classes: { isUseBuy: "is-use-buy", isUseRegist: "is-use-regist", isUseOrder: "is-use-order", isUseWhere: "is-use-where", isUseOff: "is-use-off" }, featureHide: "is-feature-hide" }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || this.initLayout() } initLayout() { this.el.classList.remove(this.classes.isUseBuy), this.el.classList.remove(this.classes.isUseRegist), this.el.classList.remove(this.classes.isUseOrder), this.el.classList.remove(this.classes.isUseWhere), this.el.classList.remove(this.classes.isUseOff), "undefined" == typeof __WATCH_USE_KV_CTA || null == __WATCH_USE_KV_CTA || null == __WATCH_USE_KV_CTA || "" == __WATCH_USE_KV_CTA || "buy-now" == __WATCH_USE_KV_CTA ? this.el.classList.add(this.classes.isUseBuy) : "pre-order" == __WATCH_USE_KV_CTA ? this.el.classList.add(this.classes.isUseOrder) : "pre-registration" == __WATCH_USE_KV_CTA ? this.el.classList.add(this.classes.isUseRegist) : "where-to-buy" == __WATCH_USE_KV_CTA ? this.el.classList.add(this.classes.isUseWhere) : "where-to-buy" == __WATCH_USE_KV_CTA && this.el.classList.add(this.classes.isUseOff) } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.Monitoring = class { constructor(t = container, e) { this.opts = { el: t, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el })) } }, this.videoPlayer.build() } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const a = WATCH6.UTILS, t = a.RESPONSIVE; WATCH6.Overview = class { constructor(t = container, e) { var i = { el: t, rootEl: ".wearable-watch", layerEl: ".wearable-watch-overview__popup", featureList: ".wearable-watch-overview__list", featureItem: ".wearable-watch-overview__list-item", featureCta: ".wearable-watch-overview__list-cta", featureBtn: ".wearable-watch-overview__list-btn", featureContent: ".wearable-watch-overview__popup-content", featurePlayer: ".wearable-watch-overview__player", storyEl: ".wearable-watch-overview__story", storySlide: ".wearable-watch-overview__story-item", indicatorList: ".wearable-watch-overview__indicator-list", indicatorItem: ".wearable-watch-overview__indicator-item", indicatorText: ".indicator__text", controlHiddenEl: ".blind", navigationPrev: ".navigation__cta-prev", navigationNext: ".navigation__cta-next", storyItemController: ".story-item__btn", storyItem: ".story-item__image", storyItemCta: ".story-item__cta", closeBtn: ".cm-layer__btn-close", videoElement: ".video__container", startImage: ".video__start-frame", endImage: ".video__end-frame", featureHide: "is-feature-hide", initSlide: 0, infiniteRolling: !0, transitionDuration: 400, widthResizeStart: null, heightResizeStart: null, classes: { loaded: "loaded", ended: "ended", paused: "paused", playing: "playing", isHover: "is-hover", isActive: "is-active", isPaused: "is-paused", isHeight: "is-height" }, thumbnailTagging: { "sleep-tracking": { play: "gwatch6:highlights:overview:movi-play:sleep-tracking-video", pause: "gwatch6:highlights:overview:movi-pause:sleep-tracking-video" }, health: { play: "gwatch6:highlights:overview:movi-play:health-video", pause: "gwatch6:highlights:overview:movi-pause:health-video" }, display: { play: "gwatch6:highlights:overview:movi-play:display-video", pause: "gwatch6:highlights:overview:movi-pause:display-video" } }, popupTagging: { "sleep-tracking": { play: "gwatch6:highlights:overview^lypu:movi-play:sleep-tracking-video", pause: "gwatch6:highlights:overview^lypu:movi-pause:sleep-tracking-video" }, health: { play: "gwatch6:highlights:overview^lypu:movi-play:health-video", pause: "gwatch6:highlights:overview^lypu:movi-pause:health-video" }, display: { play: "gwatch6:highlights:overview^lypu:movi-play:display-video", pause: "gwatch6:highlights:overview^lypu:movi-pause:display-video" } } }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.initLayout(), this.buildSwiper(), this.buildLayer(), this.buildVideoPlayer(), this.bindEvents()) } initOpts() { this.winWidth = a.winSize().w, this.winHeight = a.winSize().h, this.currentDevice = !1, this.prevDevice = null, this.initValues() } initValues() { this.selectedIndex = -1 } initLayout() { this.storySlide.forEach((t, e) => { t.setAttribute("aria-hidden", "true"), t.setAttribute("tabindex", "-1"), t.querySelector(this.opts.storyItemCta).setAttribute("aria-hidden", "true"), t.querySelector(this.opts.storyItemCta).setAttribute("tabindex", "-1"), t.querySelector(this.opts.storyItemController) && (t.querySelector(this.opts.storyItemController).setAttribute("aria-hidden", "true"), t.querySelector(this.opts.storyItemController).setAttribute("tabindex", "-1")), this.opts.initSlide === e && (t.setAttribute("aria-hidden", "false"), t.removeAttribute("tabindex"), t.querySelector(this.opts.storyItemCta).setAttribute("aria-hidden", "false"), t.querySelector(this.opts.storyItemCta).removeAttribute("tabindex"), t.querySelector(this.opts.storyItemController) && (t.querySelector(this.opts.storyItemController).setAttribute("aria-hidden", "false"), t.querySelector(this.opts.storyItemController).removeAttribute("tabindex"))) }), this.indicatorItem.forEach(t => { "tablist" === this.indicatorList.getAttribute("role") && t.setAttribute("aria-selected", "false") }), this.opts.infiniteRolling || (0 === this.opts.initSlide && (this.navigationPrev.style.display = "none"), this.opts.initSlide === this.storySlide.length - 1 && (this.navigationNext.style.display = "none")) } setElements() { this.rootEl = document.querySelector(this.opts.rootEl), this.layerEl = this.el.querySelector(this.opts.layerEl), this.videoElement = this.el.querySelectorAll(this.opts.videoElement), this.featureList = this.el.querySelector(this.opts.featureList), this.featureContent = this.el.querySelector(this.opts.featureContent), this.featureCta = this.featureList.querySelectorAll(this.opts.featureCta), this.featureBtn = this.featureList.querySelectorAll(this.opts.featureBtn), this.featurePlayer = this.featureList.querySelectorAll(this.opts.videoElement), this.storyEl = this.el.querySelector(this.opts.storyEl), this.storyItem = this.el.querySelectorAll(this.opts.storyItem), this.storySlide = this.el.querySelectorAll(this.opts.storySlide), this.storyPlayer = this.storyEl.querySelectorAll(this.opts.videoElement), this.indicatorList = this.el.querySelector(this.opts.indicatorList), this.indicatorItem = this.indicatorList.querySelectorAll(this.opts.indicatorItem), this.navigationPrev = this.el.querySelector(this.opts.navigationPrev), this.navigationNext = this.el.querySelector(this.opts.navigationNext), this.closeBtn = this.el.querySelector(this.opts.closeBtn), this.storyItemController = this.storyEl.querySelectorAll(this.opts.storyItemController) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), this.featureCta.forEach((t, e) => { t.addEventListener("click", this.handleLayerOpen.bind(this, e)) }), this.indicatorItem.forEach((t, e) => { t.addEventListener("click", this.select.bind(this, e)) }), this.navigationPrev.addEventListener("click", this.handleNavigationPrev.bind(this)), this.navigationNext.addEventListener("click", this.handleNavigationNext.bind(this)), this.storySlide.forEach((t, e) => { -1 < t.querySelector(this.opts.storyItemCta).getAttribute("href").indexOf("#") && t.querySelector(this.opts.storyItemCta).addEventListener("click", this.onStoryItemCtaClickEvent.bind(this)) }) } unBindEvents() { this.indicatorItem.forEach((t, e) => { t.removeAllEventListeners("click") }), this.featureBtn.forEach(t => { t.removeAllEventListeners("click") }), this.storyItemController.forEach(t => { t.removeAllEventListeners("click") }) } onStoryItemCtaClickEvent(t) { t.preventDefault(); const e = t.target; t = e.getAttribute("href"); const i = this.rootEl.querySelector(t); t = i.dataset.rectTop || a.getOffset(i).top - a.getNavHeight(); $(this.layerEl).trigger("closeLayer", !1), $("html, body").animate({ scrollTop: t }, { duration: 1e3 }); const s = i.querySelector(".wearable-watch-common__headline") ? i.querySelector(".wearable-watch-common__headline") : i.querySelector(".wearable-watch-common__sub-headline"); s && (s.setAttribute("tabindex", "0"), s.focus(), s.addEventListener("focusout", () => { s.removeAttribute("tabindex") })) } handleNavigationPrev() { let t = this.storySwiper.instance.realIndex - 1; t < 0 && (t = this.storySlide.length - 1), this.storySwiper.instance.slideToLoop(t) } handleNavigationNext() { let t = this.storySwiper.instance.realIndex + 1; t >= this.storySlide.length && (t = 0), this.storySwiper.instance.slideToLoop(t) } handleLayerOpen(t, e) { e.preventDefault(), this.opts.initSlide = t } updateControlText(t, e) { const i = t.querySelector(this.opts.controlHiddenEl); t = e ? this.globalText.play : this.globalText.stop; i.innerHTML = t } select(t, e = !1, i) { var s = this.selectedIndex; s === t && !e || (this.animReqId && (a.cancelAFrame.call(window, this.animReqId), this.animReqId = null), -1 < s && (this.indicatorItem[s].classList.contains(this.classes.isActive) && (this.indicatorItem[s].classList.remove(this.classes.isActive), this.indicatorItem[s].removeAttribute("title")), "tablist" === this.role ? this.indicatorItem[s].setAttribute("aria-selected", "false") : this.indicatorItem[s].removeAttribute("title")), t < 0 ? this.selectedIndex = t : (this.selectedIndex = t, this.indicatorItem[this.selectedIndex].classList.contains(this.classes.isActive) || this.indicatorItem[this.selectedIndex].classList.add(this.classes.isActive), "tablist" === this.indicatorList.getAttribute("role") ? this.indicatorItem[this.selectedIndex].setAttribute("aria-selected", "true") : this.indicatorItem[this.selectedIndex].setAttribute("title", "selected"), this.storySwiper.instance.slideToLoop(this.selectedIndex))) } updateImageLayout() { this.featureContent.clientWidth / this.featureContent.clientHeight <= .56 ? this.layerEl.classList.add(this.classes.isHeight) : this.layerEl.classList.remove(this.classes.isHeight) } onResizeHandler() { a.winSize().w === this.winWidth && a.winSize().h === this.winHeight || (this.winWidth = a.winSize().w, this.winHeight = a.winSize().h, null != this.opts.widthResizeStart && null != this.opts.heightResizeStart || (this.opts.widthResizeStart = this.winWidth, this.opts.heightResizeStart = this.winHeight, this.resizeAnimateFunc())), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150) } resizeAnimateFunc() { this.setWidthLayout(), this.setHeightLayout(), this.resizeRequestFrame = a.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.widthResizeStart = null, this.opts.heightResizeStart = null, a.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() { this.select(this.selectedIndex, !0), this.featurePlayer.forEach(t => { this.videoPlayer.change(t) }), "block" === this.layerEl.style.display && this.storyPlayer.forEach(t => { this.videoPlayer.change(t) }) } setWidthLayout() { this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.updateImageLayout(), this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } setHeightLayout() { this.updateImageLayout() } buildVideoPlayer() { this.videoPlayer = { instance: [], load: e => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(t => { t.onLoad(e) }) }, reset: e => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(t => { t.onReset(e) }) }, play: e => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(t => { t.onPlay(e) }) }, change: e => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(t => { t.onChange(e) }) }, build: () => { this.videoPlayer.instance.length || this.videoElement.forEach((t, e) => { var i = t.closest(this.opts.featureItem) ? this.opts.featureItem : null; this.videoPlayer.instance.push(new WATCH6.VideoPlayer(t, { sectionElement: this.opts.el, videoParentElement: i, on: { updateController: t => { const e = t.el; var i = e.dataset.tagging, t = t.playState ? "pause" : "play", s = e.classList.contains(this.opts.featureBtn.split(".")[1]) ? this.opts.thumbnailTagging : e.classList.contains(this.opts.storyItemController.split(".")[1]) ? this.opts.popupTagging : ""; e.setAttribute("data-omni", s[i][t]), e.setAttribute("ga-la", s[i][t]) } } })) }) } }, this.videoPlayer.build() } buildSwiper() { this.storySwiper = { instance: null, options: { a11y: !1, loop: this.opts.infiniteRolling, speed: this.opts.transitionDuration, effect: "fade", touchMoveStopPropagation: !0, fadeEffect: { crossFade: !0 }, initialSlide: this.opts.initSlide }, slideChange: () => { const i = this.storySwiper.instance.realIndex, t = this.storySlide[i], e = t.querySelector(this.opts.videoElement); this.select(i), e && (e.classList.contains(this.classes.loaded) ? a.isLowNetwork() || this.videoPlayer.play(e) : this.videoPlayer.load(e)), this.storySlide.forEach((t, e) => { e !== i && (e = t.querySelector(this.opts.videoElement)) && this.videoPlayer.reset(e) }) }, slideChangeTransitionStart: () => { if (null !== this.storySwiper.instance) { const e = Array.from(this.storySwiper.instance.slides); var t = this.storySwiper.instance.realIndex; this.storySlide[t]; e.forEach((t, e) => { t.setAttribute("aria-hidden", "true"), t.setAttribute("tabindex", "-1"), t.querySelector(this.opts.storyItemCta).setAttribute("aria-hidden", "true"), t.querySelector(this.opts.storyItemCta).setAttribute("tabindex", "-1"), t.querySelector(this.opts.storyItemController) && (t.querySelector(this.opts.storyItemController).setAttribute("aria-hidden", "true"), t.querySelector(this.opts.storyItemController).setAttribute("tabindex", "-1")), t.classList.contains("swiper-slide-active") && (t.setAttribute("aria-hidden", "false"), t.removeAttribute("tabindex"), t.querySelector(this.opts.storyItemCta).setAttribute("aria-hidden", "false"), t.querySelector(this.opts.storyItemCta).removeAttribute("tabindex"), t.querySelector(this.opts.storyItemController) && (t.querySelector(this.opts.storyItemController).setAttribute("aria-hidden", "false"), t.querySelector(this.opts.storyItemController).removeAttribute("tabindex"))) }) } }, destroy: () => { null !== this.storySwiper.instance && (this.storySwiper.instance.destroy(), this.storySwiper.instance = null) }, build: () => { null === this.storySwiper.instance && (this.storySwiper.options.on = { slideChange: this.storySwiper.slideChange.bind(this), slideChangeTransitionStart: this.storySwiper.slideChangeTransitionStart.bind(this) }, this.storySwiper.options.initialSlide = this.opts.initSlide, this.storySwiper.instance = new Swiper(this.opts.storyEl, this.storySwiper.options), this.storySwiper.slideChangeTransitionStart()) } } } buildLayer() { this.layer = { instance: null, build: () => { null === this.layer.instance && (this.layer.instance = new HiveLayer(this.opts.layerEl, { effect: "default", on: { layerOpenBefore: () => { this.updateImageLayout(); const t = this.storySlide[this.opts.initSlide]; var e = t.querySelector(this.opts.videoElement); this.storySwiper.build(), this.select(this.opts.initSlide), e && this.videoPlayer.load(e), this.featurePlayer.forEach(t => { this.videoPlayer.reset(t) }) }, layerOpenAfter: () => { const t = this.storySlide[this.opts.initSlide]; var e = t.querySelector(this.opts.storyItemController), i = t.querySelector(this.opts.storyItemCta); const s = e || i; window.setTimeout(() => { s.focus() }, 50) }, layerCloseBefore: () => { this.featureBtn.forEach(t => { t.classList.contains(this.classes.isPaused) && t.classList.remove(this.classes.isPaused) }) }, layerCloseAfter: () => { this.storySwiper.destroy(), this.initValues(), this.indicatorItem.forEach(t => { t.classList.remove(this.classes.isActive), t.removeAttribute("title") }), this.storySlide.forEach(t => { t = t.querySelector(this.opts.videoElement); this.videoPlayer.reset(t) }) } } })) } }, this.layer.build() } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.Progress = class { constructor(t = container, e) { this.opts = { el: t, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el, visiblePoint: .5, videoParentElement: this.opts.el })) } }, this.videoPlayer.build() } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const a = WATCH6.UTILS, t = a.RESPONSIVE; WATCH6.Screen = class { constructor(t = container, e) { var i = { el: t, trackElement: ".wearable-watch-screen__track", fixedElement: ".wearable-watch-screen__fixed", textElement: ".wearable-watch-screen__text", videoElement: ".video__container", videoController: ".video__controller", featureHide: "is-feature-hide", classes: { scene01: "scene01", scene02: "scene02", brokenFixedAnimation: "broken-fixed-animation" }, widthResizeStart: null, heightResizeStart: null }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.bindEvents(), this.buildVideoPlayer(), this.onLoadHandler()) } setElements() { this.trackElement = this.el.querySelector(this.opts.trackElement), this.fixedElement = this.el.querySelector(this.opts.fixedElement), this.textElement = this.el.querySelector(this.opts.textElement), this.videoElement = this.el.querySelector(this.opts.videoElement), this.videoController = this.el.querySelector(this.opts.videoController), this.video = this.videoElement.querySelector("video"), this.video.querySelectorAll("source").forEach(t => { document.documentElement.classList.contains("safari") && -1 < t.getAttribute("type").indexOf("webm") && t.remove() }) } initOpts() { this.getCurrentDevice(), this.winWidth = a.winSize().w, this.winHeight = a.winSize().h, this.currentAnimation = null, this.prevAnimation = null, this.scroller = null, this.brokenScroller = null, this.lastScrollY = 0, this.animationPlay = !1 } initStyle() { ANIUTIL.removeClass({ targetElement: this.el, classList: [this.classes.brokenFixedAnimation, this.classes.scene01, this.classes.scene02] }) } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener("resize", this.onResizeHandler.bind(this)), window.addEventListener("scroll", this.onScrollHandler.bind(this)), window.addEventListener("orientationchange", this.onOrientationChange.bind(this)) } getCurrentDevice() { this.winWidth = a.winSize().w, this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile" } buildVideoPlayer() { this.videoPlayer = { instance: null, play: () => { null !== this.videoPlayer.instance && this.videoPlayer.instance.onPlay(this.videoElement) }, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el, videoParentElement: this.opts.el, on: { updatePlayState: t => { this.videoController || a.isFullAnimationBrokenFixed() || t && this.el.classList.add(this.classes.scene02) }, updateController: t => { !this.videoController || t.playState && !a.isFullAnimationBrokenFixed() && (a.isLowNetwork() ? (this.el.classList.contains(this.classes.scene02) && this.el.classList.remove(this.classes.scene02), window.setTimeout(() => { this.el.classList.add(this.classes.scene02) }, 10)) : this.el.classList.add(this.classes.scene02)) } } })) } }, this.videoPlayer.build() } onLoadHandler() { this.setWidthLayout(), this.setHeightLayout(), this.onScrollHandler(), window.removeEventListener("load", this.onLoadHandler.bind(this)) } onScrollHandler() { const t = this; var e = window.scrollY; this.lastScrollY, a.getScroll().bottom, a.getOffset(this.el).top; null !== this.scroller && this.scroller.trackAnimation(function () { this.progress <= 0 && t.el.classList.remove(t.classes.scene02), !t.videoController && a.isLowNetwork() && 40 < this.progress && t.videoPlayer.play() }), null !== this.brokenScroller && this.brokenScroller.activeAnimation(), this.lastScrollY = e } onResizeHandler() { a.winSize().w === this.winWidth && a.winSize().h === this.winHeight || (this.winWidth = a.winSize().w, this.winHeight = a.winSize().h, null != this.opts.widthResizeStart && null != this.opts.heightResizeStart || (this.opts.widthResizeStart = this.winWidth, this.opts.heightResizeStart = this.winHeight, this.resizeAnimateFunc())), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150) } resizeAnimateFunc() { this.setWidthLayout(), this.setHeightLayout(), this.resizeRequestFrame = a.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.widthResizeStart = null, this.opts.heightResizeStart = null, a.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() { this.destroyScroller(), this.destroyBrokenScroller(), this.initStyle(), a.isFullAnimationBrokenFixed() ? this.setBrokenScroller() : this.setScroller() } onOrientationChange() { setTimeout(() => { this.destroyScroller(), this.destroyBrokenScroller(), this.initStyle(), a.isFullAnimationBrokenFixed() ? this.setBrokenScroller() : this.setScroller() }, 150) } setWidthLayout() { this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } setHeightLayout() { var t = window.innerWidth, e = window.innerHeight, i = !!a.isTouchDevice && window.matchMedia("(orientation: landscape)").matches, s = !!a.isTouchDevice && !window.matchMedia("(orientation: landscape)").matches; this.currentAnimation = s && e / t < 1.5 || i || e < 700 ? "broken" : "use", this.currentAnimation === this.prevAnimation || a.isTouchDevice || this.onResponsiveChange(), this.prevAnimation = this.currentAnimation } setScroller() { this.destroyScroller(), null === this.scroller && (this.scroller = SCROLLER({ trackElement: this.trackElement, useFixed: !1 })) } setBrokenScroller() { null === this.brokenScroller && (this.brokenScroller = SCROLLER({ trackElement: this.trackElement, activeElement: this.el, activeClass: this.classes.brokenFixedAnimation })) } destroyScroller() { null !== this.scroller && (this.scroller.destroy(!0), this.scroller = null) } destroyBrokenScroller() { null != this.brokenScroller && (this.brokenScroller.destroy(!0), this.brokenScroller = null) } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.Snap = class { constructor(t = container, e) { this.opts = { el: t, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el })) } }, this.videoPlayer.build() } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.Standalone = class { constructor(t = container, e) { this.opts = { el: t, tabEl: ".wearable-watch-standalone__tab", tabList: ".wearable-watch-standalone__tab-list", tabButtons: ".wearable-watch-standalone__tab-cta", tabPanel: ".wearable-watch-standalone__tab-panels", tabPanels: ".wearable-watch-standalone__tab-panel", featureHide: "is-feature-hide" }, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildTab()) } setElements() { this.tabEl = this.el.querySelector(this.opts.tabEl) } buildTab() { this.tab = { instance: null, build: () => { null === this.tab.instance && (this.tab.instance = new WATCH6.Tab(this.tabEl, { tabEl: this.opts.tabEl, tabList: this.opts.tabList, tabButtons: this.opts.tabButtons, tabPanel: this.opts.tabPanel, tabPanels: this.opts.tabPanels })) } }, this.tab.build() } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const a = WATCH6.UTILS, t = a.RESPONSIVE; WATCH6.Tab = class { constructor(t = container, e) { var i = { el: t, tabEl: ".wearable-watch__tab", tabList: ".wearable-watch__tab-list", tabButtons: ".wearable-watch__tab-cta", tabPanel: ".wearable-watch__tab-panels", tabPanels: ".wearable-watch__tab-panel", classes: { isActive: "is-active" }, resizeStart: null }; this.opts = a.def(i, e || {}), this.classes = i.classes, this.el = t, this.init() } init() { null !== this.el && (this.setElements(), this.initOpts(), this.bindEvents()) } setElements() { this.tabEl = this.el, this.tabList = this.tabEl.querySelector(this.opts.tabList), this.tabButtons = a.convertArray(this.tabList.querySelectorAll(this.opts.tabButtons)), this.tabPanel = this.el.querySelector(this.opts.tabPanel), this.tabPanels = a.convertArray(this.tabPanel.querySelectorAll(this.opts.tabPanels)) } initOpts() { this.currentIndex = 0, this.currentDevice = !1, this.prevDevice = null } initLayout() { this.tabButtons.forEach(function (t, e) { const i = this.tabPanels[e]; this.currentIndex == e ? (t.classList.contains(this.classes.isActive) || t.classList.add(this.classes.isActive), i.classList.contains(this.classes.isActive) || i.classList.add(this.classes.isActive), t.setAttribute("aria-selected", !0), a.offAccessibility(i)) : (t.classList.contains(this.classes.isActive) && t.classList.remove(this.classes.isActive), i.classList.contains(this.classes.isActive) && i.classList.remove(this.classes.isActive), t.setAttribute("aria-selected", !1), a.onAccessibility(i)) }) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), this.tabButtons.forEach(t => { t.addEventListener("click", this.onClickTabButton.bind(this)) }) } unBindEvents() { } onClickTabButton(t) { t = t.currentTarget; const s = this.tabButtons.indexOf(t); s != this.currentIndex && (this.tabButtons.forEach((t, e) => { const i = this.tabPanels[e]; s == e ? (t.classList.contains(this.classes.isActive) || t.classList.add(this.classes.isActive), i.classList.contains(this.classes.isActive) || i.classList.add(this.classes.isActive), t.setAttribute("aria-selected", !0), a.offAccessibility(i)) : (t.classList.contains(this.classes.isActive) && t.classList.remove(this.classes.isActive), i.classList.contains(this.classes.isActive) && i.classList.remove(this.classes.isActive), t.setAttribute("aria-selected", !1), a.onAccessibility(i)) }), this.currentIndex = s) } onResizeHandler() { a.winSize().w !== this.winWidth && (this.winWidth = a.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.resizeRequestFrame = a.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, a.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() { } setLayout() { this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.Train = class { constructor(t = container, e) { this.opts = { el: t, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el, videoParentElement: this.opts.el })) } }, this.videoPlayer.build() } } }(), function () { "use strict"; WATCH6.UTILS.RESPONSIVE; new class { constructor(t = container) { this.opts = { el: t, wrapEl: "#wrap", keyVisualEl: ".wearable-watch-kv", overviewEl: ".wearable-watch-overview", screenEl: ".wearable-watch-screen", bandEl: ".wearable-watch-band", glassEl: ".wearable-watch-glass", trainEl: ".wearable-watch-train", snapEl: ".wearable-watch-snap-remote", standaloneEl: ".wearable-watch-standalone", monitoringEl: ".wearable-watch-monitoring", batteryEl: ".wearable-watch-battery-processor", progressEl: ".wearable-watch-progress", compareEl: ".wearable-watch-compare", contrastEl: ".cp-high-contrast", subNavEl: "#subnav" }, this.el = document.querySelector(t), this.init() } init() { null !== this.el && (this.buildComponents(), initialize.init()) } buildComponents() { this.imageLoader = new WATCH6.ImageLoader(this.opts.el, { loadOption: [{ resolution: 1920, attribute: "data-src-pc" }, { resolution: 1080, attribute: "data-src-tablet" }, { resolution: 767, attribute: "data-src-mobile" }] }), this.videoLoader = new WATCH6.VideoLoader(this.opts.el, { notLoadElement: [".cm-layer"], loadOption: [{ resolution: 1920, attribute: "data-media-pc" }, { resolution: 767, attribute: "data-media-mo" }] }), this.keyVisual = new WATCH6.KeyVisual(this.opts.keyVisualEl), this.overview = new WATCH6.Overview(this.opts.overviewEl), this.screen = new WATCH6.Screen(this.opts.screenEl), this.standalone = new WATCH6.Standalone(this.opts.standaloneEl), this.monitoring = new WATCH6.Monitoring(this.opts.monitoringEl), this.band = new WATCH6.Band(this.opts.bandEl), this.glass = new WATCH6.Glass(this.opts.glassEl), this.train = new WATCH6.Train(this.opts.trainEl), this.snap = new WATCH6.Snap(this.opts.snapEl), this.compare = new WATCH6.Compare(this.opts.compareEl, { on: { updateImageLoader: t => { this.imageLoader.setResponsiveImage(t) } } }), this.contrast = new WATCH6.Contrast(this.opts.contrastEl), this.batteryEl = new WATCH6.Battery(this.opts.batteryEl), this.progressEl = new WATCH6.Progress(this.opts.progressEl), window.addEventListener("load", () => { setTimeout(() => { window.GALAXY && window.GALAXY.isGalaxy && (this.subNav = new WATCH6.SubNav(this.opts.subNavEl)) }, 5) }) } }(".wearable-watch") }(); });
Samsung Galaxy Watch6 (2024)
Top Articles
Latest Posts
Article information

Author: Chrissy Homenick

Last Updated:

Views: 6324

Rating: 4.3 / 5 (74 voted)

Reviews: 89% of readers found this page helpful

Author information

Name: Chrissy Homenick

Birthday: 2001-10-22

Address: 611 Kuhn Oval, Feltonbury, NY 02783-3818

Phone: +96619177651654

Job: Mining Representative

Hobby: amateur radio, Sculling, Knife making, Gardening, Watching movies, Gunsmithing, Video gaming

Introduction: My name is Chrissy Homenick, I am a tender, funny, determined, tender, glorious, fancy, enthusiastic person who loves writing and wants to share my knowledge and understanding with you.