Welcome to the era of mobile AI. With Galaxy S24 Ultra in your
hands, you can unleash whole new levels of creativity,
productivity and possibility — starting with the most important
device in your life. Your smartphone.
A blog page is open in a web browser app. S Pen is
used to long press the Home button. A Google overlay
appears over the app. S Pen is used to circle text
on the blog page: Tornado Potato. Search results for
tornado potato appear in a popup over the app. S Pen
is used to drag the results upward into a full
screen of Google search results.
A phone call is translated in real time. The
dialogue is shown on screen as a text conversation
in two languages.
In the Interpreter app, a conversation in two
languages is transcribed and translated in real
time.
A lengthy block of text is highlighted in a Note.
With a few taps, a simplified outline of the content
is produced.
A photo is edited in the Gallery app. One of the
subjects is selected and moved to another location
in the picture. Then, missing areas are filled in.
A text message conversation is shown in a foreign
language. A popup bubble says, “tap to translate.”
When tapped, the bubble turns into a bar with
drop-down input and output language menu. Each
message bubble now shows both the original message
and its translation.
"For those who want the best night shots or image
adjustment with AI"
Forbes Vetted
Galaxy AI
"The new era of AI-enhanced smartphones"
GQ
Galaxy AI
"Galaxy AI actually feels like the future of
phones"
Inverse
Sleek. Strong. Stunning
An extreme close-up of the side of Galaxy S24 Ultra. Next, light
passes over the front of the device. Next, a close-up of the rear
panel with S Pen in front.
Meet Galaxy S24 Ultra, the ultimate form of Galaxy Ultra with a new
titanium exterior and a 6.8” flat display.,
It's an absolute marvel of design.
Armor up with titanium
Armor up with titanium
Check out the upgrade — a durable shield of titanium built right
into the frame.
The strength of titanium is now at your fingertips.
Better scratch resistance with Corning® Gorilla®
Armor
Corning® Gorilla® Armor helps protect your screen from
scratches to keep your device looking beautiful.
Water and dust resistant. Worry free
Don't let water dampen your spirits. Galaxy S24 Ultra
is IP68 water and dust resistant — so you're ready for
every adventure, puddles and all.
New colours. Mineral chic
Available only on Samsung.com
Titanium Grey
Titanium Black
Titanium Violet
Titanium Yellow
Titanium Blue
Titanium Green
Titanium Orange
Three Galaxy S24 Ultra devices in Titanium Grey. Two are shown
together, one seen from the front and one from the rear with
the S Pen beside it. Another phone is seen from the side to
show the frame's edges.
Three Galaxy S24 Ultra devices in Titanium Black. Two are
shown together, one seen from the front and one from the rear
with the S Pen beside it. Another phone is seen from the side
to show the frame's edges.
Three Galaxy S24 Ultra devices in Titanium Violet. Two are
shown together, one seen from the front and one from the rear
with the S Pen beside it. Another phone is seen from the side
to show the frame's edges.
Three Galaxy S24 Ultra devices in Titanium Yellow. Two are
shown together, one seen from the front and one from the rear
with the S Pen beside it. Another phone is seen from the side
to show the frame's edges.
Three Galaxy S24 Ultra devices in Titanium Blue. Two are shown
together, one seen from the front and one from the rear with
the S Pen beside it. Another phone is seen from the side to
show the frame's edges.
Online Exclusive
Available only on Samsung.com
Three Galaxy S24 Ultra devices in Titanium Green. Two are
shown together, one seen from the front and one from the rear
with the S Pen beside it. Another phone is seen from the side
to show the frame's edges.
Online Exclusive
Available only on Samsung.com
Three Galaxy S24 Ultra devices in Titanium Orange. Two are
shown together, one seen from the front and one from the rear
with the S Pen beside it. Another phone is seen from the side
to show the frame's edges.
Online Exclusive
Available only on Samsung.com
Explore the mineral-inspired story
Inspired by the beauty of earthen elements, each
titanium colour option is finished with soft satin to
feel like a finely polished gemstone.
Built-in S Pen writes a whole new chapter
Built-in S Pen writes a whole new chapter
The legacy of Galaxy Note is alive and well. Write, tap and
navigate with precision your fingers wish they had on the new,
flat display.
Galaxy AI
Supercharge your everyday with advanced AI
rear camera
200MP
Wide-angle & 2x Optical Quality Zoom
12MP
Ultra Wide
50MP
5x Optical Zoom & 10x Optical Quality Zoom
10MP
3x Optical Zoom
front camera
12MP
Selfie Camera
200MP.
Capture details that rival reality
200MP.
Capture details that rival reality
With the most megapixels on a Galaxy smartphone and AI
processing, Galaxy S24 Ultra raises the bar for image
quality every time you hit the shutter. What's more, the new
ProVisual engine recognises objects — improving colour tone,
reducing noise and bringing out detail.
Captured by Galaxy S24 Ultra#withGalaxy
Our most powerful Quad Tele zoom yet
Don’t let long distance get you down. Now you can get 2x, 3x,
5x and even 10x close-ups with optical quality zoom.,,
Plus, the new, powerful Tele OIS is wider than before to
stabilise the shot for less zoom-in blur.
Tap to zoom
Captured by Galaxy S24 Ultra#withGalaxy
5x optical zoom, 50MP
The high-resolution camera sensor and telephoto camera
pair up to give you incredibly crisp photos, even when
you're zoomed in. Zero in on your subject with 5x
zoom. The result? 50MP of closer, crisper, clearer
details.
Captured by Galaxy S24 Ultra#withGalaxy
1x, 5x
5x zoom meets 8k video
For the first time on a Galaxy smartphone, film
astonishing 8k video with optical 5x zoom.
Capture the extraordinary with this new rockstar of
videography.
In the view finder of the Camera app, a waterfall
is being recorded in 8K resolution at 5x zoom. The
video is steady and rich in detail.
Captured by Galaxy S24 Ultra#withGalaxy
Digital zoom closes in, AI Zoom amps it up
Digital zoom closes in, AI Zoom amps it up
Go from scenic to specific thanks to deep learning-based AI
Zoom. Glide seamlessly past 1x zoom all the way to 100x zoom
while AI amps up the details at all the points in between.,
Captured by Galaxy S24 Ultra#withGalaxy
ProVisual engine shoots every night in clear detail
ProVisual engine shoots every night in clear detail
Space Zoom puts you in the middle of the action, even at night.
With 1.6x larger pixels and a wider Tele OIS, photos and videos
are brighter and more stable — making even distant subjects
clearly stunning.,,
Captured by Galaxy S24 Ultra#withGalaxy
AI makes low-light portraits high on clarity
A new 5x sensor and bigger pixels mean more detail and
sharpness from dawn to dusk — and everything in
between.,,
Plus, our AI Stereo depth map, together with a
brand-new 5x portrait mode, further enhances image
quality for stunning portraits that truly stand out.
Captured by Galaxy S24 Ultra#withGalaxy
5x night video zooms in sharp
With the 5x sensor's levelled-up 5x night zoom video
capabilities, capture the moment in incredible
detail.
Thanks to our dedicated ISP Block, say goodbye to
grainy, low-light videos and hello to enhanced clarity
and reduced noise.
Nightography video of break-dancers in a low-lit
studio starts at one zoom distance and then zooms
in closer. At both distances, the subjects are
clear and colourful with minimal noise.
Captured by Galaxy S24 Ultra#withGalaxy
Resize it, retouch it. Just like that
Resize it, retouch it. Just like that
Something out of place? Just move it. New AI-powered editing
options let you get the photo you wanted, like relocating
objects and intelligently filling in the space they left
behind.
A photo is edited in the Gallery app. An edit button is tapped
and one of the subjects is selected. They are moved to another
location in the picture. Then, missing areas are filled in.
Photo Assist
Resize and retouch photo with Photo Assist
A photo of a skateboarder performing at a
skateboard park is shown on the display of
Galaxy S24 Ultra. The edit button is selected.
Then, the Galaxy AI stars button. The
skateboarder is traced then moved higher. The
“Generate” button is tapped. The photo is
processed and the missing area where the
subject used to be is completed. A before and
after is shown.
In the Gallery app, a photo of a
skateboarder performing at a skateboard park
is open. The edit button is selected.
Tap Here
The photo is now in the Gallery app’s edit
mode.
Tap Here
In edit mode, the Galaxy AI stars button is
tapped.
Tap or draw for selection
Move the selection
Tap Here
The photo is processed. The missing area
where the subject used to be is completed.
Photo Assist
Reimagine images by repositioning people or
objects and filling backgrounds.
Bend time with Instant Slow-mo
Bend time with Instant Slow-mo
Turn regular videos into cinematic marvels using Instant
Slow-mo. With AI-generated images between frames, all it
takes is a simple touch and hold to control when to start
and stop the Slow-mo effect, even on downloads.
A video of a water balloon fight at a child’s backyard
birthday party plays at normal speed on the display of
Galaxy S24 Ultra. A grown-up emerges from behind the gift
table. As a water balloon explodes on his head, the video
drops into slow motion.
Super HDR. AI from preview to post
Super HDR. AI from preview to post
With our latest Super HDR upgrade, camera previews display Super
HDR just like your final capture. You can immediately see what
your super-vivid photos and videos will look like before you
even take them.
Plus, it even works when you're shooting with social media app
cameras.
A woman's photo is taken at sunset. With Super HDR, colour
and saturation is enhanced so the subject is bright and the
clouds in the sky are pronounced. The Super HDR image shown
in the view finder matches the high-definition result saved
in the Gallery.
Captured by Galaxy S24 Ultra#withGalaxy
A new way to create with Galaxy AI, now on One UI
Sketch to Image
Draw from scratch or on any photo. Use AI to transform that sketch into an image.
Portrait Studio
Let AI ignite your imagination with Portrait Studio. Self portraits instantly turn into incredible works of art.
Circle it, find it. Just like that
>A blog page is open in a web browser app. S Pen is used to
long press the Home button. A Google overlay appears over
the app. S Pen is used to circle text on the blog page:
Tornado Potato. Search results for tornado potato appear in
a popup over the app. S Pen is used to drag the results
upward into a full screen of Google search results.
Search like never before with Circle to Search.
Simply trace an object to get Google Search results. It's a new
visual way to find what you're looking for.
Circle to Search
Circle it, Find it
A video posted to a social media app plays on
the display of Galaxy S24 Ultra. It shows a
panning view of a freshly decorated living
room. Circle to Search with Google. The shot
zooms in to a framed poster on the wall. The
home button is long-pressed. A Google Search
bar appears at the bottom of the screen. A
circle is traced around the poster. The poster
is identified and similar Google Results
appear in a pop-up window over the social
media app. Circle to Search with Google.
A social media app plays a video post. The
social media post shows a panning view of a
freshly decorated living room.
Long press the home button
A dotted circle is drawn around a framed
poster on the wall.
Circle or tap to search.
Google is written at the top of the frame
and a Google search bar appears at the
bottom. A circle is traced around the
poster. The poster is identified and similar
Google Results appear in a pop-up window
over the social media app.
Circle to Search
Search anything without switching apps.
Live Translate. The easiest way to communicate
Thanks to Live Translate, now you can get real-time
interpretation while you're on the phone.
Break down language barriers like never before — even through
messaging. Reply back in your own language — it’ll get
translated on their end too.
A phone call is translated in real time. The dialogue is
shown on screen as a text conversation in two languages.
Live Translate
Communicate in a foreign language
Tap to call
A phone call is in progress on the display of
Galaxy S24 Ultra. A button composed of Galaxy
AI stars is digitally highlighted on the
screen. Next, the screen shows a text dialogue
with a drop-down language menu at the top of
the conversation. The spoken dialogue from the
phone call is transcribed on the screen in the
original spoken language, then the translated
language appears below the original
transcription.
A phone call is in progress on the display
of Galaxy S24 Ultra. A drop-down language
menu is at the top of the conversation.
Tap to translate
The spoken dialogue from the phone call is
transcribed on the screen in the original
spoken language, then the translated
language appears below the original
transcription.
Live Translate
You left your wallet in a taxi while
travelling! How should you talk to a foreign
taxi driver?
An Interpreter in your pocket
Want to ask a local for a recommendation? Don't worry! There's
an interpreter in your pocket. Enjoy it even in airplane mode
with no Wi-Fi.
In the Interpreter app, a conversation in two languages is
transcribed and translated in real time.
Pick the right tone for your text with Chat Assist
Compose text messages with AI at the helm in Chat Assist.
Now you can say what you mean with the voice of a professional,
a close friend, even just politely. Go from ”how do I say this?”
to ”why didn't I think of that?” in seconds.
Chat Assist
Real-time text translations
A text message conversation is open on the
display of Galaxy S24 Ultra. The messages are
in a foreign language. A popup bubble says,
“tap to translate.” When tapped, the bubble
turns into a bar with drop-down input and
output language menu. Each message bubble now
shows both the original message and its
translation.
A text message conversation is tapped from a
list of conversations.
Tap Here
The conversation opens to show a dialogue in
a foreign language. A popup bubble that says
“tap to translate” appears and is tapped.
Tap Here
The drop-down input and output language menu
shows Auto and English respectively. Each
message bubble now shows both the original
message and its English translation. The
output language menu is tapped.
Tap Here
English is changed to French on the output
menu.
Tap Here
Now the messages are translated into French.
Chat Assist
Enhance your communication by translating
chats and text messages.
Summarise Notes in the blink of an AI
Whether you're typing up a storm or jotting something down, Note
Assist makes a long story short.
Simply start writing, and format it into a clear, easy-to-review
summary later.
And when you're looking for an old note, the new covers show
simple summaries — keeping your screen looking organised so you
can find things with ease.
A lengthy block of text is highlighted in a Note. With a few
taps, a simplified outline of the content is produced. The
document is saved.
Note Assist
Note smarter, not harder
A Note is open on the display of Galaxy S24
Ultra. It is a lengthy press release article.
The Galaxy AI star button is tapped on the
bottom toolbar. A popup menu appears and “Auto
format” is tapped. Then, “headers and
bullets.” The note is processed and an outline
of the article is generated. Each time the
note is swiped left, the outline format
changes.
A lengthy press release article is shown in
a Note. The Galaxy AI star button is tapped
on the bottom toolbar.
Tap Here
A popup menu appears and “Auto format” is
tapped.
Tap Here
Tap Here
The note is processed and an outline of the
article is generated in a popup over the
note. The center button at the bottom of the
popup is tapped.
Tap Here
The outline version is saved over the
original Note.
Note Assist
Auto format your note text into easy-to-read
bullet points.
Our most hyper-realistic mobile gameplay yet
Arena Breakout logo. Ray tracing on. Ray tracing off. A
before and after comparison on the display of Galaxy S24
Ultra depicts ray tracing effects in a gameplay snapshot
from Arena Breakout. Ray tracing makes reflections on
surfaces more pronounced.
Victory can be yours with the new Snapdragon® 8 Gen 3 for
Galaxy.
Faster processing gives you the power you need for all the
gameplay you want.
Then, manifest graphic effects in real time with ray tracing
for hyper-realistic shadows and reflections.
And guess what? We've nearly doubled the size of Galaxy S24
Ultra's Vapour Chamber to improve heat dissipation and give
you the smooth graphics experience as it was intended.
NPU
41%
improved operation with AI
GPU
30%
more powerful graphics and performance
CPU
20%
faster, more energy efficient computing
Long-lasting battery to play on and on
With massive capacity and greater energy efficiency, Ultra's
battery gives you extra life when it matters most — you know,
like the epic boss battle you've been gearing up for.,
Watch videos up to
30hrs
Listen to music up to
95hrs
2600 nit display. Our brightest adaptive mobile display under
the sun
Our most immersive display comes with some major visibility
upgrades. Corning® Gorilla® Armor reduces reflections and
improves visual clarity, even in direct sunlight. Then, an
improved Vision Booster enhances contrast and colour for a
clearly exceptional experience.
Video with clear visibility is portrayed in a before and after
style comparison a Galaxy S24 Ultra display. The device is being
held outside in the daylight and a video is playing on the
screen.
Why switch from iOS to Galaxy?
Switch effortlessly from iOS
Keep your photos, videos, contacts, calendar and apps with Smart
Switch — even if you switch from iOS.,,
Effortlessly send photos, videos and a variety of files with
users outside the Galaxy ecosystem through Quick Share.
Previously an exclusive among Galaxy devices, it now works with
nearby Androids, too.
Try Galaxy on your phone
Want to try out the latest Galaxy features before you buy? Scan
the QR code to download the Try Galaxy app today.
Want to try out the latest Galaxy features before you buy? Scan
the QR code to download the Try Galaxy app today.
You're not limited to Galaxy phones. Use QR codes and saved
contacts to share with iOS users or far-away friends and
family.,
Your privacy. Secured.
User privacy continues to be our priority in the AI era. With the launch of Galaxy AI on the Galaxy S24 Series, you can rest assured that we will not store or use your personal data for any purpose without your consent.
Samsung Knox
Your old tech, unmissable discounts
Don’t let the dust settle on your old tech. You're two
minutes away from an instant Trade In discount on your
order.
An upgraded processor drives Galaxy S24 Ultra with NPU
performance improved by 41%, GPU by 30% and CPU by 20% compared
to Galaxy S23 Ultra.
Its Vapour Chamber is 92% larger than its predecessor for
improved heat dissipation. At 2600 nits, Galaxy S24 Ultra has
the brightest adaptive display on a Galaxy yet. Plus, with
Corning® Gorilla® Armor, the screen is less reflective than
Galaxy S23 Ultra. Finally, Galaxy S24 Ultra has a 200MP
Wide-angle Camera with ProVisual engine for AI enhancement,
which is the first application on a Galaxy smartphone.
The Galaxy S24 Ultra's camera is head and shoulders above the
rest. It is the first ever Galaxy smartphone to come equipped
with the Quad Tele system, allowing you to take clearer and
crisper photos in the optical zoom range.,
The Galaxy S24 Ultra has a 6.8-inch screen size, which is 0.6
inches larger than Galaxy S24 at 6.2 inches and 0.1 inches
larger than the Galaxy S24+ at 6.7 inches.
Galaxy S24 Ultra uses AI throughout many apps. For example, the
camera uses AI Zoom to take better zoom photos. Photo Assist uses AI to fill in backgrounds and move,
resize or erase objects. Live Translate lets you communicate in other languages
over the phone.
Galaxy S24 Ultra comes in Titanium Grey, Titanium Black,
Titanium Violet and Titanium Yellow.
Titanium Blue, Titanium Green and Titanium Orange are exclusive
colours available only on Samsung.com.
The Galaxy S24 Ultra is a great option for any mobile gamers.
With its powerful processor, long-lasting battery & high
visibility display, you can enjoy hours of game time. Plus, the
efficient heat dissipation avoids overheating.
Learn more about what to look for when choosing the
best phone for gaming
in our helpful article.
*Online exclusive colours only available on Samsung.com.
Sequences shortened and simulated. Results for illustrative purposes
only. Results may vary depending on visual matches. Requires internet
connection. Users may need to update Android to the latest version.
Product functionality may be dependent on your app and device
settings. Some functions may not be compatible with certain apps.
Availability of the service varies by country and language. Accuracy
of results is not guaranteed.
Live Translate requires a network connection and Samsung Account
login. Live Translate is only available on the pre-installed Samsung
Phone app. Certain languages may require language pack download.
Available in 13 languages from launch. Accuracy of results is not
guaranteed.
Interpreter requires Samsung Account login. Certain languages may
require language pack download. Service availability may vary by
language. Accuracy of results is not guaranteed. Availability and
supported features may vary by country, region or carrier.
Availability of supported languages may vary.
Note Assist requires a network connection and Samsung Account login.
Character limit applies. Service availability may vary by language.
Accuracy of results is not guaranteed.
Generative Edit requires a network connection and Samsung Account
login. Editing with Generative Edit results in a resized photo up to
12MP. A visible watermark is overlaid on the image output upon saving
in order to indicate that the image is generated by AI. The accuracy
and reliability of the generated output is not guaranteed.
Measured diagonally, Galaxy S24 Ultra's screen size is 6.8 inches in
the full rectangle and 6.8 inches accounting for the rounded corners;
actual viewable area is less due to the rounded corners and camera
hole.
Titanium is only applied on the device frame. Frame does not include
volume and side keys.
Compared to Galaxy S23 Ultra.
Colour availability may vary depending on country or carrier.
Optical quality zoom is enabled by the Adaptive Pixel sensor.
AI Zoom is applied to distances between digital zoom lengths. Accuracy
of results is not guaranteed.
Results may vary depending on light condition and/or shooting
conditions including multiple subjects, being out of focus or moving
subjects.
3x and 5x distances are optical zoom. 2x and 10x distances are optical
quality zoom.
2x zoom must be enabled in the Camera Assistant app settings. Camera
Assistant can be downloaded from the Galaxy Store.
8K video will need to be watched on a device that supports viewing 8k
video.
100X Space Zoom includes 10x optical quality zoom and 100x digital
zoom with Super Resolution technology. Zoom distances past 10x zoom
may express some image deterioration.
Certain applications may not support Super HDR.
Sketch to Image feature requires a network connection and Samsung Account login. Editing with Sketch to Image may result in a resized photo up to 12MP. A visible watermark is overlaid on the image output upon saving in order to indicate that the image is generated by AI. The accuracy and reliability of the generated output is not guaranteed.
Portrait Studio feature for Photo Assist requires a network connection and Samsung Account login. Editing with Portrait Studio results in a resized photo up to 9MP. A visible watermark is overlaid on the image output upon saving in order to indicate that the image is generated by AI. The accuracy and reliability of the generated output is not guaranteed.
Tone suggesting feature in Chat Assist requires a network connection
and Samsung Account login. Must meet length requirements to activate
feature. Service availability may vary by language. Accuracy of
results is not guaranteed.
Snapdragon branded products are products of Qualcomm Technologies,
Inc. and/or its subsidiaries.
Vapour Chamber installed on Galaxy S24 Ultra is 92% larger than that
of Galaxy S23 Ultra.
AP performance improvements shown compared to Galaxy S23 Ultra. Actual
performance will depend on user environment, conditions and
pre-installed software and applications.
Actual battery life varies by network environment, features and apps
used, frequency of calls and messages, the number of times charged,
and many other factors. Estimated against the average usage profile
compiled by UX Connect Research. Independently assessed by UX Connect
research between 2023.11.25-2023.12.15 in US and UK with pre-release
versions of SM-S921, SM-S926 and SM-S928 under default setting using
LTE and 5G Sub6 networks. NOT tested under 5G mmWave network.
Based on Samsung internal lab test conditions with pre-release version
of given model connected to earphone via Bluetooth under default
settings over LTE. Estimated against battery capacity and measured
current over battery power consumption during video playback (video
file resolution 720p, saved on device) and audio playback (mp3 file,
192kbps, saved on device with LCD display turned off), respectively.
Actual video and audio playback times vary by network connection,
settings, file format, screen brightness, battery condition and many
other factors.
The display can achieve peak brightness of up to 2600
nits, improving the contrast between dark and light aspects of digital
content for a more brilliant picture quality, with a 5,000,000:1
contrast ratio to make your mobile experience more immersive.
Wired transfers from Android™ devices require the receiving device to
have Android™ 4.3 or later and the sending device to have Android 4.3™
or later. Transfers can be completed without a cable through a
wireless connection. For wireless connections, the receiving device
must have Android™ 4.0 or later and the sending device must have
Android™ 4.0 or later. Open Smart Switch Mobile in “Settings” on the
receiving Galaxy device or download the Smart Switch Mobile app from
the Galaxy Store. Data and content available for transfer may vary by
transmission method.
Wired transfers from iOS require the receiving device to have Android™
4.3 or later and the sending device to have iOS 5 or later. Transfers
can be completed without a cable through a wireless connection or
iCloud. For wireless connections, the receiving device must have
Android™ 4.0 or later and the sending device must have iOS 12 or
later. iCloud transfers require the receiving device to have Android™
4.0 or later and the sending device to have iOS 5 or later. Open Smart
Switch Mobile in “Settings” on the receiving Galaxy device or download
the Smart Switch Mobile app from the Galaxy Store. For wireless
transfers, download Smart Switch for iOS from the App Store on your
iPhone or iPad. Data and content available for transfer may vary by
transmission method.
It is recommended to use a wired connection when transferring diverse
sets of data at once.
Galaxy Buds2 Pro, Galaxy Watch6 Classic and Galaxy Tab S9 sold
separately.
Available on devices with Android OS 10 (Q OS) or later and One UI 2.1
or later. Supported PCs include Samsung Notebooks and Galaxy Books
including Qualcomm-based PCs released in 2020 or later and Windows PCs
from other manufacturers running Windows 10 2004 version or later that
have Intel version 22.50.02 Bluetooth drivers or later and Intel
version 22.50.07 Wi-Fi drivers or later.
Galaxy Tab S9 sold separately.
When file sharing using QR codes and contacts, up to 1,000 files can
be transferred at a time. Individual files must be less than 3GB, and
up to 5GB of data in total can be transferred per day. Links expire
after two days. Sender's device requires a Samsung Account, and both
sender and receiver devices require an internet connection.
Galaxy Tab S9 and Galaxy Book4 sold separately.
Knox Matrix is supported on Galaxy smartphones and tablets One UI 6.0
or above. Availability may vary by country or region.
Terms and conditions apply. Availability may vary by carrier, country
or region. Check device trade-in eligibility on the Trade-in page.
Storage options and availability may vary by carrier, country or
region. Actual storage availability may vary depending on
pre-installed software.
All accessories sold separately.
Measured diagonally, Galaxy S24 Ultra's screen size is 6.8 inches in
the full rectangle and 6.8 inches accounting for the rounded corners,
Galaxy S24's screen size is 6.2 inches in the full rectangle and 6
inches accounting for the rounded corners and Galaxy S24+'s screen
size is 6.7 inches in the full rectangle and 6.5 inches accounting for
the rounded corners; actual viewable area is less due to the rounded
corners and camera hole.
Typical value tested under third-party laboratory condition. Typical
value is the estimated average value considering the deviation in
battery capacity among the battery samples tested under IEC 61960
standard. Rated capacity is 3880mAh for Galaxy S24, 4755mAh for Galaxy
S24+ and 4855mAh for Galaxy S24 Ultra. Actual battery life may vary
depending on network environment, usage patterns and other factors.
Galaxy S24, S24+ and S24 Ultra are rated as IP68. Based on lab test
conditions for submersion in up to 1.5 meters of freshwater for up to
30 minutes. Not advised for beach or pool use. Water and dust
resistance of device is not permanent and may diminish over time
because of normal wear and tear.
Instant Slow-mo is only available on the pre-installed Samsung Video
Player and Samsung Gallery app. Service availability may differ by the
video spec.
Translating feature in Chat Assist requires a network connection,
Samsung Account login and language pack download from the Galaxy
store. Must meet length requirements to activate feature. Service
availability may vary by country, region or language. Some chat
applications may not support this feature. Accuracy of results is not
guaranteed.
"
)
);
}
}
};
const isZoom = function () {
const winInnerWidth = window.innerWidth,
winOuterWidth = window.outerWidth;
let zoomLevel = 100 / ((winInnerWidth / winOuterWidth) * 100);
if (zoomLevel > 1.75) {
document.documentElement.classList.add("browser-zoomed-175");
} else {
document.documentElement.classList.remove("browser-zoomed-175");
}
};
return {
addLoadStatusClass: addLoadStatusClass,
setResolution: setResolution,
onClickSup: onClickSup,
centeredFocus: centeredFocus,
setArBanner: setArBanner,
isZoom: isZoom,
};
})();
(function () {
const resize = window.flagship.common.resize,
common = window.flagship.highlights.common,
utils = window.flagship.common.utils,
agent = navigator.userAgent.toLowerCase(),
maxOs = agent.indexOf("mac os") > -1,
touchDevice =
"ontouchstart" in window ||
(window.DocumentTouch && document instanceof window.DocumentTouch);
let els = {};
const init = function () {
els.videoWrap = document.querySelectorAll(".common-video");
els.isGlobal = document.documentElement.classList.contains("global");
if (!!els.videoWrap[0]) {
setElements();
}
};
const setElements = function () {
// popup
els.viewerPopup = document.querySelector(".highlights-viewer");
els.lowLightPopup = document.querySelector(
".highlights-low-light-popup"
);
els.zoomVideoPopup = document.querySelector(
".highlights-quad-telephoto-popup"
);
els.generativeEditPopup = document.querySelector(
".highlights-suggestion-ai-popup"
);
els.generativeEditExperience = document.querySelector(
"#generative-edit-experience"
);
els.circleToSearchExperience = document.querySelector(
"#circle-to-search-experience"
);
els.liveTranslateExperience = document.querySelector(
"#live-translate-experience"
);
els.chatAssistExperience = document.querySelector(
"#chat-assist-experience"
);
els.noteAssistExperience = document.querySelector(
"#note-assist-experience"
);
// video
els.videosWrap = document.querySelectorAll(".common-video");
els.videos = document.querySelectorAll(".common-video video");
for (var i = 0; i < els.videosWrap.length; i++) {
els.videos[i].videoWrap = els.videosWrap[i];
}
};
const bindEvents = function () {
window.addEventListener("load", anchorPosition);
window.addEventListener("hashchange", anchorPosition);
};
const anchorPosition = function () {
if (window.location.hash != "") {
switch (window.location.hash) {
case "#see-in-360":
if (els.viewerPopup) els.viewerPopup.show();
break;
case "#low-light-zoom":
if (els.lowLightPopup) els.lowLightPopup.show();
break;
case "#5x-zoom":
if (els.zoomVideoPopup) els.zoomVideoPopup.show();
break;
case "#generative-edit":
if (els.generativeEditPopup) els.generativeEditPopup.show();
break;
case "#generative-edit-experience":
if (els.generativeEditExperience) {
els.generativeEditExperience.show();
}
break;
case "#circle-to-search-experience":
if (els.circleToSearchExperience) {
els.circleToSearchExperience.show();
}
break;
case "#live-translate-experience":
if (els.liveTranslateExperience) {
els.liveTranslateExperience.show();
}
break;
case "#chat-assist-experience":
if (els.chatAssistExperience) {
els.chatAssistExperience.show();
}
break;
case "#note-assist-experience":
if (els.noteAssistExperience) {
els.noteAssistExperience.show();
}
break;
default:
let hash = location.hash.split("#")[1],
hashSection = document.querySelector("#contents #" + hash),
hashTimeout = null;
clearTimeout(hashTimeout);
hashTimeout = setTimeout(function () {
let sectionTop = hashSection.getBoundingClientRect().top,
navHeight = utils.getNavHeight(),
hashScroll = window.pageYOffset + sectionTop - navHeight;
window.scrollTo(0, hashScroll);
}, 300);
break;
}
}
};
var setResize = function () {
resize.init(
[
{
resolution: 1920,
resolutionName: "desktop",
eventFunction: "",
},
{
resolution: 1023,
resolutionName: "tablet",
eventFunction: "",
},
{
resolution: 767,
resolutionName: "mobile",
eventFunction: "",
},
{
resolution: 320,
resolutionName: "mobileS",
eventFunction: "",
},
],
200
);
resize.add(common.setResolution);
};
const setScrollControl = function () {
window.scrollController = ANIUTIL.scrollController();
scrollController.init({
speed: 120,
duration: 0.5,
});
};
const setImageLoader = function () {
window.imageLoader = ANIUTIL.mediaLoader({
lazyClass: ".js-img-src",
responsiveClass: ".js-res-img",
preset: els.isGlobal ? "" : "?imbypass=true",
loadOption: [
{
resolution: 1920,
attribute: "data-src-pc",
},
{
resolution: 1023,
attribute: "data-src-tb",
},
{
resolution: 767,
attribute: "data-src-mo",
},
{
resolution: 360,
attribute: "data-src-mo-s",
},
],
visiblePoint: 2,
});
window.bgLoader = ANIUTIL.mediaLoader({
type: "bgImage",
lazyClass: ".js-bg-img",
loadOption: [
{
resolution: 1920,
attribute: "",
bgOpts: "",
},
],
visiblePoint: 1,
});
};
const setVideoLoader = function () {
window.videoLoader = ANIUTIL.mediaLoader({
type: "video",
lazyClass: ".js-video-src",
responsiveClass: ".js-res-video",
preset: els.isGlobal ? "" : "?imbypass=true",
loadOption: [
{
resolution: 1920,
attribute: "data-video-src-pc",
},
{
resolution: 1023,
attribute: "data-video-src-tb",
},
{
resolution: 767,
attribute: "data-video-src-mo",
},
{
resolution: 360,
attribute: "data-video-src-mo-s",
},
],
visiblePoint: 1,
endCallback: function (video) {
if (
video.videoWrap &&
!video.videoWrap.classList.contains("is-loaded")
) {
video.videoWrap.classList.add("is-loaded");
}
},
});
};
const setCenteredfocus = function () {
els.contents = document.querySelector("#contents");
els.allClickables = els.contents.querySelectorAll(
"a, button, input, select"
);
for (let i = 0; i < els.allClickables.length; i++) {
els.allClickables[i].addEventListener(
"focusin",
common.centeredFocus
);
}
};
const setDisclaimerNumber = function () {
const supTag = document.querySelectorAll(".click_sup"),
btmDicl = document.querySelectorAll(
"li.common-bottom-disclaimer__list-item"
);
let btmDiclArr = [];
for (let i = 0; i < btmDicl.length; i++) {
let dataSup = btmDicl[i].getAttribute("data-sup");
btmDiclArr.push(dataSup);
}
for (let j = 0; j < supTag.length; j++) {
let dataSupTag = supTag[j].getAttribute("data-sup-tag");
let supChildCount = supTag[j].parentElement.childElementCount;
if (btmDiclArr.indexOf(dataSupTag) > -1) {
supTag[j].innerText = btmDiclArr.indexOf(dataSupTag) + 1;
} else {
if (supChildCount == 1) {
supTag[j].parentElement.remove();
} else {
let supParent = supTag[j].parentElement.childNodes;
let supArr = [];
for (let supIndex = 0; supIndex < supParent.length; supIndex++) {
supArr.push(supParent[supIndex]);
}
let index = supArr.indexOf(supTag[j]);
if (index != 0 && index % 2 == 0) {
supParent[index].remove();
supParent[index - 1].remove();
} else {
if (index != supArr.length) supParent[index + 1].remove();
supParent[index].remove();
}
}
}
}
};
const setDisclaimer = function () {
els.supClicker = document.querySelectorAll("a.click_sup");
for (let i = 0; i < els.supClicker.length; i++) {
els.supClicker[i].addEventListener("click", common.onClickSup);
}
};
const setVideoTheme = function () {
for (let i = 0; i < els.videoWrap.length; i++) {
let colorType = els.videoWrap[i].getAttribute("data-theme-type");
if (colorType === "white") {
els.videoWrap[i].classList.add("common-video__white");
} else if (colorType === "black") {
els.videoWrap[i].classList.add("common-video__black");
}
}
};
const setVideoBlind = function () {
for (let i = 0; i < els.videoWrap.length; i++) {
els.videoWrap[i].control = els.videoWrap[i].querySelector(
".common-video__control"
);
els.videoWrap[i].blind = els.videoWrap[i].querySelector(".blind");
els.videoWrap[i].blind.innerHTML =
typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI
? LOCAL_VARI.play
: "play";
}
};
const onLoadHandler = function () {
common.addLoadStatusClass();
common.setArBanner();
init();
bindEvents();
setResize();
if (!maxOs && !touchDevice) {
setScrollControl();
}
setImageLoader();
setVideoLoader();
setCenteredfocus();
setDisclaimerNumber();
setDisclaimer();
setVideoTheme();
setVideoBlind();
common.isZoom();
resize.add(common.isZoom);
};
onLoadHandler();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.accordion = (function () {
const resize = window.flagship.common.resize;
let els = {};
let objs = {
accordion: [],
};
let prevDevice = null;
let currDevice = resize.checkResolution();
const init = function () {
els.accordionList = document.querySelectorAll(
".common-accordion__list"
);
if (!!els.accordionList && els.accordionList.length > 0) {
bindEvents();
}
};
const bindEvents = function () {
resize.add(onResizeHandler);
setAccordion();
};
const onResizeHandler = function (currRes) {
currDevice = currRes;
if (currDevice != prevDevice) {
onResponsiveHandler();
prevDevice = currDevice;
}
};
const onResponsiveHandler = function () {
for (let i = 0; i < els.accordionList.length; i++) {
let isOpenedItem = els.accordionList[i].querySelector(".is-open");
if (!!isOpenedItem) {
let isOpenedItemContent = isOpenedItem.querySelector(
".js-accordion-content"
);
let clientHeight = isOpenedItemContent.children[0].clientHeight;
isOpenedItemContent.style.height = `${clientHeight}px`;
}
}
};
const setAccordion = function () {
for (let i = 0; i < els.accordionList.length; i++) {
objs.accordion[i] = new window.flagship.common.accordion({
wrap: els.accordionList[i],
openType: "single",
open: {
start: function (target) {
handlerList.setImages(target);
handlerList.setVideo(target);
},
end: function (target) {
let targetVideo = target.querySelector(
".common-accordion__content video"
);
if (targetVideo && targetVideo.paused) targetVideo.play();
},
},
close: {
start: function (target) {
let targetVideo = target.querySelector(
".common-accordion__content video"
);
if (targetVideo && !targetVideo.paused) {
targetVideo.pause();
targetVideo.currentTime = 0;
}
},
end: function () {},
},
});
objs.accordion[i].init();
}
};
const handlerList = {
setImages: function (target) {
let targetImages = target.querySelectorAll(
".common-accordion__content img"
);
if (targetImages && targetImages.length > 0) {
for (let i = 0; i < targetImages.length; i++) {
if (
!targetImages[i].classList.contains("is-img-load-complete")
) {
imageLoader.setResponsiveMedia([targetImages[i]]);
}
}
}
},
setVideo: function (target) {
let targetVideos = target.querySelectorAll(
".common-accordion__content video"
);
if (targetVideos && targetVideos.length > 0) {
for (let i = 0; i < targetVideos.length; i++) {
if (
!targetVideos[i].classList.contains("is-video-load-complete")
) {
videoLoader.setResponsiveMedia([targetVideos[i]]);
}
}
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.clickToVideo = (function () {
let els = {},
objs = {
clickToVideo: [],
};
const init = function () {
els.clickToVideosWrap = document.querySelectorAll(
".js-scroll-video-disable .common-video"
);
if (els.clickToVideosWrap.length > 0) {
setElements();
setVideo();
}
};
const setElements = function () {
for (let i = 0; i < els.clickToVideosWrap.length; i++) {
els.clickToVideosWrap[i].video = els.clickToVideosWrap[
i
].querySelector(".common-video__figure>video");
els.clickToVideosWrap[i].controller = els.clickToVideosWrap[
i
].querySelector(".common-video__control");
els.clickToVideosWrap[i].controller.video =
els.clickToVideosWrap[i].video;
els.clickToVideosWrap[i].controller.addEventListener(
"click",
clickVideoCta
);
}
};
const setVideo = function () {
for (let i = 0; i < els.clickToVideosWrap.length; i++) {
objs.clickToVideo[i] = ANIUTIL.videoHandler({
wrap: els.clickToVideosWrap[i],
video: els.clickToVideosWrap[i].video,
controller: els.clickToVideosWrap[i].controller,
resetCallback: function () {
if (this.wrap.classList.contains("is-completed")) {
this.wrap.classList.remove("is-completed");
}
},
playCallback: function () {
setTagging.pause(this.controller);
},
pauseCallback: function () {
setTagging.play(this.controller);
},
endCallback: function () {
if (!this.wrap.classList.contains("is-completed")) {
this.wrap.classList.add("is-completed");
}
},
});
}
};
const clickVideoCta = function (e) {
if (e.target == e.currentTarget) {
if (e.currentTarget.video.paused) {
e.currentTarget.video.play();
} else {
e.currentTarget.video.pause();
}
}
};
const setTagging = {
play: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("pause", "play")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("pause", "play")
);
}
},
pause: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("play", "pause")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("play", "pause")
);
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.scrollVideo = (function () {
const utils = window.flagship.common.utils,
resize = window.flagship.common.resize;
let els = {},
objs = {
scrollVideo: [],
scene: [],
},
currDevice = resize.checkResolution();
const init = function () {
els.scrollVideoWraps = document.querySelectorAll(
".common-video.js-scroll-video"
);
els.pageScrollVideoWraps = [];
if (!!els.scrollVideoWraps) {
for (let i = 0; i < els.scrollVideoWraps.length; i++) {
if (
!els.scrollVideoWraps[i].parentElement.classList.contains(
"common-popup__video"
) &&
!els.scrollVideoWraps[i].parentElement.classList.contains(
"js-scroll-video-disable"
)
) {
els.pageScrollVideoWraps.push(els.scrollVideoWraps[i]);
}
}
}
if (els.pageScrollVideoWraps.length > 0) {
setElements();
objList.setVideo();
objList.setScene();
bindEvents();
}
};
const setElements = function () {
for (let i = 0; i < els.pageScrollVideoWraps.length; i++) {
els.pageScrollVideoWraps[i].video = els.pageScrollVideoWraps[
i
].querySelector(".common-video__figure>video");
els.pageScrollVideoWraps[i].controller = els.pageScrollVideoWraps[
i
].querySelector(".common-video__control");
els.pageScrollVideoWraps[i].controller.video =
els.pageScrollVideoWraps[i].video;
els.pageScrollVideoWraps[i].startPoint = !!els.pageScrollVideoWraps[
i
].getAttribute("data-start-point")
? parseInt(
els.pageScrollVideoWraps[i].getAttribute("data-start-point")
)
: undefined;
els.pageScrollVideoWraps[i].reversePoint =
!!els.pageScrollVideoWraps[i].getAttribute("data-reverse-point")
? parseInt(
els.pageScrollVideoWraps[i].getAttribute(
"data-reverse-point"
)
)
: undefined;
els.pageScrollVideoWraps[i].moStartPoint =
!!els.pageScrollVideoWraps[i].getAttribute("data-mo-start-point")
? parseInt(
els.pageScrollVideoWraps[i].getAttribute(
"data-mo-start-point"
)
)
: undefined;
els.pageScrollVideoWraps[i].moReversePoint =
!!els.pageScrollVideoWraps[i].getAttribute(
"data-mo-reverse-point"
)
? parseInt(
els.pageScrollVideoWraps[i].getAttribute(
"data-mo-reverse-point"
)
)
: undefined;
els.pageScrollVideoWraps[i].controller.addEventListener(
"click",
handlerList.videoCta
);
}
};
const bindEvents = function () {
window.addEventListener("scroll", handlerList.scroll);
handlerList.scroll();
resize.add(onResizeHandler);
};
const onResizeHandler = function (currRes) {
currDevice = currRes;
};
const objList = {
setVideo: function () {
for (let i = 0; i < els.pageScrollVideoWraps.length; i++) {
objs.scrollVideo[i] = ANIUTIL.videoHandler({
playType: "scrollPlay",
startPoint:
currDevice.indexOf("mobile") > -1
? els.pageScrollVideoWraps[i].moStartPoint
: els.pageScrollVideoWraps[i].startPoint,
reversePoint:
currDevice.indexOf("mobile") > -1
? els.pageScrollVideoWraps[i].moReversePoint
: els.pageScrollVideoWraps[i].reversePoint,
wrap: els.pageScrollVideoWraps[i],
video: els.pageScrollVideoWraps[i].video,
controller: els.pageScrollVideoWraps[i].controller,
resetCallback: function () {
if (this.wrap.classList.contains("is-completed")) {
this.wrap.classList.remove("is-completed");
}
},
playCallback: function () {
setTagging.pause(this.controller);
},
pauseCallback: function () {
setTagging.play(this.controller);
},
endCallback: function () {
if (!this.wrap.classList.contains("is-completed")) {
this.wrap.classList.add("is-completed");
}
},
});
}
},
setScene: function () {
for (let i = 0; i < els.pageScrollVideoWraps.length; i++) {
objs.scene[i] = SCROLLER({
trackElement: els.pageScrollVideoWraps[i].video,
useFixed: false,
resize: utils.detector.isTouchDevice ? false : true,
});
}
},
};
const handlerList = {
scroll: function () {
for (let i = 0; i < els.pageScrollVideoWraps.length; i++) {
objs.scene[i].trackAnimation(function () {
objs.scrollVideo[i].scrollActive(this.progress);
});
}
},
videoCta: function (e) {
if (e.target == e.currentTarget) {
if (e.currentTarget.video.paused) {
e.currentTarget.video.play();
} else {
e.currentTarget.video.pause();
}
}
},
};
const setTagging = {
play: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("pause", "play")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("pause", "play")
);
}
},
pause: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("play", "pause")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("play", "pause")
);
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.tutorialPopup = function (opts) {
const utils = window.flagship.common.utils;
let els = {};
let status = {};
let show = {},
hide = {};
status.isGlobal = document.documentElement.classList.contains("global");
const init = function () {
setElements();
setOpts();
bindEvent();
};
const setElements = function () {
els.html = document.documentElement;
els.tutorialPopup = opts.tutorialPopup;
els.closeCtas = opts.closeCtas;
els.dimmed = !!!opts.dimmed ? "" : opts.dimmed;
els.tutorialPopupClass = opts.tutorialPopupClass;
};
const setOpts = function () {
show.start = !!!opts.show ? undefined : opts.show.start;
show.end = !!!opts.show ? undefined : opts.show.end;
hide.start = !!!opts.hide ? undefined : opts.hide.start;
hide.end = !!!opts.hide ? undefined : opts.hide.end;
};
const bindEvent = function () {
opts.openerEvent.element.addEventListener("click", showLayer);
els.tutorialPopup.show = showLayer;
els.tutorialPopup.hide = hideLayer;
};
const showLayer = function (e) {
if (opts.openerEvent.proxy) {
if (opts.openerEvent.parent) {
if (
e.target.parentElement.classList.contains(
opts.openerEvent.class
)
) {
els.openerCta = e.target.parentElement;
}
} else {
if (e.target.classList.contains(opts.openerEvent.class)) {
els.openerCta = e.target;
}
}
} else {
els.openerCta = this;
}
els.tutorialPopup.opener = els.openerCta;
if (show.start) show.start(els);
els.html.classList.add("is-layer-open");
utils.hiddenScroll(els.tutorialPopup);
if (utils.detector.isIosDevice) {
els.tutorialPopup.opener.blur();
els.openerCta.style.display = "none";
}
els.closeCtas[0].focus();
setTimeout(function () {
els.closeCtas[0].focus();
}, 400);
for (let i = 0; i < els.closeCtas.length; i++) {
els.closeCtas[i].addEventListener("click", hideLayer);
}
if (els.dimmed) els.dimmed.addEventListener("click", onClickDimmed);
if (show.end) show.end(els);
};
const hideLayer = function () {
if (utils.detector.isIosDevice) els.openerCta.style.display = "";
if (hide.start) hide.start(els);
for (let i = 0; i < els.closeCtas.length; i++) {
els.closeCtas[i].removeEventListener("click", hideLayer);
}
if (els.dimmed)
els.dimmed.removeEventListener("click", onClickDimmed);
els.html.classList.remove("is-layer-open");
utils.visibleScroll();
if (!!!els.openerCta) {
els.tutorialPopup.opener.focus();
} else {
els.openerCta.focus();
}
setTimeout(function () {
if (!!!els.openerCta) {
els.tutorialPopup.opener.focus();
} else {
els.openerCta.focus();
}
}, 300);
if (hide.end) hide.end(els);
};
const onClickDimmed = function (e) {
if (e.currentTarget == e.target) {
hideLayer();
}
};
return init();
};
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.camera = (function () {
let els = {};
let objs = {};
const init = function () {
els.section = document.querySelector(".highlights-camera");
if (!!els.section) {
bindEvents();
}
};
const bindEvents = function () {
setScene();
window.addEventListener("scroll", scrollHandler);
};
const setScene = function () {
TweenMax.set(els.section, { y: 150 });
objs.scene = SCROLLER({
trackElement: els.section,
useFixed: false,
});
};
const scrollHandler = function () {
objs.scene.trackAnimation(function () {
let activeValue = ANIUTIL.calRange({
targetValue: 1,
progress: this.progress,
startPoint: 0,
endPoint: 40,
});
let moveValue = ANIUTIL.calRange({
targetValue: 150,
progress: this.progress,
startPoint: 0,
endPoint: 40,
});
TweenMax.to(els.section, 0, { y: 150 - moveValue });
els.section.style.opacity = activeValue;
});
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.cameraAi = (function () {
let els = {};
let objs = {};
const init = function () {
els.section = document.querySelector(".highlights-ai");
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.gradient = els.section.querySelector(".highlights-ai__gradient");
els.text = els.section.querySelector(".common-headline span");
els.intelligence = els.section.querySelector(
".highlights-ai__intelligence video"
);
};
const bindEvents = function () {
setScene();
window.addEventListener("scroll", scrollHandler);
scrollHandler();
};
const setScene = function () {
TweenMax.set(els.section, { y: 100 });
objs.scene = SCROLLER({
trackElement: els.section,
useFixed: false,
});
};
const scrollHandler = function () {
objs.scene.trackAnimation(function () {
let activeValue = ANIUTIL.calRange({
targetValue: 70,
progress: this.progress,
startPoint: 10,
endPoint: 30,
});
TweenMax.to(els.section, 0, { y: 100 - activeValue });
let _active = function () {
if (els.intelligence.readyState < 4) {
els.intelligence.addEventListener("canplay", function () {
if (
!els.section.classList.contains("is-active") &&
els.intelligence.paused
) {
els.intelligence.currentTime = 0;
els.intelligence.play();
}
});
} else {
if (
!els.section.classList.contains("is-active") &&
els.intelligence.paused
) {
els.intelligence.currentTime = 0;
els.intelligence.play();
}
}
if (!els.section.classList.contains("is-active")) {
setTimeout(() => {
els.section.classList.add("is-active");
}, 700);
}
};
if (
this.wheelDirection == "down" &&
this.progress > 40 &&
this.progress < 70
) {
_active();
} else if (
this.wheelDirection == "up" &&
this.progress > 50 &&
this.progress < 70
) {
_active();
}
if (this.progress == 0 || this.progress == 100) {
els.section.classList.remove("is-active");
els.intelligence.pause();
els.intelligence.currentTime = 0;
}
});
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.chatAssistTutorial = (function () {
const utils = window.flagship.common.utils;
const common = window.flagship.highlights.common;
let els = {};
let objs = {};
let stepInfo = [];
let status = {};
const init = function () {
els.section = document.querySelector(
".highlights-chat-assist-tutorial"
);
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.tutorialVideoContainer = els.section.querySelector(
".common-tutorial__main-video"
);
els.videoList = els.tutorialVideoContainer.querySelectorAll(
".common-tutorial__video"
);
els.videoWrap = els.tutorialVideoContainer.querySelectorAll(
".common-tutorial__video .common-video"
);
els.videos = els.tutorialVideoContainer.querySelectorAll(
".common-tutorial__video .common-video__video"
);
els.tooltipCta = els.tutorialVideoContainer.querySelectorAll(
".js-tutorial-tooltip-cta"
);
els.tutorialReplay = els.tutorialVideoContainer.querySelector(
".common-tutorial__replay-cta"
);
};
const setProperty = function (el, index) {
el.video = el.querySelector("video");
el.controller = el.querySelector(".common-video__control");
el.controller.video = el.querySelector("video");
el.alert = el.parentElement.querySelector(".common-tutorial__alert");
el.tooltip = el.parentElement.querySelector(".js-tutorial-tooltip");
el.tooltipCta = el.parentElement.querySelector(
".js-tutorial-tooltip-cta"
);
el.video.playIndex = index;
};
const setStepStatus = function (el) {
stepInfo.push({
alert: el.getAttribute("data-alert"),
tooltip: el.getAttribute("data-tooltip"),
});
};
const eventList = {
videoController: function () {
for (let i = 0; i < objs.videos.length; i++) {
objs.videos[i].controller.addEventListener("click", function () {
if (this.video.paused) {
this.video.play();
} else {
this.video.pause();
}
});
}
},
nextVideoPlay: function (index) {
if (!!els.videoList[index].tooltip) {
utils.onAccessibility(els.videoList[index].tooltip);
}
els.videoList[index + 1].classList.add("is-visible");
utils.onAccessibility(els.videoList[index]);
if (els.videos[index + 1].readyState > 3) {
els.videos[index + 1].play();
} else {
els.videos[index + 1].addEventListener("canplay", function () {
if (this.paused) this.play();
});
}
setTimeout(() => {
els.videoList[index].classList.remove("is-visible");
if (!!els.videoList[index].tooltipCta) {
els.videoList[index].tooltipCta.blur();
}
els.videos[index + 1].videoWrap.controller.focus();
}, 200);
},
click: function () {
let self = this;
for (let i = 0; i < els.tooltipCta.length; i++) {
els.tooltipCta[i].addEventListener("click", function () {
self.nextVideoPlay(i);
});
}
},
endCallback: function () {
if (stepInfo[this.video.playIndex].tooltip == "true") {
this.wrap.tooltipCta.removeAttribute("disabled");
this.wrap.tooltip.classList.add("is-visible");
}
if (stepInfo[this.video.playIndex].alert == "true") {
this.wrap.alert.classList.add("is-visible");
}
if (!this.wrap.classList.contains("is-completed")) {
this.wrap.classList.add("is-completed");
this.controller.style.display = "none";
}
},
};
const setVideos = function () {
objs.videos = [];
for (let i = 0; i < els.videoWrap.length; i++) {
let isVideoWrap = els.videoWrap[i];
objs.videos.push(
ANIUTIL.videoHandler({
wrap: isVideoWrap,
video: isVideoWrap.video,
controller: isVideoWrap.controller,
resetCallback: function () {
if (this.wrap.classList.contains("is-completed")) {
this.wrap.classList.remove("is-completed");
if ((this.controller.style.display = "none"))
this.controller.style.display = "";
}
},
playCallback: function () {
els.videoList[this.video.playIndex].removeAttribute(
"tabindex"
);
els.videoList[this.video.playIndex].removeAttribute(
"aria-hidden"
);
this.controller.style.display = "block";
utils.offAccessibility(this.controller);
setTagging.pause(this.controller);
let nextPlayindex = this.video.playIndex + 1;
if (
els.videos.length - 1 > this.video.playIndex &&
els.videos[nextPlayindex].readyState < 4
) {
videoLoader.setResponsiveMedia([els.videos[nextPlayindex]]);
}
},
pauseCallback: function () {
setTagging.play(this.controller);
},
endCallback: function () {
if (!!this.wrap.tooltip) {
let self = this;
utils.offAccessibility(this.wrap.tooltip);
setTimeout(function () {
self.wrap.tooltipCta.focus();
}, 200);
}
this.controller.style.display = "none !important";
eventList.endCallback.call(this);
if (els.videos.length - 1 == this.video.playIndex) {
els.tutorialReplay.style.display = "block";
els.tutorialReplay.removeAttribute("tabindex");
els.tutorialReplay.removeAttribute("aria-hidden");
els.tutorialReplay.focus();
}
},
})
);
}
};
const setTagging = {
play: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("pause", "play")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("pause", "play")
);
}
},
pause: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("play", "pause")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("play", "pause")
);
}
},
};
const bindEvents = function () {
for (let i = 0; i < els.videoWrap.length; i++) {
setProperty(els.videoWrap[i], i);
setStepStatus(els.videoList[i]);
}
setVideos();
eventList.videoController();
eventList.click();
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.circleToSearchTutorial = (function () {
const utils = window.flagship.common.utils;
const common = window.flagship.highlights.common;
let els = {};
let objs = {};
let stepInfo = [];
let status = {};
const init = function () {
els.section = document.querySelector(
".highlights-circle-to-search-tutorial"
);
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.tutorialVideoContainer = els.section.querySelector(
".common-tutorial__main-video"
);
els.videoList = els.tutorialVideoContainer.querySelectorAll(
".common-tutorial__video"
);
els.videoWrap = els.tutorialVideoContainer.querySelectorAll(
".common-tutorial__video .common-video"
);
els.videos = els.tutorialVideoContainer.querySelectorAll(
".common-tutorial__video .common-video__video"
);
els.tooltipCta = els.tutorialVideoContainer.querySelectorAll(
".js-tutorial-tooltip-cta"
);
els.tutorialReplay = els.tutorialVideoContainer.querySelector(
".common-tutorial__replay-cta"
);
status.isKeydownTime = null;
};
const setProperty = function (el, index) {
el.video = el.querySelector("video");
el.controller = el.querySelector(".common-video__control");
el.controller.video = el.querySelector("video");
el.alert = el.parentElement.querySelector(".common-tutorial__alert");
el.tooltip = el.parentElement.querySelector(".js-tutorial-tooltip");
el.tooltipCta = el.parentElement.querySelector(
".js-tutorial-tooltip-cta"
);
el.video.playIndex = index;
};
const setStepStatus = function (el) {
stepInfo.push({
alert: el.getAttribute("data-alert"),
tooltip: el.getAttribute("data-tooltip"),
});
};
const eventList = {
videoController: function () {
for (let i = 0; i < objs.videos.length; i++) {
objs.videos[i].controller.addEventListener("click", function () {
if (this.video.paused) {
this.video.play();
} else {
this.video.pause();
}
});
}
},
nextVideoPlay: function (index) {
if (!!els.videoList[index].tooltip) {
utils.onAccessibility(els.videoList[index].tooltip);
}
els.videoList[index + 1].classList.add("is-visible");
utils.onAccessibility(els.videoList[index]);
if (els.videos[index + 1].readyState > 3) {
els.videos[index + 1].play();
} else {
els.videos[index + 1].addEventListener("canplay", function () {
if (this.paused) this.play();
});
}
setTimeout(() => {
els.videoList[index].classList.remove("is-visible");
if (!!els.videoList[index].tooltipCta) {
els.videoList[index].tooltipCta.blur();
}
els.videos[index + 1].videoWrap.controller.focus();
}, 200);
},
click: function () {
els.tooltipCta[0].addEventListener(
"mousedown",
eventList.pressButton
);
els.tooltipCta[0].addEventListener("mouseup", function () {
clearTimeout(status.mousedown);
});
els.tooltipCta[0].addEventListener(
"touchstart",
eventList.pressButton
);
els.tooltipCta[0].addEventListener("touchend", function () {
clearTimeout(status.mousedown);
});
els.tooltipCta[0].addEventListener(
"keydown",
eventList.keydownButton
);
els.tooltipCta[1].addEventListener("click", function () {
eventList.nextVideoPlay(2);
});
},
pressButton: function (e) {
e.preventDefault();
if (els.videos[2].readyState < 4) {
videoLoader.setResponsiveMedia([els.videos[2]]);
}
clearTimeout(status.mousedown);
status.mousedown = setTimeout(() => {
eventList.nextVideoPlay(1);
}, 1000);
},
keydownButton: function (e) {
if (e.type == "keydown" && e.keyCode != 13) return;
if (status.isKeydownTime == null) {
status.isKeydownTime = Date.now();
} else {
let keyDownDuration = Date.now() - status.isKeydownTime;
if (keyDownDuration >= 1000) {
if (els.videos[2].readyState < 4) {
videoLoader.setResponsiveMedia([els.videos[2]]);
}
eventList.nextVideoPlay(1);
status.isKeydownTime = null;
}
}
},
endCallback: function () {
let autoplay =
this.video.playIndex == 0 || this.video.playIndex == 3;
if (stepInfo[this.video.playIndex].tooltip == "true") {
this.wrap.tooltipCta.removeAttribute("disabled");
this.wrap.tooltip.classList.add("is-visible");
}
if (stepInfo[this.video.playIndex].alert == "true") {
this.wrap.alert.classList.add("is-visible");
}
if (autoplay) {
eventList.nextVideoPlay(this.video.playIndex);
}
if (!this.wrap.classList.contains("is-completed")) {
this.wrap.classList.add("is-completed");
this.controller.style.display = "none";
}
},
};
const setVideos = function () {
objs.videos = [];
for (let i = 0; i < els.videoWrap.length; i++) {
let isVideoWrap = els.videoWrap[i];
objs.videos.push(
ANIUTIL.videoHandler({
wrap: isVideoWrap,
video: isVideoWrap.video,
controller: isVideoWrap.controller,
resetCallback: function () {
if (this.wrap.classList.contains("is-completed")) {
this.wrap.classList.remove("is-completed");
if ((this.controller.style.display = "none"))
this.controller.style.display = "";
}
},
playCallback: function () {
els.videoList[this.video.playIndex].removeAttribute(
"tabindex"
);
els.videoList[this.video.playIndex].removeAttribute(
"aria-hidden"
);
this.controller.style.display = "block";
utils.offAccessibility(this.controller);
setTagging.pause(this.controller);
switch (this.video.playIndex) {
case 2:
videoLoader.setResponsiveMedia([
els.videos[3],
els.videos[4],
]);
break;
default:
break;
}
},
pauseCallback: function () {
setTagging.play(this.controller);
},
endCallback: function () {
if (!!this.wrap.tooltip) {
let self = this;
utils.offAccessibility(this.wrap.tooltip);
setTimeout(function () {
self.wrap.tooltipCta.focus();
}, 200);
}
this.controller.style.display = "none !important";
eventList.endCallback.call(this);
if (els.videos.length - 1 == this.video.playIndex) {
els.tutorialReplay.style.display = "block";
els.tutorialReplay.removeAttribute("tabindex");
els.tutorialReplay.removeAttribute("aria-hidden");
els.tutorialReplay.focus();
}
},
})
);
}
};
const setTagging = {
play: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("pause", "play")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("pause", "play")
);
}
},
pause: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("play", "pause")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("play", "pause")
);
}
},
};
const bindEvents = function () {
for (let i = 0; i < els.videoWrap.length; i++) {
setProperty(els.videoWrap[i], i);
setStepStatus(els.videoList[i]);
}
setVideos();
eventList.videoController();
eventList.click();
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.color = (function () {
const utils = window.flagship.common.utils;
const resize = window.flagship.common.resize;
let els = {},
status = {},
objs = {};
let activeClass = "is-active";
let oldIndex = null;
let currDevice = resize.checkResolution();
let prevDevice = null;
const init = function () {
els.section = document.querySelector(".highlights-color");
if (!!els.section) {
setElements();
setStatus();
bindEvents();
}
};
const setElements = function () {
// topSwiper
els.topSwiperWrap = els.section.querySelector(
".highlights-color__carousel"
);
if (!!els.topSwiperWrap) {
els.topSwiperSlides = els.topSwiperWrap.querySelectorAll(
".highlights-color__carousel-slide"
);
if (els.topSwiperSlides.length > 1) {
els.topSwiperContainer = els.section.querySelector(
".highlights-color__carousel-container"
);
els.topSwiperNextArrow = els.topSwiperContainer.querySelector(
".highlights-color__arrow--next"
);
els.topSwiperPrevArrow = els.topSwiperContainer.querySelector(
".highlights-color__arrow--prev"
);
els.topSwiperPagination = els.section.querySelector(
".highlights-color__pagination"
);
}
}
// colorchipSwiper
els.colorchipWrap = els.section.querySelector(
".highlights-color__tab-colors"
);
els.colorchipSwiperContainer =
els.colorchipWrap.querySelector(".swiper-container");
els.colorchipSwiperArrowWrap = els.colorchipWrap.querySelector(
".highlights-color__tab-navigation"
);
els.colorchipSwiperNextArrow = els.colorchipWrap.querySelector(
".highlights-color__navigation-arrow--next"
);
els.colorchipSwiperPrevArrow = els.colorchipWrap.querySelector(
".highlights-color__navigation-arrow--prev"
);
// colorchipItem
els.colorchipItemWrap = els.section.querySelector(
".highlights-color__tab"
);
els.colorchipItems = els.colorchipItemWrap.querySelectorAll(
".highlights-color__tab-item"
);
els.colorchipBtns = els.colorchipItemWrap.querySelectorAll(
".highlights-color__tab-button"
);
for (let i = 0; i < els.colorchipBtns.length; i++) {
els.colorchipBtns[i].setAttribute("data-js-index", i);
}
// colorName
els.colorNameWrap = els.section.querySelector(
".highlights-color__tab-names"
);
els.colorNames = els.colorNameWrap.querySelectorAll(
".highlights-color__tab-name"
);
// colorPanel
els.panelWrap = els.section.querySelector(
".highlights-color__tab-panel-group"
);
els.panels = els.panelWrap.querySelectorAll(
".highlights-color__tab-panel"
);
// 360 Popup Btn
els.popupBtn = els.section.querySelector(".common-cta-area button");
};
const setStatus = function () {
status.isClick = false;
// index
status.targetIndex = null;
status.oldColorIndex = null;
};
const bindEvents = function () {
resize.add(handlerList.onResize);
setColorchipEvent();
if (
!els.topSwiperWrap ||
(!!els.topSwiperWrap &&
!!els.topSwiperSlides &&
els.topSwiperSlides.length < 2)
)
return;
setTimeout(function () {
window.addEventListener("scroll", handlerList.scroll);
}, 1000);
objList.setScene();
setSwiper.top();
els.topSwiperNextArrow.addEventListener(
"click",
handlerList.onClickArrow
);
els.topSwiperNextArrow.addEventListener(
"keydown",
handlerList.onClickArrow
);
els.topSwiperPrevArrow.addEventListener(
"click",
handlerList.onClickArrow
);
els.topSwiperPrevArrow.addEventListener(
"keydown",
handlerList.onClickArrow
);
};
const setColorchipEvent = function () {
let colorchipSwiperLength = currDevice.indexOf("mobile") > -1 ? 5 : 7;
if (els.colorchipBtns.length >= colorchipSwiperLength) {
status.isLoop = true;
oldIndex = els.colorchipBtns.length;
if (els.colorchipSwiperArrowWrap.style.display == "none") {
els.colorchipSwiperArrowWrap.style.display = "";
}
if (els.colorchipWrap.classList.contains("js-colorchip-static")) {
els.colorchipWrap.classList.remove("js-colorchip-static");
}
setSwiper.colorchip();
} else {
status.isLoop = false;
if (els.colorchipSwiperArrowWrap.style.display != "none") {
els.colorchipSwiperArrowWrap.style.display = "none";
}
if (!els.colorchipWrap.classList.contains("js-colorchip-static")) {
els.colorchipWrap.classList.add("js-colorchip-static");
}
if (objs.colorchipSwiper != null) {
let realIndex = objs.colorchipSwiper.realIndex;
if (
!els.colorchipBtns[realIndex].classList.contains(activeClass)
) {
els.colorchipBtns[realIndex].classList.add(activeClass);
els.colorchipBtns[realIndex].setAttribute(
"aria-selected",
true
);
}
swiperEvents.colorchip.destroy();
}
let currentColorchip = els.colorchipItemWrap.querySelector(
`.${activeClass}`
);
status.oldColorIndex =
currentColorchip.getAttribute("data-js-index");
for (let i = 0; i < els.colorchipBtns.length; i++) {
els.colorchipBtns[i].addEventListener(
"click",
handlerList.onClickColorchip
);
els.colorchipItems[i].removeAttribute("tabindex");
els.colorchipItems[i].removeAttribute("aria-hidden");
}
}
};
const objList = {
topSwiper: function () {
if (objs.topSwiper == null) {
objs.topSwiper = new Swiper(els.topSwiperContainer, {
init: false,
speed: 800,
navigation: {
nextEl: els.topSwiperNextArrow,
prevEl: els.topSwiperPrevArrow,
},
pagination: {
el: els.topSwiperPagination,
type: "bullets",
clickable: true,
renderBullet: function () {
return '';
},
},
slidesPerView: "auto",
centeredSlides: true,
});
}
},
colorchipSwiper: function () {
if (objs.colorchipSwiper == null) {
objs.colorchipSwiper = new Swiper(els.colorchipSwiperContainer, {
init: false,
navigation: {
nextEl: els.colorchipSwiperNextArrow,
prevEl: els.colorchipSwiperPrevArrow,
},
slidesPerView: "auto",
centeredSlides: true,
loop: true,
speed: 300,
touchRatio: 0,
});
}
},
setScene: function () {
objs.topScene = SCROLLER({
trackElement: els.topSwiperContainer,
useFixed: false,
resize: utils.detector.isTouchDevice ? false : true,
});
},
};
const setSwiper = {
top: function () {
objList.topSwiper();
objs.topSwiper.on("init", swiperEvents.top.init);
objs.topSwiper.on("slideChange", swiperEvents.top.slideChange);
objs.topSwiper.init();
},
colorchip: function () {
objList.colorchipSwiper();
objs.colorchipSwiper.on("init", swiperEvents.colorchip.init);
objs.colorchipSwiper.on(
"slideChange",
swiperEvents.colorchip.slideChange
);
objs.colorchipSwiper.on(
"transitionEnd",
swiperEvents.colorchip.transitionEnd
);
objs.colorchipSwiper.init();
els.loopColorchipBtns = els.section.querySelectorAll(
".highlights-color__tab-button"
);
for (let i = 0; i < els.loopColorchipBtns.length; i++) {
els.loopColorchipBtns[i].index = i;
els.loopColorchipBtns[i].addEventListener(
"click",
handlerList.onClickColorchip
);
}
if (status.targetIndex != 0) status.targetIndex = 0;
eventList.colorchip();
eventList.colorName();
eventList.panel();
},
};
const swiperEvents = {
top: {
init: function () {
let notification = this.el.querySelector(".swiper-notification");
let bullets = this.pagination.bullets;
this.slides[this.activeIndex].style.transitionDuration = "0s";
setTimeout(() => {
this.slides[this.activeIndex].style.transitionDuration = "";
}, 100);
if (!!notification) this.el.removeChild(notification);
accessibility.slide.top(objs.topSwiper);
accessibility.pagination.tagging(bullets);
accessibility.pagination.label(bullets);
els.topSwiperPrevArrow.removeAttribute("aria-label");
els.topSwiperNextArrow.removeAttribute("aria-label");
setTimeout(function () {
handlerList.scroll();
}, 900);
status.isTest = false;
for (let i = 0; i < bullets.length; i++) {
bullets[i].removeAttribute("role");
bullets[i].addEventListener("click", function (e) {
e.preventDefault();
e.stopPropagation();
objs.topSwiper.slideTo(i);
});
}
},
slideChange: function () {
accessibility.slide.top(objs.topSwiper);
accessibility.pagination.label(objs.topSwiper.pagination.bullets);
},
},
colorchip: {
init: function () {
let notification = this.el.querySelector(".swiper-notification");
if (!!notification) this.el.removeChild(notification);
accessibility.slide.colorchip(objs.colorchipSwiper);
els.colorchipSwiperPrevArrow.removeAttribute("aria-label");
els.colorchipSwiperNextArrow.removeAttribute("aria-label");
let cloneSlide = this.el.querySelectorAll(
".swiper-slide-duplicate"
);
for (let i = 0; i < cloneSlide.length; i++) {
let activeClone = cloneSlide[i].querySelector(
".highlights-color__tab-button.is-active"
);
if (!!activeClone) activeClone.classList.remove("is-active");
}
},
slideChange: function () {
let activeIndex = this.activeIndex;
let oldColor = els.loopColorchipBtns[oldIndex];
status.oldColorIndex = oldColor.getAttribute("data-js-index");
status.targetIndex =
els.loopColorchipBtns[activeIndex].getAttribute(
"data-js-index"
);
eventList.colorchip();
eventList.colorName();
eventList.panel();
accessibility.slide.colorchip(objs.colorchipSwiper);
eventList.setPopupBtnColor(els.panels[status.targetIndex]);
oldIndex = activeIndex;
},
transitionEnd: function () {
if (status.isClick) status.isClick = false;
},
destroy: function () {
objs.colorchipSwiper.destroy(true);
objs.colorchipSwiper = null;
},
},
};
const handlerList = {
scroll: function () {
objs.topScene.trackAnimation(function () {
if (
this.wheelDirection == "down" &&
this.progress > 45 &&
this.progress < 70
) {
if (objs.topSwiper != null) {
objs.topSwiper.slideNext();
objs.topScene.destroy();
window.removeEventListener("scroll", handlerList.scroll);
}
} else if (this.wheelDirection == "up" && this.progress < 50) {
if (objs.topSwiper != null) {
objs.topSwiper.slideNext();
objs.topScene.destroy();
window.removeEventListener("scroll", handlerList.scroll);
}
}
});
},
onResize: function (currRes) {
currDevice = currRes;
if (currDevice !== prevDevice) {
setColorchipEvent();
if (objs.colorchipSwiper != null) {
accessibility.slide.colorchip(objs.colorchipSwiper);
}
prevDevice = currDevice;
}
},
onClickArrow: function (e) {
status.isArrowClick = true;
status.arrowStyleTimeout = null;
if ((e.type == "keydown" && e.keyCode == 13) || e.type == "click") {
e.preventDefault();
if (objs.topSwiper.isBeginning && !objs.topSwiper.isEnd) {
els.topSwiperPrevArrow.style.setProperty(
"display",
"block",
"important"
);
clearTimeout(status.arrowTimeout);
status.arrowTimeout = setTimeout(function () {
els.topSwiperNextArrow.focus();
}, 300);
clearTimeout(status.arrowStyleTimeout);
status.arrowStyleTimeout = setTimeout(function () {
els.topSwiperPrevArrow.style.display = "";
}, 400);
} else if (!objs.topSwiper.isBeginning && objs.topSwiper.isEnd) {
els.topSwiperNextArrow.style.setProperty(
"display",
"block",
"important"
);
clearTimeout(status.arrowTimeout);
status.arrowTimeout = setTimeout(function () {
els.topSwiperPrevArrow.focus();
}, 300);
clearTimeout(status.arrowStyleTimeout);
status.arrowStyleTimeout = setTimeout(function () {
els.topSwiperNextArrow.style.display = "";
}, 400);
}
}
},
onClickColorchip: function () {
status.isClick = true;
let targetColor = this;
if (status.isLoop) {
if (targetColor.classList.contains("is-active")) return;
eventList.slideTo(targetColor);
} else {
status.targetIndex = targetColor.getAttribute("data-js-index");
eventList.colorchip();
eventList.colorName();
eventList.panel();
status.oldColorIndex = status.targetIndex;
}
},
};
const eventList = {
colorchip: function () {
let oldColor = els.colorchipItemWrap.querySelectorAll(
`.${activeClass}`
);
let activeIndex = status.isLoop
? objs.colorchipSwiper.activeIndex
: status.targetIndex;
let targetColorchipBtns = status.isLoop
? els.loopColorchipBtns[activeIndex]
: els.colorchipBtns[activeIndex];
if (!targetColorchipBtns.classList.contains(activeClass)) {
for (let i = 0; i < oldColor.length; i++) {
oldColor[i].classList.remove(activeClass);
oldColor[i].setAttribute("aria-selected", false);
}
targetColorchipBtns.classList.add(activeClass);
targetColorchipBtns.setAttribute("aria-selected", true);
}
},
colorName: function () {
for (let i = 0; i < els.colorNames.length; i++) {
if (els.colorNames[i].classList.contains(activeClass)) {
els.colorNames[i].classList.remove(activeClass);
}
}
if (
!els.colorNames[status.targetIndex].classList.contains(
activeClass
)
) {
els.colorNames[status.targetIndex].classList.add(activeClass);
}
},
panel: function () {
for (let i = 0; i < els.panels.length; i++) {
if (els.panels[i].classList.contains(activeClass)) {
els.panels[i].classList.remove(activeClass);
els.panels[i].setAttribute("aria-hidden", true);
}
}
if (
!els.panels[status.targetIndex].classList.contains(activeClass)
) {
els.panels[status.targetIndex].classList.add(activeClass);
els.panels[status.targetIndex].setAttribute("aria-hidden", false);
els.popupBtn.setAttribute(
"data-model-color",
els.panels[status.targetIndex].getAttribute("id")
);
}
if (status.targetIndex != 0) {
let targetPanelImgs =
els.panels[status.targetIndex].querySelectorAll("img");
if (
!targetPanelImgs[0].classList.contains("is-img-load-complete")
) {
imageLoader.setResponsiveMedia([targetPanelImgs[0]]);
}
if (
!targetPanelImgs[1].classList.contains("is-img-load-complete")
) {
imageLoader.setResponsiveMedia([targetPanelImgs[1]]);
}
}
},
slideTo: function (targetColor) {
let self = objs.colorchipSwiper;
let activeIndex = targetColor.index;
objs.slideChangeTime = null;
if (status.isClick) {
let moveSize = oldIndex - activeIndex;
if (moveSize > 0) {
if (moveSize == 1) {
objs.colorchipSwiper.slidePrev();
} else if (moveSize == 3) {
objs.colorchipSwiper.slidePrev(0);
objs.colorchipSwiper.slidePrev(0);
self.slidePrev();
} else {
objs.colorchipSwiper.slidePrev(0);
self.slidePrev();
}
} else {
if (moveSize == -1) {
objs.colorchipSwiper.slideNext();
} else if (moveSize == -3) {
objs.colorchipSwiper.slideNext(0);
objs.colorchipSwiper.slideNext(0);
self.slideNext();
} else {
objs.colorchipSwiper.slideNext(0);
self.slideNext();
}
}
self.slides[self.activeIndex].querySelector("button").focus();
clearTimeout(objs.slideChangeTime);
objs.slideChangeTime = setTimeout(function () {
self.slides[self.activeIndex].querySelector("button").focus();
}, 200);
status.isClick = false;
}
},
setPopupBtnColor: function (target) {
els.popupBtn.setAttribute(
"data-model-color",
target.getAttribute("id")
);
},
};
const accessibility = {
slide: {
top: function (swiperObjs) {
for (let i = 0; i < swiperObjs.slides.length; i++) {
if (i != swiperObjs.activeIndex) {
utils.onAccessibility(swiperObjs.slides[i]);
} else {
utils.offAccessibility(swiperObjs.slides[i]);
}
}
},
colorchip: function (swiperObjs) {
let isNotActivedColorchips = null;
for (let i = 0; i < swiperObjs.slides.length; i++) {
if (currDevice.indexOf("mobile") > -1) {
isNotActivedColorchips =
(i != swiperObjs.activeIndex &&
i > swiperObjs.activeIndex + 2) ||
i < swiperObjs.activeIndex - 2;
} else {
isNotActivedColorchips =
(i != swiperObjs.activeIndex &&
i > swiperObjs.activeIndex + 3) ||
i < swiperObjs.activeIndex - 3;
}
if (isNotActivedColorchips) {
utils.onAccessibility(swiperObjs.slides[i]);
} else {
utils.offAccessibility(swiperObjs.slides[i]);
}
}
},
},
pagination: {
tagging: function (pagination) {
const tagging = {
"data-omni-type": "microsite_gallery",
"data-omni": "galaxy-s24-ultra:highlights:design^colors:index:",
"ga-ca": "gallery",
"ga-ac": "feature gallery",
"ga-la": "galaxy-s24-ultra:highlights:design^colors:index:",
};
if (!!pagination) {
for (let i = 0; i < pagination.length; i++) {
Object.keys(tagging).forEach((key) => {
if (key == "data-omni" || key == "ga-la") {
pagination[i].setAttribute(key, tagging[key] + (i + 1));
} else {
pagination[i].setAttribute(key, tagging[key]);
}
});
}
}
},
label: function (bullets) {
for (let i = 0; i < bullets.length; i++) {
let isExclusive =
objs.topSwiper.slides[i].getAttribute("data-colortype") ==
"true"
? true
: false;
let slideName;
if (typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI) {
slideName = !!isExclusive
? LOCAL_VARI.exclusive
: LOCAL_VARI.default;
if (i === objs.topSwiper.realIndex) {
bullets[i].setAttribute(
"aria-label",
`${LOCAL_VARI.slide}${
i + 1
}: ${slideName} ${LOCAL_VARI.selected.toLowerCase()}`
);
} else {
bullets[i].setAttribute(
"aria-label",
`${LOCAL_VARI.slide}${i + 1}: ${slideName}`
);
}
} else {
slideName = !!isExclusive
? "online exclusive color"
: "default color";
if (i === objs.topSwiper.realIndex) {
bullets[i].setAttribute(
"aria-label",
`Slide${i + 1}: ${slideName} selected`
);
} else {
bullets[i].setAttribute(
"aria-label",
`Slide${i + 1}: ${slideName}`
);
}
}
}
},
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.display = (function () {
const utils = window.flagship.common.utils;
const resize = window.flagship.common.resize;
let els = {};
let objs = {};
let status = {};
let currDevice = resize.checkResolution();
let prevDevice = null;
const init = function () {
els.section = document.querySelector(".highlights-display");
if (!!els.section) {
setElements();
setStatus();
bindEvents();
}
};
const setElements = function () {
els.resizeTimeout = null;
els.displayBarWrap = els.section.querySelector(
".highlights-display__bar"
);
els.displayBar = els.displayBarWrap.querySelector(".bar");
els.displayImage = els.section.querySelector(
".highlights-display__image"
);
els.displayCoverImage = els.section.querySelector(
".highlights-display__cover"
);
els.isGrab = false;
els.isAction = false;
els.displayCoverLeftWrap = els.section.querySelector(
".highlights-display__tap-left"
);
els.displayCoverLeftBtn = els.section.querySelector(
".highlights-display__tap-left button"
);
els.displayCoverRightBtn = els.section.querySelector(
".highlights-display__tap-right button"
);
els.controller = els.section.querySelector(
".highlights-display__bar-controller"
);
els.imgWrap = els.section.querySelector(
".highlights-display__image-inner"
);
els.tabWrap = els.section.querySelector(
".highlights-display__tap-wrap"
);
maxPercent = currDevice.indexOf("mobile") > -1 ? 0.675 : 0.75;
minPercent = currDevice.indexOf("mobile") > -1 ? 0.325 : 0.25;
};
const setStatus = function () {
status.isTabMove = false;
};
const bindEvents = function () {
window.addEventListener("DOMContentLoaded", onLoadHandler, {
once: true,
});
window.addEventListener("scroll", onScrollHandler);
els.section.addEventListener("keydown", grabEventHandler.onMoveEvent);
els.section.addEventListener("click", grabEventHandler.onMoveEvent);
els.section.addEventListener("mousedown", grabEventHandler.onStart);
els.section.addEventListener("mousemove", grabEventHandler.onMove);
els.section.addEventListener("mouseup", grabEventHandler.onEnd);
els.section.addEventListener("mouseleave", grabEventHandler.onEnd);
els.section.addEventListener("touchstart", grabEventHandler.onStart);
els.section.addEventListener("touchmove", grabEventHandler.onMove);
els.section.addEventListener("touchend", grabEventHandler.onEnd);
els.section.addEventListener("touchcancel", grabEventHandler.onEnd);
resize.add(onResizeHandler);
};
const setAnimations = function () {
let minValue = currDevice.indexOf("mobile") > -1 ? 32.5 : 25;
let maxValue = currDevice.indexOf("mobile") > -1 ? 67.5 : 75;
TweenMax.set(els.displayBar, {
left: `${minValue}%`,
ease: Power2.easeOut,
});
TweenMax.set(els.displayCoverImage, {
width: `${minValue}%`,
ease: Power2.easeOut,
});
objs.barAnim = new TimelineLite();
objs.barAnim
.to(els.displayBar, 1, {
left: `${maxValue}%`,
ease: Power2.easeOut,
})
.to(els.displayBar, 1, { left: 50 + "%", ease: Power2.easeOut });
objs.imgAnim = new TimelineLite();
objs.imgAnim
.to(els.displayCoverImage, 1, {
width: `${maxValue}%`,
ease: Power2.easeOut,
})
.to(els.displayCoverImage, 1, {
width: 50 + "%",
ease: Power2.easeOut,
});
TweenMax.set(els.displayCoverLeftWrap, {
width: `${minValue}%`,
ease: Power2.easeOut,
});
objs.imgAnim = new TimelineLite();
objs.imgAnim
.to(els.displayCoverLeftWrap, 1, {
width: `${maxValue}%`,
ease: Power2.easeOut,
})
.to(els.displayCoverLeftWrap, 1, {
width: 50 + "%",
ease: Power2.easeOut,
});
};
const onLoadHandler = function () {
onScrollHandler();
};
const onResizeHandler = function (currRes) {
currDevice = currRes;
clearTimeout(els.resizeTimeout);
els.resizeTimeout = setTimeout(function () {
onScrollHandler();
}, 150);
if (currDevice != prevDevice) {
onResponsiveHandler();
prevDevice = currDevice;
}
};
const onResponsiveHandler = function () {
maxPercent = currDevice.indexOf("mobile") > -1 ? 0.675 : 0.75;
minPercent = currDevice.indexOf("mobile") > -1 ? 0.325 : 0.25;
TweenMax.set(els.displayBar, { left: 50 + "%" });
TweenMax.set(els.displayCoverImage, { width: 50 + "%" });
TweenMax.set(els.displayCoverLeftWrap, { width: 50 + "%" });
};
const onScrollHandler = function () {
let winOffsetTop = window.pageYOffset + utils.getNavHeight();
let winOffsetBottom = window.pageYOffset + window.innerHeight;
let targetRect = els.displayImage.getBoundingClientRect();
let targetOffsetTop = window.pageYOffset + targetRect.top;
let targetOffsetBottom = window.pageYOffset + targetRect.bottom;
if (
winOffsetBottom - window.innerHeight * 0.25 > targetOffsetTop &&
winOffsetTop + window.innerHeight * 0.25 < targetOffsetBottom &&
!els.isAction
) {
setAnimations();
els.isAction = true;
}
};
const grabEventHandler = {
onStart: function (e) {
e.target.matches(".highlights-display__bar-controller") &&
(els.isGrab = true);
},
onEnd: function () {
els.isGrab = false;
},
onMove: function (e) {
if (els.isGrab) {
e && e.preventDefault();
let wrapRect = els.displayBarWrap.getBoundingClientRect();
let wrapMaxWidth = wrapRect.width * maxPercent;
let wrapMinWidth = wrapRect.width * minPercent;
let xPosition = !e.touches ? e.pageX : e.touches[0].pageX;
let barPosition = xPosition - wrapRect.left;
if (barPosition > wrapMaxWidth) barPosition = wrapMaxWidth;
else if (barPosition < wrapMinWidth) barPosition = wrapMinWidth;
let barPercent = (barPosition / wrapRect.width) * 100;
els.displayBar.style.left = barPercent + "%";
els.displayCoverImage.style.width = barPercent + "%";
grabEventHandler.setArrowSize(barPercent);
}
},
onMoveEvent: function (e) {
let wrapRect = els.displayBarWrap.getBoundingClientRect();
let wrapMaxWidth = wrapRect.width * maxPercent;
let wrapMinWidth = wrapRect.width * minPercent;
let barRect = els.displayBar.getBoundingClientRect();
let barPosition = barRect.left - wrapRect.left;
let moveValue = Math.ceil(
wrapMaxWidth / (currDevice.indexOf("desktop") > -1 ? 8 : 5.5)
);
let isMove =
e.target.classList.contains("highlights-display__tap-button") ||
e.target.classList.contains("highlights-display__bar-controller");
if (isMove) {
status.isTabMove = true;
if (
e.type == "click" &&
e.target.classList.contains("highlights-display__tap-button")
) {
let leftBtn = "highlights-display__tap-left";
let rightBtn = "highlights-display__tap-right";
if (e.target.parentElement.classList.contains(leftBtn)) {
barPosition -= moveValue;
} else if (
e.target.parentElement.classList.contains(rightBtn)
) {
barPosition += moveValue;
}
}
if (
e.target.classList.contains(
"highlights-display__bar-controller"
) &&
(e.keyCode == 39 || e.keyCode == 37)
) {
e && e.preventDefault();
if (e.keyCode == 39) barPosition += moveValue;
else if (e.keyCode == 37) barPosition -= moveValue;
}
if (barPosition < wrapMinWidth) barPosition = wrapMinWidth;
else if (barPosition > wrapMaxWidth) barPosition = wrapMaxWidth;
let barPercent = (barPosition / wrapRect.width) * 100;
TweenMax.to(els.displayBar, 0.3, {
left: barPercent + "%",
ease: Power2.easeOut,
});
TweenMax.to(els.displayCoverImage, 0.3, {
width: barPercent + "%",
ease: Power2.easeOut,
});
grabEventHandler.setArrowSize(barPercent);
}
},
setArrowSize: function (barPercent) {
let imgWidth = els.imgWrap.getBoundingClientRect().width;
let tabWidth = els.tabWrap.getBoundingClientRect().width;
let imgValue = imgWidth * (barPercent * (1 / 100));
let tabValue = (imgWidth - tabWidth) / 2;
let moveTabBtnValue = Math.floor(imgValue - tabValue);
if (status.isTabMove) {
TweenMax.to(els.displayCoverLeftWrap, 0.3, {
width: moveTabBtnValue + "px",
ease: Power2.easeOut,
});
status.isTabMove = false;
} else {
els.displayCoverLeftWrap.style.width = moveTabBtnValue + "px";
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.experiences = (function () {
const utils = window.flagship.common.utils;
const resize = window.flagship.common.resize;
let els = {},
objs = {},
status = {},
prevDevice = null,
currDevice = resize.checkResolution();
const init = function () {
els.section = document.querySelector(".highlights-galaxy-offers");
if (!!els.section) {
els.offersItems = els.section.querySelectorAll(
".highlights-galaxy-offers__card-item"
);
if (!!els.offersItems && els.offersItems.length > 1) {
setElements();
bindEvents();
}
}
};
const setElements = function () {
els.swiperContainer = els.section.querySelector(
".highlights-galaxy-offers__card-container"
);
els.nextArrow = els.section.querySelector(
".highlights-galaxy-offers__arrow--next"
);
els.prevArrow = els.section.querySelector(
".highlights-galaxy-offers__arrow--prev"
);
};
const bindEvents = function () {
window.addEventListener("DOMContentLoaded", handlerList.onLoad, {
once: true,
});
resize.add(handlerList.onResize);
els.nextArrow.addEventListener("click", swiperEvents.onClickArrow);
els.nextArrow.addEventListener("keydown", swiperEvents.onClickArrow);
els.prevArrow.addEventListener("click", swiperEvents.onClickArrow);
els.prevArrow.addEventListener("keydown", swiperEvents.onClickArrow);
};
const objList = {
swiper: function () {
if (objs.swiper == null) {
objs.swiper = new Swiper(els.swiperContainer, {
init: false,
navigation: {
nextEl: els.nextArrow,
prevEl: els.prevArrow,
},
loop: false,
slidesPerView: "auto",
centeredSlides: false,
});
}
},
};
const handlerList = {
onLoad: function () {
if (currDevice.indexOf("mobile") > -1) {
setSwiper();
}
},
onResize: function (currRes) {
currDevice = currRes;
if (currDevice != prevDevice) {
handlerList.onResponsive();
prevDevice = currDevice;
}
},
onResponsive: function () {
if (currDevice.indexOf("mobile") > -1) {
setSwiper();
} else {
swiperEvents.destroy();
}
},
};
const setSwiper = function () {
objList.swiper();
objs.swiper.on("init", swiperEvents.init);
objs.swiper.on("slideChange", swiperEvents.slideChange);
objs.swiper.init();
};
const swiperEvents = {
init: function () {
let notification = this.el.querySelector(".swiper-notification");
if (!!notification) this.el.removeChild(notification);
accessibility.slide();
},
slideChange: function () {
accessibility.slide();
},
destroy: function () {
if (objs.swiper != null) {
objs.swiper.navigation.destroy(true);
objs.swiper.destroy(true);
objs.swiper = null;
}
},
onClickArrow: function (e) {
status.arrowTimeout = null;
status.arrowStyleTimeout = null;
if ((e.type == "keydown" && e.keyCode == 13) || e.type == "click") {
e.preventDefault();
if (objs.swiper.isBeginning && !objs.swiper.isEnd) {
els.nextArrow.style.setProperty(
"display",
"block",
"important"
);
clearTimeout(status.arrowTimeout);
status.arrowTimeout = setTimeout(function () {
els.prevArrow.focus();
}, 300);
clearTimeout(status.arrowStyleTimeout);
status.arrowStyleTimeout = setTimeout(function () {
els.nextArrow.style.display = "";
}, 400);
} else if (!objs.swiper.isBeginning && objs.swiper.isEnd) {
els.prevArrow.style.setProperty(
"display",
"block",
"important"
);
clearTimeout(status.arrowTimeout);
status.arrowTimeout = setTimeout(function () {
els.nextArrow.focus();
}, 300);
clearTimeout(status.arrowStyleTimeout);
status.arrowStyleTimeout = setTimeout(function () {
els.prevArrow.style.display = "";
}, 400);
}
}
},
};
const accessibility = {
slide: function () {
for (let i = 0; i < objs.swiper.slides.length; i++) {
if (i != objs.swiper.activeIndex) {
utils.onAccessibility(objs.swiper.slides[i]);
} else {
utils.offAccessibility(objs.swiper.slides[i]);
}
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.faq = (function () {
const utils = window.flagship.common.utils;
const resize = window.flagship.common.resize;
let els = {};
let objs = {};
let prevDevice = null;
let currDevice = resize.checkResolution();
const init = function () {
els.section = document.querySelector(".highlights-faq");
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.faqList = els.section.querySelector(".highlights-faq__list");
};
const bindEvents = function () {
resize.add(onResizeHandler);
setAccordion();
};
const onResizeHandler = function (currRes) {
currDevice = currRes;
if (currDevice != prevDevice) {
onResponsiveHandler();
prevDevice = currDevice;
}
};
const onResponsiveHandler = function () {
let isOpenedItems = els.faqList.querySelectorAll(
".highlights-faq__item.is-open"
);
if (isOpenedItems.length > 0) {
for (let i = 0; i < isOpenedItems.length; i++) {
let isOpenedItemContent = isOpenedItems[i].querySelector(
".highlights-faq__answer"
);
let clientHeight = isOpenedItemContent.children[0].clientHeight;
isOpenedItemContent.style.height = `${clientHeight}px`;
}
}
};
const setAccordion = function () {
objs.accordion = new window.flagship.common.accordion({
wrap: els.faqList,
classList: {
item: "highlights-faq__item",
button: "highlights-faq__question-arrow",
contents: "highlights-faq__answer",
activeClass: "is-open",
},
open: {
start: function (target) {
let targetInnerCta = target.querySelector(
".highlights-faq__cta"
);
if (targetInnerCta)
targetInnerCta.addEventListener("click", onClickFaqCta);
},
},
});
objs.accordion.init();
};
const onClickFaqCta = function (e) {
if (this.getAttribute("href").indexOf("#") == 0) {
e.preventDefault();
let sectionId = this.getAttribute("href");
let section = document.querySelector(sectionId);
let sectionTop = section.getBoundingClientRect().top;
let movePosition =
sectionTop + window.pageYOffset - utils.getNavHeight();
let clickable = section.querySelectorAll("a, button");
let title =
sectionId == "#galaxy-ai"
? section.querySelector(".common-headline")
: section.querySelector("h2");
if (title.classList.contains("common-display-mo")) {
if (resize.checkResolution().indexOf("mobile") > -1) {
title = section.querySelector("h2.common-display-mo");
} else {
title = section.querySelector("h2.common-display-pc");
}
}
if (!!title) {
let _focusOut = function () {
title.removeAttribute("tabindex");
title.removeEventListener("focusout", _focusOut);
};
title.addEventListener("focusout", _focusOut);
title.setAttribute("tabindex", 0);
title.focus();
} else {
clickable[0].focus();
}
window.scrollTo(0, movePosition);
}
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.gaming = (function () {
const utils = window.flagship.common.utils;
const resize = window.flagship.common.resize;
let els = {};
let objs = {};
let currDevice = resize.checkResolution();
let prevDevice = null;
let maxPercent = 0.975;
let minPercent = 0.018;
const init = function () {
els.section = document.querySelector(".highlights-gaming");
isRemaster = els.section.querySelector(".js-remaster");
if (!!els.section && !!isRemaster) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.resizeTimeout = null;
els.gamingBarWrap = els.section.querySelector(
".highlights-gaming__bar"
);
els.gamingBar = els.gamingBarWrap.querySelector(".bar");
els.gamingImage = els.section.querySelector(
".highlights-gaming__image"
);
els.gamingCoverImage = els.section.querySelector(
".highlights-gaming__cover"
);
els.isGrab = false;
els.isAction = false;
els.gamingCoverLeftWrap = els.section.querySelector(
".highlights-gaming__tap-left"
);
els.gamingCoverLeftBtn = els.section.querySelector(
".highlights-gaming__tap-left button"
);
els.gamingCoverRightBtn = els.section.querySelector(
".highlights-gaming__tap-right button"
);
els.controller = els.section.querySelector(
"button.highlights-gaming__bar-controller"
);
};
const bindEvents = function () {
window.addEventListener("DOMContentLoaded", onLoadHandler, {
once: true,
});
window.addEventListener("scroll", onScrollHandler);
els.section.addEventListener("keydown", grabEventHandler.onMoveEvent);
els.section.addEventListener("click", grabEventHandler.onMoveEvent);
els.section.addEventListener("mousedown", grabEventHandler.onStart);
els.section.addEventListener("mousemove", grabEventHandler.onMove);
els.section.addEventListener("mouseup", grabEventHandler.onEnd);
els.section.addEventListener("mouseleave", grabEventHandler.onEnd);
els.section.addEventListener("touchstart", grabEventHandler.onStart);
els.section.addEventListener("touchmove", grabEventHandler.onMove);
els.section.addEventListener("touchend", grabEventHandler.onEnd);
els.section.addEventListener("touchcancel", grabEventHandler.onEnd);
resize.add(onResizeHandler);
};
const setAnimations = function () {
let minValue = 1.8;
let maxValue = 97.5;
TweenMax.set(els.gamingBar, {
left: `${minValue}%`,
ease: Power2.easeOut,
});
TweenMax.set(els.gamingCoverImage, {
width: `${minValue}%`,
ease: Power2.easeOut,
});
objs.barAnim = new TimelineLite();
objs.barAnim
.to(els.gamingBar, 1, {
left: `${maxValue}%`,
ease: Power2.easeOut,
})
.to(els.gamingBar, 1, { left: 50 + "%", ease: Power2.easeOut });
objs.imgAnim = new TimelineLite();
objs.imgAnim
.to(els.gamingCoverImage, 1, {
width: `${maxValue}%`,
ease: Power2.easeOut,
})
.to(els.gamingCoverImage, 1, {
width: 50 + "%",
ease: Power2.easeOut,
});
TweenMax.set(els.gamingCoverLeftWrap, {
width: `${minValue}%`,
ease: Power2.easeOut,
});
objs.imgAnim = new TimelineLite();
objs.imgAnim
.to(els.gamingCoverLeftWrap, 1, {
width: `${maxValue}%`,
ease: Power2.easeOut,
})
.to(els.gamingCoverLeftWrap, 1, {
width: 50 + "%",
ease: Power2.easeOut,
});
};
const onLoadHandler = function () {
onScrollHandler();
};
const onResizeHandler = function (currRes) {
currDevice = currRes;
clearTimeout(els.resizeTimeout);
els.resizeTimeout = setTimeout(function () {
onScrollHandler();
}, 150);
if (currDevice != prevDevice) {
prevDevice = currDevice;
}
};
const onScrollHandler = function () {
let winOffsetTop = window.pageYOffset + utils.getNavHeight();
let winOffsetBottom = window.pageYOffset + window.innerHeight;
let targetRect = els.gamingImage.getBoundingClientRect();
let targetOffsetTop = window.pageYOffset + targetRect.top;
let targetOffsetBottom = window.pageYOffset + targetRect.bottom;
if (
winOffsetBottom - window.innerHeight * 0.25 > targetOffsetTop &&
winOffsetTop + window.innerHeight * 0.25 < targetOffsetBottom &&
!els.isAction
) {
setAnimations();
els.isAction = true;
}
};
const grabEventHandler = {
onStart: function (e) {
e.target.matches(".highlights-gaming__bar-controller") &&
(els.isGrab = true);
},
onEnd: function () {
els.isGrab = false;
},
onMove: function (e) {
if (els.isGrab) {
e && e.preventDefault();
let wrapRect = els.gamingBarWrap.getBoundingClientRect();
let wrapMaxWidth = wrapRect.width * maxPercent;
let wrapMinWidth = wrapRect.width * minPercent;
let xPosition = !e.touches ? e.pageX : e.touches[0].pageX;
let barPosition = xPosition - wrapRect.left;
if (barPosition > wrapMaxWidth) barPosition = wrapMaxWidth;
else if (barPosition < wrapMinWidth) barPosition = wrapMinWidth;
let barPercent = (barPosition / wrapRect.width) * 100;
els.gamingBar.style.left = barPercent + "%";
els.gamingCoverImage.style.width = barPercent + "%";
els.gamingCoverLeftWrap.style.width = barPercent + "%";
}
},
onMoveEvent: function (e) {
let wrapRect = els.gamingBarWrap.getBoundingClientRect();
let wrapMaxWidth = wrapRect.width * maxPercent;
let wrapMinWidth = wrapRect.width * minPercent;
let barRect = els.gamingBar.getBoundingClientRect();
let barPosition = barRect.left - wrapRect.left;
let moveValue = Math.ceil(
wrapMaxWidth / (currDevice.indexOf("desktop") > -1 ? 8 : 4)
);
let isMove =
e.target.classList.contains("highlights-gaming__tap-button") ||
e.target.classList.contains("highlights-gaming__bar-controller");
if (isMove) {
if (
e.type == "click" &&
e.target.classList.contains("highlights-gaming__tap-button")
) {
let leftBtn = "highlights-gaming__tap-left";
let rightBtn = "highlights-gaming__tap-right";
if (e.target.parentElement.classList.contains(leftBtn)) {
barPosition -= moveValue;
} else if (
e.target.parentElement.classList.contains(rightBtn)
) {
barPosition += moveValue;
}
}
if (
e.target.classList.contains(
"highlights-gaming__bar-controller"
) &&
(e.keyCode == 39 || e.keyCode == 37)
) {
e && e.preventDefault();
if (e.keyCode == 39) barPosition += moveValue;
else if (e.keyCode == 37) barPosition -= moveValue;
}
if (barPosition < wrapMinWidth) barPosition = wrapMinWidth;
else if (barPosition > wrapMaxWidth) barPosition = wrapMaxWidth;
let barPercent = (barPosition / wrapRect.width) * 100;
TweenMax.to(els.gamingBar, 0.3, {
left: barPercent + "%",
ease: Power2.easeOut,
});
TweenMax.to(els.gamingCoverImage, 0.3, {
width: barPercent + "%",
ease: Power2.easeOut,
});
TweenMax.to(els.gamingCoverLeftWrap, 0.3, {
width: barPercent + "%",
ease: Power2.easeOut,
});
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.liveTranslateTutorial = (function () {
const utils = window.flagship.common.utils;
const common = window.flagship.highlights.common;
let els = {};
let objs = {};
let stepInfo = [];
let status = {};
const init = function () {
els.section = document.querySelector(
".highlights-live-translate-tutorial"
);
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.tutorialVideoContainer = els.section.querySelector(
".common-tutorial__main-video"
);
els.videoList = els.tutorialVideoContainer.querySelectorAll(
".common-tutorial__video"
);
els.videoWrap = els.tutorialVideoContainer.querySelectorAll(
".common-tutorial__video .common-video"
);
els.videos = els.tutorialVideoContainer.querySelectorAll(
".common-tutorial__video .common-video__video"
);
els.tooltipCta = els.tutorialVideoContainer.querySelectorAll(
".js-tutorial-tooltip-cta"
);
els.tutorialReplay = els.tutorialVideoContainer.querySelector(
".common-tutorial__replay-cta"
);
els.muteCtas = els.section.querySelectorAll(".common-mute-button");
};
const setProperty = function (el, index) {
el.video = el.querySelector("video");
el.controller = el.querySelector(".common-play-button");
el.controller.video = el.querySelector("video");
el.alert = el.parentElement.querySelector(".common-tutorial__alert");
el.tooltip = el.parentElement.querySelector(".js-tutorial-tooltip");
el.tooltipCta = el.parentElement.querySelector(
".js-tutorial-tooltip-cta"
);
el.videoMuteCta = el.querySelector(".common-mute-button");
el.video.playIndex = index;
};
const setStepStatus = function (el) {
stepInfo.push({
alert: el.getAttribute("data-alert"),
tooltip: el.getAttribute("data-tooltip"),
});
};
const eventList = {
videoController: function () {
for (let i = 0; i < objs.videos.length; i++) {
objs.videos[i].controller.addEventListener("click", function () {
if (this.video.paused) {
this.video.play();
} else {
this.video.pause();
}
});
}
},
nextVideoPlay: function (index) {
if (!!els.videoList[index].tooltip) {
utils.onAccessibility(els.videoList[index].tooltip);
}
els.videoList[index + 1].classList.add("is-visible");
utils.onAccessibility(els.videoList[index]);
if (els.videos[index + 1].readyState > 3) {
els.videos[index + 1].play();
} else {
els.videos[index + 1].addEventListener("canplay", function () {
if (this.paused) this.play();
});
}
setTimeout(() => {
els.videoList[index].classList.remove("is-visible");
if (!!els.videoList[index].tooltipCta) {
els.videoList[index].tooltipCta.blur();
}
els.videos[index + 1].videoWrap.videoMuteCta.focus();
}, 200);
},
click: function () {
let self = this;
els.tooltipCta[0].addEventListener("click", function () {
self.nextVideoPlay(0);
});
},
endCallback: function () {
if (stepInfo[this.video.playIndex].tooltip == "true") {
if (
!this.wrap.tooltipCta.classList.contains("is-bg-load-complete")
) {
this.wrap.tooltipCta.classList.add("is-bg-load-complete");
}
this.wrap.tooltipCta.removeAttribute("disabled");
this.wrap.tooltip.classList.add("is-visible");
}
if (stepInfo[this.video.playIndex].alert == "true") {
this.wrap.alert.classList.add("is-visible");
}
if (!this.wrap.classList.contains("is-completed")) {
this.wrap.classList.add("is-completed");
this.controller.style.display = "none";
}
},
onClickMute: function () {
for (let i = 0; i < els.muteCtas.length; i++) {
els.muteCtas[i].video =
els.muteCtas[i].parentElement.parentElement.video;
els.muteCtas[i].addEventListener("click", function () {
let isMute = this.video.muted;
if (!!isMute) {
this.classList.add("is-unmuted");
this.video.muted = false;
this.blind.innerText = this.getAttribute("data-mute");
setTagging.mute(this);
} else {
this.classList.remove("is-unmuted");
this.video.muted = true;
this.blind.innerText = this.getAttribute("data-unmute");
setTagging.unmute(this);
}
});
}
},
setMuteBlindText: function () {
for (let i = 0; i < els.muteCtas.length; i++) {
els.muteCtas[i].blind = els.muteCtas[i].querySelector(".blind");
els.muteCtas[i].blind.innerText =
els.muteCtas[i].getAttribute("data-unmute");
}
},
};
const setVideos = function () {
objs.videos = [];
for (let i = 0; i < els.videoWrap.length; i++) {
let isVideoWrap = els.videoWrap[i];
objs.videos.push(
ANIUTIL.videoHandler({
wrap: isVideoWrap,
video: isVideoWrap.video,
controller: isVideoWrap.controller,
resetCallback: function () {
if (this.wrap.classList.contains("is-completed")) {
this.wrap.classList.remove("is-completed");
if ((this.controller.style.display = "none"))
this.controller.style.display = "";
}
},
playCallback: function () {
els.videoList[this.video.playIndex].removeAttribute(
"tabindex"
);
els.videoList[this.video.playIndex].removeAttribute(
"aria-hidden"
);
utils.offAccessibility(this.wrap.videoMuteCta);
if (this.video.playIndex == 0) {
let self = this;
clearTimeout(status.videoFocusTimeout);
status.videoFocusTimeout = setTimeout(function () {
self.wrap.videoMuteCta.focus();
status.videoFocusTimeout = null;
}, 400);
}
if (!this.video.muted) {
this.wrap.videoMuteCta.classList.remove("is-unmuted");
this.wrap.videoMuteCta.video.muted = true;
this.wrap.videoMuteCta.blind.innerText =
this.wrap.videoMuteCta.getAttribute("data-unmute");
setTagging.unmute(this.wrap.videoMuteCta);
}
this.controller.style.display = "block";
utils.offAccessibility(this.controller);
setTagging.pause(this.controller);
},
pauseCallback: function () {
setTagging.play(this.controller);
},
endCallback: function () {
if (!!this.wrap.tooltip) {
let self = this;
utils.offAccessibility(this.wrap.tooltip);
setTimeout(function () {
self.wrap.tooltipCta.focus();
}, 200);
}
this.controller.style.display = "none !important";
eventList.endCallback.call(this);
if (els.videos.length - 1 == this.video.playIndex) {
els.tutorialReplay.style.display = "block";
els.tutorialReplay.removeAttribute("tabindex");
els.tutorialReplay.removeAttribute("aria-hidden");
els.tutorialReplay.focus();
}
},
})
);
}
};
const setTagging = {
play: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("pause", "play")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("pause", "play")
);
}
},
pause: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("play", "pause")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("play", "pause")
);
}
},
mute: function (targetCta) {
if (targetCta.hasAttribute("data-omni")) {
let dataOmni = targetCta.getAttribute("data-omni").toLowerCase();
targetCta.setAttribute(
"data-omni",
dataOmni.replace("unmute", "mute")
);
}
if (targetCta.hasAttribute("ga-la")) {
let gaLa = targetCta.getAttribute("ga-la").toLowerCase();
targetCta.setAttribute("ga-la", gaLa.replace("unmute", "mute"));
}
},
unmute: function (targetCta) {
if (targetCta.hasAttribute("data-omni")) {
let dataOmni = targetCta.getAttribute("data-omni").toLowerCase();
targetCta.setAttribute(
"data-omni",
dataOmni.replace("mute", "unmute")
);
}
if (targetCta.hasAttribute("ga-la")) {
let gaLa = targetCta.getAttribute("ga-la").toLowerCase();
targetCta.setAttribute("ga-la", gaLa.replace("mute", "unmute"));
}
},
};
const bindEvents = function () {
for (let i = 0; i < els.videoWrap.length; i++) {
setProperty(els.videoWrap[i], i);
setStepStatus(els.videoList[i]);
}
setVideos();
eventList.setMuteBlindText();
eventList.videoController();
eventList.click();
eventList.onClickMute();
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.lowLightPopup = (function () {
const utils = window.flagship.common.utils;
const common = window.flagship.highlights.common;
let els = {};
let objs = {};
let status = {};
const setPopupLazyLoader = {
image: function () {
objs.imageLoader = ANIUTIL.mediaLoader({
lazyClass: ".js-low-light-popup-img-src",
responsiveClass: ".js-low-light-popup-res-img",
preset: status.isGlobal ? "" : "?imbypass=true",
innerScroll: {
use: true,
wrap: els.layerPopup,
},
loadOption: [
{
resolution: 1920,
attribute: "data-src-pc",
},
{
resolution: 1023,
attribute: "data-src-tb",
},
{
resolution: 767,
attribute: "data-src-mo",
},
{
resolution: 360,
attribute: "data-src-mo-s",
},
],
visiblePoint: 2,
});
window.popupBgLoader = ANIUTIL.mediaLoader({
type: "bgImage",
lazyClass: ".js-low-light-popup-bg-img",
innerScroll: {
use: true,
wrap: els.layerPopup,
},
loadOption: [
{
resolution: 1920,
attribute: "",
bgOpts: "",
},
],
visiblePoint: 1,
});
},
video: function () {
objs.videoLoader = ANIUTIL.mediaLoader({
type: "video",
lazyClass: ".js-low-light-popup-video-src",
responsiveClass: ".js-low-light-popup-res-video",
preset: status.isGlobal ? "" : "?imbypass=true",
innerScroll: {
use: true,
wrap: els.layerPopup,
},
loadOption: [
{
resolution: 1920,
attribute: "data-video-src-pc",
},
{
resolution: 1023,
attribute: "data-video-src-tb",
},
{
resolution: 767,
attribute: "data-video-src-mo",
},
{
resolution: 360,
attribute: "data-video-src-mo-s",
},
],
visiblePoint: 1,
endCallback: function (video) {
if (
video.videoWrap &&
!video.videoWrap.classList.contains("is-loaded")
) {
video.videoWrap.classList.add("is-loaded");
}
},
});
},
};
const init = function () {
els.section = document.querySelector(".highlights-low-light");
els.layerPopup = document.querySelector(
".highlights-low-light-popup"
);
if (!!els.layerPopup) {
setElements();
setStatus();
objList.setPopup();
bindEvents();
}
};
const setElements = function () {
status.isGlobal =
document.documentElement.classList.contains("global");
els.contents = document.querySelector("#contents");
els.openCta = els.section.querySelector(".js-layer-popup");
els.innerWrap = els.layerPopup.querySelector(
".common-popup__inner-wrapper"
);
els.closeCtas = els.layerPopup.querySelectorAll(
".common-popup__close-cta"
);
els.dimmed = els.layerPopup.querySelector(".common-popup__dimmed");
els.supClicker = els.layerPopup.querySelectorAll("a.click_sup");
els.videoWrap = els.layerPopup.querySelector(".common-video");
els.videoWrap.video = els.videoWrap.querySelector(
".common-video__video"
);
els.videoWrap.controller = els.videoWrap.querySelector(
".common-video__control"
);
els.videoWrap.controller.video = els.videoWrap.video;
els.hashPopupOpener = null;
};
const setStatus = function () {
status.isHash = false;
};
const bindEvents = function () {
els.videoWrap.controller.addEventListener(
"click",
handlerList.videoCta
);
for (let i = 0; i < els.supClicker.length; i++) {
els.supClicker[i].addEventListener("click", handlerList.onClickSup);
}
};
const objList = {
setPopup: function () {
utils.layerPopup({
layerPopup: els.layerPopup,
layerPopupClass: ".highlights-low-light-popup",
openerEvent: {
element: els.openCta,
},
closeCtas: [els.closeCtas[0], els.closeCtas[1]],
dimmed: els.dimmed,
moveTarget: document.documentElement,
contents: els.contents,
show: {
start: function (target) {
els.innerWrap.scrollTop = 0;
els.layerPopup.classList.add("is-init");
target.openerCta.blur();
setPopupLazyLoader.image();
setPopupLazyLoader.video();
objList.setVideo();
if (
`#${els.openCta.getAttribute("data-hash")}` ==
window.location.hash
) {
status.isHash = true;
els.hashPopupOpener = els.openCta;
}
},
end: function () {
if (utils.detector.isIosDevice)
els.layerPopup.style.display = "block";
els.layerPopup.classList.add("is-open");
},
},
hide: {
start: function (target) {
target.openerCta.focus();
els.layerPopup.classList.remove("is-open");
},
end: function () {
setTimeout(function () {
els.layerPopup.classList.remove("is-init");
}, 300);
els.videoWrap.video.pause();
els.videoWrap.video.currentTime = 0;
if (status.isHash && els.hashPopupOpener) {
els.hashPopupOpener.focus();
setTimeout(function () {
els.hashPopupOpener.focus();
status.isHash = false;
els.hashPopupOpener = null;
}, 300);
}
},
},
});
},
setVideo: function () {
objs.video = ANIUTIL.videoHandler({
wrap: els.videoWrap,
video: els.videoWrap.video,
controller: els.videoWrap.controller,
resetCallback: function () {
if (this.wrap.classList.contains("is-completed")) {
this.wrap.classList.remove("is-completed");
}
},
playCallback: function () {
setTagging.pause(this.controller);
},
pauseCallback: function () {
setTagging.play(this.controller);
},
endCallback: function () {
if (!this.wrap.classList.contains("is-completed")) {
this.wrap.classList.add("is-completed");
}
},
});
},
};
const handlerList = {
videoCta: function (e) {
if (e.target == e.currentTarget) {
if (e.currentTarget.video.paused) {
e.currentTarget.video.play();
} else {
e.currentTarget.video.pause();
}
}
},
onClickSup: function (e) {
e.preventDefault();
e.stopPropagation();
els.layerPopup.hide();
let targetIndex = parseFloat(e.target.innerText),
disclaimer =
document.querySelectorAll("#desc-section li")[targetIndex - 1],
disclaimerText = disclaimer.innerText,
activeBlock = '' + disclaimerText + "";
setTimeout(() => {
disclaimer.innerHTML = activeBlock;
disclaimer.querySelector("a").focus();
}, 500);
const eventList = {
focusIn: function () {
common.centeredFocus.call(disclaimer.querySelector("a"));
disclaimer.removeEventListener("focusin", eventList.focusIn);
},
focusOut: function () {
disclaimer.innerHTML = disclaimerText;
disclaimer.removeAttribute("tabindex");
disclaimer.removeEventListener("focusout", eventList.focusOut);
},
};
disclaimer.addEventListener("focusin", eventList.focusIn);
disclaimer.addEventListener("focusout", eventList.focusOut);
},
};
const setTagging = {
play: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("pause", "play")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("pause", "play")
);
}
},
pause: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("play", "pause")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("play", "pause")
);
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.lowLight = (function () {
let els = {};
let objs = {};
let status = {};
const utils = window.flagship.common.utils;
const init = function () {
els.section = document.querySelector(".highlights-low-light");
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.swiperContainer = els.section.querySelector(
".highlights-low-light__carousel"
);
els.prevArrow = els.section.querySelector(".swiper-button-prev");
els.nextArrow = els.section.querySelector(".swiper-button-next");
els.pagination = els.section.querySelector(
".highlights-low-light__carousel-pagination"
);
};
const bindEvents = function () {
setSwiper();
els.nextArrow.addEventListener("click", swiperEvents.onClickArrow);
els.nextArrow.addEventListener("keydown", swiperEvents.onClickArrow);
els.prevArrow.addEventListener("click", swiperEvents.onClickArrow);
els.prevArrow.addEventListener("keydown", swiperEvents.onClickArrow);
};
const setSwiper = function () {
if (objs.swiper == null) {
objs.swiper = new Swiper(els.swiperContainer, {
init: false,
slidesPerView: "auto",
speed: 800,
navigation: {
prevEl: els.prevArrow,
nextEl: els.nextArrow,
},
pagination: {
el: els.pagination,
type: "bullets",
clickable: true,
renderBullet: function () {
return '';
},
},
});
}
objs.swiper.on("init", swiperEvents.init);
objs.swiper.on("slideChange", swiperEvents.slideChange);
objs.swiper.init();
};
const swiperEvents = {
init: function () {
let notification = this.el.querySelector(".swiper-notification");
els.bullets = this.pagination.bullets;
if (!!notification) this.el.removeChild(notification);
accessibility.slide();
accessibility.pagination.tagging();
accessibility.pagination.label();
els.nextArrow.removeAttribute("aria-label");
els.prevArrow.removeAttribute("aria-label");
for (let i = 0; i < els.bullets.length; i++) {
els.bullets[i].removeAttribute("role");
els.bullets[i].addEventListener("click", function (e) {
e.preventDefault();
e.stopPropagation();
objs.swiper.slideTo(i);
});
}
},
slideChange: function () {
accessibility.slide();
accessibility.pagination.label();
},
onClickArrow: function (e) {
status.arrowTimeout = null;
status.arrowStyleTimeout = null;
if ((e.type == "keydown" && e.keyCode == 13) || e.type == "click") {
e.preventDefault();
if (objs.swiper.isBeginning && !objs.swiper.isEnd) {
els.prevArrow.style.setProperty(
"display",
"block",
"important"
);
clearTimeout(status.arrowTimeout);
status.arrowTimeout = setTimeout(function () {
els.nextArrow.focus();
}, 300);
clearTimeout(status.arrowStyleTimeout);
status.arrowStyleTimeout = setTimeout(function () {
els.prevArrow.style.display = "";
}, 400);
} else if (!objs.swiper.isBeginning && objs.swiper.isEnd) {
els.nextArrow.style.setProperty(
"display",
"block",
"important"
);
clearTimeout(status.arrowTimeout);
status.arrowTimeout = setTimeout(function () {
els.prevArrow.focus();
}, 300);
clearTimeout(status.arrowStyleTimeout);
status.arrowStyleTimeout = setTimeout(function () {
els.nextArrow.style.display = "";
}, 400);
}
}
},
};
const accessibility = {
slide: function () {
for (let i = 0; i < objs.swiper.slides.length; i++) {
if (i != objs.swiper.activeIndex) {
utils.onAccessibility(objs.swiper.slides[i]);
} else {
utils.offAccessibility(objs.swiper.slides[i]);
}
}
},
pagination: {
tagging: function () {
const tagging = {
"data-omni-type": "microsite_gallery",
"data-omni": "galaxy-s24-ultra:highlights:camera^zoom:index:",
"ga-ca": "gallery",
"ga-ac": "feature gallery",
"ga-la": "galaxy-s24-ultra:highlights:camera^zoom:index:",
};
for (let i = 0; i < els.bullets.length; i++) {
Object.keys(tagging).forEach((key) => {
if (key == "data-omni" || key == "ga-la") {
els.bullets[i].setAttribute(key, tagging[key] + (i + 1));
} else {
els.bullets[i].setAttribute(key, tagging[key]);
}
});
}
},
label: function () {
for (let i = 0; i < els.bullets.length; i++) {
let slideName =
objs.swiper.slides[i].getAttribute("data-slide-name");
if (i === objs.swiper.realIndex) {
if (typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI) {
els.bullets[i].setAttribute(
"aria-label",
`${LOCAL_VARI.slide}${
i + 1
}: ${slideName} ${LOCAL_VARI.selected.toLowerCase()}`
);
} else {
els.bullets[i].setAttribute(
"aria-label",
`Slide${i + 1}: ${slideName} selected`
);
}
} else {
if (typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI) {
els.bullets[i].setAttribute(
"aria-label",
`${LOCAL_VARI.slide}${i + 1}: ${slideName}`
);
} else {
els.bullets[i].setAttribute(
"aria-label",
`Slide${i + 1}: ${slideName}`
);
}
}
}
},
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.overview = (() => {
const utils = window.flagship.common.utils;
const resize = window.flagship.common.resize;
let els = {};
let objs = {};
let eventFnc = {};
let statusClass = {
progress: {
active: "js-progress-active",
pause: "js-progress-pause",
},
video: {
load: "is-loaded",
complete: "is-video-load-complete",
},
navigation: "is-active",
info: {
visible: "is-visible",
active: "is-active",
},
};
let status = {
currentDevice: resize.checkResolution(),
isAuto: true,
isClickControl: false,
};
const init = () => {
els.section = document.querySelector(".highlights-overview");
if (!!els.section) {
setElements();
setProperty();
objList.setScene();
bindEvents();
}
};
const setElements = () => {
els.sectionInner = els.section.querySelector(".common-inner");
els.overviewContents = els.section.querySelector(
".highlights-overview__contents"
);
els.swiperContainer = els.section.querySelector(
".js-overview-carousel"
);
els.slides = els.section.querySelectorAll(
".highlights-overview__carousel-slide"
);
els.videoWrap = els.section.querySelectorAll(".common-video");
els.videos = els.section.querySelectorAll(".common-video__video");
els.videoControlCta = els.section.querySelectorAll(
".common-video__control"
);
els.nextArrow = els.section.querySelector(".swiper-button-next");
els.prevArrow = els.section.querySelector(".swiper-button-prev");
els.progressWrap = els.section.querySelectorAll(".js-progress-wrap");
els.progressBar = els.section.querySelectorAll(".js-progress-bar");
els.navigationWrap = els.section.querySelector(
".highlights-overview__navigation"
);
els.navigationInner = els.navigationWrap.querySelector(
".highlights-overview__navigation-inner"
);
els.navigationList = els.navigationWrap.querySelectorAll(
".highlights-overview__navigation-listitem"
);
els.navigationBtn = els.navigationWrap.querySelectorAll(
".highlights-overview__navigation-button-wrap"
);
els.infoItem = els.section.querySelectorAll(
".highlights-overview__info-item"
);
els.featureCtas = els.section.querySelectorAll(
"a.common-cta-encased"
);
els.sup = els.section.querySelectorAll("a.click_sup");
// tutorial
els.tutorialOpenCtas =
els.section.querySelectorAll(".js-tutorial-popup");
els.tutorialCloseCtas = document.querySelectorAll(
".common-tutorial__close-cta"
);
};
const setProperty = () => {
status.navSlideWrapWidth = els.navigationWrap.clientWidth;
status.isRtl = document.documentElement.classList.contains("rtl");
for (let i = 0; i < els.videos.length; i++) {
els.videos[i].controlCta = els.videoControlCta[i];
els.videos[i].wrap = els.videoWrap[i];
els.videoControlCta[i].video = els.videos[i];
}
for (let j = 0; j < els.navigationBtn.length; j++) {
els.navigationBtn[j].index = j;
els.navigationBtn[j].img = els.navigationBtn[j].querySelectorAll(
".highlights-overview__navigation-button-image img"
);
els.navigationBtn[j].img[0].parentWrap = els.navigationBtn[j];
els.navigationBtn[j].img[1].parentWrap = els.navigationBtn[j];
els.navigationBtn[j].text = els.navigationBtn[j].querySelector(
".highlights-overview__navigation-button-text"
);
els.navigationBtn[j].text.parentWrap = els.navigationBtn[j];
els.navigationBtn[j].addEventListener(
"keydown",
eventList.onClickNavigation
);
}
};
const objList = {
setSwiper: () => {
if (objs.swiper == null) {
objs.swiper = new Swiper(els.swiperContainer, {
navigation: {
nextEl: els.nextArrow,
prevEl: els.prevArrow,
},
init: false,
speed: 500,
});
objs.swiper.currentIndex = 0;
objs.swiper.on("init", function () {
let notification = this.el.querySelector(
".swiper-notification"
);
this.el.removeChild(notification);
els.nextArrow.removeAttribute("aria-label");
els.prevArrow.removeAttribute("aria-label");
objList.setVideo();
eventList.setVideoController();
eventList.scroll();
eventList.animationEnd();
accessibility.slide();
accessibility.setTitle();
});
objs.swiper.on("slideChange", swiperEvent.slideChange);
objs.swiper.on("transitionEnd", swiperEvent.transitionEnd);
objs.swiper.on("touchMove", swiperEvent.touchMove);
objs.swiper.on("touchEnd", swiperEvent.touchEnd);
objs.swiper.init();
}
},
setVideo: () => {
for (let i = 0; i < els.slides.length; i++) {
let isSlide = els.slides[i];
let isVideoWrap = isSlide.querySelector(".common-video");
let isVideo = isSlide.querySelector(".common-video__video");
objs[`video_${i}`] = ANIUTIL.videoHandler({
playType: "scrollPlay",
wrap: isVideoWrap,
video: isVideo,
controller: isVideo.controlCta,
startPoint:
resize.checkResolution().indexOf("mobile") > -1 ? 25 : 35,
reversePoint:
resize.checkResolution().indexOf("mobile") > -1 ? 75 : 80,
playCallback: function () {
status.isAuto = true;
if (!!!els.progressBar[i].style["animation-duration"])
els.progressBar[i].style[
"animation-duration"
] = `${isVideo.duration}s`;
els.progressWrap[i].classList.remove(
statusClass.progress.pause
);
if (isVideo.currentTime == 0)
els.progressWrap[i].classList.remove(
statusClass.progress.active
);
setTimeout(() => {
els.progressWrap[i].classList.add(
statusClass.progress.active
);
}, 20);
accessibility.setTagging.pause(isVideo.controlCta);
},
pauseCallback: function () {
status.isAuto = false;
setTimeout(() => {
els.progressWrap[i].classList.add(
statusClass.progress.pause
);
}, 100);
accessibility.setTagging.play(isVideo.controlCta);
},
endCallback: function () {
if (!isVideoWrap.classList.contains("is-completed"))
isVideoWrap.classList.add("is-completed");
status.isAuto = true;
},
resetCallback: function () {
setTimeout(() => {
els.progressWrap[i].classList.remove(
statusClass.progress.pause
);
els.progressWrap[i].classList.remove(
statusClass.progress.active
);
}, 100);
},
});
}
},
setScene: () => {
objs.scene = SCROLLER({
trackElement: els.overviewContents,
useFixed: false,
});
},
setNavSwiper: () => {
if (objs.navSwiper == null) {
objs.navSwiper = new Swiper(els.navigationWrap, {
init: false,
slidesPerView: "auto",
});
objs.navSwiper.on("init", function () {
let notification = this.el.querySelector(
".swiper-notification"
);
this.el.removeChild(notification);
});
objs.navSwiper.on("touchMove", swiperEvent.checkScrollEnd);
objs.navSwiper.init();
}
},
};
const bindEvents = () => {
objList.setSwiper();
window.addEventListener("scroll", eventList.scroll);
els.navigationWrap.addEventListener(
"click",
eventList.onClickNavigation
);
els.nextArrow.addEventListener("click", swiperEvent.onClickArrow);
els.nextArrow.addEventListener("keydown", swiperEvent.onClickArrow);
els.prevArrow.addEventListener("click", swiperEvent.onClickArrow);
els.prevArrow.addEventListener("keydown", swiperEvent.onClickArrow);
swiperEvent.navInitCheck();
for (let i = 0; i < els.featureCtas.length; i++) {
els.featureCtas[i].addEventListener(
"click",
eventList.clickFeatureCta
);
}
// tutorial
for (let j = 0; j < els.tutorialOpenCtas.length; j++) {
els.tutorialOpenCtas[j].addEventListener(
"click",
eventList.clickTutorialOpenCta
);
}
// tutorial close
for (let i = 0; i < els.tutorialCloseCtas.length; i++) {
els.tutorialCloseCtas[i].addEventListener("click", function () {
if (!status.activeVideoPaused) status.activeVideo.play();
});
}
for (let i = 0; i < els.sup.length; i++) {
els.sup[i].addEventListener("click", function () {
status.isAuto = false;
});
}
resize.add(eventList.onResize);
};
const swiperEvent = {
slideChange: () => {
let activeIndex = objs.swiper.activeIndex;
let currentIndex = objs.swiper.currentIndex;
let slideLength = objs.swiper.slides.length;
let loadIndex = activeIndex == slideLength - 1 ? 0 : activeIndex;
let loadVideoLength = els.section.querySelectorAll(
`.${statusClass.video.load}`
).length;
let allSlideloadComplete = els.videos.length == loadVideoLength;
let nextIndex =
objs.swiper.activeIndex < objs.swiper.slides.length - 1
? objs.swiper.activeIndex + 1
: 0;
if (!allSlideloadComplete && els.videos.length > loadIndex) {
if (
!els.videos[activeIndex].classList.contains(
statusClass.video.complete
)
) {
videoLoader.setResponsiveMedia([els.videos[activeIndex]]);
els.videoWrap[activeIndex].classList.add(
statusClass.video.load
);
}
if (
!els.videos[nextIndex].classList.contains(
statusClass.video.complete
)
) {
videoLoader.setResponsiveMedia([els.videos[nextIndex]]);
els.videoWrap[nextIndex].classList.add(statusClass.video.load);
}
}
if (currentIndex != activeIndex) {
objs[`video_${currentIndex}`].eventList.reset.call(
objs[`video_${currentIndex}`]
);
objs[`video_${currentIndex}`].video.removeEventListener(
"canplay",
objs[`video_${currentIndex}`].video.play
);
if (!!utils.isLowNetwork() || !status.isAuto) {
els.progressWrap[currentIndex].classList.remove(
statusClass.progress.active
);
els.progressWrap[activeIndex].classList.remove(
statusClass.progress.pause
);
} else {
els.progressWrap[currentIndex].classList.remove(
statusClass.progress.active
);
if (
objs[`video_${activeIndex}`] != undefined &&
objs[`video_${activeIndex}`].video.readyState >= 4
) {
objs[`video_${activeIndex}`].video.play();
} else {
objs[`video_${activeIndex}`].video.addEventListener(
"canplay",
function () {
this.play();
}
);
}
}
if (
!els.navigationBtn[activeIndex].classList.contains(
statusClass.navigation
)
) {
els.navigationBtn[currentIndex].classList.remove(
statusClass.navigation
);
els.navigationBtn[activeIndex].classList.add(
statusClass.navigation
);
accessibility.setTitle();
}
if (
!els.infoItem[activeIndex].classList.contains(
statusClass.info.visible
)
) {
els.infoItem[currentIndex].classList.remove(
statusClass.info.visible
);
els.infoItem[activeIndex].classList.add(
statusClass.info.visible
);
}
if (
!els.infoItem[activeIndex].classList.contains(
statusClass.info.active
)
) {
els.infoItem[currentIndex].classList.remove(
statusClass.info.active
);
els.infoItem[activeIndex].classList.add(
statusClass.info.active
);
}
}
if (objs.navSwiper != null)
swiperEvent.setNavSwiperXvalue(activeIndex);
accessibility.slide();
objs.swiper.currentIndex = activeIndex;
},
transitionEnd: function () {
if (!!status.isClickControl) return;
objs[`video_${objs.swiper.activeIndex}`].video.controlCta.focus();
},
touchMove: function () {
objs.swiper.off("transitionEnd", swiperEvent.transitionEnd);
},
touchEnd: function () {
objs.swiper.on("transitionEnd", swiperEvent.transitionEnd);
},
onClickArrow: (e) => {
status.arrowTimeout = null;
status.arrowStyleTimeout = null;
status.accessibilityTimeout = null;
if ((e.type == "keydown" && e.keyCode == 13) || e.type == "click") {
e.preventDefault();
status.isClickControl = true;
if (objs.swiper.isBeginning && !objs.swiper.isEnd) {
els.prevArrow.style.setProperty(
"display",
"block",
"important"
);
clearTimeout(status.arrowTimeout);
status.arrowTimeout = setTimeout(function () {
els.nextArrow.focus();
}, 300);
clearTimeout(status.arrowStyleTimeout);
status.arrowStyleTimeout = setTimeout(function () {
els.prevArrow.style.display = "";
}, 400);
} else if (!objs.swiper.isBeginning && objs.swiper.isEnd) {
els.nextArrow.style.setProperty(
"display",
"block",
"important"
);
clearTimeout(status.arrowTimeout);
status.arrowTimeout = setTimeout(function () {
els.prevArrow.focus();
}, 300);
clearTimeout(status.arrowStyleTimeout);
status.arrowStyleTimeout = setTimeout(function () {
els.nextArrow.style.display = "";
}, 400);
} else if (!objs.swiper.isBeginning && !objs.swiper.isEnd) {
let target = e.target.classList.contains("swiper-button-next")
? els.nextArrow
: els.prevArrow;
let noTarget = target.classList.contains("swiper-button-next")
? els.prevArrow
: els.nextArrow;
objs.swiper.slides[objs.swiper.activeIndex].setAttribute(
"tabindex",
-1
);
objs.swiper.slides[objs.swiper.activeIndex].setAttribute(
"aria-hidden",
true
);
noTarget.setAttribute("tabindex", -1);
noTarget.setAttribute("aria-hidden", true);
clearTimeout(status.arrowTimeout);
status.arrowTimeout = setTimeout(function () {
target.focus();
}, 300);
clearTimeout(status.accessibilityTimeout);
status.accessibilityTimeout = setTimeout(function () {
objs.swiper.slides[objs.swiper.activeIndex].removeAttribute(
"tabindex"
);
objs.swiper.slides[objs.swiper.activeIndex].removeAttribute(
"aria-hidden"
);
noTarget.removeAttribute("tabindex");
noTarget.removeAttribute("aria-hidden");
}, 400);
}
eventList.animationEndDestroy();
}
},
navInitCheck: () => {
let wrapPadding =
parseInt(window.getComputedStyle(els.sectionInner).paddingLeft) *
2;
let getComputedStyle = window.getComputedStyle(
els.navigationList[0]
);
let navMargin = !!status.isRtl
? parseInt(getComputedStyle.marginLeft)
: parseInt(getComputedStyle.marginRight);
let navSlideWidth = els.navigationList[0].clientWidth;
let slideWrapWidth =
navSlideWidth * els.navigationList.length +
navMargin * (els.navigationList.length - 1);
status.navSwiperPadding =
(status.navSlideWrapWidth - slideWrapWidth) / 2;
let contentsWidth =
els.sectionInner.clientWidth -
wrapPadding -
status.navSwiperPadding;
status.isNavInit =
(status.currentDevice.indexOf("mobile") > -1 &&
contentsWidth <= slideWrapWidth) ||
els.navigationList.length > 4;
if (!!status.isNavInit) {
objList.setNavSwiper();
} else {
swiperEvent.destroy();
}
},
setNavSwiperXvalue: (activeIndex) => {
if (activeIndex === 0 || activeIndex === 1) {
status.xValue = 0;
} else if (activeIndex > 1) {
if (status.navSwiperPadding * 2 < 0) {
status.xValue =
status.navSlideWrapWidth -
els.navigationInner.clientWidth +
Math.abs(status.navSwiperPadding * 2);
} else {
status.xValue =
status.navSlideWrapWidth - els.navigationInner.clientWidth;
}
}
if (!status.isRtl)
els.navigationInner.style.transform = `translate3d(-${status.xValue}px, 0px, 0px)`;
else
els.navigationInner.style.transform = `translate3d(${status.xValue}px, 0px, 0px)`;
swiperEvent.checkScrollEnd();
},
checkScrollEnd: () => {
if (!status.isRtl) {
if (objs.navSwiper.getTranslate() < 0)
els.navigationWrap.classList.add("is-scroll-end");
else els.navigationWrap.classList.remove("is-scroll-end");
} else {
if (objs.navSwiper.getTranslate() < 0)
els.navigationWrap.classList.remove("is-scroll-end");
else els.navigationWrap.classList.add("is-scroll-end");
}
},
destroy: () => {
if (objs.navSwiper != null) {
objs.navSwiper.destroy(true);
objs.navSwiper = null;
}
},
};
const eventList = {
setVideoController: () => {
for (let i = 0; i < els.videoControlCta.length; i++) {
els.videoControlCta[i].addEventListener("click", function () {
let isVideo = this.video;
if (isVideo.paused) {
isVideo.play();
} else {
isVideo.pause();
}
});
}
},
scroll: () => {
objs.scene.trackAnimation(function () {
objs[`video_${objs.swiper.activeIndex}`].scrollActive(
this.progress
);
});
},
animationEnd: () => {
eventFnc.animationEnd = {};
if (!!utils.isLowNetwork()) return;
for (let i = 0; i < els.progressBar.length; i++) {
eventFnc.animationEnd[i] = function () {
if (objs.swiper.activeIndex == objs.swiper.slides.length - 1) {
status.isAuto = false;
els.progressBar[i].removeEventListener(
"animationend",
eventFnc.animationEnd[i]
);
} else {
setTimeout(() => {
if (!status.isAuto) return;
objs.swiper.slideNext(500);
els.progressBar[i].removeEventListener(
"animationend",
eventFnc.animationEnd[i]
);
}, 800);
}
};
els.progressBar[i].addEventListener(
"animationend",
eventFnc.animationEnd[i]
);
}
},
animationEndDestroy: () => {
for (let i = 0; i < els.progressBar.length; i++) {
els.progressBar[i].removeEventListener(
"animationend",
eventFnc.animationEnd[i]
);
}
},
onClickNavigation: (e) => {
if (
e.target.classList.contains("swiper-wrapper") ||
(e.type == "keydown" && e.keyCode != 13)
)
return;
let oldTarget = els.navigationWrap.querySelector(
`.${statusClass.navigation}`
);
let targetMatches =
e.target.matches(
".highlights-overview__navigation-button-image img"
) ||
e.target.matches(".highlights-overview__navigation-button-text");
if (targetMatches) {
currentTarget = e.target.parentWrap;
} else if (
e.target.classList.contains(
"highlights-overview__navigation-button"
)
) {
currentTarget = e.target.parentElement;
}
if (!currentTarget.classList.contains(statusClass.navigation)) {
oldTarget.classList.remove(statusClass.navigation);
currentTarget.classList.add(statusClass.navigation);
objs.swiper.slideTo(currentTarget.index, 500, false);
accessibility.setTitle();
}
status.isClickControl = true;
eventList.animationEndDestroy();
},
clickFeatureCta: (e) => {
e.preventDefault();
status.isAuto = false;
let target = e.target.matches(".common-cta-encased__text")
? e.target.parentElement
: e.target;
let sectionId = target.getAttribute("href");
let section = document.querySelector(sectionId);
let sectionTop = section.getBoundingClientRect().top;
let movePosition =
sectionTop + window.pageYOffset - utils.getNavHeight();
let clickable = section.querySelectorAll("a, button");
let title = section.querySelector("h2.common-sub-headline");
if (title.classList.contains("common-display-mo")) {
if (resize.checkResolution().indexOf("mobile") > -1) {
title = section.querySelector(
"h2.common-sub-headline.common-display-mo"
);
} else {
title = section.querySelector(
"h2.common-sub-headline.common-display-pc"
);
}
}
if (!!title) {
let _focusOut = function () {
title.removeAttribute("tabindex");
title.removeEventListener("focusout", _focusOut);
};
title.addEventListener("focusout", _focusOut);
title.setAttribute("tabindex", 0);
title.focus();
} else {
clickable[0].focus();
}
window.scrollTo(0, movePosition);
},
onResize: function (currRes) {
status.currentDevice = currRes;
status.navSlideWrapWidth = els.navigationWrap.clientWidth;
swiperEvent.navInitCheck();
},
clickTutorialOpenCta: function () {
let hash = this.getAttribute("data-hash");
let tutorialPopup = document.querySelector(`#${hash}`);
let tutorialPopupList =
document.querySelectorAll(".common-tutorial");
if (tutorialPopup) {
status.isAuto = false;
status.activeVideo =
objs[`video_${objs.swiper.activeIndex}`].video;
status.activeVideoPaused = status.activeVideo.paused;
tutorialPopup.show();
if (utils.detector.isIosDevice || utils.detector.isTouchDevice)
this.blur();
else this.focus();
for (let i = 0; i < tutorialPopupList.length; i++) {
tutorialPopupList[i].isOverview = true;
tutorialPopupList[i].overviewCta = this;
}
}
},
};
const accessibility = {
slide: () => {
for (let i = 0; i < objs.swiper.slides.length; i++) {
if (i != objs.swiper.activeIndex) {
utils.onAccessibility(objs.swiper.slides[i]);
} else {
utils.offAccessibility(objs.swiper.slides[i]);
}
}
},
setTitle: () => {
for (let i = 0; i < els.navigationBtn.length; i++) {
let button = els.navigationBtn[i].querySelector("button");
button.removeAttribute("title");
if (i == objs.swiper.activeIndex) {
if (typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI) {
button.setAttribute("title", LOCAL_VARI.selected);
} else {
button.setAttribute("title", "Selected");
}
}
}
},
setTagging: {
play: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("pause", "play")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("pause", "play")
);
}
},
pause: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("play", "pause")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("play", "pause")
);
}
},
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.quadTelPopup = (function () {
const utils = window.flagship.common.utils;
const resize = window.flagship.common.resize;
const common = window.flagship.highlights.common;
let els = {};
let objs = {};
let status = {};
let currDevice = resize.checkResolution();
let prevDevice = null;
const setPopupLazyLoader = {
image: function () {
objs.imageLoader = ANIUTIL.mediaLoader({
lazyClass: ".js-quad-telephoto-popup-img-src",
responsiveClass: ".js-quad-telephoto-popup-res-img",
preset: status.isGlobal ? "" : "?imbypass=true",
innerScroll: {
use: true,
wrap: els.layerPopup,
},
loadOption: [
{
resolution: 1920,
attribute: "data-src-pc",
},
{
resolution: 1023,
attribute: "data-src-tb",
},
{
resolution: 767,
attribute: "data-src-mo",
},
{
resolution: 360,
attribute: "data-src-mo-s",
},
],
visiblePoint: 2,
});
window.popupBgLoader = ANIUTIL.mediaLoader({
type: "bgImage",
lazyClass: ".js-quad-telephoto-popup-bg-img",
innerScroll: {
use: true,
wrap: els.layerPopup,
},
loadOption: [
{
resolution: 1920,
attribute: "",
bgOpts: "",
},
],
visiblePoint: 1,
});
},
video: function () {
objs.videoLoader = ANIUTIL.mediaLoader({
type: "video",
lazyClass: ".js-quad-telephoto-popup-video-src",
responsiveClass: ".js-quad-telephoto-popup-res-video",
preset: status.isGlobal ? "" : "?imbypass=true",
innerScroll: {
use: true,
wrap: els.layerPopup,
},
loadOption: [
{
resolution: 1920,
attribute: "data-video-src-pc",
},
{
resolution: 1023,
attribute: "data-video-src-tb",
},
{
resolution: 767,
attribute: "data-video-src-mo",
},
{
resolution: 360,
attribute: "data-video-src-mo-s",
},
],
visiblePoint: 1,
endCallback: function (video) {
if (
video.videoWrap &&
!video.videoWrap.classList.contains("is-loaded")
) {
video.videoWrap.classList.add("is-loaded");
}
},
});
},
};
const init = function () {
els.section = document.querySelector(".highlights-quad-telephoto");
els.layerPopup = document.querySelector(
".highlights-quad-telephoto-popup"
);
if (!!els.layerPopup) {
setElements();
setStatus();
objList.setPopup();
bindEvents();
}
};
const setElements = function () {
status.isGlobal =
document.documentElement.classList.contains("global");
els.innerWrap = els.layerPopup.querySelector(
".common-popup__inner-wrapper"
);
els.contents = document.querySelector("#contents");
els.openCta = els.section.querySelector(".js-layer-popup");
els.closeCtas = els.layerPopup.querySelectorAll(
".common-popup__close-cta"
);
els.dimmed = els.layerPopup.querySelector(".common-popup__dimmed");
els.supClicker = els.layerPopup.querySelectorAll("a.click_sup");
els.scrollVideoWrap = els.layerPopup.querySelector(
".common-video.js-scroll-video"
);
els.scrollVideoWrap.video = els.scrollVideoWrap.querySelector(
".common-video__video"
);
els.scrollVideoWrap.controller = els.scrollVideoWrap.querySelector(
".common-video__control"
);
els.scrollVideoWrap.controller.video = els.scrollVideoWrap.video;
els.hashPopupOpener = null;
};
const setStatus = function () {
status.isHash = false;
};
const bindEvents = function () {
resize.add(handlerList.onResize);
els.innerWrap.addEventListener("scroll", handlerList.scroll);
els.scrollVideoWrap.controller.addEventListener(
"click",
handlerList.videoCta
);
for (let i = 0; i < els.supClicker.length; i++) {
els.supClicker[i].addEventListener("click", handlerList.onClickSup);
}
};
const objList = {
setPopup: function () {
utils.layerPopup({
layerPopup: els.layerPopup,
layerPopupClass: ".highlights-quad-telephoto-popup",
openerEvent: {
element: els.openCta,
},
closeCtas: [els.closeCtas[0], els.closeCtas[1]],
dimmed: els.dimmed,
moveTarget: document.documentElement,
contents: els.contents,
show: {
start: function (target) {
els.innerWrap.scrollTop = 0;
els.layerPopup.classList.add("is-init");
target.openerCta.blur();
setPopupLazyLoader.image();
setPopupLazyLoader.video();
objList.setVideo();
objList.setScene();
if (
`#${els.openCta.getAttribute("data-hash")}` ==
window.location.hash
) {
status.isHash = true;
els.hashPopupOpener = els.openCta;
}
setTimeout(function () {
handlerList.scroll();
}, 300);
},
end: function () {
if (utils.detector.isIosDevice)
els.layerPopup.style.display = "block";
els.layerPopup.classList.add("is-open");
},
},
hide: {
start: function (target) {
target.openerCta.focus();
els.layerPopup.classList.remove("is-open");
},
end: function () {
setTimeout(function () {
els.layerPopup.classList.remove("is-init");
}, 300);
els.scrollVideoWrap.video.pause();
els.scrollVideoWrap.video.currentTime = 0;
if (status.isHash && els.hashPopupOpener) {
els.hashPopupOpener.focus();
setTimeout(function () {
els.hashPopupOpener.focus();
status.isHash = false;
els.hashPopupOpener = null;
}, 300);
}
},
},
});
},
setVideo: function () {
objs.scrollVideo = ANIUTIL.videoHandler({
playType: "scrollPlay",
startPoint: currDevice.indexOf("mobile") > -1 ? 15 : 30,
reversePoint: currDevice.indexOf("mobile") > -1 ? 40 : 55,
wrap: els.scrollVideoWrap,
video: els.scrollVideoWrap.video,
controller: els.scrollVideoWrap.controller,
resetCallback: function () {
if (this.wrap.classList.contains("is-completed")) {
this.wrap.classList.remove("is-completed");
}
},
playCallback: function () {
setTagging.pause(this.controller);
},
pauseCallback: function () {
setTagging.play(this.controller);
},
endCallback: function () {
if (!this.wrap.classList.contains("is-completed")) {
this.wrap.classList.add("is-completed");
}
},
});
},
setScene: function () {
objs.scene = SCROLLER({
trackElement: els.scrollVideoWrap.video,
innerScroll: {
use: true,
wrap: els.layerPopup,
},
useFixed: false,
resize: utils.detector.isTouchDevice ? false : true,
});
},
};
const handlerList = {
scroll: function () {
objs.scene.trackAnimation(function () {
objs.scrollVideo.scrollActive(this.progress);
});
},
onResize: function (currRes) {
currDevice = currRes;
if (currDevice != prevDevice) {
els.scrollVideoWrap.video.pause();
els.scrollVideoWrap.video.currentTime = 0;
setTimeout(() => {
objList.setVideo();
}, 300);
prevDevice = currDevice;
}
},
videoCta: function (e) {
if (e.target == e.currentTarget) {
if (e.currentTarget.video.paused) {
e.currentTarget.video.play();
} else {
e.currentTarget.video.pause();
}
}
},
onClickSup: function (e) {
e.preventDefault();
e.stopPropagation();
els.layerPopup.hide();
let targetIndex = parseFloat(e.target.innerText),
disclaimer =
document.querySelectorAll("#desc-section li")[targetIndex - 1],
disclaimerText = disclaimer.innerText,
activeBlock = '' + disclaimerText + "";
setTimeout(() => {
disclaimer.innerHTML = activeBlock;
disclaimer.querySelector("a").focus();
}, 500);
const eventList = {
focusIn: function () {
common.centeredFocus.call(disclaimer.querySelector("a"));
disclaimer.removeEventListener("focusin", eventList.focusIn);
},
focusOut: function () {
disclaimer.innerHTML = disclaimerText;
disclaimer.removeAttribute("tabindex");
disclaimer.removeEventListener("focusout", eventList.focusOut);
},
};
disclaimer.addEventListener("focusin", eventList.focusIn);
disclaimer.addEventListener("focusout", eventList.focusOut);
},
};
const setTagging = {
play: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("pause", "play")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("pause", "play")
);
}
},
pause: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("play", "pause")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("play", "pause")
);
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.quadTelephoto = (function () {
let els = {};
let objs = {};
const utils = window.flagship.common.utils;
const resize = window.flagship.common.resize;
let activeClass = "is-active";
const init = function () {
els.section = document.querySelector(".highlights-quad-telephoto");
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.swiperContainer = els.section.querySelector(
".highlights-quad-telephoto__zoom-image-wrap"
);
els.zoomCtaList = els.section.querySelector(
".highlights-quad-telephoto__zoom-button-list"
);
els.zoomCta = els.section.querySelectorAll(
".highlights-quad-telephoto__zoom-button"
);
els.tooltip = els.section.querySelector(
".highlights-quad-telephoto__zoom-tooltip"
);
};
const objList = {
setScene: function () {
objs.scene = SCROLLER({
trackElement: els.section,
useFixed: false,
});
},
setSwiper: function () {
if (objs.swiper == null) {
objs.swiper = new Swiper(els.swiperContainer, {
init: false,
});
objs.swiper.on("init", swiperEvents.init);
objs.swiper.on("slideChange", swiperEvents.slideChange);
objs.swiper.init();
}
},
};
const bindEvents = function () {
objList.setSwiper();
els.zoomCtaList.addEventListener("click", handlerList.onClickZoomCta);
els.section.addEventListener("keydown", handlerList.onClickZoomCta);
objList.setScene();
window.addEventListener("scroll", handlerList.scroll);
handlerList.scroll();
};
const handlerList = {
scroll: function () {
objs.scene.trackAnimation(function () {
let startProgress =
resize.checkResolution() == "desktop" ? 50 : 35;
if (this.progress > startProgress && this.progress < 70) {
let speed = 1000;
objs.swiper.slideTo(1, 800);
setTimeout(() => {
objs.swiper.slideTo(2, 800);
}, speed);
setTimeout(() => {
objs.swiper.slideTo(3, 800);
}, speed * 2);
setTimeout(() => {
objs.swiper.slideTo(4, 800);
}, speed * 3);
setTimeout(() => {
objs.swiper.slideTo(5, 800);
}, speed * 4);
setTimeout(() => {
objs.swiper.slideTo(1, false);
}, 5500);
setTimeout(() => {
els.tooltip.removeAttribute("aria-hidden");
TweenMax.to(els.tooltip, 0.4, { opacity: 1 });
}, 6000);
window.removeEventListener("scroll", handlerList.scroll);
}
});
},
onClickZoomCta: function (e) {
if (e.type == "keydown" && e.keyCode != 13) return;
let isZoomCta = e.target.classList.contains(
"highlights-quad-telephoto__zoom-button-title"
)
? e.target.parentElement
: e.target;
let isIndex = isZoomCta.getAttribute("data-index");
if (!els.tooltip.classList.contains("is-hide")) {
TweenMax.to(els.tooltip, 0.4, {
opacity: 0,
ease: "linear",
onComplete: function () {
els.tooltip.style.display = "none";
els.tooltip.setAttribute("aria-hidden", "true");
},
});
els.tooltip.classList.add("is-hide");
}
if (!isZoomCta.parentElement.classList.contains(activeClass)) {
isZoomCta.parentElement.classList.add(activeClass);
objs.swiper.slideTo(isIndex, 800);
accessibility.setTitle(isZoomCta);
accessibility.slide();
}
},
};
const swiperEvents = {
init: function () {
let notification = this.el.querySelector(".swiper-notification");
this.el.removeChild(notification);
accessibility.setTitle(els.zoomCta[objs.swiper.activeIndex]);
accessibility.slide();
},
slideChange: function () {
for (let i = 0; i < els.zoomCta.length; i++) {
els.zoomCta[i].removeAttribute("title");
els.zoomCta[i].parentElement.classList.remove(activeClass);
}
els.zoomCta[objs.swiper.activeIndex].parentElement.classList.add(
activeClass
);
accessibility.setTitle(els.zoomCta[objs.swiper.activeIndex]);
accessibility.slide();
},
};
const accessibility = {
slide: function () {
for (let i = 0; i < objs.swiper.slides.length; i++) {
if (i != objs.swiper.activeIndex) {
utils.onAccessibility(objs.swiper.slides[i]);
} else {
utils.offAccessibility(objs.swiper.slides[i]);
}
}
},
setTitle: function (cta) {
if (typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI) {
cta.setAttribute("title", LOCAL_VARI.selected);
} else {
cta.setAttribute("title", "selected");
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.quote = (function () {
const utils = window.flagship.common.utils,
resize = window.flagship.common.resize;
let els = {},
prevDevice = null,
currDevice = resize.checkResolution();
const init = function () {
els.section = document.querySelector(".highlights-media-quote");
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.swiper = null;
els.itemArray = [];
els.quoteWrap = els.section.querySelector(
".highlights-media-quote__inner"
);
els.quoteContainer = els.section.querySelector(
".highlights-media-quote__list-wrap"
);
els.quoteList = els.section.querySelector(
".highlights-media-quote__list"
);
els.quoteListItems = els.quoteList.querySelectorAll(
".highlights-media-quote__item"
);
els.arrowWrap = els.section.querySelector(
".highlights-media-quote__arrow"
);
els.prevArrow = els.section.querySelector(".swiper-button-prev");
els.nextArrow = els.section.querySelector(".swiper-button-next");
els.quotePagination = els.section.querySelector(
".highlights-media-quote__pagination"
);
};
const bindEvents = function () {
window.addEventListener("DOMContentLoaded", onLodeHandler, {
once: true,
});
resize.add(onResizeHandler);
els.nextArrow.addEventListener("click", swiperEvents.onClickArrow);
els.nextArrow.addEventListener("keydown", swiperEvents.onClickArrow);
els.prevArrow.addEventListener("click", swiperEvents.onClickArrow);
els.prevArrow.addEventListener("keydown", swiperEvents.onClickArrow);
};
const onLodeHandler = function () {
onResponsiveChange();
};
const onResizeHandler = function (currRes) {
currDevice = currRes;
if (currDevice != prevDevice) {
onResponsiveChange();
prevDevice = currDevice;
}
};
const onResponsiveChange = function () {
if (currDevice.indexOf("mobile") > -1) {
setSwiper();
} else {
swiperEvents.destroy();
}
};
const setSwiper = function () {
if (els.swiper === null) {
els.quoteWrap.classList.add("js-swiper-initialized");
els.swiper = new Swiper(els.quoteContainer, {
init: false,
slidesPerView: "auto",
centeredSlides: true,
navigation: {
nextEl: els.nextArrow,
prevEl: els.prevArrow,
},
pagination: {
el: els.quotePagination,
type: "bullets",
renderBullet: function () {
return '';
},
},
});
els.swiper.on("init", swiperEvents.init);
els.swiper.on("slideChange", swiperEvents.slideChange);
els.swiper.init();
}
};
const swiperEvents = {
init: function () {
let self = this,
notification = self.el.querySelector(".swiper-notification");
if (!!notification) self.el.removeChild(notification);
setAccessibility.slide();
setAccessibility.arrow();
setPaginationTagging.call(self);
setPaginationLabel.call(self);
for (let i = 0; i < self.pagination.bullets.length; i++) {
(function (idx) {
self.pagination.bullets[i].addEventListener(
"click",
function () {
self.slideTo(idx);
}
);
})(i);
}
},
slideChange: function () {
setAccessibility.slide();
setAccessibility.arrow();
setPaginationLabel.call(this);
},
onClickArrow: function (e) {
if (
(e.type == "keydown" && e.keyCode == 13) ||
(e.type == "click" &&
document.documentElement.classList.contains("isTouchDevice"))
) {
e.preventDefault();
clearTimeout(els.arrowTimeout);
els.arrowTimeout = setTimeout(function () {
if (els.swiper.isBeginning && !els.swiper.isEnd) {
els.nextArrow.focus();
} else if (!els.swiper.isBeginning && els.swiper.isEnd) {
els.prevArrow.focus();
}
}, 300);
}
},
destroy: function () {
if (els.swiper != null) {
els.quoteWrap.classList.remove("js-swiper-initialized");
els.swiper.pagination.destroy(true);
els.swiper.navigation.destroy(true);
els.swiper.destroy(true);
els.swiper = null;
}
},
};
const setPaginationTagging = function () {
let bullets = Array.prototype.slice.call(this.pagination.bullets),
paginationTagging = {
"data-omni-type": "microsite_contentinter",
"data-omni":
"galaxy-s24-ultra:highlights:overview:media-quote:index:",
"ga-ca": "indication",
"ga-ac": "carousel",
"ga-la":
"galaxy-s24-ultra:highlights:overview:media-quote:index:",
};
bullets.forEach(function (ele, idx) {
Object.keys(paginationTagging).forEach(function (key) {
if (key == "data-omni" || key == "ga-la") {
ele.setAttribute(key, paginationTagging[key] + (idx + 1));
} else {
ele.setAttribute(key, paginationTagging[key]);
}
});
});
};
const setPaginationLabel = function () {
let self = this,
slides = Array.prototype.slice.call(this.slides),
bullets = Array.prototype.slice.call(this.pagination.bullets);
bullets.forEach(function (bullet, bulletIndex) {
let ariaLabelText = slides[bulletIndex].querySelector(
".highlights-media-quote__media"
).innerText;
if (self.realIndex == bulletIndex) {
bullet.setAttribute("aria-label", ariaLabelText + " Selected");
} else {
bullet.setAttribute("aria-label", ariaLabelText);
}
});
};
const setAccessibility = {
slide: function () {
for (let i = 0; i < els.swiper.slides.length; i++) {
if (i != els.swiper.snapIndex) {
utils.onAccessibility(els.swiper.slides[i]);
} else {
utils.offAccessibility(els.swiper.slides[i]);
}
}
},
arrow: function () {
if (els.swiper.isBeginning && !els.swiper.isEnd) {
utils.offAccessibility(els.nextArrow);
utils.onAccessibility(els.prevArrow);
} else if (!els.swiper.isBeginning && els.swiper.isEnd) {
utils.offAccessibility(els.prevArrow);
utils.onAccessibility(els.nextArrow);
} else {
utils.offAccessibility(els.nextArrow);
utils.offAccessibility(els.prevArrow);
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.samsungNoteTutorial = (function () {
const utils = window.flagship.common.utils;
const resize = window.flagship.common.resize;
const common = window.flagship.highlights.common;
let els = {};
let objs = {};
let stepInfo = [];
const init = function () {
els.section = document.querySelector(
".highlights-samsung-note-tutorial"
);
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.tutorialVideoContainer = els.section.querySelector(
".common-tutorial__main-video"
);
els.videoList = els.tutorialVideoContainer.querySelectorAll(
".common-tutorial__video"
);
els.videoWrap = els.tutorialVideoContainer.querySelectorAll(
".common-tutorial__video .common-video"
);
els.videos = els.tutorialVideoContainer.querySelectorAll(
".common-tutorial__video .common-video__video"
);
els.tooltipCta = els.tutorialVideoContainer.querySelectorAll(
".js-tutorial-tooltip-cta"
);
els.tutorialReplay = els.tutorialVideoContainer.querySelector(
".common-tutorial__replay-cta"
);
};
const setProperty = function (el, index) {
el.video = el.querySelector("video");
el.controller = el.querySelector(".common-video__control");
el.controller.video = el.querySelector("video");
el.alert = el.parentElement.querySelector(".common-tutorial__alert");
el.tooltip = el.parentElement.querySelector(".js-tutorial-tooltip");
el.tooltipCta = el.parentElement.querySelector(
".js-tutorial-tooltip-cta"
);
el.video.playIndex = index;
};
const setStepStatus = function (el) {
stepInfo.push({
alert: el.getAttribute("data-alert"),
tooltip: el.getAttribute("data-tooltip"),
});
};
const eventList = {
videoController: function () {
for (let i = 0; i < objs.videos.length; i++) {
objs.videos[i].controller.addEventListener("click", function () {
if (this.video.paused) {
this.video.play();
} else {
this.video.pause();
}
});
}
},
nextVideoPlay: function (index) {
if (!!els.videoList[index].tooltip) {
utils.onAccessibility(els.videoList[index].tooltip);
}
els.videoList[index + 1].classList.add("is-visible");
utils.onAccessibility(els.videoList[index]);
if (els.videos[index + 1].readyState > 3) {
els.videos[index + 1].play();
} else {
els.videos[index + 1].addEventListener("canplay", function () {
if (this.paused) this.play();
});
}
setTimeout(() => {
els.videoList[index].classList.remove("is-visible");
if (!!els.videoList[index].tooltipCta) {
els.videoList[index].tooltipCta.blur();
}
els.videos[index + 1].videoWrap.controller.focus();
}, 200);
},
click: function () {
let self = this;
for (let i = 0; i < els.tooltipCta.length; i++) {
els.tooltipCta[i].addEventListener("click", function () {
self.nextVideoPlay(i);
});
}
},
endCallback: function () {
if (stepInfo[this.video.playIndex].tooltip == "true") {
this.wrap.tooltipCta.removeAttribute("disabled");
this.wrap.tooltip.classList.add("is-visible");
}
if (stepInfo[this.video.playIndex].alert == "true") {
this.wrap.alert.classList.add("is-visible");
}
if (!this.wrap.classList.contains("is-completed")) {
this.wrap.classList.add("is-completed");
this.controller.style.display = "none";
}
},
};
const setVideos = function () {
objs.videos = [];
for (let i = 0; i < els.videoWrap.length; i++) {
let isVideoWrap = els.videoWrap[i];
objs.videos.push(
ANIUTIL.videoHandler({
wrap: isVideoWrap,
video: isVideoWrap.video,
controller: isVideoWrap.controller,
resetCallback: function () {
if (this.wrap.classList.contains("is-completed")) {
this.wrap.classList.remove("is-completed");
if ((this.controller.style.display = "none"))
this.controller.style.display = "";
}
},
playCallback: function () {
els.videoList[this.video.playIndex].removeAttribute(
"tabindex"
);
els.videoList[this.video.playIndex].removeAttribute(
"aria-hidden"
);
this.controller.style.display = "block";
utils.offAccessibility(this.controller);
setTagging.pause(this.controller);
let nextPlayindex = this.video.playIndex + 1;
if (
els.videos.length - 1 > this.video.playIndex &&
els.videos[nextPlayindex].readyState < 4
) {
videoLoader.setResponsiveMedia([els.videos[nextPlayindex]]);
}
},
pauseCallback: function () {
setTagging.play(this.controller);
},
endCallback: function () {
if (!!this.wrap.tooltip) {
let self = this;
utils.offAccessibility(this.wrap.tooltip);
setTimeout(function () {
self.wrap.tooltipCta.focus();
}, 200);
}
this.controller.style.display = "none !important";
eventList.endCallback.call(this);
if (els.videos.length - 1 == this.video.playIndex) {
els.tutorialReplay.style.display = "block";
els.tutorialReplay.removeAttribute("tabindex");
els.tutorialReplay.removeAttribute("aria-hidden");
els.tutorialReplay.focus();
}
},
})
);
}
};
const setTagging = {
play: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("pause", "play")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("pause", "play")
);
}
},
pause: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("play", "pause")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("play", "pause")
);
}
},
};
const bindEvents = function () {
for (let i = 0; i < els.videoWrap.length; i++) {
setProperty(els.videoWrap[i], i);
setStepStatus(els.videoList[i]);
}
setVideos();
eventList.videoController();
eventList.click();
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.suggestionAiTutorial = (function () {
const utils = window.flagship.common.utils;
const common = window.flagship.highlights.common;
let els = {};
let objs = {};
let stepInfo = [];
let status = {};
const init = function () {
els.section = document.querySelector(
".highlights-generative-edit-tutorial"
);
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.tutorialVideoContainer = els.section.querySelector(
".common-tutorial__main-video"
);
els.videoList = els.tutorialVideoContainer.querySelectorAll(
".common-tutorial__video"
);
els.videoWrap = els.tutorialVideoContainer.querySelectorAll(
".common-tutorial__video .common-video"
);
els.videos = els.tutorialVideoContainer.querySelectorAll(
".common-tutorial__video .common-video__video"
);
els.coverImages = els.tutorialVideoContainer.querySelectorAll(
".common-tutorial__video .common-video__cover-image"
);
els.tooltipCta = els.tutorialVideoContainer.querySelectorAll(
".js-tutorial-tooltip-cta"
);
els.generativeCta = els.tutorialVideoContainer.querySelector(
".js-tutorial-generative-cta"
);
els.tutorialReplay = els.tutorialVideoContainer.querySelector(
".common-tutorial__replay-cta"
);
};
const setProperty = function (el, index) {
el.video = el.querySelector("video");
el.controller = el.querySelector(".common-video__control");
el.controller.video = el.querySelector("video");
el.alert = el.parentElement.querySelector(".common-tutorial__alert");
el.tooltip = el.parentElement.querySelector(".js-tutorial-tooltip");
el.tooltipCta = el.parentElement.querySelector(
".js-tutorial-tooltip-cta"
);
el.video.playIndex = index;
};
const setStepStatus = function (el) {
stepInfo.push({
alert: el.getAttribute("data-alert"),
tooltip: el.getAttribute("data-tooltip"),
});
};
const eventList = {
videoController: function () {
for (let i = 0; i < objs.videos.length; i++) {
objs.videos[i].controller.addEventListener("click", function () {
if (this.video.paused) {
this.video.play();
} else {
this.video.pause();
}
});
}
},
nextVideoPlay: function (index) {
if (!!els.videoList[index].tooltip) {
utils.onAccessibility(els.videoList[index].tooltip);
}
els.videoList[index + 1].classList.add("is-visible");
utils.onAccessibility(els.videoList[index]);
if (els.videos[index + 1].readyState > 3) {
els.videos[index + 1].play();
} else {
els.videos[index + 1].addEventListener("canplay", function () {
if (this.paused) this.play();
});
}
setTimeout(() => {
els.videoList[index].classList.remove("is-visible");
if (!!els.videoList[index].tooltipCta) {
els.videoList[index].tooltipCta.blur();
}
els.videos[index + 1].videoWrap.controller.focus();
}, 200);
},
click: function () {
let self = this;
els.tooltipCta[0].addEventListener("click", function () {
if (els.videos[2].readyState < 4) {
imageLoader.setResponsiveMedia([
els.coverImages[2],
els.coverImages[3],
els.coverImages[4],
]);
videoLoader.setResponsiveMedia([
els.videos[2],
els.videos[3],
els.videos[4],
]);
}
self.nextVideoPlay(0);
});
els.tooltipCta[1].addEventListener("click", function () {
self.nextVideoPlay(1);
}),
els.generativeCta.addEventListener("click", function () {
this.setAttribute("disabled", "");
utils.onAccessibility(els.generativeCta);
this.parentElement.classList.remove("is-visible");
self.nextVideoPlay(5);
});
},
endCallback: function () {
let autoplay =
this.video.playIndex == 2 || this.video.playIndex == 6;
if (stepInfo[this.video.playIndex].tooltip == "true") {
if (this.video.playIndex != 5)
this.wrap.tooltipCta.removeAttribute("disabled");
this.wrap.tooltip.classList.add("is-visible");
}
if (stepInfo[this.video.playIndex].alert == "true") {
this.wrap.alert.classList.add("is-visible");
}
if (autoplay) {
eventList.nextVideoPlay(this.video.playIndex);
}
let self = this;
switch (this.video.playIndex) {
case 2:
if (
!els.generativeCta.classList.contains("is-bg-load-complete")
) {
els.generativeCta.classList.add("is-bg-load-complete");
}
els.generativeCta.parentElement.classList.add("is-visible");
break;
case 3:
if (els.videos[5].readyState < 4) {
imageLoader.setResponsiveMedia([els.coverImages[5]]);
videoLoader.setResponsiveMedia([els.videos[5]]);
}
(function (wrap, video) {
setTimeout(() => {
self.wrap.alert.classList.remove("is-visible");
eventList.nextVideoPlay(video.playIndex);
}, 3000);
})(this.wrap, this.video);
break;
case 4:
if (els.videos[6].readyState < 4) {
imageLoader.setResponsiveMedia([
els.coverImages[6],
els.coverImages[7],
]);
videoLoader.setResponsiveMedia([
els.videos[6],
els.videos[7],
]);
}
(function (wrap, video) {
setTimeout(() => {
self.wrap.alert.classList.remove("is-visible");
eventList.nextVideoPlay(video.playIndex);
}, 3000);
})(this.wrap, this.video);
break;
case 5:
els.generativeCta.removeAttribute("disabled");
utils.offAccessibility(els.generativeCta);
break;
case 7:
els.generativeCta.parentElement.classList.add("is-visible");
els.generativeCta.classList.add("is-tutorial-end");
break;
default:
break;
}
if (!this.wrap.classList.contains("is-completed")) {
this.wrap.classList.add("is-completed");
this.controller.style.display = "none";
}
if (els.videos.length - 1 == this.video.playIndex) {
els.tutorialReplay.style.display = "block";
els.tutorialReplay.removeAttribute("tabindex");
els.tutorialReplay.removeAttribute("aria-hidden");
els.tutorialReplay.focus();
}
},
};
const setVideos = function () {
objs.videos = [];
for (let i = 0; i < els.videoWrap.length; i++) {
let isVideoWrap = els.videoWrap[i];
objs.videos.push(
ANIUTIL.videoHandler({
wrap: isVideoWrap,
video: isVideoWrap.video,
controller: isVideoWrap.controller,
resetCallback: function () {
if (this.wrap.classList.contains("is-completed")) {
this.wrap.classList.remove("is-completed");
if ((this.controller.style.display = "none"))
this.controller.style.display = "";
}
},
playCallback: function () {
els.videoList[this.video.playIndex].removeAttribute(
"tabindex"
);
els.videoList[this.video.playIndex].removeAttribute(
"aria-hidden"
);
this.controller.style.display = "block";
utils.offAccessibility(this.controller);
setTagging.pause(this.controller);
},
pauseCallback: function () {
setTagging.play(this.controller);
},
endCallback: function () {
if (!!this.wrap.tooltip) {
let self = this;
if (this.video.playIndex != 5) {
utils.offAccessibility(this.wrap.tooltip);
setTimeout(function () {
self.wrap.tooltipCta.focus();
}, 200);
}
}
if (this.video.playIndex == els.videos.length - 3) {
setTimeout(function () {
els.generativeCta.focus();
}, 200);
}
this.controller.style.display = "none !important";
eventList.endCallback.call(this);
},
})
);
}
};
const setTagging = {
play: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("pause", "play")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("pause", "play")
);
}
},
pause: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("play", "pause")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("play", "pause")
);
}
},
};
const bindEvents = function () {
for (let i = 0; i < els.videoWrap.length; i++) {
setProperty(els.videoWrap[i], i);
setStepStatus(els.videoList[i]);
}
setVideos();
eventList.videoController();
eventList.click();
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.tutorial = (function () {
const utils = window.flagship.common.utils;
const resize = window.flagship.common.resize;
const common = window.flagship.highlights.common;
const tutorialPopup = window.flagship.highlights.tutorialPopup;
let objs = {};
let status = {};
let commonEls = {};
let isDevice = resize.checkResolution();
status.isGlobal = document.documentElement.classList.contains("global");
let sectionList = document.querySelectorAll(
"#generative-edit, #circle-to-search, #live-translate, #chat-assist, #note-assist"
);
let layerPopup = document.querySelectorAll(
"#generative-edit-experience, #circle-to-search-experience, #live-translate-experience, #chat-assist-experience, #note-assist-experience"
);
let popupClassList = [
".highlights-generative-edit-tutorial",
".highlights-circle-to-search-tutorial",
".highlights-live-translate-tutorial",
".highlights-chat-assist-tutorial",
".highlights-samsung-note-tutorial",
];
let statusClass = {
isVisible: "is-visible",
isTutorialOpend: "is-tutorial-opened",
isTutorialOpenedMo: "is-tutorial-opened-mo",
isInfoOpen: "is-info-open",
isInfoVisible: "is-info-visible",
isTutorialEnd: "is-tutorial-end",
isActive: "is-active",
isBgLoadComplete: "is-bg-load-complete",
isCompleted: "is-completed",
isOpen: "is-open",
};
const init = function () {
status.isHash = false;
status.isIos = utils.detector.isIosDevice;
status.overview = {};
commonEls.globalSubNav = document.querySelector("#subnav");
commonEls.globalContents = document.querySelector("#contents");
commonEls.dotcomContents =
document.querySelector(".pd-g-floating-nav");
commonEls.overview = document.querySelector(".highlights-overview");
commonEls.gnb = document.querySelector(".nv00-gnb");
commonEls.tooltipWrap = document.querySelectorAll(
".js-tutorial-tooltip"
);
if (status.isGlobal) {
commonEls.contentsChildren =
document.querySelector("#contents").children;
commonEls.commonUi = document.querySelectorAll(
"#accessibility-navigation, #header, #footer"
);
} else {
commonEls.wrapChildren = document.querySelector("#wrap").children;
commonEls.contentChildren =
document.querySelector("#content").children;
commonEls.rootChildren = document.querySelector(
"#content .root .responsivegrid .aem-Grid--12"
).children;
commonEls.flotingNavi =
document.querySelector(".pd-g-floating-nav");
commonEls.flotingNaviFixedWrap = document.querySelector(
".floating-navigation__wrap"
);
}
for (let i = 0; i < sectionList.length; i++) {
let opts = {
section: sectionList[i],
layerPopup: layerPopup[i],
popupClass: popupClassList[i],
openCta: sectionList[i].querySelector(".js-tutorial-popup"),
closeCta: layerPopup[i].querySelector(
".common-tutorial__close-cta--popup"
),
moCloseCta: layerPopup[i].querySelector(
".common-tutorial__close-cta--video"
),
};
els = getElements(opts);
tooltipAccessibility();
setPopup(opts, els);
bindEvents(els, i);
}
};
const getElements = function (opts) {
let els = {};
els.openCta = opts.section.querySelector(".js-tutorial-popup");
els.layerPopup = opts.layerPopup;
els.innerWrapper = opts.layerPopup.querySelector(
".common-tutorial__inner-wrapper"
);
els.innerWrap = opts.layerPopup.querySelector(
".common-tutorial__inner-wrap"
);
els.textWrap = opts.layerPopup.querySelector(
".common-tutorial__text"
);
els.closeCta = opts.layerPopup.querySelector(
".common-tutorial__close-cta--popup"
);
els.moCloseCta = opts.moCloseCta;
els.infoPopup = opts.layerPopup.querySelector(
".common-tutorial__info-area"
);
els.videoContent = opts.layerPopup.querySelector(
".common-tutorial__video-content"
);
els.introVideoSection = opts.layerPopup.querySelector(
".common-tutorial__intro-video"
);
els.introVideoWrap = opts.layerPopup.querySelector(
".common-tutorial__intro-video .common-video"
);
els.introVideo = opts.layerPopup.querySelector(
".common-tutorial__intro-video video"
);
els.introCoverImage = opts.layerPopup.querySelector(
".common-tutorial__intro-video .common-video__cover-image"
);
if (
opts.layerPopup.classList.contains(
"highlights-live-translate-tutorial"
)
) {
els.introCta = opts.layerPopup.querySelector(
".common-tutorial__intro-video .js-tutorial-tooltip-cta"
);
}
els.tutorialContents = opts.layerPopup.querySelector(
".common-tutorial__video-content"
);
els.tutorialVideoContainer = opts.layerPopup.querySelector(
".common-tutorial__main-video"
);
els.tutorialVideoWrap = opts.layerPopup.querySelectorAll(
".common-tutorial__main-video .common-tutorial__video"
);
els.tutorialVideos = opts.layerPopup.querySelectorAll(
".common-tutorial__main-video .common-tutorial__video video"
);
els.tutorialCoverImages = opts.layerPopup.querySelectorAll(
".common-tutorial__main-video .common-video__cover-image"
);
els.tutorialActiveCta = opts.layerPopup.querySelector(
".common-tutorial__cta--play button"
);
els.tutorialDeactiveCta = opts.layerPopup.querySelector(
".common-tutorial__cta--pause button"
);
els.tutorialTooltip = opts.layerPopup.querySelectorAll(
".common-tutorial__main-video .js-tutorial-tooltip"
);
els.tutorialAlert = opts.layerPopup.querySelectorAll(
".common-tutorial__main-video .js-tutorial-alert"
);
els.generativeCta = opts.layerPopup.querySelector(
".js-tutorial-generative-cta"
);
els.tutorialFrame = opts.layerPopup.querySelector(
".common-tutorial__main-video.common-video__frame"
);
els.tutorialReplay = opts.layerPopup.querySelector(
".common-tutorial__replay-cta"
);
els.tutorialNavigation = opts.layerPopup.querySelector(
".common-tutorial__navigation"
);
els.navPrev = els.tutorialNavigation.querySelector(
".common-tutorial__navigation-button--prev"
);
els.navNext = els.tutorialNavigation.querySelector(
".common-tutorial__navigation-button--next"
);
els.tutorialPagination = opts.layerPopup.querySelector(
".common-tutorial__pagination-area"
);
els.supClicker = opts.layerPopup.querySelectorAll("a.click_sup");
els.layerPopup.opener = els.openCta;
els.layerPopup.targetOpener = opts.openCta;
return els;
};
const setProperty = function (els) {
els.introVideoWrap.video = els.introVideo;
els.introVideoWrap.controller = els.introVideoWrap.querySelector(
".common-video__control"
);
els.introVideoWrap.controller.video = els.introVideo;
};
const tooltipAccessibility = function () {
for (let i = 0; i < commonEls.tooltipWrap.length; i++) {
utils.onAccessibility(commonEls.tooltipWrap[i]);
}
};
const eventList = {
common: {
setMobileVideoWidth: function (els) {
if (
els.layerPopup.classList.contains("is-open") &&
resize.checkResolution().indexOf("mobile") > -1
) {
let containerWidth = window.innerWidth;
let containerHeight = window.innerHeight;
if (!status.isIos) {
let videoHeight = Math.floor(containerWidth * 2.1666);
if (videoHeight > containerHeight) {
els.tutorialVideoContainer.style.width = `${Math.floor(
containerHeight * 0.4615
)}px`;
els.tutorialVideoContainer.style.height = `${containerHeight}px`;
} else {
els.tutorialVideoContainer.style.width = "";
els.tutorialVideoContainer.style.height = `${videoHeight}px`;
}
} else {
els.tutorialVideoContainer.style.width = `${Math.floor(
containerHeight * 0.4615
)}px`;
}
} else if (
resize.checkResolution() != "mobile" &&
els.tutorialVideoContainer.style.height
) {
if (!status.isIos) {
els.tutorialVideoContainer.style.width = "";
els.tutorialVideoContainer.style.height = "";
} else {
els.tutorialVideoContainer.style.width = "";
}
}
},
},
resize: {
position: function (els) {
if (els.layerPopup.classList.contains("is-open")) {
if (
isDevice.indexOf("desktop") > -1 &&
resize.checkResolution().indexOf("desktop") > -1
) {
let isHash = location.hash;
if (!status.isGlobal && window.pageYOffset == 0 && !!isHash) {
eventList.popup.setPopupPosition(els.layerPopup);
}
}
if (isDevice != resize.checkResolution()) {
eventList.popup.setPopupPosition(els.layerPopup);
if (
els.layerPopup.querySelector(
".is-info-open, .is-tutorial-opened"
)
) {
eventList.tutorial.deactive(els);
eventList.tutorial.reset(els);
}
isDevice = resize.checkResolution();
}
}
},
},
tutorial: {
videoContentReset: function (els) {
els.videoContent.classList.remove(statusClass.isInfoOpen);
els.videoContent.classList.remove(statusClass.isInfoVisible);
els.videoContent.classList.add(statusClass.isTutorialOpend);
},
reset: function (els) {
if (els.generativeCta) {
els.generativeCta.classList.remove(
statusClass.isVisible,
statusClass.isTutorialEnd
);
els.generativeCta.parentElement.classList.remove(
statusClass.isVisible
);
}
els.tutorialActiveCta.parentElement.classList.add(
statusClass.isActive
);
els.tutorialDeactiveCta.parentElement.classList.remove(
statusClass.isActive
);
els.tutorialContents.classList.remove(statusClass.isInfoOpen);
els.videoContent.classList.remove(statusClass.isInfoVisible);
els.tutorialContents.classList.remove(
statusClass.isTutorialOpend
);
if (resize.checkResolution().indexOf("mobile") > -1) {
els.layerPopup.classList.remove(statusClass.isTutorialOpenedMo);
}
for (let i = 0; i < els.tutorialVideoWrap.length; i++) {
if (els.tutorialVideoWrap[i])
els.tutorialVideoWrap[i].classList.remove(
statusClass.isVisible
);
if (els.tutorialVideos[i]) {
if (!els.tutorialVideos[i].paused) {
els.tutorialVideos[i].pause();
}
els.tutorialVideos[i].currentTime = 0;
}
let isComplete = els.tutorialVideoWrap[i].querySelector(
`.${statusClass.isCompleted}`
);
if (isComplete)
els.tutorialVideos[i].videoHandler.resetCallback();
if (els.tutorialTooltip[i])
els.tutorialTooltip[i].classList.remove(
statusClass.isVisible
);
if (els.tutorialAlert[i])
els.tutorialAlert[i].classList.remove(statusClass.isVisible);
clearTimeout(status.infoRemoveTiming);
}
if (!!els.introCta) {
els.introCta.parentElement.classList.remove(
statusClass.isVisible
);
utils.onAccessibility(els.introCta.parentElement);
}
els.tutorialReplay.style.display = "";
if (!els.tutorialReplay.hasAttribute("tabindex"))
els.tutorialReplay.setAttribute("tabindex", -1);
if (!els.tutorialReplay.hasAttribute("aria-hidden"))
els.tutorialReplay.setAttribute("aria-hidden", true);
els.introVideoWrap.controller.removeAttribute("tabindex");
els.introVideoWrap.controller.removeAttribute("aria-hidden");
},
videoVisible: function (els) {
if (!els.introVideo.paused) {
els.introVideo.pause();
}
els.videoContent.classList.add(statusClass.isInfoOpen);
setTimeout(() => {
els.videoContent.classList.add(statusClass.isInfoVisible);
}, 0);
els.tutorialVideoWrap[0].classList.add(statusClass.isVisible);
},
imageLoad: function (els) {
if (
!els.tutorialFrame.classList.contains(
statusClass.isBgLoadComplete
)
) {
els.tutorialFrame.classList.add(statusClass.isBgLoadComplete);
}
if (
!els.tutorialDeactiveCta.classList.contains(
statusClass.isBgLoadComplete
)
) {
els.tutorialDeactiveCta.classList.add(
statusClass.isBgLoadComplete
);
}
},
setActiveCta: function (els) {
els.tutorialActiveCta.parentElement.classList.remove(
statusClass.isActive
);
els.tutorialDeactiveCta.parentElement.classList.add(
statusClass.isActive
);
if (resize.checkResolution().indexOf("mobile") > -1) {
els.layerPopup.classList.add(statusClass.isTutorialOpenedMo);
}
},
activeInfo: function (els) {
let self = this;
clearTimeout(status.infoRemoveTiming);
status.infoRemoveTiming = setTimeout(() => {
self.videoContentReset(els);
els.tutorialVideos[0].play();
utils.offAccessibility(els.tutorialVideoWrap[0]);
let tutorialVideoController =
els.tutorialVideoWrap[0].querySelector(
".common-video__control.common-play-button"
);
tutorialVideoController.focus();
if (resize.checkResolution().indexOf("mobile") > -1) {
els.layerPopup.classList.add(statusClass.isTutorialOpenedMo);
}
if (els.tutorialVideos[1].readyState < 4) {
imageLoader.setResponsiveMedia([els.tutorialCoverImages[1]]);
videoLoader.setResponsiveMedia([els.tutorialVideos[1]]);
}
els.tutorialVideos[0].focus();
status.infoRemoveTiming = null;
}, 3000);
},
active: function (els) {
this.onAccessibility(els);
if (
resize.checkResolution().indexOf("mobile") > -1 &&
!status.isIos
) {
document.documentElement.requestFullscreen();
}
if (resize.checkResolution().indexOf("mobile") > -1) {
setTimeout(function () {
els.moCloseCta.focus();
}, 300);
} else {
setTimeout(function () {
els.tutorialDeactiveCta.focus();
}, 300);
}
status.infoRemoveTiming = null;
this.videoVisible(els);
this.imageLoad(els);
this.setActiveCta(els);
this.activeInfo(els);
},
videoReset: function (els) {
els.introVideo.currentTime = 0;
if (isDevice == resize.checkResolution()) {
els.introVideo.play();
}
for (let i = 0; i < els.tutorialVideoWrap.length; i++) {
els.tutorialVideoWrap[i].classList.remove(
statusClass.isVisible
);
if (!els.tutorialVideos[i].paused) {
els.tutorialVideos[i].pause();
els.tutorialVideos[i].currentTime = 0;
}
}
},
ctaReset: function (els) {
els.tutorialDeactiveCta.parentElement.classList.remove(
statusClass.isActive
);
els.tutorialActiveCta.parentElement.classList.add(
statusClass.isActive
);
if (resize.checkResolution().indexOf("mobile") == -1) {
els.layerPopup.classList.remove(statusClass.isTutorialOpenedMo);
}
if (!!els.introCta) {
els.introCta.parentElement.classList.remove(
statusClass.isVisible
);
utils.onAccessibility(els.introCta.parentElement);
}
},
deactive: function (els) {
els.videoContent.classList.remove(
statusClass.isInfoOpen,
statusClass.isInfoVisible,
statusClass.isTutorialOpend
);
this.offAccessibility(els);
if (
resize.checkResolution().indexOf("mobile") > -1 &&
!status.isIos
) {
if (document.fullscreenElement != null)
document.exitFullscreen();
}
setTimeout(function () {
els.tutorialActiveCta.focus();
}, 300);
this.videoReset(els);
this.ctaReset(els);
for (let i = 0; i < els.tutorialVideoWrap.length; i++) {
utils.onAccessibility(els.tutorialVideoWrap[i]);
}
},
onAccessibility: function (els) {
if (resize.checkResolution().indexOf("mobile") > -1) {
utils.onPopupAccessibility(els.textWrap);
if (!status.isGlobal) {
utils.onPopupAccessibility(commonEls.flotingNaviFixedWrap);
} else {
utils.onPopupAccessibility(commonEls.globalSubNav);
}
}
utils.onPopupAccessibility(els.introVideoSection);
},
offAccessibility: function (els) {
if (resize.checkResolution().indexOf("mobile") > -1) {
utils.offPopupAccessibility(els.textWrap);
if (!status.isGlobal) {
utils.offPopupAccessibility(commonEls.flotingNaviFixedWrap);
} else {
utils.offPopupAccessibility(commonEls.globalSubNav);
}
}
utils.offPopupAccessibility(els.introVideoSection);
},
},
popup: {
setOverviewStatus: function (opts) {
if (
opts.openCta.parentElement
.getAttribute("class")
.indexOf("__tutorial-cta") > -1
) {
let isOverviewVideo = commonEls.overview.querySelector(
".swiper-slide-active video"
);
if (!isOverviewVideo.paused) {
status.overview = {
video: isOverviewVideo,
paused: true,
};
isOverviewVideo.pause();
}
}
},
mediaLoad: function (els) {
if (
!els.tutorialActiveCta.classList.contains(
statusClass.isBgLoadComplete
)
) {
els.tutorialActiveCta.classList.add(
statusClass.isBgLoadComplete
);
}
if (els.introVideo.readyState < 4) {
imageLoader.setResponsiveMedia([els.introCoverImage]);
videoLoader.setResponsiveMedia([els.introVideo]);
}
if (
!els.navPrev.classList.contains(statusClass.isBgLoadComplete)
) {
els.navPrev.classList.add(statusClass.isBgLoadComplete);
}
if (
!els.navNext.classList.contains(statusClass.isBgLoadComplete)
) {
els.navNext.classList.add(statusClass.isBgLoadComplete);
}
},
playIntroVideo: function (els) {
if (els.introVideo.readyState >= 4) {
els.introVideo.currentTime = 0;
els.introVideo.play();
} else {
els.introVideo.addEventListener("canplay", function () {
if (this.paused) this.play();
});
}
},
tutorialIntroImgLoad: function (els) {
if (
!!els.introCoverImage &&
!els.introCoverImage.classList.contains("is-img-load-complete")
) {
imageLoader.setResponsiveMedia([els.introCoverImage]);
}
},
tutorialMediaLoad: function (els) {
if (els.tutorialVideos[0].readyState < 4) {
imageLoader.setResponsiveMedia([els.tutorialCoverImages[0]]);
videoLoader.setResponsiveMedia([els.tutorialVideos[0]]);
}
if (
!els.tutorialReplay.classList.contains(
statusClass.isBgLoadComplete
)
) {
els.tutorialReplay.classList.add(statusClass.isBgLoadComplete);
}
},
setPopupPosition: function (layerPopup) {
let isHash = location.hash;
let dotcomGnbHeight = 0;
if (!status.isGlobal && window.pageYOffset == 0 && !!isHash) {
dotcomGnbHeight =
document.querySelector(".nv00-gnb").clientHeight;
layerPopup.style.top = `${
utils.getNavHeight() + dotcomGnbHeight
}px`;
} else {
layerPopup.style.top = `${utils.getNavHeight()}px`;
}
},
setUiEls: function (opts, els, target) {
if (commonEls.globalSubNav)
commonEls.globalSubNav.style.opacity = 1;
opts.layerPopup.classList.add("is-init");
target.openerCta.blur();
if (
`#${els.openCta.getAttribute("data-hash")}` ==
window.location.hash
) {
let oldOpenPopup = document.querySelector(
".common-tutorial.is-open"
);
if (!!oldOpenPopup) {
let oldOpenPopupId = oldOpenPopup.getAttribute("id");
if (`#${oldOpenPopupId}` != window.location.hash) {
document.querySelector(`#${oldOpenPopupId}`).hide();
}
}
status.isHash = true;
if (!status.isGlobal) commonEls.gnb.style.display = "none";
}
if (!!els.introCta) {
els.introVideo.addEventListener("ended", function () {
utils.offAccessibility(els.introCta.parentElement);
setTimeout(function () {
els.introCta.parentElement.classList.add(
statusClass.isVisible
);
}, 100);
});
}
},
setSubnavi: function (opts) {
if (commonEls.globalSubNav)
commonEls.globalSubNav.style.opacity = 0.9;
opts.layerPopup.classList.remove("is-init");
},
focusHandler: function (opts, els) {
let isHash = status.isHash && els.layerPopup.targetOpener;
let isOverview = els.layerPopup.isOverview;
let isController = els.layerPopup.isController;
if (isHash || (!!isController && !!!isOverview)) {
els.layerPopup.targetOpener.blur();
if (!status.isIos) els.layerPopup.targetOpener.focus();
setTimeout(function () {
els.layerPopup.targetOpener.focus();
if (isHash) {
status.isHash = false;
history.pushState(
"",
document.title,
window.location.pathname
);
if (!status.isGlobal) commonEls.gnb.style.display = "";
}
if (!!isController) isController = false;
}, 300);
}
if (!!isOverview) {
opts.layerPopup.overviewCta.blur();
if (!status.isIos) opts.layerPopup.overviewCta.focus();
setTimeout(function () {
if (!document.querySelector(".common-tutorial.is-open")) {
opts.layerPopup.overviewCta.focus();
for (let i = 0; i < layerPopup.length; i++) {
layerPopup[i].isOverview = false;
layerPopup[i].overviewCta = null;
}
}
}, 300);
}
},
onAccessibilityGlobal: function (els) {
for (let i = 0; i < commonEls.contentsChildren.length; i++) {
let isId = commonEls.contentsChildren[i].getAttribute("id");
if (
(isId != null &&
isId.indexOf("experience") == -1 &&
isId.indexOf("subnav") == -1) ||
isId == null
) {
utils.onPopupAccessibility(commonEls.contentsChildren[i]);
}
}
for (let i = 0; i < commonEls.commonUi.length; i++) {
utils.onPopupAccessibility(commonEls.commonUi[i]);
}
},
offAccessibilityGlobal: function (els) {
for (let i = 0; i < commonEls.contentsChildren.length; i++) {
let isId = commonEls.contentsChildren[i].getAttribute("id");
if (
(isId != null &&
isId.indexOf("experience") == -1 &&
isId.indexOf("subnav") == -1) ||
isId == null
) {
utils.offPopupAccessibility(commonEls.contentsChildren[i]);
}
}
for (let i = 0; i < commonEls.commonUi.length; i++) {
utils.offPopupAccessibility(commonEls.commonUi[i]);
}
},
onAccessibilityDotom: function (els) {
let staticContent = document.querySelector(".static-content");
staticContent.style.zIndex = -1;
staticContent.style.position = "relative";
for (let i = 0; i < commonEls.wrapChildren.length; i++) {
let isId = commonEls.wrapChildren[i].getAttribute("id");
if (
(isId != null && isId.indexOf("content") == -1) ||
isId == null
) {
utils.onPopupAccessibility(commonEls.wrapChildren[i]);
}
}
for (let i = 0; i < commonEls.contentChildren.length; i++) {
let isClass =
commonEls.contentChildren[i].getAttribute("class");
if (
(isClass != null && isClass.indexOf("root") == -1) ||
isClass == null
) {
utils.onPopupAccessibility(commonEls.contentChildren[i]);
}
}
for (let i = 0; i < commonEls.rootChildren.length; i++) {
let isClass = commonEls.rootChildren[i].getAttribute("class");
if (
(isClass != null &&
isClass.indexOf("pd-g-floating-nav") == -1) ||
isClass == null
) {
utils.onPopupAccessibility(commonEls.rootChildren[i]);
}
}
},
offAccessibilityDotcom: function (els) {
for (let i = 0; i < commonEls.wrapChildren.length; i++) {
utils.offPopupAccessibility(commonEls.wrapChildren[i]);
}
if (!status.isIos) {
for (let i = 0; i < commonEls.contentChildren.length; i++) {
commonEls.contentChildren[i].removeAttribute("tabindex");
commonEls.contentChildren[i].removeAttribute("aria-hidden");
}
for (let i = 0; i < commonEls.rootChildren.length; i++) {
commonEls.rootChildren[i].removeAttribute("tabindex");
commonEls.rootChildren[i].removeAttribute("aria-hidden");
}
} else {
for (let i = 0; i < commonEls.contentChildren.length; i++) {
utils.offPopupAccessibility(commonEls.contentChildren[i]);
}
for (let i = 0; i < commonEls.rootChildren.length; i++) {
utils.offPopupAccessibility(commonEls.rootChildren[i]);
}
}
setTimeout(function () {
let staticContent = document.querySelector(".static-content");
staticContent.style.zIndex = "";
staticContent.style.position = "";
}, 200);
},
onAccessibility: function (els) {
els.closeCta.removeAttribute("tabindex");
els.closeCta.removeAttribute("aria-hidden");
if (status.isGlobal) {
this.onAccessibilityGlobal(els);
} else {
this.onAccessibilityDotom(els);
}
},
offAccessibility: function (els) {
els.closeCta.setAttribute("tabindex", "-1");
els.closeCta.setAttribute("aria-hidden", true);
if (status.isGlobal) {
this.offAccessibilityGlobal(els);
} else {
this.offAccessibilityDotcom(els);
}
},
},
};
const eventHandler = {
resize: function (els) {
window.addEventListener("resize", function () {
eventList.resize.position(els);
eventList.common.setMobileVideoWidth(els);
});
},
infoPopupDeactive: function (els) {
els.infoPopup.addEventListener("click", function () {
eventList.tutorial.videoContentReset(els);
clearTimeout(status.infoRemoveTiming);
els.tutorialVideos[0].play();
let tutorialVideoController =
els.tutorialVideoWrap[0].querySelector(
".common-video__control.common-play-button"
);
tutorialVideoController.focus();
if (resize.checkResolution().indexOf("mobile") > -1) {
els.layerPopup.classList.add(statusClass.isTutorialOpenedMo);
}
if (els.tutorialVideos[1].readyState < 4) {
imageLoader.setResponsiveMedia([els.tutorialCoverImages[1]]);
videoLoader.setResponsiveMedia([els.tutorialVideos[1]]);
}
status.infoRemoveTiming = null;
});
},
tutorialActiveEvent: function (els) {
if (!!els.introCta) {
els.introCta.addEventListener("click", function () {
eventList.tutorial.active(els);
});
}
els.tutorialActiveCta.addEventListener("click", function () {
this.parentElement.classList.remove(statusClass.isActive);
eventList.tutorial.active(els);
});
},
tutorialDeactiveEvent: function (els) {
els.tutorialDeactiveCta.addEventListener("click", function () {
eventList.tutorial.deactive(els);
eventList.tutorial.reset(els);
});
},
reStartTutorial: function (els) {
els.tutorialReplay.addEventListener("click", function () {
this.style.display = "";
eventList.tutorial.reset(els);
eventList.tutorial.active(els);
utils.onAccessibility(
els.tutorialVideoWrap[els.tutorialVideoWrap.length - 1]
);
});
},
videoController: function (index) {
objs[`introVideo_${index}`].controller.addEventListener(
"click",
function () {
if (this.video.paused) {
this.video.play();
} else {
this.video.pause();
}
}
);
},
onClickMoCloseCta: function (els) {
els.moCloseCta.addEventListener("click", function () {
eventList.tutorial.deactive(els);
eventList.tutorial.reset(els);
});
},
onClickController: function (els) {
els.tutorialNavigation.addEventListener("click", function (e) {
let isNaviBtn = e.target.classList.contains(
"common-tutorial__navigation-button"
);
if (isNaviBtn) {
_controllEvent(e.target);
}
});
els.tutorialPagination.addEventListener("click", function (e) {
let isPaginationBtn = e.target.classList.contains(
"common-tutorial__pagination"
);
if (isPaginationBtn) {
let currOpenPopupId = document
.querySelector(".common-tutorial.is-open")
.getAttribute("id");
let targetId = e.target.getAttribute("data-hash");
if (targetId != currOpenPopupId) {
_controllEvent(e.target);
}
}
});
const _controllEvent = function (target) {
let targetPopupId = target.getAttribute("data-hash");
document.querySelector(".common-tutorial.is-open").hide();
document.querySelector(`#${targetPopupId}`).show();
eventList.tutorial.reset(els);
document.querySelector(`#${targetPopupId}`).isController = true;
};
},
tutorialintroImgLoad: function (els) {
window.addEventListener("scroll", function () {
if (this.pageYOffset > 0) {
eventList.popup.tutorialIntroImgLoad(els);
}
});
},
moveToTutorialPopup: function (els) {
window.addEventListener("DOMContentLoaded", function () {
if (!status.isGlobal) {
commonEls.flotingNaviFixedWrap.after(els.layerPopup);
} else {
document.querySelector("#contents").prepend(els.layerPopup);
if (status.isIos) commonEls.globalSubNav.after(els.layerPopup);
}
});
},
onClickSup: function (els) {
for (let i = 0; i < els.supClicker.length; i++) {
els.supClicker[i].addEventListener("click", function (e) {
e.preventDefault();
e.stopPropagation();
let targetIndex = parseFloat(e.target.innerText),
disclaimer =
document.querySelectorAll("#desc-section li")[
targetIndex - 1
],
disclaimerText = disclaimer.innerText,
activeBlock = '' + disclaimerText + "";
els.layerPopup.hide();
setTimeout(() => {
disclaimer.innerHTML = activeBlock;
disclaimer.querySelector("a").focus();
}, 500);
const eventList = {
focusIn: function () {
common.centeredFocus.call(disclaimer.querySelector("a"));
disclaimer.removeEventListener(
"focusin",
eventList.focusIn
);
},
focusOut: function () {
disclaimer.innerHTML = disclaimerText;
disclaimer.removeAttribute("tabindex");
disclaimer.removeEventListener(
"focusout",
eventList.focusOut
);
},
};
disclaimer.addEventListener("focusin", eventList.focusIn);
disclaimer.addEventListener("focusout", eventList.focusOut);
});
}
},
};
const setIntroVideo = function (el, index) {
objs[`introVideo_${index}`] = ANIUTIL.videoHandler({
wrap: el,
video: el.video,
controller: el.controller,
playCallback: function () {
if (el.classList.contains(statusClass.isCompleted))
el.classList.remove(statusClass.isCompleted);
setTagging.pause(el.controller);
},
pauseCallback: function () {
setTagging.play(el.controller);
},
endCallback: function () {
if (!el.classList.contains(statusClass.isCompleted))
el.classList.add(statusClass.isCompleted);
},
});
};
const setPopup = function (opts, els) {
tutorialPopup({
tutorialPopup: opts.layerPopup,
tutorialPopupClass: opts.popupClass,
openerEvent: {
element: opts.openCta,
},
closeCtas: [opts.closeCta],
show: {
start: function (target) {
eventList.popup.setOverviewStatus(opts);
eventList.popup.mediaLoad(els);
eventList.popup.playIntroVideo(els);
eventList.popup.tutorialMediaLoad(els);
eventList.popup.setPopupPosition(opts.layerPopup);
eventList.popup.setUiEls(opts, els, target);
eventList.popup.onAccessibility(els);
},
end: function () {
if (status.isIos) opts.layerPopup.style.display = "block";
opts.layerPopup.classList.add("is-open");
eventList.common.setMobileVideoWidth(els);
},
},
hide: {
start: function (target) {
eventList.popup.offAccessibility(els);
target.openerCta.focus();
opts.layerPopup.classList.remove("is-open");
},
end: function () {
eventList.tutorial.reset(els);
els.introVideo.pause();
eventList.popup.setSubnavi(opts);
eventList.popup.focusHandler(opts, els);
els.innerWrapper.scrollTop = 0;
},
},
});
};
const setTagging = {
play: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("pause", "play")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("pause", "play")
);
}
},
pause: function (targetController) {
if (targetController.hasAttribute("data-omni")) {
let dataOmni = targetController
.getAttribute("data-omni")
.toLowerCase();
targetController.setAttribute(
"data-omni",
dataOmni.replace("play", "pause")
);
}
if (targetController.hasAttribute("ga-la")) {
let gaLa = targetController.getAttribute("ga-la").toLowerCase();
targetController.setAttribute(
"ga-la",
gaLa.replace("play", "pause")
);
}
},
};
const bindEvents = function (els, index) {
eventHandler.moveToTutorialPopup(els);
eventHandler.resize(els);
eventHandler.infoPopupDeactive(els);
eventHandler.tutorialActiveEvent(els);
eventHandler.tutorialDeactiveEvent(els);
eventHandler.reStartTutorial(els);
eventHandler.onClickMoCloseCta(els);
eventHandler.onClickController(els);
eventHandler.tutorialintroImgLoad(els);
eventHandler.onClickSup(els);
// introVideo
setProperty(els);
setIntroVideo(els.introVideoWrap, index);
eventHandler.videoController(index);
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.viewer = (function () {
const utils = window.flagship.common.utils;
const resize = window.flagship.common.resize;
let els = {},
status = {},
currDevice = resize.checkResolution();
const init = function () {
els.viewerBtn = document.querySelector(".viewer-btn");
if (!!els.viewerBtn) {
setElements();
setStatus();
setPopup();
bindEvents();
}
};
const setElements = function () {
els.wrapEl = document.querySelector("#wrap");
els.contents = document.querySelector("#contents");
// popup
els.popup = document.querySelector(".highlights-viewer");
els.popupContents = els.popup.querySelector(
".highlights-viewer__contents"
);
els.popupInner = els.popup.querySelector(".highlights-viewer__inner");
els.popupWrap = els.popup.querySelector(".highlights-viewer__wrap");
els.closeCta = els.popup.querySelector(
".highlights-viewer__close-cta"
);
els.viewerWrap = els.popup.querySelector(
".highlights-viewer__contents-wrap"
);
els.viewerContainer = els.popup.querySelector(
".highlights-viewer__container"
);
els.viewerIframe = els.popup.querySelector(
".highlights-viewer__container-viewer"
);
// popup-scroll
els.popupScroll = els.popup.querySelector(
".highlights-viewer__scroll"
);
els.popupScrollUpBtn = els.popup.querySelector(
".highlights-viewer__scroll-btn--up"
);
els.popupScrollDownBtn = els.popup.querySelector(
".highlights-viewer__scroll-btn--down"
);
// infoPopup
els.infoBtn = els.popup.querySelector(
".highlights-viewer__title-cta"
);
els.infoCloseBtn = els.popup.querySelector(
".highlights-viewer__header-close-cta"
);
els.infoDimmed = els.popup.querySelector(
".highlights-viewer__dimmed"
);
// timeout
els.resizeTimeout = null;
els.resizeInnerTimeout = null;
// viewer
els.viewerOpener = null;
els.viewerModel = "";
els.viewerColor = "";
};
const setStatus = function () {
status.viewerBaseUrl =
"//www.samsung.com/global/galaxy/3d-360/viewer/?";
status.defaultParams = "&gesture_guide=0";
status.defaultParams += "&bgcolor=transparent";
status.defaultParams += "&skin=colorlayer";
status.defaultParams += "&theme=roundlayer";
status.defaultParams += "&intro=1";
status.defaultParams += "&ruler=1";
status.defaultParams += "&breakpoint_criteria=outer";
status.defaultParams += "&breakpoint_desktop_width=1024";
status.defaultParams += "&intro_pose=2";
status.defaultParams += "&intro_pose_once=1";
status.defaultParams += "&intro_pose_hold=1";
status.moPoseReady = false;
status.isHash = false;
};
const bindEvents = function () {
window.addEventListener("DOMContentLoaded", onLoadHandler, {
once: true,
});
window.addEventListener("message", onReceiveV3DMessage, false);
//els.popupContents.addEventListener('scroll', onScrollPopupContents);
els.viewerIframe.addEventListener(
"DOMContentLoaded",
viewerEvents.onLoadLayerPopupIframe
);
els.popupScroll.addEventListener(
"click",
layerPopupScrollHandler.onClickLayerScroll
);
resize.add(onResizeHandler);
};
const onLoadHandler = function () {
setViewerWrap.innerWrapHeight();
setViewerWrap.layerScroll();
};
const onResizeHandler = function (currRes) {
currDevice = currRes;
if (utils.detector.isTouchDevice && !utils.detector.isIosDevice)
setViewerWrap.innerWrapHeight();
setViewerWrap.layerScroll();
};
const setViewerWrap = {
innerWrapHeight: function () {
clearTimeout(els.resizeInnerTimeout);
els.resizeInnerTimeout = setTimeout(function () {
if (els.popupInner) {
els.popupInner.style.height =
parseInt(window.innerHeight * 0.9) + "px";
}
}, 0);
},
layerScroll: function () {
clearTimeout(els.resizeTimeout);
els.resizeTimeout = setTimeout(function () {
layerPopupScrollHandler.setLayerScroll();
}, 300);
},
};
const setPopup = function () {
utils.layerPopup({
layerPopup: els.popup,
layerPopupClass: ".highlights-viewer",
openerEvent: {
element: els.viewerBtn,
},
closeCtas: [els.closeCta],
moveTarget: document.documentElement,
contents: els.contents,
show: {
start: function (target) {
els.popup.classList.add("is-init");
viewerEvents.show(target.openerCta);
},
end: function () {
if (utils.detector.isIosDevice)
els.popup.style.display = "block";
els.popup.classList.add("is-open");
if (els.popup.classList.contains("is-info-open")) {
setTimeout(function () {
els.infoCloseBtn.focus();
}, 500);
}
},
},
hide: {
start: function () {
els.popup.classList.remove("is-open");
},
end: function () {
setTimeout(function () {
els.popup.classList.remove("is-init");
}, 300);
viewerEvents.hide();
},
},
});
};
const viewerEvents = {
show: function (viewerOpener) {
if (viewerOpener.classList.contains("viewer-btn")) {
status.isHash = false;
els.viewerOpener = viewerOpener;
} else {
status.isHash = true;
els.viewerOpener = els.viewerBtn;
}
els.viewerModel = els.viewerOpener.getAttribute("data-model-name");
els.viewerColor = els.viewerOpener.getAttribute("data-model-color");
els.viewerIframe.setAttribute("src", getViewerUrl());
if (currDevice.indexOf("mobile") > -1 || currDevice == "tablet") {
viewerEvents.infoPopupShow();
}
els.infoBtn.addEventListener("click", function () {
viewerEvents.infoPopupShow();
setTimeout(function () {
els.infoCloseBtn.focus();
}, 400);
});
els.popupWrap.addEventListener(
"click",
viewerEvents.onclickViewerDimmed
);
},
hide: function () {
els.viewerModel = "";
els.viewerIframe.setAttribute("src", "about:blank");
if (status.isHash) {
setTimeout(function () {
els.viewerOpener.focus();
}, 300);
}
},
infoPopupShow: function () {
if (!els.popup.classList.contains("is-info-open")) {
els.popup.classList.add("is-info-open");
els.infoCloseBtn.addEventListener(
"click",
viewerEvents.infoPopupHide
);
els.infoDimmed.addEventListener(
"click",
viewerEvents.infoPopupHide
);
setTimeout(function () {
els.closeCta.setAttribute("tabindex", -1);
els.closeCta.setAttribute("aria-hidden", true);
els.infoBtn.setAttribute("tabindex", -1);
els.infoBtn.setAttribute("aria-hidden", true);
els.viewerContainer.setAttribute("tabindex", -1);
els.viewerContainer.setAttribute("aria-hidden", true);
}, 400);
}
},
infoPopupHide: function () {
if (els.popup.classList.contains("is-info-open")) {
els.popup.classList.remove("is-info-open");
setTimeout(function () {
els.infoBtn.focus();
}, 300);
setTimeout(function () {
els.closeCta.removeAttribute("tabindex");
els.closeCta.removeAttribute("aria-hidden");
els.infoBtn.removeAttribute("tabindex");
els.infoBtn.removeAttribute("aria-hidden");
els.viewerContainer.removeAttribute("tabindex");
els.viewerContainer.removeAttribute("aria-hidden");
}, 100);
}
},
onclickViewerDimmed: function (e) {
if (e.currentTarget == e.target) {
if (utils.detector.isIosDevice)
els.viewerOpener.style.display = "block";
els.popup.classList.remove("is-open");
document.documentElement.classList.remove("is-layer-open");
document.documentElement.style.overflow = "";
utils.visibleScroll();
utils.onAccessibility(els.popup);
utils.offAccessibility(document.querySelector("#wrap"));
setTimeout(function () {
els.viewerOpener.focus();
}, 300);
els.viewerModel = "";
els.viewerIframe.setAttribute("src", "about:blank");
setTimeout(function () {
els.popup.classList.remove("is-init");
}, 300);
}
},
onLoadLayerPopupIframe: function () {
if (
document.documentElement.classList.contains("color_yb") ||
(utils.getCookie("highContrastMode") != null &&
utils.getCookie("highContrastMode") == 1)
) {
els.viewerIframe.contentWindow.postMessage(
"V3D.highContrast.on",
"*"
);
setTimeout(function () {
els.viewerIframe.contentWindow.postMessage(
"V3D.highContrast.on",
"*"
);
}, 300);
}
},
};
const layerPopupScrollHandler = {
setLayerScroll: function () {
if (!els.popupContents) return;
if (
els.popupContents.scrollHeight > els.popupContents.clientHeight
) {
utils.offAccessibility(els.popupScroll);
els.popupScroll && els.popupScroll.classList.add("is-scroll-btn");
} else {
utils.onAccessibility(els.popupScroll);
els.popupScroll &&
els.popupScroll.classList.remove("is-scroll-btn");
}
},
onScrollPopupContents: function () {
onUpdateLayerScroll(false);
},
onClickLayerScroll: function (e) {
e && e.preventDefault();
if (e.target.matches(".highlights-viewer__scroll-btn")) {
let scrollDown = e.target.classList.contains(
"highlights-viewer__scroll-btn--down"
),
$popupContents = $(els.popupContents);
if (scrollDown) {
$popupContents.stop().animate(
{
scrollTop: $popupContents.scrollTop() + 100,
},
{
duration: 300,
complete: function () {
layerPopupScrollHandler.onUpdateLayerScroll(true);
},
}
);
} else {
$popupContents.stop().animate(
{
scrollTop: $popupContents.scrollTop() - 100,
},
{
duration: 300,
complete: function () {
layerPopupScrollHandler.onUpdateLayerScroll(true);
},
}
);
}
}
},
onUpdateLayerScroll: function (isClicked) {
const offsetTop = els.popupContents.scrollTop,
layerBottom =
els.popupContents.scrollHeight - els.popupContents.clientHeight;
els.popupScrollUpBtn.removeAttribute("tabindex");
els.popupScrollUpBtn.removeAttribute("aria-hidden");
els.popupScrollUpBtn.removeAttribute("disabled");
els.popupScrollDownBtn.removeAttribute("tabindex");
els.popupScrollDownBtn.removeAttribute("aria-hidden");
els.popupScrollDownBtn.removeAttribute("disabled");
if (offsetTop == 0) {
isClicked &&
els.popupScrollDownBtn &&
els.popupScrollDownBtn.focus();
els.popupScrollUpBtn.setAttribute("tabindex", "-1");
els.popupScrollUpBtn.setAttribute("aria-hidden", "true");
els.popupScrollUpBtn.setAttribute("disabled", "disabled");
} else if (offsetTop >= layerBottom - 1) {
isClicked && els.popupScrollUpBtn && els.popupScrollUpBtn.focus();
els.popupScrollDownBtn.setAttribute("tabindex", "-1");
els.popupScrollDownBtn.setAttribute("aria-hidden", "true");
els.popupScrollDownBtn.setAttribute("disabled", "disabled");
}
},
};
const onReceiveV3DMessage = function (e) {
if (e.data == "V3D.state.popOpen") {
if (currDevice.indexOf("mobile") > -1 || currDevice == "tablet") {
if (els.closeCta) {
if (!els.popupWrap.classList.contains("is-popup-opened"))
els.popupWrap.classList.add("is-popup-opened");
els.closeCta.setAttribute("tabindex", "-1");
els.closeCta.setAttribute("aria-hidden", "true");
els.closeCta.setAttribute("disabled", "disabled");
}
if (els.infoBtn) {
els.infoBtn.setAttribute("tabindex", "-1");
els.infoBtn.setAttribute("aria-hidden", "true");
}
}
} else if (e.data == "V3D.state.popClose") {
if (currDevice.indexOf("mobile") > -1 || currDevice == "tablet") {
if (els.closeCta) {
if (els.popupWrap.classList.contains("is-popup-opened"))
els.popupWrap.classList.remove("is-popup-opened");
els.closeCta.removeAttribute("tabindex");
els.closeCta.removeAttribute("aria-hidden");
els.closeCta.removeAttribute("disabled");
}
if (els.infoBtn) {
els.infoBtn.removeAttribute("tabindex");
els.infoBtn.removeAttribute("aria-hidden");
}
}
} else if (e.data == "V3D.state.introPose.ready") {
if (currDevice.indexOf("desktop") > -1) {
els.viewerIframe &&
els.viewerIframe.contentWindow.postMessage(
"V3D.introPose.run",
"*"
);
}
status.moPoseReady = true;
setTimeout(function () {
status.moPoseReady = false;
}, 2000);
} else if (e.data == "V3D.state.localData.ready") {
els.viewerIframe &&
els.viewerIframe.contentWindow.postMessage(
JSON.stringify(V3DLOCALDATA),
"*"
);
}
};
const getViewerUrl = function () {
let viewerUrl = status.viewerBaseUrl;
// model_name
viewerUrl += "model_name=" + els.viewerModel;
if (
document.documentElement.classList.contains("color_yb") ||
(utils.getCookie("highContrastMode") != null &&
utils.getCookie("highContrastMode") == 1)
) {
viewerUrl += "&highcontrast=1";
} else {
viewerUrl += "&highcontrast=0";
}
// RTL
utils.isRTL() && (viewerUrl += "&rtl=1");
viewerUrl += status.defaultParams;
viewerUrl += "#color=" + (els.viewerColor ? els.viewerColor : "null");
return viewerUrl;
};
return {
init: init,
};
})();
})();
(function () {
window.flagship = window.flagship || {};
window.flagship.highlights = window.flagship.highlights || {};
window.flagship.highlights.ytPopup = (function () {
let els = {};
const utils = window.flagship.common.utils;
const init = function () {
els.layerPopup = document.querySelector(".common-youtube-popup");
if (!!els.layerPopup) {
setElements();
setPopup();
}
};
const setElements = function () {
els.contents = document.querySelector("#contents");
els.openCtas = document.querySelectorAll(".js-youtube-popup");
els.closeCta = document.querySelector(
".common-youtube-popup__close-cta"
);
els.ytIframe = els.layerPopup.querySelector(
".common-youtube-popup__iframe > iframe"
);
els.ytDesc = els.layerPopup.querySelector(".youtube-player__desc");
els.dimmed = els.layerPopup.querySelector(
".common-youtube-popup__close-area"
);
};
const setPopup = function () {
for (let i = 0; i < els.openCtas.length; i++) {
utils.layerPopup({
layerPopup: els.layerPopup,
layerPopupClass: ".common-youtube-popup",
openerEvent: {
element: els.openCtas[i],
},
closeCtas: [els.closeCta],
dimmed: els.dimmed,
moveTarget: document.documentElement,
contents: els.contents,
show: {
start: function () {
els.layerPopup.classList.add("is-yt-open");
},
end: function (target) {
eventList.setYoutube(target);
},
},
hide: {
start: function () {
els.layerPopup.classList.remove("is-yt-open");
},
end: function (target) {
eventList.clearYoutube();
},
},
});
}
};
const eventList = {
setYoutube: function (target) {
let opener = target.openerCta,
ytSrc =
"htt" +
"ps://www.youtube.com/embed/" +
opener.getAttribute("data-youtube-id") +
"?wmode=opaque&rel=0&enablejsapi=1&version=3&autoplay=1",
ytTitle = opener.getAttribute("data-youtube-title"),
ytBlind = opener.querySelector(".blind").innerHTML;
els.ytIframe.setAttribute("src", ytSrc);
els.ytIframe.setAttribute("title", ytTitle);
els.ytDesc.innerHTML = ytBlind;
els.OpenerTarget = opener;
},
clearYoutube: function () {
els.ytIframe.removeAttribute("src");
els.ytDesc.innerHTML = "";
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship.common.resize.bindEvent();
var initComponents = function () {
flagship.highlights.accordion.init();
flagship.highlights.scrollVideo.init();
flagship.highlights.clickToVideo.init();
flagship.highlights.overview.init();
flagship.highlights.quote.init();
flagship.highlights.color.init();
flagship.highlights.viewer.init();
flagship.highlights.cameraAi.init();
flagship.highlights.camera.init();
flagship.highlights.lowLight.init();
flagship.highlights.lowLightPopup.init();
flagship.highlights.quadTelephoto.init();
flagship.highlights.quadTelPopup.init();
flagship.highlights.tutorial.init();
flagship.highlights.suggestionAiTutorial.init();
flagship.highlights.circleToSearchTutorial.init();
flagship.highlights.liveTranslateTutorial.init();
flagship.highlights.chatAssistTutorial.init();
flagship.highlights.samsungNoteTutorial.init();
flagship.highlights.gaming.init();
flagship.highlights.display.init();
flagship.highlights.experiences.init();
flagship.highlights.faq.init();
flagship.highlights.ytPopup.init();
};
initComponents();
})();
});
Product Registration
Quick-and-easy product registration.. Receive up-to-date personalised services and tips.
Serial Number/IMEI
Enter your Serial Number/IMEI
QR Scan
Scan the QR code on your products for easy registration.
* This feature can only be supported on Samsung Home Appliances and non-smart B2C monitors.
Enter your Serial Number/IMEI
Quick-and-easy product registration.
Please enter the 11 or 15- digit number.
This product is already registered. Make sure you entered the right serial number or IMEI.
Type
Sub Type
Category
Back view
The serial number and model name are printed on the label located on the lower left side of the device’s exterior, near the front. They are also on a second label, inside the refrigerator compartment on a side wall above the top shelf.
Back view
The serial number and model name are printed on the label located on the lower left side of the device’s exterior, near the front. They are also on a second label, inside the refrigerator compartment on a side wall above the top shelf.
Product registration is almost complete!!
You've entered a valid S/N or IMEI. Now select the model of your product.
Suggested searches
No result. Please try again.
Galaxy Book3 Ultra
SM-G996BZKGEUA
Serial Number: R3CR508WNAH
The device you are currently using does not support the camera function.