Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (2024)

World on my Watch

Galaxy Watch6 Series

BUY NOW

PRE-REGISTER

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (1)

*Image simulated & colors subject to availability.

Movie player Layer

Look your best. Get more done. That's the dream.

We're making it a reality with our largest watch screen yet, custom exercise routines and sleep tracking — finished with a timeless aesthetic.1, 2

Start your everyday wellness journey with a refined classic

Expansive Screen
Rotating Bezel
Exercise
Sleep Tracking
Customizable Aesthetics

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (4)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (5)

A zoomed-in view of Galaxy Watch6 Classic and its rotating bezel getting thinner and the screen getting larger, highlighting the larger display.

More room to be more productive Go to Expansive Screen

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (7)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (8)

A zoomed-in side view of Galaxy Watch6 Classic with the app being displayed changing as the bezel rotates.

Smooth, intuitive scrolling. Any way you spin it Go to Rotating Bezel

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (10)

Track your workouts to maximize results Go to Exercise

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (12)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (13)

Galaxy Watch6 Classic can be seen displaying the 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.

Understand your habits to improve your sleep Go to Sleep Tracking

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (15)

Create a look tailored to your style Go to Customizable Aesthetics

Expansive Screen Rotating Bezel Exercise Sleep Tracking Customizable Aesthetics

Close Popup

More screen. Thinner bezel

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (17)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (18)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (19)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (20)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (21)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (22)

More screen.
Thinner bezel

Experience enhanced visuals and clear motion graphics on a 20% larger display. The 15% thinner bezel and increased screen size create an aesthetically perfect display-to-bezel ratio — and extra space for every tap and swipe.3, 4

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (23)

Sapphire Crystal glass.
A clear difference in durability

Designed to withstand daily wear and tear. The display of Galaxy Watch6 Classic is expertly crafted with Sapphire Crystal glass to protect its timeless beauty. And the finishing has IP68 and 5ATM ratings, so you can keep your watch on through all your adventures.5, 6

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (24)

Take the improved
rotating bezel for a spin1

Embrace the time-defying style of a classic. Inspired by the iconic design of diving watches, the slim spinning bezel on Galaxy Watch6 Classic brings history into the future with more fluid, responsive scrolling for intuitive interaction with the screen. And the circular frame is crafted with sleek stainless steel to elevate every glance at the clock.

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (25)

Go from boardroom to
weight room in a snap

Swapping bands is as seamless as pressing the quick release button. A convenient guide lets you install the new band with ease — just press gently until you hear a click. Transition from work to workout or back again without breaking a sweat.7

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (26)

Don't fret even when it's wet

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (27)

Defy the dangers of dust

18% faster CPU speed

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (28)

All-day battery

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (29)

More processing power to do more with every minute

Get more done in less time with Galaxy Watch6 Classic's upgraded processor. The 18% faster CPU speed and quick app launch time keep you productive and efficient throughout the day.1

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (30)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (31)

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

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.8, 9, 10

Up to 45 %

charged in 30 min

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (32)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (33)

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

Hands-on
shooting, hands-free

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (34)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (35)

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

Pair your watch with Galaxy Z Fold5 to capture the healthy you up close or from a distance. Galaxy Z Fold5'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.11, 12

Begin with
your watch,
follow up on your phone

Team up with your Galaxy Z Fold5 to monitor your progress seamlessly. Use your Galaxy Watch6 Classic track your workouts and health stats. Then sync your watch with the Samsung Health app to graph your activities on a larger screen, including your daily steps, workout intensity, heart rate and more.1

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (36)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (37)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (38)

Daily steps icon and progress bar can be seen. The number of steps go up from 824 to 3,456 and the progress bar advances accordingly. On the right is the Galaxy Z Fold5 displaying the Samsung Health app with the detailed data.

Power to do more in
your day

Keep your day running smoothly, even when you've left your phone behind. You can make calls, send texts and stream music directly from your Galaxy Watch6 Classic. Or locate your smartphone using the Find My Phone feature on your watch.11, 13, 14, 15, 16

Call Text Find My Phone

International Roaming keeps your world within reach

Galaxy Watch6 Classic can be seen on the wrist of a person wearing a blazer, displaying the Settings screen with the Mobile data and Data roaming feature enabled.

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (42)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (43)

Whether exploring a new city, hiking in the mountains or lounging on a beach, international roaming keeps you connected to loved ones, or help you call for reservations and even access important information.13, 17

Samsung Wallet is always on hand

Access Samsung Wallet right from your Galaxy Watch6 Classic. Make payments, ride public transit, scan membership cards and more. You can even store non-payment items like digital IDs, tickets and keys, to lighten your load and empty out your pockets.18

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (44)

Wake up to our most advanced sleep tracking

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (45)

Get detailed sleep tracking with improved analysis and deeper insights to enhance the quality of your sleep. And now you can access Sleep Coaching on your Galaxy Watch6 Classic to build better sleeping habits. Get a good night's sleep when wearing your watch to bed by switching to the Fabric Band. Be sure to put your watch on sleep mode to change the PPG sensor's green LED to invisible infrared LED, dim the display brightness and mute notifications.19, 20, 21, 22, 23, 24, 25

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.

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (46)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (47)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (48)

Better together

Fabric Band

Light and comfortable Optimized for sleep

Learn more

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 and heart rhythm while you wear your Galaxy Watch6 Classic, and will alert you if your heart rate is too high or too low. It will also send you a notification if it detects an irregular heart rhythm, along with a prompt to take an ECG to examine your heart rhythm in more detail.27, 28, 29

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (51)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (52)

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.

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (53)

Keep a watchful eye on your blood pressure

Stay informed and stay healthy. Let the watch take charge in measuring and tracking your daily blood pressure so you can focus on making sound choices for a balanced lifestyle.30, 31, 32, 33

Clock your goals with BIA

Keep an eye on your body composition with detailed Bioelectrical Impedance Analysis (BIA). Set your target weight, body fat, muscle mass and more, then set up an optimized program to help you achieve your health and wellness goals.34, 35, 36

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (54)

Safety features that can be a real lifesaver

Fall Detection knows if you've suffered a fall and sends an Emergency SOS if you need help. When help arrives, you can access your medical info from the lock screen with a touch of a button to aid emergency services.37, 38, 39, 40

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (55)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (56)

Meet your Personalized HR Zone

Your watch can assess your fitness capacity to determine your personal HR Zone. If there's a specific HR zone you want to hit, you can set the goal manually. As you workout you'll be alerted when you enter your target HR Zone, whether that's fat burning, cardio or high-intensity training. Move out of the zone, and it'll alert you too — letting you adjust your effort accordingly.41

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (57)

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (58)

5 different curved lines that form a U-shape can be seen. Each is in different shade of color from yellow to red. A white dot placed in the middle of each line moves along the lines as a same-colored heart and heart rate number indicating the Personalized HR Zone changes. GUI of Personalized HR Zone can be seen, with the function button enabled and 5 HR Zones. With the increasing heart rate from 90 to 114, 125, 158 and 174, the selected zone changes from 1 to 5, respectively.

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (59)

Exercise tracking - Chart your growth to peak performance

Gain valuable insights into your progress and achievements with Galaxy Watch6 Classic. Track over 90 different workouts, or you can even create your own custom workout, to log your daily activity and monitor your progress. You can activate auto detect for select workouts like running, walking, and now, cycling to go straight from warm up mode to beast mode.42, 43, 44

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (60)

Change plans?
Change bands.
Change faces

Create your own bespoke look for Galaxy Watch6 Classic. Choose from a wide collection of bands to take your look from rugged to classy, depending on your mood. Customize your watch face with a sleek design or complications to quickly access your favorite apps.45

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (61)

Switch, upgrade and trade.
It's all easy

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

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (62)

It's time to find your Watch

  • Galaxy Watch6 Classic

    Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (63)

    Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (64)

    Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (65)

    Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (66)

    Learn More

    • Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (67) Display Sapphire Crystal
    • Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (68) Screen Size 37.3mm | 33.3mm
    • Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (69) Fast Charge9, 10 Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (70)
    • Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (71) Infrared
      Temperature
      Sensor
      Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (72)
    • Material Stainless Steel
    • Battery
      (typical)8
      425mAh |
      300mAh
    • Sleep
      Tracking
      Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (73)
    • Body
      Composition
      Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (74)
    • Route
      Workout /
      Track Back
      Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (75)
    • Durability 5ATM+IP68/
      MIL-STD-810H
    • Size 47mm | 43mm
    • Weight 59.0g | 52.0g
  • Galaxy Watch6

    Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (76)

    Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (77)

    Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (78)

    Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (79)

    Learn More

    • Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (80) Display Sapphire Crystal
    • Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (81) Screen Size 37.3mm | 33.3mm
    • Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (82) Fast Charge9, 10 Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (83)
    • Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (84) Infrared
      Temperature
      Sensor
      Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (85)
    • Material Armor
      Aluminum
    • Battery
      (typical)8
      425mAh |
      300mAh
    • Sleep
      Tracking
      Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (86)
    • Body
      Composition
      Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (87)
    • Route
      Workout /
      Track Back
      Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (88)
    • Durability 5ATM+IP68/
      MIL-STD-810H
    • Size 44mm | 40mm
    • Weight 33.3g | 28.7g
  • Galaxy Watch4 Classic

    Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (89)

    Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (90)

    Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (91)

    Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (92)

    Buy Now

    Learn More

    • Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (93) Display Corning®
      Gorilla® Glass
      with DX+
    • Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (94) Screen Size 34.6mm | 30.4mm
    • Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (95) Fast Charge50 Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (96)
    • Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (97) Infrared
      Temperature
      Sensor
      Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (98)
    • Material Stainless Steel
    • Battery
      (typical)50
      361mAh |
      247mAh
    • Sleep
      Tracking
      Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (99)
    • Body
      Composition
      Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (100)
    • Route
      workout /
      Track back
      Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (101)
    • Durability 5ATM+IP68/
      MIL-STD-810G
    • Size 46mm | 42mm
    • Weight 52.0g | 46.5g
  • Galaxy Watch5 Pro

    Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (102)

    Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (103)

    Buy Now

    Learn More

    • Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (104) Display Sapphire Crystal
    • Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (105) Screen Size 34.6mm
    • Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (106) Fast Charge51 Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (107)
    • Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (108) Infrared
      Temperature
      Sensor
      Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (109)
    • Material Titanium
    • Battery
      (typical)52
      590mAh
    • Sleep
      Tracking
      Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (110)
    • Body
      Composition
      Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (111)
    • Route
      Workout /
      Track Back
      Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (112)
    • Durability 5ATM+IP68/
      MIL-STD-810H
    • Size 45mm
    • Weight 46.5g

Join the Flip side

Go to galaxy Z flip5

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (113)

Unfold your world

Go to galaxy Z fold5

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (114)

Galaxy
Tab S9 | S9+ | S9
Ultra

Go to galaxy tab s9

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (115)

Galaxy Watch6

Go to galaxy watch6

Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (116)

