/* eslint-disable */ (function () { let source, isMicroSite, activationStatus, enterpriseNumber; let secondIframeLoaded = false, onceClickedOnSecFrame = false, windowIframeBody; try { if ( window && window.parent && window.parent.__INITIAL_STATE__ && window.parent.__INITIAL_STATE__.homeReducer && window.parent.__INITIAL_STATE__.homeReducer.data ) { let homeReducerData = window.parent.__INITIAL_STATE__.homeReducer.data; isMicroSite = true; //ask microsite enterpriseNumber = homeReducerData.enterpriseInfo ? homeReducerData.enterpriseInfo.businessNumber : homeReducerData.businessNumber; source = 6; activationStatus = homeReducerData.activationStatus; //var businessName = homeReducerData.name; } } catch (e) { log(e); } if (!document.getElementsByClassName) { document.getElementsByClassName = function (className) { return this.querySelectorAll("." + className); }; Element.prototype.getElementsByClassName = document.getElementsByClassName; } const CONSIDER_MIN_WIDTH = { "https://grabercustomstructures.com" : true } // This file is served raw (not bundled), so it can't import src/Utils/i18n.js or the // src/locales/*.json files - these titles are kept in sync with "chatLauncherTitle" / // "liveChatWindowTitle" in those locale files by hand. Only en/es/fr/de are supported; // LOCALE_ALIASES/normalizeLocale here mirror src/Utils/i18n.js for the same legacy codes. const IFRAME_TITLES = { en: { launcher: "Chat launcher", window: "Live chat window" }, es: { launcher: "Abrir chat", window: "Ventana de chat en vivo" }, fr: { launcher: "Ouvrir le chat", window: "Fenêtre de chat en direct" }, de: { launcher: "Chat öffnen", window: "Live-Chat-Fenster" }, }; const LOCALE_ALIASES = { sp: "es" }; function getIframeTitle(kind) { const rawLocale = (window.locale || "en").toLowerCase().split(/[-_]/)[0]; const normalizedLocale = LOCALE_ALIASES[rawLocale] || rawLocale; const titles = IFRAME_TITLES[normalizedLocale] || IFRAME_TITLES.en; return titles[kind]; } let bfi; let totalWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; if (CONSIDER_MIN_WIDTH[window?.origin]) { let widths = [ window.innerWidth, document.documentElement?.clientWidth, document.body?.clientWidth ].filter(Boolean); // Removes undefined or falsy values totalWidth = Math.min(...widths); } let totalHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; let tries = 1; let extensionInterval; let env; let windowIframe; window.be_webchat = null; function playBubbleSound() { let context, source = "https://d3cnqzq0ivprch.cloudfront.net/prod/media/notification-sound.mp3"; try { window.AudioContext = window.AudioContext || window.webkitAudioContext; context = new AudioContext(); let request = new XMLHttpRequest(); request.open("GET", source, true); request.responseType = "arraybuffer"; request.onload = function () { context.decodeAudioData( request.response, function (buffer) { let source = context.createBufferSource(); source.buffer = buffer; source.connect(context.destination); source.start(0); context.resume(); }, function (e) { console.log("error", e); } ); }; request.send(); } catch (e) { if (/Edge\/|Trident\/|MSIE /.test(navigator.userAgent)) { let audio = document.createElement("audio"); audio.autoplay = true; audio.src = source; audio.play(); } } } function checkIsAgentPreview (isPreview, widgetAgent) { return (isPreview === 1 || isPreview === "1") && widgetAgent.length > 0; }; function getGoodBot(type) { const goodBots = [ "facebookexternalhit", "Facebot", "Googlebot", "Google", "LinkedInBot", ]; const ua = navigator.userAgent; let isGoodBots = false; let botName = ""; for (let i = 0; i < goodBots.length; i++) { const bot = goodBots[i]; if (ua.indexOf(bot) > -1) { isGoodBots = true; botName = bot.toLowerCase(); break; } } if (type == "isGoodBot") { return isGoodBots; } else { botName = botName != "" ? botName : "facebook"; botName = botName.indexOf("face") > -1 ? "facebook" : botName; botName = botName.indexOf("linked") > -1 ? "linked-in" : botName; return botName; } } function initIframe() { let bfdiv = document.getElementById("bf-revz-widget-" + window.wid) || document.getElementById("bf-revz-widget-" + "0" + window.wid); if (!bfdiv) { tries++; if (tries > 50) { return false; } setTimeout(initIframe, 500); return; } if (!bfdiv.firstChild) { bfdiv.appendChild(bfi); } else if (bfdiv.firstChild && bfdiv.firstChild.nodeName != "IFRAME") { bfdiv.insertBefore(bfi, bfdiv.firstChild); } } let winHeight = 100; let winWidth = "431px"; if (window.innerHeight < 100) { winHeight = window.innerHeight; } if (CONSIDER_MIN_WIDTH[window?.origin]) { if (totalWidth < 500) { winWidth = "100%"; } } else { if (window.innerWidth < 500) { winWidth = "100%"; } } const openWebchatFromOutside = (objFromClient) => { const firstIframe = document.getElementById("bewebchat"); const secondIframe = document.getElementById("window-iframe"); firstIframe.contentWindow.postMessage( { type: "post-message-from-outside", clientObj: objFromClient, beWebchatWindowObj: JSON.stringify(window.be_webchat), isWidgetAlignLeft: window.isWidgetAlignLeft, mFullView: window.mFullView, isPreview: window.isPreview, widgetAgent: JSON.stringify(window.widgetAgent), draftSessionId: window.draftSessionId, workFlowId: window.workFlowId }, "*" ); secondIframe.contentWindow.postMessage( { type: "post-message-from-outside-chat", clientObj: objFromClient, beWebchatWindowObj: JSON.stringify(window.be_webchat), isWidgetAlignLeft: window.isWidgetAlignLeft, locale: window.locale, mFullView: window.mFullView, isPreview: window.isPreview, widgetAgent: JSON.stringify(window.widgetAgent), draftSessionId: window.draftSessionId, workFlowId: window.workFlowId }, "*" ); }; window.onmessage = function (e) { if (e.data && e.data.split) { const isAgentPreview = checkIsAgentPreview(window.isPreview, window.widgetAgent); let dataReceivedSplit = e.data.split("***"); let dataReceived = dataReceivedSplit[0]; let widthReceived = dataReceivedSplit[1]; if (totalWidth < 960) { widthReceived = "drawer"; } if (dataReceived == "icon-clicked") { if (!secondIframeLoaded) { if (!onceClickedOnSecFrame) { loadNewIframe(); } } document.getElementById("bewebchat").style.height = isAgentPreview ? "70px" : "80px"; document.getElementById("bewebchat").style.width = isAgentPreview ? "200px" : "70px"; if (widthReceived == "floating") { document .getElementById("window-iframe") .setAttribute( "style", `-webkit-overflow-scrolling: touch; visibility: visible; opacity: 1; ${window.isWidgetAlignLeft ? "left:20px" : "right:20px"}; bottom:${isAgentPreview ? "0" : "20px"}; position:fixed; overflow:hidden; width:${winWidth}; z-index:9999998; border: 0; height: ${(isAgentPreview ? 90 : winHeight) + "%"}; ` ); } else { document .getElementById("window-iframe") .setAttribute( "style", `-webkit-overflow-scrolling: touch; visibility: visible; opacity: 1; z-index: 9999999; ${window.isWidgetAlignLeft ? "left:0px" : "right:0px"}; bottom:0px; position:fixed; overflow:hidden; width:${winWidth}; height: 100%; border: 0;` ); } const widgetWrapper = document.getElementById("window-iframe").parentElement; widgetWrapper.setAttribute("role", "dialog"); widgetWrapper.setAttribute("aria-label", getIframeTitle("window")); window.be_webchat = { ...window.be_webchat, windowOpened: true, }; if(isAgentPreview) { window.dispatchEvent(new CustomEvent("webchat:opened", { detail: true })); } } else if (dataReceived == "icon-closed") { let wid = "20px"; if (totalWidth < 960) { wid = "20px"; } let element = document.getElementById("window-iframe"); element.style.height = 0; element.parentElement.removeAttribute("role"); element.parentElement.removeAttribute("aria-label"); secondIframeLoaded = false; window.be_webchat = { ...window.be_webchat, windowOpened: false, }; if(isAgentPreview){ window.dispatchEvent(new CustomEvent("webchat:closed", { detail: false })); } } else if (dataReceived == "getwidth") { e.source.postMessage( { width: totalWidth, height: totalHeight, src: "birdeye", updateValFromParent: window.update, }, "*" ); } else if (dataReceived == "show-bubble") { bfi.setAttribute( "style", `-webkit-overflow-scrolling: touch; visibility: ${isAgentPreview ? "hidden" : "visible"}; opacity: 1; z-index: 9999999; ${window.isWidgetAlignLeft ? "left:20px" : "right:20px"}; bottom:20px; position:fixed; overflow:hidden; ${isAgentPreview ? "width:200px" : "width:340px"}; ${isAgentPreview ? "height:70px" : "height:227px"}; border: 0;` ); } else if (dataReceived == "hide-bubble") { bfi.setAttribute( "style", `-webkit-overflow-scrolling: touch; visibility: ${isAgentPreview ? "hidden" : "visible"}; opacity: 1; z-index: 9999999; ${window.isWidgetAlignLeft ? "left:20px" : "right:20px"}; bottom:20px; position:fixed; overflow:hidden; ${isAgentPreview ? "width:200px" : "width:70px"}; ${isAgentPreview ? "height:70px" : "height:80px"}; border: 0;` ); } else if (dataReceived == "get-parent-url") { if (!window.be_webchat) { window.be_webchat = { open: openWebchatFromOutside, }; } e.source.postMessage( { type: "put-parent-url", url: document.location.href, hostname: document.location.hostname, href: document.location.origin, src: "birdeye", isMicroSite: isMicroSite ? isMicroSite : false, frmMicrosite: frmMicrosite ? frmMicrosite : false, isWidgetAlignLeft: window.isWidgetAlignLeft ? window.isWidgetAlignLeft : false, mFullView: window.mFullView ? window.mFullView : false, enterpriseNumber: isMicroSite ? enterpriseNumber : null, width: totalWidth, height: totalHeight, src: "birdeye", updateValFromParent: window.update, bizDataResp: window.bizDataResp, beWebchatWindowObj: JSON.stringify(window.be_webchat), updatedBizData: true, locale: window.locale, isPreview: window.isPreview ? window.isPreview : 0, widgetAgent: window.widgetAgent ? window.widgetAgent : "", draftSessionId: window.draftSessionId, workFlowId: window.workFlowId }, "*" ); } else if ( dataReceived == "push-datalayer" && window && typeof window.dataLayer !== "undefined" ) { window.dataLayer.push(JSON.parse(dataReceivedSplit[1])); } else if ( dataReceived == "push-avbDatalayer" && window && typeof window.avbData !== "undefined" ) { window.avbData.push(JSON.parse(dataReceivedSplit[1])); } else if (dataReceived == "push-analytics") { try { try { const config = JSON.parse(dataReceivedSplit[1]); switch (config.googleAnalyticsVersion) { case "UA": if (ga && typeof ga == "function") { const nonInteractionObj = config.nonInteraction ? { nonInteraction: 1 } : null; ga( "send", "event", "webchat", config.action, config.actionLabel, nonInteractionObj ); } else { console.warn( "Webchat Analytics ReferenceError: ga is not defined" ); } break; case "GST": if (gtag && typeof gtag == "function") { const nonInteractionObj = config.nonInteraction ? { non_interaction: true } : {}; gtag("event", config.action, { event_category: "webchat", event_label: config.actionLabel.trim(), value: 1, ...nonInteractionObj, }); } else { console.warn( "Webchat Analytics ReferenceError: gtag is not defined" ); } break; } } catch (e) { console.warn("Webchat Analytics", e); } } catch (e) { console.warn("Webchat Analytics", e); } } else if (dataReceived == "be-custom-event-fire") { const customEventData = JSON.parse(dataReceivedSplit[1]); const be_event = new CustomEvent("beWebchatCustomEvent", { detail: customEventData, }); window.parent.document.dispatchEvent(be_event); } else if (dataReceived == "bubble-icon-sound") { playBubbleSound(); } } }; if (document.readyState === "complete") { extensionInterval = setInterval(function () { env = window.envObj ? window.envObj : {}; const bizResp = window.bizDataResp ? window.bizDataResp : {}; const locationListLen = bizResp ? bizResp["businessLocations"] && bizResp["businessLocations"].length : 0; if (Object.keys(env).length && locationListLen > 0) { getFirstIframeAndInit(env); } }, 100); } else { if (window.addEventListener) { // DOM2 standard window.addEventListener("load", windowOnloadHandler, false); } else if (window.attachEvent) { // Microsoft's precursor to it, IE8 and earlier window.attachEvent("onload", windowOnloadHandler); } else { // Some pre-1999 browser window.onload = windowOnloadHandler; } function windowOnloadHandler() { env = window.envObj ? window.envObj : {}; const bizResp = window.bizDataResp ? window.bizDataResp : {}; const locationListLen = bizResp ? bizResp["businessLocations"] && bizResp["businessLocations"].length : 0; if (locationListLen > 0) { getFirstIframeAndInit(env); } } } function getFirstIframeAndInit(env) { extensionInterval && clearInterval(extensionInterval); const isAgentPreview = checkIsAgentPreview(window.isPreview, window.widgetAgent); bfi = document.createElement("iframe"); bfi.name = "bfiframe"; bfi.id = "bewebchat"; bfi.loading = "lazy"; bfi.title = getIframeTitle("launcher"); bfi.src = env.protocol + env.domain + `/getBubbleContent?update=${window.update}&source=${window.source}&bNum=${window.bNum}&apikey=${window.apikey}&widgetApiVersion=${window.widgetApiVersion}&isWidgetAlignLeft=${window.isWidgetAlignLeft}&mFullView=${window.mFullView}&isPreview=${window.isPreview}&widgetAgent=${window.widgetAgent}&draftSessionId=${draftSessionId}${window.workFlowId ? `&workFlowId=${window.workFlowId}` : ""}`; bfi.setAttribute( "style", `-webkit-overflow-scrolling: touch; visibility: ${isAgentPreview ? "hidden" : "visible"}; opacity: 1; z-index: 9999999; ${window.isWidgetAlignLeft ? "left:20px" : "right:20px"}; bottom:20px; position:fixed; overflow:hidden; ${isAgentPreview ? "width:200px" : "width:70px"}; ${isAgentPreview ? "height:70px" : "height:80px"}; border:0` ); initIframe(); bfi.onload = loadNewIframe.bind(this); const firstIframeEl = document.getElementById("bewebchat"); firstIframeEl.style.colorScheme = "light"; } function appendSecondIframe() { secondIframeLoaded = true; onceClickedOnSecFrame = true; let bfdiv = document.getElementById("bf-revz-widget-" + window.wid) || document.getElementById("bf-revz-widget-" + "0" + window.wid); // Keep the launcher outside the chat window's dialog semantics. const widgetWrapper = document.createElement("div"); widgetWrapper.appendChild(windowIframe); bfdiv.appendChild(widgetWrapper); const bodyEl = bfdiv.parentElement; windowIframeBody = document.querySelector("#window-iframe") .contentDocument ? document.querySelector("#window-iframe").contentDocument.body : null; bodyEl.addEventListener("click", function (e) { let emojiEl = windowIframeBody && windowIframeBody.querySelector(".emoji-wrap"); if ( emojiEl && e.target !== document.querySelector("#window-iframe") ) { emojiEl.classList.add("hide-emoji"); emojiEl.style.display = "none"; } }); const secondIframeEl = document.getElementById("window-iframe"); secondIframeEl.style.colorScheme = "light"; } function loadNewIframe() { windowIframe = document.createElement("iframe"); windowIframe.name = "wciframe"; windowIframe.id = "window-iframe"; windowIframe.loading = "lazy"; windowIframe.title = getIframeTitle("window"); windowIframe.src = env.protocol + env.domain + `/getChatWindowContent?emailRequired=${window.emailRequired}&bNum=${window.bNum}&mobileRequired=${window.mobileRequired}&defaultCountryCode=${window.defaultCountryCode}&apikey=${window.apikey}&widgetApiVersion=${window.widgetApiVersion}&isMicroSite=${window.isMicroSite}&activationStatus=${window.activationStatus}&isWidgetAlignLeft=${window.isWidgetAlignLeft}&mFullView=${window.mFullView}&isPreview=${window.isPreview}&widgetAgent=${window.widgetAgent}&draftSessionId=${draftSessionId}${window.workFlowId ? `&workFlowId=${window.workFlowId}` : ""}`; windowIframe.setAttribute( "style", `-webkit-overflow-scrolling: touch; visibility: visible; opacity: 1; ${window.isWidgetAlignLeft ? "left:20px" : "right:20px"}; bottom:20px; position:fixed; overflow:hidden; width:346px; z-index:9999998; border: 0; height: 0px;` ); appendSecondIframe(); } })(); var wid = 1574093254; var update = 0; var soundOff = 1; var envObj = {"domain":"webchat.birdeye.com","protocol":"https://","isWidgetAlignLeft":false,"mFullView":false,"isPreview":"0","widgetAgent":"","workFlowId":null,"sargamWsBaseUrl":null,"isWebchatSocketEnabled":false}; var emailRequired = 0; var isPreview = 0; var widgetAgent = ""; var defaultCountryCode = "0"; var mobileRequired = 1; var apikey = "05f9da15de60583f0b16c1fabb984ea814d1e1dbc52dcdf3"; var widgetApiVersion = 2; var bNum = 291319; var update = 0; var isMicroSite = false; var frmMicrosite = false; var isWidgetAlignLeft = false; var mFullView = false; var activationStatus = false; var source = false; var bizDataResp = {"accountType":3,"businessOpen":false,"locale":null,"fields":null,"isWebchatSocketEnabled":false,"allLocationDisabled":0,"apiKey":null,"autoDetectLocationEnabled":false,"autoReplyTxt":"Thank you for contacting Biker's Edge! Someone from our team will reach out shortly. \nWe will be closed 2/7-2/10 for our annual shop trip. Responses will be delayed during this time. ","bannerColor":"#ffffff","bannerTextColor":"#000000","btnColor":"#bf4d34","btnTxtColor":"#FFFFFF","businessDomain":null,"businessId":173410381072653,"businessLocations":[{"address1":"232 Main St","businessAlias":"Biker's Edge - Kaysville, UT","businessId":173410381072653,"businessName":"Biker's Edge","businessSMSPhoneNumber":"(801) 544-5300","chatEnabled":true,"city":"Kaysville","countryCode":"US","emailId":"zach@bebikes.com","latitude":41.03919,"location":"Kaysville, UT","locationName":"Biker's Edge","longitude":-111.93805,"name":"Biker's Edge","phone":"(801) 544-5300","shortBusinessId":1438953,"state":"UT","zipcode":"84037"}],"businessName":"Biker's Edge - Kaysville, UT","businessSMSPhoneNumber":null,"chatBubble":"Have a question? We are here to help!","chatIcon":"dotted","chatIconColor":"#bf4d34","chatIconForeColor":"#FFFFFF","chatIconValue":null,"chatTheme":"floating","chatbotHours":null,"customFields":null,"disclaimer":"By sending this message, you expressly consent to receive communications from us. You may opt out at any time.","disclaimerLinks":[],"disclaimerSelectionStatus":1,"emailMandatory":false,"enableChatBubble":1,"enableChatBubbleSound":0,"enableGoogleAnalytics":false,"enablePrechatForm":1,"enableReplyInBusinessHr":1,"enableReplyPostBusinessHr":1,"enabled":1,"externalId":291319,"fallbackMessage":null,"googleAnalyticsVersion":"","googleTrackingId":"","headerDescription":"Questions? We are here to help! Send us a message below.","headerHeadline":"Hi there!","installed":1,"isChatbotEnabled":false,"isLiveChatEnabled":true,"liveChatOfflineClosingMessageBody":"If you need anything else, please text us at 801-544-5300.","liveChatOfflineClosingMessageHeader":"Text us!","liveChatOfflineTextMessage":"It looks like you caught us after hours. If you want to continue this conversation in this text thread, just respond here, and we'll get back to you during business hours. ","liveChatOfflineWelcomeMessage":"Thanks for contacting Biker's Edge. We're currently closed, but as soon as the Bike Nerds are back in the shop, we'll get back to you. We are open Mon-Sat. and closed on Sundays.\n","liveChatOnlineClosingMessageBody":"If you need anything else, please text us at 801-544-5300.","liveChatOnlineClosingMessageHeader":"Text Us!","liveChatOnlineTextMessage":"It looks like you left the chat window. If you'd like to continue this conversation, just respond here.\n\n","liveChatOnlineWelcomeMessage":"Thanks for contacting Biker's Edge. A Bike Nerd will reply soon.","locationHierarchy":null,"microsite":0,"mobileView":"fullView","onlineClosingMessageBody":null,"onlineWelcomeMessageHeader":null,"otpEnabled":false,"popupInterval":null,"prechatFormInsideBusinessHours":1,"prechatFormOutsideBusinessHours":1,"replyTextPostBusinessHr":"Thanks for contacting Biker’s Edge. You’ve reached us outside of our business hours. We’ll get back to you when we’re back in the shop.\nWe will be closed 2/7-2/10 for our annual shop trip. Responses will be delayed during this time. ","robinInsideBusinessHours":null,"robinOutsideBusinessHours":null,"smb":false,"statusUpdateOn":"2026-11-13T03:01:17.000Z","supportedCountryCodes":["US","PR","VI","MX","CA"],"teams":null,"thankyouMsgDescription":null,"thankyouMsgHeadline":null,"timerDisplay":1,"timerSeconds":180,"userProfile":[{"userProfileImage":"","userProfileName":""}],"webChatOfflineClosingMessageBody":"We will follow up with you soon. You can always text us at [Business Phone].","webChatOfflineClosingMessageHeader":"We will text you !","webChatOnlineClosingMessageBody":"We will follow up with you soon. You can always text us at [Business Phone] ","webChatOnlineClosingMessageHeader":"We will text you !","websites":["https%3A//bebikes.com"],"widgetAgent":[],"widgetConfigId":291319,"widgetName":null,"bubbleBGColor":"#FFFFFF","sargamWsBaseUrl":""}; var locale = "en"; var draftSessionId = null; var workFlowId = null;