A time lapse of a town landscape is seen going from
day to night on the main screen of Galaxy Z Flip6 as
the battery's capacity number increases to a maximum
of 4000 milliampere hours.
"Galaxy Z Flip6 adds true flagship power"
Digital Trends
"Great performance and good battery life"
Forbes
MOST COMPACT
Galaxy Z Flip6 is seen closing from side profile. It re-opens,
rotates and its angle changes to FlexMode.
BIG IMPACT
Galaxy Z Flip6's new floating design is
modern, slim and sleek, creating our most
compact smartphone yet.
Colourful. Joyful. Wonderful
Find your favourite colour or choose from one of the
online exclusive colours only on
Samsung.com.
*Online exclusive colours only available on Samsung.com.
Galaxy AI is here on Galaxy Foldables
Galaxy AI
is hereon Galaxy Foldablesis here onGalaxy Foldables
INTERPRETER
Your superior interpreter experience with FlexWindow
Lost in translation? Galaxy Z Flip6 is your passport to
communication — working as
your personal interpreter.,
A conversation in two languages is transcribed and translated
in real time.
Tap to try
Galaxy AI transcribes conversations in real-time.
Translations of each language appear as texts on the screen.
Tap to try
The dual screen button activates the Interpreter app from
the cover screen.
CHAT ASSIST
Chat flows, even when closed
Send messages directly from the FlexWindow with
Chat Assist. Just select from one of the
Suggested Replies — curated by
context-aware AI.
Text message conversation appears on the FlexWindow of
Galaxy Z Flip6.
Tap to try
Suggested Replies provides three potential responses to
send to a friend. Based on the text conversation, the
responses agree to the friend's suggestion of going
skateboarding together.
Your window, your way
FlexWindow clock interface featuring a photo of a woman
with interactive elements depicting various different
types of weather.
FlexWindow clock interface with interactive vegetable
design.
FlexWindow clock interface featuring a photo of a
woman with interactive elements depicting various
different types of weather.
FlexWindow clock interface with interactive vegetable
design.
Chat with Google Gemini to supercharge your ideas
Thanks to Samsung's longstanding partnership with Google, your
Galaxy now comes with the Google Gemini app.
Chat with Gemini to get
help learning in new ways, writing thank you
notes, planning events and more.
Dive into the world of AI
Circle to Search
Simply circle an object or text to get
Google Search results.
Live Translate
Get real-time voice translation on
various apps when you make a call.
Transcript Assist
Transcribe your recorded conversations
into editable text in a flash.
50MP.NEW CAMERA.STUNNING PORTRAITS
Captured by Galaxy Z Flip6#withGalaxy
Nighttime portraits are lit
Capture stunning shots during the day
but also at night — and even in dimly lit areas.
Use Nightography to ensure your photos shines
with detail, thanks to ProVisual Engine.
The most powerful camera on a Galaxy Z Flip, now with
AI
The upgraded 50MP wide rear camera processes
your pics through the ProVisual Engine to capture
stunning scenes and richer portraits.,,,,,
ProVisual Engine
rear camera
50MPWide2x Optical Quality Zoom
12MPUltra Wide
FlexCam. Capture your best angle
FlexCam uses Auto Zoom to either zoom in or out on subjects, and
provides a preview on the FlexWindow for a
hands-free selfie experience.
A photo of three friends is seen from Galaxy Z Flip6's
FlexWindow. Galaxy AI is used to zoom in on the subjects
hands-free.
Captured by Galaxy Z Flip6#withGalaxy
Rear cam portraits hit different
Use the FlexWindow to give your subjects a
preview as you take their photo in 50 megapixels.
Then, snap a pic to capture
bright and detailed portraits.
Captured by Galaxy Z Flip6#withGalaxy
PHOTO ASSIST
Effortless editing. Courtesy of Galaxy AI
Generative Edit
Tap into your creativity with
Generative Edit for Photo Assist to
move, resize or delete whole objects from your photos
and fill in the background where they used to be.
One of the subjects is selected and moved to another
place in the picture. Missing areas are filled in
using AI.
Instant Slow-mo
Put focus on key moments by applying
slow motion to your videos and share or
save it.
The video plays and starts to slow down when the
screen is tapped to show Instant Slow-mo.
Captured by Galaxy Z Flip6#withGalaxy
Live Effect
Add depth to give your pics all-new
life.
Live Effect is applied to the subject of a photo to
give a 3D effect.
See, snap, share, even at night
Details stay sharp, crisp and clear,
even in the dark. Snap and
post instantly to Instagram using the in-app
camera's Night Mode.,
Captured by Galaxy Z Flip6#withGalaxy
Galaxy Z Flip's long lasting battery
Meet our biggest Flip battery ever. Paired
with Snapdragon® 8 Gen 3 for Galaxy, you can talk, text or game
to your heart's content — all-day enjoyment,
4000
4000mAh
Listen to music up to
68hrs
Watch videos up to
23hrs
The fastest Snapdragon on a Galaxy Z Flip yet,
First ever Vapor Chamber on a Galaxy Z Flip
Keep things cool, calm and running smoothly with a
Vapor Chamber that
dissipates heat quickly.
The inside of a Galaxy Z Flip6 is seen with two sets of arrows
coming out of it to represent heat flowing away from it.
Built with durability in mind.
Reinforced Folding Edge
Fortified to withstand more pressure.
Engineered for endurance
Meet our slim and innovative FlexHinge.
Shielded in aluminum
Enhanced Armor Aluminum Frame protects
you.,
Truly tough
Great protection with
Corning® Gorilla® Glass Victus® 2.
Stay water-resistant
IP48 water-resistance for those
unexpected spills.
Send files, data and content between devices,
including iOS and PCs. It's a quick and
secure way to openly share.
Your privacy. Secured.
In Privacy and Security, quickly see
which apps are accessing your information, then customize
your settings. Plus, with Advanced Intelligence features,
you have the option of processing data for AI services
from your Galaxy device or on the cloud.
Switch to Galaxy
Switch to Galaxy, it's easy. Elevate your experience with features
exclusive to Galaxy users.
Galaxy Z Flip6 comes in a mix of joyful colours
including Blue, Yellow, Mint and Silver Shadow. Crafted Black,
White and Peach are exclusive colours available only on
Samsung.com.
Galaxy Z Flip6 comes equipped with various AI features
for you to immerse yourself in including Suggested Replies, a
new feature that suggests text messages using AI so you can
respond even when Galaxy Z Flip6 is closed – perfect
for when you’re on the go. Additional AI features include Live
Translate and Interpreter. The camera also gets an AI upgrade by
ProVisual Engine which applies optimized image quality to
elements of the subject for more picture-perfect portraits.,,
The Galaxy Z Flip6 comes equipped with a 50MP wide
rear camera and ProVisual Engine for pictures that are brighter
and more crisp. When taking portrait pictures, both you and your
subject can preview the image thanks to the FlexWindow. You can
even go fully hands-free with FlexMode making selfies easier
than ever.,
FlexCam is designed to elevate the selfie experience by making
it hands-free from the rear camera. Auto Zoom helps you
effortlessly capture your best angle by zooming in or out on
your subjects, and then provides a preview from the FlexWindow.
AI zoom then ensures top quality for your pictures.,
Galaxy Z Flip6 is more compact and has a new and
improved floating design compared to Galaxy Z Flip5,
giving the effect that the display is floating on the frame. It
also boasts a bold camera rail detail.,,
This feature can be accessed via the Settings. Once you have
chosen your screen, you can customize the layout, how
notifications will be displayed and choose various widgets.,,
Galaxy Z Flip6 has 300mAh more battery capacity
compared to Galaxy Z Flip5, a 50MP wide rear camera
and the first ever Vapor Chamber cooling system on a
Galaxy Z Flip.
*Online exclusive colours only available on Samsung.com.
Compared to previous Galaxy Z Flip models.
Auto Zoom is available in FlexMode using the rear camera and will
disengage if the zoom is manually adjusted. Limited in low-light
conditions. May not work if the device is moving or if the subject
is too close.
Interpreter requires Samsung account login. Availability of
supported languages may vary. Languages require language pack
download. Service availability may vary by language. Language
availability may vary. Accuracy of results is not guaranteed.
Availability and supported features may vary by country, region or
carrier.
50MP resolution is available on Galaxy Z Flip6’s rear
wide camera only.
Actual battery life may vary 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 and independently assessed by UX Connect Research
under default settings using LTE and 5G Sub6 networks.
Thickness measured from top to bottom of the glass when
unfolded.
Colour availability may vary depending on country or carrier.
Interpreter can be viewed from both the Main Screen and FlexWindow
but this function must be manually enabled. Not available solely on
the FlexWindow.
Suggested Replies feature requires network connection to receive
messages. It can suggest replies without network connection once the
messages are received by the device. Samsung Account login required.
Suggested Replies feature is only supported from the FlexWindow.
Service availability may vary by language, country and app. Accuracy
of results is not guaranteed.
Sequences shortened and simulated. Results for illustrative
purposes only. Service availability may vary by country, language,
device model. Requires internet connection and Google Account login.
Users may need to download or update Google Gemini app to the latest
version. Check responses for accuracy. Gemini is a trademark of
Google LLC. Gemini opt-in is rolling out to select devices and
countries — opt in to Gemini from your Google Assistant or by
downloading the Gemini app. Product functionality may be dependent
on app and device settings. Some functions may not be compatible
with certain apps. Accuracy of results is not guaranteed. Feature
availability may vary by content.
Sequences shortened and simulated. Results for illustrative
purposes only. Service availability may vary by country, language,
device model. Requires internet connection. Users may need to update
Android and Google app to the latest version. Works on compatible
apps and surfaces. Results may vary depending on visual matches.
Accuracy of results is not guaranteed. Circle to Search is not
available via the FlexWindow.
Live Translate feature requires network connection to receive call
messages. It can translate without network connection once the call
messages are received by the device. Live Translate requires Samsung
Account login. Live Translate is only available on the pre-installed
Samsung Phone app. Calls must be made using the native Samsung
dialer. Languages may require language pack download. Service
availability may vary by language. Language availability may vary.
Accuracy of results is not guaranteed.
Transcription and Summary features for Transcript Assist require a
network connection and Samsung Account login. Features for
Transcript Assist only available on the pre-installed Samsung Voice
Recorder app or files recorded using the pre-installed Samsung Phone
app, Samsung Notes app or Samsung Interpreter app. Voice recording
feature in the pre-installed Samsung Phone app may not be supported
in some countries. Audio files must be under 3 hours in duration to
be processed. Summarizing feature for Transcript Assist can be
activated when a certain number of characters is met. Service
availability may vary by language. 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.
Optical quality zoom is enabled by the Adaptive Pixel sensor.
2x zoom must be enabled in the Camera Assistant app settings.
Camera Assistant can be downloaded from the Galaxy Store.
AI Zoom is applied to distances between digital zoom lengths.
Accuracy of results is not guaranteed.
Generative Edit feature for Photo Assist requires a network
connection and Samsung Account login. Editing with Generative Edit
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.
Instant Slow-mo feature for Photo Assist is available on Samsung
Video Player and Samsung Gallery. May not be available on certain
video file types. Accuracy of results not guaranteed.
Live Effect feature for Photo Assist supports JPG, HEIC (HEIF),
BMP, PNG and WebP files. May not be available on certain photos. The
accuracy and reliability of the generated output is not
guaranteed.
Night Mode supported in Instagram in-app camera.
Snapdragon branded products are products of Qualcomm Technologies,
Inc. and/or its subsidiaries.
Limited to Galaxy foldable smartphones.
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 3887mAh for
Galaxy Z Flip6. Actual battery life may vary depending on
network environment, usage patterns and other factors. Enjoy up to
68 hours of music or watch videos for up to 23 hours.
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.
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, content and apps 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, content and apps
available for transfer may vary by transmission method. Contacts,
gallery, videos, calendars and reminders can be transferred
wirelessly from an iOS device.
It is recommended to use a wired connection when transferring
diverse sets of data at once.
Quick Share feature between Galaxy devices available with the
following OS: smartphones and tablets with Android OS version 10.0
(Q) and One UI 2.1 or above, PCs running Windows 10 or later.
Requires Samsung Account login and Wi-Fi and Bluetooth connection.
Quick Share to iOS and Android devices available by sending shared
link: individual files shared cannot exceed 5GB (for a total of 5GB
per day) and link will expire after two days; requires a Samsung
Account login and internet connection.
Armor Aluminum Frame does not include volume and side keys or SIM
tray.
Compared to previous models.
Corning® Gorilla® Glass Victus® 2 is applied to the front and rear
of the device.
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 resistance of device is not permanent and may diminish over
time because of normal wear and tear. Not dust- or
sand-resistant.
Samsung Care+ coverage, service type and promotion details may vary
by country/region and deductible (service fee) may apply. To be
eligible for Samsung Care+ promotion benefit, registration may be
required. For detailed Samsung Care+ information, please visit
https://www.samsung.com/ca/samsung-care-plus/.
Energy Score is available on Android phones (Android 11.0 or above)
and requires Samsung Health app (v6.27 or above). Samsung account
login is required. Service is only available when user registers
their Galaxy Watch through their Samsung account. Needs at least the
previous day’s activity data and sleep, and heart rate data during
sleep. Service availability may vary by country or region. Intended
for general wellness and fitness purposes only. Not intended for use
in detection, diagnosis, treatment of any medical condition or
diseases. The measurements are for your personal reference only.
Please consult a medical professional for advice.
Galaxy Watch Ultra and Galaxy Watch7 devices sold separately.
Measured diagonally, Galaxy Z Flip6's Main Screen size is
6.7” in the full rectangle and 6.6” accounting for the rounded
corners; actual viewable area is less due to the rounded corners and
camera hole.
Measured diagonally, Galaxy Z Flip6's Cover Screen size
is 3.4” in the full rectangular form; actual viewable area is
approximately 95% of the full rectangular area due to the rounded
corners and lower cutout.
Certain applications may not support FlexWindow widgets.
Generative content features require a network connection and Google
Account login. The accuracy and reliability of the generated output
is not guaranteed. Feature availability may vary by model.
Photo Ambient feature requires network connection to receive the
weather data. It can reflect the weather data without network
connection once the data is received by the device. Reflection of
real-time weather conditions may be delayed as service relies on
local weather information updates. Certain indoor, nighttime and
low-resolution photos may not be compatible. The accuracy and
reliability of the generated output is not guaranteed. Service is
currently only available on Galaxy S24 Series,
Galaxy Z Flip6 and Galaxy Z Fold6. Feature
availability may vary by model.
How-to videos for Galaxy Z Flip6
"
)
);
}
}
};
const isZoom = function () {
let zoomLevel = 100 / ((window.innerWidth / window.outerWidth) * 100);
if (zoomLevel > 1.7) {
document.documentElement.classList.add("browser-zoomed-175");
} else {
document.documentElement.classList.remove("browser-zoomed-175");
}
if (zoomLevel > 3) {
document.documentElement.classList.add("browser-zoomed-300");
} else {
document.documentElement.classList.remove("browser-zoomed-300");
}
if (zoomLevel > 4) {
document.documentElement.classList.add("browser-zoomed-400");
} else {
document.documentElement.classList.remove("browser-zoomed-400");
}
};
const getViewerUrl = function () {
let defaultParams = "",
viewerSection = document.querySelector(".js-colors-viewer"),
viewerButton = document.querySelector(".viewer-btn"),
viewerModel = utils.isLowNetwork()
? viewerButton.getAttribute("data-model-name")
: viewerSection.getAttribute("data-model-name"),
viewerColor = utils.isLowNetwork()
? viewerButton.getAttribute("data-model-color")
: viewerSection.getAttribute("data-model-color"),
viewerUrl = "//www.samsung.com/global/galaxy/3d-360/viewer/?";
defaultParams = "&gesture_guide=0";
defaultParams += "&bgcolor=transparent";
defaultParams += "&skin=colorlayer";
defaultParams += "&theme=roundlayer";
defaultParams += "&auto_rotation=0";
defaultParams += "&intro=1";
defaultParams += "&ruler=1";
defaultParams += "&breakpoint_criteria=outer";
defaultParams += "&breakpoint_desktop_width=1024";
defaultParams += "&x=180";
defaultParams += "&intro_pose=3";
defaultParams += "&intro_pose_hold=1";
defaultParams += "&intro_pose_hold_limit=9999999";
defaultParams += "&controls=0";
defaultParams += "&use_zoom=0";
defaultParams += "&use_pan=0";
defaultParams += "&screen_mode=on";
// model_name
viewerUrl += "model_name=" + 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 += defaultParams;
viewerUrl += "#color=" + (viewerColor ? viewerColor : "null");
return viewerUrl;
};
return {
addLoadStatusClass: addLoadStatusClass,
setResolution: setResolution,
clickSup: clickSup,
centeredFocus: centeredFocus,
setArBanner: setArBanner,
isZoom: isZoom,
getViewerUrl: getViewerUrl,
};
})();
var SEQUENCEPLAYER = (function () {
var init = function (opts) {
this.opts = opts;
this.targetElement = opts.targetElement;
this.imageList = [];
this.loadCount = 0;
this.playIndex = null;
this.imageLoadOffset = !!!this.opts.imageLoadOffset
? 1.5
: this.opts.imageLoadOffset;
this.loadComplete = false;
this.loadStart = false;
this.windowTopOffset = null;
this.windowBottomOffset = null;
this.targetTopOffset = null;
this.targetBottomOffset = null;
this.isImage = null;
this.setCanvas();
this.loadImages();
return this;
};
var fn = init.prototype;
fn.setCanvas = function () {
var _checkElement = function (element) {
if (element.tagName == "CANVAS") {
} else {
this.canvas = document.createElement("CANVAS");
if (this.opts.addType == "append") {
this.targetElement.appendChild(this.canvas);
} else {
var firstChild = this.targetElement.firstElementChild;
if (!!!firstChild) {
this.targetElement.appendChild(this.canvas);
} else {
firstChild.parentNode.insertBefore(this.canvas, firstChild);
}
}
}
};
_checkElement.call(this, this.targetElement);
this.context = this.canvas.getContext("2d");
};
fn.getCanvasOffset = function () {
this.targetTopOffset =
this.targetElement.getBoundingClientRect().top + window.pageYOffset;
this.targetBottomOffset =
this.targetElement.getBoundingClientRect().bottom +
window.pageYOffset;
};
fn.nextImageLoad = function () {
if (this.loadCount < this.opts.endNum) {
this.loadCount++;
this.isImage = null;
this.setLoadImage(this.loadCount);
} else {
this.loadComplete = true;
this.targetElement.classList.add("is-seq-loaded");
}
};
fn.setLoadImage = function (idx) {
var self = this;
var requestImageData = function (apiUrl) {
return fetch(apiUrl)
.then((response) => {
if (!response.ok) {
console.warn(`Failed to load : ${apiUrl}`);
}
return response.blob();
})
.catch(() => {
console.warn(`Failed to load : ${apiUrl}`);
});
};
for (var i = this.opts.startNum; i <= this.opts.endNum; i++) {
(function (idx) {
var _imageLoadEvent = function () {
if (self.loadCount < self.opts.endNum) {
self.loadCount++;
requestImageData(
self.opts.path +
self.opts.name +
idx +
"." +
self.opts.extension
).then(function (imgData) {
let isImage = new Image();
isImage.decoding = "sync";
isImage.src = window.URL.createObjectURL(imgData);
self.imageList[idx] = isImage;
});
} else {
self.loadComplete = true;
self.targetElement.classList.add("is-seq-loaded");
}
};
_imageLoadEvent();
})(i);
}
};
fn.startLoadImages = function () {
if (this.loadStart) return;
self.loadStart = true;
this.setDefaultImage(0);
this.setLoadImage(0);
};
fn.loadImages = function () {
var self = this;
var _checkImageLoadOffset = function () {
self.windowTopOffset =
window.pageYOffset - window.innerHeight * self.imageLoadOffset;
self.windowBottomOffset =
window.pageYOffset +
window.innerHeight +
window.innerHeight * self.imageLoadOffset;
self.getCanvasOffset();
if (
(self.windowBottomOffset > self.targetTopOffset &&
self.windowTopOffset < self.targetTopOffset) ||
(self.windowTopOffset < self.targetBottomOffset &&
self.windowBottomOffset > self.targetBottomOffset) ||
(self.windowTopOffset < self.targetTopOffset &&
self.windowBottomOffset > self.targetBottomOffset) ||
(self.windowTopOffset > self.targetTopOffset &&
self.windowBottomOffset < self.targetBottomOffset)
) {
window.removeEventListener("scroll", _checkImageLoadOffset);
self.startLoadImages();
}
};
this.getCanvasOffset();
_checkImageLoadOffset();
window.addEventListener("scroll", _checkImageLoadOffset);
};
fn.setDefaultImage = function (idx) {
var self = this;
this.defaultImage = new Image();
this.defaultImage.src =
this.opts.path + this.opts.name + idx + "." + this.opts.extension;
this.defaultImageEvent = function () {
self.canvas.width = self.defaultImage.naturalWidth;
self.canvas.height = self.defaultImage.naturalHeight;
self.opts.width = self.canvas.width;
self.opts.height = self.canvas.height;
self.context.clearRect(0, 0, self.opts.width, self.opts.height);
self.context.drawImage(
self.defaultImage,
0,
0,
self.opts.width,
self.opts.height
);
};
if (!!!self.opts.width || !!!self.opts.height) {
this.defaultImage.addEventListener("load", this.defaultImageEvent);
} else {
self.canvas.width = self.opts.width;
self.canvas.height = self.opts.height;
}
};
fn.play = function (opts) {
var idx = opts.index > this.opts.endNum ? this.opts.endNum : opts.index;
if (this.loadComplete) {
this.drawCanvas(idx);
} else {
this.drawCanvas(0);
}
};
fn.drawCanvas = function (index) {
if (this.playIndex == null && this.oldPlayIndex == index) return;
this.context.clearRect(0, 0, this.opts.width, this.opts.height);
if (
this.imageList[index >= 0 ? index : this.playIndex] &&
this.imageList[index >= 0 ? index : this.playIndex].complete
) {
this.context.drawImage(
this.imageList[index >= 0 ? index : this.playIndex],
0,
0,
this.opts.width,
this.opts.height
);
}
this.oldPlayIndex = this.playIndex;
if (index) {
this.playIndex = index;
}
};
return function (opts) {
return new init(opts);
};
})();
flagship.features.setting = (function () {
const resize = window.flagship.common.resize,
common = window.flagship.features.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),
isGlobal = document.documentElement.classList.contains("global");
let els = {};
const init = function () {
common.addLoadStatusClass();
common.setArBanner();
setElements();
bindEvents();
setResize();
if (!maxOs && !touchDevice) {
setScrollControl();
}
setImageLoader();
setVideoLoader();
setMp4VideoLoader();
setCenteredfocus();
setDisclaimerNumber();
setDisclaimer();
setVideoTheme();
setVideoBlind();
common.isZoom();
resize.add(common.isZoom);
};
const setElements = function () {
// video
els.videoWrap = document.querySelectorAll(".js-video-wrap");
};
const bindEvents = function () {
window.addEventListener("load", anchorPosition);
window.addEventListener("hashchange", anchorPosition);
};
const anchorPosition = function () {
if (window.location.hash != "") {
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);
}
};
const 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 = utils.scrollController();
scrollController.init({
speed: 120,
duration: 0.6,
});
};
const setImageLoader = function () {
window.imageLoader = utils.mediaLoader({
lazyClass: ".js-img-src",
responsiveClass: ".js-res-img",
preset: 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 = utils.mediaLoader({
type: "bgImage",
lazyClass: ".js-bg-img",
loadOption: [
{
resolution: 1920,
attribute: "",
bgOpts: "",
},
],
visiblePoint: 2,
});
};
const setVideoLoader = function () {
window.videoLoader = utils.mediaLoader({
type: "video",
lazyClass: ".js-video-src",
responsiveClass: ".js-res-video",
preset: 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.videoHandler &&
!video.videoHandler.wrap.classList.contains("is-loaded")
) {
video.videoHandler.wrap.classList.add("is-loaded");
}
},
});
};
const setMp4VideoLoader = function () {
window.mp4VideoLoader = utils.mediaLoader({
type: "mp4Video",
lazyClass: ".js-mp4-video-src",
responsiveClass: ".js-res-video",
preset: 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.videoHandler &&
!video.videoHandler.wrap.classList.contains("is-loaded")
) {
video.videoHandler.wrap.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.clickSup);
}
};
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++) {
let controlBlind = els.videoWrap[i].querySelector(
".js-video-control .blind"
);
controlBlind.innerHTML =
typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI
? LOCAL_VARI.play
: "play";
}
};
return {
init: init,
};
})();
flagship.features.setting.init();
(function () {
window.flagship.features.clickToVideo = (function () {
const utils = window.flagship.common.utils;
let els = {
clickToVideosWrap: [],
clickToVideo: [],
};
const init = function () {
els.clickToVideosWrap = document.querySelectorAll(".js-click-video");
if (els.clickToVideosWrap.length > 0) {
setProperty();
bindEvents();
}
};
const setProperty = function () {
for (let i = 0; i < els.clickToVideosWrap.length; i++) {
els.clickToVideosWrap[i].video =
els.clickToVideosWrap[i].querySelector("video");
els.clickToVideosWrap[i].controller =
els.clickToVideosWrap[i].querySelector(".js-video-control");
els.clickToVideosWrap[i].controller.video =
els.clickToVideosWrap[i].video;
}
};
const bindEvents = function () {
eventList.setVideo();
eventHandler.click();
};
const eventHandler = {
click: function () {
for (let i = 0; i < els.clickToVideosWrap.length; i++) {
els.clickToVideosWrap[i].controller.addEventListener(
"click",
eventList.clickVideoCta
);
}
},
};
const eventList = {
setVideo: function () {
for (let i = 0; i < els.clickToVideosWrap.length; i++) {
els.clickToVideo[i] = utils.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");
}
if (this.wrap.classList.contains("is-started")) {
this.wrap.classList.remove("is-started");
}
},
playCallback: function () {
if (!this.wrap.classList.contains("is-started")) {
this.wrap.classList.add("is-started");
}
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");
}
},
});
}
},
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.features.headline = (function () {
const utils = window.flagship.common.utils;
let els = {};
const init = function () {
setElements();
bindEvents();
};
const setElements = function () {
els.moveText = document.querySelectorAll(".js-move-text");
};
const bindEvents = function () {
eventList.setScene();
eventHandler.scroll();
eventList.scroll();
};
const eventHandler = {
scroll: function () {
window.addEventListener("scroll", eventList.scroll);
},
};
const eventList = {
scroll: function () {
for (let i = 0; i < els.moveText.length; i++) {
els.moveText[i].sceneObj.trackAnimation(function () {
let progressRange = !!this.trackElement.classList.contains(
"features-high-resolution__img-bottom"
)
? -60
: -10;
let moveRange = !!this.trackElement.classList.contains(
"features-high-resolution__img-bottom"
)
? -55
: -5;
if (this.progress >= progressRange && this.progress <= 100) {
if (this.progress >= moveRange) {
els.moveText[i].classList.add("is-moved");
if (
this.trackElement.classList.contains("common-description")
)
this.trackElement.style.transitionDelay = "0.2s";
}
if (this.progress <= moveRange) {
els.moveText[i].classList.remove("is-moved");
}
}
});
}
},
setScene: function () {
for (let i = 0; i < els.moveText.length; i++) {
els.moveText[i].sceneObj = SCROLLER({
trackElement: els.moveText[i],
useFixed: false,
useStrictMode: false,
});
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship.features.howtoPopup = (function () {
const utils = window.flagship.common.utils;
resize = window.flagship.common.resize;
let els = {};
let currDevice = resize.checkResolution();
(prevDevice = null), (currOpener = null);
let isDrag = false;
const init = function () {
els.layerPopup = document.querySelector(".js-howto-popup");
if (!!els.layerPopup) {
setElements();
setAttribute();
bindEvents();
eventList.setPopup();
}
};
const setElements = function () {
els.contents = document.querySelector("#contents");
els.openCtas = document.querySelectorAll(".js-howto-popup-opener");
// popup content
els.closeCta = document.querySelector(".js-howto-popup-close-cta");
els.ytIframe = els.layerPopup.querySelector("iframe");
els.ytDesc = els.layerPopup.querySelector(
".js-howto-popup-youtube-desc"
);
els.dimmed = els.layerPopup.querySelector(".js-howto-popup-dimmed");
// swiper
els.swiperContainer =
els.layerPopup.querySelector(".swiper-container");
els.buttonWrap =
els.swiperContainer.querySelectorAll(".swiper-slide");
els.arrowWrap = els.swiperContainer.querySelector(
".js-howto-popup-arrow-wrap"
);
els.prevArrow = els.swiperContainer.querySelector(
".swiper-button-prev"
);
els.nextArrow = els.swiperContainer.querySelector(
".swiper-button-next"
);
els.scrollbar = els.swiperContainer.querySelector(
".js-howto-popup-scrollbar"
);
};
const setAttribute = function () {
for (let i = 0; i < els.buttonWrap.length; i++) {
els.buttonWrap[i].openerCta = els.openCtas[i];
els.buttonWrap[i].button =
els.buttonWrap[i].querySelector("button");
els.buttonWrap[i].button.openerCta = els.buttonWrap[i].openerCta;
}
};
const bindEvents = function () {
eventHandler.buttonsClick();
eventHandler.arrowClick();
resize.add(eventList.resize);
};
const eventHandler = {
buttonsClick: function () {
for (let i = 0; i < els.buttonWrap.length; i++) {
els.buttonWrap[i].button.addEventListener("click", function () {
eventList.setYoutube(els.buttonWrap[i].button);
});
}
},
arrowClick: function () {
els.nextArrow.addEventListener("click", function (e) {
swiperEventList.clickArrow("next");
});
els.nextArrow.addEventListener("keydown", function (e) {
swiperEventList.clickArrow("next");
});
els.prevArrow.addEventListener("click", function (e) {
swiperEventList.clickArrow("prev");
});
els.prevArrow.addEventListener("keydown", function (e) {
swiperEventList.clickArrow("prev");
});
},
};
const eventList = {
setPopup: function () {
for (let i = 0; i < els.openCtas.length; i++) {
els.openCtas[i].index = i;
utils.layerPopup({
layerPopup: els.layerPopup,
layerPopupClass: ".js-howto-popup",
openerEvent: {
element: els.openCtas[i],
},
closeCtas: [els.closeCta],
dimmed: els.dimmed,
moveTarget: document.documentElement,
contents: els.contents,
show: {
start: function (target) {
let allVideos = document.querySelectorAll("video");
for (let i = 0; i < allVideos.length; i++) {
if (!allVideos[i].paused) allVideos[i].pause();
}
els.layerPopup.removeAttribute("aria-hidden");
els.layerPopup.removeAttribute("tabindex");
els.layerPopup.classList.add("is-init");
currOpener = target.openerCta;
eventList.itemImageLoader();
swiperEventList.activeCheck();
},
end: function (target) {
els.layerPopup.classList.add("is-open");
eventList.setYoutube(target);
},
},
hide: {
start: function () {
els.layerPopup.classList.remove("is-open");
},
end: function (target) {
if (utils.detector.isIosDevice)
target.openerCta.style.display = "";
setTimeout(function () {
els.layerPopup.classList.remove("is-init");
}, 300);
eventList.clearYoutube();
},
},
});
}
},
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;
let oldActive = els.swiperContainer.querySelector(
".swiper-slide.is-active"
);
if (!!oldActive) {
oldActive.classList.remove("is-active");
oldActive.button.removeAttribute("title");
}
els.buttonWrap[opener.index].classList.add("is-active");
accessibility.setTitle(els.buttonWrap[opener.index]);
},
clearYoutube: function () {
els.ytIframe.removeAttribute("src");
els.ytDesc.innerHTML = "";
},
resize: function (currRes) {
currDevice = currRes;
if (prevDevice != currDevice) {
if (els.layerPopup.classList.contains("is-open")) {
swiperEventList.activeCheck();
}
prevDevice = currDevice;
}
},
itemImageLoader: function () {
for (let i = 0; i < els.buttonWrap.length; i++) {
if (
!els.buttonWrap[i]
.querySelector("img")
.classList.contains("is-img-load-complete")
) {
imageLoader.setResponsiveMedia([
els.buttonWrap[i].querySelector("img"),
]);
}
}
},
};
const swiperEventList = {
set: function () {
if (els.swiperContainer.swiper == null) {
new Swiper(els.swiperContainer, {
init: false,
slidesPerView: "auto",
scrollbar: {
el: els.scrollbar,
draggable: true,
},
});
els.swiperContainer.swiper.on("init", swiperEventList.init);
els.swiperContainer.swiper.on(
"slideChange",
swiperEventList.slideChange
);
els.swiperContainer.swiper.on(
"transitionEnd",
swiperEventList.slideTransition
);
els.swiperContainer.swiper.on("scrollbarDragEnd", function () {
isDrag = true;
swiperEventList.slideTransition();
});
els.swiperContainer.swiper.init();
}
},
destroy: function () {
if (els.swiperContainer.swiper != null) {
els.swiperContainer.swiper.scrollbar.dragEl.style = "";
els.swiperContainer.swiper.scrollbar.destroy(true);
els.swiperContainer.swiper.navigation.destroy(true);
els.swiperContainer.swiper.destroy(true);
els.swiperContainer.swiper = null;
}
},
init: function () {
let self = this,
notification = self.el.querySelector(".swiper-notification");
if (!!notification) self.el.removeChild(notification);
setTimeout(function () {
accessibility.slide();
accessibility.arrow();
}, 500);
},
slideChange: function () {
accessibility.slide();
accessibility.arrow();
},
slideTransition: function () {
clearTimeout(els.arrowTimeout);
els.arrowTimeout = setTimeout(function () {
if (
els.swiperContainer.swiper.isBeginning &&
!els.swiperContainer.swiper.isEnd
) {
if (els.nextArrow.style.display == "none")
els.nextArrow.style.display = "";
if (!isDrag) els.nextArrow.focus();
els.prevArrow.style.display = "none";
} else if (
!els.swiperContainer.swiper.isBeginning &&
els.swiperContainer.swiper.isEnd
) {
if (els.prevArrow.style.display == "none")
els.prevArrow.style.display = "";
if (!isDrag) els.prevArrow.focus();
els.nextArrow.style.display = "none";
} else {
if (els.prevArrow.style.display == "none")
els.prevArrow.style.display = "";
if (els.nextArrow.style.display == "none")
els.nextArrow.style.display = "";
}
}, 200);
isDrag = false;
},
clickArrow: function (type) {
if (type == "next") {
els.swiperContainer.swiper.slideNext();
} else {
els.swiperContainer.swiper.slidePrev();
}
},
activeCheck: function () {
let isSlide =
(currDevice.indexOf("mobile") > -1 &&
els.buttonWrap.length >= 3) ||
((currDevice.indexOf("desktop") > -1 || currDevice == "tablet") &&
els.buttonWrap.length >= 5);
if (isSlide) {
els.scrollbar.style.display = "block";
els.arrowWrap.style.display = "block";
swiperEventList.set();
if (currOpener != null) {
if (currOpener.index == 2) {
els.swiperContainer.swiper.slideTo(1, 0);
els.prevArrow.style.display = "";
els.nextArrow.style.display = "";
} else if (currOpener.index == 3) {
els.swiperContainer.swiper.slideTo(2, 0);
els.prevArrow.style.display = "";
els.nextArrow.style.display = "none";
} else {
els.swiperContainer.swiper.slideTo(0, 0);
els.prevArrow.style.display = "none";
els.nextArrow.style.display = "";
}
}
} else {
els.scrollbar.style.display = "none";
els.arrowWrap.style.display = "none";
swiperEventList.destroy();
}
},
};
const accessibility = {
setTitle: function (target) {
if (typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI) {
target.button.setAttribute("title", LOCAL_VARI.selected);
} else {
target.button.setAttribute("title", "Selected");
}
},
slide: function () {
for (let i = 0; i < els.swiperContainer.swiper.slides.length; i++) {
if (
i != els.swiperContainer.swiper.activeIndex &&
i != els.swiperContainer.swiper.activeIndex + 1
) {
utils.onAccessibility(els.swiperContainer.swiper.slides[i]);
} else {
utils.offAccessibility(els.swiperContainer.swiper.slides[i]);
}
}
},
arrow: function () {
if (
els.swiperContainer.swiper.isBeginning &&
!els.swiperContainer.swiper.isEnd
) {
utils.offAccessibility(els.nextArrow);
utils.onAccessibility(els.prevArrow);
} else if (
!els.swiperContainer.swiper.isBeginning &&
els.swiperContainer.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.features = window.flagship.features || {};
window.flagship.features.oneColumnCarousel = (function () {
const utils = window.flagship.common.utils;
const resize = window.flagship.common.resize;
let els = {};
let prevDevice;
let currDevice = resize.checkResolution();
let dimmedClass = "is-dimmed";
const isRtl = document.documentElement.classList.contains("rtl");
const init = function () {
els.section = document.querySelectorAll(".js-one-column-carousel");
if (!!els.section) {
setElements();
setProperty();
bindEvents();
}
};
const setElements = function () {
for (let i = 0; i < els.section.length; i++) {
els.section[i].swiperContainer = els.section[i];
els.section[i].swiperSlides =
els.section[i].swiperContainer.querySelectorAll(".swiper-slide");
els.section[i].prevArrow = els.section[
i
].parentElement.querySelector(".swiper-button-prev");
els.section[i].nextArrow = els.section[
i
].parentElement.querySelector(".swiper-button-next");
els.section[i].scrollbar =
els.section[i].parentElement.querySelector(".swiper-scrollbar");
}
};
const setProperty = function () {
for (let i = 0; i < els.section.length; i++) {
let isSlideLength = els.section[i].swiperSlides.length;
for (let j = 0; j < isSlideLength; j++) {
els.section[i].swiperSlides[j].video = els.section[
i
].swiperSlides[j].querySelector(".common-video__video");
}
}
};
const bindEvents = function () {
eventList.load();
eventHandler.keydown();
eventHandler.click();
resize.add(eventList.resize);
};
const eventHandler = {
keydown: function () {
for (let i = 0; i < els.section.length; i++) {
els.section[i].prevArrow.addEventListener(
"keydown",
function (e) {
if (e.keyCode == 13) e.preventDefault();
eventList.arrowFocus(this, els.section[i].nextArrow);
}
);
els.section[i].nextArrow.addEventListener(
"keydown",
function (e) {
if (e.keyCode == 13) e.preventDefault();
eventList.arrowFocus(this, els.section[i].prevArrow);
}
);
}
},
click: function () {
for (let i = 0; i < els.section.length; i++) {
els.section[i].prevArrow.addEventListener("click", function (e) {
eventList.arrowFocus(this, els.section[i].nextArrow);
});
els.section[i].nextArrow.addEventListener("click", function (e) {
eventList.arrowFocus(this, els.section[i].prevArrow);
});
}
},
};
const eventList = {
load: function () {
swiperEvents.set();
for (let i = 0; i < els.section.length; i++) {
els.section[i].swiper.init();
if (els.section[i].swiperSlides.length >= 2) {
els.section[i].swiper.init();
}
}
},
resize: function () {
currDevice = resize.checkResolution();
if (prevDevice != currDevice) {
eventList.responsive();
prevDevice = currDevice;
}
},
responsive: function () {
for (let i = 0; i < els.section.length; i++) {
eventList.resetDimmedSlide(els.section[i].swiper);
els.section[i].swiper.slideTo(0, false);
if (
eventList.getCarouselSizeInfo(els.section[i].swiper)
.viewLength > 0 &&
currDevice != "mobile"
)
eventList.initDimmedSlides(els.section[i].swiper);
}
},
setMedia: function (swiper, index) {
let isIndex =
index + 1 > swiper.slides.length - 1
? swiper.slides.length - 1
: index + 1;
let videoLength = swiper.el.querySelectorAll("video").length - 1;
let imageLength = swiper.el.querySelectorAll("img").length - 1;
let videoloadComplateLength =
swiper.el.querySelectorAll(".is-video-load-complete").length - 1;
let imageloadComplateLength =
swiper.el.querySelectorAll(".is-img-load-complete").length - 1;
let nextVideo = swiper.slides[isIndex].querySelector("video");
let nextImage = swiper.slides[isIndex].querySelector("img");
if (videoloadComplateLength != videoLength) {
if (!!nextVideo) {
videoLoader.setResponsiveMedia([nextVideo]);
}
}
if (imageloadComplateLength != imageLength) {
if (!!nextImage) {
imageLoader.setResponsiveMedia([nextImage]);
}
}
},
resetVideo: function (swiper) {
for (let i = 0; i < swiper.slides.length; i++) {
let isVideo = swiper.slides[i].video;
if (!!isVideo && !isVideo.paused) {
isVideo.pause();
isVideo.currentTime = 0;
}
}
},
getCarouselSizeInfo: function (swiper) {
let slideLength = swiper.slides.length;
let slideWidth = swiper.slides[0].clientWidth;
let slideMargin = parseInt(
window.getComputedStyle(swiper.slides[0]).margin.split(" ")[
isRtl ? 3 : 1
]
);
let slideSize = slideWidth + slideMargin;
let maxMoveSize =
slideSize * slideLength -
slideMargin -
swiper.wrapperEl.clientWidth;
let viewWidth = swiper.wrapperEl.clientWidth;
let viewLength = parseInt((viewWidth + slideMargin) / slideSize);
let lastBeforeSize =
slideLength == 2
? 0
: Math.abs(maxMoveSize - slideSize) +
Math.abs(viewWidth - slideWidth);
let isMoveSize = Math.abs(
parseInt(
window
.getComputedStyle(swiper.wrapperEl)
.transform.split(",")[4]
)
);
return {
slideWidth: slideWidth,
slideMargin: slideMargin,
slideSize: slideSize,
maxMoveSize: maxMoveSize,
viewWidth: viewWidth,
viewLength: viewLength,
lastBeforeSize: lastBeforeSize,
isMoveSize: isMoveSize,
};
},
initDimmedSlides: function (swiper) {
for (let i = 0; i < swiper.slides.length; i++) {
if (
swiper.activeIndex +
eventList.getCarouselSizeInfo(swiper).viewLength <=
i
) {
swiper.slides[i].classList.add(dimmedClass);
}
}
},
setDimmedSlide: function (swiper) {
if (currDevice != "mobile") {
for (let i = 0; i < swiper.slides.length; i++) {
let dimmedSlide =
swiper.activeIndex > i ||
swiper.activeIndex +
(eventList.getCarouselSizeInfo(swiper).viewLength - 1) <
i;
if (dimmedSlide) {
swiper.slides[i].classList.add(dimmedClass);
} else {
swiper.slides[i].classList.remove(dimmedClass);
}
}
}
},
resetDimmedSlide: function (swiper) {
for (let i = 0; i < swiper.slides.length; i++) {
swiper.slides[i].classList.remove(dimmedClass);
}
},
arrowFocus: function (isFocusArrow, nextFocusArrow) {
setTimeout(() => {
if (isFocusArrow.classList.contains("swiper-button-disabled"))
nextFocusArrow.focus();
}, 300);
},
};
const swiperEvents = {
set: function () {
for (let i = 0; i < els.section.length; i++) {
if (els.section[i].swiper == null) {
new Swiper(els.section[i].swiperContainer, {
init: false,
slidesPerView: "auto",
navigation: {
nextEl: els.section[i].nextArrow,
prevEl: els.section[i].prevArrow,
},
scrollbar: {
el: els.section[i].scrollbar,
draggable: true,
},
});
els.section[i].swiper.on("init", swiperEvents.init);
els.section[i].swiper.on(
"slideChange",
swiperEvents.slideChange
);
els.section[i].swiper.on(
"transitionEnd",
swiperEvents.transitionEnd
);
}
}
},
init: function () {
let isNextArrow = this.el.parentElement.querySelector(
".swiper-button-next"
);
let isPrevArrow = this.el.parentElement.querySelector(
".swiper-button-prev"
);
isNextArrow.removeAttribute("aria-label");
isNextArrow.removeAttribute("role");
isPrevArrow.removeAttribute("aria-label");
isPrevArrow.removeAttribute("role");
accessibility.slide(this);
if (
eventList.getCarouselSizeInfo(this).viewLength > 0 &&
currDevice != "mobile"
)
eventList.initDimmedSlides(this);
},
slideChange: function () {
accessibility.slide(this);
eventList.resetVideo(this);
if (
eventList.getCarouselSizeInfo(this).viewLength > 0 &&
currDevice != "mobile"
)
eventList.setDimmedSlide(this);
if (this.realIndex > 0) eventList.setMedia(this, this.realIndex);
},
transitionEnd: function () {
if (this.slides.length < 3 && currDevice == "mobile") return;
setTimeout(() => {
let carouselInfo = eventList.getCarouselSizeInfo(this);
let lastIndex = this.slides.length - 1;
let lastSlide = this.slides[lastIndex];
let lastBeforeSlide = this.slides[lastIndex - 1];
if (
carouselInfo.isMoveSize > carouselInfo.lastBeforeSize ||
carouselInfo.maxMoveSize <= carouselInfo.isMoveSize ||
(carouselInfo.isMoveSize > carouselInfo.lastBeforeSize &&
carouselInfo.maxMoveSize > carouselInfo.isMoveSize)
) {
eventList.resetVideo(this);
lastSlide.classList.add("is-last-slide");
lastBeforeSlide.classList.add("is-dimmed");
lastSlide.classList.remove("is-dimmed");
utils.offAccessibility(this.slides[lastIndex]);
utils.onAccessibility(this.slides[lastIndex - 1]);
} else if (
lastSlide.classList.contains("is-last-slide") &&
carouselInfo.lastBeforeSize >= carouselInfo.isMoveSize
) {
eventList.resetVideo(this);
lastSlide.classList.add("is-dimmed");
lastSlide.classList.remove("is-last-slide");
lastBeforeSlide.classList.remove("is-dimmed");
utils.onAccessibility(this.slides[lastIndex]);
utils.offAccessibility(this.slides[lastIndex - 1]);
}
}, 0);
},
destroy: function (swiper) {
if (swiper != null) {
swiper.navigation.destroy(true);
swiper.destroy(true);
swiper = null;
}
},
};
const accessibility = {
slide: function (swiper) {
for (let i = 0; i < swiper.slides.length; i++) {
if (i != swiper.activeIndex) {
utils.onAccessibility(swiper.slides[i]);
} else {
utils.offAccessibility(swiper.slides[i]);
}
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship.features.scrollVideo = (function () {
const utils = window.flagship.common.utils,
resize = window.flagship.common.resize;
let els = {
scrollVideoWraps: [],
scrollVideo: [],
scene: [],
},
currDevice = resize.checkResolution();
const init = function () {
els.scrollVideoWraps = document.querySelectorAll(
"div:not(.js-interactive-intro-video)>.js-scroll-video"
);
if (els.scrollVideoWraps.length > 0) {
setProperty();
eventList.setVideo();
eventList.setScene();
bindEvents();
}
};
const setProperty = function () {
for (let i = 0; i < els.scrollVideoWraps.length; i++) {
els.scrollVideoWraps[i].video =
els.scrollVideoWraps[i].querySelector("video");
els.scrollVideoWraps[i].controller =
els.scrollVideoWraps[i].querySelector(".js-video-control");
els.scrollVideoWraps[i].controller.video =
els.scrollVideoWraps[i].video;
els.scrollVideoWraps[i].startPoint = !!els.scrollVideoWraps[
i
].getAttribute("data-start-point")
? parseInt(
els.scrollVideoWraps[i].getAttribute("data-start-point")
)
: undefined;
els.scrollVideoWraps[i].reversePoint = !!els.scrollVideoWraps[
i
].getAttribute("data-reverse-point")
? parseInt(
els.scrollVideoWraps[i].getAttribute("data-reverse-point")
)
: undefined;
els.scrollVideoWraps[i].moStartPoint = !!els.scrollVideoWraps[
i
].getAttribute("data-mo-start-point")
? parseInt(
els.scrollVideoWraps[i].getAttribute("data-mo-start-point")
)
: undefined;
els.scrollVideoWraps[i].moReversePoint = !!els.scrollVideoWraps[
i
].getAttribute("data-mo-reverse-point")
? parseInt(
els.scrollVideoWraps[i].getAttribute("data-mo-reverse-point")
)
: undefined;
}
};
const bindEvents = function () {
eventHandler.scroll();
eventList.scroll();
eventHandler.click();
resize.add(eventList.resize);
};
const eventHandler = {
scroll: function () {
window.addEventListener("scroll", eventList.scroll);
},
click: function () {
for (let i = 0; i < els.scrollVideoWraps.length; i++) {
els.scrollVideoWraps[i].controller.addEventListener(
"click",
eventList.clickVideoCta
);
}
},
};
const eventList = {
setVideo: function () {
for (let i = 0; i < els.scrollVideoWraps.length; i++) {
els.scrollVideo[i] = utils.videoHandler({
playType: "scrollPlay",
startPoint:
currDevice.indexOf("mobile") > -1
? els.scrollVideoWraps[i].moStartPoint
: els.scrollVideoWraps[i].startPoint,
reversePoint:
currDevice.indexOf("mobile") > -1
? els.scrollVideoWraps[i].moReversePoint
: els.scrollVideoWraps[i].reversePoint,
wrap: els.scrollVideoWraps[i],
video: els.scrollVideoWraps[i].video,
controller: els.scrollVideoWraps[i].controller,
resetCallback: function () {
if (this.wrap.classList.contains("is-completed")) {
this.wrap.classList.remove("is-completed");
}
if (this.wrap.classList.contains("is-started")) {
this.wrap.classList.remove("is-started");
}
if (
!!this.video.videoWrap &&
this.video.videoWrap.classList.contains(
"js-interactive-intro-video"
)
) {
this.video.tooltip.classList.remove("is-visible");
}
},
playCallback: function () {
if (!this.wrap.classList.contains("is-started")) {
this.wrap.classList.add("is-started");
}
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.scrollVideoWraps.length; i++) {
els.scene[i] = SCROLLER({
trackElement: els.scrollVideoWraps[i].video,
useFixed: false,
resize: utils.detector.isTouchDevice ? false : true,
});
}
},
scroll: function () {
for (let i = 0; i < els.scrollVideoWraps.length; i++) {
els.scene[i].trackAnimation(function () {
els.scrollVideo[i].scrollActive(this.progress);
});
}
},
resize: function (currRes) {
currDevice = currRes;
},
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.features.threeColumnCarousel = (function () {
const utils = window.flagship.common.utils,
resize = window.flagship.common.resize;
let els = {},
swiperObj,
prevDevice = null,
currDevice = resize.checkResolution();
dimmedClass = "is-dimmed";
const isRtl = document.documentElement.classList.contains("rtl");
const init = function () {
els.section = document.querySelectorAll(".js-three-column-carousel");
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
for (let i = 0; i < els.section.length; i++) {
els.section[i].swiperContainer = els.section[i];
els.section[i].swiperSlide =
els.section[i].querySelectorAll(".swiper-slide");
els.section[i].nextArrow = els.section[
i
].parentElement.querySelector(".swiper-button-next");
els.section[i].prevArrow = els.section[
i
].parentElement.querySelector(".swiper-button-prev");
els.section[i].scrollbar =
els.section[i].parentElement.querySelector(".swiper-scrollbar");
}
};
const bindEvents = function () {
eventList.load();
eventHandler.keydown();
eventHandler.click();
resize.add(eventList.resize);
};
const eventHandler = {
swiper: function () {
for (let i = 0; i < els.section.length; i++) {
els.section[i].swiper.on("init", swiperEvents.init);
els.section[i].swiper.on("slideChange", swiperEvents.slideChange);
els.section[i].swiper.on(
"transitionEnd",
swiperEvents.transitionEnd
);
}
},
keydown: function () {
for (let i = 0; i < els.section.length; i++) {
els.section[i].prevArrow.addEventListener(
"keydown",
function (e) {
if (e.keyCode == 13) e.preventDefault();
eventList.arrowFocus(this, els.section[i].nextArrow);
}
);
els.section[i].nextArrow.addEventListener(
"keydown",
function (e) {
if (e.keyCode == 13) e.preventDefault();
eventList.arrowFocus(this, els.section[i].prevArrow);
}
);
}
},
click: function () {
for (let i = 0; i < els.section.length; i++) {
els.section[i].prevArrow.addEventListener("click", function (e) {
eventList.arrowFocus(this, els.section[i].nextArrow);
});
els.section[i].nextArrow.addEventListener("click", function (e) {
eventList.arrowFocus(this, els.section[i].prevArrow);
});
}
},
};
const eventList = {
load: function () {
for (let i = 0; i < els.section.length; i++) {
let desktopStatus =
(currDevice == "desktop" || currDevice == "tablet") &&
els.section[i].swiperSlide.length > 3;
let mobileStatus =
(currDevice == "mobile" || currDevice == "mobileS") &&
els.section[i].swiperSlide.length > 1;
if (desktopStatus || mobileStatus) {
swiperEvents.set();
eventHandler.swiper();
els.section[i].swiper.init();
}
}
},
resize: function () {
currDevice = resize.checkResolution();
if (prevDevice != currDevice) {
eventList.responsive();
prevDevice = currDevice;
}
},
responsive: function () {
for (let i = 0; i < els.section.length; i++) {
let isSection = els.section[i];
let desktopStatus =
(currDevice == "desktop" || currDevice == "tablet") &&
isSection.swiperSlide.length > 3;
let mobileStatus =
(currDevice == "mobile" || currDevice == "mobileS") &&
isSection.swiperSlide.length > 1;
eventList.resetDimmedSlide(isSection.swiper);
accessibility.reset(isSection.swiper);
if (desktopStatus || mobileStatus) {
if (isSection.swiper.initialized)
swiperEvents.destroy(isSection.swiper);
swiperEvents.set();
eventHandler.swiper();
isSection.swiper.init();
if (desktopStatus) eventList.initDimmedSlides(isSection.swiper);
if (mobileStatus) accessibility.slide(isSection.swiper);
} else if (
(!desktopStatus || !mobileStatus) &&
isSection.swiper != undefined
) {
if (isSection.swiper.initialized)
swiperEvents.destroy(isSection.swiper);
}
}
},
getCarouselSizeInfo: function (swiperObj) {
let slideLength = swiperObj.slides.length;
let slideWidth = swiperObj.slides[0].clientWidth;
let slideMargin = parseInt(
window.getComputedStyle(swiperObj.slides[0]).margin.split(" ")[
isRtl ? 3 : 1
]
);
let slideSize = slideWidth + slideMargin;
let maxMoveSize =
slideSize * slideLength -
slideMargin -
swiperObj.wrapperEl.clientWidth;
let viewWidth = swiperObj.wrapperEl.clientWidth;
let viewLength = Math.round((viewWidth + slideMargin) / slideSize);
let lastBeforeSize =
currDevice.indexOf("mobile") == -1 && slideLength == 3
? 0
: currDevice.indexOf("mobile") > -1 && slideLength == 2
? 0
: (slideWidth + slideMargin) * (slideLength - viewLength - 1);
let isMoveSize = Math.abs(
parseInt(
window
.getComputedStyle(swiperObj.wrapperEl)
.transform.split(",")[4]
)
);
return {
slideLength: slideLength,
slideWidth: slideWidth,
slideMargin: slideMargin,
slideSize: slideSize,
maxMoveSize: maxMoveSize,
viewWidth: viewWidth,
viewLength: viewLength,
lastBeforeSize: lastBeforeSize,
isMoveSize: isMoveSize,
};
},
initDimmedSlides: function (swiperObj) {
for (let i = 0; i < swiperObj.slides.length; i++) {
let isSlide = swiperObj.slides[i];
if (
swiperObj.activeIndex +
eventList.getCarouselSizeInfo(swiperObj).viewLength <=
i
) {
isSlide.classList.add(dimmedClass);
utils.onAccessibility(isSlide);
}
}
},
setDimmedSlide: function (swiperObj) {
for (let i = 0; i < swiperObj.slides.length; i++) {
let isSlide = swiperObj.slides[i];
let dimmedSlide =
swiperObj.activeIndex > i ||
swiperObj.activeIndex +
(eventList.getCarouselSizeInfo(swiperObj).viewLength - 1) <
i;
if (dimmedSlide) {
isSlide.classList.add(dimmedClass);
accessibility.slide(swiperObj);
} else {
isSlide.classList.remove(dimmedClass);
accessibility.slide(swiperObj);
}
}
},
resetDimmedSlide: function (swiperObj) {
if (!!!swiperObj) return;
for (let i = 0; i < swiperObj.slides.length; i++) {
swiperObj.slides[i].classList.remove(dimmedClass);
}
},
tagging: function () {
const values = {
"data-omni-type": "microsite_pcontentinter",
"data-omni": "galaxy-z-fold6:highlights:indicator:sldr-dots:",
"ga-ca": "indication",
"ga-ac": "carousel",
"ga-la": "galaxy-z-fold6:highlights:indicator:sldr-dots:",
};
},
arrowFocus: function (isFocusArrow, nextFocusArrow) {
setTimeout(() => {
if (isFocusArrow.classList.contains("swiper-button-disabled"))
nextFocusArrow.focus();
}, 300);
},
};
const swiperEvents = {
set: function () {
for (let i = 0; i < els.section.length; i++) {
if (els.section[i].swiper == null) {
new Swiper(els.section[i].swiperContainer, {
init: false,
slidesPerView: "auto",
speed: 200,
navigation: {
nextEl: els.section[i].nextArrow,
prevEl: els.section[i].prevArrow,
},
scrollbar: {
el: els.section[i].scrollbar,
draggable: true,
},
});
}
}
},
init: function () {
let isNextArrow = this.el.parentElement.querySelector(
".swiper-button-next"
);
let isPrevArrow = this.el.parentElement.querySelector(
".swiper-button-prev"
);
isNextArrow.removeAttribute("aria-label");
isNextArrow.removeAttribute("role");
isPrevArrow.removeAttribute("aria-label");
isPrevArrow.removeAttribute("role");
eventList.tagging();
eventList.initDimmedSlides(this);
accessibility.slide(this);
},
transitionEnd: function () {
let carouselInfo = eventList.getCarouselSizeInfo(this);
setTimeout(() => {
let lastIndex = this.slides.length - 1;
let lastSlide = this.slides[lastIndex];
let lsatDimmedLength =
carouselInfo.slideLength - 1 - carouselInfo.viewLength;
let lastBeforeSlide = this.slides[lsatDimmedLength];
if (
carouselInfo.isMoveSize > carouselInfo.lastBeforeSize &&
carouselInfo.maxMoveSize >= carouselInfo.isMoveSize
) {
lastSlide.classList.add("is-last-slide");
lastBeforeSlide.classList.add("is-dimmed");
lastSlide.classList.remove("is-dimmed");
if (currDevice.indexOf("mobile") > -1) {
utils.offAccessibility(this.slides[lastIndex]);
utils.onAccessibility(this.slides[lastIndex - 1]);
} else {
for (let i = 0; i < this.slides.length; i++) {
if (
i == lastIndex ||
i == lastIndex - 1 ||
i == lastIndex - 2
) {
utils.offAccessibility(this.slides[i]);
} else {
utils.onAccessibility(this.slides[i]);
}
}
}
} else if (
lastSlide.classList.contains("is-last-slide") &&
carouselInfo.lastBeforeSize >= carouselInfo.isMoveSize
) {
lastSlide.classList.add("is-dimmed");
lastSlide.classList.remove("is-last-slide");
lastBeforeSlide.classList.remove("is-dimmed");
if (currDevice.indexOf("mobile") > -1) {
utils.onAccessibility(this.slides[lastIndex]);
utils.offAccessibility(this.slides[lastIndex - 1]);
} else {
utils.onAccessibility(this.slides[lastIndex]);
utils.offAccessibility(this.slides[lastIndex - 1]);
utils.offAccessibility(this.slides[lastIndex - 2]);
}
}
}, 0);
},
slideChange: function () {
eventList.setDimmedSlide(this);
accessibility.slide(this);
},
destroy: function (swiperObj) {
swiperObj.navigation.destroy(true);
swiperObj.destroy(true);
swiperObj = null;
},
};
const accessibility = {
slide: function (swiper) {
if (currDevice.indexOf("mobile") > -1) {
for (let i = 0; i < swiper.slides.length; i++) {
if (i != swiper.activeIndex) {
utils.onAccessibility(swiper.slides[i]);
} else {
utils.offAccessibility(swiper.slides[i]);
}
}
} else {
for (let i = 0; i < swiper.slides.length; i++) {
if (
i != swiper.activeIndex &&
i != swiper.activeIndex + 1 &&
i != swiper.activeIndex + 2
) {
utils.onAccessibility(swiper.slides[i]);
} else {
utils.offAccessibility(swiper.slides[i]);
if (!!swiper.slides[i + 1])
utils.offAccessibility(swiper.slides[i + 1]);
if (!!swiper.slides[i + 2])
utils.offAccessibility(swiper.slides[i + 2]);
}
}
}
},
reset: function (swiper) {
for (let i = 0; i < swiper.slides.length; i++) {
utils.offAccessibility(swiper.slides[i]);
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship.features.aiOverview = (function () {
const utils = window.flagship.common.utils,
resize = flagship.common.resize;
let els = {};
let currDevice = resize.checkResolution();
const init = function () {
els.section = document.querySelector(".features-ai-overview");
if (!!els.section) {
setElements();
eventList.setScene();
bindEvents();
}
};
const setElements = function () {
// title
els.overviewTextWrap = els.section.querySelector(
".js-overview-text-wrap"
);
// logoVideo
els.logoWrap = els.section.querySelector(".js-logo-wrap");
els.logoVideoWrap = els.section.querySelector(".js-logo-video-wrap");
els.overviewVideo = els.logoVideoWrap.querySelector("video");
};
const bindEvents = function () {
eventHandler.scroll();
eventList.scroll();
resize.add(eventHandler.resize);
};
const eventHandler = {
scroll: function () {
window.addEventListener("scroll", eventList.scroll);
},
resize: function (currRes) {
currDevice = currRes;
},
};
const eventList = {
setScene: function () {
els.scene = SCROLLER({
trackElement: els.overviewTextWrap,
useFixed: false,
resize: utils.detector.isTouchDevice ? false : true,
});
},
scroll: function () {
els.scene.trackAnimation(function () {
//텍스트 페이드인
if (
this.wheelDirection == "down" &&
this.progress <= 100 &&
this.progress > 0
) {
if (!els.section.classList.contains("is-active")) {
els.section.classList.add("is-active");
if (els.overviewVideo.paused) {
els.overviewVideo.play();
}
}
} else if (this.wheelDirection == "up" && this.progress == 0) {
if (els.section.classList.contains("is-active")) {
els.section.classList.remove("is-active");
if (!els.overviewVideo.paused) {
els.overviewVideo.pause();
els.overviewVideo.currentTime = 0;
}
}
}
});
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship.features.battery = (function () {
const utils = window.flagship.common.utils,
resize = window.flagship.common.resize;
let els = {},
startNum = 3700,
endNum = 4000,
counter = {
num: startNum,
},
animateStatus = true,
tweenObj,
prevDevice = null,
currDevice = resize.checkResolution();
const init = function () {
els.section = document.querySelector(".features-battery");
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.capacity = els.section.querySelector(".js-battery-capacity");
els.value = els.capacity.querySelector(".js-battery-value");
};
const bindEvents = function () {
eventHandler.load();
eventList.scroll();
eventHandler.scroll();
};
const eventHandler = {
load: function () {
eventList.setScene();
},
scroll: function () {
window.addEventListener("scroll", eventList.scroll);
},
};
const eventList = {
setScene: function () {
SCROLLER({
trackElement: els.capacity,
useFixed: false,
});
},
scroll: function () {
els.capacity.scroller.trackAnimation(function () {
let countActive =
this.progress > 1 && animateStatus && !!!tweenObj;
let countReset =
this.progress <= 0 && this.wheelDirection == "up" && !!tweenObj;
if (countReset) {
tweenObj.kill();
counter.num = startNum;
tweenObj = null;
els.capacity.classList.remove("is-active");
}
if (countActive) {
animateStatus = false;
els.capacity.classList.add("is-active");
tweenObj = TweenMax.to(counter, 2, {
num: endNum,
onUpdate: function () {
els.value.textContent = Math.floor(counter.num);
},
onComplate: function () {
animateStatus = true;
},
});
}
});
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship.features.cameraSpec = (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(".features-camera-spec");
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.listInner = els.section.querySelectorAll(".js-camera-spec-inner");
};
const bindEvents = function () {
resize.add(eventList.resize);
eventList.load();
eventList.showCollout();
eventHandler.scroll();
};
const eventHandler = {
scroll: function () {
window.addEventListener("scroll", eventList.showCollout);
},
};
const eventList = {
load: function () {
eventList.setSecene();
},
resize: function (currRes) {
currDevice = currRes;
if (currDevice != prevDevice) {
prevDevice = currDevice;
}
},
setSecene: function () {
for (let i = 0; i < els.listInner.length; i++) {
SCROLLER({
trackElement: els.listInner[i],
useFixed: false,
});
}
},
showCollout: function () {
for (let i = 0; i < els.listInner.length; i++) {
els.listInner[i].scroller.trackAnimation(function () {
if (this.progress > 0) {
this.trackElement.classList.add("is-active");
}
if (i == 0) {
if (this.progress <= 0) {
for (let j = 0; j < els.listInner.length; j++) {
els.listInner[j].classList.remove("is-active");
}
}
}
});
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship.features.colorchip = function (colorchipWrap) {
const utils = window.flagship.common.utils,
common = window.flagship.features.common,
resize = window.flagship.common.resize;
let els = {},
activeClass = "is-active",
currentDevice = resize.checkResolution(),
prevDevice = null,
currentSlidesPerView = currentDevice.indexOf("mobile") > -1 ? 5 : 7;
const init = function () {
els.section = document.querySelector(".js-colors");
els.popup = document.querySelector(".js-viewer");
if (colorchipWrap.type == "popup") {
colorchipWrap.contentWrap = els.popup;
} else {
colorchipWrap.contentWrap = els.section;
}
setElements();
setProperty();
bindEvents();
};
const setElements = function () {
// panel
els.panelWrap = els.section.querySelector(".js-panel-wrap");
els.panelItems = els.panelWrap.querySelectorAll(".js-panel-item");
// colorchip
els.swiperContainer = colorchipWrap.querySelector(
".js-colorchip-container"
);
els.colorchipButtons = colorchipWrap.querySelectorAll(
".js-colorchip-button"
);
els.swiperArrowWrap = colorchipWrap.querySelector(".js-arrow-wrap");
els.swiperNextArrow =
colorchipWrap.querySelector(".js-colorchip-next");
els.swiperPrevArrow =
colorchipWrap.querySelector(".js-colorchip-prev");
els.colorchipNames =
colorchipWrap.querySelectorAll(".js-colorchip-name");
// 360 Popup Btn
els.viewerBtn = els.section.querySelector(".viewer-btn");
// viewer
els.viewerSection = els.section.querySelector(".js-colors-viewer");
els.viewerIframe = colorchipWrap.contentWrap.querySelector("iframe");
// exclusive badge
els.exclusive = colorchipWrap.contentWrap.querySelector(
".js-exclusive-badge"
);
};
const setProperty = function () {
for (let i = 0; i < els.colorchipButtons.length; i++) {
els.colorchipButtons[i].index = i;
}
};
const bindEvents = function () {
eventList.checkColorchipSwiper();
if (colorchipWrap.type != "popup") eventList.setColors(0);
eventHandler.click();
eventHandler.keydown();
resize.add(eventList.resize);
eventHandler.scroll();
};
const eventHandler = {
click: function () {
for (let i = 0; i < els.colorchipButtons.length; i++) {
els.colorchipButtons[i].addEventListener(
"click",
eventList.clickColorchip
);
}
els.viewerBtn.addEventListener("click", function () {
let activeIndex = this.getAttribute("data-target-index");
eventList.setColorchip(activeIndex);
eventList.setColorName(activeIndex);
eventList.setExclusive(activeIndex);
});
els.swiperNextArrow.addEventListener(
"click",
accessibility.clickArrow
);
els.swiperPrevArrow.addEventListener(
"click",
accessibility.clickArrow
);
},
keydown: function () {
els.swiperNextArrow.addEventListener(
"keydown",
accessibility.clickArrow
);
els.swiperPrevArrow.addEventListener(
"keydown",
accessibility.clickArrow
);
},
scroll: function () {
window.addEventListener("scroll", eventList.scroll);
},
};
const eventList = {
scroll: function () {
let winOffsetBottom = window.pageYOffset + window.innerHeight,
kv = document.querySelector(".features-kv"),
kvHeight =
kv.getBoundingClientRect().height + utils.getNavHeight();
if (winOffsetBottom >= kvHeight) {
// bg load
colorchipWrap.bgImgs =
colorchipWrap.querySelectorAll(".js-bg-img");
if (!!colorchipWrap.bgImgs)
bgLoader.setResponsiveMedia(colorchipWrap.bgImgs);
eventList.setViewer();
window.removeEventListener("scroll", eventList.scroll);
}
},
setViewer: function () {
if (!utils.isLowNetwork()) {
setTimeout(function () {
els.viewerIframe.style.position = "fixed";
els.viewerIframe.style.top = 0;
els.viewerIframe.style.opacity = 0;
setTimeout(function () {
els.viewerIframe.style.position = "";
els.viewerIframe.style.top = "";
els.viewerIframe.style.opacity = "";
}, 300);
}, 1000);
// set
eventList.setViewerUrl(
els.colorchipButtons[0].getAttribute("data-colors")
);
}
},
checkColorchipSwiper: function () {
let colorchipSwiperLength =
currentDevice.indexOf("mobile") > -1 ? 6 : 8;
if (els.colorchipButtons.length >= colorchipSwiperLength) {
if (els.swiperArrowWrap.style.display == "none") {
els.swiperArrowWrap.style.display = "";
}
swiperEvents.set();
} else {
if (els.swiperArrowWrap.style.display != "none") {
els.swiperArrowWrap.style.display = "none";
}
if (els.colorchipSwiper != null) {
swiperEvents.destroy();
}
}
},
setColors: function (activeIndex) {
eventList.setPopupBtn(els.colorchipButtons[activeIndex]);
eventList.setColorchip(activeIndex);
eventList.setPanel(activeIndex);
eventList.setColorName(activeIndex);
eventList.setExclusive(activeIndex);
},
resize: function (currRes) {
currentDevice = currRes;
if (currentDevice !== prevDevice) {
eventList.checkColorchipSwiper();
currentSlidesPerView =
currentDevice.indexOf("mobile") > -1 ? 5 : 7;
prevDevice = currentDevice;
}
},
clickColorchip: function () {
let targetColor = this;
eventList.setColors(targetColor.index);
eventList.setViewerUrl(targetColor.getAttribute("data-colors"));
},
setColorchip: function (activeIndex) {
let targetcolorchipButton = els.colorchipButtons[activeIndex];
for (let i = 0; i < els.colorchipButtons.length; i++) {
els.colorchipButtons[i].classList.remove(activeClass);
if (!!colorchipWrap.isStatic) {
els.colorchipButtons[i].setAttribute("aria-selected", false);
} else {
els.colorchipButtons[i].removeAttribute("title");
}
}
if (!targetcolorchipButton.classList.contains(activeClass)) {
targetcolorchipButton.classList.add(activeClass);
if (!!colorchipWrap.isStatic) {
targetcolorchipButton.setAttribute("aria-selected", true);
} else {
accessibility.selected(targetcolorchipButton);
}
}
},
setPanel: function (activeIndex) {
if (!colorchipWrap.isStatic) return;
for (let i = 0; i < els.panelItems.length; i++) {
if (els.panelItems[i].classList.contains(activeClass)) {
els.panelItems[i].classList.remove(activeClass);
els.panelItems[i].setAttribute("aria-hidden", true);
}
}
if (!els.panelItems[activeIndex].classList.contains(activeClass)) {
els.panelItems[activeIndex].classList.add(activeClass);
els.panelItems[activeIndex].setAttribute("aria-hidden", false);
}
},
setColorName: function (activeIndex) {
for (let i = 0; i < els.colorchipNames.length; i++) {
if (els.colorchipNames[i].classList.contains(activeClass)) {
els.colorchipNames[i].classList.remove(activeClass);
els.colorchipNames[i].setAttribute("aria-hidden", true);
}
}
if (
!els.colorchipNames[activeIndex].classList.contains(activeClass)
) {
els.colorchipNames[activeIndex].classList.add(activeClass);
els.colorchipNames[activeIndex].setAttribute(
"aria-hidden",
false
);
}
},
setViewerUrl: function (colorName) {
if (!!colorchipWrap.isStatic) return;
if (colorchipWrap.type == "popup") {
let viewerSrc = els.viewerIframe
.getAttribute("src")
.split("#color=")[0];
els.viewerIframe.setAttribute(
"src",
`${viewerSrc}#color=${colorName}`
);
} else {
els.viewerSection.setAttribute("data-model-color", colorName);
els.viewerIframe.setAttribute("src", common.getViewerUrl());
}
},
setPopupBtn: function (target) {
if (colorchipWrap.type == "popup") return;
els.viewerBtn.setAttribute("data-target-index", target.index);
els.viewerBtn.setAttribute(
"data-model-color",
target.getAttribute("aria-controls")
);
},
setExclusive: function (activeIndex) {
if (
!!els.colorchipButtons[activeIndex].getAttribute("data-exclusive")
) {
els.exclusive.classList.add("is-active");
} else {
els.exclusive.classList.remove("is-active");
}
},
};
const swiperEvents = {
set: function () {
if (els.colorchipSwiper == null) {
els.colorchipSwiper = new Swiper(els.swiperContainer, {
init: false,
navigation: {
nextEl: els.swiperNextArrow,
prevEl: els.swiperPrevArrow,
},
slidesPerView: currentSlidesPerView,
speed: 300,
});
els.colorchipSwiper.on("init", swiperEvents.init);
els.colorchipSwiper.on("slideChange", swiperEvents.slideChange);
els.colorchipSwiper.init();
}
},
init: function () {
let notification = this.el.querySelector(".swiper-notification");
if (!!notification) this.el.removeChild(notification);
els.swiperPrevArrow.removeAttribute("aria-label");
els.swiperPrevArrow.removeAttribute("role");
els.swiperNextArrow.removeAttribute("aria-label");
els.swiperNextArrow.removeAttribute("role");
accessibility.colorchip(els.colorchipSwiper);
},
slideChange: function () {
accessibility.colorchip(els.colorchipSwiper);
},
destroy: function () {
els.colorchipSwiper.destroy(true);
els.colorchipSwiper = null;
},
};
const accessibility = {
clickArrow: function (e) {
let arrowTimeout = null,
arrowStyleTimeout = null;
if ((e.type == "keydown" && e.keyCode == 13) || e.type == "click") {
e.preventDefault();
if (
els.colorchipSwiper.isBeginning &&
!els.colorchipSwiper.isEnd
) {
els.swiperPrevArrow.style.setProperty("display", "block");
clearTimeout(arrowTimeout);
arrowTimeout = setTimeout(function () {
els.swiperNextArrow.focus();
}, 300);
clearTimeout(arrowStyleTimeout);
arrowStyleTimeout = setTimeout(function () {
els.swiperPrevArrow.style.display = "";
}, 400);
} else if (
!els.colorchipSwiper.isBeginning &&
els.colorchipSwiper.isEnd
) {
els.swiperNextArrow.style.setProperty("display", "block");
clearTimeout(arrowTimeout);
arrowTimeout = setTimeout(function () {
els.swiperPrevArrow.focus();
}, 300);
clearTimeout(arrowStyleTimeout);
arrowStyleTimeout = setTimeout(function () {
els.swiperNextArrow.style.display = "";
}, 400);
}
}
},
colorchip: function (swiperObj) {
let isNotActivedColorchips = null;
for (let i = 0; i < swiperObj.slides.length; i++) {
if (currentDevice.indexOf("mobile") > -1) {
isNotActivedColorchips =
(i != swiperObj.activeIndex &&
i > swiperObj.activeIndex + 4) ||
swiperObj.activeIndex > i;
} else {
isNotActivedColorchips =
(i != swiperObj.activeIndex &&
i > swiperObj.activeIndex + 6) ||
swiperObj.activeIndex > i;
}
if (isNotActivedColorchips) {
utils.onAccessibility(swiperObj.slides[i]);
setTimeout(function () {
utils.onAccessibility(swiperObj.slides[i]);
}, 300);
} else {
utils.offAccessibility(swiperObj.slides[i]);
setTimeout(function () {
utils.offAccessibility(swiperObj.slides[i]);
}, 300);
}
}
},
selected: function (target) {
if (typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI) {
target.setAttribute("title", LOCAL_VARI.selected);
} else {
target.setAttribute("title", "Selected");
}
},
};
return init(colorchipWrap);
};
let colorchips = document.querySelectorAll(".js-colorchip");
for (let i = 0; i < colorchips.length; i++) {
colorchips[i].type = colorchips[i].parentElement.classList.contains(
"js-popup-colorchip"
)
? "popup"
: "colors";
colorchips[i].isStatic =
colorchips[i].parentElement.getAttribute("data-static");
flagship.features.colorchip(colorchips[i]);
}
})();
(function () {
window.flagship.features.faq = (function () {
const resize = window.flagship.common.resize,
utils = window.flagship.common.utils;
let els = {},
prevDevice = null,
currDevice = resize.checkResolution();
const init = function () {
els.section = document.querySelector(".js-faq");
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.faqList = els.section.querySelector(".js-faq-list");
};
const bindEvents = function () {
resize.add(eventList.resize);
eventList.setAccordion();
};
const eventList = {
resize: function (currRes) {
currDevice = currRes;
if (currDevice != prevDevice) {
eventList.responsive();
prevDevice = currDevice;
}
},
responsive: function () {
let isOpenedItems = els.faqList.querySelectorAll(
".js-faq-item.is-open"
);
if (isOpenedItems.length > 0) {
for (let i = 0; i < isOpenedItems.length; i++) {
let isOpenedItemContent =
isOpenedItems[i].querySelector(".js-faq-answer"),
clientHeight = isOpenedItemContent.children[0].clientHeight;
isOpenedItemContent.style.height = `${clientHeight}px`;
}
}
},
setAccordion: function () {
els.accordion = new window.flagship.common.accordion({
wrap: els.faqList,
classList: {
item: "js-faq-item",
button: "js-faq-open",
contents: "js-faq-answer",
activeClass: "is-open",
},
open: {
start: function (target) {
let targetInnerCta = target.querySelector(".js-featue-cta");
if (targetInnerCta)
targetInnerCta.addEventListener(
"click",
accessibility.moveFocus
);
},
},
});
els.accordion.init();
},
};
const accessibility = {
moveFocus: function (e) {
if (this.getAttribute("href").indexOf("#") > -1) {
e.preventDefault();
let sectionId = this.getAttribute("href"),
section = document.querySelector(`${sectionId}`),
sectionTop = section.getBoundingClientRect().top,
movePosition =
sectionTop + window.pageYOffset - utils.getNavHeight(),
clickable = section.querySelectorAll("a, button"),
title =
section.querySelector("h2") || section.querySelector("h3");
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.features.flexWindow = (function () {
const utils = window.flagship.common.utils;
const resize = window.flagship.common.resize;
let els = {};
let oldIndex = 0;
let swiperObj = {};
let pointerOffset = {};
let currDevice = resize.checkResolution();
let videoPlayStatus = false;
let animationStatus = "pause";
let lowNetwork =
document.documentElement.classList.contains("low_network");
const init = function () {
els.section = document.querySelector(".features-flex-window");
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.carouselWrap = els.section.querySelector(
".features-flex-window__carousel"
);
els.carouselInner = els.section.querySelector(
".features-flex-window__carousel-inner"
);
els.swiperContainer = els.section.querySelector(".swiper-container");
els.swiperSlides =
els.swiperContainer.querySelectorAll(".swiper-slide");
els.firstSlide = els.swiperSlides[0];
els.firstVideoControl =
els.swiperSlides[0].querySelector(".js-video-control");
els.nextArrow = els.section.querySelector(".swiper-button-next");
els.prevArrow = els.section.querySelector(".swiper-button-prev");
els.autoSlideController = els.section.querySelector(
".features-flex-window__carousel-button"
);
els.blind = els.autoSlideController.querySelector(".blind");
els.videos;
els.realCarouselSlides;
};
const setProperty = function () {
for (let i = 0; i < els.realCarouselSlides.length; i++) {
let isSlide = els.realCarouselSlides[i];
let isVideoWrap =
els.realCarouselSlides[i].querySelector(".common-video");
if (!!isVideoWrap) {
isSlide.videoWrap = isVideoWrap;
isSlide.videoWrap.video = isVideoWrap.querySelector(
".common-video__video"
);
isSlide.video = isVideoWrap.querySelector(".common-video__video");
isSlide.videoWrap.controller =
isVideoWrap.querySelector(".js-video-control");
isSlide.videoWrap.controller.video = isVideoWrap.querySelector(
".common-video__video"
);
}
}
};
const bindEvents = function () {
eventList.load();
eventHandler.scroll();
eventHandler.autoSlideController();
};
const eventHandler = {
scroll: function () {
window.addEventListener("scroll", eventList.scroll);
},
transitionend: function () {
els.carouselInner.addEventListener(
"animationend",
eventList.transitionend,
{ once: true }
);
},
flickSwiper: function () {
els.carouselWrap.addEventListener("touchstart", function (e) {
pointerOffset.start = null;
pointerOffset.current = null;
pointerOffset.start = e.touches[0].clientX;
els.carouselWrap.addEventListener(
"touchmove",
eventList.getPointerMoveSize
);
});
els.carouselWrap.addEventListener("touchend", function () {
if (pointerOffset.start == null) return;
eventList.flickSwiper();
els.carouselWrap.removeEventListener(
"touchmove",
eventList.getPointerMoveSize
);
});
els.carouselWrap.addEventListener("mousedown", function (e) {
pointerOffset.start = null;
pointerOffset.current = null;
pointerOffset.start = e.offsetX;
els.carouselWrap.addEventListener(
"mousemove",
eventList.getPointerMoveSize
);
});
els.carouselWrap.addEventListener("mouseup", function () {
eventList.flickSwiper();
els.carouselWrap.removeEventListener(
"mousemove",
eventList.getPointerMoveSize
);
});
els.carouselWrap.addEventListener("mouseleave", function () {
if (pointerOffset.start == null) return;
pointerOffset.start = null;
pointerOffset.current = null;
els.carouselWrap.removeEventListener(
"mousemove",
eventList.getPointerMoveSize
);
});
},
click: function () {
for (let i = 0; i < els.realCarouselSlides.length; i++) {
let isVideoWrap = els.realCarouselSlides[i].videoWrap;
if (!!isVideoWrap) {
els.realCarouselSlides[i].videoWrap.controller.addEventListener(
"click",
eventList.clickVideoCta
);
}
}
},
autoSlideController: function () {
els.autoSlideController.addEventListener(
"click",
eventList.autoSlideController
);
},
};
const eventList = {
load: function () {
swiperEvent.set();
swiperObj.thumb.init();
eventList.setScene();
eventList.scroll();
eventList.setAutoSlideController((animationStatus = "pause"));
els.firstSlide.setAttribute("aria-hidden", true);
},
setVideo: function () {
els.realCarouselSlides =
els.swiperContainer.querySelectorAll(".swiper-slide");
els.videos = els.swiperContainer.querySelectorAll(
".common-video__video"
);
setProperty();
eventHandler.click();
for (let i = 0; i < els.realCarouselSlides.length; i++) {
let isVideoWrap = els.realCarouselSlides[i].videoWrap;
if (!!isVideoWrap) {
if (!isVideoWrap.classList.contains("is-loaded"))
isVideoWrap.classList.add("is-loaded");
utils.videoHandler({
playType: "scrollPlay",
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.wrap.classList.contains("is-started")) {
this.wrap.classList.remove("is-started");
}
},
playCallback: function () {
if (!this.wrap.classList.contains("is-started")) {
this.wrap.classList.add("is-started");
}
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");
}
},
});
}
}
},
playVideo: function (videoWrap) {
let isVideo = videoWrap.video;
if (isVideo.readyState >= 4) {
isVideo.play();
} else {
isVideo.load();
isVideo.addEventListener(
"canplay",
function () {
isVideo.play();
},
{ once: true }
);
}
},
resetVideo: function () {
if (!!!els.realCarouselSlides) return;
for (let i = 0; i < els.realCarouselSlides.length; i++) {
let isVideo = els.realCarouselSlides[i].video;
if (!!isVideo && !isVideo.paused) {
isVideo.pause();
isVideo.currentTime = 0;
}
}
},
clickVideoCta: function (e) {
if (e.target == e.currentTarget) {
if (e.currentTarget.video.paused) {
e.currentTarget.video.play();
} else {
e.currentTarget.video.pause();
}
}
},
setScene: function () {
SCROLLER({
trackElement: els.swiperContainer,
resize: false,
});
},
animationStart: function () {
videoPlayStatus = false;
els.carouselInner.classList.add("is-animate-start");
eventList.setAutoSlideController((animationStatus = "play"));
eventHandler.transitionend();
},
setAutoSlideController: function (animationStatus) {
switch (animationStatus) {
case "play":
if (els.autoSlideController.classList.contains("is-paused")) {
els.autoSlideController.classList.remove("is-paused");
els.autoSlideController.classList.add("is-playing");
els.blind.innerText = LOCAL_VARI.pause;
setTagging.pause(els.autoSlideController);
}
break;
case "pause":
if (els.autoSlideController.classList.contains("is-playing")) {
els.autoSlideController.classList.remove("is-playing");
els.autoSlideController.classList.add("is-paused");
els.blind.innerText = LOCAL_VARI.play;
setTagging.play(els.autoSlideController);
}
break;
default:
break;
}
},
autoSlideController: function () {
let classStatus =
els.carouselInner.classList.contains("is-animate-start");
animationStatus === "pause"
? (animationStatus = "play")
: (animationStatus = "pause");
eventList.setAutoSlideController(animationStatus);
if (!classStatus) eventList.animationStart();
},
resetScroll: function () {
swiperEvent.destroy(swiperObj.thumb);
swiperEvent.set();
swiperObj.thumb.init();
for (let i = 0; i < swiperObj.thumb.slides.length; i++) {
let isVideo =
swiperObj.thumb.slides[i].querySelector(".common-video");
if (!!isVideo) {
isVideo.classList.remove("is-playing");
isVideo.classList.remove("is-paused");
isVideo.classList.remove("is-ended");
isVideo.classList.remove("is-completed");
}
}
els.carouselInner.classList.remove("is-animate-start");
els.autoSlideController.classList.remove("is-ended");
els.autoSlideController.classList.remove("is-completed");
eventList.setAutoSlideController((animationStatus = "pause"));
},
scroll: function () {
els.swiperContainer.scroller.trackAnimation(function () {
let classStatus =
els.carouselInner.classList.contains("is-animate-start");
let activeStatus = this.progress > 20 && !classStatus;
let resetStatus =
this.wheelDirection == "up" &&
this.progress <= 0 &&
classStatus;
let isActiveVideo =
swiperObj.thumb.slides[
swiperObj.thumb.activeIndex
].querySelector("video");
if (resetStatus) {
eventList.resetScroll();
}
if (activeStatus && !classStatus) {
eventList.animationStart();
}
for (let i = 0; i < els.videos.length; i++) {
if (!lowNetwork && videoPlayStatus && !!isActiveVideo)
isActiveVideo.videoHandler.scrollActive(this.progress);
}
});
},
transitionend: function () {
videoPlayStatus = true;
eventList.setAutoSlideController((animationStatus = "pause"));
els.autoSlideController.classList.add("is-ended");
setTimeout(function () {
let isActiveVideo =
swiperObj.thumb.slides[
swiperObj.thumb.activeIndex
].querySelector("video");
if (!!isActiveVideo) {
isActiveVideo.currentTime = 0;
isActiveVideo.play();
}
utils.offAccessibility(els.firstSlide);
if (
els.swiperContainer.scroller.progress < 100 &&
els.swiperContainer.scroller.progress > 0
)
els.firstVideoControl.focus();
els.autoSlideController.classList.add("is-completed");
}, 600);
},
getPointerMoveSize: function (e) {
if (!!e.touches) {
pointerOffset.current = e.touches[0].clientX;
} else {
pointerOffset.current = e.offsetX;
}
},
};
const swiperEvent = {
set: function () {
swiperObj.thumb = new Swiper(els.swiperContainer, {
init: false,
loop: true,
centeredSlides: true,
slidesPerView: "auto",
navigation: {
nextEl: els.nextArrow,
prevEl: els.prevArrow,
},
});
swiperObj.thumb.on("transitionEnd", swiperEvent.transitionEnd);
swiperObj.thumb.on("init", swiperEvent.init);
},
init: function () {
els.nextArrow.removeAttribute("aria-label");
els.nextArrow.removeAttribute("role");
els.prevArrow.removeAttribute("aria-label");
els.prevArrow.removeAttribute("role");
accessibility.slide(this);
eventList.setVideo();
},
transitionEnd: function () {
let isActiveSlide = els.swiperContainer.querySelector(
".swiper-slide-active"
);
let isVideoWrap = isActiveSlide.videoWrap;
accessibility.slide(this, true);
eventList.resetVideo();
if (!lowNetwork && !!isVideoWrap) eventList.playVideo(isVideoWrap);
},
destroy: function (swiper) {
swiper.navigation.destroy(true);
swiper.destroy(true);
},
};
const accessibility = {
slide: function (swiper, change) {
if (change) {
for (let i = 0; i < swiper.slides.length; i++) {
if (i != swiper.activeIndex) {
utils.onAccessibility(swiper.slides[i]);
} else {
utils.offAccessibility(swiper.slides[i]);
}
}
} else {
for (let i = 0; i < swiper.slides.length; i++) {
utils.onAccessibility(swiper.slides[i]);
}
}
},
};
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.features = window.flagship.features || {};
window.flagship.features.highlightsZone = (function () {
const utils = window.flagship.common.utils;
const resize = window.flagship.common.resize;
let els = {};
let prevDevice;
let swiperObj = {};
let pointerOffset = {};
let currDevice = resize.checkResolution();
let dimmedClass = "is-dimmed";
let ctaPlayStatus = true;
let scrollProgress = null;
let lowNetwork =
document.documentElement.classList.contains("low_network");
let isBgLoaded = false;
const init = function () {
els.section = document.querySelector(".features-highlights");
if (!!els.section) {
setElements();
setProperty();
bindEvents();
}
};
const setElements = function () {
els.mainContainer = els.section.querySelector(
".js-highlights-main-container"
);
els.mainSwiperSlides =
els.mainContainer.querySelectorAll(".swiper-slide");
els.videoWrap = els.mainContainer.querySelectorAll(".js-video-wrap");
els.prevArrow = els.mainContainer.parentElement.querySelector(
".swiper-button-prev"
);
els.nextArrow = els.mainContainer.parentElement.querySelector(
".swiper-button-next"
);
els.scrollbar = els.section.querySelector(".js-highlights-scrollbar");
els.bgContainer = els.section.querySelector(
".js-highlights-bg-container"
);
els.bgSwiperSlides =
els.bgContainer.querySelectorAll(".swiper-slide");
};
const setProperty = function () {
els.mainContainer.autoPlay = true;
els.videoWrap = els.mainContainer.querySelectorAll(".js-video-wrap");
for (let i = 0; i < els.videoWrap.length; i++) {
els.videoWrap[i].video = els.videoWrap[i].querySelector(
".common-video__video"
);
els.videoWrap[i].coverImageHighband = els.videoWrap[
i
].querySelector(".common-video__cover-image--highband");
els.videoWrap[i].coverImageLowband = els.videoWrap[i].querySelector(
".common-video__cover-image--lowband"
);
els.videoWrap[i].controller =
els.videoWrap[i].querySelector(".js-video-control");
els.videoWrap[i].controller.video = els.videoWrap[i].video;
els.videoWrap[i].progressBar = els.videoWrap[i].querySelector(
".common-video__control-progress-bar"
);
els.bgSwiperSlides[i].image =
els.bgSwiperSlides[i].querySelector("img");
}
};
const bindEvents = function () {
eventList.load();
eventHandler.click();
eventHandler.scroll();
eventHandler.flickSwiper();
resize.add(eventList.resize);
};
const eventHandler = {
flickSwiper: function () {
els.mainContainer.addEventListener("touchstart", function (e) {
pointerOffset.start = null;
pointerOffset.current = null;
pointerOffset.start = e.touches[0].clientX;
els.mainContainer.addEventListener(
"touchmove",
eventList.getPointerMoveSize
);
});
els.mainContainer.addEventListener("touchend", function () {
if (pointerOffset.start == null) return;
els.mainContainer.autoPlay = false;
els.mainContainer.removeEventListener(
"touchmove",
eventList.getPointerMoveSize
);
});
els.mainContainer.addEventListener("mousedown", function (e) {
pointerOffset.start = null;
pointerOffset.current = null;
pointerOffset.start = e.offsetX;
els.mainContainer.addEventListener(
"mousemove",
eventList.getPointerMoveSize
);
});
els.mainContainer.addEventListener("mouseup", function () {
els.mainContainer.autoPlay = false;
els.mainContainer.removeEventListener(
"mousemove",
eventList.getPointerMoveSize
);
});
els.mainContainer.addEventListener("mouseleave", function () {
if (pointerOffset.start == null) return;
pointerOffset.start = null;
pointerOffset.current = null;
els.mainContainer.removeEventListener(
"mousemove",
eventList.getPointerMoveSize
);
});
},
click: function () {
for (let i = 0; i < els.videoWrap.length; i++) {
els.videoWrap[i].controller.addEventListener(
"click",
eventList.clickVideoCta
);
}
for (let i = 0; i < els.videoWrap.length; i++) {
els.videoWrap[i].controller.addEventListener(
"click",
eventList.stopAutoPlay
);
}
els.nextArrow.addEventListener("click", function (e) {
eventList.stopAutoPlay(e);
eventList.swiperArrow(e);
});
els.prevArrow.addEventListener("click", function (e) {
eventList.stopAutoPlay(e);
eventList.swiperArrow(e);
});
els.scrollbar.addEventListener("click", eventList.stopAutoPlay);
},
scroll: function () {
window.addEventListener("scroll", eventList.scroll);
},
};
const eventList = {
load: function () {
swiperEvents.set();
swiperObj.main.init();
swiperObj.bg.init();
eventList.setVideo();
eventList.setScene();
eventList.scroll();
},
resize: function () {
currDevice = resize.checkResolution();
if (prevDevice != currDevice) {
eventList.responsive();
prevDevice = currDevice;
}
},
responsive: function () {
let desktopStatus =
eventList.getCarouselSizeInfo(swiperObj.main).viewLength > 0 &&
currDevice == "desktop";
eventList.resetDimmedSlide(swiperObj.main);
swiperObj.main.slideTo(0, false);
if (desktopStatus) eventList.initDimmedSlides(swiperObj.main);
},
setVideo: function () {
for (let i = 0; i < els.videoWrap.length; i++) {
utils.videoHandler({
playType: "scrollPlay",
startPoint: currDevice != "mobile" ? 40 : 24,
reversePoint: currDevice != "mobile" ? 88 : 80,
wrap: els.videoWrap[i],
video: els.videoWrap[i].video,
controller: els.videoWrap[i].controller,
resetCallback: function () {
if (this.wrap.classList.contains("is-completed")) {
this.wrap.classList.remove("is-completed");
}
if (this.wrap.classList.contains("is-started")) {
this.wrap.classList.remove("is-started");
}
},
playCallback: function () {
setTagging.pause(this.controller);
this.video.timeupdateEvent = function () {
if (this.currentTime > 0) {
if (
!this.videoHandler.wrap.classList.contains("is-started")
) {
this.videoHandler.wrap.classList.add("is-started");
}
eventList.setProgerssDuration(i);
this.removeEventListener(
"timeupdate",
this.timeupdateEvent
);
}
};
this.video.addEventListener(
"timeupdate",
this.video.timeupdateEvent
);
},
pauseCallback: function () {
setTagging.play(this.controller);
},
endCallback: function () {
if (!this.wrap.classList.contains("is-completed")) {
this.wrap.classList.add("is-completed");
}
if (els.mainContainer.autoPlay) {
if (scrollProgress > 40 && scrollProgress < 55) {
clearTimeout(swiperObj.main.videoTiming);
swiperObj.main.videoTiming = setTimeout(() => {
swiperObj.main.slideNext();
}, 1000);
}
}
},
});
}
},
playVideo: function (video) {
if (video.readyState >= 1) {
video.play();
} else {
video.addEventListener(
"canplay",
function () {
this.play();
},
{
once: true,
}
);
}
},
clickVideoCta: function (e) {
if (e.target == e.currentTarget) {
if (e.currentTarget.video.paused) {
eventList.playVideo(e.currentTarget.video);
ctaPlayStatus = true;
} else {
e.currentTarget.video.pause();
ctaPlayStatus = false;
}
}
},
stopAutoPlay: function (e) {
if (
e.target.classList.contains("js-video-control") ||
e.target.classList.contains("swiper-button-next") ||
e.target.classList.contains("swiper-button-prev") ||
e.target.classList.contains("js-highlights-scrollbar")
) {
els.mainContainer.autoPlay = false;
}
},
swiperArrowVisiblirity: function () {
let mainSlidesLength = els.mainSwiperSlides.length - 1;
let mainSwiper = swiperObj.main;
let prevArrow = mainSwiper.previousIndex > mainSwiper.realIndex;
let nextArrow = mainSwiper.previousIndex < mainSwiper.realIndex;
if (prevArrow) {
if (mainSwiper.realIndex == mainSlidesLength - 1) {
if (els.nextArrow.style.display == "none")
els.nextArrow.style.display = "";
} else if (mainSwiper.realIndex == 0) {
els.prevArrow.style.display = "none";
}
}
if (nextArrow) {
if (mainSwiper.realIndex == 1) {
if (els.prevArrow.style.display == "none")
els.prevArrow.style.display = "";
} else if (mainSwiper.realIndex == mainSlidesLength) {
els.nextArrow.style.display = "none";
}
}
},
swiperArrow: function (e) {
let mainSwiper = swiperObj.main;
let mainSlidesLength = els.mainSwiperSlides.length - 1;
let prevArrow = e.target.classList.contains("swiper-button-prev");
let nextArrow = e.target.classList.contains("swiper-button-next");
if (prevArrow) {
clearTimeout(swiperObj.main.videoTiming);
mainSwiper.slidePrev();
if (mainSwiper.realIndex == 0) {
setTimeout(() => {
els.nextArrow.blur();
els.nextArrow.focus();
}, 300);
}
}
if (nextArrow) {
clearTimeout(swiperObj.main.videoTiming);
mainSwiper.slideNext();
if (mainSwiper.realIndex == mainSlidesLength) {
setTimeout(() => {
els.prevArrow.blur();
els.prevArrow.focus();
}, 300);
}
}
},
scroll: function () {
els.section.scene.trackAnimation(function () {
let isIndex = swiperObj.main.realIndex;
let isMainVideoHandler =
els.videoWrap[isIndex].video.videoHandler;
scrollProgress = this.progress;
if (!lowNetwork && ctaPlayStatus)
isMainVideoHandler.scrollActive(this.progress);
if (scrollProgress > 0 && !isBgLoaded) {
for (let i = 0; i < els.bgSwiperSlides.length; i++) {
if (
!els.bgSwiperSlides[i].image.classList.contains(
"is-img-load-complete"
)
) {
imageLoader.setResponsiveMedia([
els.bgSwiperSlides[i].image,
]);
}
}
isBgLoaded = true;
}
});
},
slideVideoPlay: function () {
let isIndex = swiperObj.main.realIndex;
let isVideoWrap = els.videoWrap[isIndex];
isVideoWrap.classList.add("is-ended");
setTimeout(function () {
isVideoWrap.classList.remove("is-started", "is-paused");
if (!ctaPlayStatus) isVideoWrap.video.paused();
isVideoWrap.video.currentTime = 0;
if (ctaPlayStatus) {
eventList.playVideo(isVideoWrap.video);
setTimeout(function () {
if (els.mainContainer.autoPlay)
isVideoWrap.video.videoHandler.controller.blur();
if (els.mainContainer.autoPlay)
isVideoWrap.video.videoHandler.controller.focus();
if (isIndex == swiperObj.main.slides.length - 1) {
els.mainContainer.autoPlay = false;
}
}, 300);
}
}, 50);
},
setProgerssDuration: function (index) {
let isDuration = els.videoWrap[index].video.duration;
if (!!!els.videoWrap[index].durationSet) {
els.videoWrap[
index
].progressBar.style.animationDuration = `${isDuration}s`;
els.videoWrap[index].durationSet = true;
}
},
setMedia: function (index) {
let videoLength = els.mainSwiperSlides.length - 1;
let isIndex = index + 1;
let loadIndex = isIndex < videoLength ? isIndex : videoLength;
let mainVideoloadComplateLength =
els.mainContainer.querySelectorAll(".is-video-load-complete")
.length - 1;
for (let i = 0; i <= loadIndex; i++) {
if (
mainVideoloadComplateLength != videoLength &&
!els.videoWrap[i].video.classList.contains(
".is-video-load-complete"
)
) {
if (!!els.videoWrap[i].video)
videoLoader.setResponsiveMedia([els.videoWrap[i].video]);
if (!lowNetwork) {
if (!!els.videoWrap[i].coverImageHighband)
imageLoader.setResponsiveMedia([
els.videoWrap[i].coverImageHighband,
]);
} else {
if (!!els.videoWrap[i].coverImageLowband)
imageLoader.setResponsiveMedia([
els.videoWrap[i].coverImageLowband,
]);
}
if (!!els.bgSwiperSlides[i].image)
imageLoader.setResponsiveMedia([els.bgSwiperSlides[i].image]);
}
}
},
pauseVideo: function (swiper) {
for (let i = 0; i < swiper.slides.length; i++) {
let isVideo = swiper.slides[i].querySelector("video");
if (!!isVideo && !isVideo.paused) {
isVideo.pause();
}
}
},
getCarouselSizeInfo: function (swiper) {
let slideLength = swiper.slides.length;
let slideWidth = swiper.slides[0].clientWidth;
let slideMargin = parseInt(
window.getComputedStyle(swiper.slides[0]).margin.split(" ")[1]
);
let slideSize = slideWidth + slideMargin;
let maxMoveSize =
slideSize * slideLength -
slideMargin -
swiper.wrapperEl.clientWidth;
let viewWidth = swiper.wrapperEl.clientWidth;
let viewLength = parseInt((viewWidth + slideMargin) / slideSize);
let lastBeforeSize =
slideLength == 2
? 0
: Math.abs(maxMoveSize - slideSize) +
Math.abs(viewWidth - slideWidth);
let isMoveSize = Math.abs(
parseInt(
window
.getComputedStyle(swiper.wrapperEl)
.transform.split(",")[4]
)
);
return {
slideWidth: slideWidth,
slideMargin: slideMargin,
slideSize: slideSize,
maxMoveSize: maxMoveSize,
viewWidth: viewWidth,
viewLength: viewLength,
lastBeforeSize: lastBeforeSize,
isMoveSize: isMoveSize,
};
},
setScene: function () {
els.section.scene = SCROLLER({
trackElement: els.section,
useFixed: false,
});
},
initDimmedSlides: function (swiper) {
for (let i = 0; i < swiper.slides.length; i++) {
if (
swiper.activeIndex +
eventList.getCarouselSizeInfo(swiper).viewLength <=
i
) {
swiper.slides[i].classList.add(dimmedClass);
}
}
},
setDimmedSlide: function (swiper) {
for (let i = 0; i < swiper.slides.length; i++) {
let dimmedSlide =
swiper.activeIndex > i ||
swiper.activeIndex +
(eventList.getCarouselSizeInfo(swiper).viewLength - 1) <
i;
if (dimmedSlide) {
swiper.slides[i].classList.add(dimmedClass);
} else {
swiper.slides[i].classList.remove(dimmedClass);
}
}
},
resetDimmedSlide: function (swiper) {
for (let i = 0; i < swiper.slides.length; i++) {
swiper.slides[i].classList.remove(dimmedClass);
}
},
getPointerMoveSize: function (e) {
if (!!e.touches) {
pointerOffset.current = e.touches[0].clientX;
} else {
pointerOffset.current = e.offsetX;
}
},
};
const swiperEvents = {
set: function () {
if (swiperObj.main == null) {
swiperObj.main = new Swiper(els.mainContainer, {
init: false,
slidesPerView: "auto",
scrollbar: {
el: els.scrollbar,
draggable: true,
},
});
swiperObj.main.on("init", swiperEvents.init);
swiperObj.main.on("slideChange", swiperEvents.slideChange);
swiperObj.main.on("transitionEnd", swiperEvents.transitionEnd);
}
if (swiperObj.bg == null) {
swiperObj.bg = new Swiper(els.bgContainer, {
init: false,
slidesPerView: "auto",
allowTouchMove: false,
});
}
els.prevArrow.style.display = "none";
},
init: function () {
let isNextArrow = this.el.parentElement.querySelector(
".swiper-button-next"
);
let isPrevArrow = this.el.parentElement.querySelector(
".swiper-button-prev"
);
isNextArrow.removeAttribute("aria-label");
isNextArrow.removeAttribute("role");
isPrevArrow.removeAttribute("aria-label");
isPrevArrow.removeAttribute("role");
accessibility.slide(this);
if (eventList.getCarouselSizeInfo(this).viewLength > 0)
eventList.initDimmedSlides(this);
},
slideChange: function () {
swiperObj.bg.slideTo(this.realIndex);
accessibility.slide(this);
eventList.pauseVideo(this);
if (eventList.getCarouselSizeInfo(this).viewLength > 0)
eventList.setDimmedSlide(this);
if (this.realIndex > 0) eventList.setMedia(this.realIndex);
if (!lowNetwork) eventList.slideVideoPlay();
eventList.swiperArrowVisiblirity();
},
transitionEnd: function () {
setTimeout(() => {
let carouselInfo = eventList.getCarouselSizeInfo(this);
let lastIndex = this.slides.length - 1;
let lastSlide = this.slides[lastIndex];
let lastBeforeSlide = this.slides[lastIndex - 1];
let isIndex = swiperObj.main.previousIndex;
let isMoveSize =
currDevice != "mobile"
? carouselInfo.isMoveSize
: carouselInfo.isMoveSize +
Math.abs(carouselInfo.slideMargin);
els.videoWrap[isIndex].video.pause();
if (
carouselInfo.lastBeforeSize + carouselInfo.slideWidth / 2 <
isMoveSize &&
carouselInfo.maxMoveSize - carouselInfo.slideWidth / 2 <=
isMoveSize
) {
lastSlide.classList.add("is-last-slide");
lastBeforeSlide.classList.add("is-dimmed");
lastSlide.classList.remove("is-dimmed");
if (currDevice.indexOf("mobile") > -1) {
eventList.pauseVideo(this);
if (!lowNetwork && ctaPlayStatus) {
lastSlide.querySelector("video").play();
}
lastSlide.classList.add("swiper-slide-active");
lastBeforeSlide.classList.remove("swiper-slide-active");
if (els.nextArrow.style.display != "none") {
els.nextArrow.style.display = "none";
setTimeout(() => {
els.prevArrow.blur();
els.prevArrow.focus();
}, 300);
}
utils.offAccessibility(this.slides[lastIndex]);
utils.onAccessibility(this.slides[lastIndex - 1]);
}
} else if (
lastSlide.classList.contains("is-last-slide") &&
carouselInfo.lastBeforeSize >= carouselInfo.isMoveSize
) {
lastSlide.classList.add("is-dimmed");
lastSlide.classList.remove("is-last-slide");
lastBeforeSlide.classList.remove("is-dimmed");
if (currDevice.indexOf("mobile") > -1) {
eventList.pauseVideo(this);
if (!lowNetwork && ctaPlayStatus) {
lastBeforeSlide.querySelector("video").play();
}
lastSlide.classList.remove("swiper-slide-active");
lastBeforeSlide.classList.add("swiper-slide-active");
if (els.nextArrow.style.display == "none")
els.nextArrow.style.display = "";
utils.onAccessibility(this.slides[lastIndex]);
utils.offAccessibility(this.slides[lastIndex - 1]);
}
}
}, 0);
},
destroy: function (swiper) {
if (swiper != null) {
swiper.navigation.destroy(true);
swiper.destroy(true);
swiper = null;
}
},
};
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 accessibility = {
slide: function (swiper) {
for (let i = 0; i < swiper.slides.length; i++) {
if (i != swiper.activeIndex) {
utils.onAccessibility(swiper.slides[i]);
} else {
utils.offAccessibility(swiper.slides[i]);
}
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship.features.interactiveSuggested = (function () {
const utils = window.flagship.common.utils,
resize = window.flagship.common.resize;
let els = {};
let objs = {};
let stepInfo = [];
let scrollProgress = null;
const init = function () {
els.section = document.querySelector(".js-suggested-replies");
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.interactiveContent = els.section.querySelector(".js-interactive");
els.tutorialVideoContainer = els.section.querySelector(
".common-interactive__tutorial"
);
els.videoList = els.tutorialVideoContainer.querySelectorAll(
".common-interactive__tutorial-video"
);
els.videoWrap = els.tutorialVideoContainer.querySelectorAll(
".common-interactive__tutorial-video .common-video"
);
els.videos = els.tutorialVideoContainer.querySelectorAll(
".common-interactive__tutorial-video .common-video__video"
);
els.tooltipCta = els.tutorialVideoContainer.querySelectorAll(
".js-tutorial-tooltip-cta"
);
els.tutorialReplay =
els.tutorialVideoContainer.querySelector(".js-replay-cta");
};
const setProperty = function (el, index) {
el.video = el.querySelector("video");
el.video.videoWrap = el;
el.controller = el.querySelector(".js-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;
el.video.coverImage = el.querySelector(".common-video__cover-image");
};
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();
eventList.setScroller();
eventHandler.scroll();
};
const setStepStatus = function (el) {
stepInfo.push({
alert: el.getAttribute("data-alert"),
tooltip: el.getAttribute("data-tooltip"),
});
};
const eventList = {
setScroller: function () {
if (els.interactiveContent.scene == null) {
els.interactiveContent.scene = SCROLLER({
trackElement: els.interactiveContent,
useFixed: false,
});
}
},
scrollEvent: function () {
if (els.interactiveContent.scene != null) {
els.interactiveContent.scene.trackAnimation(function () {
scrollProgress = this.progress;
if (
els.interactiveContent.classList.contains(
"is-tutorial-opened"
)
) {
let activeVideo =
els.tutorialVideoContainer.querySelector(
".is-visible video"
);
let firstVideoHandler = els.videoWrap[0].video.videoHandler;
let replayStatus =
!document.documentElement.classList.contains(
"low_network"
) &&
activeVideo.paused &&
!els.videoWrap[0].classList.contains(
firstVideoHandler.endedClass
) &&
!els.videoWrap[0].classList.contains(
firstVideoHandler.pauseClass
) &&
scrollProgress > 0 &&
scrollProgress < 100;
let resetStatus =
scrollProgress === 0 || scrollProgress === 100;
let pauseStatus =
(this.wheelDirection == "up" && scrollProgress <= 30) ||
(this.wheelDirection == "down" && scrollProgress >= 60);
if (replayStatus) {
if (
els.videoWrap[0].video.readyState == 4 &&
els.videoWrap[0].video.paused
) {
els.videoWrap[0].video.play();
} else {
els.videoWrap[0].video.addEventListener(
"canplay",
function () {
els.videoWrap[0].video.play();
},
{ once: true }
);
}
}
if (resetStatus) {
activeVideo.pause();
activeVideo.currentTime = 0;
eventList.tutorialReset();
}
if (pauseStatus && !activeVideo.paused) {
activeVideo.pause();
}
}
});
}
},
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) {
els.videoList[index + 1].classList.add("is-visible");
if (els.videos[index + 1].readyState > 3) {
els.videos[index + 1].play();
} else {
els.videos[index + 1].addEventListener("loadeddata", function () {
if (this.paused) this.play();
});
}
els.videos[index + 1].videoWrap.controller.focus();
setTimeout(function () {
if (utils.detector.isTouchDevice) {
if (!!els.videoList[index].tooltipCta) {
els.videoList[index].tooltipCta.blur();
}
}
els.videos[index + 1].videoWrap.controller.focus();
utils.onAccessibility(els.videoList[index]);
if (!!els.videoList[index].tooltip) {
utils.onAccessibility(els.videoList[index].tooltip);
}
els.videoList[index].classList.remove("is-visible");
}, 300);
},
click: function () {
let self = this;
for (let i = 0; i < els.tooltipCta.length; i++) {
els.tooltipCta[i].addEventListener("click", function () {
self.nextVideoPlay(i);
});
}
},
tutorialReset: function () {
let firstVideoHandler = els.videoWrap[0].video.videoHandler;
els.videoWrap[0].classList.remove(firstVideoHandler.playClass);
els.videoWrap[0].classList.remove(firstVideoHandler.pauseClass);
els.videoWrap[0].classList.remove(firstVideoHandler.endedClass);
// video wrap
if (!els.videoList[0].classList.contains("is-visible")) {
els.videoList[0].classList.add("is-visible");
}
// tooltip
if (
!!els.videoWrap[0].tooltip &&
els.videoWrap[0].tooltip.classList.contains("is-visible")
) {
els.videoWrap[0].tooltip.classList.remove("is-visible");
}
// tootip accessibility
utils.offAccessibility(els.videoWrap[0]);
if (!!els.videoWrap[0].tooltip)
utils.onAccessibility(els.videoWrap[0].tooltip);
for (let i = 0; i < els.videoWrap.length; i++) {
if (i != 0) {
if (els.videoList[i].classList.contains("is-visible")) {
els.videoList[i].classList.remove("is-visible");
}
if (!els.videoWrap[i].video.paused) {
els.videoWrap[i].video.pause();
els.videoWrap[i].video.currentTime = 0;
}
// tooltip
if (
!!els.videoWrap[i].tooltip &&
els.videoWrap[i].tooltip.classList.contains("is-visible")
) {
els.videoWrap[i].tooltip.classList.remove("is-visible");
}
utils.onAccessibility(els.videoWrap[i]);
if (!!els.videoWrap[i].tooltip)
utils.onAccessibility(els.videoWrap[i].tooltip);
}
}
// replay cta
els.tutorialReplay.style.display = "none";
els.tutorialReplay.setAttribute("aria-hidden", true);
els.tutorialReplay.setAttribute("tabindex", -1);
},
};
const eventHandler = {
scroll: function () {
window.addEventListener("scroll", eventList.scrollEvent);
eventList.scrollEvent();
},
};
const setVideos = function () {
objs.videos = [];
for (let i = 0; i < els.videoWrap.length; i++) {
let isVideoWrap = els.videoWrap[i];
objs.videos.push(
utils.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
) {
if (
!els.videos[nextPlayindex].classList.contains(
"is-video-load-complete"
)
) {
videoLoader.setResponsiveMedia([
els.videos[nextPlayindex],
]);
}
if (
!els.videos[nextPlayindex].coverImage.classList.contains(
"is-img-load-complete"
)
) {
imageLoader.setResponsiveMedia([
els.videos[nextPlayindex].coverImage,
]);
}
}
},
pauseCallback: function () {
setTagging.play(this.controller);
},
endCallback: function () {
let self = this;
if (
!!this.wrap.tooltip &&
stepInfo[this.video.playIndex].tooltip == "true"
) {
if (!!this.wrap.tooltipCta)
this.wrap.tooltipCta.removeAttribute("disabled");
if (!!this.wrap.tooltip)
this.wrap.tooltip.classList.add("is-visible");
utils.offAccessibility(this.wrap.tooltip);
}
if (!this.wrap.classList.contains("is-completed")) {
this.wrap.classList.add("is-completed");
}
let playStatus = scrollProgress > 30 && scrollProgress < 60;
if (playStatus && !!this.wrap.tooltipCta) {
this.wrap.tooltipCta.focus();
setTimeout(function () {
self.wrap.tooltipCta.focus();
}, 300);
}
if (els.videos.length - 1 == this.video.playIndex) {
els.tutorialReplay.style.display = "block";
els.tutorialReplay.removeAttribute("tabindex");
els.tutorialReplay.removeAttribute("aria-hidden");
if (playStatus) {
els.tutorialReplay.focus();
setTimeout(function () {
els.tutorialReplay.focus();
}, 300);
}
}
setTimeout(function () {
self.controller.style.display = "none";
}, 100);
},
})
);
}
};
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.features.interactiveInterpreter = (function () {
const utils = window.flagship.common.utils,
resize = window.flagship.common.resize;
let els = {};
let objs = {};
let stepInfo = [];
let scrollProgress = null;
let isMute = null;
const init = function () {
els.section = document.querySelector(".js-interpreter");
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.interactiveContent = els.section.querySelector(".js-interactive");
els.tutorialVideoContainer = els.section.querySelector(
".common-interactive__tutorial"
);
els.videoList = els.tutorialVideoContainer.querySelectorAll(
".common-interactive__tutorial-video"
);
els.videoWrap = els.tutorialVideoContainer.querySelectorAll(
".common-interactive__tutorial-video .common-video"
);
els.videos = els.tutorialVideoContainer.querySelectorAll(
".common-interactive__tutorial-video .common-video__video"
);
els.tooltipCta = els.tutorialVideoContainer.querySelectorAll(
".js-tutorial-tooltip-cta"
);
els.tutorialReplay =
els.tutorialVideoContainer.querySelector(".js-replay-cta");
els.allVideoWrap = els.section.querySelectorAll(".js-video-wrap");
els.muteCta = els.section.querySelectorAll(".js-mute-cta");
// status
isMute = !!els.muteCta && els.muteCta.length > 0;
};
const setProperty = function (el, index) {
el.video = el.querySelector("video");
el.video.videoWrap = el;
el.controller = el.querySelector(".js-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;
el.video.coverImage = el.querySelector(".common-video__cover-image");
if (isMute) {
el.muteCta = els.muteCta[index + 1];
}
};
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.tooltipCta();
eventList.setScroller();
eventHandler.scroll();
if (isMute) {
muteEventHandler();
}
};
const setStepStatus = function (el) {
stepInfo.push({
alert: el.getAttribute("data-alert"),
tooltip: el.getAttribute("data-tooltip"),
});
};
const muteEventHandler = function () {
for (let i = 0; i < els.muteCta.length; i++) {
muteEventList.setProperty(els.muteCta[i], i);
muteEventList.setMuteBlindText(els.muteCta[i], i);
muteEventList.click(els.muteCta[i], i);
els.allVideoWrap[i].querySelector("video").style.pointerEvents =
"none";
}
};
const muteEventList = {
setProperty: function (muteCta, index) {
muteCta.videoWrap = els.allVideoWrap[index];
muteCta.videoWrap.muteCta = muteCta;
muteCta.video = els.allVideoWrap[index].querySelector("video");
muteCta.blind = muteCta.querySelector(".blind");
},
setMuteBlindText: function (muteCta) {
muteCta.blind.innerText = muteCta.getAttribute("data-unmute");
},
click: function (muteCta) {
muteCta.addEventListener("click", function () {
let isMute = this.video.muted;
if (!!isMute) {
this.classList.remove("is-muted");
this.classList.add("is-unmuted");
this.blind.innerText = this.getAttribute("data-mute");
this.video.muted = false;
setTagging.mute(this);
} else {
this.classList.remove("is-unmuted");
this.classList.add("is-muted");
this.blind.innerText = this.getAttribute("data-unmute");
this.video.muted = true;
setTagging.unmute(this);
}
});
},
};
const eventList = {
setScroller: function () {
if (els.interactiveContent.scene == null) {
els.interactiveContent.scene = SCROLLER({
trackElement: els.interactiveContent,
useFixed: false,
});
}
},
scrollEvent: function () {
if (els.interactiveContent.scene != null) {
els.interactiveContent.scene.trackAnimation(function () {
scrollProgress = this.progress;
if (
els.interactiveContent.classList.contains(
"is-tutorial-opened"
)
) {
let activeVideo =
els.tutorialVideoContainer.querySelector(
".is-visible video"
);
let firstVideoHandler = els.videoWrap[0].video.videoHandler;
let replayStatus =
!document.documentElement.classList.contains(
"low_network"
) &&
activeVideo.paused &&
!els.videoWrap[0].classList.contains(
firstVideoHandler.endedClass
) &&
!els.videoWrap[0].classList.contains(
firstVideoHandler.pauseClass
) &&
scrollProgress > 0 &&
scrollProgress < 100;
let resetStatus =
scrollProgress === 0 || scrollProgress === 100;
let pauseStatus =
(this.wheelDirection == "up" && scrollProgress <= 30) ||
(this.wheelDirection == "down" && scrollProgress >= 60);
if (replayStatus) {
if (
els.videoWrap[0].video.readyState == 4 &&
els.videoWrap[0].video.paused
) {
els.videoWrap[0].video.play();
} else {
els.videoWrap[0].video.addEventListener(
"canplay",
function () {
els.videoWrap[0].video.play();
},
{ once: true }
);
}
}
if (resetStatus) {
activeVideo.pause();
activeVideo.currentTime = 0;
eventList.tutorialReset();
}
if (pauseStatus && !activeVideo.paused) {
activeVideo.pause();
}
}
});
}
},
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) {
els.videoList[index + 1].classList.add("is-visible");
if (els.videos[index + 1].readyState > 3) {
els.videos[index + 1].play();
} else {
els.videos[index + 1].addEventListener("loadeddata", function () {
if (this.paused) this.play();
});
}
els.videos[index + 1].videoWrap.controller.focus();
setTimeout(function () {
if (utils.detector.isTouchDevice) {
if (!!els.videoList[index].tooltipCta) {
els.videoList[index].tooltipCta.blur();
}
}
els.videos[index + 1].videoWrap.controller.focus();
utils.onAccessibility(els.videoList[index]);
if (!!els.videoList[index].tooltip) {
utils.onAccessibility(els.videoList[index].tooltip);
}
els.videoList[index].classList.remove("is-visible");
}, 300);
},
click: {
tooltipCta: function () {
for (let i = 0; i < els.tooltipCta.length; i++) {
els.tooltipCta[i].addEventListener("click", function () {
eventList.nextVideoPlay(i);
});
}
},
},
tutorialReset: function () {
let firstVideoHandler = els.videoWrap[0].video.videoHandler;
els.videoWrap[0].classList.remove(firstVideoHandler.playClass);
els.videoWrap[0].classList.remove(firstVideoHandler.pauseClass);
els.videoWrap[0].classList.remove(firstVideoHandler.endedClass);
// video wrap
if (!els.videoList[0].classList.contains("is-visible")) {
els.videoList[0].classList.add("is-visible");
}
// tooltip
if (
!!els.videoWrap[0].tooltip &&
els.videoWrap[0].tooltip.classList.contains("is-visible")
) {
els.videoWrap[0].tooltip.classList.remove("is-visible");
}
// tootip accessibility
utils.offAccessibility(els.videoWrap[0]);
if (!!els.videoWrap[0].tooltip)
utils.onAccessibility(els.videoWrap[0].tooltip);
for (let i = 0; i < els.videoWrap.length; i++) {
if (i != 0) {
if (els.videoList[i].classList.contains("is-visible")) {
els.videoList[i].classList.remove("is-visible");
}
if (!els.videoWrap[i].video.paused) {
els.videoWrap[i].video.pause();
els.videoWrap[i].video.currentTime = 0;
}
// tooltip
if (
!!els.videoWrap[i].tooltip &&
els.videoWrap[i].tooltip.classList.contains("is-visible")
) {
els.videoWrap[i].tooltip.classList.remove("is-visible");
}
utils.onAccessibility(els.videoWrap[i]);
if (!!els.videoWrap[i].tooltip)
utils.onAccessibility(els.videoWrap[i].tooltip);
}
}
// replay cta
els.tutorialReplay.style.display = "none";
els.tutorialReplay.setAttribute("aria-hidden", true);
els.tutorialReplay.setAttribute("tabindex", -1);
},
};
const eventHandler = {
scroll: function () {
window.addEventListener("scroll", eventList.scrollEvent);
eventList.scrollEvent();
},
};
const setVideos = function () {
objs.videos = [];
for (let i = 0; i < els.videoWrap.length; i++) {
let isVideoWrap = els.videoWrap[i];
objs.videos.push(
utils.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.muteCta);
if (!this.video.muted) {
this.wrap.muteCta.classList.remove("is-unmuted");
this.wrap.muteCta.video.muted = true;
this.wrap.muteCta.blind.innerText =
this.wrap.muteCta.getAttribute("data-unmute");
setTagging.unmute(this.wrap.muteCta);
}
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
) {
if (
!els.videos[nextPlayindex].classList.contains(
"is-video-load-complete"
)
) {
videoLoader.setResponsiveMedia([
els.videos[nextPlayindex],
]);
}
if (
!els.videos[nextPlayindex].coverImage.classList.contains(
"is-img-load-complete"
)
) {
imageLoader.setResponsiveMedia([
els.videos[nextPlayindex].coverImage,
]);
}
}
},
pauseCallback: function () {
setTagging.play(this.controller);
},
endCallback: function () {
let self = this;
if (
!!this.wrap.tooltip &&
stepInfo[this.video.playIndex].tooltip == "true"
) {
if (!!this.wrap.tooltipCta)
this.wrap.tooltipCta.removeAttribute("disabled");
if (!!this.wrap.tooltip)
this.wrap.tooltip.classList.add("is-visible");
utils.offAccessibility(this.wrap.tooltip);
}
if (!this.wrap.classList.contains("is-completed")) {
this.wrap.classList.add("is-completed");
}
let playStatus = scrollProgress > 30 && scrollProgress < 60;
if (playStatus && !!this.wrap.tooltipCta) {
this.wrap.tooltipCta.focus();
setTimeout(function () {
self.wrap.tooltipCta.focus();
}, 300);
}
if (els.videos.length - 1 == this.video.playIndex) {
els.tutorialReplay.style.display = "block";
els.tutorialReplay.removeAttribute("tabindex");
els.tutorialReplay.removeAttribute("aria-hidden");
if (playStatus) {
els.tutorialReplay.focus();
setTimeout(function () {
els.tutorialReplay.focus();
}, 300);
}
}
setTimeout(function () {
self.controller.style.display = "none";
}, 100);
},
})
);
}
};
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"));
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship.features.interactive = (function () {
const utils = window.flagship.common.utils,
resize = window.flagship.common.resize;
let els = {},
prevDevice = null,
currDevice = resize.checkResolution(),
scrollProgress = null;
const init = function () {
els.interactiveContents =
document.querySelectorAll(".js-interactive");
if (!!els.interactiveContents && els.interactiveContents.length > 0) {
for (let i = 0; i < els.interactiveContents.length; i++) {
setProperty(els.interactiveContents[i], i);
eventList.setIntroVideo(els.interactiveContents[i]);
eventList.setIntroScene(els.interactiveContents[i]);
bindEvents(els.interactiveContents[i], i);
}
}
};
const setProperty = function (content, index) {
// introVideo
content.index = index;
content.introVideo = content.querySelector(
".js-interactive-intro-video video"
);
content.introVideo.videoWrap = content.querySelector(
".js-interactive-intro-video"
);
content.introVideo.wrap = content.querySelector(
".js-interactive-intro-video .js-video-wrap"
);
content.introVideo.parentWrap = content.parentElement;
content.introVideo.controllerCta =
content.introVideo.videoWrap.querySelector(".js-video-control");
content.introVideo.controllerCta.video = content.introVideo;
content.introVideo.tooltip = content.querySelector(
".js-tutorial-tooltip"
);
content.introVideo.tooltipCta = content.querySelector(
".js-tutorial-tooltip-cta"
);
content.introVideo.tooltipCta.parentWrap = content;
content.tutorialContentWrap =
content.querySelectorAll(".js-tutorial-video");
content.tutorialContentWrap.tooltip = content.querySelectorAll(
".js-tutorial-video .js-tutorial-tooltip"
);
// start, reverse point
content.introVideo.wrap.startPoint =
!!content.introVideo.wrap.getAttribute("data-start-point")
? parseInt(
content.introVideo.wrap.getAttribute("data-start-point")
)
: undefined;
content.introVideo.wrap.reversePoint =
!!content.introVideo.wrap.getAttribute("data-reverse-point")
? parseInt(
content.introVideo.wrap.getAttribute("data-reverse-point")
)
: undefined;
content.introVideo.wrap.moStartPoint =
!!content.introVideo.wrap.getAttribute("data-mo-start-point")
? parseInt(
content.introVideo.wrap.getAttribute("data-mo-start-point")
)
: undefined;
content.introVideo.wrap.moReversePoint =
!!content.introVideo.wrap.getAttribute("data-mo-reverse-point")
? parseInt(
content.introVideo.wrap.getAttribute("data-mo-reverse-point")
)
: undefined;
// replayCta
content.replayCta = content.querySelector(".js-replay-cta");
content.replayCta.parentWrap = content;
};
const bindEvents = function (content, i) {
eventHandler.click.introTooltipCta(content.introVideo.tooltipCta);
eventHandler.click.replayCta(content.replayCta);
eventHandler.click.videoController(content.introVideo.controllerCta);
eventHandler.scroll(content);
eventList.scroll(content);
resize.add(function (currRes) {
eventList.resize(currRes, content);
});
};
const eventList = {
setIntroVideo: function (content) {
utils.videoHandler({
playType: "scrollPlay",
startPoint: content.introVideo.wrap.startPoint,
reversePoint: content.introVideo.wrap.reversePoint,
wrap: content.introVideo.wrap,
video: content.introVideo,
controller: content.introVideo.controllerCta,
resetCallback: function () {
if (this.wrap.classList.contains("is-completed")) {
this.wrap.classList.remove("is-completed");
}
if (this.wrap.classList.contains("is-started")) {
this.wrap.classList.remove("is-started");
}
utils.offAccessibility(content.introVideo.videoWrap);
if (content.introVideo.controllerCta.style.display == "none") {
content.introVideo.controllerCta.style.display = "block";
}
if (this.video.tooltip.classList.contains("is-visible")) {
this.video.tooltip.classList.remove("is-visible");
}
this.video.tooltip.classList.remove("is-visible");
utils.onAccessibility(this.video.tooltip);
},
playCallback: function () {
if (!this.wrap.classList.contains("is-started")) {
this.wrap.classList.add("is-started");
}
setTagging.pause(this.controller);
let videoWrap =
content.tutorialContentWrap[0].querySelector(
".js-video-wrap"
);
videoWrap.coverImg = videoWrap.querySelector(
".common-video__cover-image"
);
videoWrap.video = videoWrap.querySelector("video");
if (
!!videoWrap.coverImg &&
!videoWrap.coverImg.classList.contains("is-img-load-complete")
) {
imageLoader.setResponsiveMedia([videoWrap.coverImg]);
}
if (
!!videoWrap.video &&
!videoWrap.video.classList.contains("is-video-load-complete")
) {
videoLoader.setResponsiveMedia([videoWrap.video]);
}
},
pauseCallback: function () {
setTagging.play(this.controller);
},
endCallback: function () {
let self = this;
if (!this.wrap.classList.contains("is-completed")) {
this.wrap.classList.add("is-completed");
}
this.video.tooltip.classList.add("is-visible");
utils.offAccessibility(this.video.tooltip);
let isPlaySection = null;
isPlaySection = scrollProgress > 30 && scrollProgress < 60;
if (isPlaySection) {
this.video.tooltipCta.focus();
setTimeout(function () {
self.video.tooltipCta.focus();
self.controller.style.display = "none";
}, 300);
}
},
});
},
setIntroScene: function (content) {
content.introVideo.scene = SCROLLER({
trackElement: content.introVideo,
useFixed: false,
resize: utils.detector.isTouchDevice ? false : true,
});
},
scroll: function (content) {
if (!content.classList.contains("is-tutorial-opened")) {
content.introVideo.scene.trackAnimation(function () {
content.introVideo.videoHandler.scrollActive(this.progress);
scrollProgress = this.progress;
let pauseStatus =
(this.wheelDirection == "up" && scrollProgress <= 30) ||
(this.wheelDirection == "down" && scrollProgress >= 60);
if (pauseStatus && !content.introVideo.paused) {
content.introVideo.pause();
}
});
}
},
click: {
introVideoTooltipCta: function () {
let content = this.parentWrap;
content.classList.add("is-tutorial-opened");
utils.onAccessibility(content.introVideo.videoWrap);
content.tutorialContentWrap[0].classList.add("is-visible");
utils.offAccessibility(content.tutorialContentWrap[0]);
content.tutorialContentWrap[0]
.querySelector(".common-video__control")
.focus();
setTimeout(function () {
content.tutorialContentWrap[0]
.querySelector(".common-video__control")
.focus();
}, 300);
content.introVideo.tooltip.classList.remove("is-visible");
let videoWrap =
content.tutorialContentWrap[0].querySelector(".js-video-wrap");
videoWrap.video.play();
},
replayCta: function () {
let content = this.parentWrap;
content.introVideo.tooltip.classList.remove("is-visible");
utils.onAccessibility(content.introVideo.tooltip);
utils.offAccessibility(content.introVideo.videoWrap);
content.introVideo.controllerCta.style.display = "block";
content.introVideo.controllerCta.focus();
setTimeout(function () {
content.introVideo.controllerCta.focus();
}, 300);
content.replayCta.style.display = "none";
content.replayCta.setAttribute("aria-hidden", true);
content.replayCta.setAttribute("tabindex", -1);
for (let i = 0; i < content.tutorialContentWrap.length; i++) {
content.tutorialContentWrap[i].classList.remove("is-visible");
if (!!content.tutorialContentWrap.tooltip[i]) {
content.tutorialContentWrap.tooltip[i].classList.remove(
"is-visible"
);
}
utils.onAccessibility(content.tutorialContentWrap[i]);
setTimeout(function () {
content.tutorialContentWrap[i].querySelector(
"video"
).currentTime = 0;
}, 300);
}
content.classList.remove("is-tutorial-opened");
content.introVideo.play();
},
videoController: function (e) {
if (e.target == e.currentTarget) {
if (e.currentTarget.video.paused) {
e.currentTarget.video.play();
} else {
e.currentTarget.video.pause();
}
}
},
},
reset: function (content) {
if (content.classList.contains("is-tutorial-opened")) {
content.classList.remove("is-tutorial-opened");
}
// replay cta
if (content.replayCta.style.display == "block") {
content.replayCta.style.display = "none";
content.replayCta.setAttribute("aria-hidden", true);
content.replayCta.setAttribute("tabindex", -1);
}
// tutorial video
let tutorialWrap = content.tutorialContentWrap;
for (let i = 0; i < tutorialWrap.length; i++) {
tutorialWrap[i].classList.remove("is-visible");
utils.onAccessibility(tutorialWrap[i]);
// video
tutorialWrap[i].video = tutorialWrap[i].querySelector("video");
if (!tutorialWrap[i].video.paused) {
tutorialWrap[i].video.pause();
tutorialWrap[i].video.currentTime = 0;
}
// tooltip
if (!!tutorialWrap.tooltip[i]) {
if (tutorialWrap.tooltip[i].classList.contains("is-visible")) {
tutorialWrap.tooltip[i].classList.remove("is-visible");
}
utils.onAccessibility(tutorialWrap.tooltip[i]);
}
}
// intro video
utils.offAccessibility(content.introVideo.videoWrap);
if (content.introVideo.controllerCta.style.display == "none") {
content.introVideo.controllerCta.style.display = "block";
}
// intro tooltip
if (content.introVideo.tooltip.classList.contains("is-visible")) {
content.introVideo.tooltip.classList.remove("is-visible");
}
utils.onAccessibility(content.introVideo.tooltip);
if (scrollProgress >= 30 && scrollProgress <= 60) {
if (content.introVideo.paused) {
content.introVideo.currentTime = 0;
content.introVideo.play();
}
}
},
resize: function (currRes, content) {
currDevice = currRes;
if (prevDevice != currDevice) {
eventList.reset(content);
}
prevDevice = currDevice;
},
};
const eventHandler = {
click: {
replayCta: function (replayCta) {
replayCta.addEventListener("click", eventList.click.replayCta);
},
introTooltipCta: function (introTooltipCta) {
introTooltipCta.addEventListener(
"click",
eventList.click.introVideoTooltipCta
);
},
videoController: function (introVideoController) {
introVideoController.addEventListener(
"click",
eventList.click.videoController
);
},
},
scroll: function (content) {
window.addEventListener("scroll", function () {
eventList.scroll(content);
});
},
};
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.features.lowLightPortrait = (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(".features-lowlight-portrait");
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.image = els.section.querySelector(
".features-lowlight-portrait__interaction-image"
);
els.videoWrap = els.section.querySelector(".js-portrait-video-wrap");
els.video = els.videoWrap.querySelector(".js-portrait-video");
};
const bindEvents = function () {
resize.add(eventList.resize);
eventList.setScene();
eventList.scroll();
eventHandler.scroll();
els.image.addEventListener("transitionend", eventList.videoPlay);
};
const eventHandler = {
scroll: function () {
window.addEventListener("scroll", eventList.scroll);
},
};
const eventList = {
resize: function (currRes) {
currDevice = currRes;
if (currDevice != prevDevice) {
prevDevice = currDevice;
}
},
setVideo: function () {
let movPlayStatus =
(document.documentElement.classList.contains("ios") &&
document.documentElement.classList.contains("safari")) ||
(document.documentElement.classList.contains("mac") &&
document.documentElement.classList.contains("safari"));
if (!movPlayStatus) {
els.video.src = els.video.getAttribute("data-video-src");
} else {
els.video.src = els.video.getAttribute("data-ios-video-src");
}
els.video.classList.add("is-loaded");
},
setScene: function () {
SCROLLER({
trackElement: els.section,
});
},
scroll: function () {
els.section.scroller.trackAnimation(function () {
if (
els.video.readyState < 4 &&
this.progress >= 0 &&
!els.video.classList.contains("is-loaded")
) {
eventList.setVideo();
}
if (this.progress > 15) {
if (!els.section.classList.contains("is-active"))
els.section.classList.add("is-active");
} else if (this.wheelDirection == "up" && this.progress <= 0) {
if (els.section.classList.contains("is-active"))
els.section.classList.remove("is-active");
}
});
},
videoPlay: function () {
clearTimeout(els.video.playState);
els.video.currentTime = 0;
els.video.play();
els.video.playState = setTimeout(() => {
els.video.currentTime = 0;
els.video.pause();
}, 1500);
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship.features.moveFeature = (function () {
const utils = window.flagship.common.utils;
let els = {};
const init = function () {
els.jumpCta = document.querySelectorAll(".js-jump-cta");
if (!!els.jumpCta) {
setProperty();
bindEvents();
}
};
const setProperty = function () {
for (let i = 0; i < els.jumpCta.length; i++) {
els.jumpCta[i].sectionId = els.jumpCta[i].getAttribute("href");
els.jumpCta[i].section = document.querySelector(
`${els.jumpCta[i].sectionId}`
);
els.jumpCta[i].returnCta =
els.jumpCta[i].section.querySelector(".js-return-cta");
els.jumpCta[i].returnCta.jumpCta = els.jumpCta[i];
els.jumpCta[i].returnCta.section = els.jumpCta[i].section;
}
};
const bindEvents = function () {
eventHandler.click();
eventList.setScene();
eventHandler.scroll();
};
const eventHandler = {
click: function () {
for (let i = 0; i < els.jumpCta.length; i++) {
els.jumpCta[i].addEventListener("click", eventList.clickJumpCta);
els.jumpCta[i].returnCta.addEventListener(
"click",
eventList.clickReturnCta
);
}
},
scroll: function () {
window.addEventListener("scroll", eventList.hideReturnCta);
},
};
const eventList = {
setScene: function () {
for (let i = 0; i < els.jumpCta.length; i++) {
els.jumpCta[i].section.sceneObj = SCROLLER({
trackElement: els.jumpCta[i].section,
useFixed: false,
});
}
},
hideReturnCta: function () {
let _removeClass = function (index, progress) {
if (progress == 0 || progress == 100) {
if (
!els.jumpCta[index].section.classList.contains(
"is-motion-start"
)
)
return;
els.jumpCta[index].section.classList.remove("is-motion-start");
els.jumpCta[index].section.classList.add("is-motion-end");
}
};
for (let i = 0; i < els.jumpCta.length; i++) {
if (els.jumpCta[i].sectionId == "#ai-portrait-50mp") {
_removeClass(i, els.jumpCta[i].section.sceneObj.progress);
} else {
els.jumpCta[i].section.sceneObj.trackAnimation(function () {
_removeClass(i, this.progress);
});
}
}
},
clickJumpCta: function (e) {
e.preventDefault();
let target = this,
sectionTop = target.section.getBoundingClientRect().top,
position = sectionTop + window.pageYOffset - utils.getNavHeight();
if (target.section.classList.contains("is-motion-end")) {
target.section.classList.remove("is-motion-end");
}
setTimeout(function () {
if (!target.section.classList.contains("is-motion-start")) {
target.section.classList.add("is-motion-start");
}
}, 100);
target.returnCta.focus();
setTimeout(function () {
target.returnCta.focus();
}, 300);
window.scrollTo(0, position);
if (target.sectionId == "#interpreter") {
setTimeout(function () {
sectionTop = target.section.getBoundingClientRect().top;
position =
sectionTop + window.pageYOffset - utils.getNavHeight();
target.returnCta.focus();
window.scrollTo(0, position);
}, 500);
}
},
clickReturnCta: function () {
let target = this,
highlightsTop = document
.querySelector("#highlights")
.getBoundingClientRect().top,
highlightsPosition =
highlightsTop + window.pageYOffset - utils.getNavHeight();
window.scrollTo(0, highlightsPosition);
target.jumpCta.focus();
setTimeout(function () {
target.jumpCta.focus();
}, 300);
if (!target.section.classList.contains("is-motion-end")) {
target.section.classList.remove("is-motion-start");
target.section.classList.add("is-motion-end");
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship.features.nightography = (function () {
const utils = window.flagship.common.utils,
resize = window.flagship.common.resize;
let els = {},
prevDevice = null,
currDevice = resize.checkResolution(),
stopScroll = false,
nightographyOn = false,
resetStatus = false,
activeStatus = false;
const init = function () {
els.section = document.querySelector(".features-nightography");
if (!!els.section) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.prevButton = els.section.querySelector(".swiper-button-prev");
els.nextButton = els.section.querySelector(".swiper-button-next");
els.onImageWrap = els.section.querySelector(
".js-nightography-on-image"
);
els.offImageWrap = els.section.querySelector(
".js-nightography-off-image"
);
els.blind = els.section.querySelector(".js-nightography-blind");
els.onImage = els.onImageWrap.querySelector("img");
els.offImage = els.offImageWrap.querySelector("img");
};
const bindEvents = function () {
eventList.setScene();
eventList.scroll();
resize.add(eventList.resize);
eventHandler.click();
eventHandler.scroll();
};
const eventHandler = {
click: function () {
els.prevButton.addEventListener("click", eventList.setButton);
els.nextButton.addEventListener("click", eventList.setButton);
},
scroll: function () {
window.addEventListener("scroll", eventList.scroll);
},
};
const eventList = {
resize: function (currRes) {
currDevice = currRes;
if (currDevice != prevDevice) {
prevDevice = currDevice;
}
},
setScene: function () {
SCROLLER({
trackElement: els.section,
});
},
setImage: function () {
if (!nightographyOn) {
els.offImageWrap.classList.remove("is-active");
els.onImageWrap.classList.add("is-active");
els.blind.innerText = els.onImage.getAttribute("alt");
nightographyOn = true;
} else {
els.onImageWrap.classList.remove("is-active");
els.offImageWrap.classList.add("is-active");
els.blind.innerText = els.offImage.getAttribute("alt");
nightographyOn = false;
}
},
setButton: function (e) {
let eventTarget = !!e ? e.target : els.prevButton;
switch (eventTarget) {
case els.prevButton:
els.nextButton.classList.remove("is-disabled");
els.prevButton.classList.add("is-disabled");
accessibility.arrowButton(els.prevButton, els.nextButton);
break;
case els.nextButton:
els.prevButton.classList.remove("is-disabled");
els.nextButton.classList.add("is-disabled");
accessibility.arrowButton(els.nextButton, els.prevButton);
break;
}
eventList.setImage();
},
scroll: function () {
els.section.scroller.trackAnimation(function () {
switch (this.wheelDirection) {
case "up":
resetStatus = this.progress <= 0;
activeStatus = this.progress <= 48 && this.progress > 0;
break;
case "down":
resetStatus = this.progress >= 90;
activeStatus = this.progress > 42 && this.progress < 90;
break;
}
if (resetStatus && stopScroll) eventList.resetScroll();
if (activeStatus && !stopScroll) eventList.activeScroll();
});
},
resetScroll: function () {
stopScroll = false;
nightographyOn = true;
if (nightographyOn) eventList.setButton();
},
activeScroll: function () {
stopScroll = true;
if (!nightographyOn) eventList.setImage();
},
};
const accessibility = {
arrowButton: function (onTarget, offTarget) {
utils.onAccessibility(onTarget);
utils.offAccessibility(offTarget);
setTimeout(() => {
if (!resetStatus && onTarget.classList.contains("is-disabled"))
offTarget.focus();
}, 300);
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship.features.photoAssist = (function () {
const utils = window.flagship.common.utils,
resize = flagship.common.resize;
let els = {};
let currDevice = resize.checkResolution();
const isRtl = document.documentElement.classList.contains("rtl");
const isLowBand =
document.documentElement.classList.contains("low_network");
const init = function () {
els.section = document.querySelector(".features-photo-assist");
els.videos = els.section.querySelectorAll(".common-video__video");
if (!!els.section && !!els.videos) {
setElements();
bindEvents();
}
};
const setElements = function () {
els.swiperContainer = els.section.querySelector(
".common-carousel__container"
);
};
const bindEvents = function () {
eventHandler.load();
eventHandler.scroll();
};
const eventHandler = {
load: function () {
eventList.setScene();
eventList.setVideoType();
eventList.scroll();
els.swiperContainer.swiper.on("slideChange", eventList.slideChange);
els.swiperContainer.swiper.on(
"transitionEnd",
eventList.transitionEnd
);
},
scroll: function () {
window.addEventListener("scroll", eventList.scroll);
},
};
const eventList = {
setMedia: function (swiper, index) {
let isIndex =
index + 1 > swiper.slides.length - 1
? swiper.slides.length - 1
: index + 1;
let videoLength = swiper.el.querySelectorAll("video").length - 1;
let imageLength = swiper.el.querySelectorAll("img").length - 1;
let videoloadComplateLength =
swiper.el.querySelectorAll(".is-video-load-complete").length - 1;
let imageloadComplateLength =
swiper.el.querySelectorAll(".is-img-load-complete").length - 1;
let nextVideo = swiper.slides[isIndex].querySelector("video");
let nextImage = swiper.slides[isIndex].querySelector("img");
if (videoloadComplateLength != videoLength) {
if (!!nextVideo) {
videoLoader.setResponsiveMedia([nextVideo]);
}
}
if (imageloadComplateLength != imageLength) {
if (!!nextImage) {
imageLoader.setResponsiveMedia([nextImage]);
}
}
},
resetVideo: function (swiper) {
for (let i = 0; i < swiper.slides.length; i++) {
let isVideo = swiper.slides[i].video;
if (!!isVideo && !isVideo.paused) {
isVideo.pause();
isVideo.currentTime = 0;
}
}
},
getCarouselSizeInfo: function (swiper) {
let slideLength = swiper.slides.length;
let slideWidth = swiper.slides[0].clientWidth;
let slideMargin = parseInt(
window.getComputedStyle(swiper.slides[0]).margin.split(" ")[
isRtl ? 3 : 1
]
);
let slideSize = slideWidth + slideMargin;
let maxMoveSize =
slideSize * slideLength -
slideMargin -
swiper.wrapperEl.clientWidth;
let viewWidth = swiper.wrapperEl.clientWidth;
let viewLength = parseInt((viewWidth + slideMargin) / slideSize);
let lastBeforeSize =
slideLength == 2
? 0
: Math.abs(maxMoveSize - slideSize) +
Math.abs(viewWidth - slideWidth);
let isMoveSize = Math.abs(
parseInt(
window
.getComputedStyle(swiper.wrapperEl)
.transform.split(",")[4]
)
);
return {
slideWidth: slideWidth,
slideMargin: slideMargin,
slideSize: slideSize,
maxMoveSize: maxMoveSize,
viewWidth: viewWidth,
viewLength: viewLength,
lastBeforeSize: lastBeforeSize,
isMoveSize: isMoveSize,
};
},
setDimmedSlide: function (swiper) {
if (currDevice != "mobile") {
for (let i = 0; i < swiper.slides.length; i++) {
let dimmedSlide =
swiper.activeIndex > i ||
swiper.activeIndex +
(eventList.getCarouselSizeInfo(swiper).viewLength - 1) <
i;
if (dimmedSlide) {
swiper.slides[i].classList.add(dimmedClass);
} else {
swiper.slides[i].classList.remove(dimmedClass);
}
}
}
},
slideChange: function () {
accessibility.slide(this);
eventList.resetVideo(this);
if (
eventList.getCarouselSizeInfo(this).viewLength > 0 &&
currDevice != "mobile"
)
eventList.setDimmedSlide(this);
if (this.realIndex > 0) eventList.setMedia(this, this.realIndex);
},
transitionEnd: function () {
if (this.slides.length < 3 && currDevice == "mobile") return;
setTimeout(() => {
let carouselInfo = eventList.getCarouselSizeInfo(this);
let lastIndex = this.slides.length - 1;
let lastSlide = this.slides[lastIndex];
let lastBeforeSlide = this.slides[lastIndex - 1];
if (
carouselInfo.isMoveSize > carouselInfo.lastBeforeSize ||
carouselInfo.maxMoveSize == carouselInfo.isMoveSize
) {
eventList.resetVideo(this);
lastSlide.classList.add("is-last-slide");
lastBeforeSlide.classList.add("is-dimmed");
lastSlide.classList.remove("is-dimmed");
utils.offAccessibility(this.slides[lastIndex]);
utils.onAccessibility(this.slides[lastIndex - 1]);
} else if (
lastSlide.classList.contains("is-last-slide") &&
carouselInfo.lastBeforeSize == carouselInfo.isMoveSize
) {
eventList.resetVideo(this);
lastSlide.classList.add("is-dimmed");
lastSlide.classList.remove("is-last-slide");
lastBeforeSlide.classList.remove("is-dimmed");
utils.onAccessibility(this.slides[lastIndex]);
utils.offAccessibility(this.slides[lastIndex - 1]);
}
let swiperActiveSlide = els.section.querySelector(
".swiper-slide-active"
);
let lastSlideActive = els.section.querySelector(".is-last-slide");
let isActiveSlide = !!lastSlideActive
? lastSlideActive
: swiperActiveSlide;
let isActiveVideo = isActiveSlide.querySelector("video");
if (!!isActiveVideo && !isLowBand) isActiveVideo.play();
}, 0);
},
setScene: function () {
els.section.scene = SCROLLER({
trackElement: els.section,
});
},
setVideoType: function () {
if (!!els.videos) {
for (let i = 0; i < els.videos.length; i++) {
els.videos[i].videoHandler.playType = "scrollPlay";
}
}
},
scroll: function () {
els.section.scene.trackAnimation(function () {
let swiperActiveSlide = els.section.querySelector(
".swiper-slide-active"
);
let lastSlideActive = els.section.querySelector(".is-last-slide");
let isActiveSlide = !!lastSlideActive
? lastSlideActive
: swiperActiveSlide;
let isActiveVideo = isActiveSlide.querySelector("video");
if (!!isActiveVideo && !isLowBand)
isActiveVideo.videoHandler.scrollActive(this.progress);
});
},
};
const accessibility = {
slide: function (swiper) {
for (let i = 0; i < swiper.slides.length; i++) {
if (i != swiper.activeIndex) {
utils.onAccessibility(swiper.slides[i]);
} else {
utils.offAccessibility(swiper.slides[i]);
}
}
},
};
return {
init: init,
};
})();
})();
(function () {
window.flagship.features.viewer = (function () {
const utils = window.flagship.common.utils,
resize = window.flagship.common.resize,
common = window.flagship.features.common,
isLow = utils.isLowNetwork();
let els = {},
currDevice = resize.checkResolution();
const init = function () {
els.viewerBtn = document.querySelector(".viewer-btn");
els.section = document.querySelector(".js-colors");
els.popup = document.querySelector(".js-viewer");
if (!!isLow) {
if (!els.viewerBtn) return;
els.currentWrap = els.popup;
setElements();
setProperty();
popupEvents.set();
bindEvents();
} else {
if (!els.section) return;
els.currentWrap = els.section;
setElements();
setProperty();
bindEvents();
}
};
const setElements = function () {
els.wrapEl = document.querySelector("#wrap");
els.contents = document.querySelector("#contents");
// popup
els.popupWrap = els.currentWrap.querySelector(".js-viewer-wrap");
els.popupInner = els.currentWrap.querySelector(".js-viewer-inner");
els.closeCta = els.currentWrap.querySelector(".js-viewer-close");
els.popupContents = els.currentWrap.querySelector(
".js-viewer-contents"
);
// popup-scroll
els.popupScroll = els.currentWrap.querySelector(".js-viewer-scroll");
els.popupScrollUpBtn = els.currentWrap.querySelector(".js-scroll-up");
els.popupScrollDownBtn =
els.currentWrap.querySelector(".js-scroll-down");
// viewer
els.viewerIframe = els.currentWrap.querySelector("iframe");
els.foldBtn = els.currentWrap.querySelector(".js-fold-btn");
els.resetBtn = els.currentWrap.querySelector(".js-reset-btn");
// angle preset
els.presetOpen = els.currentWrap.querySelector(".js-preset-open");
els.presetClose = els.currentWrap.querySelector(".js-preset-close");
els.presetLayer = els.currentWrap.querySelector(".js-preset-layer");
els.angleCta = els.currentWrap.querySelectorAll(".js-angle-cta");
};
const setProperty = function () {
// timeout
els.resizeTimeout = null;
els.resizeInnerTimeout = null;
els.viewerOpener = null;
els.viewerIframe.isHash = false;
els.viewerIframe.isIntroposeReady = false;
els.viewerIframe.isFold = false;
els.viewerIframe.resetTimeout = null;
};
const bindEvents = function () {
eventHandler.load();
eventHandler.message();
eventHandler.click();
resize.add(eventList.resize);
if (!isLow) {
eventList.setScene();
}
};
const eventHandler = {
load: function () {
window.addEventListener("DOMContentLoaded", eventList.load, {
once: true,
});
},
message: function () {
window.addEventListener(
"message",
eventList.receiveV3DMessage,
false
);
},
click: function () {
if (!!isLow) {
els.popupScroll.addEventListener(
"click",
eventList.clickLayerScroll
);
}
els.foldBtn &&
els.foldBtn.addEventListener("click", eventList.clickFold);
els.resetBtn &&
els.resetBtn.addEventListener("click", eventList.clickReset);
els.presetOpen &&
els.presetOpen.addEventListener(
"click",
eventList.openPresetPopup
);
for (let i = 0; i < els.angleCta.length; i++) {
els.angleCta[i].addEventListener("click", eventList.setAngle);
}
els.contents.addEventListener("click", function (e) {
if (
e.target.classList.contains("js-reset-btn") ||
e.target.classList.contains("js-fold-btn") ||
e.target.classList.contains("js-preset-open") ||
e.target.closest(".js-preset-layer")
)
return;
eventList.closePresetPopup();
});
},
scroll: function () {
window.addEventListener("scroll", eventList.runIntroPose);
},
};
const eventList = {
load: function () {
if (!!isLow) {
eventList.innerWrapHeight();
eventList.layerScroll();
}
accessibility.fold.ariaLabel();
eventList.setFoldClass();
},
receiveV3DMessage: 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");
}
}
} 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");
}
}
} else if (e.data == "V3D.state.introPose.ready") {
if (!isLow) {
els.viewerIframe.isIntroposeReady = true;
eventHandler.scroll();
eventList.runIntroPose();
} else {
els.viewerIframe &&
els.viewerIframe.contentWindow.postMessage(
"V3D.introPose.run",
"*"
);
}
} else if (e.data == "V3D.state.localData.ready") {
els.viewerIframe &&
els.viewerIframe.contentWindow.postMessage(
JSON.stringify(V3DLOCALDATA),
"*"
);
} else if (e.data == "V3D.state.actionPose.0") {
els.viewerIframe.isFold = false;
eventList.setFoldClass();
} else if (e.data == "V3D.state.actionPose.1") {
els.viewerIframe.isFold = true;
eventList.setFoldClass();
} else if (e.data == "V3D.event.pointerdown") {
eventList.closePresetPopup();
}
},
resize: function (currRes) {
currDevice = currRes;
if (utils.detector.isTouchDevice && !utils.detector.isIosDevice)
eventList.innerWrapHeight();
eventList.layerScroll();
},
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 () {
eventList.setLayerScroll();
}, 300);
},
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");
}
},
clickLayerScroll: function (e) {
e && e.preventDefault();
if (e.target.matches(".js-scroll-btn")) {
let scrollDown = e.target.classList.contains("js-scroll-down"),
$popupContents = $(els.popupContents);
if (scrollDown) {
$popupContents.stop().animate(
{
scrollTop: $popupContents.scrollTop() + 100,
},
{
duration: 300,
complete: function () {
eventList.updateLayerScroll(true);
},
}
);
} else {
$popupContents.stop().animate(
{
scrollTop: $popupContents.scrollTop() - 100,
},
{
duration: 300,
complete: function () {
eventList.updateLayerScroll(true);
},
}
);
}
}
},
updateLayerScroll: 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");
}
},
setScene: function () {
els.sceneObj = SCROLLER({
trackElement: els.section,
useFixed: false,
});
},
runIntroPose: function () {
els.sceneObj.trackAnimation(function () {
let progress = currDevice.indexOf("mobile") > -1 ? 50 : 30;
if (
this.progress >= progress &&
!!els.viewerIframe.isIntroposeReady
) {
els.viewerIframe &&
els.viewerIframe.contentWindow.postMessage(
"V3D.introPose.run",
"*"
);
window.removeEventListener("scroll", eventList.runIntroPose);
}
});
},
clickFold: function () {
if (!els.viewerIframe.isFold) {
els.viewerIframe.isFold = true;
els.viewerIframe.contentWindow.postMessage("V3D.action", "*");
} else {
els.viewerIframe.isFold = false;
els.viewerIframe.contentWindow.postMessage(
"V3D.action.reverse",
"*"
);
}
accessibility.fold.ariaLabel();
eventList.setFoldClass();
accessibility.fold.tagging();
},
clickReset: function () {
let viewerSrc = els.viewerIframe.getAttribute("src");
els.viewerIframe.setAttribute("src", `${viewerSrc}#reset=1`);
clearTimeout(els.viewerIframe.resetTimeout);
els.viewerIframe.resetTimeout = setTimeout(function () {
viewerSrc = viewerSrc.split("#reset=1")[0];
els.viewerIframe.setAttribute("src", viewerSrc);
}, 300);
},
openPresetPopup: function () {
if (!els.presetLayer.classList.contains("is-active")) {
els.presetOpen.classList.add("is-open");
els.presetLayer.classList.add("is-active");
els.presetOpen.setAttribute("aria-expanded", true);
els.presetClose.focus();
} else {
eventList.closePresetPopup();
}
els.presetClose &&
els.presetClose.addEventListener(
"click",
eventList.closePresetPopup
);
},
closePresetPopup: function (e) {
if (els.presetLayer.classList.contains("is-active")) {
els.presetOpen.classList.remove("is-open");
els.presetLayer.classList.remove("is-active");
els.presetOpen.setAttribute("aria-expanded", false);
if (e && e.target.classList.contains("js-preset-close")) {
els.presetOpen.focus();
}
}
},
setFoldClass: function () {
if (!els.viewerIframe.isFold) {
if (els.foldBtn.classList.contains("is-folded"))
els.foldBtn.classList.remove("is-folded");
els.foldBtn.classList.add("is-fold");
} else {
if (els.foldBtn.classList.contains("is-fold"))
els.foldBtn.classList.remove("is-fold");
els.foldBtn.classList.add("is-folded");
}
},
setAngle: function () {
let target = this,
targetAngle = target.innerText.toLowerCase();
if (targetAngle == "front") {
els.viewerIframe.contentWindow.postMessage(
"V3D.setPosition.angleX: 0,angleY: 0",
"*"
);
} else if (targetAngle == "back") {
els.viewerIframe.contentWindow.postMessage(
"V3D.setPosition.angleX: 0,angleY: 3.141592653589793",
"*"
);
} else if (targetAngle == "top") {
els.viewerIframe.contentWindow.postMessage(
"V3D.setPosition.angleX: 1.5707963267948966,angleY: 3.141592653589793",
"*"
);
} else if (targetAngle == "bottom") {
els.viewerIframe.contentWindow.postMessage(
"V3D.setPosition.angleX: -1.5707963267948966,angleY: 0",
"*"
);
} else if (targetAngle == "left") {
els.viewerIframe.contentWindow.postMessage(
"V3D.setPosition.angleX: 0,angleY: 1.5707963267948966",
"*"
);
} else if (targetAngle == "right") {
els.viewerIframe.contentWindow.postMessage(
"V3D.setPosition.angleX: 0,angleY: -1.5707963267948966",
"*"
);
}
accessibility.selected(target);
},
};
const popupEvents = {
set: function () {
utils.layerPopup({
layerPopup: els.popup,
layerPopupClass: ".js-viewer",
openerEvent: {
element: els.viewerBtn,
},
closeCtas: [els.closeCta],
dimmed: els.popupWrap,
moveTarget: document.documentElement,
contents: els.contents,
show: {
start: function (target) {
els.popup.classList.add("is-init");
popupEvents.show(target.openerCta);
},
end: function () {
if (utils.detector.isIosDevice)
els.popup.style.display = "block";
els.popup.classList.add("is-open");
},
},
hide: {
start: function () {
els.popup.classList.remove("is-open");
},
end: function () {
setTimeout(function () {
els.popup.classList.remove("is-init");
}, 300);
popupEvents.hide();
},
},
});
},
show: function (viewerOpener) {
if (viewerOpener.classList.contains("viewer-btn")) {
els.viewerIframe.isHash = false;
els.viewerOpener = viewerOpener;
} else {
els.viewerIframe.isHash = true;
els.viewerOpener = els.viewerBtn;
}
els.viewerIframe.setAttribute("src", common.getViewerUrl());
},
hide: function () {
els.viewerIframe.setAttribute("src", "about:blank");
if (els.viewerIframe.isHash) {
setTimeout(function () {
els.viewerOpener.focus();
}, 300);
}
},
};
const accessibility = {
fold: {
ariaLabel: function () {
if (!els.viewerIframe.isFold) {
els.foldBtn.setAttribute(
"aria-label",
`${els.foldBtn.getAttribute("data-unfolded")}`
);
} else {
els.foldBtn.setAttribute(
"aria-label",
`${els.foldBtn.getAttribute("data-folded")}`
);
}
},
tagging: function () {
let dataOmni = els.foldBtn.getAttribute("data-omni"),
gaLa = els.foldBtn.getAttribute("ga-la");
if (!els.viewerIframe.isFold) {
els.foldBtn.setAttribute(
"data-omni",
dataOmni.replace("folded", "unfolded")
);
els.foldBtn.setAttribute(
"ga-la",
gaLa.replace("folded", "unfolded")
);
} else {
els.foldBtn.setAttribute(
"data-omni",
dataOmni.replace("unfolded", "folded")
);
els.foldBtn.setAttribute(
"ga-la",
gaLa.replace("unfolded", "folded")
);
}
},
},
selected: function (target) {
for (let i = 0; i < els.angleCta.length; i++) {
els.angleCta[i].removeAttribute("title");
if (els.angleCta[i].classList.contains("is-selected")) {
els.angleCta[i].classList.remove("is-selected");
}
}
if (!target.classList.contains("is-selected")) {
target.classList.add("is-selected");
}
if (typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI) {
target.setAttribute("title", LOCAL_VARI.selected);
} else {
target.setAttribute("title", "Selected");
}
},
};
return {
init: init,
};
})();
})();
flagship.features.initialize = (function () {
window.flagship.common.resize.bindEvent();
const init = function () {
flagship.features.clickToVideo.init();
flagship.features.headline.init();
flagship.features.howtoPopup.init();
flagship.features.oneColumnCarousel.init();
flagship.features.scrollVideo.init();
flagship.features.threeColumnCarousel.init();
flagship.features.aiOverview.init();
flagship.features.battery.init();
flagship.features.cameraSpec.init();
flagship.features.faq.init();
flagship.features.flexWindow.init();
flagship.features.highlightsZone.init();
flagship.features.interactiveSuggested.init();
flagship.features.interactiveInterpreter.init();
flagship.features.interactive.init();
flagship.features.lowLightPortrait.init();
flagship.features.moveFeature.init();
flagship.features.nightography.init();
flagship.features.photoAssist.init();
flagship.features.viewer.init();
};
return {
init: init,
};
})();
flagship.features.initialize.init();
});
Product Registration
Quick and easy product registration.. Receive up-to-date personalized 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
Subtype
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.