C C

  1. Compared to Galaxy Watch4 Classic.
  2. The screen size comparison is based on Galaxy Watch6 Classic 43mm model.
  3. The screen size and bezel width comparisons are based on Galaxy Watch6 Classic 43mm model.
  4. Galaxy Watch6 Classic 43mm model display size is compared to that of Galaxy Watch4 Classic 42mm model.
  5. Galaxy Watch6 Classic 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 Classic 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. Availability of Watch bands may vary by country or region. Additional Watch bands are sold separately.
  8. Actual battery life may vary depending on network environment, usage patterns and other factors.
  9. Testing conducted by Samsung using pre-released version of Galaxy WatchX (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.
  10. Samsung 25W USB C Power Adapter (EP-TA800) sold separately.
  11. Galaxy Z Fold5 sold separately.
  12. 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.
  13. LTE connection required to use select features on Galaxy Watch6 Classic. LTE connectivity only available in LTE models.
  14. Bluetooth models must be paired with a compatible mobile device connected to a mobile network.
  15. Not all apps and services are compatible with Wear OS.
  16. Find My Phone is supported when Galaxy Watch in Wear OS is paired with a smartphone running Android 10 or above. To use this feature, the paired smartphone should be signed in to Samsung Account.
  17. Enabling International Roaming may result in roaming charges depending on your smartphone carrier's plan.
  18. The availability of Samsung Wallet and its features may vary by country or region.
  19. Requires Samsung Health app version 6.24 or later.
  20. Galaxy Watch6 Classic must be paired with a Samsung Galaxy smartphone with Android 10.0 and minimum 1.5GB Memory.
  21. 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.
  22. Sleep Coaching requires sleep data of at least 7 days, including 2 days off.
  23. Availability of blood oxygen level feature may vary by country or regions.
  24. Invisible LED is enabled when sleep mode is turned on.
  25. 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.
  26. 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.
  27. 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.
  28. Availability of Irregular Heart Rhythm Notification (IHRN) feature may vary by country or region. Due to country restrictions in obtaining approval/registration as a Software as a medical device (SaMD), it 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). Not intended to provide a notification on every episode of irregular rhythm suggestive of AFib and the absence of a notification is not intended to indicate no disease process is present. It is not intended for users with other known arrhythmias or users under 22 years old. Users should not interpret or take clinical action based on the predictions made without consultation of a qualified healthcare professional.
  29. 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.
  30. For accurate blood pressure readings, a calibration is required every 4 weeks by BP monitor & arm cuff. Requires a Galaxy smartphone running Android 7.0 or above.
  31. Availability of Blood pressure app may vary by country or region. Due to country restrictions in obtaining approval/registration as a Software as a medical device (SaMD), Blood pressure 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 use by people under 22 years old.
  32. 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.
  33. Measured blood pressure history can be reviewed within the Samsung Health Monitor app on a paired smartphone.
  34. Not intended for use in detection, diagnosis, treatment. Intended for general wellness and fitness purposes only.
  35. 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.
  36. Compatible smartphones and available features may vary by country/region, carrier or device.
  37. Galaxy Watch6 Classic must have the latest Wear OS version installed.
  38. Detect falls feature must be enabled on the Galaxy Wearable app on your Galaxy smartphone to use Fall Detection on the watch.
  39. Emergency call requires network connection or pairing with Galaxy smartphone.
  40. 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.
  41. To update the ranges of each HR zone when running based on cardiopulmonary capabilities, it is required to run outdoors for more than 10 minutes with constant speed of 4km/h or faster.
  42. Compatible smartphones and available features may vary by country/region, carrier or device.
  43. Auto detect workouts must be turned on in Settings. Auto detect is not available for all workouts.
  44. Only available on Galaxy Watch6 series and must be paired with a compatible mobile device.
  45. Availability of Watch bands may vary by country or region. Additional Watch bands are sold separately.
  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 Watch 5 (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.

");} else { $yvSlide.find("li:last > div").attr("role", "list").append('

' + yvThumbArray[i] + "

");} } var omniTxt = modelData + $yvSlidePagingOmni; $yvSlide.find("li").each(function (i) {var n = i * thumbLength;var title = yvTitleArr.slice(n, n + thumbLength).toString();$('' + pageTitle + " " + (i + 1) + ":" + title + "").appendTo($yvSlidePaging); }); $yvSlide.find("li").each(function () {if ($(this).find("> div .thumb").length < 2) { $(this).find("> div").removeAttr("role"); $(this).find("> div .thumb").removeAttr("role");} }); var meetSwipe = GALAXY.swipeAble; if (($html.hasClass("ie") || $html.hasClass("edge")) && $html.hasClass("rtl")) {meetSwipe = false; } var isArrow = false; var $prev = $yvWrap.find(".m_btn_type1-prev"); var $next = $yvWrap.find(".m_btn_type1-next"); $prev.on('click', function () {isArrow = true; }); $next.on('click', function () {isArrow = true; }); $yvSlide.xlider({swipe: meetSwipe,endless: true,arrows: [$yvWrap.find(".m_btn_type1-prev"), $yvWrap.find(".m_btn_type1-next")],paging: $yvSlidePaging,onMove: function onMove() { $yvSlideWrap.find("li").removeClass("view").removeAttr("aria-hidden tabindex"); $yvSlideWrap.removeClass("ie-error");},onChange: function onChange(idx, max) { if (idx == 0) {$next.removeClass('disabled');$prev.addClass('disabled');if (isArrow) { setTimeout(function () {$next.focus(); }, 300);} } else if (idx == max - 1) {$next.addClass('disabled');$prev.removeClass('disabled');if (isArrow) { setTimeout(function () {$prev.focus(); }, 300);} } else {$next.removeClass('disabled');$prev.removeClass('disabled'); } $yvSlideWrap.find("li").removeClass("view").removeAttr("aria-hidden tabindex"); $yvSlideWrap.removeClass("ie-error");},onChangeEnd: function onChangeEnd(i) { var select = $yvSlidePaging.data("btn-title"); sliderOmni.remove(); $yvSlideWrap.find(".xlider-current").removeClass("view").siblings().addClass("view").attr({"aria-hidden": "true",tabindex: -1 }); $yvSlidePaging.find("a").eq(i).attr("title", select).siblings().attr("title", ""); $yvSlideWrap.addClass("ie-error"); isArrow = false;} }); $yvWrap.off("mousedown.yv keydown.yv").on("mousedown.yv keydown.yv", ".slide-paging a, .arrow-wrap a", function (e) {sliderOmni.add(e, this); }); $yvSlide.find("li").each(function () {if ($(this).find(".thumb").length == 1) { $(this).removeAttr("role").find(".thumb").removeAttr("role");} });} else { $yvWrap.addClass("no-slide");} }; var yvLoad = function yvLoad() {// if (!yvLoaded && window.pageYOffset > 10) {yvLoaded = true;GALAXY.sizeMode && $yvSlide.find("img").each(function (i, img) { this.src = GALAXY.getImageSources($(img))[GALAXY.sizeMode]; img.src = img.getAttribute("data-media-s4"); if (GALAXY.sizeMode >= 3) {img.src = img.getAttribute("data-media-s4"); } else if (GALAXY.sizeMode <= 2) {img.src = img.getAttribute("data-media-s2"); }}); // } }; var yvSlideDestroy = function yvSlideDestroy() {yvThumbArray = [];$yvSlidePaging.html("");$yvSlide.removeAttr("style").xlider("remove");$yvSlide.html(yvSlideHtml);$yvSlide.attr("role", "list");$yvWrap.addClass("no-slide").addClass("set-youtube");yvLoaded = false;setTimeout(function () { yvLoad();}, 10); }; // quote slide var $quoteWrap = $('.quote-wrap'); var $quoteSlideWrap = $('.quote-slide'); var $quoteSlide = $quoteSlideWrap.find('.quote-list'); var $quoteSlidePaging = $quoteWrap.find('.slide-paging'); var $quoteSlidePagingOmni = $quoteSlidePaging.data('indicator-omni'); var quoteSlideHtml = $quoteSlide.html(); var quoteBoxArray = []; var quoteTitleArr = []; var quoteSlideInit = function () {if($quoteWrap.hasClass('no-slide')) $quoteWrap.removeClass('no-slide');var quateLength;if($('html').hasClass('s34')) { quateLength = ($quoteSlide.find('.quote-item').length > 3) ? true : false;}else if($('html').hasClass('s2')){ quateLength = ($quoteSlide.find('.quote-item').length > 2) ? true : false;}else { quateLength = ($quoteSlide.find('.quote-item').length > 2) ? true : false;}if(quateLength){ GALAXY.unResize(quoteListHeight); GALAXY.resize(quoteListHeight); $quoteSlide.find('.quote-item').each(function(i) {var thisHtml = $(this).html();quoteBoxArray.push(thisHtml);quoteTitleArr.push($(this).find('strong').text()); }); var pageTitle = $quoteSlidePaging.data('page-title'); $quoteSlide.attr('role','list'); $quoteSlide.html(''); for(var i=0; i

'+'

'+quoteBoxArray[i]+'

'+''); if(i%2 != 0)$quoteSlide.find('li:last-child').append('

'+quoteBoxArray[i]+'

');}else{ if(i%3 == 0)$quoteSlide.append('
  • '+'

    '+quoteBoxArray[i]+'

    '+'
  • '); if(i%3 != 0)$quoteSlide.find('li:last-child').append('

    '+quoteBoxArray[i]+'

    ');} } var omniTxt = modelName+$quoteSlidePagingOmni; $quoteSlide.find('li').each(function(i) {var quateContLength = $(this).find('.quote-item').lengthvar title = ($html.hasClass('s12')) ? quoteTitleArr.slice(i*2,(i*2)+quateContLength).toString() : quoteTitleArr.slice(i*3,(i*3)+quateContLength).toString();$('
  • '+pageTitle +' '+ (i+1) +':'+title + '
  • ').appendTo($quoteSlidePaging); }); var meetSwipe = GALAXY.swipeAble; if ($html.hasClass('ie') && $html.hasClass('rtl')) {meetSwipe = false; } if ($html.hasClass('edge') && $html.hasClass('rtl')) {meetSwipe = false; } $quoteSlide.xlider({swipe: meetSwipe,endless:true,arrows: [$quoteWrap.find('.m_btn_type1-prev'),$quoteWrap.find('.m_btn_type1-next')],paging: $quoteSlidePaging,onMove:function(){ $quoteSlideWrap.find('li').removeClass('view').removeAttr('aria-hidden tabindex'); $quoteSlideWrap.removeClass('ie-error');},onChange:function(){ $quoteSlideWrap.find('li').removeClass('view').removeAttr('aria-hidden tabindex'); $quoteSlideWrap.removeClass('ie-error');},onChangeEnd: function(i){ var select = $quoteSlidePaging.data('btn-title'); sliderOmni.remove(); $quoteSlideWrap.find('.xlider-current').removeClass('view').siblings().addClass('view').attr({'aria-hidden': 'true', 'tabindex': -1}); $quoteSlidePaging.find('li').eq(i).find('a').attr('title', select).closest('li').siblings().find('a').attr('title',''); $quoteSlideWrap.addClass('ie-error');} }); $quoteWrap.off('mousedown.quot keydown.quot').on('mousedown.quot keydown.quot', '.slide-paging a', function(e){sliderOmni.add(e, this); }); quoteListHeight(); } else { $quoteWrap.addClass('no-slide');} } var quoteListHeight = function() {var max = 0;$quoteSlide.find('li').css({height:''}).each(function() { max = Math.max($(this).outerHeight(), max);}).css({height: max}); } var quoteSlideDestroy = function () {quoteBoxArray = [];$quoteSlidePaging.html('');$quoteSlide.removeAttr('style').xlider('remove');$quoteSlide.html(quoteSlideHtml);$quoteSlide.attr('role','list');$quoteWrap.addClass('no-slide');$quoteWrap.addClass('set-quateSlide');$quoteSlide.find('li').css({height:''}).attr('role','presentation');setTimeout(function () { $quoteSlide.find('img').each(function () {$(this).attr('src', $(this).attr('data-media-s4')); });},10); } var changeSizeMode = GALAXY.sizeMode; GALAXY.load(function () {yvSlideDestroy();yvSlideInit();quoteSlideDestroy();quoteSlideInit(); }); GALAXY.resize(function () {var _sizeMode = GALAXY.sizeMode;if (_sizeMode != changeSizeMode) { changeSizeMode = _sizeMode; yvSlideDestroy(); yvSlideInit(); quoteSlideDestroy(); quoteSlideInit();} }); GALAXY.scroll(function () {// yvLoad(); }); // youtube modals var $opener = null; $(".youtube-wrap").on("click", "a", function (e) {e.preventDefault();$opener = $(this);GALAXY.vodPlayer.show(this.href, this, true);var $desc = $(this).parent().find(".youtube-desc").length ? $(this).parent().find(".youtube-desc").clone().removeAttr("aria-hidden") : null;var $ytModal = $(".m_layer-youtube.show");if ($("html").hasClass("safari") && $("html").hasClass("mobile")) $("html").css("height", "100vh");$ytModal.find("h3").empty().text("");$ytModal.find("iframe").attr("title", $(this).find("img").attr("alt"));setTimeout(function () { $ytModal.find(".c_btn_close-type1").focus();}, 1500);$ytModal.on("click", ".modals_close-area", function (e) { $ytModal.find(".c_btn_close_area button").trigger("click"); if ($("html").hasClass("safari") && $("html").hasClass("mobile")) $("html").css("height", "");});if ($desc != null) $ytModal.find(".m_video_view").append($desc);if (GALAXY.isGalaxy && $(this).parents(".youtube-slide").length) GALAXY.omniture($(this).attr("data-omni"));if ($("html").hasClass("dotcom")) { accessibillityLayers.on($("#teconsent, .QSIFeedbackButton")); $("html").addClass("is-modal-opened");} }); //wa $(document).on("click", ".m_layer-youtube .c_btn_close-type1", function (e) {if ($("html").hasClass("dotcom")) { accessibillityLayers.off($("#teconsent, .QSIFeedbackButton")); $("html").removeClass("is-modal-opened"); $('#QSIFeedbackButton-btn').css('width', '37px');}setTimeout(function () { $opener && $opener.blur();}, 500);setTimeout(function () { $opener && $opener.focus(); $opener = null;}, 2000); }); // overview nav $(".overview-nav a").on("click", function (e) {var scrollTimeout = null;var $target = $($(this).attr("href"));var duration = 750;if ($target.length) { GALAXY.setSmoothScrollTop($target.offset().top, duration, function () {clearTimeout(scrollTimeout);scrollTimeout = setTimeout(function () { $target.find("button").focus();}, 300); });}e.preventDefault(); });}();var overview = function overview(section, options) { var $section = $(section); if (!$section.length) return false; if ($('html').hasClass('ie') || $('html').hasClass('sL')) {var $texts = $section.find('.text-item');$texts.length && $texts.each(function (idx, e) { var $text = $(e); var io = new IntersectionObserver(function (entries) {entries.forEach(function (entry) { if (entry.isIntersecting) {$texts.removeClass('active');$text.addClass('active'); } else $text.removeClass('active');}); }, {rootMargin: "-45% 0px -45%" }); io.observe(e);});return false; } var defaultOptions = {horizontal: true }; options = Object.assign(defaultOptions, options); var $stickyInner; var $videoWrap; var $videoFigure; var $videoGradient; var $textList; var $text; var videoTypes; var videoPlayed; var gradientTimeout; var clipTimeout; var clipStatus; var clipDuration = 0.4; var videoDuration = 5; var loaded; var halfSize; var areaWidth; var areaHeight; var isMobileSize; var heightDiff; var textNumber; var prevIndex; var prevHeight; var isReady; var checkMobile = function checkMobile() {return $(window).width() < 768; }; var init = function init() {loaded = true;$stickyInner = $section.find(".sticky-inner");$videoWrap = $section.find(".content-wrap");$videoFigure = $section.find(".mask-video figure");$videoGradient = $videoFigure.find(".video-gradient");if (options.horizontal) $videoFigure.addClass("horizontal");videoTypes = ["webm", "mp4"];createVideo($videoFigure);$videoFigure.video.muted = true;$maskWrap = $section.find(".mask-wrap");$textList = $section.find(".text-list");$text = $section.find(".text-item");textNumber = $text.length - 1;prevIndex = -1;videoPlayed = false;isMobileSize = checkMobile();reset(); }; var createVideo = function createVideo($videoFigure) {var mobileTag = checkMobile() ? "_s" : "";var source = $videoFigure.data("src");var $videoTag;if (!$videoFigure.$video) { $videoTag = $(""); $videoTag.appendTo($videoFigure);} else { $videoTag = $videoFigure.find('video').html("");}videoTypes.forEach(function (type) { $("").attr({type: "video/".concat(type),src: "//images.samsung.com/in/smartphones/galaxy-z-fold4/videos/".concat(source + mobileTag, ".").concat(type) }).appendTo($videoTag);});$videoTag[0].load();$videoTag.one('canplay', function () { if ($videoTag[0].readyState > 2 && !isReady) {isReady = true;playVideo(); }});$section.find('.mask-video').css({ 'background-image': "url(//images.samsung.com/in/smartphones/galaxy-z-fold4/images/".concat(source + '_start' + mobileTag, ".jpg)")});$videoFigure.$video = $videoTag;$videoFigure.video = $videoTag[0]; }; var reset = function reset() {areaWidth = $stickyInner.width();areaHeight = $stickyInner.height();var sizeMobile = checkMobile();halfSize = options.horizontal ? areaWidth / 2 : areaHeight / 2;if (options.horizontal) $videoFigure.css({ transform: ''});var margin = sizeMobile ? 104 : 130;var textArea = $textList.height() + margin * 2;if (areaHeight - textArea < 0) { $textList.parent().addClass("overH"); heightDiff = areaHeight - textArea;} else { $textList.parent().removeClass("overH"); $textList.__css({transform: '' }); heightDiff = 0;}if (sizeMobile && !isMobileSize) { isMobileSize = true; videoPlayed = false; createVideo($videoFigure); _scroll(0.01); GALAXY.scrollTop > $section.offset().top && _scroll(0.99);} else if (!sizeMobile && isMobileSize) { isMobileSize = false; videoPlayed = false; createVideo($videoFigure); _scroll(0.01); GALAXY.scrollTop > $section.offset().top && _scroll(0.99);}if (options.horizontal) { var windowRatio = areaWidth / areaHeight; var videoWidth = $videoFigure.$video.width(); var videoHeight = checkMobile() ? videoWidth : $videoFigure.$video.height(); videoScale = windowRatio > videoWidth / videoHeight ? areaWidth / videoWidth : areaHeight / videoHeight; $videoFigure.css({transform: "scale(".concat(videoScale * 1.02, ")") });}if (areaHeight != prevHeight) { prevHeight = areaHeight; if (clipStatus) {if (clipStatus == 'open') { TweenMax.to($videoWrap, 0, {clip: "rect(0px, ".concat(areaWidth, "px, ").concat(areaHeight, "px, 0px)") });} else if (clipStatus == 'close') { TweenMax.to($videoWrap, 0, {clip: options.horizontal ? "rect(0px, ".concat(halfSize, "px, ").concat(areaHeight, "px, ").concat(halfSize, "px)") : "rect(".concat(halfSize, "px, ").concat(areaWidth, "px, ").concat(halfSize, "px, 0px)") });} }} }; var _scroll = function scroll(percent) {percent = percent || 0;var perText = stickyPercent(percent, 0, 0.7);var index = Math.floor(perText / (1 / textNumber));if (index != prevIndex) { prevIndex = index; $text.removeClass("active").eq(index).addClass("active");}heightDiff && $textList.__css({ y: heightDiff * perText});var perMask = stickyPercent(percent, 0.75, 0.25);if (perMask > 0) { open();} else { if (percent > 0 && percent < 1) close();} }; var open = function open() {if (clipStatus != 'open') { clipStatus = 'open'; clearTimeout(clipTimeout); clipTimeout = setTimeout(function () {if ($videoGradient) { $videoGradient.__css({opacity: 1 }); clearTimeout(gradientTimeout); gradientTimeout = setTimeout(function () {TweenMax.to($videoGradient, videoDuration * 0.1, { opacity: 0}); }, videoDuration * 0.9 * 1000);}TweenMax.to($videoWrap, clipDuration, { clip: "rect(0px, ".concat(areaWidth, "px, ").concat(areaHeight, "px, 0px)"), ease: Circ.easeOut, onStart: function onStart() {pauseVideo();playVideo(); }}); }, 0);} }; var close = function close() {if (clipStatus != 'close') { clipStatus = 'close'; clearTimeout(clipTimeout); clearTimeout(gradientTimeout); clipTimeout = setTimeout(function () {TweenMax.to($videoWrap, clipDuration, { clip: options.horizontal ? "rect(0px, ".concat(halfSize, "px, ").concat(areaHeight, "px, ").concat(halfSize, "px)") : "rect(".concat(halfSize, "px, ").concat(areaWidth, "px, ").concat(halfSize, "px, 0px)"), ease: Circ.easeOut, onComplete: function onComplete() {clipStatus == 'close' && videoPlayed && pauseVideo(); }}); }, 0);} }; var playVideo = function playVideo() {if (isReady) { videoPlayed = true; $videoFigure.video.currentTime = 0.01; $videoFigure.video.play();} }; var pauseVideo = function pauseVideo() {if (isReady) { videoPlayed = false; $videoFigure.video.pause(); $videoFigure.video.currentTime = 0.01;} }; if (!loaded && window.pageYOffset > 10) init(); GALAXY.scroll(function () {if (!loaded && window.pageYOffset > 10) init(); }); new scrollSticky("".concat(section, " .sticky-wrap"), {scroll: function scroll(percent) { loaded && _scroll(percent);},resize: function resize() { loaded && reset();} }); var isShift = false, isTab = false; $(window).on('keydown', function (e) {if (e.shiftKey) isShift = true;else isShift = false;if (e.keyCode == 9) isTab = true;else isTab = false; }); $(".f_cate-overview-wrap a").on("focus", function (e) {e.preventDefault();var itemIndex = $(".f_cate-overview-wrap .text-item").index($(this).parent());if (isTab) { clipStatus = 'open'; if ((!isShift && itemIndex == 0) || (isShift && itemIndex > $(".f_cate-overview-wrap .text-item").length - 2)) {$('html, body').stop().scrollTop($('.m_content-overview').offset().top); } setTimeout(function () {_scroll(0.15 * (itemIndex + 1)); }, 30);} });};var dropdown = function dropdown() { var $section = $(".dropdown-wrap"), $item_q, $item_a, $item_btns, $item_all; var omni = {open: ":expand:",close: ":collapse:" }; var asset = function asset() {$item_all = $section.find(".dropdown_item");$item_q = $section.find(".dropdown_item_q");$item_a = $section.find(".dropdown_item_a");$item_btns = $item_q.find("button"); }; var bindEvent = function bindEvent() {$item_btns.off("click").on("click", showContent); }; var init = function init() {if (!$section.length) { return false;}asset();bindEvent();return this; }; var showContent = function showContent() {var $item_btn = $(this);var curIndex = $item_btns.index(this);var $item = $item_btn.closest(".dropdown_item");var omniture = this.dataset.omni;var $content = $item_a.eq(curIndex);if (!$item.hasClass("is-open")) { $item.addClass("is-open"); $item_btn.attr({"aria-expanded": "true" }); $content.stop().slideDown(400);} else { $item.removeClass("is-open"); $item_btn.attr({"aria-expanded": "false" }); $content.stop().slideUp(400);}return false; }; init();};GALAXY.load(function () { dropdown();});var faveColorChip = function faveColorChip($colors, $images, onchange, oninit) { var $inputs = $colors.find("input:radio"); var colorTimeout; var _init = function _init() {if ($colors.find("input:checked").length == 0) { $inputs.each(function (i) {if (i == 0) { this.checked = true;} });}_setImage();if (oninit) { oninit();}$inputs.on("change focus", function () { var $this = $(this); clearTimeout(colorTimeout); colorTimeout = setTimeout(function () {_setImage();if (onchange) { onchange.call($this);} }, 0);}); }; var _setImage = function _setImage() {var currentColor = $inputs.filter(":checked").val();$images.each(function () { $(this).removeClass("active").attr('aria-hidden', true); if ($(this).data("color-name") === currentColor) {$(this).addClass("active").removeAttr('aria-hidden');; }}); }; GALAXY.load(function () {_init(); });};var Modals = function () { var $window = $(window); var $document = $(document); var $modals = $(''); var $baseContentsArea = $("#wrap"), $baseContentsClickable; var $ctrl = null; var $modalContent, saveScrollTop, isKeyDown = false; var isModalShow = false; var showroomUid = null; var showroomDataInit = false; var isHashCheck = false; var focusSetTime1; var focusSetTime2; var isShow = false; var showroom; var showroomColor = ""; var init = function init() {$("body").append($modals);setHashCheck();$document.on("click.openModal", ".o_modal_controller", openModel);$document.on("click.openShowroom", ".showroom-btn", openShowroom);return this; }; var openModel = function openModel() {if (!isShow) { $modals.removeClass("modal-showroom"); isShow = true; $ctrl = this; var target = this.dataset.target || this.getAttribute("href"); show(target);}return false; }; var openShowroom = function openShowroom() {if (!isShow) { isShow = true; $ctrl = this; var uid = this.dataset.target || this.getAttribute("href"); var $target = $(".showroom_modal").clone(); showroomColor = ""; if (this.dataset.target == "see-in-360") {showroomColor = $(this).closest("article").find("input:radio:checked").attr("value") || "burgundy"; } showroomUid = uid; if (showroomDataInit === false) {callShowroomPage(); } else {$target.find(".modal-contents.showroom-con").html($("#showroom-" + uid).html());$target.find(".modal-contents.showroom-con article").removeAttr("id"); } show($target);}return false; }; var callShowroomPage = function callShowroomPage() {$.ajax({ url: "./showroom/", dataType: "text"}).done(setupShowroom).fail(function () { window.location.href = "./showroom/#" + showroomUid;}); }; var setupShowroom = function setupShowroom(datas) {// Add Cssvar css = datas.split("/*!--GALAXY-SHOWROOM-CSS--*/")[1];css = css.split("/*!--//GALAXY-SHOWROOM-CSS--*/")[0];css = css.replace(/\.\/images\//g, "//images.samsung.com/in/smartphones/galaxy-z-fold4/showroom/images/");css = css.replace(/\.\.\/common\/images\//g, "/samsung/resources/global/galaxy-z-fold4/common/images/");$("", { attr: {type: "text/css" }, html: css, appendTo: "head"}); // Add Scriptvar js = datas.split("/*!--GALAXY-SHOWROOM-JS--*/")[1];js = js.split("/*!--//GALAXY-SHOWROOM-JS--*/")[0];var newscript = document.createElement("script");var insertScript = document.createTextNode(js);newscript.appendChild(insertScript);document.body.appendChild(newscript); // Add HTML Datavar store = datas.split("")[1];store = store.split("")[0];$("", { attr: {tabindex: -1,"aria-hidden": true,class: "overview-container" }, css: {display: "none" }, appendTo: "body", html: contReplace(store)}); // Add Htmlvar contents = datas.split("")[1];contents = contents.split("")[0];function contReplace(str) { var s = str || ""; s = s.replace(/\.\//g, "./showroom/"); s = s.replace(/\.\.\/common\/images\//g, "/samsung/resources/global/galaxy-z-fold4/common/images/"); s = s.replace(/\.\.\/showroom\/common\//g, "/samsung/resources/global/galaxy-z-fold4/common/"); s = s.replace(/:showroom:/g, ":highlights:popup^"); return s;}var $contents = $("", { html: contReplace(contents)});var $articles = $contents.find("article");var s = [];for (var i = 0, l = $articles.length, article; i < l; i++) { article = $articles[i]; s.push('");}$("body").append(s.join("\n "));showroom = new Showroom({ device: document.getElementById("contents").dataset.model, options: {tracker: false,progress: false,navigator: false,isShowroom: false }});showroom.init();$('.modal[role="dialog"]').find(".modal-contents.showroom-con").html($("#showroom-" + showroomUid).html());$('.modal[role="dialog"]').find(".modal-contents.showroom-con article").removeAttr("id");if ($modals.hasClass("show-end")) { var $loadingBar = $modals.find(".load-bar"); $loadingBar.get(0) && $loadingBar.remove(); showroom.renderFeature(showroomUid, showroomColor);}showroomDataInit = true; }; var btnShowSet; var btnShowSet2; var ieCloseBtnShow = function ieCloseBtnShow() {clearTimeout(btnShowSet);clearTimeout(btnShowSet2);if ($("html").hasClass("ie")) { if (!$(".modal_close").hasClass("close-show")) {$(".modal_close").addClass("close-show");$(".modal_close a").focus(); } else {$(".modal_close").addClass("close-show-end");$(".modal_close a").focus(); }} }; var setHashCheck = function setHashCheck() {var hash = location.href.split("#")[1];if (!hash) { return;}var checkHash = function checkHash() { var target = this.dataset.target || this.getAttribute("href"); var $this = $(this); if (hash == this.dataset.hash) {isShow = true;if ($(this).hasClass("showroom-btn")) { showroomColor = ""; if (this.dataset.target == "see-in-360") {showroomColor = $(this).closest("article").find("input:radio:checked").attr("value") || "burgundy"; } showroomUid = target; callShowroomPage(); show($(".showroom_modal").clone());} else { show(target);}if (!$this.data("hash-scroll-target")) { isHashCheck = $this.closest("section").offset().top; setTimeout(function () {GALAXY.setScrollTop($this.closest("section").offset().top); }, 100);} else { setTimeout(function () {var $scrollTarget = $("#" + $this.data("hash-scroll-target"));isHashCheck = $scrollTarget.get(0) ? $scrollTarget.offset().top : 0;$scrollTarget.get(0) && GALAXY.setScrollTop($scrollTarget.offset().top); }, 100);} }};$(".o_modal_controller").each(checkHash);$(".showroom-btn").each(checkHash); }; var show = function show(target) {$("#wrap").css("opacity", 0.99);var $target = $(target);var $loadingBar = $target.find(".load-bar");$loadingBar.get(0) && $loadingBar.find("span").text($loadingBar.data("load-txt")); // if ( !$target.length ) return false;isKeyDown = false;isModalShow = true;$modals.html($target.html());$modalContent = $modals.find(".modal_contents-area");!showroomUid && $modalContent.find("a, button").off(GALAXY.tracking).on("click", GALAXY.tracking);$modals.find(".modal_close > a, .modal_close > button, .modal_close-area").one("click.modalHide", hide).on("keydown.modalHide", hideKeyDown);if (!GALAXY.sizeMode) { var width = window.innerWidth; //document.documentElement.offsetWidth; GALAXY.sizeMode = width > 1440 ? 4 : width > 1023 ? 3 : width > 767 ? 2 : 1;}imageLoadCheck();Accessibillity.on();setTimeout(function () { $modalContent.addClass("modal_open"); shown();}, 0);$modals.addClass("show");saveScrollTop = GALAXY.scrollTop;GALAXY.noScroll.on();$("#wrap").css({ position: "fixed", width: "100%", paddingRight: GALAXY.scrollBarWidth, left: 0, right: 0, top: -saveScrollTop, "z-index": -1});$(".overview-bg").css({ opacity: 0});if (!GALAXY.isGalaxy) $(".floating-navigation__wrap").css({ paddingRight: GALAXY.scrollBarWidth});$(".footer").css({ "padding-top": saveScrollTop});clearTimeout(focusSetTime2);focusSetTime2 = setTimeout(function () { $modals.find(".modal_close a").focus();}, 1000); }; $modals.off("blur.modalClose").on("blur.modalClose", ".modal_close a", function () {$(this).removeClass("focus-visible"); }); var shown = function shown() {$modals.addClass("show-end");$("body").off("keydown.closeModals").on("keydown.closeModals", function (e) { if ($modals.hasClass("show-end") && (e.key == "Escape" || e.keyCode == 27)) {isKeyDown = true;hide(); }});if (showroomUid && showroomDataInit) { var $loadingBar = $modals.find(".load-bar"); $loadingBar.get(0) && $loadingBar.remove(); showroom.renderFeature(showroomUid, showroomColor);} }; var hide = function hide() {$("#wrap").css("opacity", "");$modals.removeClass("show");$window.off("resize.modals");Accessibillity.off();if ($("html").hasClass("ie")) $(".modal_close").removeClass("close-show close-show-end");if (isHashCheck !== false) { GALAXY.setScrollTop(isHashCheck);}isHashCheck = false; // showroomUid && showroom.destroyFeature();showroomUid = null;clearTimeout(focusSetTime1);$(".footer").css({ "padding-top": ""});GALAXY.noScroll.off();$("#wrap").css({ position: "", width: "", left: "", paddingRight: "", right: "", top: "", "z-index": ""});$(".overview-bg").css({ opacity: ""});if (!GALAXY.isGalaxy) $(".floating-navigation__wrap").css({ paddingRight: ""});saveScrollTop && GALAXY.setScrollTop(saveScrollTop);saveScrollTop = 0; focusSetTime1 = setTimeout(function () { $ctrl && $ctrl.focus(); $ctrl = null;}, 500);isShow = false;if (typeof window.modalCloseCallback == "function") { window.modalCloseCallback();}$modalContent = null;$modals.removeClass("show-end");$("body").off("keydown.closeModals");$modals.empty().addClass("modal-showroom");isKeyDown = false;isModalShow = false;return false; }; var hideKeyDown = function hideKeyDown(e) {if (e.keyCode == 13 || e.keyCode == 32) { isKeyDown = true;} }; var Accessibillity = {on: function on() { $baseContentsArea.attr({"aria-hidden": "true",tabindex: -1 }); $baseContentsClickable = $baseContentsArea.find("a,input,select,textarea,button,video,iframe, svg"); $baseContentsClickable.each(function () {var tabindex = $(this).attr("tabindex");if (tabindex !== undefined && tabindex !== null) { $(this).data("prev-tabindex", tabindex); $(this).attr("aria-hidden", "true");}$(this).attr("tabindex", "-1");$(this).attr("aria-hidden", "true"); }); if ($("html").hasClass("dotcom")) {$("html").addClass("is-modal-opened"); }},off: function off() { $baseContentsArea.removeAttr("aria-hidden tabindex"); $baseContentsClickable.each(function () {var tabindex = $(this).data("prev-tabindex");if (tabindex !== undefined && tabindex !== null) { $(this).attr("tabindex", tabindex); $(this).removeAttr("aria-hidden");} else { $(this).removeAttr("tabindex"); $(this).removeAttr("aria-hidden");} }); if ($("html").hasClass("dotcom")) {$("html").removeClass("is-modal-opened");$('#QSIFeedbackButton-btn').css('width', '37px'); }}, }; var imageLoadCheck = function imageLoadCheck() {var $images = $modals.find("img"),lens = $images.length,count = 0;var loadCheck = function loadCheck() { if (++count >= lens) {showImageLoadEnd(); }};$images.each(function (i, image) { var $image = $(image); GALAXY.loadImage($image, loadCheck); this.src = GALAXY.getImageSources($image)[GALAXY.sizeMode];});if (!lens) { showImageLoadEnd();} }; var showImageLoadEnd = function showImageLoadEnd() {}; var changeSizeMode = function changeSizeMode() {isModalShow && imageLoadCheck(); }; return {init: init,show: show,hide: hide,showEnd: showImageLoadEnd };}();GALAXY.load(function () { Modals.init();});var ecosystem = function ecosystem() { var $popupElem = $('.eco-popup'); var $openBtn = $('.btn-open'); var $closeBtn = $('.btn-close'); var $index = 0; var ecosystemElem = document.querySelector('.m_content-ecosystem'); var ecosystemBg = document.querySelector('.gradient-wrap'); var scrollValue = 0; var currentScroll = 0; var ratio = 0; var settingValue = 20; var heightRatio = 0.3; ecosystemBg.style.transform = 'translate3d(-50%,' + settingValue + '%,0)'; var ecoPopup = {open: function open(index) { ecoPopup.allClosed(); $popupElem.eq(index).stop().fadeIn(200); $popupElem.eq(index).find('.btn-close').focus();},closed: function closed(index) { $popupElem.eq(index).stop().fadeOut(200); $popupElem.eq(index).prev('.eco-item').find('.btn-open').focus();},focus: function focus() { $popupElem.stop().fadeOut(200); $openBtn.removeClass('open');},allClosed: function allClosed() { $popupElem.stop().fadeOut(200);},exClosed: function exClosed(e) { if ($popupElem.has(e.target).length === 0 && $(e.target)[0].classList[0] != 'btn-open') {ecoPopup.allClosed();$openBtn.removeClass('open'); }},router: function router() { switch ($(this)[0].classList[0]) {case 'btn-open': $index = $openBtn.index(this); if ($(this).attr('class').split(" ").indexOf('open') != -1) {$(this).removeClass('open');ecoPopup.closed($index); } else {$openBtn.removeClass('open');$(this).addClass('open');ecoPopup.open($index);checkViewPopup(ecosystemElem); } break;case 'btn-close': $index = $closeBtn.index(this); $openBtn.eq($index).removeClass('open'); ecoPopup.closed($index); break; }},parallax: function parallax() { scrollValue = pageYOffset; currentScroll = Math.max(0, pageYOffset - (ecosystemElem.offsetTop - ecosystemElem.offsetHeight * heightRatio)); ratio = currentScroll / ecosystemElem.offsetHeight; trasformValue = settingValue - settingValue * ratio; if (scrollValue > ecosystemElem.offsetTop - ecosystemElem.offsetHeight * heightRatio && scrollValue < ecosystemElem.offsetTop - ecosystemElem.offsetHeight * heightRatio + ecosystemElem.offsetHeight) {ecosystemBg.style.transform = 'translate3d(-50%,' + trasformValue + '%,0)'; } else if (scrollValue < ecosystemElem.offsetTop - ecosystemElem.offsetHeight * heightRatio) {ecosystemBg.style.transform = 'translate3d(-50%,' + settingValue + '%,0)'; } else if (scrollValue > ecosystemElem.offsetTop - ecosystemElem.offsetHeight * heightRatio + ecosystemElem.offsetHeight) {ecosystemBg.style.transform = 'translate3d(-50%,0%,0)'; }} }; var addEvent = function addEvent() {$openBtn.on({ 'click.eco': ecoPopup.router, 'focus.eco': ecoPopup.focus});$closeBtn.on('click.eco', ecoPopup.router);$(document).on({ 'click.eco': ecoPopup.exClosed, 'scroll.ecosystem': ecoPopup.parallax}); }; var checkViewPopup = function checkViewPopup(target) {var callback = function callback(entries, observer) { entries.forEach(function (entry) {if (!entry.isIntersecting) { $popupElem.stop().fadeOut(200); $openBtn.removeClass('open');} });};var io = new IntersectionObserver(callback);io.observe(target); }; var init = function init() {addEvent(); }; init();};GALAXY.load(function () { ecosystem();});var excellenceMotion = function excellenceMotion() { var excellence = document.querySelector(".m_content-excellence"); var excellenceList = document.querySelector(".excellence-list"); var excellenceListUl = excellenceList.querySelector("ul"); var excellenceMobileMove = excellenceList.querySelector(".mobile-move"); var excellenceTitle = excellence.querySelector(".f_header-type1"); var eCard = excellenceList.querySelectorAll(".e-card"); var _this; var totalW = 0; var excellenceSticky; var cloneList; var arrowClick = false; var blankDiv; var $subNavElem = $('#subnav'); var $dotNav = $('.floating-navigation'); var $stickyInner = $('.m_content-excellence .sticky-inner'); var $sitckyHeader = $('.m_content-excellence .sticky-inner>.f_header-type1'); var $eCard = $('.e-card'); var $subNavHt; var $stickyInnerHt; var $stickyTop; var $totalHt; var $eCardHt; var init = function init() {_this = this;_this.resize();stickyMotion();slideMotion(); }; // excellence sticky var stickyMotion = function stickyMotion() {var titleL = 0;var totalH = 0;var titleW = 0;var progress = 0;var _init = function _init() { cloneList = excellenceListUl.cloneNode(true); cloneList.setAttribute("aria-hidden", "true"); cloneList.classList.add("clone-list"); excellenceList.appendChild(cloneList); blankDiv = document.createElement("div"); blankDiv.classList.add("blank-div"); excellenceList.appendChild(blankDiv); _resize(); if (document.documentElement.classList.contains("ie11")) {excellence.querySelector(".sticky-inner").style.marginTop = -totalH / 2 + "px"; }};var _option = { align: "center", scroll: function scroll(percent) {_scroll(percent); }, resize: function resize() {_this.resize();_resize();_scroll(progress); }};var _scroll = function _scroll(scroll) { var p = stickyPercent(scroll, 0, 0.9); var distance; if (!document.documentElement.classList.contains("rtl")) {distance = titleL - (totalW - titleW) * p; } else {distance = -titleL + (totalW - titleW) * p; } if (!document.documentElement.classList.contains("s1")) _this.move(distance);};var _jump = function _jump(idx) { var percent = idx / eCard.length; var fakeDiv = (excellence.clientHeight - window.innerHeight) * percent; setTimeout(function () {window.scrollTo(0, excellence.offsetTop + fakeDiv); }, 300);};var _keyup = function _keyup(el, idx) { if (!document.documentElement.classList.contains("s1")) {excellence.querySelector(".sticky-inner").scrollLeft = 0;_jump(idx); }};var _resize = function _resize() { titleL = excellenceTitle.offsetLeft; titleW = excellenceTitle.clientWidth; totalH = excellenceTitle.clientHeight; if (!document.documentElement.classList.contains("dotcom")) {$subNavHt = $subNavElem.height(); } else {$subNavHt = $dotNav.height(); } $stickyInnerHt = $stickyInner.height(); $totalHt = $stickyInnerHt + 50; $stickyTop = $subNavHt; $eCardHt = $eCard.height(); if (innerHeight - $subNavHt > $totalHt) {$stickyInner.css('top', $stickyTop + 50 + 'px'); } else {$stickyInner.css('top', -totalH + $subNavHt + (innerHeight - $subNavHt - $eCardHt) / 2 + 'px'); }};_init();var selectPostion = function selectPostion() { if (innerHeight - $subNavHt > $totalHt) {Object.assign(_option, { align: 'top'}); } else {Object.assign(_option, { align: 'center'}); } excellenceSticky = new scrollSticky(excellence, _option);}; // excellenceSticky = new scrollSticky(excellence, _option);var positionCheck = function positionCheck() { isSticky = $('.m_content-excellence').find('.sticky-inner').css('position'); if (isSticky == 'static') {$('.m_content-excellence').addClass('_static'); }};var fucusMove = function fucusMove() { var $excellence = $('.m_content-excellence'), $stickyInner = $excellence.find('.sticky-inner'), $listWrap = $excellence.find('.mobile-move'), $cardElem = $listWrap.find('.e-card'); var $innerTop, $calcValue, $offsetTop, $currentIndex = 0, $result; var focusMove = {focus: function focus() { if ($(this).index() >= $cardElem.length - 2) {$currentIndex = $cardElem.length - 1; } else {$currentIndex = $(this).index(); } $cardWidth = parseInt(($excellence.height() + $innerTop) * 0.9 / ($cardElem.length + 2)); $calcValue = $cardWidth * $currentIndex; $offsetTop = $excellence.offset().top - $innerTop; $result = $offsetTop + $calcValue; window.scrollTo(0, $result);} }; var defaultSet = function defaultSet() {$innerTop = $stickyInner.css('top').split('px')[0] * 1; }; var bindEvent = function bindEvent() {$cardElem.on('keyup.focusMove', focusMove.focus); }; var init = function init() {defaultSet();bindEvent(); }; init();};GALAXY.load(function () { selectPostion(); positionCheck(); fucusMove();}); }; // excellence slide var slideMotion = function slideMotion() {var arrowWrap = excellenceList.querySelector(".excellence-arrow-wrap");var startP = window.innerWidth / 2 - eCard[0].clientWidth / 2;var endP = window.innerWidth / 2 - eCard[0].clientWidth / 2;var downStart = false;var totalIdx = 0;var slideMove = false;var _init = function _init() { _resize(); // _this.move(startP); var startEvent = ["mousedown", "touchstart"]; var moveEvent = ["mousemove", "touchmove"]; var endEvent = ["mouseup", "touchend"]; startEvent.forEach(function (__this) {excellenceListUl.addEventListener(__this, function (e) { _touch.start(e);}); }); moveEvent.forEach(function (__this) {document.addEventListener(__this, function (e) { _touch.move(e);}, { passive: false}); }); endEvent.forEach(function (__this) {document.addEventListener(__this, function (e) { _touch.end(e);}); }); arrowWrap.querySelector(".prev").addEventListener("click", function (e) {_prev(); }); arrowWrap.querySelector(".next").addEventListener("click", function (e) {_next(); }); window.addEventListener("resize", function (e) {_resize(); });};var _touch = { prevX: 0, prevY: 0, currentX: 0, moveX: startP, dragX: 0, endIdx: 0, start: function start(e) {if (!slideMove) { downStart = true; this.prevX = e.type != "touchstart" ? e.pageX : e.changedTouches[0].clientX; this.prevY = e.type != "touchstart" ? e.pageY : e.changedTouches[0].clientY;} }, move: function move(e) {if (downStart && !slideMove && document.documentElement.classList.contains("s1")) { this.currentX = e.type != "touchmove" ? e.pageX : e.changedTouches[0].clientX; this.currentY = e.type != "touchmove" ? e.pageY : e.changedTouches[0].clientY; if (!document.documentElement.classList.contains("rtl")) {this.dragX = Math.min(startP, this.moveX + (this.currentX - this.prevX));this.dragX = Math.max(-totalW + window.innerWidth - endP, this.dragX);if (this.prevX - this.currentX > 0) { this.endIdx = Math.floor((eCard[0].clientWidth - this.dragX) / eCard[0].clientWidth);} else { this.endIdx = Math.floor((window.innerWidth / 4 - this.dragX) / eCard[0].clientWidth);} } else {this.dragX = Math.max(-startP, this.moveX + (this.currentX - this.prevX));this.dragX = Math.min(totalW - window.innerWidth + endP, this.dragX);if (this.prevX - this.currentX < 0) { this.endIdx = Math.floor((eCard[0].clientWidth + this.dragX) / eCard[0].clientWidth);} else { this.endIdx = Math.floor((window.innerWidth / 4 + this.dragX) / eCard[0].clientWidth);} } if (this.currentX > this.currentY && Math.abs(this.prevY - this.currentY) <= 80) {e.preventDefault(); } e.preventDefault(); _this.move(this.dragX);} }, end: function end() {downStart = false;if (Math.abs(this.currentX) > 0) _jump(this.endIdx);this.prevX = 0;this.currentX = 0; }};var cardAriaHidden = function cardAriaHidden(idx) { eCard.forEach(function (i, index) {if (idx !== index) { i.setAttribute("aria-hidden", true); i.setAttribute("tabindex", -1); i.querySelectorAll("a").forEach(function (j) {j.setAttribute("aria-hidden", true);j.setAttribute("tabindex", -1); });} else { i.removeAttribute("aria-hidden"); i.removeAttribute("tabindex"); i.querySelectorAll("a").forEach(function (j) {j.removeAttribute("aria-hidden");j.removeAttribute("tabindex"); });}if (!document.documentElement.classList.contains("s1")) { i.removeAttribute("aria-hidden"); i.removeAttribute("tabindex"); i.querySelectorAll("a").forEach(function (j) {j.removeAttribute("aria-hidden");j.removeAttribute("tabindex"); });} });};var _jump = function _jump(idx) { if (!slideMove) {slideMove = true;var cardStart = eCard[idx].clientWidth * idx;var cardMargin;if (!document.documentElement.classList.contains("rtl")) { cardMargin = parseInt(window.getComputedStyle(eCard[eCard.length - 1]).getPropertyValue("margin-left"), 10) * idx;} else { cardMargin = parseInt(window.getComputedStyle(eCard[eCard.length - 1]).getPropertyValue("margin-right"), 10) * idx;}var cardCenter = window.innerWidth / 2 - eCard[idx].clientWidth / 2;var cardMove;var marginLeft = parseInt((innerWidth - $('.m_content-excellence .sticky-inner > .f_header-type1').width()) / 2);var cardPadding = $('.e-card').first().css('padding-left').split('px')[0];if (!document.documentElement.classList.contains("rtl")) { if (!document.documentElement.classList.contains("s1")) {cardMove = -cardStart - cardMargin + cardCenter; } else {if (idx == '0') { cardMove = parseInt(marginLeft - cardPadding);} else { cardMove = -cardStart - cardMargin + cardCenter;} }} else { if (!document.documentElement.classList.contains("s1")) {cardMove = cardStart + cardMargin - cardCenter; } else {if (idx == '0') { cardMove = -parseInt(marginLeft - cardPadding);} else { cardMove = cardStart + cardMargin - cardCenter;} }}if (idx === 0) { arrowWrap.querySelector(".prev").setAttribute('aria-hidden', 'true'); arrowWrap.querySelector(".prev").setAttribute('tabIndex', '-1'); arrowWrap.querySelector(".prev").classList.add('hide'); if (arrowClick) {setTimeout(function () { arrowWrap.querySelector(".next").focus();}, 300); }} else { arrowWrap.querySelector(".prev").setAttribute('aria-hidden', 'false'); arrowWrap.querySelector(".prev").removeAttribute('tabIndex'); arrowWrap.querySelector(".prev").classList.remove('hide');}if (idx >= eCard.length - 1) { arrowWrap.querySelector(".next").setAttribute('aria-hidden', 'true'); arrowWrap.querySelector(".next").setAttribute('tabIndex', '-1'); arrowWrap.querySelector(".next").classList.add('hide'); if (arrowClick) {setTimeout(function () { arrowWrap.querySelector(".prev").focus();}, 300); }} else { arrowWrap.querySelector(".next").setAttribute('aria-hidden', 'false'); arrowWrap.querySelector(".next").removeAttribute('tabIndex'); arrowWrap.querySelector(".next").classList.remove('hide');}var moveElement = !document.documentElement.classList.contains("s1") ? excellenceListUl : excellenceMobileMove;TweenMax.fromTo(moveElement, 0.5, { x: _touch.dragX}, { x: cardMove, ease: Quint.easeOut, onComplete: function onComplete() {_touch.moveX = cardMove;_touch.dragX = cardMove;totalIdx = idx;slideMove = false;arrowClick = false;cardAriaHidden(idx); }}); }};var _prev = function _prev() { arrowClick = true; totalIdx = Math.max(0, totalIdx - 1); _jump(totalIdx);};var _next = function _next() { arrowClick = true; totalIdx = Math.min(eCard.length - 1, totalIdx + 1); _jump(totalIdx);};var fakeDiv = document.createElement("div");var _resize = function _resize() { startP = window.innerWidth / 2 - eCard[0].clientWidth / 2; endP = window.innerWidth / 2 - eCard[0].clientWidth / 2; if (document.documentElement.classList.contains("s1")) _jump(totalIdx); blankDiv.style.height = "var(--snbh)"; var _snbh = blankDiv.clientHeight; if (window.innerHeight - cloneList.clientHeight - _snbh < 0) {// staticexcellence.classList.add("static"); } else {// stickyexcellence.classList.remove("static"); }};GALAXY.load(function () { _init();}); }; var move = function move(_move) {var moveElement = !document.documentElement.classList.contains("s1") ? excellenceListUl : excellenceMobileMove;moveElement.style.transform = "translate3d(" + _move + "px,0px,0px) rotate(0.001deg)"; }; var resize = function resize() {totalW = 0;eCard.forEach(function (_this) { var _marginLeft; if (!document.documentElement.classList.contains("rtl")) {_marginLeft = parseInt(window.getComputedStyle(_this).getPropertyValue("margin-left"), 10); } else {_marginLeft = parseInt(window.getComputedStyle(_this).getPropertyValue("margin-left"), 10); } totalW += _this.clientWidth + _marginLeft;});excellenceListUl.style.width = totalW + "px"; }; return {init: init,move: move,resize: resize };};excellenceMotion() && excellenceMotion().init();var faqList = function () { var $section = $(".m_faq-banner"), $item_q, $item_a, $item_btns, $item_cont_btns; var omni = {open: ":expand:",close: ":collapse:" }; var asset = function asset() {$item_q = $section.find(".faq_item_q");$item_a = $section.find(".faq_item_a");$item_btns = $item_q.find("button"), $item_cont_btns = $item_a.find("a.o_btn-type1"); }; var bindEvent = function bindEvent() {$item_btns.off("click").on("click", showContent);$item_cont_btns.off("click.focusMove").on("click.focusMove", moveSection); }; var init = function init() {if (!$section.length) { return false;}asset();bindEvent();return this; }; var moveSection = function moveSection() {var targetId = $(this).attr("href");var $target = $(targetId);var $title = 'H2|H3'.indexOf($target[0].tagName) > -1 ? $target : $target.find('h2,h3');setTimeout(function () { if ($title.find('button').length) {$title.find('button').focus(); } else {$title.attr({ tabindex: 0}).css({ outline: 0}).focus().one('blur', function () { $(this).removeAttr('tabindex').css('outline', '');}); } GALAXY.setScrollTop($target.offset().top);}, 100);return false; }; var showContent = function showContent() {var $item_btn = $(this);var curIndex = $item_btns.index(this);var $item = $item_btn.closest(".faq_item");var omniture = this.dataset.omni;if (!$item.hasClass("is-open")) { $item.addClass("is-open"); $item_btn.attr({"aria-expanded": "true","ga-la": omniture.replace(omni.open, omni.close),"data-omni": omniture.replace(omni.open, omni.close) }); $item_a.eq(curIndex).stop().slideDown(300);} else { $item.removeClass("is-open"); $item_btn.attr({"aria-expanded": "false","ga-la": omniture.replace(omni.close, omni.open),"data-omni": omniture.replace(omni.close, omni.open) }); $item_a.eq(curIndex).stop().slideUp(250);}GALAXY.omniture(omniture);return false; }; init();}();// ykvar designMotion = function designMotion() { var $section = $('.m_feature-design'); if (!$section.length || $('html').hasClass('sL')) return false; var $videoFigure; var $imgContainer; var $vidContainer; var videoTypes; var videoPlayed; var loaded; var isMobileSize; var canPlay; var motionReady = true; var motionDuration = 0.8; var checkMobile = function checkMobile() {return $(window).width() < 768; }; var init = function init() {loaded = true;$vidContainer = $section.find(".motion-vid");$imgContainer = $section.find(".motion-img");$videoFigure = $vidContainer.find("figure");videoTypes = ["webm", "mp4"];createVideo($videoFigure);$videoFigure.video.muted = true;videoPlayed = false;isMobileSize = checkMobile();var io1 = new IntersectionObserver(function (entries) { entries.forEach(function (entry) {if (entry.isIntersecting) on(); });}, { rootMargin: '0px 0px -10% 0px'});io1.observe($videoFigure[0]);var io2 = new IntersectionObserver(function (entries) { entries.forEach(function (entry) {if (!entry.isIntersecting) off(); });});io2.observe($section[0]);reset(); }; var on = function on() {if (motionReady) { motionReady = false; startMotion();} }; var off = function off() {if (GALAXY.scrollTop < $section.offset().top) { if (!motionReady) {motionReady = true;resetMotion(); }} }; var createVideo = function createVideo($videoFigure) {var mobileTag = checkMobile() ? "_s" : "";var source = $videoFigure.data("src");var $videoTag;if (!$videoFigure.$video) { $videoTag = $(""); $videoTag.appendTo($videoFigure);} else { $videoTag = $videoFigure.find('video').html("");}videoTypes.forEach(function (type) { $("").attr({type: "video/".concat(type),src: "".concat(source + mobileTag, ".").concat(type) }).appendTo($videoTag);});$videoTag[0].load();$videoTag.one('canplay', function () { if ($videoTag[0].readyState > 2 && !canPlay) {canPlay = true; }});$videoFigure.$video = $videoTag;$videoFigure.video = $videoTag[0]; }; var playVideo = function playVideo() {if (canPlay) { videoPlayed = true; $videoFigure.video.play();} }; var pauseVideo = function pauseVideo() {if (canPlay) { videoPlayed = false; $videoFigure.video.pause(); $videoFigure.video.currentTime = 0;} }; var reset = function reset() {var sizeMobile = checkMobile();if (sizeMobile && !isMobileSize) { isMobileSize = true; videoPlayed = false; createVideo($videoFigure);} else if (!sizeMobile && isMobileSize) { isMobileSize = false; videoPlayed = false; createVideo($videoFigure);}scroll(); }; var startMotion = function startMotion() {TweenMax.fromTo($imgContainer, motionDuration * 0.8, { opacity: 0}, { opacity: 1, delay: motionDuration * 0.2, ease: Power2.easeOut});TweenMax.fromTo($section.find('.motion-img.left figure'), motionDuration, { x: '50%', y: '-40%'}, { x: '0%', y: '0%', ease: Power2.easeOut, onComplete: function onComplete() {$vidContainer.addClass('show');$imgContainer.addClass('hide');playVideo(); }});TweenMax.fromTo($section.find('.motion-img.right figure'), motionDuration, { x: '-50%', y: '40%'}, { x: '0%', y: '0%', ease: Power2.easeOut}); }; var resetMotion = function resetMotion() {$vidContainer.removeClass('show');$imgContainer.removeClass('hide').__css({ opacity: 0});$section.find('.motion-img.left figure').__css({ x: '50%', y: '-40%'});$section.find('.motion-img.right figure').__css({ x: '-50%', y: '40%'});pauseVideo(); }; GALAXY.resize(function () {loaded && reset(); }); if (!loaded && window.pageYOffset > 10) init(); GALAXY.scroll(function () {if (!loaded && window.pageYOffset > 10) init(); });};var stickyStatic = function stickyStatic(section) { var sections = ['.m_feature-formfactor', '.m_feature-experience_120hz']; var minHeight = 360; var resizing; var decideMode = function decideMode() {sections.forEach(function (e, i) { var $section = $(e); if ($section.length) {if (GALAXY.areaHeight < minHeight) { $section.addClass('static-mode');} else { $section.removeClass('static-mode');} }}); }; decideMode(); GALAXY.resize(function () {clearTimeout(resizing);resizing = setTimeout(function () { decideMode();}, 50); }, true);};var videoWrap = function videoWrap() { var io = new IntersectionObserver(function (entries) {entries.forEach(function (entry) { if (!entry.isIntersecting) {$(entry.target).closest('article').trigger('invisible'); }}); }); var load = function load() {$('.m_video-wrap').each(function (i, wrap) { io.observe(wrap);}); }; GALAXY.load(function () {load(); });};var $colors = $(".m_feature-colors .color-item");var $colorImages = $(".m_feature-colors .colorset");new faveColorChip($colors, $colorImages);new scrollActive(".m_feature-multicamera .tag", 0.7);new videoWrap();GALAXY.load(function () { new stickyStatic(); new overview(".m_content-overview"); new designMotion();});// chloevar setStickyCopyHeight = function setStickyCopyHeight(_section, _at, _nextAt) { var $section = $('.m_content-' + _section); var $article = $section.find('.m_feature-' + _section + '_' + _at); var $nextArticle = $section.find('.m_feature-' + _section + '_' + _nextAt); var $copyWrap = $article.find('.copy-wrap'); var totalHeight = 0; if (!GALAXY.sizeMode) return false; if (GALAXY.sizeMode < 2 && !$('html').hasClass('ie')) {totalHeight = 0;$copyWrap.find('.sticky-height').each(function () { totalHeight = totalHeight + $(this).innerHeight();});$nextArticle.css('margin-top', -1 * totalHeight - 1); }};GALAXY.resize(function () { setStickyCopyHeight('experience', 'immersive-view', '120hz');});var immersiveSticky = function () { var $article = $(".m_feature-experience_immersive-view"); var isCheckIe = $('html').hasClass('ie'); var poniner = $article.offset().top; var minH = GALAXY.sizeMode > 2 ? 900 : GALAXY.sizeMode > 1 ? 900 : 500; var _resize = function _resize() {minH = GALAXY.sizeMode > 2 ? 900 : GALAXY.sizeMode > 1 ? 900 : 500;if (GALAXY.areaHeight < minH) { $article.removeClass('sticky-enter');} else { $article.addClass('sticky-enter'); _init();} }; var _init = function _init() {poniner = $article.offset().top;if (GALAXY.scrollTop > poniner - GALAXY.areaHeight / 2 + GALAXY.navHeight * 1.3) { $article.find('.content-wrap').addClass('enter-motion');} else { $article.find('.content-wrap').removeClass('enter-motion');} }; if (!isCheckIe) {GALAXY.load(_init);GALAXY.scroll(_resize);GALAXY.resize(_resize); }}();GALAXY.load(function () { var $experienceArticle = $('.m_feature-experience'); var $figure = $('.experience-video-wrap .experience-video'); $experienceArticle.off('visible invisible'); $experienceArticle.find('video').length && $experienceArticle.find('video').one('canplay', function () {$experienceArticle.trigger('videoOn'); }); var ob = new IntersectionObserver(function (entries, observer) {$.each(entries, function (i, entry) { if (entry.isIntersecting) {$experienceArticle.trigger('videoOn');setTimeout(function () { $(window).trigger('scroll');}, 50); } else {$experienceArticle.trigger('videoOff');setTimeout(function () { $(window).trigger('scroll');}, 50); }}); }); ob.observe($figure[0]);});//}).then(function(){GALAXY.initialize()})});

    "); return e.attr("data-swiper-slide-index") || e.attr("data-swiper-slide-index", t), i.cache && (this.virtual.cache[t] = e), e }, appendSlide: function (e) { if ("object" == typeof e && "length" in e) for (var t = 0; t < e.length; t += 1)e[t] && this.virtual.slides.push(e[t]); else this.virtual.slides.push(e); this.virtual.update(!0) }, prependSlide: function (e) { var s, a, t = this.activeIndex, i = t + 1, n = 1; if (Array.isArray(e)) { for (var r = 0; r < e.length; r += 1)e[r] && this.virtual.slides.unshift(e[r]); i = t + e.length, n = e.length } else this.virtual.slides.unshift(e); this.params.virtual.cache && (s = this.virtual.cache, a = {}, Object.keys(s).forEach(function (e) { var t = s[e], i = t.attr("data-swiper-slide-index"); i && t.attr("data-swiper-slide-index", parseInt(i, 10) + 1), a[parseInt(e, 10) + n] = t }), this.virtual.cache = a), this.virtual.update(!0), this.slideTo(i, 0) }, removeSlide: function (e) { if (null != e) { var t = this.activeIndex; if (Array.isArray(e)) for (var i = e.length - 1; 0 <= i; --i)this.virtual.slides.splice(e[i], 1), this.params.virtual.cache && delete this.virtual.cache[e[i]], e[i] < t && --t, t = Math.max(t, 0); else this.virtual.slides.splice(e, 1), this.params.virtual.cache && delete this.virtual.cache[e], e < t && --t, t = Math.max(t, 0); this.virtual.update(!0), this.slideTo(t, 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 () { X.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 e; this.params.virtual.enabled && (this.classNames.push(this.params.containerModifierClass + "virtual"), X.extend(this.params, e = { watchSlidesProgress: !0 }), X.extend(this.originalParams, e), this.params.initialSlide || this.virtual.update()) }, setTranslate: function () { this.params.virtual.enabled && this.virtual.update() } } }, K = { handle: function (e) { var t = this.rtlTranslate, i = (e = e.originalEvent ? e.originalEvent : e).keyCode || e.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 (!(e.shiftKey || e.altKey || e.ctrlKey || e.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 = U.innerWidth, n = U.innerHeight, r = this.$el.offset(); t && (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 || (e.preventDefault ? e.preventDefault() : e.returnValue = !1), (34 !== i && 39 !== i || t) && (33 !== i && 37 !== i || !t) || this.slideNext(), (33 !== i && 37 !== i || t) && (34 !== i && 39 !== i || !t) || this.slidePrev()) : (33 !== i && 34 !== i && 38 !== i && 40 !== i || (e.preventDefault ? e.preventDefault() : e.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 () { X.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, e = [], t = arguments.length; t--;)e[t] = arguments[t]; i = (i = 1 === e.length && e[0].constructor && e[0].constructor === Object ? e[0] : (n = e[0], e[1])) || {}, i = X.extend({}, i), n && !i.el && (i.el = n), d.call(this, i), Object.keys($).forEach(function (t) { Object.keys($[t]).forEach(function (e) { C.prototype[e] || (C.prototype[e] = $[t][e]) }) }); var s, a, n, r = this, o = (void 0 === r.modules && (r.modules = {}), Object.keys(r.modules).forEach(function (e) { var t, e = r.modules[e]; e.params && (t = Object.keys(e.params)[0], "object" == typeof (e = e.params[t]) && null !== e && t in i && "enabled" in e && (!0 === i[t] && (i[t] = { enabled: !0 }), "object" != typeof i[t] || "enabled" in i[t] || (i[t].enabled = !0), i[t] || (i[t] = { enabled: !1 }))) }), X.extend({}, N)), l = (r.useModulesParams(o), r.params = X.extend({}, o, Y, i), r.originalParams = X.extend({}, r.params), r.passedParams = X.extend({}, i), (r.$ = S)(r.params.el)); if (n = l[0]) return 1 < l.length ? (s = [], l.each(function (e, t) { t = X.extend({}, i, { el: t }); s.push(new C(t)) }), s) : (n.swiper = r, l.data("swiper", r), n && n.shadowRoot && n.shadowRoot.querySelector ? (a = S(n.shadowRoot.querySelector("." + r.params.wrapperClass))).children = function (e) { return l.children(e) } : a = l.children("." + r.params.wrapperClass), X.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: X.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: X.now(), lastEventBeforeSnap: void 0, recentWheelEvents: [], event: function () { return -1 < U.navigator.userAgent.indexOf("firefox") ? "DOMMouseScroll" : ((t = "onwheel" in c) || ((e = c.createElement("div")).setAttribute("onwheel", "return;"), t = "function" == typeof e.onwheel), (t = !t && c.implementation && c.implementation.hasFeature && !0 !== c.implementation.hasFeature("", "") ? c.implementation.hasFeature("Events.wheel", "3.0") : t) ? "wheel" : "mousewheel"); var e, t }, normalize: function (e) { var t = 0, i = 0, s = 0, a = 0; return "detail" in e && (i = e.detail), "wheelDelta" in e && (i = -e.wheelDelta / 120), "wheelDeltaY" in e && (i = -e.wheelDeltaY / 120), "wheelDeltaX" in e && (t = -e.wheelDeltaX / 120), "axis" in e && e.axis === e.HORIZONTAL_AXIS && (t = i, i = 0), s = 10 * t, a = 10 * i, "deltaY" in e && (a = e.deltaY), "deltaX" in e && (s = e.deltaX), e.shiftKey && !s && (s = a, a = 0), (s || a) && e.deltaMode && (1 === e.deltaMode ? (s *= 40, a *= 40) : (s *= 800, a *= 800)), { spinX: t = s && !t ? s < 1 ? -1 : 1 : t, 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 (e) { var t = e, i = this, s = i.params.mousewheel; if (i.params.cssMode && t.preventDefault(), !i.mouseEntered && !s.releaseOnEdges) return !0; t.originalEvent && (t = t.originalEvent); var a = 0, n = i.rtlTranslate ? -1 : 1, r = x.normalize(t); 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: X.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 = X.nextTick(function () { i.slideToClosest(i.params.speed, !0, void 0, h) }, 0)), i.mousewheel.timeout || (i.mousewheel.timeout = X.nextTick(function () { i.mousewheel.lastEventBeforeSnap = o, l.splice(0), i.slideToClosest(i.params.speed, !0, void 0, .5) }, 500))), r || i.emit("scroll", t), i.params.autoplay && i.params.autoplayDisableOnInteraction && i.autoplay.stop(), n === i.minTranslate() || n === i.maxTranslate()) return !0 } } else { s = { time: X.now(), delta: Math.abs(a), direction: Math.sign(a), raw: e }, 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 t.preventDefault ? t.preventDefault() : t.returnValue = !1, !1 }, animateSlider: function (e) { return 6 <= e.delta && X.now() - this.mousewheel.lastScrollTime < 60 || (e.direction < 0 ? this.isEnd && !this.params.loop || this.animating || (this.slideNext(), this.emit("scroll", e.raw)) : this.isBeginning && !this.params.loop || this.animating || (this.slidePrev(), this.emit("scroll", e.raw)), this.mousewheel.lastScrollTime = (new U.Date).getTime(), !1) }, releaseScroll: function (e) { var t = this.params.mousewheel; if (e.direction < 0) { if (this.isEnd && !this.params.loop && t.releaseOnEdges) return !0 } else if (this.isBeginning && !this.params.loop && t.releaseOnEdges) return !0; return !1 }, enable: function () { var e = x.event(); if (this.params.cssMode) return this.wrapperEl.removeEventListener(e, this.mousewheel.handle), !0; if (!e) return !1; if (this.mousewheel.enabled) return !1; var t = this.$el; return (t = "container" !== this.params.mousewheel.eventsTarged ? S(this.params.mousewheel.eventsTarged) : t).on("mouseenter", this.mousewheel.handleMouseEnter), t.on("mouseleave", this.mousewheel.handleMouseLeave), t.on(e, this.mousewheel.handle), this.mousewheel.enabled = !0 }, disable: function () { var e = x.event(); if (this.params.cssMode) return this.wrapperEl.addEventListener(e, this.mousewheel.handle), !0; if (!e) return !1; if (!this.mousewheel.enabled) return !1; var t = this.$el; return (t = "container" !== this.params.mousewheel.eventsTarged ? S(this.params.mousewheel.eventsTarged) : t).off(e, this.mousewheel.handle), !(this.mousewheel.enabled = !1) } }, L = { update: function () { var e, t, i = this.params.navigation; this.params.loop || (e = (t = this.navigation).$nextEl, (t = t.$prevEl) && 0 < t.length && (this.isBeginning ? t.addClass(i.disabledClass) : t.removeClass(i.disabledClass), t[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](i.lockClass)), e && 0 < e.length && (this.isEnd ? e.addClass(i.disabledClass) : e.removeClass(i.disabledClass), e[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](i.lockClass))) }, onPrevClick: function (e) { e.preventDefault(), this.isBeginning && !this.params.loop || this.slidePrev() }, onNextClick: function (e) { e.preventDefault(), this.isEnd && !this.params.loop || this.slideNext() }, init: function () { var e, t, i = this.params.navigation; (i.nextEl || i.prevEl) && (i.nextEl && (e = S(i.nextEl), this.params.uniqueNavElements && "string" == typeof i.nextEl && 1 < e.length && 1 === this.$el.find(i.nextEl).length && (e = this.$el.find(i.nextEl))), i.prevEl && (t = S(i.prevEl), this.params.uniqueNavElements && "string" == typeof i.prevEl && 1 < t.length && 1 === this.$el.find(i.prevEl).length && (t = this.$el.find(i.prevEl))), e && 0 < e.length && e.on("click", this.navigation.onNextClick), t && 0 < t.length && t.on("click", this.navigation.onPrevClick), X.extend(this.navigation, { $nextEl: e, nextEl: e && e[0], $prevEl: t, prevEl: t && t[0] })) }, destroy: function () { var e = this.navigation, t = e.$nextEl, e = e.$prevEl; t && t.length && (t.off("click", this.navigation.onNextClick), t.removeClass(this.params.navigation.disabledClass)), e && e.length && (e.off("click", this.navigation.onPrevClick), e.removeClass(this.params.navigation.disabledClass)) } }, A = { update: function () { var e = this.rtl, s = this.params.pagination; if (s.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length) { var a, t = (this.virtual && this.params.virtual.enabled ? this.virtual : this).slides.length, i = this.pagination.$el, n = this.params.loop ? Math.ceil((t - 2 * this.loopedSlides) / this.params.slidesPerGroup) : this.snapGrid.length; if (this.params.loop ? ((a = Math.ceil((this.activeIndex - this.loopedSlides) / this.params.slidesPerGroup)) > t - 1 - 2 * this.loopedSlides && (a -= t - 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 (e, t) { var t = S(t), i = t.index(); i === a && t.addClass(s.bulletActiveClass), s.dynamicBullets && (r <= i && i <= o && t.addClass(s.bulletActiveClass + "-main"), i === r && t.prev().addClass(s.bulletActiveClass + "-prev").prev().addClass(s.bulletActiveClass + "-prev-prev"), i === o && t.next().addClass(s.bulletActiveClass + "-next").next().addClass(s.bulletActiveClass + "-next-next")) }); else { var t = h.eq(a), d = t.index(); if (t.addClass(s.bulletActiveClass), s.dynamicBullets) { for (var t = 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 t.prev().addClass(s.bulletActiveClass + "-prev").prev().addClass(s.bulletActiveClass + "-prev-prev"), c.next().addClass(s.bulletActiveClass + "-next").next().addClass(s.bulletActiveClass + "-next-next"); else t.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), t = (this.pagination.bulletSize * d - this.pagination.bulletSize) / 2 - l * this.pagination.bulletSize, c = e ? "right" : "left", h.css(this.isHorizontal() ? c : "top", t + "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 = e = 1, "horizontal" == d ? e = l : c = l, i.find("." + s.progressbarFillClass).transform("translate3d(0,0,0) scaleX(" + e + ") 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 e = this.params.pagination; if (e.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length) { var t = (this.virtual && this.params.virtual.enabled ? this.virtual : this).slides.length, i = this.pagination.$el, s = ""; if ("bullets" === e.type) { for (var a = this.params.loop ? Math.ceil((t - 2 * this.loopedSlides) / this.params.slidesPerGroup) : this.snapGrid.length, n = 0; n < a; n += 1)e.renderBullet ? s += e.renderBullet.call(this, n, e.bulletClass) : s += "<" + e.bulletElement + ' class="' + e.bulletClass + '">' + e.bulletElement + ">"; i.html(s), this.pagination.bullets = i.find("." + e.bulletClass) } "fraction" === e.type && (s = e.renderFraction ? e.renderFraction.call(this, e.currentClass, e.totalClass) : ' / ', i.html(s)), "progressbar" === e.type && (s = e.renderProgressbar ? e.renderProgressbar.call(this, e.progressbarFillClass) : '', i.html(s)), "custom" !== e.type && this.emit("paginationRender", this.pagination.$el[0]) } }, init: function () { var e, t = this, i = t.params.pagination; i.el && 0 !== (e = S(i.el)).length && (t.params.uniqueNavElements && "string" == typeof i.el && 1 < e.length && 1 === t.$el.find(i.el).length && (e = t.$el.find(i.el)), "bullets" === i.type && i.clickable && e.addClass(i.clickableClass), e.addClass(i.modifierClass + i.type), "bullets" === i.type && i.dynamicBullets && (e.addClass("" + i.modifierClass + i.type + "-dynamic"), t.pagination.dynamicBulletIndex = 0, i.dynamicMainBullets < 1 && (i.dynamicMainBullets = 1)), "progressbar" === i.type && i.progressbarOpposite && e.addClass(i.progressbarOppositeClass), i.clickable && e.on("click", "." + i.bulletClass, function (e) { e.preventDefault(); e = S(this).index() * t.params.slidesPerGroup; t.params.loop && (e += t.loopedSlides), t.slideTo(e) }), X.extend(t.pagination, { $el: e, el: e[0] })) }, destroy: function () { var e, t = this.params.pagination; t.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length && ((e = this.pagination.$el).removeClass(t.hiddenClass), e.removeClass(t.modifierClass + t.type), this.pagination.bullets && this.pagination.bullets.removeClass(t.bulletActiveClass), t.clickable && e.off("click", "." + t.bulletClass)) } }, k = { setTranslate: function () { var e, t, i, s, a, n, r, o; this.params.scrollbar.el && this.scrollbar.el && (n = this.scrollbar, e = this.rtlTranslate, o = this.progress, t = n.dragSize, i = n.trackSize, s = n.$dragEl, a = n.$el, n = this.params.scrollbar, o = (i - (r = t)) * o, e ? 0 < (o = -o) ? (r = t - o, o = 0) : i < -o + t && (r = i + o) : o < 0 ? (r = t + o, o = 0) : i < o + t && (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 (e) { this.params.scrollbar.el && this.scrollbar.el && this.scrollbar.$dragEl.transition(e) }, updateSize: function () { var e, t, i, s, a, n, r; this.params.scrollbar.el && this.scrollbar.el && (t = (e = this.scrollbar).$dragEl, i = e.$el, t[0].style.width = "", t[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() ? t[0].style.width = r + "px" : t[0].style.height = r + "px", i[0].style.display = 1 <= a ? "none" : "", this.params.scrollbar.hide && (i[0].style.opacity = 0), X.extend(e, { trackSize: s, divider: a, moveDivider: n, dragSize: r }), e.$el[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](this.params.scrollbar.lockClass)) }, getPointerPosition: function (e) { return this.isHorizontal() ? ("touchstart" === e.type || "touchmove" === e.type ? e.targetTouches[0] : e).clientX : ("touchstart" === e.type || "touchmove" === e.type ? e.targetTouches[0] : e).clientY }, setDragPosition: function (e) { var t = this.scrollbar, i = this.rtlTranslate, s = t.$el, a = t.dragSize, n = t.trackSize, r = t.dragStartPos, t = (t.getPointerPosition(e) - s.offset()[this.isHorizontal() ? "left" : "top"] - (null !== r ? r : a / 2)) / (n - a), e = (t = Math.max(Math.min(t, 1), 0), i && (t = 1 - t), this.minTranslate() + (this.maxTranslate() - this.minTranslate()) * t); this.updateProgress(e), this.setTranslate(e), this.updateActiveIndex(), this.updateSlidesClasses() }, onDragStart: function (e) { var t = this.params.scrollbar, i = this.scrollbar, s = this.$wrapperEl, a = i.$el, n = i.$dragEl; this.scrollbar.isTouched = !0, this.scrollbar.dragStartPos = e.target === n[0] || e.target === n ? i.getPointerPosition(e) - e.target.getBoundingClientRect()[this.isHorizontal() ? "left" : "top"] : null, e.preventDefault(), e.stopPropagation(), s.transition(100), n.transition(100), i.setDragPosition(e), clearTimeout(this.scrollbar.dragTimeout), a.transition(0), t.hide && a.css("opacity", 1), this.params.cssMode && this.$wrapperEl.css("scroll-snap-type", "none"), this.emit("scrollbarDragStart", e) }, onDragMove: function (e) { var t = this.scrollbar, i = this.$wrapperEl, s = t.$el, a = t.$dragEl; this.scrollbar.isTouched && (e.preventDefault ? e.preventDefault() : e.returnValue = !1, t.setDragPosition(e), i.transition(0), s.transition(0), a.transition(0), this.emit("scrollbarDragMove", e)) }, onDragEnd: function (e) { var t = 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("")), t.hide && (clearTimeout(this.scrollbar.dragTimeout), this.scrollbar.dragTimeout = X.nextTick(function () { a.css("opacity", 0), a.transition(400) }, 1e3)), this.emit("scrollbarDragEnd", e), t.snapOnRelease && this.slideToClosest()) }, enableDraggable: function () { var e, t, i, s, a; this.params.scrollbar.el && (i = this.scrollbar, e = this.touchEventsTouch, t = 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(e.start, this.scrollbar.onDragStart, s), i.addEventListener(e.move, this.scrollbar.onDragMove, s), i.addEventListener(e.end, this.scrollbar.onDragEnd, a)) : (i.addEventListener(t.start, this.scrollbar.onDragStart, s), c.addEventListener(t.move, this.scrollbar.onDragMove, s), c.addEventListener(t.end, this.scrollbar.onDragEnd, a))) }, disableDraggable: function () { var e, t, i, s, a; this.params.scrollbar.el && (i = this.scrollbar, e = this.touchEventsTouch, t = 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(e.start, this.scrollbar.onDragStart, s), i.removeEventListener(e.move, this.scrollbar.onDragMove, s), i.removeEventListener(e.end, this.scrollbar.onDragEnd, a)) : (i.removeEventListener(t.start, this.scrollbar.onDragStart, s), c.removeEventListener(t.move, this.scrollbar.onDragMove, s), c.removeEventListener(t.end, this.scrollbar.onDragEnd, a))) }, init: function () { var e, t, i, s; this.params.scrollbar.el && (e = this.scrollbar, s = this.$el, i = S((t = this.params.scrollbar).el), 0 === (s = (i = this.params.uniqueNavElements && "string" == typeof t.el && 1 < i.length && 1 === s.find(t.el).length ? s.find(t.el) : i).find("." + this.params.scrollbar.dragClass)).length && (s = S('

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

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

    '), t.append(e))); 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 ? e.transform("translate3d(0px, " + (a / 2 + l.shadowOffset) + "px, " + -a / 2 + "px) rotateX(90deg) rotateZ(0deg) scale(" + l.shadowScale + ")") : (t = Math.abs(c) - 90 * Math.floor(Math.abs(c) / 90), a = 1.5 - (Math.sin(2 * t * Math.PI / 360) / 2 + Math.cos(2 * t * Math.PI / 360) / 2), t = l.shadowScale, a = l.shadowScale / a, u = l.shadowOffset, e.transform("scale3d(" + t + ", 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 (e) { var t = this.$el; this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e), this.params.cubeEffect.shadow && !this.isHorizontal() && t.find(".swiper-cube-shadow").transition(e) } }, se = { setTranslate: function () { for (var e = this.slides, t = this.rtlTranslate, i = 0; i < e.length; i += 1) { var s, a, n = e.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() ? t && (o = -o) : (d = h, l = -o, o = h = 0), n[0].style.zIndex = -Math.abs(Math.round(r)) + e.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 (e) { var i, s = this, t = s.slides, a = s.activeIndex, n = s.$wrapperEl; t.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e), s.params.virtualTranslate && 0 !== e && (i = !1, t.eq(a).transitionEnd(function () { if (!i && s && !s.destroyed) { i = !0, s.animating = !1; for (var e = ["webkitTransitionEnd", "transitionend"], t = 0; t < e.length; t += 1)n.trigger(e[t]) } })) } }, ae = { setTranslate: function () { for (var e = this.width, t = this.height, i = this.slides, s = this.$wrapperEl, a = this.slidesSizesGrid, n = this.params.coverflowEffect, r = this.isHorizontal(), o = this.translate, l = r ? e / 2 - o : t / 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 (e) { this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e) } }, ne = { init: function () { var e = this.params.thumbs, t = this.constructor; e.swiper instanceof t ? (this.thumbs.swiper = e.swiper, X.extend(this.thumbs.swiper.originalParams, { watchSlidesProgress: !0, slideToClickedSlide: !1 }), X.extend(this.thumbs.swiper.params, { watchSlidesProgress: !0, slideToClickedSlide: !1 })) : X.isObject(e.swiper) && (this.thumbs.swiper = new t(X.extend({}, e.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 e, t, i, s = this.thumbs.swiper; s && (e = s.clickedIndex, (i = s.clickedSlide) && S(i).hasClass(this.params.thumbs.slideThumbActiveClass) || null == e || (i = s.params.loop ? parseInt(S(s.clickedSlide).attr("data-swiper-slide-index"), 10) : e, 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), e = this.slides.eq(s).prevAll('[data-swiper-slide-index="' + i + '"]').eq(0).index(), t = this.slides.eq(s).nextAll('[data-swiper-slide-index="' + i + '"]').eq(0).index(), i = void 0 === e || void 0 !== t && t - s < s - e ? t : e), this.slideTo(i))) }, update: function (e) { var t = this.thumbs.swiper; if (t) { var i, s, a, n = "auto" === t.params.slidesPerView ? t.slidesPerViewDynamic() : t.params.slidesPerView, r = (this.realIndex !== t.realIndex && (i = t.activeIndex, a = t.params.loop ? (t.slides.eq(i).hasClass(t.params.slideDuplicateClass) && (t.loopFix(), t._clientLeft = t.$wrapperEl[0].clientLeft, i = t.activeIndex), s = t.slides.eq(i).prevAll('[data-swiper-slide-index="' + this.realIndex + '"]').eq(0).index(), a = t.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, t.visibleSlidesIndexes && t.visibleSlidesIndexes.indexOf(a) < 0 && (t.params.centeredSlides ? a = i < a ? a - Math.floor(n / 2) + 1 : a + Math.floor(n / 2) - 1 : i < a && (a = a - n + 1), t.slideTo(a, e ? 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), t.slides.removeClass(o), t.params.loop || t.params.virtual && t.params.virtual.enabled) for (var l = 0; l < r; l += 1)t.$wrapperEl.children('[data-swiper-slide-index="' + (this.realIndex + l) + '"]').addClass(o); else for (var h = 0; h < r; h += 1)t.slides.eq(this.realIndex + h).addClass(o) } } }, M = [m, G, j, v, g, y, E, { name: "mousewheel", params: { mousewheel: { enabled: !1, releaseOnEdges: !1, invert: !1, forceToAxis: !1, sensitivity: 1, eventsTarged: "container" } }, create: function () { X.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: X.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 () { X.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 (e) { var t, i = this.navigation, s = i.$nextEl, i = i.$prevEl; !this.params.navigation.hideOnClick || S(e.target).is(i) || S(e.target).is(s) || (s ? t = s.hasClass(this.params.navigation.hiddenClass) : i && (t = i.hasClass(this.params.navigation.hiddenClass)), !0 === t ? 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 (e) { return e }, formatFractionTotal: function (e) { return e }, 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 () { X.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 (e) { this.params.pagination.el && this.params.pagination.hideOnClick && 0 < this.pagination.$el.length && !S(e.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 () { X.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 (e) { this.scrollbar.setTransition(e) }, destroy: function () { this.scrollbar.destroy() } } }, { name: "parallax", params: { parallax: { enabled: !1 } }, create: function () { X.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 (e) { this.params.parallax.enabled && this.parallax.setTransition(e) } } }, { 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, t = { 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 (e) { t[e] = J[e].bind(s) }), X.extend(s, { zoom: t }), 1); Object.defineProperty(s.zoom, "scale", { get: function () { return a }, set: function (e) { var t, i; a !== e && (t = 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", e, t, i)), a = e } }) }, on: { init: function () { this.params.zoom.enabled && this.zoom.enable() }, destroy: function () { this.zoom.disable() }, touchStart: function (e) { this.zoom.enabled && this.zoom.onTouchStart(e) }, touchEnd: function (e) { this.zoom.enabled && this.zoom.onTouchEnd(e) }, doubleTap: function (e) { this.params.zoom.enabled && this.zoom.enabled && this.params.zoom.toggle && this.zoom.toggle(e) }, 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 () { X.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 () { X.extend(this, { controller: { control: this.params.controller.control, getInterpolateFunction: I.getInterpolateFunction.bind(this), setTranslate: I.setTranslate.bind(this), setTransition: I.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 (e, t) { this.controller.control && this.controller.setTranslate(e, t) }, setTransition: function (e, t) { this.controller.control && this.controller.setTransition(e, t) } } }, { 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 t = this; X.extend(t, { a11y: { liveRegion: S('') } }), Object.keys(ee).forEach(function (e) { t.a11y[e] = ee[e].bind(t) }) }, 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 () { X.extend(this, { history: { init: z.init.bind(this), setHistory: z.setHistory.bind(this), setHistoryPopState: z.setHistoryPopState.bind(this), scrollToSlide: z.scrollToSlide.bind(this), destroy: z.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 () { X.extend(this, { hashNavigation: { initialized: !1, init: H.init.bind(this), destroy: H.destroy.bind(this), setHash: H.setHash.bind(this), onHashCange: H.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 t = this; X.extend(t, { autoplay: { running: !1, paused: !1, run: P.run.bind(t), start: P.start.bind(t), stop: P.stop.bind(t), pause: P.pause.bind(t), onVisibilityChange: function () { "hidden" === document.visibilityState && t.autoplay.running && t.autoplay.pause(), "visible" === document.visibilityState && t.autoplay.paused && (t.autoplay.run(), t.autoplay.paused = !1) }, onTransitionEnd: function (e) { t && !t.destroyed && t.$wrapperEl && e.target === this && (t.$wrapperEl[0].removeEventListener("transitionend", t.autoplay.onTransitionEnd), t.$wrapperEl[0].removeEventListener("webkitTransitionEnd", t.autoplay.onTransitionEnd), t.autoplay.paused = !1, t.autoplay.running ? t.autoplay.run() : t.autoplay.stop()) } } }) }, on: { init: function () { this.params.autoplay.enabled && (this.autoplay.start(), document.addEventListener("visibilitychange", this.autoplay.onVisibilityChange)) }, beforeTransitionStart: function (e, t) { this.autoplay.running && (t || !this.params.autoplay.disableOnInteraction ? this.autoplay.pause(e) : 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 () { X.extend(this, { fadeEffect: { setTranslate: te.setTranslate.bind(this), setTransition: te.setTransition.bind(this) } }) }, on: { beforeInit: function () { var e; "fade" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "fade"), X.extend(this.params, e = { slidesPerView: 1, slidesPerColumn: 1, slidesPerGroup: 1, watchSlidesProgress: !0, spaceBetween: 0, virtualTranslate: !0 }), X.extend(this.originalParams, e)) }, setTranslate: function () { "fade" === this.params.effect && this.fadeEffect.setTranslate() }, setTransition: function (e) { "fade" === this.params.effect && this.fadeEffect.setTransition(e) } } }, { name: "effect-cube", params: { cubeEffect: { slideShadows: !0, shadow: !0, shadowOffset: 20, shadowScale: .94 } }, create: function () { X.extend(this, { cubeEffect: { setTranslate: ie.setTranslate.bind(this), setTransition: ie.setTransition.bind(this) } }) }, on: { beforeInit: function () { var e; "cube" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "cube"), this.classNames.push(this.params.containerModifierClass + "3d"), X.extend(this.params, e = { slidesPerView: 1, slidesPerColumn: 1, slidesPerGroup: 1, watchSlidesProgress: !0, resistanceRatio: 0, spaceBetween: 0, centeredSlides: !1, virtualTranslate: !0 }), X.extend(this.originalParams, e)) }, setTranslate: function () { "cube" === this.params.effect && this.cubeEffect.setTranslate() }, setTransition: function (e) { "cube" === this.params.effect && this.cubeEffect.setTransition(e) } } }, { name: "effect-flip", params: { flipEffect: { slideShadows: !0, limitRotation: !0 } }, create: function () { X.extend(this, { flipEffect: { setTranslate: se.setTranslate.bind(this), setTransition: se.setTransition.bind(this) } }) }, on: { beforeInit: function () { var e; "flip" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "flip"), this.classNames.push(this.params.containerModifierClass + "3d"), X.extend(this.params, e = { slidesPerView: 1, slidesPerColumn: 1, slidesPerGroup: 1, watchSlidesProgress: !0, spaceBetween: 0, virtualTranslate: !0 }), X.extend(this.originalParams, e)) }, setTranslate: function () { "flip" === this.params.effect && this.flipEffect.setTranslate() }, setTransition: function (e) { "flip" === this.params.effect && this.flipEffect.setTransition(e) } } }, { name: "effect-coverflow", params: { coverflowEffect: { rotate: 50, stretch: 0, depth: 100, modifier: 1, slideShadows: !0 } }, create: function () { X.extend(this, { coverflowEffect: { setTranslate: ae.setTranslate.bind(this), setTransition: ae.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 (e) { "coverflow" === this.params.effect && this.coverflowEffect.setTransition(e) } } }, { name: "thumbs", params: { thumbs: { multipleActiveThumbs: !0, swiper: null, slideThumbActiveClass: "swiper-slide-thumb-active", thumbsContainerClass: "swiper-container-thumbs" } }, create: function () { X.extend(this, { thumbs: { swiper: null, init: ne.init.bind(this), update: ne.update.bind(this), onThumbClick: ne.onThumbClick.bind(this) } }) }, on: { beforeInit: function () { var e = this.params.thumbs; e && e.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 (e) { var t = this.thumbs.swiper; t && t.setTransition(e) }, beforeDestroy: function () { var e = this.thumbs.swiper; e && this.thumbs.swiperCreated && e && e.destroy() } } }]; return void 0 === p.use && (p.use = p.Class.use, p.installModule = p.Class.installModule), p.use(M), p }); var ANIUTIL = function () { function t(e) { function t(e) { this.opts = e, this.resizeTiming = e.resizeTiming || 100, this.setElement(), this.setVideoStyle(), this.bindEvent() } var i = t.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 e = this; window.addEventListener("load", function () { e.setVideoSize() }), window.addEventListener("resize", function () { e.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 e = this; clearTimeout(null), setTimeout(function () { e.getVideoInfo(), e.wrapRatio < e.videoRatio ? (e.targetVideo.style.width = "100%", e.targetVideo.style.height = "auto") : (e.targetVideo.style.width = "auto", e.targetVideo.style.height = "100%") }, this.resizeTiming) }, new t(e) } function i(e) { var t, i, s = null, a = null, n = e ? e + 200 : 200, r = function () { null == s ? (i = document.scrollingElement || document.documentElement || document.body.parentNode || document.body, t = document.body.clientHeight, i = window.pageYOffset + i.clientHeight, s = i / t) : t = document.body.clientHeight }, o = function () { clearTimeout(a), a = setTimeout(function () { window.scrollTo(0, t * 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 (e) { return 0 < (e = { targetValue: (e = e).targetValue, progress: e.progress, startPoint: e.startPoint || 0, endPoint: e.endPoint || 100 }).startPoint && (e.endPoint = 0 < e.endPoint - e.startPoint ? e.endPoint - e.startPoint : e.endPoint), t = (t = (t = e.targetValue * (e.progress - e.startPoint) / e.endPoint) > e.targetValue ? e.targetValue : t) < 0 ? 0 : t; var t }, videoObjectFit: function (e) { t(e) }, addClass: function (e) { for (var t = e, i = t.classList.length, s = 0; s < i; s++)t.targetElement.classList.add(t.classList[s]) }, removeClass: function (e) { for (var t = e, i = t.classList.length, s = 0; s < i; s++)t.targetElement.classList.remove(t.classList[s]) }, scrollController: function (e) { var i, s = (s = e) || {}, t = 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, e = function () { "Netscape" == navigator.appName && -1 != navigator.userAgent.search("Trident") || -1 != t.indexOf("msie") ? document.addEventListener("mousewheel", function (e) { "hidden" != document.documentElement.style.overflow && u.scrollEvent(e) }, { passive: !1 }) : document.addEventListener("wheel", function (e) { u.hasScrollBox(e.target) || u.scrollEvent(e) }, { passive: !1 }) }, c = function () { window.addEventListener("scroll", function () { "hidden" == document.documentElement.style.overflow || h || (o = a.scrollTop) }) }, u = { scrollEvent: function (e) { e.preventDefault(); var t = document.body.getAttribute("data-scroll-speed"), e = this.normalizeWheelDelta(e), t = s.currDelta && t ? t : t || n ? n : 120; o += -e * t, i = Math.max(0, Math.min(o, a.scrollHeight - l.clientHeight)), this.update() }, normalizeWheelDelta: function (e) { return e.detail ? e.wheelDelta ? e.wheelDelta / e.detail / 40 * (0 < e.detail ? 1 : -1) : -e.detail / 3 : e.wheelDelta / 120 }, update: function () { var e = i - a.scrollTop, e = Math.ceil(a.scrollTop + e) <= 0 ? 0 : i < o ? i : Math.ceil(a.scrollTop + e); h = !0, TweenMax.to(a, r, { ease: "power1.out", scrollTop: e, 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 (e) { for (; e && e !== document.body && e !== document;) { var t = window.getComputedStyle(e).overflow; if (t && (-1 < t.indexOf("auto") || -1 < t.indexOf("scroll"))) return !0; e = e.parentNode } return !1 } }; window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame, -1 == t.indexOf("chrome") && -1 != t.indexOf("safari") || (e(), c()) }, resizeScrollOffset: function (e) { i(e) }, checkTouchDevice: s, checkFold: function () { var e, t = screen.width / screen.height, i = s() && .7137 < t && t < .8 && "width=768" == document.getElementsByName("viewport")[0].content, t = s() && .8 < t && t < .95 && "width=768" == document.getElementsByName("viewport")[0].content; return i ? e = "isFold" : t && (e = "isFoldLatest"), e }, deviceConsole: function (e, t) { 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" == t ? (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 = e }, percentToPixel: function (e) { return e.targetValue * (e.progress / 100) }, responsiveHandler: function (s) { var a, e, n, r, t = 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 e = 0; e < s.resolution.length; e++) { var t = s.resolution[e], i = s.resolution[e + 1] || 0; r <= t && i < r && a != s.statusName[e] || r <= t && i < r && n != e ? (document.documentElement.classList.remove(a), a = s.statusName[e] || e, n = e, 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] || e, n = e, document.documentElement.classList.add(a)) } }, o = function () { clearTimeout(t), console.log(s.activeTiming), e != n && s.callback[n] && (t = setTimeout(function () { s.callback[n](), t = null, e = n }, s.activeTiming)) }; return function () { return window.addEventListener("DOMContentLoaded", function () { i(), e = 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"), e = -1 !== navigator.userAgent.indexOf("Safari"), t = -1 !== navigator.userAgent.indexOf("Chrome"), s && !i && e && !t ? 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 (e) { return window.setTimeout(e, 1e3 / 60) }, cancelAFrame: window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame || function (e) { window.clearTimeout(e) }, isObject: function (e) { return "object" == typeof e && null !== e && e.constructor && e.constructor === Object }, def: function () { for (var e = [], t = arguments.length; t--;)e[t] = arguments[t]; for (var i = Object(e[0]), s = 1; s < e.length; s += 1) { var a = e[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 (e) { return Array.prototype.slice.call(e) }, getOffset: function (e) { return { top: e.getBoundingClientRect().top + window.pageYOffset, bottom: e.getBoundingClientRect().bottom + window.pageYOffset } }, getScroll: function () { var e = window.pageYOffset; return { top: e, bottom: e + window.innerHeight } }, getViewPort: function () { var e = window, t = "inner"; return "innerWidth" in window || (t = "client", e = document.documentElement || document.body), { width: e[t + "Width"], height: e[t + "Height"] } }, getCurrentDevice: function () { var e = UTILS.getViewPort().width; return 1024 <= e ? "desktop" : e < 1024 && 768 <= e ? "tablet" : "mobile" }, isInVerticalViewPort: function (e) { e = e.getBoundingClientRect(); return e.top - 200 <= UTILS.getViewPort().height && 0 <= e.bottom }, isInHorizontalViewPort: function (e) { e = e.getBoundingClientRect(); return e.left - 200 <= UTILS.getViewPort().width && 0 <= e.right + 200 }, isVerticalVisible: function (e) { return UTILS.isInVerticalViewPort(e) && !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length) }, isHorizontalVisible: function (e) { return UTILS.isInHorizontalViewPort(e) && !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length) }, setCookie: function (e, t, i) { var s = new Date; s.setTime(s.getTime() + 60 * i * 60 * 24 * 1e3), document.cookie = e + "=" + t + "; exprires=" + s.toUTCString() + "; path=/" }, getCookie: function (e) { e = document.cookie.match("(^|;) ?" + e + "=([^;]*)(;|$)"); return e ? e[2] : null }, triggerEvent: function (e, t, i, s, a) { var n, i = i || null, s = s || !1, a = a || !0; null == i ? (n = document.createEvent("HTMLEvents")).initEvent(t, s, a) : (n = document.createEvent("CustomEvent")).initCustomEvent(t, s, a, i), e.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 (e) { var t; document.documentElement.classList.contains("isTouchDevice") || (this.popupEl = e || null, this.scrollFlag = !0, this.currentPos = window.pageYOffset || document.documentElement.scrollTop, e = window.innerWidth - document.documentElement.clientWidth, t = 0 < this.currentPos ? "-" + this.currentPos + "px" : 0, document.body.style.position = "fixed", document.body.style.width = "100%", document.body.style.top = t, document.body.style.boxSizing = "border-box", document.body.style.paddingRight = e + "px", document.documentElement.style.overflow = "hidden", null !== this.popupEl && (this.popupEl.style.paddingRight = e + "px")) }, closest: function (e, t) { do { if (e == document.documentElement) return null; if (e.matches ? e.matches(t) : e.msMatchesSelector(t)) return e } while (null !== (e = e.parentElement || e.parentNode) || 1 === e.nodeType); return null }, onPopupAccessibility: function (e) { e.setAttribute("aria-hidden", !0), e.setAttribute("tabindex", -1); for (var t = e.querySelectorAll("a, button, input, select, iframe"), i = 0; i < t.length; i++) { var s = t[i].getAttribute("aria-hidden"), a = t[i].getAttribute("tabindex"); null != s && null == t[i].getAttribute("data-prev-aria-hidden") && t[i].setAttribute("data-prev-aria-hidden", s), null != a && null == t[i].getAttribute("data-prev-tabindex") && t[i].setAttribute("data-prev-tabindex", a), t[i].setAttribute("tabindex", -1), t[i].setAttribute("aria-hidden", !0) } }, offPopupAccessibility: function (e) { e.removeAttribute("aria-hidden"), e.removeAttribute("tabindex"); for (var t = e.querySelectorAll("a, button, input, select, iframe"), i = 0; i < t.length; i++) { var s = t[i].getAttribute("data-prev-aria-hidden"), a = t[i].getAttribute("data-prev-tabindex"); null != s ? t[i].setAttribute("aria-hidden", s) : t[i].removeAttribute("aria-hidden"), null != a ? t[i].setAttribute("tabindex", a) : t[i].removeAttribute("tabindex"), t[i].removeAttribute("data-prev-aria-hidden"), t[i].removeAttribute("data-prev-tabindex") } }, onAccessibility: function (e) { if (!document.documentElement.classList.contains("is-layer-popup-opened")) { e.setAttribute("aria-hidden", !0), e.setAttribute("tabindex", -1); for (var t = e.querySelectorAll("a, button, input, select, iframe"), i = 0; i < t.length; i++)t[i].setAttribute("tabindex", -1), t[i].setAttribute("aria-hidden", !0) } }, offAccessibility: function (e) { if (!document.documentElement.classList.contains("is-layer-popup-opened")) { e.removeAttribute("aria-hidden"), e.removeAttribute("tabindex"); for (var t = e.querySelectorAll("a, button, input, select, iframe"), i = 0; i < t.length; i++)t[i].removeAttribute("tabindex"), t[i].removeAttribute("aria-hidden") } }, extend: function (t, i) { return Object.keys(i).forEach(function (e) { t[e] = i[e] }), t }, getHeight: function (e) { var t, i, s; return e ? (t = (i = window.getComputedStyle(e)).display, i = parseInt(i.maxHeight), s = 0, "none" != t && 0 != i ? e.offsetHeight : (e.style.position = "absolute", e.style.visibility = "hidden", e.style.display = "block", s = e.offsetHeight, e.style.display = "", e.style.position = "", e.style.visibility = "", s)) : 0 }, setLastActiveItem: function (e) { this.lastActiveItem = e || null }, getLastActiveItem: function () { return null != this.lastActiveItem ? this.lastActiveItem : null }, isRTL: function () { return document.documentElement.classList.contains("rtl") }, checkRegion: function () { for (var e = document.getElementsByTagName("meta"), t = "", i = 0; i < e.length; i++)if ("sitecode" == e[i].getAttribute("name")) return t = e[i].getAttribute("content"); if ("" == t) return -1 < document.location.pathname.indexOf("global") ? "global" : "jp" }, isLowNetwork: function () { var e = "___GALAXY_SPEED"; return null != UTILS.getCookie(e) && null != UTILS.getCookie(e) && ("L" == UTILS.getCookie(e) || "H" != UTILS.getCookie(e) && void 0) }, getQueryString: function (e) { var t = (s = location.href).indexOf("?") + 1, i = -1 < s.indexOf("#") ? s.indexOf("#") + 1 : s.length; if (0 == t) return ""; for (var s = (s = s.substring(t, i)).split("&"), a = "", n = 0; n < s.length; n++) { var r = s[n].split("="); if (2 != r.length) break; r[0] == e && (a = r[1]); break } return a }, customParallax: function (e) { var t = e.mode || "center", i = e.delay || 0, s = e.ease || "Power0.easeNone", a = e.transZ || 0, n = e.duration || .3, r = e.distance || 0, o = e.correction || 0, l = e.windowCorrection ? window.innerHeight * e.windowCorrection : 0, h = e.direction || 1, d = e.activeElement, c = e.targetElement || d, u = e.wrapperElement || d, e = e.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" == t ? d.top - (window.innerHeight - d.height) / 2 : d.top - window.innerHeight; "px" == e && (r = d.height * r / 100), v <= m + l && p - l <= u && TweenMax.to(c, n, { y: o + g * ("center" == t ? 2 * r : r) / f * h + e, z: a, ease: s, delay: i }) }, getNavHeight: function () { var e, t, 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") ? (t = (e = s.querySelector(".pd-header-navigation")).querySelector(".pd-header-navigation__menu-wrap"), e.clientHeight + t.clientHeight) : s.clientHeight : i }, isBrokenFixed: function () { var e = window.innerWidth, t = window.innerHeight, i = !1; return document.documentElement.classList.remove("is-broken-fixed"), 1440 <= e && t <= 540 || e <= 810 && t / e < .5277 || e / window.outerWidth < .4 || t < UTILS.MIN_VIEW_HEIGHT ? (document.documentElement.classList.add("is-broken-fixed"), i = !0) : document.documentElement.classList.remove("is-broken-fixed"), i }, isFullAnimationBrokenFixed: () => { var e = window.innerWidth, t = window.innerHeight, i = !!UTILS.isTouchDevice && window.matchMedia("(orientation: landscape)").matches; let s = !1; return !!UTILS.isTouchDevice && !window.matchMedia("(orientation: landscape)").matches && t / e < 1.5 || i || t < 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 e, t = navigator.userAgent.toLowerCase(); if ("Microsoft Internet Explorer" == navigator.appName) e = "msie "; else if (-1 < t.search("trident")) e = "trident/.*rv:"; else { if (!(-1 < t.search("edge/"))) return -1; e = "edge/" } return null != new RegExp(e + "([0-9]{1,})(\\.{0,}[0-9]{0,1})").exec(t) ? (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 (e) { document.documentElement.style.paddingRight = e + "px" }, off: function () { this.barWidth(); this.el.removeClass(this.className), this.el.removeClass("hive-layer-scroll-lock"), this.run(0) }, on: function () { var e = this.barWidth(); this.el.addClass(this.className), this.run(e) } } }, MIN_VIEW_HEIGHT: 400, RESPONSIVE: { PC: { NAME: "pc", WIDTH: 1440 }, TABLET: { NAME: "tablet", WIDTH: 1024 }, MOBILE: { NAME: "mobile", WIDTH: 767 } } }; var e, t, i, s }(); WATCH6.UTILS = UTILS; var SCROLLER = function () { function t(e) { this.initialize = !0, this.opts = e, this.correction = e.correction || 0, this.removeCorrection = e.removeCorrection || 0, this.trackHeight = e.trackHeight || 0, this.activeClass = e.activeClass, this.activeCallbackClass = e.activeCallbackClass || "callback-active", this.useStrictMode = null == e.useStrictMode || e.useStrictMode, this.useFixed = e.useFixed || !1, this.useFixedStyle = null == e.useFixedStyle || e.useFixedStyle, this.useSticky = e.useSticky || !1, this.useStickyStyle = null == e.useStickyStyle || e.useStickyStyle, this.useViewportOver = e.useViewportOver || !0, this.activeVisibility = e.activeVisibility || "before", this.activeType = e.activeType ? this.opts.activeType : "reverse", this.autoHeight = null == e.autoHeight || e.autoHeight, this.offsetY = e.offsetY || 0, this.resize = null == e.resize || e.resize, this.resizeTiming = null != e.resizeTiming && e.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 e = t.prototype; return e.bindEvent = function () { var e = this, t = null; this.elementHandler(), this.resize && (this.addEventList = function () { e.resizeTiming ? (clearTimeout(t), t = setTimeout(function () { e.windowHeight = window.innerHeight, e.elementHandler() }, e.resizeTiming)) : (e.windowHeight = window.innerHeight, e.elementHandler()) }, window.addEventListener("resize", this.addEventList)), this.opts.IEScroll && this.utilList.IEScrollHandler.call(this) }, e.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 }, e.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 (e) { e.preventDefault(); var e = e.wheelDelta, t = window.pageYOffset; window.scrollTo(0, t - e) }), this.body.addEventListener("keydown", function (e) { var t = window.pageYOffset; switch (e.which) { case 38: e.preventDefault(), window.scrollTo(0, t - 40); break; case 40: e.preventDefault(), window.scrollTo(0, t + 40); break; default: return } })) }, getScroll: function () { var e = window.pageYOffset; return { top: e, bottom: e + this.windowHeight } }, getOffset: function (e) { return { top: e.getBoundingClientRect().top + window.pageYOffset, bottom: e.getBoundingClientRect().bottom + window.pageYOffset } }, getUserAgent: function () { return navigator.userAgent } }, e.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 e, t; this.trackHeight <= 1 || (this.trackElement.style.height = "", e = 0 == this.trackElement.clientHeight, t = this.windowHeight * this.trackHeight, e && (this.trackElement.style.height = this.windowHeight + "px"), this.trackElement.style.height = t + "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") } }, e.getWheelDirection = function () { this.winScrollTop >= this.oldWinScrollTop ? this.wheelDirection = "down" : this.wheelDirection = "up", this.oldWinScrollTop = this.winScrollTop }, e.getProgress = function () { var e = this.utilList.getOffset.call(this, this.trackElement).top - this.windowHeight * this.correction, t = this.useFixed || this.useSticky ? Math.abs(this.trackElement.clientHeight - this.windowHeight) : this.useViewportOver ? this.trackElement.clientHeight + this.windowHeight : this.trackElement.clientHeight, i = this.winScrollTop - e, e = this.winScrollBottom - e, i = this.useFixed || this.useSticky ? i / t * 100 : e / t * 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 }, e.getFixedState = function () { 0 < this.progress && this.progress < 100 ? this.isFixedArea = !0 : this.isFixedArea = !1 }, e.trackAnimation = function (e) { 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(), e && (this.oldPregress !== this.progress && e.call(this), this.oldPregress = this.progress)) }, e.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 e() { l(), r() } function t() { 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 e = i.activeClass.length, t = 0; t < e; t++)i.activeElement.classList.contains(i.activeClass[t]) || i.activeElement.classList.add(i.activeClass[t]); else i.activeElement.classList.contains(i.activeClass) || i.activeElement.classList.add(i.activeClass) }, o = function () { if ("object" == typeof i.activeClass) for (var e = i.activeClass.length, t = 0; t < e; t++)i.activeElement.classList.contains(i.activeClass[t]) && i.activeElement.classList.remove(i.activeClass[t]); 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) && (e(), 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) && (e(), 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) && (t(), this.activeStatus = !1) : (this.activeStatus && this.winScrollTop < this.elementOffsetTop && this.winScrollBottom < this.elementOffsetTop || this.activeStatus && this.winScrollTop > this.elementOffsetBottom && this.winScrollBottom > this.elementOffsetBottom) && (t(), this.activeStatus = !1); break; case "oneWay": "visible" == s ? this.activeStatus && this.winScrollBottom < this.elementOffsetTop + n && (t(), this.activeStatus = !1) : this.activeStatus && this.winScrollTop < this.elementOffsetTop && this.winScrollBottom < this.elementOffsetTop && (t(), this.activeStatus = !1) } } }, e.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 }, e.destroy = function (e) { 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 (e) { return new t(e) } }(); !function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const u = WATCH6.UTILS; WATCH6.ImageLoader = class { constructor(e = container, t) { t = { el: e, lazyClass: ".js-img-src", lazyCompleteClass: "load-complete", startLazyClass: t.startLazyClass || ".js-start-img-src", endLazyClass: t.endLazyClass || ".js-end-img-src", responsiveClass: t.responsiveClass || ".js-res-img", loadOption: t.loadOption, visiblePoint: t.visiblePoint || 0, useDefaultImg: t.useDefaultImg, resizeStart: null }; this.opts = t, this.classes = t.classes, this.el = document.querySelector(e), 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 e = Array.from(this.el.querySelectorAll(this.opts.lazyClass)); var t = Array.from(this.el.querySelectorAll(this.opts.startLazyClass)), t = e.concat(t); this.lazyImages = t, this.lazyLength = t.length } getResponsiveImage() { var e = this.el.querySelectorAll(this.opts.responsiveClass); this.responsiveImages = e, this.responsiveLength = e.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 e = s + 1, t = e == a ? 0 : this.opts.loadOption[e].resolution, i = !1; (i = (0 == s || this.windowWidth <= this.opts.loadOption[s].resolution) && this.windowWidth > t) && 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 t = 0; t < i.length; t++) { var s = i[t]; let e = i[t].getAttribute(this.targetAttr); e = e || this.findImageHandler(s), i[t].classList.contains(this.opts.lazyCompleteClass) || (i[t].setAttribute("src", e), i[t].classList.add(this.opts.lazyCompleteClass)) } else for (let i = 0; i < this.responsiveLength; i++) { let e = this.responsiveImages[i], t = e.getAttribute(this.targetAttr); t = t || this.findImageHandler(e), e.classList.contains(this.opts.lazyCompleteClass) && e.setAttribute("src", t) } } checkCompleteImage() { var e = this.el.querySelectorAll("." + this.opts.lazyCompleteClass); this.lazyCompleteLength = e.length } setDefaultImage() { for (var e = 0; e < this.lazyLength; e++)this.lazyImages[e].setAttribute("src", "data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH/C1hNUCBEYXRhWE1QAz94cAAh+QQFAAAAACwAAAAAAQABAAACAkQBADs=") } setLazyImage() { this.windowHeight = window.innerHeight; for (let d = 0; d < this.lazyLength; d++) { let t = this.lazyImages[d], e = this.windowHeight * this.opts.visiblePoint, i = u.getScroll.call(this).top - e, s = u.getScroll.call(this).bottom + e, a = u.getOffset.call(this, t).top, n = u.getOffset.call(this, t).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 != t.offsetParent) { let e = t.getAttribute(this.targetAttr); var c; e = e || this.findImageHandler(t), t.classList.contains(this.opts.lazyCompleteClass) || (t.setAttribute("src", e), c = () => { 1 == this.opts.startLazyClass.split(" ").length && t.classList.remove(h), 1 == this.opts.lazyClass.split(" ").length && t.classList.remove(o), this.checkCompleteImage(), t.removeEventListener("load", c) }, t.addEventListener("load", c), t.classList.add(this.opts.lazyCompleteClass)) } } } findRemainingImageAttr(e) { for (var t = this.opts.loadOption.length, i = 0; i < t; i++) { var s = e.getAttribute(this.opts.loadOption[i].attribute); if (s) return s } } findNextImageAttr(t) { for (let e = this.attrIndex; 0 <= e; e--) { var i = t.getAttribute(this.opts.loadOption[e].attribute); if (i) return i; if (0 == e && null == i) return this.findRemainingImageAttr(t) } } findImageHandler(e) { return 0 !== this.attrIndex ? this.findNextImageAttr(e) : this.findRemainingImageAttr(e) } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const e = WATCH6.UTILS, t = e.RESPONSIVE; WATCH6.VideoLoader = class { constructor(e = container, t) { t = { el: e, lazyClass: t.lazyClass || ".js-video-src", responsiveClass: t.responsiveClass || ".js-res-video", imageLazyCompleteClass: "load-complete", imageEndLazyClass: t.imageEndLazyClass || ".js-end-img-src", notLoadElement: t.notLoadElement || [], loadOption: t.loadOption, visiblePoint: t.visiblePoint || 0, resizeStart: null, classes: { loaded: "loaded", ended: "ended" } }; this.opts = t, this.classes = t.classes, this.el = document.querySelector(e), this.init() } init() { this.initOpts(), this.getLazyVideo(), this.getResponsiveVideo(), this.bindEvents() } initOpts() { this.getCurrentDevice(); var e = "mobile" !== this.currentDevice ? 0 : 1; this.prevVideoSrc = "", this.targetAttr = this.opts.loadOption[e].attribute, this.responsiveCheck = this.opts.loadOption, this.videoCallStack = [] } getLazyVideo() { let e = Array.from(this.el.querySelectorAll(this.opts.lazyClass)).filter(t => { t.isVideoInit = !1; { let e = 0; if (e < this.opts.notLoadElement.length) return !t.closest(this.opts.notLoadElement[e]) } }); e = e.filter(e => { if (e.querySelector("video")) return e }), this.lazyVideos = e, this.lazyLength = e.length } getResponsiveVideo() { var e = Array.from(this.el.querySelectorAll(this.opts.responsiveClass)).filter(t => { { let e = 0; if (e < this.opts.notLoadElement.length) return !t.closest(this.opts.notLoadElement[e]) } }); this.responsiveVideos = e, this.responsiveLength = e.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 = e.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 } 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 e = s + 1, t = e == a ? 0 : this.opts.loadOption[e].resolution, i = !1; (i = (0 == s || this.windowWidth <= this.opts.loadOption[s].resolution) && this.windowWidth > t) && 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 e = 0; e < this.responsiveLength; e++) { const i = this.responsiveVideos[e], s = i.querySelector("video"), a = i.getAttribute(this.targetAttr); i.classList.contains(this.classes.loaded) && i.isVideoInit && s.querySelectorAll("source").forEach(e => { const t = e.getAttribute("type"); -1 < t.indexOf("webm") && (e.src = a + ".webm"), -1 < t.indexOf("mp4") && (e.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 e = 0; e < this.lazyLength; e++) { var t = window.pageYOffset, i = t + window.innerHeight; const n = this.lazyVideos[e]; var s = n.getBoundingClientRect(), a = t + s.top, s = t + s.bottom; i > a - window.innerHeight * (0 != window.pageYOffset ? this.opts.visiblePoint : 0) && t < s + window.innerHeight * (0 != window.pageYOffset ? this.opts.visiblePoint : 0) && !n.isVideoInit && this.videoCallStack.indexOf(e) < 0 && (this.videoCallStack.push(e), this.setVideoSrc()) } } setVideoSrc() { var e = this.videoCallStack[0]; const t = this.lazyVideos[e], i = t.querySelector("video"), s = t.getAttribute(this.targetAttr); e = this.opts.lazyClass.split("."); const a = e[e.length - 1]; e = s; this.prevVideoSrc !== e && (i.querySelectorAll("source").forEach(e => { const t = e.getAttribute("type"); -1 < t.indexOf("webm") && (e.src = s + ".webm"), -1 < t.indexOf("mp4") && (e.src = s + ".mp4") }), i.load(), i.addEventListener("canplaythrough", () => { window.setTimeout(() => { t.classList.add(this.classes.loaded) }, 500), 1 == this.opts.lazyClass.split(" ").length && t.classList.remove(a), this.checkCompleteVideo(), this.getEndImage(t), this.videoCallStack.splice(0, 1), 0 < this.videoCallStack.length && this.setVideoSrc() }, { once: !0 }), t.isVideoInit = !0), this.prevVideoSrc = e } getEndImage(e) { var t = "desktop" === this.currentDevice ? "data-src-pc" : "tablet" === this.currentDevice ? "data-src-tablet" : "data-src-mobile"; const i = e.querySelector(this.opts.imageEndLazyClass); e = this.opts.imageEndLazyClass.split("."); const s = e[e.length - 1]; i && !i.classList.contains(this.opts.imageLazyCompleteClass) && (i.src = i.getAttribute(t), i.addEventListener("load", () => { 1 == this.opts.imageEndLazyClass.split(" ").length && i.classList.remove(s), i.classList.add(this.opts.imageLazyCompleteClass) }, { once: !0 })) } checkCompleteVideo() { var e = Array.from(this.el.querySelectorAll("." + this.classes.loaded)).filter(t => { { let e = 0; if (e < this.opts.notLoadElement.length) return !t.closest(this.opts.notLoadElement[e]) } }); this.lazyCompleteLength = e.length } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const d = WATCH6.UTILS, e = d.RESPONSIVE; WATCH6.VideoPlayer = class { constructor(e, t) { e = { sectionElement: t.sectionElement, videoParentElement: null, videoElement: e, videoController: ".video__controller", hiddenElement: ".blind", endImage: ".video__end-frame img", videoLazyClass: ".js-video-src", lazyCompleteClass: "load-complete", imageEndLazyClass: ".js-end-img-src", visiblePoint: t.visiblePoint || 0, classes: { loaded: "loaded", ended: "ended", paused: "paused", playing: "playing", isPaused: "is-paused" }, resizeStart: null, on: { updateController: null } }; this.opts = d.def(e, t || {}), this.classes = e.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 >= 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 } getEndImage() { var e = "desktop" === this.currentDevice ? "data-src-pc" : "tablet" === this.currentDevice ? "data-src-tablet" : "data-src-mobile"; const t = this.videoElement.querySelector(this.opts.imageEndLazyClass); var i = this.opts.imageEndLazyClass.split("."); const s = i[i.length - 1]; t && (t.src = t.getAttribute(e), t.addEventListener("load", () => { 1 == this.opts.imageEndLazyClass.split(" ").length && t.classList.remove(s), t.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(e) { if (e === this.videoElement) { e = "mobile" !== this.currentDevice ? "data-media-pc" : "data-media-mo"; const i = this.videoElement.getAttribute(e); e = i; this.prevVideoSrc !== e && (this.videoElement.playState = !1, this.video.querySelectorAll("source").forEach(e => { const t = e.getAttribute("type"); -1 < t.indexOf("webm") && (e.src = i + ".webm"), -1 < t.indexOf("mp4") && (e.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 = e } } onLoad(e) { if (e === this.videoElement) { e = "mobile" !== this.currentDevice ? "data-media-pc" : "data-media-mo"; const i = this.videoElement.getAttribute(e); this.videoElement.playState = !1, this.video.querySelectorAll("source").forEach(e => { const t = e.getAttribute("type"); -1 < t.indexOf("webm") && (e.src = i + ".webm"), -1 < t.indexOf("mp4") && (e.src = i + ".mp4"), this.video.load() }), this.video.addEventListener("canplaythrough", () => { d.isLowNetwork() || this.onPlay(), this.getEndImage() }, { once: !0 }) } } onPlay(e) { var t = () => { 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() }, 350), this.video.addEventListener("ended", this.updatePlayEnded.bind(this), { once: !0 })) }; e && e !== this.videoElement || t() } 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(e) { var t = () => { 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() }; e && e !== this.videoElement || t() } onCanplayThrough() { var e = this.opts.videoLazyClass.split("."), e = e[e.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(e), this.isCanplay = !0, this.onScrollHandler(), this.isCanplay = !1 } onClickController(e) { e.preventDefault(), this.videoElement.playState ? this.onPause() : this.onPlay() } updatePlayEnded() { this.onPause() } updateController() { var e; this.useController && (this.videoElement.playState ? this.videoController.classList.add(this.classes.isPaused) : this.videoController.classList.remove(this.classes.isPaused), e = { el: this.videoController, playState: this.videoElement.playState }, this.outCallback("updateController", e)) } onScrollHandler() { if (!this.videoElement.closest(".cm-layer")) { var e = window.scrollY, t = e > 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" == t; !h || !this.autoPlay || this.videoElement.playState || this.videoElement.autoPlayState || d.isLowNetwork() || this.onPlay() } this.lastScrollY = e } } 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 >= 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 } outCallback(e, t) { e = this.opts.on[e]; null != e && e(t) } } }(), function () { "use strict"; e = !(r = {}), h = t = null, s = function () { a(), n(), UTILS.isLowNetwork() && document.documentElement.classList.add("low_network"), document.documentElement.classList.add("load"), window.removeEventListener("load", s) }, a = function () { e = 1024 <= window.innerWidth ? "desktop" : 768 <= window.innerWidth && window.innerWidth < 1024 ? "tablet" : "mobile", clearTimeout(r.resizeTimeout), r.resizeTimeout = setTimeout(function () { UTILS.isBrokenFixed() }, 100), e != t && (document.documentElement.classList.add(e), document.documentElement.classList.remove(t), t = e) }, n = function () { for (var e = window.pageYOffset, t = e + window.innerHeight, i = 0; i < r.allClickables.length; i++) { var s = r.allClickables[i], a = e + s.getBoundingClientRect().top, n = e + UTILS.getNavHeight(); n <= a && a <= t ? s.isVisible = !0 : (a < n || t < a) && (s.isVisible = !1) } }, o = function (e) { e.preventDefault(), e.stopPropagation(); var t = 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 + "", h = e.currentTarget, function () { d.call(t), a.removeEventListener("focusin", r) }), o = function () { a.innerHTML = n, a.removeAttribute("tabindex"), a.removeEventListener("focusout", o) }; e.currentTarget.closest(".cm-layer") && (e = e.currentTarget.closest(".cm-layer"), $(e).trigger("closeLayer", !1)), a.addEventListener("focusin", r), a.addEventListener("focusout", o), i.querySelector("a").focus(), s.forEach(e => e.classList.remove("is-active")), i.classList.add("is-active") }, l = function (e) { var e = e.target.closest("li"), t = e.getAttribute("data-sup"), i = document.querySelectorAll(".click_sup"); const s = h.closest(".wearable-watch-screen__frame"); let a = (s ? JSON.parse(s.dataset.rectTop) : "") - UTILS.getNavHeight(); if (s) s.classList.contains("wearable-watch-screen__frame--first") && (a += 5), window.scrollTo(0, a), h.focus(); else for (let e = 0; e < i.length; e++)i[e].innerText === t && (d.call(this), h.focus()); var n = h.closest(".cm-layer"); if (n) { var r = n.id; const o = n.parentNode, l = o.querySelector(`[data-layer-target="#${r}"]`); h.innerText === t && l.focus() } e.classList.remove("is-active") }, d = function (e) { var s; !document.documentElement.classList.contains("ios") && e && null == e.relatedTarget || ((s = this).isClicked || this.isVisible || i(this) || setTimeout(function () { var e = window.pageYOffset, t = s.getBoundingClientRect(), i = (window.innerHeight - UTILS.getNavHeight()) / 2, e = e - UTILS.getNavHeight() + t.top + t.height / 2; window.scrollTo(0, e - i) }, 10), this.isClicked = !1) }, i = function (e) { var e = e.parentNode, t = e.getAttribute("id"); return "contents" != t && e != document.body && (!("subnav" != t && !e.classList.contains("sc-s22ultra-popup")) || i(e)) }, c = function () { this.isClicked = !0 }; var r, e, t, h, s, a, n, o, l, 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 e = 0; for (window.addEventListener("load", s), window.addEventListener("resize", a), window.addEventListener("scroll", n), e = 0; e < r.allClickables.length; e++) { var t = r.allClickables[e]; t.isClicked = !1, t.isVisible = !1, t.addEventListener("focusin", d), t.addEventListener("mousedown", c) } for (e = 0; e < r.supClicker.length; e++)r.supClicker[e].addEventListener("click", o); for (e = 0; e < r.supTopBtn.length; e++)r.supTopBtn[e].addEventListener("click", l); var i = document.documentElement.classList; "global" == UTILS.checkRegion() || i.contains("mac") || i.contains("safari") || ANIUTIL.scrollController({ speed: 120, duration: .5 }) } }; window.initialize = u }(), function (e) { e.TrapFocus = function () { "use strict"; var e, g = void 0, t = window, i = t.document, w = t.jQuery, s = null, a = t.WATCH6.UTILS; function n(e, t) { if (!(this instanceof n)) return new n(e, t); var i = { obj: e, prevStep: null, isDestroy: false, IgnoreUtilFocusChanges: false, ariaAttr: { hidden: "aria-hidden", disabled: "aria-disabled", modal: "aria-modal" }, ariaNotHidden: (() => { return t && t.ariaNotHidden ? t.ariaNotHidden : [] })(), classAttr: { clone: "trapfocus" }, elAttr: { tabIndex: "tabindex", role: "role" }, customEvent: ".TrapFocus" + (new Date).getTime() + Math.random() }; this.opts = a.def(i, t || {}); 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 e = this.opts.ariaAttr; var t = this.opts.elAttr; this.obj.attr(e.modal, "true"); this.obj.attr(t.role, "dialog") }, buildAria: function () { var v = this.opts.ariaAttr; var f = this.opts.elAttr; var e = "head, script, noscript, link, style, meta"; var t = this.opts.ariaNotHidden.length > 0 ? `, ${this.opts.ariaNotHidden.join(",")}` : ""; a.def(this, { aria: { notHidden: Array(e + t), 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 e = 0, t = n.length; e < t; e++)(function (e) { var t = n.eq(e), i = t.data(a.ariaHidden), s = t.data(a.role); if (i != g) { t.attr(v.hidden, i); t.removeData(a.ariaHidden) } else t.removeAttr(v.hidden); if (s != g) { t.attr(f.role, s); t.removeData(a.role) } else t.removeAttr(f.role) })(e); for (var i = 0, o = s.length; i < o; i++)(function (e) { var t = s.eq(e), i = t.data(a.ariaDisabled); t.removeAttr(f.tabIndex); if (i != g) { t.attr(v.disabled, i); t.removeData(a.ariaDisabled) } else t.removeAttr(v.disabled) })(i); for (var l = 0, h = r.length; l < h; l++)(function (e) { var t = r.eq(e), i = t.data(a.tabIndex); if (i != g) { t.attr(f.tabIndex, i); t.removeData(a.tabIndex) } else t.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 e = 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 t = 0, l = s.length; t < l; t++)(function (e) { var t = s.eq(e); n = n.add(t.siblings().not(i.aria.notHidden.join(","))) })(t); r = r.add(n); o = o.add(n); this.obj.removeAttr(v.hidden); for (var h = 0, d = n.length; h < d; h++)(function (e) { var t = n.eq(e), i = t.attr(v.hidden), s = t.attr(f.role); if (i != g) t.data(a.ariaHidden, i); if (s != g) t.data(a.role, s); t.attr(v.hidden, "true"); t.attr(f.role, "none presentation") })(h); r = r.add(n.find(e.join(",").toLowerCase())); for (var c = 0, u = r.length; c < u; c++)(function (e) { var t = r.eq(e), i = t.attr(v.disabled); if (i != g) t.data(a.ariaDisabled, i); t.attr(v.disabled, "true"); setTimeout(() => { t.attr(f.tabIndex, -1) }) })(c); o = o.add(n.find("[" + f.tabIndex + "]")); for (var p = 0, m = o.length; p < m; p++)(function (e) { var t = o.eq(e), i = t.attr(f.tabIndex); if (i != g) t.data(a.tabIndex, i); t.attr(f.tabIndex, -1) })(p); this.aria.hiddenEls = n; this.aria.focusEls = r; this.aria.tabindexEls = o }, this) } }) }, changeEvents: function (e) { var t = [], i = e.split(" "); for (var s in i) t.push(i[s] + this.opts.customEvent); return t.join(" ") }, bindEvents: function (e) { if (e) w(i).on(this.changeEvents("focusin"), w.proxy(this.trapFocus, this)); else w(i).off(this.changeEvents("focusin")) }, focusFirstDescendant: function (e) { for (var t = 0; t < e.childNodes.length; t++) { var i = e.childNodes[t]; if (this.attemptFocus(i) || this.focusFirstDescendant(i)) return true } return false }, focusLastDescendant: function (e) { for (var t = e.childNodes.length - 1; t >= 0; t--) { var i = e.childNodes[t]; if (this.attemptFocus(i) || this.focusLastDescendant(i)) return true } return false }, isFocusable: function (e) { if (e.tabIndex > 0 || e.tabIndex === 0 && e.getAttribute("tabIndex") !== null) return true; if (e.disabled) return false; switch (e.nodeName) { case "A": return !!e.href && e.rel != "ignore"; case "INPUT": return e.type != "hidden" && e.type != "file"; case "BUTTON": case "SELECT": case "TEXTAREA": case "VIDEO": case "SOURCE": case "IFRAME": return true; default: return false } }, attemptFocus: function (e) { if (this.opts.isDestroy) return; if (!this.isFocusable(e)) return false; this.opts.IgnoreUtilFocusChanges = true; try { e.focus() } catch (e) { } this.opts.IgnoreUtilFocusChanges = false; return document.activeElement === e }, trapFocus: function (e) { if (this.opts.isDestroy) return; if (this.opts.IgnoreUtilFocusChanges) return; var t = 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 e = document.getElementById("QSIFeedbackButton-btn"); var t = 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 (e) { var n = e.parentElement; e.setAttribute(o.disabled, "true"); e.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 e = a.querySelector("a"); e.setAttribute(l.tabIndex, "-1"); e.setAttribute(o.disabled, "true"); e.setAttribute(o.hidden, "true") }) }) }, destroy: function () { s = null; this.opts.isDestroy = true; var e = this.opts.ariaAttr; var t = this.opts.elAttr; this.bindEvents(false); this.aria.destroy(); this.obj.removeAttr(e.modal) } }, n }() }(window), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const n = WATCH6.UTILS, e = n.RESPONSIVE; WATCH6.HeightMatch = class { constructor(e = container, t) { var i = { container: e || ".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, t || {}), this.classes = i.classes, this.obj = $(document.querySelector(e)), 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 e, t, i = n.winSize().w, s = this.opts.breakpoints, a = []; for (t in s) e = i <= t ? (a.push(t), Math.min.apply(null, a)) : null; this.breakOpts = n.def({}, this.opts), null != e && (this.breakOpts = n.def(this.breakOpts, s[e])) } 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 >= 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.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 e = 0; e < this.rowNum; e++)this.heightArray[e] = []; for (var e = 0, t = this.objChild.length; e < t; e++) { var i = parseInt(e / this.breakOpts.column, 10), s = this.objChild.eq(e).not(this.opts.notCompareElement).find(this.opts.matchElement), s = s.is(":visible") ? Math.ceil(s.outerHeight()) : 0; this.heightArray[i].push(s) } for (e = 0; e < this.rowNum; e++)this.heightArray[e] = Math.max.apply(null, this.heightArray[e]); this.setHeightLayout() } setHeightLayout() { for (var e = 0, t = this.objChild.length; e < t; e++) { var i = parseInt(e / this.breakOpts.column, 10); (null == this.opts.pushElement ? this.objChild.eq(e).not(this.opts.notCompareElement) : this.objChild.eq(e).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(e) { e = this.opts[e]; null != e && e() } } }(), function (e) { e.HiveLayer = function () { "use strict"; var e, t = window, a = t.jQuery, i = t.document, s = t.WATCH6.UTILS, l = []; function n(e, t) { if (!(this instanceof n)) return new n(e, t); var i = { effect: "fade", layerWrapElements: e, 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" }, customEvent: ".HiveLayer" + (new Date).getTime() + Math.random(), openerTarget: null, useOutside: false, useEscape: true, useCloseFocus: true, useScrollLock: true, useTrapFocus: true, 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 = a(i.layerWrapElements); this.opts = s.def(i, t || {}); this.init() } return n.prototype = { init: function () { this.initOpts(); this.setElements(); this.buildTween(); this.buildTrapFocus(); this.bindEvents(true); this.layerWrap.data("HiveLayer", this) }, initOpts: function () { this.layerWrapInstance = "#" + this.layerWrap.attr("id") }, 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) }, buildTween: function () { s.def(this, { tweens: { instance: [], kill: a.proxy(function () { for (var e = 0, t = this.tweens.instance.length; e < t; e++)this.tweens.instance[e].kill(); this.tweens.instance = [] }, this) } }) }, buildTrapFocus: function () { if (!this.opts.useTrapFocus) return; s.def(this, { trapfocus: { instance: null, destroy: a.proxy(function () { if (this.trapfocus.instance == null) return; this.trapfocus.instance.destroy(); this.trapfocus.instance = null }, this), build: a.proxy(function () { if (this.trapfocus.instance !== null) return; this.trapfocus.instance = new TrapFocus(this.layerObj, { ariaNotHidden: this.opts.ariaNotHidden }) }, this) } }) }, bindEvents: function (e) { if (e) { a(i).on("click clickCustom", this.opts.openerElements + '[data-layer-target="' + this.layerWrapInstance + '"]', a.proxy(this.onLayerOpen, this)); this.layerWrap.on("openLayer", a.proxy(this.onLayerOpen, this)); this.closerObj.on("mousedown click clickCustom", a.proxy(this.onLayerClose, this)); this.layerWrap.on("layerSetOptions", a.proxy(this.setOptions, this)); if (this.opts.useEscape) this.layerObj.on("keydown", a.proxy(this.onEscapeClose, this)) } else { a(i).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 (e) { if (!this.opts.useOutside) return; if (e) this.layerObj.on("clickoutside touchendoutside", a.proxy(this.onLayerOutsideFunc, this)); else this.layerObj.off("clickoutside touchendoutside") }, bindCloseEvents: function (e) { if (e) this.layerWrap.on("closeLayer", a.proxy(this.closeLayer, this)); else this.layerWrap.off("closeLayer") }, setOptions: function (e, t) { s.def(this.opts, t || {}); if (t.customToggle) this.opts.effect = "default" }, setScrollLock: function (e) { if (!this.opts.useScrollLock) return; if (e) s.page.scrollLock.on(); else s.page.scrollLock.off(); a("html").toggleClass(this.opts.classAttr.htmlToggle, e) }, onLayerOpen: function (e) { e.preventDefault(); setTimeout(() => { this.dimmedObj.on("mousedown click clickCustom", a.proxy(this.onLayerClose, this)) }, 500); if (e.type === "click" || e.type === "clickCustom") this.opts.openerTarget = a(e.currentTarget); if (e.type === "click") if (this.opts.openerTarget.hasClass(this.opts.classAttr.isAsync)) return; this.layerViewType = "open"; l.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 t = TweenLite.to(this.layerWrap, this.opts.duration / 1e3, { opacity: 1, onComplete: a.proxy(function () { var e = TweenLite.to(this.layerBody, .25, { ease: Expo.easeOut, opacity: 1, scale: 1, onComplete: a.proxy(function () { this.layerBody.css({ overflow: "", transform: "" }); this.openAfterBugFunc() }, this) }); this.tweens.instance.push(e) }, this) }); this.tweens.instance.push(t) } this.ariaAccessbility(true, this.layerWrap) }, initStep: function (e) { this.opts.stepTimeOld = new Date; this.direction = e.startDistance > e.moveDistance ? "toNext" : "toPrev"; this.condition = this.direction === "toNext" ? e.currentStep > e.moveDistance : e.currentStep < e.moveDistance }, moveStep: function (e) { this.opts.stepTimeNew = new Date; this.opts.remaining = Math.max(0, this.opts.stepTimeOld - this.opts.stepTimeNew + this.opts.duration); var t = this.opts.remaining / this.opts.duration || 0, i = 1 - t, s = a.easing[this.opts.easing](i, this.opts.duration * i, 0, 1, this.opts.duration); e.currentStep = (e.endDistance - e.startDistance) * s }, onLayerOpenAfter: function () { if (this.trapfocus) this.trapfocus.build(); this.bindOutsideEvents(true); this.outCallback("layerOpenAfter") }, openAfterBugFunc: function () { t.clearTimeout(this.openAfterTimeout); this.openAfterTimeout = t.setTimeout(a.proxy(this.onLayerOpenAfter, this), 30) }, onLayerClose: function (e) { var t = a(e.currentTarget); if (e.type === "mousedown") { if (!s.isDevice) { e.stopPropagation(); this.opts.useCloseFocus = false } } else if (e.type === "click" || e.type === "clickCustom") { e.preventDefault(); if (e.type === "click") if (t.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); t.clearTimeout(this.closeBeforeTimeout); this.closeBeforeTimeout = t.setTimeout(a.proxy(this.closeBeforeBugFunc, this), 30); this.bindOutsideEvents(false) }, onEscapeClose: function (e) { var t = e.which || e.keyCode; if (t !== 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 e = TweenLite.to(this.layerBody, this.opts.duration / 1e3, { overflow: "hidden", opacity: 0, scale: 1, onComplete: a.proxy(function () { this.layerBody.css("overflow", ""); var e = TweenLite.to(this.layerWrap, this.opts.duration / 1e3, { opacity: 0, display: "none", onComplete: a.proxy(this.closeAfterBugFunc, this) }); this.tweens.instance.push(e) }, this) }); this.tweens.instance.push(e) } }, closeAfterBugFunc: function () { t.clearTimeout(this.closeAfterTimeout); this.closeAfterTimeout = t.setTimeout(a.proxy(this.onLayerCloseAfter, this), 30) }, popupOpenPropsControl: function () { var e = l; for (var t = 0, i = e.length; t < i; t++) { var s = e[t], a = s["POPUPWRAP"][0]; if (a === this.layerWrap[0]) e[t] = null } for (var n = 0, r = e.length; n < r; r--) { var o = e[r - 1]; if (o === null) e.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 (e, t) { }, outCallback: function (e) { var t = this.opts.on[e]; if (e === "layerMove") this.layerWrap.trigger(e, arguments[1], arguments[2], this); else this.layerWrap.trigger(e, this); if (t == null) return; if (e === "layerMove") t(arguments[1], arguments[2], this); else t(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) } }, n }() }(window), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const o = WATCH6.UTILS; o.RESPONSIVE; WATCH6.SubNav = class { constructor(e = container, t) { 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(e), this.init() } init() { null !== this.el && (this.setElements(), this.initOpts(), this.bindEvents()) } setElements() { this.navItems = o.convertArray(this.el.querySelectorAll(this.opts.navItems)), this.navDests = document.querySelectorAll(this.opts.navDests), this.visSections = o.convertArray(document.querySelectorAll(this.opts.visSections)) } initOpts() { this.visCount = -1, this.visSections.forEach(e => { e.dataset.visIndex = e.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((e, t) => { -1 < e.getAttribute("href").indexOf("#") && (e.dataset.navIndex = t, e.addEventListener("click", this.onNavItemClickEvent.bind(this))), i && -1 < e.getAttribute("href").indexOf(i) && (e.parentNode.classList.remove(this.classes.isOn), e.click()) }) } onNavItemClickEvent(t) { t.preventDefault(); t = t.target; const i = t.parentNode; if (!this.el.classList.contains("hold") && !i.classList.contains(this.classes.isOn)) { this.navItems.forEach(e => { e.parentNode.classList.remove(this.classes.isOn) }), i.classList.contains(this.classes.isOn) || i.classList.add(this.classes.isOn); var s = t.dataset.navIndex; let e = 0; if ("nav" === t.dataset.type) { const r = this.navDests[s]; var t = r.getBoundingClientRect(), a = parseInt(window.getComputedStyle(r).paddingTop), n = (window.innerHeight - (t.height - a) + o.getNavHeight()) / 2; (e = r.classList.contains("js-nav-center") ? this.winOffsetTop + t.top + a - n : this.winOffsetTop + t.top - o.getNavHeight()) < 150 && (e = 0), this.el.classList.add("hold"), GALAXY.setSmoothScrollTop(e, 1500, () => { this.el.classList.contains("hold") && this.el.classList.remove("hold"), GALAXY.header && GALAXY.header.resetSubNav() }) } else { a = this.visSections[s].dataset.rectTop; (e = a) < 150 && (e = 0), GALAXY.setSmoothScrollTop(e, 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 + o.getNavHeight()) / 2; this.visSections.forEach(e => { var i, t, s = e.getBoundingClientRect(), s = e.dataset.rectTop && e.dataset.rectBottom ? (t = JSON.parse(e.dataset.rectTop), JSON.parse(e.dataset.rectBottom)) : (t = this.winOffsetTop + s.top, this.winOffsetTop + s.bottom); this.winOffsetTop + a >= t && this.winOffsetTop + a <= s && (i = e.dataset.visIndex, this.navItems.forEach((e, t) => { t != i && e.parentNode.classList.contains(this.classes.isOn) && e.parentNode.classList.remove(this.classes.isOn) }), (t = this.navItems[i].parentNode).classList.contains(this.classes.isOn) || (t.classList.add(this.classes.isOn), !this.el.classList.contains("hold") && t.classList.contains(this.classes.isOn) && GALAXY.header && GALAXY.header.resetSubNav())) }) } 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.onScrollHandler(), this.resizeRequestFrame = o.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, o.cancelAFrame.call(window, this.resizeRequestFrame) } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const e = WATCH6.UTILS, t = e.RESPONSIVE; WATCH6.Battery = class { constructor(e = container, t) { var i = { el: e, 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(e), 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() { e.winSize().w !== this.winWidth && (this.winWidth = e.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 = e.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, e.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 >= 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 } buildVideoPlayer() { this.videoPlayer = { instance: [], load: t => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(e => { e.onLoad(t) }) }, reset: t => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(e => { e.onReset(t) }) }, play: t => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(e => { e.onPlay(t) }) }, change: t => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(e => { e.onChange(t) }) }, build: () => { this.videoPlayer.instance.length || this.videoElement.forEach((e, t) => { this.videoPlayer.instance.push(new WATCH6.VideoPlayer(e, { 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, e = o.RESPONSIVE; WATCH6.Compare = class { constructor(e = container, t) { var i = { el: e, 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, t || {}), this.classes = i.classes, this.el = document.querySelector(e), 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 >= 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 } 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(e) { this.outCallback("updateImageLoader", e), this.firstImageLoad = !0 } buildHeightMatch() { this.heightMatch = { instance: [], reInit: () => { this.heightMatch.instance.length && this.heightMatch.instance.forEach(e => { e.reInit() }) }, initLayout: () => { for (let e = 0, t = this.opts.matchElements.length; e < t; e++) { const s = this.opts.matchElements[e]; var i = "js-" + s.split(".")[1]; for (let e = 0, t = this.compareItemEl.length; e < t; e++) { const a = this.compareItemEl[e]; 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 e = { column: this.compareItemEl.length }; o.def(this.opts.matchCommonOpts, e); for (let e = 0, t = this.opts.matchElements.length; e < t; e++) { const a = this.opts.matchElements[e]; 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(e => { this.compareItem.instance.push(new WATCH6.CompareItem(e, { on: { updateImageLoader: e => { } } })) }) } }, 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: e => { null !== this.swiper.instance && this.swiper.instance.setTranslate(-e) }, 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(e) { e.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 e = window.innerHeight, t = o.getScroll().top - e, 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 && t <= s.top || t < s.bottom && i > s.bottom || t < s.top && i > s.bottom || t > 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 >= 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 } onResponsiveChange() { } outCallback(e, t) { e = this.opts.on[e]; null != e && e(t) } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.CompareItem = class { constructor(e = container, t) { var i = { el: e, 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 = e, 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(e => { let t = e.querySelector("." + this.classes.isActive); t || (t = e.querySelectorAll(this.opts.colorChip)[0]).classList.add(this.classes.isActive), this.currentColor[t.dataset.size] = t.dataset.color }), this.colorChip.forEach(e => { e.removeAttribute("aria-selected"), e.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(e => { e.addEventListener("click", this.handlerClickSizeCta.bind(this)) }), this.colorChip.forEach(e => { e.addEventListener("click", this.handlerClickColorChip.bind(this)) }) } handlerClickColorChip(e) { e = e.currentTarget; this.currentColor[this.currentSize] = e.dataset.color, this.updateColorChip(), this.updateProductImage(), this.updateLink() } handlerClickSizeCta(e) { e = e.currentTarget; this.currentSize = e.dataset.size, this.updateSizeLayout(), this.updateColorItemlayout(), this.updateProductItemLayout(), this.updateProductImage(), this.updateLink() } updateLink() { var e = this.currentSize, t = this.currentColor[e]; const i = this.DATA[e][t]; 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(e => { this.currentSize === e.dataset.size ? (e.classList.add(this.classes.isActive), e.setAttribute("title", "selected")) : (e.classList.remove(this.classes.isActive), e.removeAttribute("title")) }) } updateColorItemlayout() { this.currentColorItem = Array.from(this.colorItem).filter(e => { if (this.currentSize === e.dataset.size) return e.classList.add(this.classes.isActive), e; e.classList.remove(this.classes.isActive) })[0] } updateColorChip() { const e = this.currentColorItem.querySelectorAll(this.opts.colorChip); e.forEach(e => { this.currentColor[this.currentSize] === e.dataset.color ? (e.classList.add(this.classes.isActive), e.setAttribute("title", "selected")) : (e.classList.remove(this.classes.isActive), e.removeAttribute("title")) }) } updateProductItemLayout() { this.currentProductItem = Array.from(this.productItem).filter(e => { if (this.currentSize === e.dataset.size) return e.classList.add(this.classes.isActive), e; e.classList.remove(this.classes.isActive) })[0] } updateProductImage() { const e = this.currentProductItem.querySelectorAll(this.opts.productImage); e.forEach(e => { this.currentColor[this.currentSize] === e.dataset.color ? (e.classList.add(this.classes.isActive), e.removeAttribute("tabindex"), e.setAttribute("aria-hidden", !1)) : (e.classList.remove(this.classes.isActive), e.setAttribute("tabindex", -1), e.setAttribute("aria-hidden", !0)) }) } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const t = WATCH6.UTILS; t.RESPONSIVE; WATCH6.Contrast = class { constructor(e = container, t) { var i = { el: e, defaultBtn: ".type-default", contrastBtn: ".type-contrast", cookieName: "highContrastMode", featureHide: "is-feature-hide" }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(e), 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(e) { e.preventDefault(), t.setCookie(this.cookieName, "0", 1), this.activeContrast() } onClickContrastBtn(e) { e.preventDefault(), t.setCookie(this.cookieName, "1", 1), this.activeContrast() } activeContrast() { var e = t.getCookie(this.cookieName); null != e && e.length && "1" == e ? (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.Fitness = class { constructor(e = container, t) { this.opts = { el: e, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(e), 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.Hands = class { constructor(e = container, t) { this.opts = { el: e, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(e), 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.HR = class { constructor(e = container, t) { this.opts = { el: e, videoElement: ".video__container" }, this.el = document.querySelector(e), this.init() } init() { null !== this.el && (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.KeyVisual = class { constructor(e = container, t) { var i = { el: e, 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(e), 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(e = container, t) { this.opts = { el: e, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(e), 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, e = a.RESPONSIVE; WATCH6.Overview = class { constructor(e = container, t) { var i = { el: e, 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: { "expansive-screen": { play: "gwatch6-classic:highlights:overview:movi-play:expansive-screen-video", pause: "gwatch6-classic:highlights:overview:movi-pause:expansive-screen-video" }, "rotating-bezel": { play: "gwatch6-classic:highlights:overview:movi-play:rotating-bezel-video", pause: "gwatch6-classic:highlights:overview:movi-pause:rotating-bezel-video" }, "sleep-tracking": { play: "gwatch6-classic:highlights:overview:movi-play:sleep-tracking-video", pause: "gwatch6-classic:highlights:overview:movi-pause:sleep-tracking-video" } }, popupTagging: { "expansive-screen": { play: "gwatch6-classic:highlights:overview^lypu:movi-play:expansive-screen-video", pause: "gwatch6-classic:highlights:overview^lypu:movi-pause:expansive-screen-video" }, "rotating-bezel": { play: "gwatch6-classic:highlights:overview^lypu:movi-play:rotating-bezel-video", pause: "gwatch6-classic:highlights:overview^lypu:movi-pause:rotating-bezel-video" }, "sleep-tracking": { play: "gwatch6-classic:highlights:overview^lypu:movi-play:sleep-tracking-video", pause: "gwatch6-classic:highlights:overview^lypu:movi-pause:sleep-tracking-video" } } }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(e), 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((e, t) => { e.setAttribute("aria-hidden", "true"), e.setAttribute("tabindex", "-1"), e.querySelector(this.opts.storyItemCta).setAttribute("aria-hidden", "true"), e.querySelector(this.opts.storyItemCta).setAttribute("tabindex", "-1"), e.querySelector(this.opts.storyItemController) && (e.querySelector(this.opts.storyItemController).setAttribute("aria-hidden", "true"), e.querySelector(this.opts.storyItemController).setAttribute("tabindex", "-1")), this.opts.initSlide === t && (e.setAttribute("aria-hidden", "false"), e.removeAttribute("tabindex"), e.querySelector(this.opts.storyItemCta).setAttribute("aria-hidden", "false"), e.querySelector(this.opts.storyItemCta).removeAttribute("tabindex"), e.querySelector(this.opts.storyItemController) && (e.querySelector(this.opts.storyItemController).setAttribute("aria-hidden", "false"), e.querySelector(this.opts.storyItemController).removeAttribute("tabindex"))) }), this.indicatorItem.forEach(e => { "tablist" === this.indicatorList.getAttribute("role") && e.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((e, t) => { e.addEventListener("click", this.handleLayerOpen.bind(this, t)) }), this.indicatorItem.forEach((e, t) => { e.addEventListener("click", this.select.bind(this, t)) }), this.navigationPrev.addEventListener("click", this.handleNavigationPrev.bind(this)), this.navigationNext.addEventListener("click", this.handleNavigationNext.bind(this)), this.storySlide.forEach((e, t) => { -1 < e.querySelector(this.opts.storyItemCta).getAttribute("href").indexOf("#") && e.querySelector(this.opts.storyItemCta).addEventListener("click", this.onStoryItemCtaClickEvent.bind(this)) }) } unBindEvents() { this.indicatorItem.forEach((e, t) => { e.removeAllEventListeners("click") }), this.featureBtn.forEach(e => { e.removeAllEventListeners("click") }), this.storyItemController.forEach(e => { e.removeAllEventListeners("click") }) } onStoryItemCtaClickEvent(e) { e.preventDefault(); const t = e.target; e = t.getAttribute("href"); const i = this.rootEl.querySelector(e); e = i.dataset.rectTop || a.getOffset(i).top - a.getNavHeight(); $(this.layerEl).trigger("closeLayer", !1), $("html, body").animate({ scrollTop: e }, { 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 e = this.storySwiper.instance.realIndex - 1; e < 0 && (e = this.storySlide.length - 1), this.storySwiper.instance.slideToLoop(e) } handleNavigationNext() { let e = this.storySwiper.instance.realIndex + 1; e >= this.storySlide.length && (e = 0), this.storySwiper.instance.slideToLoop(e) } handleLayerOpen(e, t) { t.preventDefault(), this.opts.initSlide = e } updateControlText(e, t) { const i = e.querySelector(this.opts.controlHiddenEl); e = t ? this.globalText.play : this.globalText.stop; i.innerHTML = e } select(e, t = !1, i) { var s = this.selectedIndex; s === e && !t || (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")), e < 0 ? this.selectedIndex = e : (this.selectedIndex = e, 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(e => { this.videoPlayer.change(e) }), "block" === this.layerEl.style.display && this.storyPlayer.forEach(e => { this.videoPlayer.change(e) }) } setWidthLayout() { 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.updateImageLayout(), this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } setHeightLayout() { this.updateImageLayout() } buildVideoPlayer() { this.videoPlayer = { instance: [], load: t => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(e => { e.onLoad(t) }) }, reset: t => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(e => { e.onReset(t) }) }, play: t => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(e => { e.onPlay(t) }) }, change: t => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(e => { e.onChange(t) }) }, build: () => { this.videoPlayer.instance.length || this.videoElement.forEach((e, t) => { var i = e.closest(this.opts.featureItem) ? this.opts.featureItem : null; this.videoPlayer.instance.push(new WATCH6.VideoPlayer(e, { sectionElement: this.opts.el, videoParentElement: i, on: { updateController: e => { const t = e.el; var i = t.dataset.tagging, e = e.playState ? "pause" : "play", s = t.classList.contains(this.opts.featureBtn.split(".")[1]) ? this.opts.thumbnailTagging : t.classList.contains(this.opts.storyItemController.split(".")[1]) ? this.opts.popupTagging : ""; t.setAttribute("data-omni", s[i][e]), t.setAttribute("ga-la", s[i][e]) } } })) }) } }, 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, e = this.storySlide[i], t = e.querySelector(this.opts.videoElement); this.select(i), t && (t.classList.contains(this.classes.loaded) ? a.isLowNetwork() || this.videoPlayer.play(t) : this.videoPlayer.load(t)), this.storySlide.forEach((e, t) => { t !== i && (t = e.querySelector(this.opts.videoElement)) && this.videoPlayer.reset(t) }) }, slideChangeTransitionStart: () => { if (null !== this.storySwiper.instance) { const t = Array.from(this.storySwiper.instance.slides); var e = this.storySwiper.instance.realIndex; this.storySlide[e]; t.forEach((e, t) => { e.setAttribute("aria-hidden", "true"), e.setAttribute("tabindex", "-1"), e.querySelector(this.opts.storyItemCta).setAttribute("aria-hidden", "true"), e.querySelector(this.opts.storyItemCta).setAttribute("tabindex", "-1"), e.querySelector(this.opts.storyItemController) && (e.querySelector(this.opts.storyItemController).setAttribute("aria-hidden", "true"), e.querySelector(this.opts.storyItemController).setAttribute("tabindex", "-1")), e.classList.contains("swiper-slide-active") && (e.setAttribute("aria-hidden", "false"), e.removeAttribute("tabindex"), e.querySelector(this.opts.storyItemCta).setAttribute("aria-hidden", "false"), e.querySelector(this.opts.storyItemCta).removeAttribute("tabindex"), e.querySelector(this.opts.storyItemController) && (e.querySelector(this.opts.storyItemController).setAttribute("aria-hidden", "false"), e.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 e = this.storySlide[this.opts.initSlide]; var t = e.querySelector(this.opts.videoElement); this.storySwiper.build(), this.select(this.opts.initSlide), t && this.videoPlayer.load(t), this.featurePlayer.forEach(e => { this.videoPlayer.reset(e) }) }, layerOpenAfter: () => { const e = this.storySlide[this.opts.initSlide]; var t = e.querySelector(this.opts.storyItemController), i = e.querySelector(this.opts.storyItemCta); const s = t || i; window.setTimeout(() => { s.focus() }, 50) }, layerCloseBefore: () => { this.featureBtn.forEach(e => { e.classList.contains(this.classes.isPaused) && e.classList.remove(this.classes.isPaused) }) }, layerCloseAfter: () => { this.storySwiper.destroy(), this.initValues(), this.indicatorItem.forEach(e => { e.classList.remove(this.classes.isActive), e.removeAttribute("title") }), this.storySlide.forEach(e => { e = e.querySelector(this.opts.videoElement); this.videoPlayer.reset(e) }) } } })) } }, this.layer.build() } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const m = WATCH6.UTILS, e = m.RESPONSIVE; m.MIN_VIEW_HEIGHT; WATCH6.Screen = class { constructor(e = container, t) { var i = { el: e, headlineElement: ".wearable-watch-common__headline", trackElement: ".wearable-watch-screen__track", fixedElement: ".wearable-watch-screen__fixed", textElement: ".wearable-watch-screen__text", objElement: ".wearable-watch-screen__obj", introElement: ".wearable-watch-screen__intro", mainElement: ".wearable-watch-screen__main", frameElement: ".wearable-watch-screen__frame", dimmedElement: ".wearable-watch-screen__dimmed", coverElement: ".wearable-watch-screen__cover", scriptElement: ".wearable-watch-screen__script", videoElement: ".video__container", startImage: ".video__start-frame", endImage: ".video__end-frame", featureHide: "is-feature-hide", classes: { isShow: "is-show", loaded: "loaded", ended: "ended", paused: "paused", playing: "playing", intro: "intro", scene01: "scene01", scene02: "scene02", scene03: "scene03", scene04: "scene04", destroyAnimation: "destroy-animation", brokenFixedAnimation: "broken-fixed-animation" }, startPoint: { scene01: 0, scene02: 18, scene03: 52, scene04: 87 }, widthResizeStart: null, heightResizeStart: null, on: { updateImageLoader: null } }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.bindEvents(), this.buildVideoPlayer(), this.initLayout(), this.buildAnimation()) } 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.objElement = this.el.querySelector(this.opts.objElement), this.frameElement = this.el.querySelectorAll(this.opts.frameElement), this.videoElement = this.el.querySelectorAll(this.opts.videoElement), this.headlineElement = this.el.querySelector(this.opts.headlineElement), this.dimmedElement = this.el.querySelector(this.opts.dimmedElement), this.scriptElement = this.el.querySelector(this.opts.scriptElement), this.mainElement = this.el.querySelector(this.opts.mainElement), this.mainVideoWrap = this.mainElement.querySelector(this.opts.videoElement), this.mainVideo = this.mainVideoWrap.querySelector("video"), this.mainCoverImage = this.mainElement.querySelector(this.opts.startImage), this.mainCoverBackground = this.mainElement.querySelector(this.opts.coverElement) } initOpts() { this.getCurrentDevice(), this.firstImageLoad = !1, this.firstVideoLoad = !1, this.winHeight = m.winSize().h, this.currentAnimation = null, this.prevAnimation = null, this.scroller = null, this.brokenScroller = null, this.lastScrollY = 0, this.videoLoad = !1 } initLayout() { this.setWidthLayout(), this.setHeightLayout(), this.onScrollHandler() } initStyle() { ANIUTIL.removeClass({ targetElement: this.el, classList: [this.classes.brokenFixedAnimation, this.classes.intro, this.classes.scene01, this.classes.scene02, this.classes.scene03, this.classes.scene04] }) } 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)), document.addEventListener("focusin", this.onFocusHandler.bind(this)) } getCurrentDevice() { this.winWidth = m.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" } getFrameOffsetTop() { var e = window.pageYOffset; if (document.documentElement.classList.contains("is-animation-broken-fixed")) window.setTimeout(() => { this.frameElement.forEach((e, t) => { e.dataset.rectTop = m.getOffset(e).top, e.dataset.rectBottom = m.getOffset(e).bottom }) }, 200); else { var t = this.opts.startPoint, i = m.getHeight(this.trackElement), e = e + this.trackElement.getBoundingClientRect().top, i = i / 100, s = t.scene02 * i, a = (t.scene03 - t.scene02) * i, n = (t.scene04 - t.scene03) * i, t = (100 - t.scene04) * i; const r = e + 5, o = r + s - 5, l = o, h = l + a, d = h, c = d + n, u = c, p = u + t; this.frameElement.forEach((e, t) => { 0 === t && (e.dataset.rectTop = r, e.dataset.rectBottom = o), 1 === t && (e.dataset.rectTop = l, e.dataset.rectBottom = h), 2 === t && (e.dataset.rectTop = d, e.dataset.rectBottom = c), 3 === t && (e.dataset.rectTop = u, e.dataset.rectBottom = p) }) } } buildVideoPlayer() { this.videoPlayer = { load: () => { var e = "desktop" === this.currentDevice ? "data-media-pc" : "data-media-mo"; const i = this.mainVideoWrap.getAttribute(e); this.mainVideo.querySelectorAll("source").forEach(e => { const t = e.getAttribute("type"); -1 < t.indexOf("webm") && (e.src = i + ".webm"), -1 < t.indexOf("mp4") && (e.src = i + ".mp4"), this.mainVideo.load(), this.mainVideo.addEventListener("canplaythrough", () => { this.mainVideoWrap.classList.add(this.classes.loaded) }, { once: !0 }) }), this.firstVideoLoad = !0 }, update: (e, t) => { null !== e && 3 < e.readyState && (e.playbackRate = 16, e.currentTime = t) }, reset: () => { this.mainVideo.currentTime = 0 } } } buildAnimation() { m.def(this, { animation: { deleteTweenID: e => { e = m.def({}, e); return e._gsTweenID, e }, height: (e, t) => { TweenMax.to(e, .3, t) }, y: (e, t) => { TweenMax.to(e, .3, t) }, currentTime: (e, t) => { TweenMax.to(e, .1, t) } } }) } updateImageLoader(e) { this.outCallback("updateImageLoader", e), this.firstImageLoad = !0 } onFocusHandler(t) { m.getScroll().top; const e = t.target, i = e.closest(this.opts.frameElement); t = i ? JSON.parse(i.dataset.rectTop) : m.winSize().h / 2 + e.getBoundingClientRect().top; if (e.classList.contains("focus-visible") || document.activeElement === e) { let e = t; i && i.classList.contains(this.opts.frameElement.split(".")[1] + "--first") && (e += 5), this.currentSubScrollY = Math.floor(e), i && this.currentSubScrollY !== this.lastSubScrollY && window.scrollTo(0, e), this.lastSubScrollY = this.currentSubScrollY } } onLoadHandler() { this.getFrameOffsetTop(), window.removeEventListener("load", this.onLoadHandler.bind(this)) } onScrollHandler() { const r = this; var e = window.scrollY, t = m.getOffset(document.querySelector(".wearable-watch-overview")), i = window.innerHeight, i = m.getScroll().top - i, s = m.getScroll().bottom; this.lastScrollY; const o = this.opts.startPoint; (s > t.top && i <= t.top || i < t.bottom && s > t.bottom || i < t.top && s > t.bottom || i > t.top && s < t.bottom) && (this.firstImageLoad || (i = this.el.querySelectorAll(".js-start-img-src"), this.updateImageLoader(i)), this.mainVideoWrap.classList.contains(this.classes.loaded) || this.firstVideoLoad || this.videoPlayer.load()), null !== this.scroller && this.scroller.trackAnimation(function () { let e = ANIUTIL.calRange({ targetValue: "mobile" !== r.currentDevice ? 100 : 130, progress: this.progress, startPoint: "mobile" !== r.currentDevice ? -13 : -10, endPoint: 10 }); ANIUTIL.calRange({ targetValue: "mobile" !== r.currentDevice ? 40 : 50, progress: this.progress, startPoint: -27, endPoint: 27 }); let t = ANIUTIL.calRange({ targetValue: 100, progress: this.progress, startPoint: -10, endPoint: 10 }); ANIUTIL.calRange({ targetValue: "mobile" !== r.currentDevice ? 40 : 50, progress: this.progress, startPoint: -27, endPoint: 27 }); let i = new TimelineMax, s = (i.to(r.headlineElement, 1, { ease: "power1.out", onUpdate: () => { r.currentDevice; r.animation.y(r.headlineElement, r.animation.deleteTweenID({ y: 0 - e + "%" })) } }), new TimelineMax), a = (s.to(r.mainCoverImage, 1, { ease: "power1.out", onUpdate: () => { r.animation.height(r.mainCoverImage, r.animation.deleteTweenID({ height: 100 - t + "%" })) } }), new TimelineMax); a.to(r.mainCoverBackground, 1, { ease: "power1.out", onUpdate: () => { r.animation.height(r.mainCoverBackground, r.animation.deleteTweenID({ height: 100 - t + "%" })) } }); var n = ANIUTIL.calRange({ targetValue: r.mainVideo.duration, progress: this.progress, startPoint: 0, endPoint: 100 }); this.progress < 0 && -10 < this.progress && (r.videoLoad = r.mainVideoWrap.classList.contains(r.classes.loaded), r.videoLoad ? r.el.classList.remove(r.classes.destroyAnimation) : r.el.classList.add(r.classes.destroyAnimation), r.getFrameOffsetTop()), this.progress < 0 ? (r.videoPlayer.reset(), r.el.classList.add(r.classes.intro)) : r.el.classList.remove(r.classes.intro), 0 < this.progress ? (r.videoPlayer.update(r.mainVideo, n), r.dimmedElement.classList.add(r.classes.isShow)) : r.dimmedElement.classList.remove(r.classes.isShow), this.progress >= o.scene01 && this.progress <= o.scene02 ? r.el.classList.add(r.classes.scene01) : r.el.classList.remove(r.classes.scene01), this.progress > o.scene02 && this.progress <= o.scene03 ? r.el.classList.add(r.classes.scene02) : r.el.classList.remove(r.classes.scene02), this.progress > o.scene03 && this.progress <= o.scene04 ? r.el.classList.add(r.classes.scene03) : r.el.classList.remove(r.classes.scene03), this.progress > o.scene04 ? r.el.classList.add(r.classes.scene04) : r.el.classList.remove(r.classes.scene04) }), null !== this.brokenScroller && this.brokenScroller.activeAnimation(), this.lastScrollY = e } onResizeHandler() { m.winSize().w === this.winWidth && m.winSize().h === this.winHeight || (this.winWidth = m.winSize().w, this.winHeight = m.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 = m.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.widthResizeStart !== this.winWidth && this.getFrameOffsetTop(), this.opts.widthResizeStart = null, this.opts.heightResizeStart = null, m.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() { this.destroyScroller(), this.destroyBrokenScroller(), this.initStyle(), m.isFullAnimationBrokenFixed() ? this.setBrokenScroller() : (this.setScroller(), this.onScrollHandler()), this.getFrameOffsetTop() } onOrientationChange() { setTimeout(() => { this.destroyScroller(), this.destroyBrokenScroller(), this.initStyle(), m.isFullAnimationBrokenFixed() ? this.setBrokenScroller() : this.setScroller(), this.getFrameOffsetTop() }, 150) } setWidthLayout() { 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 } setHeightLayout() { var e = window.innerWidth, t = window.innerHeight, i = !!m.isTouchDevice && window.matchMedia("(orientation: landscape)").matches, s = !!m.isTouchDevice && !window.matchMedia("(orientation: landscape)").matches; this.currentAnimation = s && t / e < 1.5 || i || t < 700 ? "broken" : "use", this.currentAnimation === this.prevAnimation || m.isTouchDevice || this.onResponsiveChange(), this.prevAnimation = this.currentAnimation } setScroller() { this.destroyScroller(), null === this.scroller && (this.scroller = SCROLLER({ trackElement: this.trackElement, fixedElement: this.fixedElement, useFixed: !(m.isIEorEdge < 0), useSticky: m.isIEorEdge < 0, useStrictMode: !1, trackHeight: (this.currentDevice, 10), resize: !m.isTouchDevice })) } 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) } outCallback(e, t) { e = this.opts.on[e]; null != e && e(t) } } }(), function () { "use strict"; window.WATCH6 = window.WATCH6 || {}; const t = WATCH6.UTILS, e = t.RESPONSIVE; WATCH6.SleepTracking = class { constructor(e = container, t) { var i = { el: e, trackElement: ".wearable-watch-sleep-tracking__track", fixedElement: ".wearable-watch-sleep-tracking__fixed", headlineElement: ".wearable-watch-common__headline", coverElement: ".wearable-watch-sleep-tracking__visual-cover", featureHide: "is-feature-hide", classes: { scene01: "scene01", scene02: "scene02", scene03: "scene03", scene04: "scene04", brokenFixedAnimation: "broken-fixed-animation" } }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.bindEvents(), this.buildAnimation()) } setElements() { this.trackElement = this.el.querySelector(this.opts.trackElement), this.fixedElement = this.el.querySelector(this.opts.fixedElement), this.headlineElement = this.el.querySelector(this.opts.headlineElement), this.coverElement = this.el.querySelector(this.opts.coverElement) } initOpts() { this.winWidth = t.winSize().w, this.winHeight = t.winSize().h, this.currentDevice = !1, this.prevDevice = null, this.scroller = null, this.brokenScroller = null } initStyle() { ANIUTIL.removeClass({ targetElement: this.el, classList: [this.classes.brokenFixedAnimation] }) } 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)) } onLoadHandler() { this.setLayout(), this.onScrollHandler(), window.removeEventListener("load", this.onLoadHandler.bind(this)) } buildAnimation() { t.def(this, { animation: { deleteTweenID: e => { e = t.def({}, e); return e._gsTweenID, e }, paddingTop: (e, t) => { TweenMax.to(e, .3, t) }, y: (e, t) => { TweenMax.to(e, .3, t) }, opacity: (e, t) => { TweenMax.to(e, .3, t) } } }) } onScrollHandler() { const a = this; var e = window.scrollY; this.lastScrollY; null !== this.scroller && this.scroller.trackAnimation(function () { let t = ANIUTIL.calRange({ targetValue: "mobile" !== a.currentDevice ? 125 : 0, progress: this.progress, startPoint: "mobile" !== a.currentDevice ? 15 : 0, endPoint: "mobile" !== a.currentDevice ? 45 : 0 }), e = ANIUTIL.calRange({ targetValue: 1, progress: this.progress, startPoint: "mobile" !== a.currentDevice ? 15 : 22, endPoint: "mobile" !== a.currentDevice ? 50 : 55 }), i = ANIUTIL.calRange({ targetValue: 120, progress: this.progress, startPoint: -10, endPoint: 55 }); if ("mobile" !== a.currentDevice) { let e = new TimelineMax; e.to(a.headlineElement, 1, { ease: "power1.out", onUpdate: () => { a.animation.y(a.headlineElement, a.animation.deleteTweenID({ y: 125 - t + "%" })) } }) } let s = new TimelineMax; if (s.to(a.coverElement, 1, { ease: "power1.out", onUpdate: () => { a.animation.opacity(a.coverElement, a.animation.deleteTweenID({ opacity: 1 - e })) } }), "mobile" === a.currentDevice) { let e = new TimelineMax; e.to(a.fixedElement, 1, { ease: "power1.out", onUpdate: () => { a.animation.paddingTop(a.fixedElement, a.animation.deleteTweenID({ paddingTop: 120 - i + "px" })) } }) } }), null !== this.brokenScroller && this.brokenScroller.activeAnimation(), this.lastScrollY = e } 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() { this.destroyScroller(), this.destroyBrokenScroller(), this.initStyle(), t.isBrokenFixed() ? this.setBrokenScroller() : this.setScroller() } onOrientationChange() { setTimeout(() => { this.destroyScroller(), this.destroyBrokenScroller(), this.initStyle(), t.isBrokenFixed() ? this.setBrokenScroller() : this.setScroller() }, 150) } 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 } setFixedLayout() { } setScroller() { this.destroyScroller(), null === this.scroller && (this.scroller = SCROLLER({ trackElement: this.trackElement, fixedElement: this.fixedElement, useStrictMode: !1, resize: !t.isTouchDevice })) } 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.Standalone = class { constructor(e = container, t) { this.opts = { el: e, 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(e), 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, e = a.RESPONSIVE; WATCH6.Tab = class { constructor(e = container, t) { var i = { el: e, 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, t || {}), this.classes = i.classes, this.el = e, 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 (e, t) { const i = this.tabPanels[t]; this.currentIndex == t ? (e.classList.contains(this.classes.isActive) || e.classList.add(this.classes.isActive), i.classList.contains(this.classes.isActive) || i.classList.add(this.classes.isActive), e.setAttribute("aria-selected", !0), a.offAccessibility(i)) : (e.classList.contains(this.classes.isActive) && e.classList.remove(this.classes.isActive), i.classList.contains(this.classes.isActive) && i.classList.remove(this.classes.isActive), e.setAttribute("aria-selected", !1), a.onAccessibility(i)) }) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), this.tabButtons.forEach(e => { e.addEventListener("click", this.onClickTabButton.bind(this)) }) } unBindEvents() { } onClickTabButton(e) { e = e.currentTarget; const s = this.tabButtons.indexOf(e); s != this.currentIndex && (this.tabButtons.forEach((e, t) => { const i = this.tabPanels[t]; s == t ? (e.classList.contains(this.classes.isActive) || e.classList.add(this.classes.isActive), i.classList.contains(this.classes.isActive) || i.classList.add(this.classes.isActive), e.setAttribute("aria-selected", !0), a.offAccessibility(i)) : (e.classList.contains(this.classes.isActive) && e.classList.remove(this.classes.isActive), i.classList.contains(this.classes.isActive) && i.classList.remove(this.classes.isActive), e.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 >= 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 } } }(), function () { "use strict"; WATCH6.UTILS.RESPONSIVE; new class { constructor(e = container) { this.opts = { el: e, wrapEl: "#wrap", keyVisualEl: ".wearable-watch-kv", overviewEl: ".wearable-watch-overview", screenEl: ".wearable-watch-screen", fitnessEl: ".wearable-watch-fitness", sleepTrackingEl: ".wearable-watch-sleep-tracking", standaloneEl: ".wearable-watch-standalone", monitoringEl: ".wearable-watch-monitoring", hrEl: ".wearable-watch-hr", handsEl: ".wearable-watch-hands-free", batteryEl: ".wearable-watch-battery-processor", compareEl: ".wearable-watch-compare", contrastEl: ".cp-high-contrast", subNavEl: "#subnav" }, this.el = document.querySelector(e), 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, { on: { updateImageLoader: e => { this.imageLoader.setResponsiveImage(e) } } }), this.fitness = new WATCH6.Fitness(this.opts.fitnessEl), this.sleepTracking = new WATCH6.SleepTracking(this.opts.sleepTrackingEl), this.standalone = new WATCH6.Standalone(this.opts.standaloneEl), this.monitoring = new WATCH6.Monitoring(this.opts.monitoringEl), this.hr = new WATCH6.HR(this.opts.hrEl), this.hands = new WATCH6.Hands(this.opts.handsEl), this.compare = new WATCH6.Compare(this.opts.compareEl, { on: { updateImageLoader: e => { this.imageLoader.setResponsiveImage(e) } } }), this.contrast = new WATCH6.Contrast(this.opts.contrastEl), this.batteryEl = new WATCH6.Battery(this.opts.batteryEl), window.addEventListener("load", () => { setTimeout(() => { window.GALAXY && window.GALAXY.isGalaxy && (this.subNav = new WATCH6.SubNav(this.opts.subNavEl)) }, 5) }) } }(".wearable-watch") }();});
    Galaxy Watch6 Classic (Bluetooth, 47mm) | SM-R960NZKAINS | Samsung IN (2024)
    Top Articles
    Latest Posts
    Article information

    Author: Domingo Moore

    Last Updated:

    Views: 6535

    Rating: 4.2 / 5 (53 voted)

    Reviews: 92% of readers found this page helpful

    Author information

    Name: Domingo Moore

    Birthday: 1997-05-20

    Address: 6485 Kohler Route, Antonioton, VT 77375-0299

    Phone: +3213869077934

    Job: Sales Analyst

    Hobby: Kayaking, Roller skating, Cabaret, Rugby, Homebrewing, Creative writing, amateur radio

    Introduction: My name is Domingo Moore, I am a attractive, gorgeous, funny, jolly, spotless, nice, fantastic person who loves writing and wants to share my knowledge and understanding with you.