1 2<!DOCTYPE html> 3<html class="no-js" lang="en"> 4 <head> 5 <title>About Us | Martel Electronics Since 1957</title> 6 <link rel="dns-prefetch preconnect" href="https://cdn11.bigcommerce.com/s-m0o7bk" crossorigin><link rel="dns-prefetch preconnect" href="https://fonts.googleapis.com/" crossorigin><link rel="dns-prefetch preconnect" href="https://fonts.gstatic.com/" crossorigin> 7 <meta name="keywords" content=" "><meta name="description" content="Martel Electronics is the premeire source for dcitation and transcription equipment. We are the first choice for lawyers and Government. "><link rel='canonical' href='https://martelelectronics.com/about/' /><meta name='platform' content='bigcommerce.stencil' /> 8 9 10 11 <link href="https://cdn11.bigcommerce.com/s-m0o7bk/product_images/Martel%20Fav.png?t=1592514199" rel="shortcut icon"> 12 <meta name="viewport" content="width=device-width, initial-scale=1"> 13 14
14<script nonce=""> 15 document.documentElement.className = document.documentElement.className.replace('no-js', 'js'); 16 </script>
16 17 18
18<script nonce=""> 19 function browserSupportsAllFeatures() { 20 return window.Promise 21 && window.fetch 22 && window.URL 23 && window.URLSearchParams 24 && window.WeakMap 25 // object-fit support 26 && ('objectFit' in document.documentElement.style); 27 } 28 29 function loadScript(src) { 30 var js = document.createElement('script'); 31 js.src = src; 32 js.nonce = ''; 33 js.onerror = function () { 34 console.error('Failed to load polyfill script ' + src); 35 }; 36 document.head.appendChild(js); 37 } 38 39 if (!browserSupportsAllFeatures()) { 40 loadScript('https://cdn11.bigcommerce.com/s-m0o7bk/stencil/dcff4430-4df6-013e-0d67-161549aa1a0e/e/cb041bf0-7fe1-013f-b400-5291dc9d1300/dist/theme-bundle.polyfills.js'); 41 } 42</script>
42 43
43<script nonce="">window.consentManagerTranslations = `{"locale":"en","locales":{"consent_manager.data_collection_warning":"en","consent_manager.accept_all_cookies":"en","consent_manager.gdpr_settings":"en","consent_manager.data_collection_preferences":"en","consent_manager.manage_data_collection_preferences":"en","consent_manager.use_data_by_cookies":"en","consent_manager.data_categories_table":"en","consent_manager.allow":"en","consent_manager.accept":"en","consent_manager.deny":"en","consent_manager.dismiss":"en","consent_manager.reject_all":"en","consent_manager.category":"en","consent_manager.purpose":"en","consent_manager.functional_category":"en","consent_manager.functional_purpose":"en","consent_manager.analytics_category":"en","consent_manager.analytics_purpose":"en","consent_manager.targeting_category":"en","consent_manager.advertising_category":"en","consent_manager.advertising_purpose":"en","consent_manager.essential_category":"en","consent_manager.esential_purpose":"en","consent_manager.yes":"en","consent_manager.no":"en","consent_manager.not_available":"en","consent_manager.cancel":"en","consent_manager.save":"en","consent_manager.back_to_preferences":"en","consent_manager.close_without_changes":"en","consent_manager.unsaved_changes":"en","consent_manager.by_using":"en","consent_manager.agree_on_data_collection":"en","consent_manager.change_preferences":"en","consent_manager.cancel_dialog_title":"en","consent_manager.privacy_policy":"en","consent_manager.allow_category_tracking":"en","consent_manager.disallow_category_tracking":"en"},"translations":{"consent_manager.data_collection_warning":"We use cookies (and other similar technologies) to collect data to improve your shopping experience.","consent_manager.accept_all_cookies":"Accept All Cookies","consent_manager.gdpr_settings":"Settings","consent_manager.data_collection_preferences":"Website Data Collection Preferences","consent_manager.manage_data_collection_preferences":"Manage Website Data Collection Preferences","consent_manager.use_data_by_cookies":" uses data collected by cookies and JavaScript libraries to improve your shopping experience.","consent_manager.data_categories_table":"The table below outlines how we use this data by category. To opt out of a category of data collection, select 'No' and save your preferences.","consent_manager.allow":"Allow","consent_manager.accept":"Accept","consent_manager.deny":"Deny","consent_manager.dismiss":"Dismiss","consent_manager.reject_all":"Reject all","consent_manager.category":"Category","consent_manager.purpose":"Purpose","consent_manager.functional_category":"Functional","consent_manager.functional_purpose":"Enables enhanced functionality, such as videos and live chat. If you do not allow these, then some or all of these functions may not work properly.","consent_manager.analytics_category":"Analytics","consent_manager.analytics_purpose":"Provide statistical information on site usage, e.g., web analytics so we can improve this website over time.","consent_manager.targeting_category":"Targeting","consent_manager.advertising_category":"Advertising","consent_manager.advertising_purpose":"Used to create profiles or personalize content to enhance your shopping experience.","consent_manager.essential_category":"Essential","consent_manager.esential_purpose":"Essential for the site and any requested services to work, but do not perform any additional or secondary function.","consent_manager.yes":"Yes","consent_manager.no":"No","consent_manager.not_available":"N/A","consent_manager.cancel":"Cancel","consent_manager.save":"Save","consent_manager.back_to_preferences":"Back to Preferences","consent_manager.close_without_changes":"You have unsaved changes to your data collection preferences. Are you sure you want to close without saving?","consent_manager.unsaved_changes":"You have unsaved changes","consent_manager.by_using":"By using our website, you're agreeing to our","consent_manager.agree_on_data_collection":"By using our website, you're agreeing to the collection of data as described in our ","consent_manager.change_preferences":"You can change your preferences at any time","consent_manager.cancel_dialog_title":"Are you sure you want to cancel?","consent_manager.privacy_policy":"Privacy Policy","consent_manager.allow_category_tracking":"Allow [CATEGORY_NAME] tracking","consent_manager.disallow_category_tracking":"Disallow [CATEGORY_NAME] tracking"}}`;</script>
43 44 45
45<script nonce=""> 46 window.lazySizesConfig = window.lazySizesConfig || {}; 47 window.lazySizesConfig.loadMode = 1; 48 </script>
48 49
49<script async src="https://cdn11.bigcommerce.com/s-m0o7bk/stencil/dcff4430-4df6-013e-0d67-161549aa1a0e/e/cb041bf0-7fe1-013f-b400-5291dc9d1300/dist/theme-bundle.head_async.js" nonce=""></script>
49 50 51
51<script nonce=""> 52 (function() { 53 var el = document.createElement('head'); 54 el.innerHTML = '<link href="https://fonts.googleapis.com/css?family=Roboto:700,400&display=swap" rel="stylesheet">'.replace('rel="stylesheet"', 'rel="preload" as="style" onload="this.onload=null;this.rel=\'stylesheet\'"'); 55 el.children && el.children[0] && document.head.appendChild(el.children[0]); 56 })(); 57 </script>
57 58 <noscript><link href="https://fonts.googleapis.com/css?family=Roboto:700,400&display=swap" rel="stylesheet"></noscript> 59 60 <link data-stencil-stylesheet href="https://cdn11.bigcommerce.com/s-m0o7bk/stencil/dcff4430-4df6-013e-0d67-161549aa1a0e/e/cb041bf0-7fe1-013f-b400-5291dc9d1300/css/theme-7f1539f0-5baf-013f-58a6-6e8db226ea8e.css" rel="stylesheet"> 61 62
62<script nonce=""> 63 window.lazySizesConfig.loadHidden = false; 64 window.lazySizesConfig.expand = 0; 65 </script>
65 66
vendor: 1,210 bytes, line 66
66<script nonce="">!function(n){"use strict";n.loadCSS||(n.loadCSS=function(){});var o=loadCSS.relpreload={};if(o.support=function(){var e;try{e=n.document.createElement("link").relList.supports("preload")}catch(t){e=!1}return function(){return e}}(),o.bindMediaToggle=function(t){var e=t.media||"all";function a(){t.addEventListener?t.removeEventListener("load",a):t.attachEvent&&t.detachEvent("onload",a),t.setAttribute("onload",null),t.media=e}t.addEventListener?t.addEventListener("load",a):t.attachEvent&&t.attachEvent("onload",a),setTimeout(function(){t.rel="stylesheet",t.media="only x"}),setTimeout(a,3e3)},o.poly=function(){if(!o.support())for(var t=n.document.getElementsByTagName("link"),e=0;e<t.length;e++){var a=t[e];"preload"!==a.rel||"style"!==a.getAttribute("as")||a.getAttribute("data-loadcss")||(a.setAttribute("data-loadcss",!0),o.bindMediaToggle(a))}},!o.support()){o.poly();var t=n.setInterval(o.poly,500);n.addEventListener?n.addEventListener("load",function(){o.poly(),n.clearInterval(t)}):n.attachEvent&&n.attachEvent("onload",function(){o.poly(),n.clearInterval(t)})}"undefined"!=typeof exports?exports.loadCSS=loadCSS:n.loadCSS=loadCSS}("undefined"!=typeof global?global:this);</script>
66 <!-- Start Tracking Code for analytics_googleanalytics4 --> 67
68<script data-cfasync="false" src="https://cdn11.bigcommerce.com/shared/js/google_analytics4_bodl_subscribers-358423becf5d870b8b603a81de597c10f6bc7699.js" integrity="sha256-gtOfJ3Avc1pEE/hx6SKj/96cca7JvfqllWA9FTQJyfI=" crossorigin="anonymous"></script>
vendor: 1 bytes, line 68
68
69<script data-cfasync="false"> 70 (function () { 71 window.dataLayer = window.dataLayer || []; 72 73 function gtag(){ 74 dataLayer.push(arguments); 75 } 76 77 function initGA4(event) { 78 function setupGtag() { 79 function configureGtag() { 80 gtag('js', new Date()); 81 gtag('set', 'developer_id.dMjk3Nj', true); 82 gtag('config', 'G-RV08FZST7N'); 83 } 84 85 var script = document.createElement('script'); 86 87 script.src = 'https://www.googletagmanager.com/gtag/js?id=G-RV08FZST7N'; 88 script.async = true; 89 script.onload = configureGtag; 90 91 document.head.appendChild(script); 92 } 93 94 setupGtag(); 95 96 if (typeof subscribeOnBodlEvents === 'function') { 97 subscribeOnBodlEvents('G-RV08FZST7N', true); 98 } 99 100 window.removeEventListener(event.type, initGA4); 101 } 102 103 gtag('consent', 'default', {"ad_storage":"denied","ad_user_data":"denied","ad_personalization":"denied","analytics_storage":"denied","functionality_storage":"denied"}) 104 105 106 var eventName = document.readyState === 'complete' ? 'consentScriptsLoaded' : 'DOMContentLoaded'; 107 window.addEventListener(eventName, initGA4, false); 108 })() 109</script>
109 110 111<!-- End Tracking Code for analytics_googleanalytics4 --> 112 113
114<script type="text/javascript" src="https://checkout-sdk.bigcommerce.com/v1/loader.js" defer ></script>
vendor: 1 bytes, line 114
114
115<script>window.consentManagerStoreConfig = function () { return {"storeName":"Martel Electronics","privacyPolicyUrl":"https:\/\/martelelectronics.com\/privacy-policy\/","writeKey":null,"improvedConsentManagerEnabled":true,"AlwaysIncludeScriptsWithConsentTag":true}; };</script>
vendor: 1 bytes, line 115
115
116<script type="text/javascript" src="https://cdn11.bigcommerce.com/shared/js/bodl-consent-32a446f5a681a22e8af09a4ab8f4e4b6deda6487.js" integrity="sha256-uitfaufFdsW9ELiQEkeOgsYedtr3BuhVvA4WaPhIZZY=" crossorigin="anonymous" defer></script>
vendor: 1 bytes, line 116
116
117<script type="text/javascript" src="https://cdn11.bigcommerce.com/shared/js/storefront/consent-manager-config-d53a4773861141b0624d84967b4c0a379d13a5fe.js" defer></script>
vendor: 1 bytes, line 117
117
118<script type="text/javascript" src="https://cdn11.bigcommerce.com/shared/js/storefront/consent-manager-08633fe15aba542118c03f6d45457262fa9fac88.js" defer></script>
vendor: 1 bytes, line 118
118
119<script type="text/javascript"> 120var BCData = {}; 121</script>
121 122<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 122-123
122 123<script async src="https://www.googletagmanager.com/gtag/js?id=
123G-RV08FZST7N
vendor: 13 bytes, lines 123-124
123"> 124</script>
125<script> 126
vendor: 134 bytes, lines 126-130
126window.dataLayer = window.dataLayer || []; 127 function gtag(){dataLayer.push(arguments);} 128 gtag('js', new Date()); 129 130 gtag('config', '
130G-RV08FZST7N
vendor: 4 bytes, line 130
130');
131</script>
131<script> 132(function () { 133 "use strict"; 134 135 var STYLE_ID = "martel-header-gap-fix-v3-style"; 136 var ROOT_CLASS = "martel-header-gap-fix-v3-active"; 137 138 function addStyle() { 139 if (document.getElementById(STYLE_ID)) { 140 return; 141 } 142 143 var css = "" 144 + "html." + ROOT_CLASS + "," 145 + "html." + ROOT_CLASS + " body{" 146 + "margin-top:0!important;" 147 + "padding-top:0!important;" 148 + "}" 149 + "html." + ROOT_CLASS + " .header," 150 + "html." + ROOT_CLASS + " header.header," 151 + "html." + ROOT_CLASS + " .header-bottom," 152 + "html." + ROOT_CLASS + " .navPages-container," 153 + "html." + ROOT_CLASS + " .navPages{" 154 + "margin-bottom:0!important;" 155 + "padding-bottom:0!important;" 156 + "}" 157 + "html." + ROOT_CLASS + " body>.body," 158 + "html." + ROOT_CLASS + " .body," 159 + "html." + ROOT_CLASS + " main.body," 160 + "html." + ROOT_CLASS + " main[role='main']," 161 + "html." + ROOT_CLASS + " #main-content{" 162 + "margin-top:0!important;" 163 + "padding-top:0!important;" 164 + "}" 165 + "html." + ROOT_CLASS + " .body>.container," 166 + "html." + ROOT_CLASS + " main.body>.container," 167 + "html." + ROOT_CLASS + " main[role='main']>.container," 168 + "html." + ROOT_CLASS + " #main-content>.container," 169 + "html." + ROOT_CLASS + " .container.page," 170 + "html." + ROOT_CLASS + " .page{" 171 + "margin-top:0!important;" 172 + "padding-top:0!important;" 173 + "}" 174 + "html." + ROOT_CLASS + " .breadcrumbs," 175 + "html." + ROOT_CLASS + " .page-heading{" 176 + "margin-top:0!important;" 177 + "padding-top:0!important;" 178 + "}" 179 + "html." + ROOT_CLASS + " [data-content-region='header_top']:empty," 180 + "html." + ROOT_CLASS + " [data-content-region='header_bottom']:empty," 181 + "html." + ROOT_CLASS + " [data-content-region='home_below_menu']:empty," 182 + "html." + ROOT_CLASS + " [data-content-region='home_below_carousel']:empty," 183 + "html." + ROOT_CLASS + " [data-content-region='page_builder_content']:empty{" 184 + "display:none!important;" 185 + "height:0!important;" 186 + "min-height:0!important;" 187 + "max-height:0!important;" 188 + "margin:0!important;" 189 + "padding:0!important;" 190 + "border:0!important;" 191 + "overflow:hidden!important;" 192 + "}"; 193 194 var style = document.createElement("style"); 195 style.id = STYLE_ID; 196 style.type = "text/css"; 197 style.appendChild(document.createTextNode(css)); 198 document.head.appendChild(style); 199 } 200 201 function setImportant(el, property, value) { 202 if (!el) { 203 return; 204 } 205 206 try { 207 el.style.setProperty(property, value, "important"); 208 } catch (e) {} 209 } 210 211 function hasRealContent(el) { 212 if (!el) { 213 return true; 214 } 215 216 var text = (el.textContent || "").replace(/\s|\u00a0/g, ""); 217 218 if (text.length > 0) { 219 return true; 220 } 221 222 return !!el.querySelector("img,svg,picture,video,iframe,canvas,object,embed,input,button,select,textarea,a[href]"); 223 } 224 225 function collapseElement(el) { 226 setImportant(el, "display", "none"); 227 setImportant(el, "height", "0"); 228 setImportant(el, "min-height", "0"); 229 setImportant(el, "max-height", "0"); 230 setImportant(el, "margin", "0"); 231 setImportant(el, "padding", "0"); 232 setImportant(el, "border", "0"); 233 setImportant(el, "overflow", "hidden"); 234 } 235 236 function collapseIfEmpty(el) { 237 if (!el || hasRealContent(el)) { 238 return; 239 } 240 241 collapseElement(el); 242 } 243 244 function collapseEmptyRegions() { 245 var selectors = [ 246 "[data-content-region='header_top']", 247 "[data-content-region='header_bottom']", 248 "[data-content-region='home_below_menu']", 249 "[data-content-region='home_below_carousel']", 250 "[data-content-region='page_builder_content']", 251 ".advTopHeader", 252 ".adv-top-header", 253 ".afterHeader", 254 ".after-header", 255 ".topBanner", 256 ".top-banner", 257 ".header-top-banner", 258 ".header-bottom-banner" 259 ]; 260 261 document.querySelectorAll(selectors.join(",")).forEach(collapseIfEmpty); 262 } 263 264 function tightenKnownThemeSpacing() { 265 var selectors = [ 266 "html", 267 "body", 268 "header.header", 269 ".header", 270 ".header-bottom", 271 ".navPages-container", 272 ".navPages", 273 "body > .body", 274 ".body", 275 "main.body", 276 "main[role='main']", 277 "#main-content", 278 ".body > .container", 279 "main.body > .container", 280 "main[role='main'] > .container", 281 "#main-content > .container", 282 ".container.page", 283 ".page", 284 ".page-content", 285 ".breadcrumbs", 286 ".page-heading" 287 ]; 288
289 document.querySelectorAll(selectors.join(",")).forEach(function (el) { 290 setImportant(el, "margin-top", "0"); 291 setImportant(el, "padding-top", "0"); 292 }); 293 294 document.querySelectorAll("header.header,.header,.header-bottom,.navPages-container,.navPages").forEach(function (el) { 295 setImportant(el, "margin-bottom", "0"); 296 setImportant(el, "padding-bottom", "0"); 297 }); 298 } 299 300 function getHeaderBottom() { 301 var headerCandidates = [ 302 ".navPages-container", 303 ".navPages", 304 ".header-bottom", 305 "header.header", 306 ".header" 307 ]; 308 309 var bottom = 0; 310 311 headerCandidates.forEach(function (selector) { 312 document.querySelectorAll(selector).forEach(function (el) { 313 var rect = el.getBoundingClientRect(); 314 315 if (rect && rect.height > 10) { 316 bottom = Math.max(bottom, rect.bottom + window.pageYOffset); 317 } 318 }); 319 }); 320 321 return bottom; 322 } 323 324 function getFirstContentElement() { 325 var candidates = [ 326 ".breadcrumbs", 327 ".page-heading", 328 ".page-content", 329 ".body > .container", 330 "main.body > .container", 331 "main[role='main'] > .container", 332 "#main-content > .container", 333 ".body", 334 "main.body", 335 "main[role='main']", 336 "#main-content" 337 ]; 338 339 for (var i = 0; i < candidates.length; i++) { 340 var list = document.querySelectorAll(candidates[i]); 341 342 for (var j = 0; j < list.length; j++) { 343 var el = list[j]; 344 var rect = el.getBoundingClientRect(); 345 346 if (rect && rect.height > 5 && rect.top > 0) { 347 return el; 348 } 349 } 350 } 351 352 return null; 353 } 354 355 function pullContentUpToHeader() { 356 var headerBottom = getHeaderBottom(); 357 var firstContent = getFirstContentElement(); 358 359 if (!headerBottom || !firstContent) { 360 return; 361 } 362 363 var contentTop = firstContent.getBoundingClientRect().top + window.pageYOffset; 364 var gap = Math.round(contentTop - headerBottom); 365 366 if (gap > 8 && gap < 140) { 367 var target = document.querySelector("body > .body") || 368 document.querySelector("main.body") || 369 document.querySelector("main[role='main']") || 370 document.querySelector("#main-content") || 371 firstContent; 372 373 setImportant(target, "margin-top", "-" + gap + "px"); 374 setImportant(target, "padding-top", "0"); 375 } 376 } 377 378 function runFix() { 379 document.documentElement.classList.add(ROOT_CLASS); 380 addStyle(); 381 collapseEmptyRegions(); 382 tightenKnownThemeSpacing(); 383 pullContentUpToHeader(); 384 } 385 386 runFix(); 387 388 if (document.readyState === "loading") { 389 document.addEventListener("DOMContentLoaded", runFix); 390 } 391 392 window.addEventListener("load", runFix); 393 window.addEventListener("resize", runFix); 394 395 setTimeout(runFix, 100); 396 setTimeout(runFix, 300); 397 setTimeout(runFix, 750); 398 setTimeout(runFix, 1500); 399})(); 400</script>
400 401
401<script data-cfasync="false" src="https://microapps.bigcommerce.com/bodl-events/1.9.4/index.js" integrity="sha256-Y0tDj1qsyiKBRibKllwV0ZJ1aFlGYaHHGl/oUFoXJ7Y=" nonce="" crossorigin="anonymous"></script>
401 402
402<script data-cfasync="false" nonce=""> 403 404 (function() { 405 function decodeBase64(base64) { 406 const text = atob(base64); 407 const length = text.length; 408 const bytes = new Uint8Array(length); 409 for (let i = 0; i < length; i++) { 410 bytes[i] = text.charCodeAt(i); 411 } 412 const decoder = new TextDecoder(); 413 return decoder.decode(bytes); 414 } 415 window.bodl = JSON.parse(decodeBase64("eyJzZXNzaW9uIjp7ImlkIjoiMzRjYWI5Y2EtZTBlOC00NGVhLWIzMGYtNzViYmM5MzdkZmMyIiwiZmlyc3RfdG91Y2hfdGltZXN0YW1wIjoiMjAyNi0wOS0yNVQwNToyMTo0OCIsImZpcnN0X3RvdWNoX3JlZmVycmFsX3VybCI6IiIsImZpcnN0X3RvdWNoX3JlcXVlc3RfdXJsIjoiaHR0cHM6Ly9tYXJ0ZWxlbGVjdHJvbmljcy5jb20vYWJvdXQvIn0sInNob3BwZXIiOnsidmlzaXRvcl9pZCI6IiIsImN1c3RvbWVyX2lkIjpudWxsLCJlbWFpbCI6bnVsbCwiZmlyc3RfbmFtZSI6bnVsbCwibGFzdF9uYW1lIjpudWxsfSwiZGF0YV9jb25zZW50Ijp7ImZ1bmN0aW9uYWwiOmZhbHNlLCJhbmFseXRpY3MiOmZhbHNlLCJhZHZlcnRpc2luZyI6ZmFsc2V9LCJldmVudHMiOlt7ImJvZGxfdjFfY29uc2VudF9sb2FkZWQiOnsiZXZlbnRfaWQiOiIzN2E3NDIwNS1lN2M5LTQwYjYtOGJkYy01YTA3ZDBiNmQ2YWUiLCJhZHZlcnRpc2luZyI6ZmFsc2UsImFuYWx5dGljcyI6ZmFsc2UsImZ1bmN0aW9uYWwiOmZhbHNlfX1dfQ==")); 416 })() 417 418 </script>
418 419
420<script nonce=""> 421(function () { 422 var xmlHttp = new XMLHttpRequest(); 423 424 xmlHttp.open('POST', 'https://bes.gcp.data.bigcommerce.com/nobot'); 425 xmlHttp.setRequestHeader('Content-Type', 'application/json'); 426 xmlHttp.send('{"store_id":"500022","timezone_offset":"-7.0","timestamp":"2026-09-25T05:21:48.34599300Z","visit_id":"2c1f524c-4cda-4b98-a3e6-6a256fcc2f6f","channel_id":1}'); 427})(); 428</script>
428 429 430 431 432 <!-- snippet location htmlhead --> 433 434 435 </head> 436 <body class="csscolumns papaSupermarket-layout--default 437 papaSupermarket-style--modern 438 papaSupermarket-pageType--page 439 papaSupermarket-page--pages-page 440 emthemesModez-productUniform 441 442 papaSupermarket--showAllCategoriesMenu 443 papaSupermarket--showSubcategoriesMenu 444 445 446 447 448 449 " id="topOfPage"> 450 451 452 <!-- snippet location header --> 453 <svg data-src="https://cdn11.bigcommerce.com/s-m0o7bk/stencil/dcff4430-4df6-013e-0d67-161549aa1a0e/e/cb041bf0-7fe1-013f-b400-5291dc9d1300/img/icon-sprite.svg" class="icons-svg-sprite"></svg> 454 455 <div class="banners" data-banner-location="top"> 456</div> 457 <div data-emthemesmodez-remote-banner="emthemesModezBannersBlockAdvTopHeader"></div> 458<header class="header" role="banner" > 459 <a href="#" class="mobileMenu-toggle" data-mobile-menu-toggle="menu"> 460 <span class="mobileMenu-toggleIcon">Toggle menu</span> 461 </a> 462 463 464 <div class="emthemesModez-header-userSection emthemesModez-header-userSection--logo-left"> 465 <div class="container"> 466 <div class="header-logo header-logo--left"> 467 <a href="https://martelelectronics.com/" data-instantload='{"page":"home"}'> 468 <img class="header-logo-image-unknown-size" src="https://cdn11.bigcommerce.com/s-m0o7bk/images/stencil/original/download_1783128589__55035.original.png" alt="Martel Electronics Since 1957" title="Martel Electronics Since 1957"> 469</a> 470 </div> 471 472 <nav class="navUser"> 473 474 <ul class="navUser-section navUser-section--alt"> 475 <li class="navUser-item navUser-item--recentlyViewed"> 476 <a class="navUser-action navUser-action--recentlyViewed" href="#recently-viewed" data-dropdown="recently-viewed-dropdown" data-options="align:right" title="Recently Viewed" style="display:none"> 477 <i class="icon"><svg><use href="#icon-recent-list" /></svg></i> 478 <span class="navUser-item-recentlyViewedLabel"><span class='firstword'>Recently </span>Viewed</span> 479 </a> 480 <div class="dropdown-menu" id="recently-viewed-dropdown" data-dropdown-content aria-hidden="true"></div> 481 </li> 482 483 484 485 486 <li class="navUser-item navUser-item--account"> 487 <i class="icon"><svg><use href="#icon-user" /></svg></i> 488 <span class="navUser-actions"> 489 <span class="navUser-subtitle"> 490 <a class="navUser-action" href="https://martelelectronics.com/login.php"> 491 <span class="navUser-item-loginLabel">Sign In</span> 492 </a> 493 </span> 494 <a class="navUser-action" href="https://martelelectronics.com/login.php?action=create_account">Register</a> 495 </span> 496 </li> 497 498 <li class="navUser-item navUser-item--cart"> 499 <a 500 class="navUser-action navUser-action--cart" 501 data-cart-preview 502 data-dropdown="cart-preview-dropdown" 503 data-options="align:right" 504 href="https://martelelectronics.com/cart.php" 505 title="Cart"> 506 <i class="icon"><svg><use href="#icon-cart" /></svg></i> 507 <span class="_rows"> 508 <span class="countPill cart-quantity"></span> 509 <span class="navUser-item-cartLabel">Cart</span> 510 </span> 511 </a> 512 513 <div class="dropdown-menu" id="cart-preview-dropdown" data-dropdown-content aria-hidden="true"></div> 514 </li> 515 </ul> 516</nav> 517 518 <div class="emthemesModez-quickSearch" data-prevent-quick-search-close> 519 <!-- snippet location forms_search --> 520 <form class="form" action="https://martelelectronics.com/search.php"> 521 <fieldset class="form-fieldset"> 522 <div class="form-field"> 523 <label class="is-srOnly" for="search_query">Search</label> 524 <div class="form-prefixPostfix wrap"> 525 <input class="form-input" data-search-quick name="search_query" id="search_query" data-error-message="Search f
525ield cannot be empty." placeholder="Search the store" autocomplete="off"> 526 <input type="submit" class="button button--primary form-prefixPostfix-button--postfix" value="Search" /> 527 </div> 528 </div> 529 </fieldset> 530 </form> 531</div> </div> 532 </div> 533 534 <div class="navPages-container" id="menu" data-menu> 535 <div class="container"> 536 <nav class="navPages"> 537 538 <div class="emthemesModez-navPages-verticalCategories-container"> 539 <a class="navPages-action has-subMenu" role="none">Categories</a> 540 <div class="emthemesModez-verticalCategories is-open " id="emthemesModez-verticalCategories" data-emthemesmodez-fix-height="emthemesModez-section1-container"> 541 <ul class="navPages-list navPages-list--categories"> 542 543 <li class="navPages-item"> 544 <a class="navPages-action" href="https://martelelectronics.com/court-reporter-laptop/" data-instantload >Elite Court Reporter Laptop </a> 545 </li> 546 <li class="navPages-item"> 547 <a class="navPages-action" href="https://martelelectronics.com/voice-writers-vox-dragon-laptops/" data-instantload >Voice Writers Vox Dragon Laptops</a> 548 </li> 549 <li class="navPages-item"> 550 <a class="navPages-action" href="https://martelelectronics.com/digital-court-reporter-5000-recorders/" data-instantload >Digital Court Reporter 5000 Recorders</a> 551 </li> 552 <li class="navPages-item"> 553 <a class="navPages-action" href="https://martelelectronics.com/court-reporter-microphones/" data-instantload >Court Reporter Microphones</a> 554 </li> 555 <li class="navPages-item"> 556 <a class="navPages-action" href="https://martelelectronics.com/court-reporter-digital-recorders-1/" data-instantload >Court Reporter Digital Recorders</a> 557 </li> 558 <li class="navPages-item"> 559 <a class="navPages-action has-subMenu " href="https://martelelectronics.com/court-reporting-recorders-microphones-equipment/" 560 data-instantload 561 562 data-collapsible="navPages-19" 563 data-collapsible-disabled-breakpoint="medium" 564 data-collapsible-disabled-state="open" 565 data-collapsible-enabled-state="closed"> 566 Court Reporting Recorders & Microphones <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use href="#icon-caret-down" /></svg></i> 567</a> 568<div class="navPage-subMenu 569 " id="navPages-19" aria-hidden="true" tabindex="-1"> 570 <ul class="navPage-subMenu-list"> 571 <li class="navPage-subMenu-item"> 572 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/court-reporting-recorders-microphones-equipment/" data-instantload>All Court Reporting Recorders & Microphones</a> 573 </li> 574 <li class="navPage-subMenu-item"> 575 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/court-reporter-steno-writer-microphones/" data-instantload >Court Reporter Steno Writer Microphones</a> 576 </li> 577 <li class="navPage-subMenu-item"> 578 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/stenomask-equipment-packages/" data-instantload >Stenomask Equipment Packages</a> 579 </li> 580 <li class="navPage-subMenu-item"> 581 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/courtroom-recorders/" data-instantload >Courtroom Recorders</a> 582 </li> 583 <li class="navPage-subMenu-item"> 584 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/dm246-courtroom-recorder-system-for-courts/" data-instantload >DM246 Courtroom Recorder System for Courts</a> 585 </li> 586 <li class="navPage-subMenu-item"> 587 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/stenomask-microphones-for-court-reporters/" data-instantload >Stenomask Microphones for Court Reporters</a> 588 </li> 589 <li class="navPage-subMenu-item"> 590 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/court-reporter-wireless-microphones/" data-instantload >Court Reporter Wireless Microphones</a> 591 </li> 592 </ul> 593</div> 594 </li> 595 <li class="navPages-item"> 596 <a class="navPages-action" href="https://martelelectronics.com/stenomask-microphones/" data-instantload >Stenomask | Microphones</a> 597 </li> 598 <li class="navPages-item"> 599 <a class="navPages-action" href="https://martelelectronics.com/transcription/" data-instantload >Transcription kits </a> 600 </li> 601 <li class="navPages-item"> 602 <a class="navPages-action" href="https://martelelectronics.com/zoom-court-reporting/" data-instantload >Zoom Court Reporting</a> 603 </li> 604 <li class="navPages-item"> 605 <a class="navPages-action" href="https://martelelectronics.com/hybrid-deposition-audio-setup-for-court-reporters/" data-instantload >
605Hybrid Deposition Audio Setup for Court Reporters</a> 606 </li> 607 <li class="navPages-item"> 608 <a class="navPages-action has-subMenu " href="https://martelelectronics.com/voice-recorders/" 609 data-instantload 610 611 data-collapsible="navPages-40" 612 data-collapsible-disabled-breakpoint="medium" 613 data-collapsible-disabled-state="open" 614 data-collapsible-enabled-state="closed"> 615 Voice Recorders <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use href="#icon-caret-down" /></svg></i> 616</a> 617<div class="navPage-subMenu 618 " id="navPages-40" aria-hidden="true" tabindex="-1"> 619 <ul class="navPage-subMenu-list"> 620 <li class="navPage-subMenu-item"> 621 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/voice-recorders/" data-instantload>All Voice Recorders</a> 622 </li> 623 <li class="navPage-subMenu-item"> 624 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/conference-recorders/" data-instantload >Conference Recorders</a> 625 </li> 626 <li class="navPage-subMenu-item"> 627 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/dictation-machine-/" data-instantload >Dictation Machine </a> 628 </li> 629 <li class="navPage-subMenu-item"> 630 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/professional-dictation-recorders/" data-instantload >Professional Dictation Recorders</a> 631 </li> 632 <li class="navPage-subMenu-item"> 633 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/consumer-dictation-recorders-1/" data-instantload >Consumer Dictation Recorders</a> 634 </li> 635 <li class="navPage-subMenu-item"> 636 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/legal-dictation-recorders/" data-instantload >Legal Dictation Recorders</a> 637 </li> 638 <li class="navPage-subMenu-item"> 639 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/court-reporter-digital-recorders/" data-instantload >Court Reporter Digital Recorders</a> 640 </li> 641 <li class="navPage-subMenu-item"> 642 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/dictaphone-1/" data-instantload >Dictaphone</a> 643 </li> 644 </ul> 645</div> 646 </li> 647 <li class="navPages-item"> 648 <a class="navPages-action" href="https://martelelectronics.com/zoom-multiple-microphones/" data-instantload >Zoom Multiple Microphones </a> 649 </li> 650 <li class="navPages-item"> 651 <a class="navPages-action" href="https://martelelectronics.com/courtroom-recording-software/" data-instantload >Courtroom Recording Software </a> 652 </li> 653 <li class="navPages-item"> 654 <a class="navPages-action has-subMenu " href="https://martelelectronics.com/dictation-recorders/" 655 data-instantload 656 657 data-collapsible="navPages-3" 658 data-collapsible-disabled-breakpoint="medium" 659 data-collapsible-disabled-state="open" 660 data-collapsible-enabled-state="closed"> 661 Dictation Recorders <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use href="#icon-caret-down" /></svg></i> 662</a> 663<div class="navPage-subMenu 664 " id="navPages-3" aria-hidden="true" tabindex="-1"> 665 <ul class="navPage-subMenu-list"> 666 <li class="navPage-subMenu-item"> 667 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/dictation-recorders/" data-instantload>All Dictation Recorders</a> 668 </li> 669 <li class="navPage-subMenu-item"> 670 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/dictation-transcription-packages/" data-instantload >Dictation & Transcription Packages</a> 671 </li> 672 <li class="navPage-subMenu-item"> 673 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/dictation-machines/" data-instantload >Dictation Machines </a> 674 </li> 675 <li class="navPage-subMenu-item"> 676 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/consumer-dictation-recorders/" data-instantload >Consumer Dictation Recorders</a> 677 </li> 678 <li class="navPage-subMenu-item"> 679 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/dictation-recorder-management-software/" data-instantload >Dictation Recorder Management Software</a> 680 </li> 681 <li class="navPage-subMenu-item"> 682 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/dictation-microphones/" data-instantload >Dictation Microphones</a> 683 </li> 684 </ul> 685</div> 686 </li> 687 <li class="navPages-item"> 688 <a class="navPages-action" href="https://martelelectronics.com/police-car-cameras/" data-instantload >Police Car Cameras Systems</a> 689 </li> 690 <li class="navPages-item"> 691 <a class="navPages-action" href="https://martelelectronics.com/police-body-camera-packages/" data-instantload >Police Body Camera Packages</a> 692 </li> 693 <li class="navPages-item"> 694 <a class="navPages-action has-subMenu " href="https://martelelectronics.com/accessories/" 695 data-instantload 696 697 data-collapsible="navPages-21" 698 data-collapsible-disabled-breakpoint="medium" 699 data-collapsible-disabled-state="open" 700 data-collapsible-enabled-state="closed"> 701 Accessories <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use href="#icon-caret-down" /></svg></i> 702</a> 703<div class="navPage-subMenu 704 " id="navPages-21" aria-hidden="true" tabindex="-1"> 705 <ul class="navPage-subMenu-list"> 706 <li class="navPage-subMenu-item"> 707 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/accessories/" data-instantload>All Accessories</a> 708 </li> 709 <li class="navPage-subMenu-item"> 710 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/headsets/" data-instantload >Headsets</a> 711 </li> 712 <li class="navPage-subMenu-item"> 713 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/transcription-foot-pedals/" data-instantload >Transcription Foot Pedals</a> 714 </li> 715 <li class="navPage-subMenu-item"> 716 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/ac-power-cables/" data-instantload >AC Power Cables</a> 717 </li> 718 <li class="navPage-subMenu-item"> 719 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/wireless-microphone-systems-for-courts-meetings/" data-instantload >Wireless Microphone Systems for Courts/Meetings </a> 720 </li> 721 <li class="navPage-subMenu-item"> 722 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/docking-cradles-for-dictation-machines-recorders/" data-instantload >Docking Cradles for Dictation Machines Recorders</a> 723 </li> 724 <li class="navPage-subMenu-item"> 725 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/telephone-recording-microphones-h
725ookups/" data-instantload >Telephone Recording Microphones & Hookups</a> 726 </li> 727 <li class="navPage-subMenu-item"> 728 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/memory-cards/" data-instantload >Memory Cards</a> 729 </li> 730 <li class="navPage-subMenu-item"> 731 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/cables/" data-instantload >Cables</a> 732 </li> 733 <li class="navPage-subMenu-item"> 734 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/batteries/" data-instantload >Batteries</a> 735 </li> 736 <li class="navPage-subMenu-item"> 737 <a class="navPage-subMenu-action navPages-action" href="https://martelelectronics.com/bonus/" data-instantload >Bonus </a> 738 </li> 739 <li class="navPage-subMenu-item"> 740 <a 741 class="navPage-subMenu-action navPages-action has-subMenu" 742 href="https://martelelectronics.com/learning/" 743 data-instantload 744 745 data-collapsible="navPages-64" 746 data-collapsible-disabled-breakpoint="medium" 747 data-collapsible-disabled-state="open" 748 data-collapsible-enabled-state="closed"> 749 Learning <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use href="#icon-caret-down" /></svg></i> 750 </a> 751 <ul class="navPage-childList" id="navPages-64"> 752 <li class="navPage-childList-item"> 753 <a class="navPage-childList-action navPages-action" href="https://martelelectronics.com/learning/" data-instantload>All Learning </a> 754 </li> 755 <li class="navPage-childList-item"> 756 <a class="navPage-childList-action navPages-action" data-instantload href="https://martelelectronics.com/other-items/" >Other Items</a> 757 </li> 758 </ul> 759 </li> 760 </ul> 761</div> 762 </li> 763 764 </ul> 765 </div> 766 </div> 767 768 769 <ul class="navPages-list"> 770 <li class="navPages-item"> 771 772 <a class="navPages-action" data-instantload href="https://martelelectronics.com/warranty/">warranty</a> 773 774 </li> 775 <li class="navPages-item"> 776 777 <a class="navPages-action" data-instantload href="https://martelelectronics.com/help/">Help</a> 778 779 780 </li> 781 <li class="navPages-item"> 782 783 <a class="navPages-action" data-instantload href="https://martelelectronics.com/about/">About</a> 784 785 786 </li> 787 <li class="navPages-item"> 788 789 <a class="navPages-action" data-instantload href="https://martelelectronics.com/dc7/">DC7</a> 790 791 792 </li> 793 <li class="navPages-item"> 794 795 <a class="navPages-action has-subMenu" href="https://martelelectronics.com/purchase-order/" 796 data-instantload 797 data-collapsible="navPages-page-4" 798 data-collapsible-disabled-breakpoint="medium" 799 data-collapsible-disabled-state="open" 800 data-collapsible-enabled-state="closed"> 801 Purchase Order <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use href="#icon-caret-down" /></svg></i> 802 </a> 803 <div class="navPage-subMenu navPage-subMenu--standard" id="navPages-page-4" aria-hidden="true" tabindex="-1"> 804 <ul class="navPage-subMenu-list"> 805 <li class="navPage-subMenu-item"> 806 <a class="navPage-subMenu-action navPages-action" data-instantload href="https://martelelectronics.com/purchase-order/">Purchase Order </a> 807 </li> 808 <li class="navPage-subMenu-item"> 809 <a class="navPage-subMenu-action navPages-action" data-instantload href="https://martelelectronics.com/written-quotes/">Written Quotes </a> 810 </li> 811 </ul> 812 </div> 813 814 </li> 815 <li class="navPages-item"> 816 817 <a class="navPages-action has-subMenu" href="https://martelelectronics.com/contact-us/" 818 data-instantload
819 data-collapsible="navPages-page-5" 820 data-collapsible-disabled-breakpoint="medium" 821 data-collapsible-disabled-state="open" 822 data-collapsible-enabled-state="closed"> 823 Contact Us <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use href="#icon-caret-down" /></svg></i> 824 </a> 825 <div class="navPage-subMenu navPage-subMenu--standard" id="navPages-page-5" aria-hidden="true" tabindex="-1"> 826 <ul class="navPage-subMenu-list"> 827 <li class="navPage-subMenu-item"> 828 <a class="navPage-subMenu-action navPages-action" data-instantload href="https://martelelectronics.com/contact-us/">Contact Us</a> 829 </li> 830 <li class="navPage-subMenu-item"> 831 <a class="navPage-subMenu-action navPages-action" data-instantload href="/help/">Technical Support</a> 832 </li> 833 <li class="navPage-subMenu-item"> 834 <a class="navPage-subMenu-action navPages-action" data-instantload href="/written-quotes/">Written Quotes</a> 835 </li> 836 <li class="navPage-subMenu-item"> 837 <a class="navPage-subMenu-action navPages-action" data-instantload href="/purchase-order/">Purchase Orders</a> 838 </li> 839 <li class="navPage-subMenu-item"> 840 <a class="navPage-subMenu-action navPages-action" data-instantload href="/police-car-cameras/">Police Car Cameras</a> 841 </li> 842 <li class="navPage-subMenu-item"> 843 <a class="navPage-subMenu-action navPages-action" data-instantload href="/police-body-camera-packages/">Police Body Camera Packages</a> 844 </li> 845 <li class="navPage-subMenu-item"> 846 <a class="navPage-subMenu-action navPages-action" data-instantload href="/expert-advice-free-support/">Expert Advice & Free Support</a> 847 </li> 848 <li class="navPage-subMenu-item"> 849 <a class="navPage-subMenu-action navPages-action" data-instantload href="/support/">Support</a> 850 </li> 851 <li class="navPage-subMenu-item"> 852 <a class="navPage-subMenu-action navPages-action" data-instantload href="/repair-forms/">Repair Forms</a> 853 </li> 854 <li class="navPage-subMenu-item"> 855 <a class="navPage-subMenu-action navPages-action" data-instantload href="/terms-conditions/">Terms & Conditions</a> 856 </li> 857 <li class="navPage-subMenu-item"> 858 <a class="navPage-subMenu-action navPages-action" data-instantload href="/privacy-policy/">Privacy Policy</a> 859 </li> 860 <li class="navPage-subMenu-item"> 861 <a class="navPage-subMenu-action navPages-action" data-instantload href="/return-exchange/">Return Policy</a> 862 </li> 863 <li class="navPage-subMenu-item"> 864 <a class="navPage-subMenu-action navPages-action" data-instantload href="/login.php">Buy Again</a> 865 </li> 866 </ul> 867 </div> 868 869 870 </li> 871 <li class="navPages-item"> 872 873 <a class="navPages-action" data-instantload href="https://martelelectronics.com/accessibility-statement/">Accessibility Statement</a> 874 875 876 </li> 877 <li class="navPages-item"> 878 879 <a class="navPages-action has-subMenu" href="https://martelelectronics.com/30-day-return-policy/" 880 data-instantload 881 data-collapsible="navPages-page-7" 882 data-collapsible-disabled-breakpoint="medium" 883 data-collapsible-disabled-state="open" 884 data-collapsible-enabled-state="closed"> 885 30-Day Return Policy <i class="icon navPages-action-moreIcon" aria-hidden="true"><svg><use href="#icon-caret-down" /></svg></i> 886 </a> 887 <div class="navPage-subMenu navPage-subMenu--standard" id="navPages-p
887age-7" aria-hidden="true" tabindex="-1"> 888 <ul class="navPage-subMenu-list"> 889 <li class="navPage-subMenu-item"> 890 <a class="navPage-subMenu-action navPages-action" data-instantload href="https://martelelectronics.com/30-day-return-policy/">30-Day Return Policy</a> 891 </li> 892 <li class="navPage-subMenu-item"> 893 <a class="navPage-subMenu-action navPages-action" data-instantload href="https://martelelectronics.com/free-shipping/">Free Shipping</a> 894 </li> 895 </ul> 896 </div> 897 898 </li> 899 </ul> 900 <ul class="navPages-list navPages-list--user _showTopHeader"> 901 <li class="navPages-item"> 902 <a class="navPages-action" href="https://martelelectronics.com/login.php">Sign In</a> 903 <a class="navPages-action" href="https://martelelectronics.com/login.php?action=create_account">Register</a> 904 </li> 905 906 <li class="navPages-item navPages-item--phone"> 907 <a class="navPages-action" href="tel:(800) 553-5536"> 908 <i class="icon"><svg><use href="#icon-phone-solid" /></svg></i> 909 <span>(800) 553-5536</span> 910 </a> 911 </li> 912 </ul> 913 914</nav> </div> 915 </div> 916 917 <div data-content-region="header_navigation_bottom--global"><div data-layout-id="9535a5c1-e6b7-4d7a-9bff-acdfbd6713ca"> <div data-sub-layout-container="f3d3b33a-e83b-4218-9bba-01df3d5658ec" data-layout-name="Layout"> 918 <style data-container-styling="f3d3b33a-e83b-4218-9bba-01df3d5658ec"> 919 [data-sub-layout-container="f3d3b33a-e83b-4218-9bba-01df3d5658ec"] { 920 box-sizing: border-box; 921 display: flex; 922 flex-wrap: wrap; 923 z-index: 0; 924 position: relative; 925 height: ; 926 padding-top: 0px; 927 padding-right: 0px; 928 padding-bottom: 0px; 929 padding-left: 0px; 930 margin-top: 0px; 931 margin-right: 0px; 932 margin-bottom: 0px; 933 margin-left: 0px; 934 border-width: 0px; 935 border-style: solid; 936 border-color: #333333; 937 } 938 939 [data-sub-layout-container="f3d3b33a-e83b-4218-9bba-01df3d5658ec"]:after { 940 display: block; 941 position: absolute; 942 top: 0; 943 left: 0; 944 bottom: 0; 945 right: 0; 946 background-size: cover; 947 z-index: auto; 948 } 949 </style> 950 951 <div data-sub-layout="8339cea4-e354-40a5-aae8-9d30f106557c"> 952 <style data-column-styling="8339cea4-e354-40a5-aae8-9d30f106557c"> 953 [data-sub-layout="8339cea4-e354-40a5-aae8-9d30f106557c"] { 954 display: flex; 955 flex-direction: column; 956 box-sizing: border-box; 957 flex-basis: 100%; 958 max-width: 100%; 959 z-index: 0; 960 position: relative; 961 height: ; 962 padding-top: 0px; 963 padding-right: 10.5px; 964 padding-bottom: 0px; 965 padding-left: 10.5px; 966 margin-top: 0px; 967 margin-right: 0px; 968 margin-bottom: 0px; 969 margin-left: 0px; 970 border-width: 0px; 971 border-style: solid; 972 border-color: #333333; 973 justify-content: center; 974 } 975 [data-sub-layout="8339cea4-e354-40a5-aae8-9d30f106557c"]:after { 976 display: block; 977 position: absolute; 978 top: 0; 979 left: 0; 980 bottom: 0; 981 right: 0; 982 background-size: cover; 983 z-index: auto; 984 } 985 @media only screen and (max-width: 700px) { 986 [data-sub-layout="8339cea4-e354-40a5-aae8-9d30f106557c"] { 987 flex-basis: 100%; 988 max-width: 100%; 989 } 990 } 991 </style> 992 </div> 993</div> 994 995</div></div> 996</header> 997 998<div class="emthemesModez-quickSearch emthemesModez-quickSearch--mobileOnly" data-prevent-quick-search-close> 999 <!-- snippet location forms_search --> 1000 <form class="form" action="https://martelelectronics.com/search.php"> 1001 <fieldset class="form-fieldset"> 1002 <div class="form-field"> 1003 <label class="is-srOnly" for="search_query_mobile">Search</label> 1004 <div class="form-prefixPostfix wrap"> 1005 <input class="form-input" data-search-quick name="search_query" id="search_query_mobile" data-error-message="Search f
1005ield cannot be empty." placeholder="Search the store" autocomplete="off"> 1006 <input type="submit" class="button button--primary form-prefixPostfix-button--postfix" value="Search" /> 1007 </div> 1008 </div> 1009 </fieldset> 1010 </form> 1011</div> 1012<div class="dropdown dropdown--quickSearch" id="quickSearch" aria-hidden="true" tabindex="-1" data-prevent-quick-search-close> 1013 <div class="container"> 1014 <section class="quickSearchResults" data-bind="html: results"></section> 1015 </div> 1016</div> 1017<div class="emthemesModez-overlay"></div> 1018 1019<div data-content-region="header_bottom--global"></div> 1020<div data-content-region="header_bottom"><div data-layout-id="7184fc46-3907-45c5-a57d-7729654eafe6"> <div data-sub-layout-container="708a2357-2545-4cf5-a6d2-6bd1d2b38f79" data-layout-name="Layout"> 1021 <style data-container-styling="708a2357-2545-4cf5-a6d2-6bd1d2b38f79"> 1022 [data-sub-layout-container="708a2357-2545-4cf5-a6d2-6bd1d2b38f79"] { 1023 box-sizing: border-box; 1024 display: flex; 1025 flex-wrap: wrap; 1026 z-index: 0; 1027 position: relative; 1028 height: ; 1029 padding-top: 0px; 1030 padding-right: 0px; 1031 padding-bottom: 0px; 1032 padding-left: 0px; 1033 margin-top: 0px; 1034 margin-right: 0px; 1035 margin-bottom: 0px; 1036 margin-left: 0px; 1037 border-width: 0px; 1038 border-style: solid; 1039 border-color: #333333; 1040 } 1041 1042 [data-sub-layout-container="708a2357-2545-4cf5-a6d2-6bd1d2b38f79"]:after { 1043 display: block; 1044 position: absolute; 1045 top: 0; 1046 left: 0; 1047 bottom: 0; 1048 right: 0; 1049 background-size: cover; 1050 z-index: auto; 1051 } 1052 </style> 1053 1054 <div data-sub-layout="7a34c50e-85bf-4ef7-b6bf-9da70d529d2a"> 1055 <style data-column-styling="7a34c50e-85bf-4ef7-b6bf-9da70d529d2a"> 1056 [data-sub-layout="7a34c50e-85bf-4ef7-b6bf-9da70d529d2a"] { 1057 display: flex; 1058 flex-direction: column; 1059 box-sizing: border-box; 1060 flex-basis: 100%; 1061 max-width: 100%; 1062 z-index: 0; 1063 position: relative; 1064 height: ; 1065 padding-top: 0px; 1066 padding-right: 10.5px; 1067 padding-bottom: 0px; 1068 padding-left: 10.5px; 1069 margin-top: 0px; 1070 margin-right: 0px; 1071 margin-bottom: 0px; 1072 margin-left: 0px; 1073 border-width: 0px; 1074 border-style: solid; 1075 border-color: #333333; 1076 justify-content: center; 1077 } 1078 [data-sub-layout="7a34c50e-85bf-4ef7-b6bf-9da70d529d2a"]:after { 1079 display: block; 1080 position: absolute; 1081 top: 0; 1082 left: 0; 1083 bottom: 0; 1084 right: 0; 1085 background-size: cover; 1086 z-index: auto; 1087 } 1088 @media only screen and (max-width: 700px) { 1089 [data-sub-layout="7a34c50e-85bf-4ef7-b6bf-9da70d529d2a"] { 1090 flex-basis: 100%; 1091 max-width: 100%; 1092 } 1093 } 1094 </style> 1095 </div> 1096</div> 1097 1098</div></div> 1099 1100 <div data-emthemesmodez-remote-banner="emthemesModezBannersBlockAfterHeader"></div> 1101 <div class="body" data-currency-code="USD"> 1102 1103 <div class="container"> 1104 1105<main class="page"> 1106 1107 1108 <div class="page-content page-content--centered"> 1109 <nav aria-label="Breadcrumb"> 1110 <ol class="breadcrumbs"> 1111 <li class="breadcrumb "> 1112 <a data-instantload href="https://martelelectronics.com/" class="breadcrumb-label"> 1113 <span>Home</span> 1114 </a> 1115 </li> 1116 <li class="breadcrumb is-active"> 1117 <span class="breadcrumb-label" aria-current="page"> 1118 <span>About</span> 1119 </span> 1120 </li> 1121 </ol> 1122</nav> 1123
1124<script type="application/ld+json" nonce=""> 1125{ 1126 "@context": "https://schema.org", 1127 "@type": "BreadcrumbList", 1128 "itemListElement": [ 1129 { 1130 "@type": "ListItem", 1131 "position": 1, 1132 "name": "Home", 1133 "item": "https:\u002f\u002fmartelelectronics.com\u002f" 1134 }, 1135 { 1136 "@type": "ListItem", 1137 "position": 2, 1138 "name": "About" 1139 } 1140 ] 1141} 1142</script>
1142 <h1 class="page-heading">About</h1> 1143 1144 <div data-content-region="page_builder_content--global"><div data-layout-id="4ba2b79d-fc24-4a53-a08c-bc7c247f0d58"> <div data-sub-layout-container="7634e96e-4ac2-4df3-a73b-cdef9f329477" data-layout-name="Layout"> 1145 <style data-container-styling="7634e96e-4ac2-4df3-a73b-cdef9f329477"> 1146 [data-sub-layout-container="7634e96e-4ac2-4df3-a73b-cdef9f329477"] { 1147 box-sizing: border-box; 1148 display: flex; 1149 flex-wrap: wrap; 1150 z-index: 0; 1151 position: relative; 1152 height: ; 1153 padding-top: 0px; 1154 padding-right: 0px; 1155 padding-bottom: 0px; 1156 padding-left: 0px; 1157 margin-top: 0px; 1158 margin-right: 0px; 1159 margin-bottom: 0px; 1160 margin-left: 0px; 1161 border-width: 0px; 1162 border-style: solid; 1163 border-color: #333333; 1164 } 1165 1166 [data-sub-layout-container="7634e96e-4ac2-4df3-a73b-cdef9f329477"]:after { 1167 display: block; 1168 position: absolute; 1169 top: 0; 1170 left: 0; 1171 bottom: 0; 1172 right: 0; 1173 background-size: cover; 1174 z-index: auto; 1175 } 1176 </style> 1177 1178 <div data-sub-layout="20c85e26-7e45-421a-8000-53430ffce83f"> 1179 <style data-column-styling="20c85e26-7e45-421a-8000-53430ffce83f"> 1180 [data-sub-layout="20c85e26-7e45-421a-8000-53430ffce83f"] { 1181 display: flex; 1182 flex-direction: column; 1183 box-sizing: border-box; 1184 flex-basis: 100%; 1185 max-width: 100%; 1186 z-index: 0; 1187 position: relative; 1188 height: ; 1189 padding-top: 0px; 1190 padding-right: 10.5px; 1191 padding-bottom: 0px; 1192 padding-left: 10.5px; 1193 margin-top: 0px; 1194 margin-right: 0px; 1195 margin-bottom: 0px; 1196 margin-left: 0px; 1197 border-width: 0px; 1198 border-style: solid; 1199 border-color: #333333; 1200 justify-content: center; 1201 } 1202 [data-sub-layout="20c85e26-7e45-421a-8000-53430ffce83f"]:after { 1203 display: block; 1204 position: absolute; 1205 top: 0; 1206 left: 0; 1207 bottom: 0; 1208 right: 0; 1209 background-size: cover; 1210 z-index: auto; 1211 } 1212 @media only screen and (max-width: 700px) { 1213 [data-sub-layout="20c85e26-7e45-421a-8000-53430ffce83f"] { 1214 flex-basis: 100%; 1215 max-width: 100%; 1216 } 1217 } 1218 </style> 1219 </div> 1220</div> 1221 1222</div></div> 1223 <div data-content-region="page_builder_content"><div data-layout-id="81231f78-839b-413d-97f0-904868a42b4b"> <div data-sub-layout-container="58d1a9ea-7087-43be-8724-0c02080c1497" data-layout-name="Layout"> 1224 <style data-container-styling="58d1a9ea-7087-43be-8724-0c02080c1497"> 1225 [data-sub-layout-container="58d1a9ea-7087-43be-8724-0c02080c1497"] { 1226 box-sizing: border-box; 1227 display: flex; 1228 flex-wrap: wrap; 1229 z-index: 0; 1230 position: relative; 1231 height: ; 1232 padding-top: 0px; 1233 padding-right: 0px; 1234 padding-bottom: 0px; 1235 padding-left: 0px; 1236 margin-top: 0px; 1237 margin-right: 0px; 1238 margin-bottom: 0px; 1239 margin-left: 0px; 1240 border-width: 0px; 1241 border-style: solid; 1242 border-color: #333333; 1243 } 1244 1245 [data-sub-layout-container="58d1a9ea-7087-43be-8724-0c02080c1497"]:after { 1246 display: block; 1247 position: absolute; 1248 top: 0; 1249 left: 0; 1250 bottom: 0; 1251 right: 0; 1252 background-size: cover; 1253 z-index: auto; 1254 } 1255 </style> 1256 1257 <div data-sub-layout="f9860a76-a2fb-4be0-8456-6e070a9c6317"> 1258 <style data-column-styling="f9860a76-a2fb-4be0-8456-6e070a9c6317"> 1259 [data-sub-layout="f9860a76-a2fb-4be0-8456-6e070a9c6317"] { 1260 display: flex; 1261 flex-direction: column; 1262 box-sizing: border-box; 1263 flex-basis: 100%; 1264 max-width: 100%; 1265 z-index: 0; 1266 position: relative; 1267 height: ; 1268 padding-top: 0px; 1269 padding-right: 10.5px; 1270 padding-bottom: 0px; 1271 padding-left: 10.5px; 1272 margin-top: 0px; 1273 margin-right: 0px; 1274 margin-bottom: 0px; 1275 margin-left: 0px; 1276 border-width: 0px; 1277 border-style: solid; 1278 border-color: #333333; 1279 justify-content: center; 1280 } 1281 [data-sub-layout="f9860a76-a2fb-4be0-8456-6e070a9c6317"]:after { 1282 display: block; 1283 position: absolute; 1284 top: 0; 1285 left: 0; 1286 bottom: 0; 1287 right: 0; 1288 background-size: cover; 1289 z-index: auto; 1290 } 1291 @media only screen and (max-width: 700px) { 1292 [data-sub-layout="f9860a76-a2fb-4be0-8456-6e070a9c6317"] { 1293 flex-basis: 100%; 1294 max-width: 100%; 1295 } 1296 } 1297 </style> 1298 </div> 1299</div> 1300 1301</div></div> 1302 1303 <div style="max-width: 1440px; margin: 0 auto; padding: 34px 14px; background: #eef3f8; font-family: Arial, Helvetica, sans-serif; color: #0f172a;"> 1304<div style="display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 18px;"> 1305<div style="flex: 1 1 220px; background: #ffffff; border: 1px solid #d7e0ea; border-radius: 18px; padding: 14px 16px; box-shadow: 0 10px 24px rgba(15,23,42,0.04);"> 1306<div style="font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: .06em; color: #123f83; margin-bottom: 4px;">Martel History</div> 1307<div style="font-size: 16px; font-weight: 800; color: #0b1f3a; line-height: 1.35;">Serving customers since 1957</div> 1308</div> 1309<div style="flex: 1 1 220px; background: #ffffff; border: 1px solid #d7e0ea; border-radius: 18px; padding: 14px 16px; box-shadow: 0 10px 24px rgba(15,23,42,0.04);"> 1310<div style="font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: .06em; color: #123f83; margin-bottom: 4px;">Headquarters</div> 1311<div style="font-size: 16px; font-weight: 800; color: #0b1f3a; line-height: 1.35;">Yorba Linda, California</div> 1312</div> 1313<div style="flex: 1 1 220px; background: #ffffff; border: 1px solid #d7e0ea; border-radius: 18px; padding: 14px 16px; box-shadow: 0 10px 24px rgba(15,23,42,0.04);"> 1314<div style="font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: .06em; color: #123f83; margin-bottom: 4px;">Government & Professional Buyers</div> 1315<div style="font-size: 16px; font-weight: 800; color: #0b1f3a; line-height: 1.35;">Decades of specialty equipment support</div> 1316</div> 1317<div style="flex: 1 1 220px; background: #ffffff; border: 1px solid #d7e0ea; border-radius: 18px; padding: 14px 16px; box-shadow: 0 10px 24px rgba(15,23,42,0.04);"> 1318<div style="font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: .06em; color: #123f83; margin-bottom: 4px;">Direct Support</div> 1319<div style="font-size: 16px; font-weight: 800; color: #0b1f3a; line-height: 1.35;">Expert product knowledge and customer response</div> 1320</div> 1321</div> 1322<div style="display: flex; flex-wrap: wrap; gap: 22px; align-items: stretch; margin-bottom: 22px;"> 1323<div style="flex: 1 1 760px; min-width: 320px; background: linear-gradient(180deg,#0f2f67 0%,#173f87 100%); border: 1px solid #0e346f; border-radius: 30px; padding: 34px; box-shadow: 0 18px 42px rgba(12,33,74,0.18); color: #ffffff;"> 1324<div style="display: inline-block; background: #ffd23b; color: #0f2f67; font-size: 12px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; border-radius: 999px; padding: 9px 14px; margin-bottom: 16px;">About</div> 1325<h1 style="margin: 0 0 14px; font-size: 50px; line-height: 1.04; font-weight: 800; color: #ffffff; max-width: 920px;">About Martel Electronics Since 1957</h1> 1326<div style="font-size: 23px; line-height: 1.42; color: #e7eef8; font-weight: bold; margin-bottom: 16px; max-width: 930px;">More Than 65 Years of Specialty Recording Equipment History</div> 1327<p style="margin: 0 0 18px; font-size: 17px; line-height: 1.82; color: #dce7f5; max-width: 960px;">Martel Electronics has served customers for more than 65 years with professional dictation, transcription, recording, court reporting, and specialty electronics solutions. Our history includes early work with professional tape recorder systems, including Uher reel-to-reel recorders, and decades of support for customers who need dependable equipment and knowledgeable service.</p> 1328<div style="display: flex; flex-wrap: wrap; gap: 16px; margin-top: 8px;"> 1329<div style="flex: 1 1 220px; background: rgba(255,255,255,0.10); border: 1px solid rgba(255,255,255,0.12); border-radius: 20px; padding: 18px;"> 1330<div style="font-size: 18px; font-weight: 800; color: #ffffff; margin-bottom: 7px;">Since 1957</div> 1331<div style="font-size: 15px; line-height: 1.65; color: #dce7f5;">A long history of helping professional customers choose the right recording and dictation equipment.</div> 1332</div> 1333<div style="flex: 1 1 220px; background: rgba(255,255,255,0.10); border: 1px solid rgba(255,255,255,0.12); border-radius: 20px; padding: 18px;"> 1334<div style="font-size: 18px; font-weight: 800; color: #ffffff; margin-bottom: 7px;">Specialty Equipment</div> 1335<div style="font-size: 15px; line-height: 1.65; color: #dce7f5;">Professional recording, dictation, transcription, court reporting, and government purchasing solutions.</div> 1336</div> 1337<div style="flex: 1 1 220px; background: rgba(255,255,255,0.10); border: 1px solid rgba(255,255,255,0.12); border-radius: 20px; padding: 18px;"> 1338<div style="font-size: 18px; font-weight: 800; color: #ffffff; margin-bottom: 7px;">Martel Headquarters</div> 1339<div style="font-size: 15px; line-height: 1.65; color: #dce7f5;">Located in Yorba Linda, California.</div> 1340</div> 1341</div> 1342</div> 1343<div style="flex: 1 1 420px; min-width: 320px; display: flex; flex-direction: column; gap: 16px;"> 1344<div style="background: #ffffff; border: 1px solid #d7e0ea; border-radius: 28px; box-shadow: 0 16px 36px rgba(15,23,42,0.07); overflow: hidden;"> 1345<div style="padding: 18px 18px 0 18px;"> 1346<div style="font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: .06em; color: #123f83; margin-bottom: 6px;">Headquarters</div> 1347<div style="font-size: 24px; line-height: 1.2; font-weight: 800; color: #0b1f3a; margin-bottom: 12px;">Martel Electronics Headquarters in Yorba Linda, California</div> 1348</div> 1349<div style="padding: 0 18px 18px 18px; background: linear-gradient(180deg,#f8fbff 0%,#edf4fb 100%);"> 1350<div style="background: #ffffff; border: 1px solid #dde6ef; border-radius: 22px; padding: 16px; text-align: center;"><img src="https://cdn2.bigcommerce.com/server2600/m0o7bk/product_images/uploaded_images/martel-electronics-world-headquarters.gif" alt="Martel Electronics headquarters in Yorba Linda, California" style="width: 100%; height: auto; max-height: 420px; object-fit: contain; border-radius: 16px; margin: 0 auto; display: block;" /></div> 1351</div> 1352</div> 1353<div style="background: linear-gradient(180deg,#0b1f3a 0%,#12345d 100%); color: #ffffff; border-radius: 24px; padding: 22px; box-shadow: 0 16px 32px rgba(15,23,42,0.14);"> 1354<div style="font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: .05em; opacity: .82; margin-bottom: 6px;">About Martel</div> 1355<div style="font-size: 32px; font-weight: 800; line-height: 1.05; margin-bottom: 10px;">More Than 65 Years of Specialty Electronics Experience</div> 1356<div style="font-size: 15px; line-height: 1.75; color: #dbe8f7;">
1356Martel Electronics supports professional, government, legal, court reporting, transcription, and recording customers with specialty equipment and direct product knowledge.</div> 1357</div> 1358</div> 1359</div> 1360<div style="background: #ffffff; border: 1px solid #d7e0ea; border-radius: 28px; box-shadow: 0 16px 34px rgba(15,23,42,0.06); padding: 32px; margin-bottom: 22px;"> 1361<div style="max-width: 1020px; margin: 0 auto;"> 1362<div style="font-size: 13px; font-weight: 800; text-transform: uppercase; letter-spacing: .06em; color: #123f83; margin-bottom: 8px; text-align: center;">Company History</div> 1363<h2 style="margin: 0 0 12px; font-size: 40px; line-height: 1.12; color: #0b1f3a; font-weight: 800; text-align: center;">About Martel Electronics</h2> 1364<p style="margin: 0 0 16px; font-size: 18px; line-height: 1.9; color: #475569;">Martel Electronics has a long history of serving customers who need dependable specialty electronics, recording equipment, dictation systems, transcription solutions, court reporting equipment, and government purchasing support. In 1999, the company moved into its own building in Yorba Linda, California, as customer demand and product support needs continued to grow.</p> 1365<p style="margin: 0; font-size: 18px; line-height: 1.9; color: #475569;">We pride ourselves on helping customers choose the right equipment for their work and supporting them before and after the sale. Our goal is to provide practical product knowledge, responsive service, and reliable solutions for professional customers.</p> 1366</div> 1367</div> 1368<div style="background: linear-gradient(180deg,#0b1f3a 0%,#12345d 100%); border-radius: 28px; padding: 36px 30px; box-shadow: 0 18px 38px rgba(15,23,42,0.14);"> 1369<div style="max-width: 980px; margin: 0 auto; text-align: center;"> 1370<div style="font-size: 13px; font-weight: 800; text-transform: uppercase; letter-spacing: .06em; color: #9fc2ff; margin-bottom: 8px;">Martel Electronics</div> 1371<h2 style="margin: 0 0 14px; font-size: 42px; line-height: 1.12; color: #ffffff; font-weight: 800;">About Martel Electronics Since 1957</h2> 1372<p style="margin: 0 auto; font-size: 18px; line-height: 1.85; color: #dce7f5; max-width: 900px;">Martel Electronics has served professional customers for more than 65 years with specialty recording, dictation, transcription, court reporting, and electronics solutions. We continue to focus on practical equipment guidance, direct customer support, and dependable products for the people and organizations that rely on us.</p> 1373</div> 1374</div> 1375</div> 1376 1377 1378 <div data-content-region="page_builder_bottom"><div data-layout-id="73581b8b-547a-448a-b1d6-89e5578de5ef"> <div data-sub-layout-container="30947b43-1f86-45b8-945c-9c53eb62e3da" data-layout-name="Layout"> 1379 <style data-container-styling="30947b43-1f86-45b8-945c-9c53eb62e3da"> 1380 [data-sub-layout-container="30947b43-1f86-45b8-945c-9c53eb62e3da"] { 1381 box-sizing: border-box; 1382 display: flex; 1383 flex-wrap: wrap; 1384 z-index: 0; 1385 position: relative; 1386 height: ; 1387 padding-top: 0px; 1388 padding-right: 0px; 1389 padding-bottom: 0px; 1390 padding-left: 0px; 1391 margin-top: 0px; 1392 margin-right: 0px; 1393 margin-bottom: 0px; 1394 margin-left: 0px; 1395 border-width: 0px; 1396 border-style: solid; 1397 border-color: #333333; 1398 } 1399 1400 [data-sub-layout-container="30947b43-1f86-45b8-945c-9c53eb62e3da"]:after { 1401 display: block; 1402 position: absolute; 1403 top: 0; 1404 left: 0; 1405 bottom: 0; 1406 right: 0; 1407 background-size: cover; 1408 z-index: auto; 1409 } 1410 </style> 1411 1412 <div data-sub-layout="0c01198c-8a83-421b-9176-bebc2803ab9a"> 1413 <style data-column-styling="0c01198c-8a83-421b-9176-bebc2803ab9a"> 1414 [data-sub-layout="0c01198c-8a83-421b-9176-bebc2803ab9a"] { 1415 display: flex; 1416 flex-direction: column; 1417 box-sizing: border-box; 1418 flex-basis: 100%; 1419 max-width: 100%; 1420 z-index: 0; 1421 position: relative; 1422 height: ; 1423 padding-top: 0px; 1424 padding-right: 10.5px; 1425 padding-bottom: 0px; 1426 padding-left: 10.5px; 1427 margin-top: 0px; 1428 margin-right: 0px; 1429 margin-bottom: 0px; 1430 margin-left: 0px; 1431 border-width: 0px; 1432 border-style: solid; 1433 border-color: #333333; 1434 justify-content: center; 1435 } 1436 [data-sub-layout="0c01198c-8a83-421b-9176-bebc2803ab9a"]:after { 1437 display: block; 1438 position: absolute; 1439 top: 0; 1440 left: 0; 1441 bottom: 0; 1442 right: 0; 1443 background-size: cover; 1444 z-index: auto; 1445 } 1446 @media only screen and (max-width: 700px) { 1447 [data-sub-layout="0c01198c-8a83-421b-9176-bebc2803ab9a"] { 1448 flex-basis: 100%; 1449 max-width: 100%; 1450 } 1451 } 1452 </style> 1453 </div> 1454</div> 1455 1456</div></div> 1457 <div data-content-region="page_builder_bottom--global"><div data-layout-id="c0fd307a-ea01-407c-822e-5e6dd653fe29"> <div data-sub-layout-container="9fb6a54f-dd67-4188-8eef-2e34fe1ac435" data-layout-name="Layout"> 1458 <style data-container-styling="9fb6a54f-dd67-4188-8eef-2e34fe1ac435"> 1459 [data-sub-layout-container="9fb6a54f-dd67-4188-8eef-2e34fe1ac435"] { 1460 box-sizing: border-box; 1461 display: flex; 1462 flex-wrap: wrap; 1463 z-index: 0; 1464 position: relative; 1465 height: ; 1466 padding-top: 0px; 1467 padding-right: 0px; 1468 padding-bottom: 0px; 1469 padding-left: 0px; 1470 margin-top: 0px; 1471 margin-right: 0px; 1472 margin-bottom: 0px; 1473 margin-left: 0px; 1474 border-width: 0px; 1475 border-style: solid; 1476 border-color: #333333; 1477 } 1478 1479 [data-sub-layout-container="9fb6a54f-dd67-4188-8eef-2e34fe1ac435"]:after { 1480 display: block; 1481 position: absolute; 1482 top: 0; 1483 left: 0; 1484 bottom: 0; 1485 right: 0; 1486 background-size: cover; 1487 z-index: auto; 1488 } 1489 </style> 1490 1491 <div data-sub-layout="47f58620-d66d-44ac-b8db-ee9520d39b45"> 1492 <style data-column-styling="47f58620-d66d-44ac-b8db-ee9520d39b45"> 1493 [data-sub-layout="47f58620-d66d-44ac-b8db-ee9520d39b45"] { 1494 display: flex; 1495 flex-direction: column; 1496 box-sizing: border-box; 1497 flex-basis: 100%; 1498 max-width: 100%; 1499 z-index: 0; 1500 position: relative; 1501 height: ; 1502 padding-top: 0px; 1503 padding-right: 10.5px; 1504 padding-bottom: 0px; 1505 padding-left: 10.5px; 1506 margin-top: 0px; 1507 margin-right: 0px; 1508 margin-bottom: 0px; 1509 margin-left: 0px; 1510 border-width: 0px; 1511 border-style: solid; 1512 border-color: #333333; 1513 justify-content: center; 1514 } 1515 [data-sub-layout="47f58620-d66d-44ac-b8db-ee9520d39b45"]:after { 1516 display: block; 1517 position: absolute; 1518 top: 0; 1519 left: 0; 1520 bottom: 0; 1521 right: 0; 1522 background-size: cover; 1523 z-index: auto; 1524 } 1525 @media only screen and (max-width: 700px) { 1526 [data-sub-layout="47f58620-d66d-44ac-b8db-ee9520d39b45"] { 1527 flex-basis: 100%; 1528 max-width: 100%; 1529 } 1530 } 1531 </style> 1532 </div> 1533</div> 1534 1535 <div data-sub-layout-container="4018bc71-66d9-428e-b184-b30633983ead" data-layout-name="Layout"> 1536 <style data-container-styling="4018bc71-66d9-428e-b184-b30633983ead"> 1537 [data-sub-layout-container="4018bc71-66d9-428e-b184-b30633983ead"] { 1538 box-sizing: border-box; 1539 display: flex; 1540 flex-wrap: wrap; 1541 z-index: 0; 1542 position: relative; 1543 height: ; 1544 padding-top: 0px; 1545 padding-right: 0px; 1546 padding-bottom: 0px; 1547 padding-left: 0px; 1548 margin-top: 0px; 1549 margin-right: 0px; 1550 margin-bottom: 0px; 1551 margin-left: 0px; 1552 border-width: 0px; 1553 border-style: solid; 1554 border-color: #333333; 1555 } 1556 1557 [data-sub-layout-container="4018bc71-66d9-428e-b184-b30633983ead"]:after { 1558 display: block; 1559 position: absolute; 1560 top: 0; 1561 left: 0; 1562 bottom: 0; 1563 right: 0; 1564 background-size: cover; 1565 z-index: auto; 1566 } 1567 </style> 1568 1569 <div data-sub-layout="1d5e814a-579a-45a7-8678-baa7ce2a804d"> 1570 <style data-column-styling="1d5e814a-579a-45a7-8678-baa7ce2a804d"> 1571 [data-sub-layout="1d5e814a-579a-45a7-8678-baa7ce2a804d"] { 1572 display: flex; 1573 flex-direction: column; 1574 box-sizing: border-box; 1575 flex-basis: 50%; 1576 max-width: 50%; 1577 z-index: 0; 1578 position: relative; 1579 height: ; 1580 padding-top: 0px; 1581 padding-right: 10.5px; 1582 padding-bottom: 0px; 1583 padding-left: 10.5px; 1584 margin-top: 0px; 1585 margin-right: 0px; 1586 margin-bottom: 0px; 1587 margin-left: 0px; 1588 border-width: 0px; 1589 border-style: solid; 1590 border-color: #333333; 1591 justify-content: center; 1592 } 1593 [data-sub-layout="1d5e814a-579a-45a7-8678-baa7ce2a804d"]:after { 1594 display: block; 1595 position: absolute; 1596 top: 0; 1597 left: 0; 1598 bottom: 0; 1599 right: 0; 1600 background-size: cover; 1601 z-index: auto; 1602 } 1603 @media only screen and (max-width: 700px) { 1604 [data-sub-layout="1d5e814a-579a-45a7-8678-baa7ce2a804d"] { 1605 flex-basis: 100%; 1606 max-width: 100%; 1607 } 1608 } 1609 </style> 1610 </div> 1611 <div data-sub-layout="e2736043-a26e-481a-a147-023c1037c97d"> 1612 <style data-column-styling="e2736043-a26e-481a-a147-023c1037c97d"> 1613 [data-sub-layout="e2736043-a26e-481a-a147-023c1037c97d"] { 1614 display: flex; 1615 flex-direction: column; 1616 box-sizing: border-box; 1617 flex-basis: 50%; 1618 max-width: 50%; 1619 z-index: 0; 1620 position: relative; 1621 height: ; 1622 padding-top: 0px; 1623 padding-right: 10.5px; 1624 padding-bottom: 0px; 1625 padding-left: 10.5px; 1626 margin-top: 0px; 1627 margin-right: 0px; 1628 margin-bottom: 0px; 1629 margin-left: 0px; 1630 border-width: 0px; 1631 border-style: solid; 1632 border-color: #333333; 1633 justify-content: center; 1634 } 1635 [data-sub-layout="e2736043-a26e-481a-a147-023c1037c97d"]:after { 1636 display: block; 1637 position: absolute; 1638 top: 0; 1639 left: 0; 1640 bottom: 0; 1641 right: 0; 1642 background-size: cover; 1643 z-index: auto; 1644 } 1645 @media only screen and (max-width: 700px) { 1646 [data-sub-layout="e2736043-a26e-481a-a147-023c1037c97d"] { 1647 flex-basis: 100%; 1648 max-width: 100%; 1649 } 1650 } 1651 </style> 1652 </div> 1653</div> 1654 1655 <div data-sub-layout-container="14af40d8-2aa0-4a93-8ea0-269d9f864335" data-layout-name="Layout"> 1656 <style data-container-styling="14af40d8-2aa0-4a93-8ea0-269d9f864335"> 1657 [data-sub-layout-container="14af40d8-2aa0-4a93-8ea0-269d9f864335"] { 1658 box-sizing: border-box; 1659 display: flex; 1660 flex-wrap: wrap; 1661 z-index: 0; 1662 position: relative; 1663 height: ; 1664 padding-top: 0px; 1665 padding-right: 0px; 1666 padding-bottom: 0px; 1667 padding-left: 0px; 1668 margin-top: 0px; 1669 margin-right: 0px; 1670 margin-bottom: 0px; 1671 margin-left: 0px; 1672 border-width: 0px; 1673 border-style: solid; 1674 border-color: #333333; 1675 } 1676 1677 [data-sub-layout-container="14af40d8-2aa0-4a93-8ea0-269d9f864335"]:after { 1678 display: block; 1679 position: absolute; 1680 top: 0; 1681 left: 0; 1682 bottom: 0; 1683 right: 0; 1684 background-size: cover; 1685 z-index: auto; 1686 } 1687 </style> 1688 1689 <div data-sub-layout="9831f93a-021c-4441-92dc-34f254d5704c"> 1690 <style data-column-styling="9831f93a-021c-4441-92dc-34f254d5704c"> 1691 [data-sub-layout="9831f93a-021c-4441-92dc-34f254d5704c"] { 1692 display: flex; 1693 flex-direction: column; 1694 box-sizing: border-box; 1695 flex-basis: 100%; 1696 max-width: 100%; 1697 z-index: 0; 1698 position: relative; 1699 height: ; 1700 padding-top: 0px; 1701 padding-right: 10.5px; 1702 padding-bottom: 0px; 1703 padding-left: 10.5px; 1704 margin-top: 0px; 1705 margin-right: 0px; 1706 margin-bottom: 0px; 1707 margin-left: 0px; 1708 border-width: 0px; 1709 border-style: solid; 1710 border-color: #333333; 1711 justify-content: center; 1712 } 1713 [data-sub-layout="9831f93a-021c-4441-92dc-34f254d5704c"]:after { 1714 display: block; 1715 position: absolute; 1716 top: 0; 1717 left: 0; 1718 bottom: 0; 1719 right: 0; 1720 background-size: cover; 1721 z-index: auto; 1722 } 1723 @media only screen and (max-width: 700px) { 1724 [data-sub-layout="9831f93a-021c-4441-92dc-34f254d5704c"] { 1725 flex-basis: 100%; 1726 max-width: 100%; 1727 } 1728 } 1729 </style> 1730 </div> 1731</div> 1732 1733</div></div> 1734 </div> 1735</main> 1736 1737 1738 </div> 1739 <div id="modal" class="modal" data-reveal data-prevent-quick-search-close> 1740 <a href="#" class="modal-close" aria-label="Close" role="button"> 1741 <svg class="icon"><use href="#icon-close" /></svg> 1742 </a> 1743 <div class="modal-content"></div> 1744 <div class="loadingOverlay"></div> 1745</div> 1746 1747<div id="previewModal" class="modal modal--large" data-reveal> 1748 <a href="#" class="modal-close" aria-label="Close" role="button"> 1749 <svg class="icon"><use href="#icon-close" /></svg> 1750 </a> 1751 <div class="modal-content"></div> 1752 <div class="loadingOverlay"></div> 1753</div> 1754 <div id="alert-modal" class="modal modal--alert modal--small" data-reveal data-prevent-quick-search-close> 1755 <div class="swal2-icon swal2-error swal2-icon-show"><span class="swal2-x-mark"><span class="swal2-x-mark-line-left"></span><span class="swal2-x-mark-line-right"></span></span></div> 1756 1757 <div class="modal-content"></div> 1758 1759 <div class="button-container"><button type="button" class="confirm button" data-reveal-close>OK</button></div> 1760</div> 1761</div> 1762 1763<div class="scrollToTop"> 1764 <a href="#topOfPage" class="button u-hiddenVisually" id="scrollToTopFloatingButton" title="Top of Page"><i class="fa fa-chevron-up"></i></a> 1765</div> 1766<footer class="footer" role="contentinfo"> 1767 <h2 class="is-srOnly">Footer</h2> 1768 1769 <div class="emthemesModez-footer-topColumns-wrapper"> 1770 <div class="container"> 1771 <div class="emthemesModez-f
1771ooter-topColumns"> 1772 <div class="emthemesModez-footer-newsletter"> 1773 <div class="emthemesModez-newsletterSection emthemesModez-newsletterSection--hasSocials"> 1774 <article class="emthemesModez-newsletterForm" data-section-type="newsletterSubscription"> 1775 <h3 class="footer-info-heading">Subscribe to our newsletter</h3> 1776 1777<form class="form" action="https://martelelectronics.com/subscribe.php" method="post"> 1778 <fieldset class="form-fieldset"> 1779 <input type="hidden" name="action" value="subscribe"> 1780 <input type="hidden" name="nl_first_name" value="bc"> 1781 <input type="hidden" name="check" value="1"> 1782 <div class="form-field"> 1783 <label class="form-label is-srOnly" for="nl_email">Email Address</label> 1784 <div class="form-prefixPostfix wrap"> 1785 <input class="form-input form-prefixPostfix-input" id="nl_email" name="nl_email" type="email" value="" placeholder="Your email address" aria-required="true" required> 1786 <input class="button form-prefixPostfix-button--postfix" type="submit" value="Subscribe"> 1787 </div> 1788 </div> 1789 </fieldset> 1790</form> 1791 </article> 1792</div> </div> 1793 </div> 1794 </div> 1795 </div> 1796 1797 <div class="container"> 1798 <section class="footer-info"> 1799 1800 <article class="footer-info-col footer-info-col--about" data-section-type="storeInfo"> 1801 <h3 class="footer-info-heading"> 1802 <div class="footer-logo"> 1803 <a href="https://martelelectronics.com/" data-instantload='{"page":"home"}'> 1804 <img class="header-logo-image-unknown-size" src="https://cdn11.bigcommerce.com/s-m0o7bk/images/stencil/original/download_1783128589__55035.original.png" alt="Martel Electronics Since 1957" title="Martel Electronics Since 1957"> 1805</a> 1806 </div> 1807 </h3> 1808 1809 <ul class="fa-ul"> 1810 <li> 1811 <i class="fa fa-li fa-map-marker"></i> 1812 <address> 1813 <strong>Martel Electronics Sales Inc.</strong><br> 1814 23221 La Palma Ave.<br> 1815 Yorba Linda, CA 92887 1816 </address> 1817 </li> 1818 1819 <li> 1820 <i class="fa fa-li fa-phone"></i> 1821 <a href="tel:+18005535536">Call us at (800) 553-5536</a> 1822 </li> 1823 </ul> 1824 1825 <ul class="socialLinks socialLinks--alt"> 1826 <li class="socialLinks-item"> 1827 <a class="icon icon--facebook" 1828 href="https://www.facebook.com/martelelectronics" 1829 target="_blank" 1830 rel="noopener" 1831 title="Facebook" 1832 > 1833 <span class="aria-description--hidden">Facebook</span> 1834 <svg> 1835 <use href="#icon-facebook"/> 1836 </svg> 1837 </a> 1838 </li> 1839 <li class="socialLinks-item"> 1840 <a class="icon icon--pinterest" 1841 href="http://www.pinterest.com/marteldirect" 1842 target="_blank" 1843 rel="noopener" 1844 title="Pinterest" 1845 > 1846 <span class="aria-description--hidden">Pinterest</span> 1847 <svg> 1848 <use href="#icon-pinterest"/> 1849 </svg> 1850 </a> 1851 </li> 1852 <li class="socialLinks-item"> 1853 <a class="icon icon--x" 1854 href="https://x.com/marteldirect" 1855 target="_blank" 1856 rel="noopener" 1857 title="X" 1858 >
1859 <span class="aria-description--hidden">X</span> 1860 <svg> 1861 <use href="#icon-x"/> 1862 </svg> 1863 </a> 1864 </li> 1865 <li class="socialLinks-item"> 1866 <a class="icon icon--instagram" 1867 href="https://www.instagram.com/martelelectronics/" 1868 target="_blank" 1869 rel="noopener" 1870 title="Instagram" 1871 > 1872 <span class="aria-description--hidden">Instagram</span> 1873 <svg> 1874 <use href="#icon-instagram"/> 1875 </svg> 1876 </a> 1877 </li> 1878 </ul> 1879 </article> 1880 1881 <article class="footer-info-col" data-section-type="footer-webPages"> 1882 <h3 class="footer-info-heading">Navigate</h3> 1883 <ul class="footer-info-list"> 1884 <li><a href="/">Home</a></li> 1885 <li><a href="/help/">Help</a></li> 1886 <li><a href="/about/">About</a></li> 1887 <li><a href="/dc7-police-car-camera-system/">DC7</a></li> 1888 <li><a href="/purchase-order/">Purchase Order</a></li> 1889 <li><a href="/written-quotes/">Written Quotes</a></li> 1890 <li><a href="/contact-us/">Contact Us</a></li> 1891 <li><a href="/accessibility-statement/">Accessibility Statement</a></li> 1892 <li><a href="/free-shipping/">Free Shipping</a></li> 1893 <li><a href="/30-day-money-back-guarantee/">30-Day Money-Back Guarantee</a></li> 1894 </ul> 1895 </article> 1896 1897 <article class="footer-info-col" data-section-type="footer-categories"> 1898 <h3 class="footer-info-heading">Categories</h3> 1899 <ul class="footer-info-list"> 1900 <li><a href="/voice-recorders/">Voice Recorders</a></li> 1901 <li><a href="/court-reporter-microphones/">Court Reporter Microphones</a></li> 1902 <li><a href="/court-reporting-recorders-microphones-equipment/">Court Reporting Recorders & Microphones</a></li> 1903 <li><a href="/stenomask-microphones-for-court-reporters/">Stenomask Microphones</a></li> 1904 <li><a href="/zoom-multiple-microphones/">Zoom Multiple Microphones</a></li> 1905 <li><a href="/conference-recorders/">Conference Recorders</a></li> 1906 <li><a href="/dictation-machine-/">Dictation Machines</a></li> 1907 <li><a href="/transcription-foot-pedals/">Transcription Foot Pedals</a></li> 1908 <li><a href="/court-reporter-laptop/">Court Reporter Laptops</a></li> 1909 <li><a href="/police-car-cameras/">Police Car Cameras</a></li> 1910 <li><a href="/police-body-camera-packages/">Police Body Camera Packages</a></li> 1911 </ul> 1912 </article> 1913 1914 </section> 1915 </div> 1916 1917 <p style="font-size: 10px; color: #6b7280; line-height: 1.4; font-family: sans-serif; text-align: center; margin: 20px 0; padding: 10px;"> 1918 Payment options through Affirm are subject to an eligibility check and provided by 1919 <a href="https://www.affirm.com/lenders" target="_blank" rel="noopener noreferrer nofollow" style="color: #6b7280; text-decoration: underline;">these lending partners: affirm.com/lenders</a>. 1920 Rates from 0–36% APR. 1921 <strong>CA Residents:</strong> Loans by Affirm Loan Services, LLC are made or arranged pursuant to a California Financing Law license. 1922 <strong>NY Residents:</strong> Affirm is licensed to offer BNPL loans by the New York State Department of Financial Services. 1923 For licenses and disclosures, see 1924 <a href="https://www.affirm.com/licenses" target="_blank" rel="noopener noreferrer nofollow" style="color: #6b7280; text-decoration: underline;">affirm.com/licenses</a>. 1925 </p> 1926 1927 <div class="footer-copyright"> 1928 <div class="container"> 1929 <p class="powered-by"> 1930 1931 </p> 1932 1933 <div class="footer-payment-icons"> 1934 <svg class="footer-payment-icon"><use href="#icon-logo-american-express-dark"></use></svg> 1935 <svg class="footer-payment-icon"><use href="#icon-logo-discover-dark"></use></svg> 1936 <svg class="footer-payment-icon"><use href="#icon-logo-mastercard-dark"></use></svg> 1937 <svg class="footer-payment-icon"><use href="#icon-logo-paypal-dark"></use></svg> 1938 <svg class="footer-payment-icon"><use href="#icon-logo-visa-dark"></use></svg> 1939 <svg class="footer-payment-icon"><use href="#icon-logo-applepay-dark"></use></svg> 1940 <svg class="footer-payment-icon"><use href="#icon-logo-amazon-dark"></use></svg> 1941 <svg class="footer-payment-icon"><use href="#icon-logo-googlepay-dark"></use></svg> 1942 <svg class="footer-payment-icon"><use href="#icon-logo-klarna-dark"></use></svg> 1943 </div> 1944 1945 <div data-content-region="ssl_site_seal--global"></div> 1946 </div> 1947 </div> 1948</footer> 1949
1949<script nonce="">window.__webpack_public_path__ = "https://cdn11.bigcommerce.com/s-m0o7bk/stencil/dcff4430-4df6-013e-0d67-161549aa1a0e/e/cb041bf0-7fe1-013f-b400-5291dc9d1300/dist/";</script>
1949 1950
1950<script nonce="">window.__webpack_nonce__ = "";</script>
1950 1951
1951<script src="https://cdn11.bigcommerce.com/s-m0o7bk/stencil/dcff4430-4df6-013e-0d67-161549aa1a0e/e/cb041bf0-7fe1-013f-b400-5291dc9d1300/dist/theme-bundle.main.js" nonce=""></script>
1951 1952
1952<script nonce=""> 1953 window.stencilBootstrap("page", "{\"themeSettings\":{\"optimizedCheckout-formChecklist-color\":\"#333333\",\"banner3x_1_style\":\"\",\"paymentbuttons-paypal-cart-page-add-cart-color\":\"gold\",\"footer-secondary-backgroundColor\":\"#37475a\",\"paymentbuttons-paypal-cart-page-add-cart-label\":\"checkout\",\"optimizedCheckout-buttonPrimary-backgroundColorActive\":\"#989898\",\"paymentbuttons-paypal-checkout-payment-label\":\"checkout\",\"show_accept_amex\":true,\"optimizedCheckout-buttonPrimary-borderColorDisabled\":\"transparent\",\"categoriesList_count\":0,\"brandpage_products_per_page\":20,\"color-secondaryDarker\":\"#e8e8e8\",\"banner_half_1_style\":\"\",\"card--alternate-color--hover\":\"#ffffff\",\"productsByCategory-heading-backgroundColor3\":\"#00a6ed\",\"optimizedCheckout-colorFocus\":\"#4496f6\",\"alsobought_product\":\"similar\",\"navUser-color\":\"#ffffff\",\"bannerAdvTopHeader\":\"nothome\",\"social_icon_placement_bottom\":true,\"productpage_bulk_price_table\":true,\"show_powered_by\":false,\"topHeader-borderColor\":\"#565656\",\"productsByCategory-heading-color2\":\"#ffffff\",\"checkRadio-borderColor\":\"#dcdcdc\",\"product_custom_badges\":true,\"color-primaryDarker\":\"#000000\",\"optimizedCheckout-buttonPrimary-colorHover\":\"#ffffff\",\"brand_size\":\"300x150\",\"optimizedCheckout-logo-position\":\"center\",\"carousel_video_autoplay\":true,\"optimizedCheckout-discountBanner-backgroundColor\":\"#f5f5f5\",\"color-textLink--hover\":\"#c45500\",\"pdp-sale-price-label\":\"Now:\",\"nl_popup_show\":\"\",\"navPages-categoriesItem-color\":\"#ffffff\",\"optimizedCheckout-buttonSecondary-backgroundColorHover\":\"#f5f5f5\",\"show_sku\":true,\"optimizedCheckout-headingPrimary-font\":\"Google_Roboto_700\",\"icon--alt-color-hover\":\"#edbb6e\",\"productpage_description_type\":\"full\",\"footer-backgroundColor\":\"#232f3e\",\"navPages-color\":\"#cccccc\",\"productpage_reviews_count\":12,\"optimizedCheckout-step-borderColor\":\"#dddddd\",\"logo_size\":\"original\",\"product_options_column\":3,\"blog_style\":\"featured\",\"fontSizeH2\":\"18\",\"optimizedCheckout-formField-backgroundColor\":\"#ffffff\",\"show_accept_paypal\":true,\"footer-secondary-button-backgroundColor\":\"#edbb6e\",\"paymentbuttons-paypal-shape\":\"rect\",\"color_badge_product_custom_badges\":\"#FFA500\",\"optimizedCheckout-discountBanner-textColor\":\"#FFFFFF\",\"section4\":\"categories_list\",\"pdp-retail-price-label\":\"MSRP:\",\"optimizedCheckout-buttonPrimary-font\":\"Google_Roboto_400\",\"topHeader_banner1\":true,\"paymentbuttons-paypal-label\":\"checkout\",\"productsByCategorySortingTabs-heading-backgroundColor2\":\"#3278f0\",\"banner_half_2_style\":\"\",\"navPages-borderColor\":\"#565656\",\"optimizedCheckout-backgroundImage-size\":\"1000x200\",\"carousel-dot-color\":\"#9c9c9c\",\"button--disabled-backgroundColor\":\"#dcdcdc\",\"header_sticky\":false,\"footer_show_pages\":-1,\"topBanner-backgroundColor\":\"#FF0106\",\"show_subcategories_grid\":false,\"navPages_categoriesMenu\":\"group\",\"blockquote-cite-font-color\":\"#a5a5a5\",\"topBanner-color\":\"#ffffff\",\"banner_half_2_backgroundColor\":\"transparent\",\"optimizedCheckout-formField-shadowColor\":\"#e5e5e5\",\"categorypage_products_per_page\":12,\"banner_one_1_backgroundColor\":\"transparent\",\"button--default-color\":\"#454545\",\"icon--alt-color\":\"#282828\",\"productpage_vertical_thumbnails\":true,\"section7\":\"special_products_columns\",\"specialProductsTab-heading-color\":\"ffffff\",\"fontSizeH6\":\"11\",\"optimizedCheckout-loadingToaster-backgroundColor\":\"#333333\",\"color-textHeading\":\"#282828\",\"show_accept_discover\":true,\"footer_show_links_2\":false,\"specialProductsTab_show_featured\":true,\"container-fill-base\":\"#ffffff\",\"paymentbuttons-paylater-cart-page-add-cart-color\":\"gold\",\"productsByCategorySortingTabs_count\":3,\"optimizedCheckout-formField-errorColor\":\"#d14343\",\"spinner-borderColor-dark\":\"#989898\",\"input-font-color\":\"#454545\",\"footer-secondary-headingColor\":\"#ffffff\",\"select-bg-color\":\"#ffffff\",\"banner3x_2_backgroundColor\":\"transparent\",\"banner_one_1_style\":\"\",\"show_accept_mastercard\":true,\"topHeader-bgColor\":\"#232f3e\",\"style\":\"modern\",\"optimizedCheckout-link-font\":\"Google_Roboto_400\",\"supported_payment_methods\":[\"card\",\"paypal\"],\"carousel-arrow-bgColor\":\"#ffffff\",\"lazyload_mode\":\"lazyload\",\"carousel-title-color\":\"#edbb6e\",\"categorypage_search\":\"show\",\"color_text_product_sale_badges\":\"#ffffff\",\"specialProductsTab_lazy_count\":8,\"show_accept_googlepay\":true,\"card--alternate-borderColor\":\"#ffffff\",\"icon--alt-backgroundColor-hover\":\"transparent\",\"button--disabled-color\":\"#ffffff\",\"carousel-slide0-position\":\"center\",\"color-primaryDark\":\"#2d2d2d\",\"categoriesList_showBanner\":false,\"product_outstock_badge\":true,\"navPages_autoFit\":false,\"color_hover_product_sale_badges\":\"#e74c3c\",\"color-price\":\"#b12704\",\"optimizedCheckout-buttonPrimary-borderColorActive\":\"#989898\",\"navPages-subMenu-backgroundColor\":\"#ffffff\",\"productpage_layout\":\"\",\"topHeader_show\":false,\"color-grey\":\"#4f4f4f\",\"homepage_expand_categories_menu\":true,\"footer_show_contact\":true,\"body-font\":\"Google_Roboto_400\",\"banner_one_2_backgroundColor\":\"transparent\",\"paymentbuttons-bolt-shape\":\"rect\",\"show_quick_payment_buttons\":false,\"optimizedCheckout-step-textColor\":\"#ffffff\",\"button--primary-backgroundColor\":\"#edbb6e\",\"optimizedCheckout-formField-borderColor\":\"#989898\",\"checkRadio-color\":\"#4f4f4f\",\"show_product_dimensions\":false,\"optimizedCheckout-link-color\":\"#4496f6\",\"optimizedCheckout-headingSecondary-font\":\"Google_Roboto_400\",\"headings-font\":\"Google_Roboto_700\",\"paymentbuttons-venmo-checkout-on-top-color\":\"blue\",\"label-backgroundColor\":\"#bfbfbf\",\"button--primary-backgroundColorHover\":\"#ffa700\",\"card-figcaption-button-background\":\"#ffffff\",\"banner_half_3_style\":\"\",\"show_welcome_text\":true,\"button--default-borderColor\":\"#dcdcdc\",\"pdp-non-sale-price-label\":\"Was:\",\"button--disabled-borderColor\":\"#dcdcdc\",\"label-color\":\"#ffffff\",\"specialProductsColumns_show_to
1953p\":true,\"select-arrow-color\":\"#999999\",\"payment_icons_style\":\"dark\",\"optimizedCheckout-logo-size\":\"250x50\",\"navPages_banners\":false,\"categoriesList_subCount\":0,\"footer-color\":\"#dddddd\",\"card-title-color\":\"#0066c0\",\"productsByCategory-heading-color1\":\"#ffffff\",\"carousel_video_mute\":false,\"optimizedCheckout-headingSecondary-color\":\"#2d2d2d\",\"banner_one_2_style\":\"\",\"logo_fontSize\":28,\"alert-backgroundColor\":\"#ffffff\",\"productsByCategorySortingTabs_show_new\":false,\"product_uniform\":true,\"show_shop_by_price\":true,\"default_image_brand\":\"img/BrandDefault.gif\",\"productsByCategorySubcategoriesTabs-heading-color3\":\"#ffffff\",\"paymentbuttons-venmo-cart-page-add-cart-color\":\"blue\",\"productsByCategorySubcategoriesTabs-heading-backgroundColor1\":\"#009688\",\"show_allcategories_menu\":true,\"specialProductsColumns_products_count\":3,\"bannerAfterAddToCartButton\":\"all\",\"section5\":\"bc_banner_home_2\",\"product_list_display_mode\":\"grid\",\"navPages_bg_stretch\":false,\"paymentbanners-cartpage-logo-type\":\"primary\",\"quickSearch-color\":\"#282828\",\"carousel_banners\":false,\"navPages-rootMenu-backgroundColor\":\"#232f3e\",\"optimizedCheckout-link-hoverColor\":\"#002fe1\",\"product_size\":\"608x608\",\"paymentbuttons-paypal-color\":\"gold\",\"homepage_show_carousel\":true,\"optimizedCheckout-body-backgroundColor\":\"#ffffff\",\"section1\":\"bc_banner_home_1\",\"ajax_add_to_cart\":false,\"carousel_vid0\":\"\",\"fontSizeH3\":\"16\",\"color-greyDarkest\":\"#2d2d2d\",\"color_badge_product_sale_badges\":\"#e74c3c\",\"price_ranges\":true,\"container-border-global-color-dark\":\"#454545\",\"color-greyDark\":\"#666666\",\"navPages_animation\":\"fade\",\"header-backgroundColor\":\"#232f3e\",\"banner3x_3_backgroundColor\":\"transparent\",\"optimizedCheckout-buttonSecondary-borderColorHover\":\"#999999\",\"optimizedCheckout-discountBanner-iconColor\":\"#FFFFFF\",\"productpage_thumbnails_count\":5,\"optimizedCheckout-buttonSecondary-borderColor\":\"#dcdcdc\",\"subcategories_menu_vertical\":true,\"optimizedCheckout-loadingToaster-textColor\":\"#ffffff\",\"color-errorLight\":\"#ffdddd\",\"optimizedCheckout-buttonPrimary-colorDisabled\":\"#ffffff\",\"optimizedCheckout-formField-placeholderColor\":\"#999999\",\"navUser-color-hover\":\"#edbb6e\",\"icon-ratingFull\":\"#ffb400\",\"default_image_gift_certificate\":\"img/GiftCertificate.png\",\"paymentbuttons-paylater-checkout-on-top-color\":\"gold\",\"carousel-slide4-position\":\"center\",\"add_to_cart_popup\":\"default\",\"homepage_blog_posts_position\":\"content\",\"social_icon_placement_top\":false,\"productsByCategorySortingTabs_show_reviews\":true,\"section6\":\"bc_banner_home_3\",\"fontSizeRoot\":\"13\",\"footer-secondary-color\":\"#cccccc\",\"brandspage_layout\":\"\",\"manual_content_nav\":false,\"paymentbanners-proddetailspage-color\":\"white\",\"bannerAfterRating\":\"all\",\"instantload\":true,\"blog_size\":\"1193x795\",\"color-warningLight\":\"#fffdea\",\"show_product_weight\":false,\"font-smoothing\":\"antialiased\",\"paymentbuttons-paypal-checkout-payment-color\":\"gold\",\"alsobought_position\":\"wide\",\"optimizedCheckout-buttonSecondary-colorActive\":\"#000000\",\"paymentbuttons-provider-sorting\":[\"paypal\",\"paypal-credit\",\"paypal-venmo\",\"applepay\"],\"optimizedCheckout-orderSummary-backgroundColor\":\"#ffffff\",\"specialProductsTab_init_count\":4,\"masterpass-button-color\":\"black\",\"color-info\":\"#666666\",\"copyright-backgroundColor\":\"#131a22\",\"show_bulk_order_mode\":false,\"show_product_quick_view\":false,\"button--default-borderColorHover\":\"#989898\",\"card--alternate-backgroundColor\":\"#ffffff\",\"banner_half_1_backgroundColor\":\"transparent\",\"hide_content_navigation\":false,\"amazon-button-color\":\"Gold\",\"optimizedCheckout-formChecklist-backgroundColorSelected\":\"#f5f5f5\",\"nl_popup_start\":\"10\",\"show_copyright_footer\":false,\"swatch_option_size\":\"24x24\",\"optimizedCheckout-orderSummary-borderColor\":\"#dddddd\",\"productsByCategorySortingTabs-heading-backgroundColor3\":\"#cd4784\",\"optimizedCheckout-show-logo\":\"custom\",\"carousel-description-color\":\"#000000\",\"optimizedCheckout-step-backgroundColor\":\"#4f4f4f\",\"optimizedCheckout-formChecklist-backgroundColor\":\"#ffffff\",\"footer_show_links_3\":false,\"pdp-price-label\":\"Sale Price\",\"specialProductsColumns_show_featured\":true,\"footer_show_links_4\":false,\"optimizedCheckout-headingPrimary-color\":\"#2d2d2d\",\"banner_one_3_backgroundColor\":\"transparent\",\"color-textBase\":\"#333333\",\"color-warning\":\"#d4cb49\",\"paymentbuttons-paypal-checkout-on-top-color\":\"gold\",\"paymentbuttons-venmo-product-details-page-color\":\"blue\",\"productgallery_size\":\"350x350\",\"blog_count\":5,\"quickSearch-borderColor\":\"#edbb6e\",\"show_accept_applepay\":true,\"alert-color\":\"#4f4f4f\",\"footer_show_newsletter\":true,\"topHeader-color\":\"#cccccc\",\"searchpage_products_per_page\":18,\"optimizedCheckout-formField-inputControlColor\":\"#476bef\",\"optimizedCheckout-contentPrimary-color\":\"#4f4f4f\",\"optimizedCheckout-buttonSecondary-font\":\"Google_Roboto_400\",\"storeName-color\":\"#EDBB6E\",\"optimizedCheckout-backgroundImage\":\"\",\"form-label-font-color\":\"#000000\",\"footer_show_location\":true,\"card-figcaption-button-color\":\"#333333\",\"show_shop_by_brand\":0,\"productsByCategorySubcategoriesTabs-heading-color2\":\"#ffffff\",\"color_badge_product_outstock_badges\":\"#eeeeee\",\"productsByCategorySortingTabs_subcategories\":6,\"navUser_wishlist\":false,\"paymentbuttons-paypal-product-details-page-color\":\"gold\",\"color-greyLightest\":\"#e8e8e8\",\"productsByCategorySortingTabs-heading-color1\":\"#ffffff\",\"productpage_related_products_count\":12,\"color-secondary
1953Dark\":\"#e8e8e8\",\"fb_page\":\"\",\"optimizedCheckout-buttonSecondary-backgroundColorActive\":\"#e5e5e5\",\"color-textLink\":\"#0066c0\",\"paymentbuttons-paypal-checkout-on-top-payment-label\":\"checkout\",\"color-greyLighter\":\"#dfdfdf\",\"carousel_vid3\":\"\",\"paymentbanners-homepage-ratio\":\"8x1\",\"topHeader_address\":true,\"fontSizeH4\":\"14\",\"optimizedCheckout-header-backgroundColor\":\"#f7f7f7\",\"paymentbuttons-paypal-product-details-page-label\":\"checkout\",\"carousel_vid2\":\"\",\"carousel-arrow-color\":\"#989898\",\"productpage_similar_by_views_count\":12,\"card_info\":\"\",\"show_accept_amazon\":true,\"afterpay-button-color\":\"black-mint\",\"productsByCategorySubcategoriesTabs-heading-backgroundColor2\":\"#fe5621\",\"input-bg-color\":\"#ffffff\",\"loadingOverlay-backgroundColor\":\"#ffffff\",\"paymentbanners-proddetailspage-ratio\":\"8x1\",\"color_text_product_outstock_badges\":\"#282828\",\"optimizedCheckout-buttonPrimary-color\":\"#ffffff\",\"navPages-subMenu-separatorColor\":\"#e6e6e6\",\"navPages-color-hover\":\"#ffffff\",\"color-infoLight\":\"#dfdfdf\",\"paymentbanners-homepage-color\":\"white\",\"googlepay-button-color\":\"black\",\"product_sale_badges\":\"topright\",\"category_size\":\"original\",\"navUser-dropdown-borderColor\":\"#dcdcdc\",\"color-greyMedium\":\"#989898\",\"topHeader_banner2\":true,\"footer_show_aboutus\":true,\"optimizedCheckout-formChecklist-borderColor\":\"#cccccc\",\"footer-headingColor\":\"#ffffff\",\"paymentbuttons-paylater-product-details-page-color\":\"gold\",\"default_image_product\":\"img/ProductDefault.gif\",\"image_product_loading\":\"/assets/img/product-loading.gif\",\"optimizedCheckout-buttonPrimary-colorActive\":\"#ffffff\",\"footer-secondary-linkColor-hover\":\"#ffffff\",\"section9\":\"instagram_carousel\",\"color-greyLight\":\"#a5a5a5\",\"optimizedCheckout-logo\":\"\",\"icon-ratingEmpty\":\"#dfdfdf\",\"specialProductsTab-heading-color-inactive\":\"#cccccc\",\"icon-color\":\"#ffffff\",\"icon--alt-backgroundColor\":\"transparent\",\"copyright-color\":\"#999999\",\"checkout-paymentbuttons-paypal-shape\":\"rect\",\"max_shop_by_brand\":10,\"carousel-video-ratio\":\"56.25%\",\"redirect_cart\":false,\"section2\":\"special_products_tabs\",\"overlay-backgroundColor\":\"#2d2d2d\",\"input-border-color-active\":\"#edbb6e\",\"topHeader_account\":true,\"nl_popup_hide\":\"60\",\"show_subcategories_menu\":true,\"container-fill-dark\":\"#f2f2f2\",\"optimizedCheckout-buttonPrimary-backgroundColorDisabled\":\"#cccccc\",\"productsByCategorySortingTabs_show_bestselling\":true,\"optimizedCheckout-buttonPrimary-borderColorHover\":\"#666666\",\"topHeader-icon-color\":\"#FFB400\",\"topBanner-backgroundColorGradient\":\"#FF0106\",\"color-successLight\":\"#d5ffd8\",\"specialProductsTab_more\":true,\"navPages_categoriesItem_text\":\"Categories\",\"color-greyDarker\":\"#454545\",\"productsByCategorySortingTabs_showBanner\":false,\"paymentbuttons-number-of-buttons\":1,\"carousel-slide3-position\":\"center\",\"button--primary-color\":\"#282828\",\"banner3x_1_backgroundColor\":\"transparent\",\"banner_one_3_style\":\"\",\"categoriesGrid-heading-backgroundColor\":\"#00a6ed\",\"color_text_product_custom_badges\":\"#ffffff\",\"color-success\":\"#69d66f\",\"color-white\":\"#ffffff\",\"spinner-borderColor-light\":\"#ffffff\",\"card_showHoverImage\":false,\"optimizedCheckout-header-borderColor\":\"#dddddd\",\"container-border-radius2\":\"4\",\"paymentbuttons-container\":\"medium\",\"productsByCategory-heading-backgroundColor1\":\"#009688\",\"zoom_size\":\"1280x1280\",\"productsByCategorySortingTabs-heading-color2\":\"#ffffff\",\"button-radius2\":\"4\",\"optimizedCheckout-buttonSecondary-backgroundColor\":\"#ffffff\",\"navPages-subMenu-color\":\"#282828\",\"topHeader_phone\":true,\"color-textSecondary--hover\":\"#666666\",\"paymentbuttons-paypal-checkout-payment-size\":\"medium\",\"input-border-color\":\"#dcdcdc\",\"optimizedCheckout-buttonPrimary-backgroundColor\":\"#454545\",\"bannerAfterHeader\":\"all\",\"footer_show_categories\":6,\"banner_half_3_backgroundColor\":\"transparent\",\"footer-linkColor\":\"#dddddd\",\"productsByCategorySortingTabs_catIDs\":\"\",\"bannerBeforeDescription\":\"all\",\"icon-backgroundColor-hover\":\"#ffa500\",\"carousel-bgColor\":\"#ffffff\",\"checkout-paymentbuttons-paypal-color\":\"black\",\"specialProductsTab_show_new\":false,\"carousel-dot-color-active\":\"#edbb6e\",\"color-secondary\":\"#ffffff\",\"categoriesGrid-heading-color\":\"#ffffff\",\"productsByCategorySubcategoriesTabs-heading-color1\":\"#ffffff\",\"bannerBeforeCategory\":\"all\",\"color-whitesBase\":\"#f8f8f8\",\"productpage_custom_fields_tab\":true,\"body-bg\":\"#ffffff\",\"dropdown--quickSearch-backgroundColor\":\"#dcdcdc\",\"navUser-dropdown-backgroundColor\":\"#ffffff\",\"color-primary\":\"#edbb6e\",\"product_image_responsive\":true,\"productsByCategory-heading-backgroundColor2\":\"#fe5621\",\"optimizedCheckout-contentSecondary-font\":\"Google_Roboto_400\",\"card-figcaption-button-borderColor\":\"#dcdcdc\",\"optimizedCheckout-contentPrimary-font\":\"Google_Roboto_400\",\"productsByCategorySortingTabs-heading-backgroundColor1\":\"#097276\",\"csspreload\":\"speedtest\",\"layout\":\"default\",\"productsByCategory-heading-color3\":\"#ffffff\",\"supported_card_type_icons\":[\"american_express\",\"diners\",\"discover\",\"mastercard\",\"visa\"],\"navPages_standard\":false,\"fontSizeH1\":\"22\",\"categorypage_search_subs\":false,\"footer_show_links_1\":false,\"paymentbuttons-paylater-checkout-payment-color\":\"gold\",\"carousel-slide1-position\":\"center\",\"color-black\":\"#000000\",\"footer-secondary-linkColor\":\"#edbb6e\",\"footer-secondary-button-color\":\"#000000\",\"optimizedCheckout-formField-textColor\":\"#333333\",\"brand_main_size\":\"500x250\",\"checkout-paymentbuttons-paypal-size\":\"large\",\"carousel_vid4\":\"\",\"optimizedCheckout-buttonSecondary-colorHover\":\"#333333\",\"show_accept_klarna\":true,\"card-textAlign\":\"left\",\"paymentbanners-cartpage-logo-position\":\"left\",\"optimizedCheckout-contentSecondary-color\":\"#989898\",\"navPages-subMenu-color-hover\":\"#c45500\",\"productsByCategorySortingTabs_active\":\"featured\",\"checkout-paymentbuttons-paypal-label\":\"pay\",\"applePay-button\":\"black\",\"carousel_vid1\":\"\",\"card-title-color-hover\":\"#c45500\",\"optimizedCheckout-buttonPrimary-borderColor\":\"#454545\",\"section3\":\"products_by_category_sorting_tabs\",\"navUser-indicator-backgroundColor\":\"#e74c3c\",\"o
1953ptimizedCheckout-buttonSecondary-borderColorActive\":\"#757575\",\"fontSizeH5\":\"12\",\"productsByCategorySortingTabs-heading-color3\":\"#ffffff\",\"footer-linkColor-hover\":\"#edbb6e\",\"category_card_size\":\"300x300\",\"banner3x_3_style\":\"\",\"productsByCategorySortingTabs_show_featured\":true,\"color-primaryLight\":\"#a5a5a5\",\"topHeader-color-hover\":\"#FFB400\",\"icon-backgroundColor\":\"#edbb6e\",\"specialProductsTab_active_tab\":\"top\",\"carousel-bgColor-opacity2\":\"0\",\"optimizedCheckout-header-textColor\":\"#333333\",\"optimizedCheckout-show-backgroundImage\":true,\"productpage_videos_position\":\"tab\",\"navPages-categoriesItem-backgroundColor\":\"#414c62\",\"show_accept_visa\":true,\"logo-position\":\"left\",\"show_product_reviews_tabs\":false,\"carousel-dot-bgColor\":\"#ffffff\",\"optimizedCheckout-form-textColor\":\"#666666\",\"carousel-slide2-position\":\"center\",\"optimizedCheckout-buttonSecondary-color\":\"#4f4f4f\",\"button--icon-svg-color\":\"#4f4f4f\",\"banner3x_2_style\":\"\",\"input-radius2\":\"4\",\"button--default-colorHover\":\"#666666\",\"checkRadio-backgroundColor\":\"#ffffff\",\"optimizedCheckout-buttonPrimary-backgroundColorHover\":\"#666666\",\"homepage_carousel_style\":\"fullwidth\",\"input-disabled-bg\":\"#ffffff\",\"section8\":\"blog_recent\",\"alert-color-alt\":\"#ffffff\",\"paymentbuttons-venmo-checkout-payment-color\":\"blue\",\"productsByCategorySortingTabs_lazy\":false,\"paymentbanners-cartpage-text-color\":\"black\",\"footer-color-hover\":\"#edbb6e\",\"dropdown--wishList-backgroundColor\":\"#ffffff\",\"container-border-global-color-base\":\"#dcdcdc\",\"productthumb_size\":\"100x100\",\"specialProductsTab_show_top\":true,\"productsByCategorySubcategoriesTabs-heading-backgroundColor3\":\"#00a6ed\",\"button--primary-colorHover\":\"#000000\",\"color-error\":\"#ff7d7d\",\"homepage_blog_posts_count\":1,\"productpage_custom_fields_hide_special\":true,\"color-textSecondary\":\"#a5a5a5\",\"gallery_size\":\"300x300\",\"specialProductsColumns_show_new\":true,\"productsByCategorySortingTabs_products\":8},\"genericError\":\"Oops! Something went wrong.\",\"urls\":{\"home\":\"https://martelelectronics.com/\",\"brands\":\"https://martelelectronics.com/brands/\",\"search\":\"https://martelelectronics.com/search.php\",\"compare\":\"https://martelelectronics.com/compare\",\"sitemap\":\"https://martelelectronics.com/sitemap.php\",\"contact_us_submit\":\"https://martelelectronics.com/pages.php?action=sendContactForm\",\"subscribe\":{\"action\":\"https://martelelectronics.com/subscribe.php\"},\"checkout\":{\"single_address\":\"https://martelelectronics.com/checkout\",\"multiple_address\":\"https://martelelectronics.com/checkout.php?action=multiple\"},\"account\":{\"orders\":{\"all\":\"https://martelelectronics.com/account.php?action=order_status\",\"completed\":\"https://martelelectronics.com/account.php?action=view_orders\",\"save_new_return\":\"https://martelelectronics.com/account.php?action=save_new_return\"},\"returns\":\"https://martelelectronics.com/account.php?action=view_returns\",\"addresses\":\"https://martelelectronics.com/account.php?action=address_book\",\"inbox\":\"https://martelelectronics.com/account.php?action=inbox\",\"send_message\":\"https://martelelectronics.com/account.php?action=send_message\",\"add_address\":\"https://martelelectronics.com/account.php?action=add_shipping_address\",\"update_action\":\"https://martelelectronics.com/account.php?action=update_account\",\"details\":\"https://martelelectronics.com/account.php?action=account_details\",\"recent_items\":\"https://martelelectronics.com/account.php?action=recent_items\",\"index\":\"https://martelelectronics.com/account.php\",\"wishlists\":{\"all\":\"https://martelelectronics.com/wishlist.php\",\"add\":\"https://martelelectronics.com/wishlist.php?action=addwishlist\",\"edit\":\"https://martelelectronics.com/wishlist.php?action=editwishlist\",\"delete\":\"https://martelelectronics.com/wishlist.php?action=deletewishlist\"},\"payment_methods\":{\"all\":\"https://martelelectronics.com/account.php?action=payment_methods\"}},\"auth\":{\"login\":\"https://martelelectronics.com/login.php\",\"check_login\":\"https://martelelectronics.com/login.php?action=check_login\",\"create_account\":\"https://martelelectronics.com/login.php?action=create_account\",\"save_new_account\":\"https://martelelectronics.com/login.php?action=save_new_account\",\"forgot_password\":\"https://martelelectronics.com/login.php?action=reset_password\",\"send_password_email\":\"https://martelelectronics.com/login.php?action=send_password_email\",\"save_new_password\":\"https://martelelectronics.com/login.php?action=save_new_password\",\"logout\":\"https://martelelectronics.com/login.php?action=logout\"},\"cart\":\"https://martelelectronics.com/cart.php\",\"product\":{\"post_review\":\"https://martelelectronics.com/postreview.php\"},\"gift_certificate\":{\"purchase\":\"https://martelelectronics.com/giftcertificates.php\",\"redeem\":\"https://martelelectronics.com/giftcertificates.php?action=redeem\",\"balance\":\"https://martelelectronics.com/giftcertificates.php?action=balance\"},\"rss\":{\"products\":{\"new\":\"https://martelelectronics.com/rss.php?type=rss\",\"new_atom\":\"https://martelelectronics.com/rss.php?type=atom\",\"popular\":\"https://martelelectronics.com/rss.php?action=popularproducts&type=rss\",\"popular_atom\":\"https://martelelectronics.com/rss.php?action=popularproducts&type=atom\",\"featured\":\"https://martelelectronics.com/rss.php?action=featuredproducts&type=rss\",\"featured_atom\":\"https://martelelectronics.com/rss.php?action=featuredproducts&type=atom\",\"search\":\"https://martelelectronics.com/rss.php?action=searchproducts&type=rss\",\"search_atom\":\"https://martelelectronics.com/rss.php?action=searchproducts&type=atom\"},\"blog\":\"https://martelelectronics.com/rss.php?action=newblogs&type=rss\",\"blog_atom\":\"https://martelelectronics.com/rss.php?action=newblogs&type=atom\"}},\"secureBaseUrl\":\"https://martelelectronics.com\",\"cartId\":null,\"template\":\"pages/page\",\"pageType\":\"page\",\"validationDictionaryJSON\":\"{\\\"locale\\\":\\\"en\\\",\\\"locales\\\":{\\\"validation_messages.val
1953id_email\\\":\\\"en\\\",\\\"validation_messages.password\\\":\\\"en\\\",\\\"validation_messages.password_match\\\":\\\"en\\\",\\\"validation_messages.invalid_password\\\":\\\"en\\\",\\\"validation_messages.field_not_blank\\\":\\\"en\\\",\\\"validation_messages.certificate_amount\\\":\\\"en\\\",\\\"validation_messages.certificate_amount_range\\\":\\\"en\\\",\\\"validation_messages.price_min_evaluation\\\":\\\"en\\\",\\\"validation_messages.price_max_evaluation\\\":\\\"en\\\",\\\"validation_messages.price_min_not_entered\\\":\\\"en\\\",\\\"validation_messages.price_max_not_entered\\\":\\\"en\\\",\\\"validation_messages.price_invalid_value\\\":\\\"en\\\",\\\"validation_messages.invalid_gift_certificate\\\":\\\"en\\\"},\\\"translations\\\":{\\\"validation_messages.valid_email\\\":\\\"You must enter a valid email.\\\",\\\"validation_messages.password\\\":\\\"You must enter a password.\\\",\\\"validation_messages.password_match\\\":\\\"Your passwords do not match.\\\",\\\"validation_messages.invalid_password\\\":\\\"Passwords must be at least 7 characters and contain both alphabetic and numeric characters.\\\",\\\"validation_messages.field_not_blank\\\":\\\" field cannot be blank.\\\",\\\"validation_messages.certificate_amount\\\":\\\"You must enter a gift certificate amount.\\\",\\\"validation_messages.certificate_amount_range\\\":\\\"You must enter a certificate amount between [MIN] and [MAX]\\\",\\\"validation_messages.price_min_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_messages.price_max_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_messages.price_min_not_entered\\\":\\\"Min. price is required.\\\",\\\"validation_messages.price_max_not_entered\\\":\\\"Max. price is required.\\\",\\\"validation_messages.price_invalid_value\\\":\\\"Input must be greater than 0.\\\",\\\"validation_messages.invalid_gift_certificate\\\":\\\"Please enter your valid certificate code.\\\"}}\",\"validationFallbackDictionaryJSON\":\"{\\\"locale\\\":\\\"en\\\",\\\"locales\\\":{\\\"validation_fallback_messages.valid_email\\\":\\\"en\\\",\\\"validation_fallback_messages.password\\\":\\\"en\\\",\\\"validation_fallback_messages.password_match\\\":\\\"en\\\",\\\"validation_fallback_messages.invalid_password\\\":\\\"en\\\",\\\"validation_fallback_messages.field_not_blank\\\":\\\"en\\\",\\\"validation_fallback_messages.certificate_amount\\\":\\\"en\\\",\\\"validation_fallback_messages.certificate_amount_range\\\":\\\"en\\\",\\\"validation_fallback_messages.price_min_evaluation\\\":\\\"en\\\",\\\"validation_fallback_messages.price_max_evaluation\\\":\\\"en\\\",\\\"validation_fallback_messages.price_min_not_entered\\\":\\\"en\\\",\\\"validation_fallback_messages.price_max_not_entered\\\":\\\"en\\\",\\\"validation_fallback_messages.price_invalid_value\\\":\\\"en\\\",\\\"validation_fallback_messages.invalid_gift_certificate\\\":\\\"en\\\"},\\\"translations\\\":{\\\"validation_fallback_messages.valid_email\\\":\\\"You must enter a valid email.\\\",\\\"validation_fallback_messages.password\\\":\\\"You must enter a password.\\\",\\\"validation_fallback_messages.password_match\\\":\\\"Your passwords do not match.\\\",\\\"validation_fallback_messages.invalid_password\\\":\\\"Passwords must be at least 7 characters and contain both alphabetic and numeric characters.\\\",\\\"validation_fallback_messages.field_not_blank\\\":\\\" field cannot be blank.\\\",\\\"validation_fallback_messages.certificate_amount\\\":\\\"You must enter a gift certificate amount.\\\",\\\"validation_fallback_messages.certificate_amount_range\\\":\\\"You must enter a certificate amount between [MIN] and [MAX]\\\",\\\"validation_fallback_messages.price_min_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_fallback_messages.price_max_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_fallback_messages.price_min_not_entered\\\":\\\"Min. price is required.\\\",\\\"validation_fallback_messages.price_max_not_entered\\\":\\\"Max. price is required.\\\",\\\"validation_fallback_messages.price_invalid_value\\\":\\\"Input must be greater than 0.\\\",\\\"validation_fallback_messages.invalid_gift_certificate\\\":\\\"Please enter your valid certificate code.\\\"}}\",\"validationDefaultDictionaryJSON\":\"{\\\"locale\\\":\\\"en\\\",\\\"locales\\\":{\\\"validation_default_messages.val
1953id_email\\\":\\\"en\\\",\\\"validation_default_messages.password\\\":\\\"en\\\",\\\"validation_default_messages.password_match\\\":\\\"en\\\",\\\"validation_default_messages.invalid_password\\\":\\\"en\\\",\\\"validation_default_messages.field_not_blank\\\":\\\"en\\\",\\\"validation_default_messages.certificate_amount\\\":\\\"en\\\",\\\"validation_default_messages.certificate_amount_range\\\":\\\"en\\\",\\\"validation_default_messages.price_min_evaluation\\\":\\\"en\\\",\\\"validation_default_messages.price_max_evaluation\\\":\\\"en\\\",\\\"validation_default_messages.price_min_not_entered\\\":\\\"en\\\",\\\"validation_default_messages.price_max_not_entered\\\":\\\"en\\\",\\\"validation_default_messages.price_invalid_value\\\":\\\"en\\\",\\\"validation_default_messages.invalid_gift_certificate\\\":\\\"en\\\"},\\\"translations\\\":{\\\"validation_default_messages.valid_email\\\":\\\"You must enter a valid email.\\\",\\\"validation_default_messages.password\\\":\\\"You must enter a password.\\\",\\\"validation_default_messages.password_match\\\":\\\"Your passwords do not match.\\\",\\\"validation_default_messages.invalid_password\\\":\\\"Passwords must be at least 7 characters and contain both alphabetic and numeric characters.\\\",\\\"validation_default_messages.field_not_blank\\\":\\\"The field cannot be blank.\\\",\\\"validation_default_messages.certificate_amount\\\":\\\"You must enter a gift certificate amount.\\\",\\\"validation_default_messages.certificate_amount_range\\\":\\\"You must enter a certificate amount between [MIN] and [MAX]\\\",\\\"validation_default_messages.price_min_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_default_messages.price_max_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_default_messages.price_min_not_entered\\\":\\\"Min. price is required.\\\",\\\"validation_default_messages.price_max_not_entered\\\":\\\"Max. price is required.\\\",\\\"validation_default_messages.price_invalid_value\\\":\\\"Input must be greater than 0.\\\",\\\"validation_default_messages.invalid_gift_certificate\\\":\\\"Please enter your valid certificate code.\\\"}}\",\"ajaxAddToCartEnterQty\":\"Please enter quantity\",\"bulkOrderEnterQty\":\"Please enter quantity\",\"bulkOrderChooseOptions\":\"Please choose options\",\"txtMinQty\":\"The minimum purchasable quantity is %qty%\",\"txtMaxQty\":\"The maximum purchasable quantity is %qty%\",\"compareAddonLang_compare\":\"Compare\",\"compareAddonLang_quick_view\":\"Quick view\",\"compareAddonLang_remove\":\"Remove\",\"compareAddonLang_clear_all\":\"Clear All\",\"customerRecentlyViewedProductIds\":[],\"customerId\":null,\"graphQLToken\":\"eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJjaWQiOlsxXSwiY29ycyI6WyJodHRwczovL21hcnRlbGVsZWN0cm9uaWNzLmNvbSJdLCJlYXQiOjE3OTA0MjQ2NDAsImlhdCI6MTc5MDI1MTg0MCwiaXNzIjoiQkMiLCJzaWQiOjUwMDAyMiwic3ViIjoiQkMiLCJzdWJfdHlwZSI6MCwidG9rZW5fdHlwZSI6MX0.CO4sztcul2sFgf0qGY_VnSOzY7QCkgwm47ITn8nXkdf8OJleLlSemGP7e-YyUsNf6T87VWBdU-VxlPRd2NtBeA\",\"currencyCode\":\"USD\",\"hidePriceFromGuests\":false,\"showProductRating\":false,\"defaultProductImage\":\"https://cdn11.bigcommerce.com/s-m0o7bk/stencil/dcff4430-4df6-013e-0d67-161549aa1a0e/e/cb041bf0-7fe1-013f-b400-5291dc9d1300/img/ProductDefault.gif\",\"card_show_sku\":true,\"card_show_hover_image\":false,\"show_product_quick_view\":false,\"ajax_add_to_cart\":false,\"product_outstock_badge\":true,\"product_sale_badges\":\"topright\",\"product_sale_label\":\"On Sale\",\"product_custom_badges\":true,\"pdp_price_label\":\"Sale Price\",\"pdp_sale_price_label\":\"Now:\",\"pdp_non_sale_price_label\":\"Was:\",\"pdp_retail_price_label\":\"MSRP:\",\"price_ranges\":true,\"pbcst_show_bestselling\":true,\"pbcst_show_featured\":true,\"pbcst_show_new\":false,\"pbcst_show_reviews\":true,\"pbcst_show_banner\":false,\"pbcst_subcategories\":6,\"pbcst_products\":8,\"loadingImage\":\"https://cdn11.bigcommerce.com/s-m0o7bk/stencil/dcff4430-4df6-013e-0d67-161549aa1a0e/e/cb041bf0-7fe1-013f-b400-5291dc9d1300/img/loading.svg\",\"productLoadingImage\":\"https://cdn11.bigcommerce.com/s-m0o7bk/stencil/dcff4430-4df6-013e-0d67-161549aa1a0e/e/cb041bf0-7fe1-013f-b400-5291dc9d1300/img/product-loading.gif\",\"txtPriceWithTax\":\"Inc. Tax\",\"txtPriceWithoutTax\":\"Ex. Tax\",\"txtLoginForPricing\":\"Log in for pricing\",\"txtQuickView\":\"Quick view\",\"txtCompare\":\"Compare\",\"txtChooseOptions\":\"Choose Options\",\"txtPreOrder\":\"Pre-Order Now\",\"txtAddToCart\":\"Add to Cart\",\"txtQuantity\":\"Quantity:\",\"txtQuantityDecrease\":\"Decrease Quantity of undefined\",\"txtQuantityIncrease\":\"Increase Quantity of undefined\",\"txtBestsellingTab\":\"Be
1953stselling\",\"txtFeaturedTab\":\"Highlighted\",\"txtNewTab\":\"Newest\",\"txtReviewsTab\":\"Top Reviewed\",\"txtSubcategoryHeading\":\"Categories\",\"txtLoadMore\":\"Show More\",\"txtCollapse\":\"Collapse\",\"outOfStockDefaultMessage\":\"Sold Out\",\"configurationId\":\"7f1539f0-5baf-013f-58a6-6e8db226ea8e\"}").load(); 1954 </script>
1954 1955 1956
1956<script type="text/javascript" src="https://cdn11.bigcommerce.com/shared/js/csrf-protection-header-5eeddd5de78d98d146ef4fd71b2aedce4161903e.js"></script>
vendor: 1 bytes, line 1956
1956
1957<script src='https://cdn.userway.org/widget.js?account=999Bb8vQYO&platfAppInstalledSiteId=2653869' ></script>
1957<script data-bc-cookie-consent="2" type="text/plain" src='https://martel-cart-activity.martelsales.workers.dev/storefront.js' defer ></script>
1957<!-- Lime Talk Live Chat start -->
1957<script type="text/javascript"> var limetalk = (function () { var lc = document.createElement("script"); lc.type = "text/javascript"; lc.async = true; lc.src = "//www.limetalk.com/livechat/6eb372120e7c7809be571eda9bc7cb07"; document.getElementsByTagName("head")[0].appendChild(lc); var fnr = function(fn) { var l = limetalk; if (l.readyList) { l.ready(fn); } else { l.rl = l.rl || []; l.rl.push(fn); } }; fnr.ready = fnr; return fnr; })(); </script>
1957 <!-- Lime Talk Live Chat end -->
1957<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
1957<script src="https://www.meggnoapps.com/client/assets/popquick/rmyIzDtbmDihCxr/js/widget.js" async="async"></script>
1957<script nonce="">if (!window.__webpack_nonce__) window.__webpack_nonce__ = '';window.PapaThemesWidgetCategoryIcons_graphQLToken = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJjaWQiOlsxXSwiY29ycyI6WyJodHRwczovL21hcnRlbGVsZWN0cm9uaWNzLmNvbSJdLCJlYXQiOjE3OTA0MjQ2NDAsImlhdCI6MTc5MDI1MTg0MCwiaXNzIjoiQkMiLCJzaWQiOjUwMDAyMiwic3ViIjoiQkMiLCJzdWJfdHlwZSI6MCwidG9rZW5fdHlwZSI6MX0.CO4sztcul2sFgf0qGY_VnSOzY7QCkgwm47ITn8nXkdf8OJleLlSemGP7e-YyUsNf6T87VWBdU-VxlPRd2NtBeA'</script>
1957<script nonce="">if (!window.__webpack_nonce__) window.__webpack_nonce__ = '';window.PapaThemesDinosaurWidgetProductTags_graphQLToken = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJjaWQiOlsxXSwiY29ycyI6WyJodHRwczovL21hcnRlbGVsZWN0cm9uaWNzLmNvbSJdLCJlYXQiOjE3OTA0MjQ2NDAsImlhdCI6MTc5MDI1MTg0MCwiaXNzIjoiQkMiLCJzaWQiOjUwMDAyMiwic3ViIjoiQkMiLCJzdWJfdHlwZSI6MCwidG9rZW5fdHlwZSI6MX0.CO4sztcul2sFgf0qGY_VnSOzY7QCkgwm47ITn8nXkdf8OJleLlSemGP7e-YyUsNf6T87VWBdU-VxlPRd2NtBeA'</script>
1957<script> 1958(function(){ 1959 if(window.__martelQuoteV2Ready && typeof window.__martelQuoteV2Ready === "function"){ 1960 window.__martelQuoteV2Ready("script-manager-reload"); 1961 return; 1962 } 1963 if(window.__martelQuoteV2Loading)return; 1964 window.__martelQuoteV2Loading=true; 1965 window.__martelQuoteV2=true; 1966 window.__martelQuoteV2Version="2026-05-02-instantload-safe-v3"; 1967 1968 var WORKER_URL="https://dc7-quote.martelsales.workers.dev"; 1969 var STORAGE_KEY="martel_saved_quote_items"; 1970 var DRAFT_KEY="martel_quote_customer_draft_v1"; 1971 var WRAP_ID="martelQuoteWrap"; 1972 var STYLE_ID="martelQuoteStyles"; 1973 var QUOTE_MODAL_ID="martelQuoteModal"; 1974 var SAVED_MODAL_ID="martelSavedQuoteModal"; 1975 var INLINE_MSG_ID="martelQuoteInlineMsg"; 1976 var COUNT_ID="martelSavedQuoteCount"; 1977 var MAX_TRIES=40,TRY_DELAY=500; 1978 var ensureTimer=null, ensureActive=false, bootInterval=null, lastUrl=location.href, savedCloseTimer=null; 1979 var mutationObserver=null, mutationQueued=false; 1980 1981 function q(s,r){return (r||document).querySelector(s);} 1982 function qa(s,r){return Array.prototype.slice.call((r||document).querySelectorAll(s));} 1983 function txt(el){return el?(el.textContent||"").trim():"";} 1984 function esc(s){return String(s==null?"":s).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""");} 1985 function n(v,f){var x=parseInt(String(v||"").replace(/[^\d-]/g,""),10);return Number.isFinite(x)?x:f;} 1986 function money(v){return Number.isFinite(v)?"$"+v.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g,","):"-";} 1987 function price(s){if(!s)return NaN;var x=parseFloat(String(s).replace(/[^\d.,-]/g,"").replace(/,/g,""));return Number.isFinite(x)?x:NaN;} 1988 function ready(fn){if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",fn,{once:true});else fn();} 1989 function pageQtyEl(){return q('input[name="qty[]"], input[name="qty"]');} 1990 function isProductPage(){return !!(q('input[name="product_id"]')||q(".productView")||q('[data-cart-item-add]'));} 1991 1992 function productForm(){ 1993 return q('[data-cart-item-add]') || 1994 (q('input[name="product_id"]') && q('input[name="product_id"]').closest("form")) || 1995 q(".productView form") || null; 1996 } 1997 1998 function insertAnchor(){ 1999 var form=productForm(); 2000 return (q("#form-action-addToCart")&&q("#form-action-addToCart").closest(".form-action")) || 2001 (q("#form-action-buyNow")&&q("#form-action-buyNow").closest(".form-action")) || 2002 q("#add-to-cart-wrapper .form-action") || 2003 q('[id^="add-to-cart-wrapper"] .form-action') || 2004 q(".add-to-cart-buttons .form-action") || 2005 q(".productView-options .form-action") || 2006 (q('[data-button-type="add-cart"]')&&q('[data-button-type="add-cart"]').closest(".form-action")) || 2007 (form&&(q(".form-action",form)||q(".add-to-cart-wrapper",form))) || null; 2008 } 2009 2010 function selectedOptions(){ 2011 var form=productForm(); if(!form)return ""; 2012 var out=[]; 2013 qa("select",form).forEach(function(el){ 2014 if(!el.name)return; 2015 var op=el.options&&el.selectedIndex>=0?el.options[el.selectedIndex]:null; 2016 var val=op?txt(op):""; if(!val)return; 2017 var field=el.closest(".form-field"); 2018 var label=field?txt(q(".form-label",field)):""; 2019 out.push(label?label+": "+val:val); 2020 }); 2021 qa('input[type="radio"]:checked,input[type="checkbox"]:checked',form).forEach(function(el){ 2022 var val=el.value||""; if(!val)return; 2023 var field=el.closest(".form-field"); 2024 var label=field?txt(q(".form-label",field)):""; 2025 var next=el.nextElementSibling; 2026 var opt=next&&/label/i.test(next.tagName)?txt(next):""; 2027 out.push(label?label+": "+(opt||val):(opt||val)); 2028 }); 2029 return out.join(" | "); 2030 } 2031 2032 function currentUnitPrice(){ 2033 var sels=[ 2034 ".productView-price .price--withTax", 2035 ".productView-price .price--withoutTax", 2036 ".productView-price .price", 2037 ".price.price--withTax", 2038 ".price.price--withoutTax", 2039 ".productView .price" 2040 ]; 2041 for(var i=0;i<sels.length;i++){ 2042 var el=q(sels[i]); 2043 var v=price(txt(el)); 2044 if(Number.isFinite(v))return v; 2045 } 2046 return NaN; 2047 } 2048 2049 function productData(){ 2050 var title=txt(q(".productView-title"))||txt(q("h1.page-heading"))||document.title.replace(/\s*\|.*$/,"").trim(); 2051 var pid=q('input[name="product_id"]'); 2052 var skuEl=q("[data-product-sku]"); 2053 var sku=skuEl?(skuEl.getAttribute("data-product-sku")||txt(skuEl)):txt(q('.productView-info [data-product-sku], .productSKU, [itemprop="sku"]')); 2054 var qty=pageQtyEl(); qty=qty&&qty.value?qty.value:"1"; 2055 return { 2056 product_id:pid?String(pid.value||"").trim():"", 2057 product_name:title, 2058 product_url:location.href, 2059 sku:String(sku||"").trim(), 2060 quantity:String(Math.max(1,n(qty,1))), 2061 option_summary:selectedOptions(), 2062 unit_price:currentUnitPrice() 2063 }; 2064 } 2065 2066 function productKey(){var p=productData(); return p.product_id||p.product_url||location.href;} 2067 2068 function getItems(){try{var x=JSON.parse(localStorage.getItem(STORAGE_KEY)||"[]");return Array.isArray(x)?x:[];}catch(e){return [];}} 2069 function setItems(items){try{localStorage.setItem(STORAGE_KEY,JSON.stringify(items));return true;}catch(e){return false;}} 2070 function getDraft(){try{var x=JSON.parse(localStorage.getItem(DRAFT_KEY)||"{}");return x&&typeof x==="object"?x:{};}catch(e){return {};}} 2071 function setDraft(d){try{localStorage.setItem(DRAFT_KEY,JSON.stringify(d||{}));return true;}catch(e){return false;}} 2072 function itemKey(i){return [i.product_id||"",i.sku||"",i.option_summary||"",i.product_url||""].join("||");} 2073 function savedLineCount(){return getItems().length;} 2074 function savedUnitCount(){return getItems().reduce(function(sum,it){return sum+Math.max(1,n(it.quantity,1));},0);} 2075 function roundMoney(v){return Math.round(v*100)/100;} 2076 function safeMoneyValue(v){return Number.isFinite(v)?roundMoney(v):null;} 2077 2078 function getItemPricing(item){ 2079 var qty=Math.max(1,n(item&&item.quantity,1)); 2080 var unit=Number.isFinite(item&&item.unit_price)?Number(item.unit_price):NaN; 2081 return {qty:qty,unit_price:safeMoneyValue(unit),line_total:safeMoneyValue(unit*qty)}; 2082 } 2083 2084 function getSavedQuotePricing(items){ 2085 var list=Array.isArray(items)?items:[]; 2086 var subtotal=0, hasPrice=false; 2087 list.forEach(function(item){ 2088 var p=getItemPricing(item); 2089 if(Number.isFinite(p.line_total)){ 2090 subtotal+=p.line_total; 2091 hasPrice=true; 2092 } 2093 }); 2094 subtotal=safeMoneyValue(subtotal); 2095 return { 2096 items_subtotal:hasPrice?subtotal:null, 2097 quote_total:hasPrice?subtotal:null 2098 }; 2099 } 2100 2101 function showInline(msg,type){ 2102 var el=q("#"+INLINE_MSG_ID); if(!el)return; 2103 el.className="martel-quote-inline-msg "+(type==="ok"?"is-ok":"is-err"); 2104 el.textContent=msg||""; 2105 setTimeout(function(){if(el.textContent===msg){el.className="martel-quote-inline-msg";el.textContent="";}},3600); 2106 } 2107 2108 function showSavedMsg(msg,type){ 2109 var el=q("#msqMsg"); if(!el)return; 2110 el.className="msq-msg "+(type==="ok"?"is-ok":"is-err"); 2111 el.textContent=msg||""; 2112 try{if(msg)el.scrollIntoView({behavior:"smooth",block:"nearest"});}catch(e){} 2113 setTimeout(function(){if(el.textContent===msg){el.className="msq-msg";el.textContent="";}},4200); 2114 } 2115 2116 function updateCounts(){ 2117 var count=q("#"+COUNT_ID); 2118 if(count)count.textContent="Saved Quote Items: "+savedLineCount(); 2119 var t=q("#mqSavedBasketCount"); if(t)t.textContent="Saved quote basket: "+savedLineCount(); 2120 var open=q("#mqOpenSavedBtn"); if(open)open.textContent="Open Saved Multi-Item Quote"+(savedLineCount()?" ("+savedLineCount()+")":""); 2121 var email=q("#mqEmailSavedBtn"); if(email)email.textContent="Email Saved Items Quote"+(savedLineCount()?" ("+savedLineCount()+")":""); 2122 } 2123 2124 function saveCurrentProduct(){ 2125 var p=productData(); 2126 if(!p.product_name||!p.product_url){showInline("Could not save this item right now.","err");return false;}
2127 var items=getItems(), k=itemKey(p), found=-1; 2128 for(var i=0;i<items.length;i++){if(itemKey(items[i])===k){found=i;break;}} 2129 if(found>-1){ 2130 items[found].product_id=p.product_id; 2131 items[found].product_name=p.product_name; 2132 items[found].product_url=p.product_url; 2133 items[found].sku=p.sku; 2134 items[found].option_summary=p.option_summary; 2135 items[found].unit_price=safeMoneyValue(p.unit_price); 2136 items[found].quantity=String(Math.max(1,n(items[found].quantity,1))+Math.max(1,n(p.quantity,1))); 2137 items[found].saved_at=new Date().toISOString(); 2138 }else{ 2139 items.push({ 2140 product_id:p.product_id, 2141 product_name:p.product_name, 2142 product_url:p.product_url, 2143 sku:p.sku, 2144 option_summary:p.option_summary, 2145 unit_price:safeMoneyValue(p.unit_price), 2146 quantity:String(Math.max(1,n(p.quantity,1))), 2147 saved_at:new Date().toISOString() 2148 }); 2149 } 2150 if(!setItems(items)){showInline("Could not save this item in your browser.","err");return false;} 2151 updateCounts(); 2152 showInline("Item saved to quote.","ok"); 2153 if(savedOpen()){renderSavedModal();showSavedMsg("Saved quote updated.","ok");} 2154 return true; 2155 } 2156 2157 function addStyles(){ 2158 if(q("#"+STYLE_ID))return; 2159 var css=` 2160#${WRAP_ID}{margin-top:10px} 2161#${WRAP_ID} .martel-quote-btns{display:flex;flex-wrap:wrap;gap:10px} 2162#martelQuoteBtn,#martelSaveQuoteBtn,#martelViewSavedQuoteBtn{display:inline-block;min-width:180px;padding:14px 18px;border-radius:6px;cursor:pointer;font-weight:700;font-size:16px;line-height:1.2;text-align:center} 2163#martelQuoteBtn{border:0;background:#f4c400;color:#111} 2164#martelSaveQuoteBtn{border:1px solid #17365d;background:#17365d;color:#fff} 2165#martelViewSavedQuoteBtn{border:1px solid #999;background:#fff;color:#111} 2166#martelViewSavedQuoteBtn:hover{background:#f7f7f7} 2167#${COUNT_ID}{flex:0 0 100%;margin:2px 0 0 0;font-size:13px;font-weight:700;color:#17365d;line-height:1.25;text-align:left} 2168.martel-quote-inline-msg{margin-top:6px;min-height:18px;font-size:13px;line-height:1.35} 2169.martel-quote-inline-msg.is-ok,.mq-ok,.msq-msg.is-ok{color:#0a6b2d} 2170.martel-quote-inline-msg.is-err,.mq-err,.msq-msg.is-err{color:#b42318} 2171#${QUOTE_MODAL_ID},#${SAVED_MODAL_ID}{position:fixed;inset:0;z-index:99999;background:rgba(0,0,0,.55);display:none;align-items:center;justify-content:center;padding:16px} 2172#${QUOTE_MODAL_ID} .mq-box{background:#fff;width:100%;max-width:960px;border-radius:16px;overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,.28);box-sizing:border-box;max-height:92vh;display:flex;flex-direction:column} 2173#${QUOTE_MODAL_ID} .mq-head{background:#17365d;color:#fff;padding:18px 22px 14px;display:flex;justify-content:space-between;align-items:flex-start;gap:12px} 2174#${QUOTE_MODAL_ID} .mq-head-left{min-width:0} 2175#${QUOTE_MODAL_ID} .mq-title{font-size:34px;font-weight:800;line-height:1.1;margin:0 0 6px;color:#fff} 2176#${QUOTE_MODAL_ID} .mq-sub{font-size:14px;line-height:1.45;margin:0;color:#dbe7f7} 2177#${QUOTE_MODAL_ID} .mq-saved-top{font-size:13px;font-weight:700;color:#dbe7f7;margin-top:6px} 2178#${QUOTE_MODAL_ID} .mq-close{background:rgba(255,255,255,.12);border:0;color:#fff;border-radius:999px;font-size:26px;line-height:1;cursor:pointer;width:40px;height:40px;display:flex;align-items:center;justify-content:center;flex:0 0 auto} 2179#${QUOTE_MODAL_ID} .mq-content{padding:18px 18px 16px;overflow:auto} 2180#${QUOTE_MODAL_ID} .mq-grid-top{display:grid;grid-template-columns:1.2fr .9fr;gap:12px;margin-bottom:12px} 2181#${QUOTE_MODAL_ID} .mq-card{background:#f8fafc;border:1px solid #dbe4ef;border-radius:10px;padding:14px} 2182#${QUOTE_MODAL_ID} .mq-card-title,#${QUOTE_MODAL_ID} .mq-section-title,#${SAVED_MODAL_ID} .msq-section-title{font-size:13px;font-weight:800;color:#17365d;margin:0 0 10px} 2183#${QUOTE_MODAL_ID} .mq-item-name{font-size:15px;font-weight:800;line-height:1.35;color:#17365d;margin-bottom:6px} 2184#${QUOTE_MODAL_ID} .mq-item-meta,#${SAVED_MODAL_ID} .msq-meta{font-size:13px;line-height:1.45;color:#444;word-break:break-word} 2185#${QUOTE_MODAL_ID} .mq-est-row{display:flex;justify-content:space-between;gap:16px;font-size:13px;line-height:1.6;color:#445166} 2186#${QUOTE_MODAL_ID} .mq-est-row strong{color:#17365d} 2187#${QUOTE_MODAL_ID} .mq-est-note{font-size:11px;color:#66758a;margin-top:6px;line-height:1.45} 2188#${QUOTE_MODAL_ID} .mq-form-grid,#${SAVED_MODAL_ID} .msq-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px} 2189#${QUOTE_MODAL_ID} .mq-field-full,#${SAVED_MODAL_ID} .msq-full{grid-column:1 / -1} 2190#${QUOTE_MODAL_ID} .mq-section-box,#${SAVED_MODAL_ID} .msq-section-box{border:1px solid #dbe4ef;border-radius:10px;background:#f8fafc;padding:14px 14px 12px} 2191#${SAVED_MODAL_ID} .msq-section-box{background:#fff} 2192#${QUOTE_MODAL_ID} .mq-checkbox-row,#${SAVED_MODAL_ID} .msq-checkbox-row{display:flex;align-items:center;gap:8px;margin:0 0 10px;font-size:13px;font-weight:700;color:#17365d} 2193#${QUOTE_MODAL_ID} .mq-checkbox-row input,#${SAVED_MODAL_ID} .msq-checkbox-row input{width:auto;margin:0} 2194#${QUOTE_MODAL_ID} label{display:block;font-size:13px;font-weight:800;color:#17365d;margin:0 0 5px} 2195#${SAVED_MODAL_ID} .msq-field label{display:block;font-size:13px;font-weight:700;color:#222;margin:0 0 5px} 2196#${QUOTE_MODAL_ID} input,#${QUOTE_MODAL_ID} textarea,#${SAVED_MODAL_ID} .msq-field input,#${SAVED_MODAL_ID} .msq-field textarea{width:100%;box-sizing:border-box;padding:10px 12px;border:1px solid #ccc;border-radius:8px;font-size:14px;background:#fff} 2197#${QUOTE_MODAL_ID} textarea,#${SAVED_MODAL_ID} .msq-field textarea{min-height:90px;resize:vertical} 2198#${QUOTE_MODAL_ID} .mq-inline-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:4px} 2199#${QUOTE_MODAL_ID} .mq-add,#${QUOTE_MODAL_ID} .mq-open,#${QUOTE_MODAL_ID} .mq-continue,#${QUOTE_MODAL_ID} .mq-email-saved,#${QUOTE_MODAL_ID} .mq-send,#${SAVED_MODAL_ID} .msq-clear,#${SAVED_MODAL_ID} .msq-update,#${SAVED_MODAL_ID} .msq-submit,#${SAVED_MODAL_ID} .msq-close-btn{border-radius:8px;padding:11px 14px;font-weight:700;cursor:pointer} 2200#${QUOTE_MODAL_ID} .mq-add,#${QUOTE_MODAL_ID} .mq-open{background:#eef4fb;color:#17365d;border:1px solid #cdd8e7} 2201#${QUOTE_MODAL_ID} .mq-email-saved{background:#17365d;color:#fff;border:1px solid #17365d} 2202#${QUOTE_MODAL_ID} .mq-continue{background:#fff;border:1px solid #cfd8e3;color:#445166} 2203#${QUOTE_MODAL_ID} .mq-actions{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:10px} 2204#${QUOTE_MODAL_ID} .mq-msg{flex:1 1 auto;font-size:13px;line-height:1.45;word-break:break-word;min-height:18px} 2205#${QUOTE_MODAL_ID} .mq-send,#${SAVED_MODAL_ID} .msq-submit{background:#f4c400;color:#111;border:0} 2206#${SAVED_MODAL_ID} .msq-box{background:#fff;width:100%;max-width:980px;border-radius:10px;padding:20px;box-sizing:border-box;max-height:92vh;display:flex;flex-direction:column} 2207#${SAVED_MODAL_ID} .msq-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px} 2208#${SAVED_MODAL_ID} .msq-title{font-size:24px;font-weight:700;line-height:1.2;margin:0;color:#111} 2209#${SAVED_MODAL_ID} .msq-close{background:none;border:0;font-size:28px;line-height:1;cursor:pointer;color:#444;padding:0 0 4px 8px} 2210#${SAVED_MODAL_ID} .msq-sub{font-size:14px;color:#444;margin:0 0 14px} 2211#${SAVED_MODAL_ID} .msq-body{overflow:auto;padding-right:4px} 2212#${SAVED_MODAL_ID} .msq-empty{padding:18px;border:1px solid #e6e6e6;border-radius:8px;background:#fafafa;font-size:15px;color:#444} 2213#${SAVED_MODAL_ID} .msq-item{display:grid;grid-template-columns:minmax(0,1fr) 170px;gap:16px;padding:16px;border:1px solid #e3e3e3;border-radius:8px;margin-bottom:12px} 2214#${SAVED_MODAL_ID} .msq-item-title{font-size:17px;font-weight:700;line-height:1.35;margin-bottom:6px} 2215#${SAVED_MODAL_ID} .msq-item-title a{color:#17365d;text-decoration:none} 2216#${SAVED_MODAL_ID}
2216 .msq-controls{display:flex;flex-direction:column;gap:8px;align-items:stretch;justify-content:center} 2217#${SAVED_MODAL_ID} .msq-controls label{display:block;font-size:12px;font-weight:700;color:#333;margin:0} 2218#${SAVED_MODAL_ID} .msq-qty{width:100%;box-sizing:border-box;padding:10px 12px;border:1px solid #ccc;border-radius:6px;font-size:14px} 2219#${SAVED_MODAL_ID} .msq-remove,#${SAVED_MODAL_ID} .msq-clear{background:#fff;border:1px solid #b42318;color:#b42318} 2220#${SAVED_MODAL_ID} .msq-update{background:#17365d;border:0;color:#fff} 2221#${SAVED_MODAL_ID} .msq-footer{border-top:1px solid #e6e6e6;padding-top:14px;margin-top:6px;overflow:auto} 2222#${SAVED_MODAL_ID} .msq-summary{font-size:14px;font-weight:700;color:#17365d;margin-bottom:10px} 2223#${SAVED_MODAL_ID} .msq-msg{min-height:18px;font-size:13px;line-height:1.35;margin-bottom:10px;word-break:break-word} 2224#${SAVED_MODAL_ID} .msq-customer{border:1px solid #dbe4ef;border-radius:8px;padding:14px;margin-bottom:12px;background:#f8fafc} 2225#${SAVED_MODAL_ID} .msq-customer-title{font-size:16px;font-weight:700;color:#111;margin-bottom:10px} 2226#${SAVED_MODAL_ID} .msq-actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end} 2227#${SAVED_MODAL_ID} .msq-close-btn{background:#f3f3f3;border:0;color:#222} 2228@media (max-width:760px){ 2229 #${WRAP_ID} .martel-quote-btns,#${QUOTE_MODAL_ID} .mq-inline-actions,#${SAVED_MODAL_ID} .msq-actions{flex-direction:column} 2230 #martelQuoteBtn,#martelSaveQuoteBtn,#martelViewSavedQuoteBtn,#${QUOTE_MODAL_ID} .mq-send,#${QUOTE_MODAL_ID} .mq-add,#${QUOTE_MODAL_ID} .mq-open,#${QUOTE_MODAL_ID} .mq-continue,#${QUOTE_MODAL_ID} .mq-email-saved,#${SAVED_MODAL_ID} .msq-clear,#${SAVED_MODAL_ID} .msq-update,#${SAVED_MODAL_ID} .msq-submit,#${SAVED_MODAL_ID} .msq-close-btn{width:100%;min-width:0} 2231 #${QUOTE_MODAL_ID} .mq-grid-top,#${QUOTE_MODAL_ID} .mq-form-grid,#${SAVED_MODAL_ID} .msq-grid,#${SAVED_MODAL_ID} .msq-item{grid-template-columns:1fr} 2232 #${QUOTE_MODAL_ID} .mq-actions{flex-direction:column;align-items:stretch} 2233} 2234@media (max-width:640px){ 2235 #${QUOTE_MODAL_ID} .mq-head{padding:16px} 2236 #${QUOTE_MODAL_ID} .mq-title{font-size:28px} 2237 #${QUOTE_MODAL_ID} .mq-content{padding:14px} 2238}`; 2239 var st=document.createElement("style"); 2240 st.id=STYLE_ID; 2241 st.appendChild(document.createTextNode(css)); 2242 document.head.appendChild(st); 2243 } 2244 2245 function quoteOpen(){var m=q("#"+QUOTE_MODAL_ID);return !!(m&&m.style.display==="flex");} 2246 function savedOpen(){var m=q("#"+SAVED_MODAL_ID);return !!(m&&m.style.display==="flex");} 2247 function closeQuote(){var m=q("#"+QUOTE_MODAL_ID);if(!m)return;m.style.display="none";if(!savedOpen())document.body.style.overflow="";} 2248 function closeSaved(){clearTimeout(savedCloseTimer);savedCloseTimer=null;var m=q("#"+SAVED_MODAL_ID);if(!m)return;m.style.display="none";if(!quoteOpen())document.body.style.overflow="";} 2249 2250 function fieldSuffix(k){ 2251 return {name:"Name",email:"Email",second_email:"SecondEmail",company:"Company",phone:"Phone",quantity:"Qty",notes:"Notes",shipping_name:"ShipName",shipping_company:"ShipCompany",shipping_address1:"ShipAddress1",shipping_address2:"ShipAddress2",shipping_city:"ShipCity",shipping_state:"ShipState",shipping_zip:"ShipZip",billing_name:"BillName",billing_company:"BillCompany",billing_address1:"BillAddress1",billing_address2:"BillAddress2",billing_city:"BillCity",billing_state:"BillState",billing_zip:"BillZip"}[k]||k; 2252 } 2253 2254 function setFormValues(prefix,draft){ 2255 draft=draft||{}; 2256 ["name","email","second_email","company","phone","quantity","notes","shipping_name","shipping_company","shipping_address1","shipping_address2","shipping_city","shipping_state","shipping_zip","billing_name","billing_company","billing_address1","billing_address2","billing_city","billing_state","billing_zip"].forEach(function(k){ 2257 var el=q("#"+prefix+fieldSuffix(k));if(el&&typeof draft[k]!=="undefined")el.value=draft[k]; 2258 }); 2259 var same=q("#"+prefix+"BillingSame"); 2260 if(same){ 2261 if(Object.prototype.hasOwnProperty.call(draft,"billing_same_as_shipping"))same.checked=!!draft.billing_same_as_shipping; 2262 toggleBilling(prefix); 2263 } 2264 } 2265 2266 function formData(prefix){ 2267 function v(id){var el=q("#"+prefix+id);return el?String(el.value||"").trim():"";} 2268 var same=q("#"+prefix+"BillingSame"); 2269 var data={ 2270 name:v("Name"),email:v("Email"),second_email:v("SecondEmail"),company:v("Company"),phone:v("Phone"),quantity:v("Qty")||"1",notes:v("Notes"), 2271 shipping_name:v("ShipName"),shipping_company:v("ShipCompany"),shipping_address1:v("ShipAddress1"),shipping_address2:v("ShipAddress2"),shipping_city:v("ShipCity"),shipping_state:v("ShipState"),shipping_zip:v("ShipZip"), 2272 billing_same_as_shipping:!!(same&&same.checked),billing_name:v("BillName"),billing_company:v("BillCompany"),billing_address1:v("BillAddress1"),billing_address2:v("BillAddress2"),billing_city:v("BillCity"),billing_state:v("BillState"),billing_zip:v("BillZip") 2273 }; 2274 setDraft(data); 2275 return data; 2276 } 2277 2278 function bindDraft(prefix,root){ 2279 qa("input,textarea",root).forEach(function(el){ 2280 el.addEventListener("input",function(){formData(prefix)}); 2281 el.addEventListener("change",function(){formData(prefix)}); 2282 }); 2283 } 2284 2285 function toggleBilling(prefix){ 2286 var cb=q("#"+prefix+"BillingSame"), sec=q("#"+prefix+"BillingSection"); 2287 if(cb&&sec)sec.style.display=cb.checked?"none":"block"; 2288 } 2289 2290 function applyDraftQuote(){ 2291 var d=getDraft(), m=buildQuoteModal(), qty=q("#mqQty",m), p=productData(); 2292 setFormValues("mq",d); 2293 if(qty&&(!qty.value||qty.value==="0"))qty.value=p.quantity||"1"; 2294 toggleBilling("mq"); 2295 } 2296 2297 function applyDraftSaved(){ 2298 var d=getDraft(), m=buildSavedModal(); 2299 setFormValues("msq",d); 2300 toggleBilling("msq"); 2301 } 2302 2303 function validate(data,saved){ 2304 if(!data.name)return "Please enter your full name."; 2305 if(!data.email)return "Please enter your email."; 2306 if(!data.shipping_address1||!data.shipping_city||!data.shipping_state||!data.shipping_zip)return "Please complete the shipping address."; 2307 if(!data.billing_same_as_shipping&&(!data.billing_address1||!data.billing_city||!data.billing_state||!data.billing_zip))return "Please complete the billing address."; 2308 if(!saved&&(!data.quantity||n(data.quantity,0)<1))return "Please enter a valid quantity."; 2309 return ""; 2310 } 2311 2312 function commonPayload(d){ 2313 return { 2314 name:d.name,email:d.email,second_email:d.second_email,company:d.company,phone:d.phone,notes:d.notes, 2315 shipping_name:d.shipping_name||d.name,shipping_company:d.shipping_company||d.company,shipping_address1:d.shipping_address1,shipping_address2:d.shipping_address2,shipping_city:d.shipping_city,shipping_state:d.shipping_state,shipping_zip:d.shipping_zip, 2316 billing_same_as_shipping:!!d.billing_same_as_shipping,billing_name:d.billing_name,billing_company:d.billing_company,billing_address1:d.billing_address1,billing_address2:d.billing_address2,billing_city:d.billing_city,billing_state:d.billing_state,billing_zip:d.billing_zip 2317 }; 2318 } 2319 2320 function successText(base,ref,confirm){ 2321 var out=[base]; 2322 if(ref)out.push("Reference: "+ref+"."); 2323 if(confirm===true)out.push("Confirmation email sent."); 2324 else if(confirm===false)out.push("Confirmation email could not be sent."); 2325 return out.join(" "); 2326 } 2327 2328 function buildQuoteModal(){ 2329 var existing=q("#"+QUOTE_MODAL_ID); if(existing)return existing; 2330 var modal=document.createElement("div"); 2331 modal.id=QUOTE_MODAL_ID; 2332 modal.innerHTML=`<div class="mq-box" role="dialog" aria-modal="true" aria-label="Build or email quote"> 2333 <div class="mq-head"><div class="mq-head-left"><h2 class="mq-title">Build or Email Quote</h2><p class="mq-sub">Email this product, or add it to your saved quote basket.</p><div class="mq-saved-top" id="mqSavedBasketCount">Saved quote basket: 0</div></div><button type="button" class="mq-close" aria-label="Close">×</button></div> 2334 <div class="mq-content"> 2335 <div class="mq-grid-top"> 2336 <div class="mq-card"><div class="mq-card-title">Current Item</div><div class="mq-item-name" id="mqItemName"></div><div class="mq-item-meta" id="mqItemMeta"></div></div> 2337 <div class="mq-card"><div class="mq-card-title">Quote Estimate</div><div class="mq-est-row"><span>Items subtotal</span><strong id="mqSubtotal">-</strong></div><div class="mq-est-row"><span>Shipping estimate</span><strong id="mqShipping">-</strong></div><div class="mq-est-row"><span>Estimated total</span><strong id="mqTotal">-</strong></div><div class="mq-est-note">Shipping estimate only.</div></div> 2338 </div> 2339 <form id="martelQuoteForm" novalidate> 2340 <div class="mq-form-grid"> 2341 <div><label for="mqName">Full Name</label><input id="mqName" type="text"></div> 2342 <div><label for="mqEmail">Primary Email</label><input id="mqEmail" type="email"></div> 2343 <div><label for="mqSecondEmail">Second Email</label><input id="mqSecondEmail" type="email"></div> 2344 <div><label for="mqCompany">Company / Department</label><input id="mqCompany" type="text"></div> 2345 <div><label for="mqPhone">Phone</label><input id="mqPhone" type="text"></div> 2346 <div><label for="mqQty">Quantity</label><input id="mqQty" type="number" min="1" step="1" value="1"></div> 2347 <div class="mq-field-full"><div class="mq-section-title">Shipping Address</div><div class="mq-section-box"><div class="mq-form-grid"> 2348 <div><label for="mqShipName">Shipping Contact Name</label><input id="mqShipName" type="text"></div> 2349 <div><label for="mqShipCompany">Shipping Company</label><input id="mqShipCompany" type="text"></div> 2350 <div class="mq-field-full"><label for="mqShipAddress1">Shipping Address Line 1</label><input id="mqShipAddress1" type="text"></div> 2351 <div class="mq-field-full"><label for="mqShipAddress2">Shipping Address Line 2</label><input id="mqShipAddress2" type="text"></div> 2352 <div><label for="mqShipCity">City</label><input id="mqShipCity" type="text"></div> 2353 <div><label for="mqShipState">State</label>
2353<input id="mqShipState" type="text"></div> 2354 <div><label for="mqShipZip">ZIP</label><input id="mqShipZip" type="text"></div> 2355 </div></div></div> 2356 <div class="mq-field-full"><div class="mq-section-title">Billing Address</div><div class="mq-section-box"> 2357 <label class="mq-checkbox-row"><input id="mqBillingSame" type="checkbox" checked> Billing same as shipping</label> 2358 <div id="mqBillingSection" style="display:none;"><div class="mq-form-grid"> 2359 <div><label for="mqBillName">Billing Contact Name</label><input id="mqBillName" type="text"></div> 2360 <div><label for="mqBillCompany">Billing Company</label><input id="mqBillCompany" type="text"></div> 2361 <div class="mq-field-full"><label for="mqBillAddress1">Billing Address Line 1</label><input id="mqBillAddress1" type="text"></div> 2362 <div class="mq-field-full"><label for="mqBillAddress2">Billing Address Line 2</label><input id="mqBillAddress2" type="text"></div> 2363 <div><label for="mqBillCity">City</label><input id="mqBillCity" type="text"></div> 2364 <div><label for="mqBillState">State</label><input id="mqBillState" type="text"></div> 2365 <div><label for="mqBillZip">ZIP</label><input id="mqBillZip" type="text"></div> 2366 </div></div> 2367 </div></div> 2368 <div class="mq-field-full"><label for="mqNotes">Notes</label><textarea id="mqNotes" placeholder="Add anything to include on the quote."></textarea></div> 2369 </div> 2370 <div class="mq-inline-actions"> 2371 <button type="button" class="mq-add" id="mqAddToSavedBtn">Add to Multi-Item Quote</button> 2372 <button type="button" class="mq-email-saved" id="mqEmailSavedBtn">Email Saved Items Quote</button> 2373 <button type="button" class="mq-open" id="mqOpenSavedBtn">Open Saved Multi-Item Quote</button> 2374 <button type="button" class="mq-continue" id="mqContinueBtn">Continue Shopping</button> 2375 </div> 2376 <div class="mq-actions"><div class="mq-msg" id="martelQuoteMsg"></div><button type="submit" class="mq-send">Email This Product</button></div> 2377 </form> 2378 </div></div>`; 2379 document.body.appendChild(modal); 2380 q(".mq-close",modal).addEventListener("click",closeQuote); 2381 q("#mqContinueBtn",modal).addEventListener("click",closeQuote); 2382 q("#mqBillingSame",modal).addEventListener("change",function(){toggleBilling("mq");formData("mq")}); 2383 modal.addEventListener("click",function(e){if(e.target===modal)closeQuote()}); 2384 q("#martelQuoteForm",modal).addEventListener("submit",submitQuote); 2385 q("#mqAddToSavedBtn",modal).addEventListener("click",function(){ 2386 var qel=pageQtyEl(), qty=q("#mqQty",modal); 2387 if(qel&&qty)qel.value=qty.value||"1"; 2388 formData("mq"); 2389 if(saveCurrentProduct())updateCounts(); 2390 }); 2391 q("#mqEmailSavedBtn",modal).addEventListener("click",submitSavedQuoteFromQuoteModal); 2392 q("#mqOpenSavedBtn",modal).addEventListener("click",function(){formData("mq");closeQuote();openSavedModal();}); 2393 q("#mqQty",modal).addEventListener("input",function(){hydrateQuoteModal();formData("mq");}); 2394 bindDraft("mq",modal); 2395 return modal; 2396 } 2397 2398 function hydrateQuoteModal(){ 2399 var modal=buildQuoteModal(), p=productData(), qtyEl=q("#mqQty",modal); 2400 var qty=Math.max(1,n(qtyEl&&qtyEl.value?qtyEl.value:p.quantity,1)); 2401 var sub=Number.isFinite(p.unit_price)?p.unit_price*qty:NaN; 2402 var ship=Number.isFinite(sub)?(sub>=99?0:12):NaN; 2403 var total=Number.isFinite(sub)&&Number.isFinite(ship)?sub+ship:NaN; 2404 var meta=[]; 2405 if(q("#mqItemName",modal))q("#mqItemName",modal).textContent=p.product_name||"Current product"; 2406 if(p.sku)meta.push("SKU: "+p.sku); 2407 meta.push("Qty: "+qty); 2408 if(Number.isFinite(p.unit_price))meta.push("Price: "+money(p.unit_price)); 2409 if(p.option_summary)meta.push(p.option_summary); 2410 if(q("#mqItemMeta",modal))q("#mqItemMeta",modal).textContent=meta.join(" | "); 2411 if(q("#mqSubtotal",modal))q("#mqSubtotal",modal).textContent=money(sub); 2412 if(q("#mqShipping",modal))q("#mqShipping",modal).textContent=Number.isFinite(ship)?(ship===0?"Free":money(ship)):"-"; 2413 if(q("#mqTotal",modal))q("#mqTotal",modal).textContent=money(total); 2414 updateCounts(); 2415 } 2416 2417 function buildSavedModal(){ 2418 var existing=q("#"+SAVED_MODAL_ID); if(existing)return existing; 2419 var modal=document.createElement("div"); 2420 modal.id=SAVED_MODAL_ID; 2421 modal.innerHTML=`<div class="msq-box" role="dialog" aria-modal="true" aria-label="Saved quote items"> 2422 <div class="msq-head"><h2 class="msq-title">Saved Quote Items</h2><button type="button" class="msq-close" aria-label="Close">×</button></div> 2423 <p class="msq-sub">Review saved items. Update quantities, remove items, clear the list, or submit the full quote.</p> 2424 <div class="msq-body" id="msqBody"></div> 2425 <div class="msq-footer"> 2426 <div class="msq-summary" id="msqSummary"></div> 2427 <div class="msq-msg" id="msqMsg"></div> 2428 <div class="msq-customer"> 2429 <div class="msq-customer-title">Your Information</div> 2430 <div class="msq-grid"> 2431 <div class="msq-field"><label for="msqName">Full Name</label><input id="msqName" type="text"></div> 2432 <div class="msq-field"><label for="msqEmail">Primary Email</label><input id="msqEmail" type="email"></div> 2433 <div class="msq-field"><label for="msqSecondEmail">Second Email</label><input id="msqSecondEmail" type="email"></div> 2434 <div class="msq-field"><label for="msqCompany">Company / Department</label><input id="msqCompany" type="text"></div> 2435 <div class="msq-field"><label for="msqPhone">Phone</label><input id="msqPhone" type="text"></div> 2436 <div class="msq-field msq-full"><div class="msq-section-title">Shipping Address</div><div class="msq-section-box"><div class="msq-grid"> 2437 <div class="msq-field"><label for="msqShipName">Shipping Contact Name</label><input id="msqShipName" type="text"></div> 2438 <div class="msq-field"><label for="msqShipCompany">Shipping Company</label><input id="msqShipCompany" type="text"></div> 2439 <div class="msq-field msq-full"><label for="msqShipAddress1">Shipping Address Line 1</label><input id="msqShipAddress1" type="text"></div> 2440 <div class="msq-field msq-full"><label for="msqShipAddress2">Shipping Address Line 2</label><input id="msqShipAddress2" type="text"></div> 2441 <div class="msq-field"><label for="msqShipCity">City</label><input id="msqShipCity" type="text"></div> 2442 <div class="msq-field"><label for="msqShipState">State</label>
2442<input id="msqShipState" type="text"></div> 2443 <div class="msq-field"><label for="msqShipZip">ZIP</label><input id="msqShipZip" type="text"></div> 2444 </div></div></div> 2445 <div class="msq-field msq-full"><div class="msq-section-title">Billing Address</div><div class="msq-section-box"> 2446 <label class="msq-checkbox-row"><input id="msqBillingSame" type="checkbox" checked> Billing same as shipping</label> 2447 <div id="msqBillingSection" style="display:none;"><div class="msq-grid"> 2448 <div class="msq-field"><label for="msqBillName">Billing Contact Name</label><input id="msqBillName" type="text"></div> 2449 <div class="msq-field"><label for="msqBillCompany">Billing Company</label><input id="msqBillCompany" type="text"></div> 2450 <div class="msq-field msq-full"><label for="msqBillAddress1">Billing Address Line 1</label><input id="msqBillAddress1" type="text"></div> 2451 <div class="msq-field msq-full"><label for="msqBillAddress2">Billing Address Line 2</label><input id="msqBillAddress2" type="text"></div> 2452 <div class="msq-field"><label for="msqBillCity">City</label><input id="msqBillCity" type="text"></div> 2453 <div class="msq-field"><label for="msqBillState">State</label><input id="msqBillState" type="text"></div> 2454 <div class="msq-field"><label for="msqBillZip">ZIP</label><input id="msqBillZip" type="text"></div> 2455 </div></div> 2456 </div></div> 2457 <div class="msq-field msq-full"><label for="msqNotes">Notes</label><textarea id="msqNotes" placeholder="Add anything to include on the quote."></textarea></div> 2458 </div> 2459 </div> 2460 <div class="msq-actions"> 2461 <button type="button" class="msq-clear">Clear All</button> 2462 <button type="button" class="msq-update">Save Changes</button> 2463 <button type="button" class="msq-submit">Submit Saved Quote</button> 2464 <button type="button" class="msq-close-btn">Close</button> 2465 </div> 2466 </div></div>`; 2467 document.body.appendChild(modal); 2468 q(".msq-close",modal).addEventListener("click",closeSaved); 2469 q(".msq-close-btn",modal).addEventListener("click",closeSaved); 2470 q("#msqBillingSame",modal).addEventListener("change",function(){toggleBilling("msq");formData("msq")}); 2471 modal.addEventListener("click",function(e){if(e.target===modal)closeSaved()}); 2472 q(".msq-update",modal).addEventListener("click",function(e){e.preventDefault();e.stopPropagation();try{saveSavedChanges()}catch(err){console.error(err);showSavedMsg("Could not save your changes right now.","err")}}); 2473 q(".msq-clear",modal).addEventListener("click",function(e){e.preventDefault();e.stopPropagation();try{clearSaved()}catch(err){console.error(err);showSavedMsg("Could not clear saved items right now.","err")}}); 2474 q(".msq-submit",modal).addEventListener("click",function(e){e.preventDefault();e.stopPropagation();try{submitSavedQuote()}catch(err){console.error(err);showSavedMsg("Could not submit your saved quote right now.","err")}}); 2475 q("#msqBody",modal).addEventListener("click",function(e){ 2476 var btn=e.target.closest(".msq-remove");if(!btn)return; 2477 var row=btn.closest(".msq-item");if(!row)return; 2478 var idx=n(row.getAttribute("data-index"),-1);if(idx<0)return; 2479 removeSavedItem(idx); 2480 }); 2481 bindDraft("msq",modal); 2482 return modal; 2483 } 2484
2485 function renderSavedModal(){ 2486 var modal=buildSavedModal(), body=q("#msqBody",modal), summary=q("#msqSummary",modal), clearBtn=q(".msq-clear",modal), updateBtn=q(".msq-update",modal), submitBtn=q(".msq-submit",modal), items=getItems(); 2487 if(!items.length){ 2488 body.innerHTML='<div class="msq-empty">You do not have any saved quote items yet.</div>'; 2489 summary.textContent="0 saved items"; 2490 [clearBtn,updateBtn,submitBtn].forEach(function(b){b.disabled=true;b.style.opacity="0.55"}); 2491 return; 2492 } 2493 body.innerHTML=items.map(function(it,i){ 2494 return '<div class="msq-item" data-index="'+i+'"><div class="msq-main"><div class="msq-item-title"><a href="'+esc(it.product_url)+'">'+esc(it.product_name)+'</a></div>' + 2495 (it.sku?'<div class="msq-meta"><strong>SKU:</strong> '+esc(it.sku)+'</div>':'') + 2496 (it.option_summary?'<div class="msq-meta"><strong>Options:</strong> '+esc(it.option_summary)+'</div>':'') + 2497 (it.product_id?'<div class="msq-meta"><strong>Product ID:</strong> '+esc(it.product_id)+'</div>':'') + 2498 '</div><div class="msq-controls"><label for="msqQty'+i+'">Quantity</label><input id="msqQty'+i+'" class="msq-qty" type="number" min="1" step="1" value="'+esc(it.quantity||"1")+'"><button type="button" class="msq-remove">Remove Item</button></div></div>'; 2499 }).join(""); 2500 summary.textContent=savedLineCount()+" saved item"+(savedLineCount()===1?"":"s")+" • "+savedUnitCount()+" total unit"+(savedUnitCount()===1?"":"s"); 2501 [clearBtn,updateBtn,submitBtn].forEach(function(b){b.disabled=false;b.style.opacity=""}); 2502 } 2503 2504 function openSavedModal(){ 2505 clearTimeout(savedCloseTimer); 2506 savedCloseTimer=null; 2507 var m=buildSavedModal(); 2508 renderSavedModal(); 2509 applyDraftSaved(); 2510 m.style.display="flex"; 2511 document.body.style.overflow="hidden"; 2512 } 2513 2514 function saveSavedChanges(){ 2515 var modal=q("#"+SAVED_MODAL_ID); if(!modal)return; 2516 var items=getItems(), rows=qa(".msq-item",modal); 2517 if(!items.length||!rows.length){showSavedMsg("There are no saved items to update.","err");return;} 2518 rows.forEach(function(row){ 2519 var idx=n(row.getAttribute("data-index"),-1); 2520 if(idx<0||!items[idx])return; 2521 var inp=q(".msq-qty",row); 2522 items[idx].quantity=String(Math.max(1,n(inp&&inp.value,1))); 2523 }); 2524 if(!setItems(items)){showSavedMsg("Could not save your changes.","err");return;} 2525 formData("msq"); 2526 updateCounts(); 2527 renderSavedModal(); 2528 applyDraftSaved(); 2529 showSavedMsg("Saved quote quantities updated.","ok"); 2530 } 2531 2532 function removeSavedItem(idx){ 2533 var items=getItems(); 2534 if(idx<0||idx>=items.length)return; 2535 items.splice(idx,1); 2536 if(!setItems(items)){showSavedMsg("Could not remove that item.","err");return;} 2537 updateCounts(); 2538 renderSavedModal(); 2539 applyDraftSaved(); 2540 showSavedMsg("Item removed.","ok"); 2541 } 2542 2543 function clearSaved(){ 2544 var items=getItems(); 2545 if(!items.length)return; 2546 if(!window.confirm("Clear all saved quote items?"))return; 2547 if(!setItems([])){showSavedMsg("Could not clear saved items.","err");return;} 2548 updateCounts(); 2549 renderSavedModal(); 2550 applyDraftSaved(); 2551 showSavedMsg("Saved quote cleared.","ok"); 2552 } 2553 2554 async function submitSavedQuoteFromQuoteModal(){ 2555 var modal=q("#"+QUOTE_MODAL_ID); if(!modal)return; 2556 var items=getItems(), msg=q("#martelQuoteMsg",modal), btn=q("#mqEmailSavedBtn",modal), d=formData("mq"), err=validate(d,true), pricing=getSavedQuotePricing(items); 2557 msg.className="mq-msg"; 2558 msg.textContent=""; 2559 if(err){msg.className="mq-msg mq-err";msg.textContent=err;return;} 2560 if(!items.length){msg.className="mq-msg mq-err";msg.textContent="There are no saved items yet. Add products to your multi-item quote first.";return;} 2561 if(btn.disabled)return; 2562 btn.disabled=true; 2563 btn.textContent="Sending Saved Items..."; 2564 try{ 2565 var res=await fetch(WORKER_URL,{ 2566 method:"POST", 2567 mode:"cors", 2568 credentials:"omit", 2569 headers:{"Content-Type":"application/json"}, 2570 body:JSON.stringify(Object.assign(commonPayload(d),pricing,{ 2571 quote_type:"saved_multi_item", 2572 source:"bigcommerce_quote_modal_saved_items", 2573 items:items.map(function(it){ 2574 var p=getItemPricing(it); 2575 return { 2576 product_id:it.product_id||"", 2577 product_name:it.product_name||"", 2578 product_url:it.product_url||"", 2579 sku:it.sku||"", 2580 option_summary:it.option_summary||"", 2581 quantity:String(Math.max(1,n(it.quantity,1))), 2582 unit_price:p.unit_price, 2583 line_total:p.line_total 2584 }; 2585 }) 2586 })) 2587 }); 2588 var json=await res.json().catch(function(){return null}); 2589 if(!res.ok){ 2590 var st="Request failed"; 2591 if(json&&json.error)st=json.error; 2592 if(json&&json.details)st+=" | "+json.details; 2593 throw new Error(st); 2594 } 2595 if(!json||json.ok!==true)throw new Error((json&&json.error)||"Worker did not return success"); 2596 var ref=json&&json.quote_reference?String(json.quote_reference):"", confirm=json&&json.customer_confirmation_sent===true?true:(json&&json.customer_confirmation_sent===false?false:null); 2597 setItems([]); 2598 updateCounts(); 2599 msg.className="mq-msg mq-ok"; 2600 msg.textContent=successText("Saved items quote sent successfully.",ref,confirm); 2601 setTimeout(closeQuote,1500); 2602 }catch(e){ 2603 console.error("Martel Saved Items Error:",e); 2604 msg.className="mq-msg mq-err"; 2605 msg.textContent=e&&e.message?e.message:"There was a problem sending your saved items quote."; 2606 } 2607 btn.disabled=false; 2608 btn.textContent="Email Saved Items Quote"+(savedLineCount()?" ("+savedLineCount()+")":""); 2609 } 2610 2611 async function submitSavedQuote(){ 2612 var modal=q("#"+SAVED_MODAL_ID); if(!modal)return; 2613 var items=getItems(), btn=q(".msq-submit",modal), d=formData("msq"), err=validate(d,true), pricing=getSavedQuotePricing(items); 2614 if(err){showSavedMsg(err,"err");return;} 2615 if(!items.length){showSavedMsg("There are no saved items to submit.","err");return;} 2616 if(btn.disabled)return; 2617 clearTimeout(savedCloseTimer); 2618 savedCloseTimer=null; 2619 btn.disabled=true; 2620 btn.textContent="Sending Saved Quote..."; 2621 showSavedMsg("","ok"); 2622 try{ 2623 var res=await fetch(WORKER_URL,{ 2624 method:"POST", 2625 mode:"cors", 2626 credentials:"omit", 2627 headers:{"Content-Type":"application/json"}, 2628 body:JSON.stringify(Object.assign(commonPayload(d),pricing,{ 2629 quote_type:"saved_multi_item", 2630 source:"bigcommerce_saved_quote_modal", 2631 items:items.map(function(it){ 2632 var p=getItemPricing(it); 2633 return { 2634 product_id:it.product_id||"", 2635 product_name:it.product_name||"", 2636 product_url:it.product_url||"", 2637 sku:it.sku||"", 2638 option_summary:it.option_summary||"", 2639 quantity:String(Math.max(1,n(it.quantity,1))), 2640 unit_price:p.unit_price, 2641 line_total:p.line_total 2642 }; 2643 }) 2644 })) 2645 }); 2646 var json=await res.json().catch(function(){return null}); 2647 if(!res.ok){ 2648 var st="Request failed"; 2649 if(json&&json.error)st=json.error; 2650 if(json&&json.details)st+=" | "+json.details; 2651 throw new Error(st); 2652 } 2653 if(!json||json.ok!==true)throw new Error((json&&json.error)||"Worker did not return success"); 2654 var ref=json&&json.quote_reference?String(json.quote_reference):"", confirm=json&&json.customer_confirmation_sent===true?true:(json&&json.customer_confirmation_sent===false?false:null); 2655 if(!setItems([])){ 2656 showSavedMsg("Saved quote sent, but saved items could not be cleared in this browser.","err"); 2657 btn.disabled=false; 2658 btn.textContent="Submit Saved Quote"; 2659 return; 2660 } 2661 updateCounts(); 2662 var body=q("#msqBody",modal), summary=q("#msqSummary",modal), clearBtn=q(".msq-clear",modal), updateBtn=q(".msq-update",modal); 2663 if(q("#msqNotes",modal))q("#msqNotes",modal).value=""; 2664 body.innerHTML='<div class="msq-empty">'+esc(successText("Saved quote sent.",ref,confirm))+'</div>'; 2665 summary.textContent="0 saved items";
2666 [clearBtn,updateBtn,btn].forEach(function(b){b.disabled=true;b.style.opacity="0.55"}); 2667 showSavedMsg(successText("Saved quote sent.",ref,confirm),"ok"); 2668 showInline(successText("Saved quote sent.",ref,confirm),"ok"); 2669 if(confirm!==false){savedCloseTimer=setTimeout(closeSaved,1700);} 2670 }catch(e){ 2671 console.error("Martel Saved Quote Error:",e); 2672 btn.disabled=false; 2673 btn.textContent="Submit Saved Quote"; 2674 showSavedMsg(e&&e.message?e.message:"There was a problem sending your saved quote request.","err"); 2675 } 2676 } 2677 2678 async function submitQuote(e){ 2679 e.preventDefault(); 2680 var form=e.target, btn=q(".mq-send",form), msg=q("#martelQuoteMsg",form), p=productData(), d=formData("mq"), err=validate(d,false); 2681 if(btn.disabled)return; 2682 msg.className="mq-msg"; 2683 msg.textContent=""; 2684 btn.disabled=true; 2685 btn.textContent="Sending..."; 2686 if(err){ 2687 msg.className="mq-msg mq-err"; 2688 msg.textContent=err; 2689 btn.disabled=false; 2690 btn.textContent="Email This Product"; 2691 return; 2692 } 2693 var qty=Math.max(1,n(d.quantity,1)), unit=safeMoneyValue(p.unit_price), line=safeMoneyValue(Number.isFinite(p.unit_price)?p.unit_price*qty:NaN); 2694 try{ 2695 var res=await fetch(WORKER_URL,{ 2696 method:"POST", 2697 mode:"cors", 2698 credentials:"omit", 2699 headers:{"Content-Type":"application/json"}, 2700 body:JSON.stringify(Object.assign(commonPayload(d),{ 2701 source:"bigcommerce_product_page", 2702 product_id:p.product_id, 2703 product_name:p.product_name, 2704 product_url:p.product_url, 2705 sku:p.sku, 2706 option_summary:p.option_summary, 2707 quantity:String(qty), 2708 unit_price:unit, 2709 line_total:line, 2710 quote_total:line 2711 })) 2712 }); 2713 var json=await res.json().catch(function(){return null}); 2714 if(!res.ok){ 2715 var st="Request failed"; 2716 if(json&&json.error)st=json.error; 2717 if(json&&json.details)st+=" | "+json.details; 2718 throw new Error(st); 2719 } 2720 if(!json||json.ok!==true)throw new Error((json&&json.error)||"Worker did not return success"); 2721 var ref=json&&json.quote_reference?String(json.quote_reference):"", confirm=json&&json.customer_confirmation_sent===true?true:(json&&json.customer_confirmation_sent===false?false:null); 2722 msg.className="mq-msg mq-ok"; 2723 msg.textContent=successText("Quote request sent.",ref,confirm); 2724 var notes=q("#mqNotes",form); 2725 if(notes)notes.value=""; 2726 formData("mq"); 2727 hydrateQuoteModal(); 2728 if(confirm!==false)setTimeout(closeQuote,1300); 2729 }catch(e2){ 2730 console.error("Martel Quote Error:",e2); 2731 msg.className="mq-msg mq-err"; 2732 msg.textContent=e2&&e2.message?e2.message:"There was a problem sending your quote request."; 2733 } 2734 btn.disabled=false; 2735 btn.textContent="Email This Product"; 2736 } 2737 2738 function liveWrap(){var w=q("#"+WRAP_ID);return w&&w.isConnected?w:null;} 2739 2740 function cleanupWrap(){ 2741 var w=q("#"+WRAP_ID); 2742 if(!w)return; 2743 if(!isProductPage()){w.remove();return;} 2744 var k=productKey(); 2745 if(w.dataset.productKey&&w.dataset.productKey!==k)w.remove(); 2746 } 2747 2748 function insertButtons(){ 2749 cleanupWrap(); 2750 if(!isProductPage())return true; 2751 var k=productKey(), w=liveWrap(); 2752 if(w&&w.dataset.productKey===k){ 2753 updateCounts(); 2754 return true; 2755 } 2756 var anchor=insertAnchor(); 2757 if(!anchor||!anchor.parentNode)return false; 2758 addStyles(); 2759 var wrap=document.createElement("div"); 2760 wrap.id=WRAP_ID; 2761 wrap.dataset.productKey=k; 2762 wrap.innerHTML='<div class="martel-quote-btns"><button type="button" id="martelQuoteBtn">Get Quote</button><button type="button" id="martelSaveQuoteBtn">Save to Quote</button><div id="'+COUNT_ID+'">Saved Quote Items: 0</div><button type="button" id="martelViewSavedQuoteBtn">View Saved Quote</button></div><div id="'+INLINE_MSG_ID+'" class="martel-quote-inline-msg"></div>'; 2763 anchor.insertAdjacentElement("afterend",wrap); 2764 q("#martelQuoteBtn",wrap).addEventListener("click",function(){ 2765 var m=buildQuoteModal(); 2766 m.style.display="flex"; 2767 document.body.style.overflow="hidden"; 2768 var qty=q("#mqQty",m), p=productData(); 2769 if(qty)qty.value=p.quantity||"1"; 2770 applyDraftQuote(); 2771 hydrateQuoteModal(); 2772 });
2773 q("#martelSaveQuoteBtn",wrap).addEventListener("click",saveCurrentProduct); 2774 q("#martelViewSavedQuoteBtn",wrap).addEventListener("click",openSavedModal); 2775 updateCounts(); 2776 return true; 2777 } 2778 2779 function scheduleEnsure(delay){ 2780 if(ensureTimer)clearTimeout(ensureTimer); 2781 ensureTimer=setTimeout(function(){ 2782 ensureTimer=null; 2783 tryEnsure(); 2784 },typeof delay==="number"?delay:80); 2785 } 2786 2787 function scheduleEnsurePasses(reason){ 2788 var delays=[0,60,160,350,700,1200,2200,3600,5200]; 2789 for(var i=0;i<delays.length;i++){ 2790 (function(delay){ 2791 setTimeout(function(){scheduleEnsure(delay===0?20:80);},delay); 2792 })(delays[i]); 2793 } 2794 } 2795 2796 function tryEnsure(){ 2797 if(ensureActive)return; 2798 ensureActive=true; 2799 cleanupWrap(); 2800 var tries=0; 2801 (function run(){ 2802 if(insertButtons()){ 2803 ensureActive=false; 2804 return; 2805 } 2806 tries++; 2807 if(tries<MAX_TRIES)setTimeout(run,TRY_DELAY); 2808 else ensureActive=false; 2809 })(); 2810 } 2811 2812 function bootWatchdog(){ 2813 if(bootInterval)return; 2814 bootInterval=setInterval(function(){ 2815 if(document.hidden)return; 2816 if(location.href!==lastUrl){ 2817 lastUrl=location.href; 2818 closeQuote(); 2819 closeSaved(); 2820 scheduleEnsurePasses("url-change"); 2821 return; 2822 } 2823 if(isProductPage()&&!liveWrap())scheduleEnsure(120); 2824 },500); 2825 } 2826 2827 function startMutationObserver(){ 2828 if(mutationObserver||!window.MutationObserver||!document.body)return; 2829 mutationObserver=new MutationObserver(function(mutations){ 2830 if(mutationQueued)return; 2831 var relevant=false; 2832 for(var i=0;i<mutations.length;i++){ 2833 if(mutations[i].addedNodes&&mutations[i].addedNodes.length){ 2834 relevant=true; 2835 break; 2836 } 2837 } 2838 if(!relevant)return; 2839 mutationQueued=true; 2840 setTimeout(function(){ 2841 mutationQueued=false; 2842 if(isProductPage()&&!liveWrap())scheduleEnsure(80); 2843 },120); 2844 }); 2845 mutationObserver.observe(document.body,{childList:true,subtree:true}); 2846 } 2847 2848 function bindInstantLoadHooks(){ 2849 if(window.__martelQuoteV2HooksBound)return; 2850 window.__martelQuoteV2HooksBound=true; 2851 2852 document.addEventListener("readystatechange",function(){ 2853 if(document.readyState==="interactive"||document.readyState==="complete")scheduleEnsurePasses("readystatechange"); 2854 }); 2855 2856 window.addEventListener("pageshow",function(){scheduleEnsurePasses("pageshow")}); 2857 window.addEventListener("popstate",function(){scheduleEnsurePasses("popstate")}); 2858 window.addEventListener("hashchange",function(){scheduleEnsurePasses("hashchange")}); 2859 window.addEventListener("load",function(){scheduleEnsurePasses("load")}); 2860 document.addEventListener("visibilitychange",function(){if(!document.hidden)scheduleEnsurePasses("visibility")}); 2861 2862 var instantEvents=["loaded.instantload","instantload:loaded","instantload:end","page:loaded","stencilBootstrap.load","cart-item-add-remote"]; 2863 for(var i=0;i<instantEvents.length;i++){ 2864 (function(evt){ 2865 document.addEventListener(evt,function(){lastUrl=location.href;scheduleEnsurePasses(evt);},true); 2866 window.addEventListener(evt,function(){lastUrl=location.href;scheduleEnsurePasses(evt);},true); 2867 })(instantEvents[i]); 2868 } 2869 2870 document.addEventListener("click",function(e){ 2871 var a=e.target&&e.target.closest?e.target.closest("a[href], [data-instantload]"):null; 2872 if(a)setTimeout(function(){scheduleEnsurePasses("link-click")},80); 2873 },true); 2874 2875 var $=window.jQuerySupermarket||window.jQuery||window.$; 2876 if($&&$.fn&&!window.__martelQuoteV2JqHooksBound){ 2877 window.__martelQuoteV2JqHooksBound=true; 2878 $(document).on("loaded.instantload opened.fndtn.reveal",function(){lastUrl=location.href;scheduleEnsurePasses("jquery-instantload")}); 2879 $(document).ajaxComplete(function(){lastUrl=location.href;scheduleEnsurePasses("ajaxComplete")}); 2880 } 2881 } 2882 2883 function initGlobal(){ 2884 if(!window.__martelQuoteV2EscapeBound){ 2885 window.__martelQuoteV2EscapeBound=true; 2886 document.addEventListener("keydown",function(e){ 2887 if(e.key!=="Escape")return; 2888 if(savedOpen())closeSaved(); 2889 else if(quoteOpen())closeQuote(); 2890 }); 2891 } 2892 bindInstantLoadHooks(); 2893 startMutationObserver(); 2894 } 2895 2896 function start(){ 2897 addStyles(); 2898 initGlobal(); 2899 lastUrl=location.href; 2900 tryEnsure(); 2901 scheduleEnsurePasses("start"); 2902 bootWatchdog(); 2903 } 2904 2905 window.__martelQuoteV2Ready=function(reason){ 2906 lastUrl=location.href; 2907 try{cleanupWrap();}catch(e){} 2908 try{addStyles();}catch(e){} 2909 try{initGlobal();}catch(e){} 2910 scheduleEnsurePasses(reason||"manual-ready"); 2911 bootWatchdog(); 2912 }; 2913 2914 ready(start); 2915 window.__martelQuoteV2Loading=false; 2916})(); 2917</script>
2917<script> 2918(function () { 2919 "use strict"; 2920 2921 var PUBLIC_API_KEY = "39UON6S33NIH06DU"; 2922 var AFFIRM_JS_URL = "https://cdn1.affirm.com/js/v2/affirm.js"; 2923 var STYLE_ID = "martel-affirm-product-message-master-v13-cross-browser-safe"; 2924 2925 var OLD_STYLE_IDS = [ 2926 "martel-bigger-affirm-product-message-v1", 2927 "martel-bigger-affirm-product-message-v2", 2928 "martel-safe-affirm-text-size-v3", 2929 "martel-affirm-product-message-master-v4-style", 2930 "martel-affirm-product-message-master-v5-large-style", 2931 "martel-affirm-product-message-master-v6-larger-clean-style", 2932 "martel-affirm-product-message-master-v7-larger-clean-tight-spacing-style", 2933 "martel-affirm-product-message-master-v8-close-price-gap-style", 2934 "martel-affirm-product-message-master-v9-no-jiggle-style", 2935 "martel-affirm-product-message-master-v10-no-jiggle-guard-style", 2936 "martel-affirm-product-message-master-v11-clean-spacing-no-jiggle-style", 2937 "martel-affirm-product-message-master-v12-final-spacing-no-jiggle-style" 2938 ]; 2939 2940 var ns = window.__martelAffirmProductMessageMasterV13 || {}; 2941 window.__martelAffirmProductMessageMasterV13 = ns; 2942 2943 if (ns.loaded) { 2944 return; 2945 } 2946 2947 ns.loaded = true; 2948 ns.version = "2026-06-18-v13-cross-browser-safe"; 2949 ns.lastAllowedAmount = null; 2950 ns.forceAllowRefresh = false; 2951 ns.guardStarted = false; 2952 ns.refreshTimer = null; 2953 ns.retryTimer = null; 2954 ns.retryCount = 0; 2955 2956 function q(selector, scope) { 2957 return (scope || document).querySelector(selector); 2958 } 2959 2960 function ready(fn) { 2961 if (document.readyState === "loading") { 2962 document.addEventListener("DOMContentLoaded", fn, { once: true }); 2963 } else { 2964 fn(); 2965 } 2966 } 2967 2968 function isProductPage() { 2969 return !!( 2970 q(".productView") || 2971 q('input[name="product_id"]') || 2972 (document.body && String(document.body.className || "").indexOf("papaSupermarket-pageType--product") !== -1) 2973 ); 2974 } 2975 2976 function removeOldStyles() { 2977 OLD_STYLE_IDS.forEach(function (id) { 2978 var el = document.getElementById(id); 2979 if (el && el.parentNode) { 2980 el.parentNode.removeChild(el); 2981 } 2982 }); 2983 } 2984 2985 function addStyle() { 2986 if (document.getElementById(STYLE_ID)) { 2987 return; 2988 } 2989 2990 var css = "" 2991 + "body.papaSupermarket-pageType--product .productView-price{" 2992 + "margin-bottom:0!important;" 2993 + "padding-bottom:0!important;" 2994 + "}" 2995 2996 + "body.papaSupermarket-pageType--product .productView-price .price-section--saving{" 2997 + "margin-bottom:0!important;" 2998 + "padding-bottom:0!important;" 2999 + "line-height:1.15!important;" 3000 + "}" 3001 3002 + "body.papaSupermarket-pageType--product #customAffirmPromoContainer," 3003 + "body.papaSupermarket-pageType--product .productView-affirmPromo{" 3004 + "margin:7px 0 14px!important;" 3005 + "min-height:26px!important;" 3006 + "line-height:1.35!important;" 3007 + "display:block!important;" 3008 + "visibility:visible!important;" 3009 + "opacity:1!important;" 3010 + "clear:both!important;" 3011 + "}" 3012 3013 + "body.papaSupermarket-pageType--product #customAffirmPromoContainer .affirm-as-low-as," 3014 + "body.papaSupermarket-pageType--product .productView-affirmPromo .affirm-as-low-as{" 3015 + "display:block!important;" 3016 + "visibility:visible!important;" 3017 + "opacity:1!important;" 3018 + "font-size:17px!important;" 3019 + "line-height:1.35!important;" 3020 + "font-weight:700!important;" 3021 + "color:#111827!important;" 3022 + "margin:0!important;" 3023 + "padding:0!important;" 3024 + "background:transparent!important;" 3025 + "border:0!important;" 3026 + "box-shadow:none!important;" 3027 + "white-space:normal!important;" 3028 + "transition:none!important;" 3029 + "animation:none!important;" 3030 + "}" 3031 3032 + "body.papaSupermarket-pageType--product #customAffirmPromoContainer .affirm-as-low-as a," 3033 + "body.papaSupermarket-pageType--product .productView-affirmPromo .affirm-as-low-as a," 3034 + "body.papaSupermarket-pageType--product #customAffirmPromoContainer .affirm-modal-trigger," 3035 + "body.papaSupermarket-pageType--product .productView-affirmPromo .affirm-modal-trigger{" 3036 + "font-size:17px!important;" 3037 + "font-weight:800!important;" 3038 + "color:#1d4ed8!important;" 3039 + "text-decoration:underline!important;" 3040 + "transition:none!important;" 3041 + "animation:none!important;" 3042 + "}" 3043 3044 + "body.papaSupermarket-pageType--product .productView-price > .affirm-as-low-as," 3045 + "body.papaSupermarket-pageType--product .productView-price .affirm-site-modal," 3046 + "body.papaSupermarket-pageType--product .productView-price .affirm-product-modal{" 3047 + "display:none!important;" 3048 + "}" 3049 3050 + "@media(max-width:800px){" 3051 + "body.papaSupermarket-pageType--product #customAffirmPromoContainer," 3052 + "body.papaSupermarket-pageType--product .productView-affirmPromo{" 3053 + "margin:5px 0 13px!important;" 3054 + "min-height:23px!important;" 3055 + "}" 3056 + "body.papaSupermarket-pageType--product #customAffirmPromoContainer .affirm-as-low-as," 3057 + "body.papaSupermarket-pageType--product .productView-affirmPromo .affirm-as-low-as," 3058 + "body.papaSupermarket-pageType--product #customAffirmPromoContainer .affirm-as-low-as a," 3059 + "body.papaSupermarket-pageType--product .productView-affirmPromo .affirm-as-low-as a," 3060 + "body.papaSupermarket-pageType--product #customAffirmPromoContainer .affirm-modal-trigger," 3061 + "body.papaSupermarket-pageType--product .productView-affirmPromo .affirm-modal-trigger{" 3062 + "font-size:15px!important;" 3063 + "line-height:1.35!important;" 3064 + "}" 3065 + "}"; 3066 3067 var style = document.createElement("style"); 3068 style.id = STYLE_ID; 3069 style.type = "text/css"; 3070 style.appendChild(document.createTextNode(css)); 3071 document.head.appendChild(style); 3072 } 3073 3074 function ensureAffirmLoader() { 3075 if (window.affirm && window.affirm.ui) { 3076 return; 3077 } 3078 3079 if (window.__martelAffirmLoaderStartedV13) { 3080 return; 3081 } 3082 3083 window.__martelAffirmLoaderStartedV13 = true; 3084 3085 window._affirm_config = window._affirm_config || { 3086 public_api_key: PUBLIC_API_KEY, 3087 script: AFFIRM_JS_URL, 3088 locale: "en_US", 3089 country_code: "USA" 3090 }; 3091 3092 if (document.querySelector('script[src*="cdn1.affirm.com/js/v2/affirm.js"]')) { 3093 return; 3094 } 3095 3096 (function (l, g, m, e, a, f, b) { 3097 var d, c = l[m] || {}; 3098 var h = document.createElement(f); 3099 var n = document.getElementsByTagName(f)[0]; 3100 var k = function (a2, b2, c2) { 3101 return function () { 3102 a2[b2]._.push([c2, arguments]); 3103 }; 3104 }; 3105 3106 c[e] = k(c, e, "set"); 3107 d = c[e]; 3108 c[a] = {}; 3109 c[a]._ = []; 3110 d._ = []; 3111 c._ = []; 3112 3113 c[a][b] = k(c, a, b); 3114 3115 var checkoutMethods = "set add save post open empty reset on off trigger ready setProduct".split(" "); 3116 var noopMethods = ["get", "token", "url", "items"]; 3117 var i; 3118 3119 for (i = 0; i < checkoutMethods.length; i++) { 3120 d[checkoutMethods[i]] = k(c, e, checkoutMethods[i]); 3121 } 3122 3123 for (i = 0; i < noopMethods.length; i++) { 3124 d[noopMethods[i]] = function () {}; 3125 } 3126 3127 h.async = true; 3128 h.src = g[f]; 3129 n.parentNode.insertBefore(h, n); 3130 delete g[f]; 3131 d(g); 3132 l[m] = c; 3133 })(window, window._affirm_config, "affirm", "checkout", "ui", "script", "ready"); 3134 } 3135 3136 function cleanPriceToCents(text) { 3137 if (!text) { 3138 return null; 3139 } 3140 3141 var normalized = String(text).replace(/,/g, ""); 3142 var match = normalized.match(/(\d+(?:\.\d{1,2})?)/); 3143 3144 if (!match) { 3145 return null; 3146 } 3147 3148 var amount = parseFloat(match[1]); 3149 3150 if (!isFinite(amount) || amount <= 0) { 3151 return null; 3152 } 3153 3154 return Math.round(amount * 100); 3155 } 3156 3157 function getRoot() { 3158 return q(".productView") || document; 3159 } 3160 3161 function getCentsFromDom(root) { 3162 var selectors = [ 3163 ".productView-price [data-product-sale-price-with-tax] .price", 3164 ".productView-price [data-product-sale-price-without-tax] .price", 3165 ".productView-price [data-product-price-with-tax] .price", 3166 ".productView-price [data-product-price-without-tax] .price", 3167 ".productView-price [data-product-sale-price-with-tax]", 3168 ".productView-price [data-product-sale-price-without-tax]", 3169 ".productView-price [data-product-price-with-tax]", 3170 ".productView-price [data-product-price-without-tax]", 3171 ".productView-price .price.price--withTax", 3172 ".productView-price .price.price--withoutTax", 3173 ".productView-price .price--main", 3174 ".productView-price .price" 3175 ]; 3176 3177 for (var i = 0; i < selectors.length; i++) { 3178 var el = q(selectors[i], root); 3179 if (el && el.textContent && el.textContent.trim()) { 3180 var cents = cleanPriceToCents(el.textContent); 3181 if (cents) { 3182 return cents; 3183 } 3184 } 3185 } 3186 3187 return null; 3188 } 3189 3190 function getCentsFromBCData() { 3191 try { 3192 if (!window.BCData || !window.BCData.product_attributes || !window.BCData.product_attributes.price) { 3193 return null; 3194 } 3195 3196 var price = window.BCData.product_attributes.price; 3197 var value = null; 3198 3199 if (price.sale_price_with_tax && typeof price.sale_price_with_tax.value === "number") { 3200 value = price.sale_price_with_tax.value; 3201 } else if (price.sale_price_without_tax && typeof price.sale_price_without_tax.value === "number") { 3202 value = price.sale_price_without_tax.value; 3203 } else if (price.with_tax && typeof price.with_tax.value === "number") { 3204 value = price.with_tax.value; 3205 } else if (price.without_tax && typeof price.without_tax.value === "number") { 3206 value = price.without_tax.value; 3207 } 3208 3209 if (!value || !isFinite(value) || value <= 0) { 3210 return null; 3211 } 3212 3213 return Math.round(value * 100); 3214 } catch (e) { 3215 return null; 3216 } 3217 } 3218 3219 function getCentsFromMeta() { 3220 var meta = q('meta[property="product:price:amount"]'); 3221 if (!meta) { 3222 return null; 3223 } 3224 3225 return cleanPriceToCents(meta.getAttribute("content")); 3226 } 3227 3228 function getCurrentPriceCents(root) { 3229 return getCentsFromDom(root) || getCentsFromBCData() || getCentsFromMeta(); 3230 } 3231 3232 function ensurePromoContainer(root) { 3233 var container = q("#customAffirmPromoContainer", root) || q(".productView-affirmPromo", root); 3234 3235 if (!container) { 3236 var priceWrap = q(".productView-price", root); 3237 if (!priceWrap || !priceWrap.parentNode) { 3238 return null; 3239 } 3240 3241 container = document.createElement("div"); 3242 container.id = "customAffirmPromoContainer"; 3243 container.className = "productView-affirmPromo"; 3244 priceWrap.parentNode.insertBefore(container, priceWrap.nextSibling); 3245 } 3246 3247 container.style.display = ""; 3248 container.style.visibility = ""; 3249 container.style.opacity = ""; 3250 3251 return container; 3252 } 3253 3254 function ensurePromoElement(root) { 3255 var container = ensurePromoContainer(root); 3256 if (!container) { 3257 return null; 3258 } 3259 3260 var promo = q(".affirm-as-low-as", container); 3261 3262 if (!promo) { 3263 promo = document.createElement("p"); 3264 promo.className = "affirm-as-low-as"; 3265 container.appendChild(promo); 3266 } 3267 3268 promo.setAttribute("data-page-type", "product"); 3269 promo.style.display = ""; 3270 promo.style.visibility = ""; 3271 promo.style.opacity = ""; 3272 3273 if (!promo.textContent || !promo.textContent.trim()) { 3274 promo.textContent = "Pay over time with Affirm. See if you qual
3274ify at checkout."; 3275 } 3276 3277 return promo; 3278 } 3279 3280 function getPromoAmount() { 3281 var promo = q("#customAffirmPromoContainer .affirm-as-low-as") || q(".productView-affirmPromo .affirm-as-low-as"); 3282 return promo ? String(promo.getAttribute("data-amount") || "") : ""; 3283 } 3284 3285 function syncAffirmAmount() { 3286 if (!isProductPage()) { 3287 return null; 3288 } 3289 3290 var root = getRoot(); 3291 var cents = getCurrentPriceCents(root); 3292 var promo = ensurePromoElement(root); 3293 3294 if (!promo || !cents) { 3295 return null; 3296 } 3297 3298 promo.setAttribute("data-page-type", "product"); 3299 promo.setAttribute("data-amount", String(cents)); 3300 3301 ns.lastAmount = cents; 3302 return cents; 3303 } 3304 3305 function installRefreshGuard() { 3306 try { 3307 if (!window.affirm || !window.affirm.ui || typeof window.affirm.ui.refresh !== "function") { 3308 return false; 3309 } 3310 3311 var currentRefresh = window.affirm.ui.refresh; 3312 3313 if (currentRefresh.__martelV13Guarded === true) { 3314 return true; 3315 } 3316 3317 var originalRefresh = currentRefresh.__martelV13Original || currentRefresh; 3318 3319 var guardedRefresh = function () { 3320 var amount = getPromoAmount(); 3321 3322 if (ns.forceAllowRefresh === true) { 3323 ns.forceAllowRefresh = false; 3324 ns.lastAllowedAmount = amount; 3325 return originalRefresh.apply(this, arguments); 3326 } 3327 3328 ns.lastAllowedAmount = amount; 3329 return originalRefresh.apply(this, arguments); 3330 }; 3331 3332 guardedRefresh.__martelV13Guarded = true; 3333 guardedRefresh.__martelV13Original = originalRefresh; 3334 3335 window.affirm.ui.refresh = guardedRefresh; 3336 return true; 3337 } catch (e) { 3338 return false; 3339 } 3340 } 3341 3342 function safeAffirmRefresh() { 3343 try { 3344 syncAffirmAmount(); 3345 installRefreshGuard(); 3346 3347 if (!window.affirm || !window.affirm.ui) { 3348 return false; 3349 } 3350 3351 var doRefresh = function () { 3352 syncAffirmAmount(); 3353 installRefreshGuard(); 3354 3355 if (window.affirm && window.affirm.ui && typeof window.affirm.ui.refresh === "function") { 3356 ns.forceAllowRefresh = true; 3357 ns.lastAllowedAmount = getPromoAmount(); 3358 window.affirm.ui.refresh(); 3359 return true; 3360 } 3361 3362 return false; 3363 }; 3364 3365 if (typeof window.affirm.ui.ready === "function") { 3366 window.affirm.ui.ready(function () { 3367 doRefresh(); 3368 }); 3369 return true; 3370 } 3371 3372 return doRefresh(); 3373 } catch (e) { 3374 return false; 3375 } 3376 } 3377 3378 function requestSafeRefresh(delay) { 3379 if (ns.refreshTimer) { 3380 clearTimeout(ns.refreshTimer); 3381 ns.refreshTimer = null; 3382 } 3383 3384 ns.refreshTimer = setTimeout(function () { 3385 ns.refreshTimer = null; 3386 safeAffirmRefresh(); 3387 }, typeof delay === "number" ? delay : 250); 3388 } 3389 3390 function startRetryRefreshes() { 3391 if (ns.retryTimer) { 3392 clearInterval(ns.retryTimer); 3393 } 3394 3395 ns.retryCount = 0; 3396 3397 ns.retryTimer = setInterval(function () { 3398 ns.retryCount += 1; 3399 safeAffirmRefresh(); 3400 3401 if (ns.retryCount >= 12) { 3402 clearInterval(ns.retryTimer); 3403 ns.retryTimer = null; 3404 } 3405 }, 750); 3406 } 3407 3408 function boot() { 3409 if (!isProductPage()) { 3410 return; 3411 } 3412 3413 removeOldStyles(); 3414 addStyle(); 3415 syncAffirmAmount(); 3416 ensureAffirmLoader(); 3417 requestSafeRefresh(250); 3418 startRetryRefreshes(); 3419 } 3420 3421 ready(boot); 3422 3423 window.addEventListener("load", function () { 3424 requestSafeRefresh(500); 3425 }); 3426 3427 document.addEventListener("change", function (event) { 3428 if ( 3429 event.target && 3430 ( 3431 event.target.closest(".form--addToCart") || 3432 event.target.closest("[data-product-option-change]") || 3433 event.target.matches(".form-input--incrementTotal") 3434 ) 3435 ) { 3436 requestSafeRefresh(250); 3437 } 3438 }, true); 3439 3440})(); 3441</script>
3441 3442
3442<script src="https://cdn.shopify.com/s/javascripts/currencies.js"></script>
3442 3443
3443<script> 3444 (function() { 3445 window.crData = { 3446 3447 channelId: '1', 3448 shop: { 3449 id: 293, 3450 createdAt: '2025-05-31T17:45:57.226Z', 3451 storeHash: 'm0o7bk', 3452 plan: 'trial', 3453 effectiveDate: 'basic_annual 2026-12-18T19:40:38.491966Z', 3454 data: { 3455 activeSupportDismissed: true, 3456 reviewRequestDismissed: true, 3457 } 3458 }, 3459 schema: { 3460 settings: {"channel_id":1,"site_id":1000,"show_wishlist":false,"request":{"referer":"","host":"martelelectronics.com","origin":"https:\u002f\u002fmartelelectronics.com","locale":"en_US","absolute_path":"\u002fabout\u002f","user_agent":"Mozilla\u002f5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\u002f601.3.9 (KHTML, like Gecko) Version\u002f9.0.2 Safari\u002f601.3.9 bc-storefront","is_crawler":false},"facebook_like_button":{"enabled":true,"href":"https%3A%2F%2Fmartelelectronics.com%2Fabout%2F","verb":"like"},"add_this":{"buttons":[{"service":"facebook","annotation":""},{"service":"email","annotation":""},{"service":"print","annotation":""},{"service":"twitter","annotation":""},{"service":"pinterest","annotation":""}]},"store_name":"Martel Electronics","theme_version_id":"dcff4430-4df6-013e-0d67-161549aa1a0e","storefront_api":{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJjaWQiOlsxXSwiY29ycyI6WyJodHRwczovL21hcnRlbGVsZWN0cm9uaWNzLmNvbSJdLCJlYXQiOjE3OTA0MjQ2NDAsImlhdCI6MTc5MDI1MTg0MCwiaXNzIjoiQkMiLCJzaWQiOjUwMDAyMiwic3ViIjoiQkMiLCJzdWJfdHlwZSI6MCwidG9rZW5fdHlwZSI6MX0.CO4sztcul2sFgf0qGY_VnSOzY7QCkgwm47ITn8nXkdf8OJleLlSemGP7e-YyUsNf6T87VWBdU-VxlPRd2NtBeA"},"base_url":"https:\u002f\u002fmartelelectronics.com","rss_item_limit":10,"show_newsletter_box":1,"general":{"fastCart":true,"storeId":500022},"money":{"currency_token":"$","currency_location":"left","decimal_token":".","decimal_places":2,"thousands_token":","},"theme_session_id":"cb041bf0-7fe1-013f-b400-5291dc9d1300","client_ip_address":"0.0.0.0","theme_config_id":"7f1539f0-5baf-013f-58a6-6e8db226ea8e","phone_number":"
3460(800) 553-5536","returns_v2_enabled":0,"store_logo":{"title":"Martel Electronics Since 1957","image":{"data":"https:\u002f\u002fcdn11.bigcommerce.com\u002fs-m0o7bk\u002fimages\u002fstencil\u002f{:size}\u002fdownload_1783128589__55035.original.png","alt":"Martel Electronics Since 1957","width":420,"height":107}},"hide_price_from_guests":false,"shopper_consent_tracking_enabled":true,"display_date_format":"jS M Y","bulk_discount_enabled":true,"show_product_reviews":false,"measurements":{"length":"Inches","weight":"LBS"},"gift_certificates_enabled":false,"maintenance":[],"secure_host":"martelelectronics.com","store_hash":"m0o7bk","newsletter_summary":"","country_code":null,"is_eu_ip_address":false,"account_creation_enabled":true,"extended_display_date_format":"jS M Y @ g:i A","show_product_rating":false,"region_code":"","secure_base_url":"https:\u002f\u002fmartelelectronics.com","address":"23221 La Palma Ave.\nYorba Linda, CA 92887","store_time_zone":"-8","privacy_cookie":false,"returns_enabled":0,"store_dst_correction":1,"data_tag_enabled":false,"tax_label":"Tax","blog_enabled":true,"cdn_url":"https:\u002f\u002fcdn11.bigcommerce.com\u002fs-m0o7bk","payments_url":"https:\u002f\u002fpayments.bigcommerce.com","password_requirements":{"alpha":"[A-Za-z]","numeric":"[0-9]","minlength":7,"error":"Passwords must be at least 7 characters and contain both alphabetic and numeric characters."},"show_newsletter_summary":0,"show_payment_methods":true}, 3461 page_type: 'page', 3462 head: { 3463 favicon: 'https://cdn11.bigcommerce.com/s-m0o7bk/product_images/Martel%20Fav.png?t=1592514199', 3464 title: 'About Us | Martel Electronics Since 1957' 3465 }, 3466 product: 3467 undefined, 3468 categories: 3469 [{"url":"https:\u002f\u002fmartelelectronics.com\u002fcourt-reporter-laptop\u002f","image":{},"description":{},"id":"65","name":"Elite Court Reporter Laptop ","count":"2"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fvoice-writers-vox-dragon-laptops\u002f","image":{},"description":{},"id":"79","name":"Voice Writers Vox Dragon Laptops","count":"2"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fdigital-court-reporter-5000-recorders\u002f","image":{},"description":{},"id":"91","name":"Digital Court Reporter 5000 Recorders","count":"0"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fcourt-reporter-microphones\u002f","image":{},"description":{},"id":"22","name":"Court Reporter Microphones","count":"36"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fcourt-reporter-digital-recorders-1\u002f","image":{},"description":{},"id":"25","name":"Court Reporter Digital Recorders","count":"19"},{"children":[{"url":"https:\u002f\u002fmartelelectronics.com\u002fcourt-reporter-steno-writer-microphones\u002f","image":{},"description":{},"id":"90","name":"Court Reporter Steno Writer Microphones","count":"5"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fstenomask-equipment-packages\u002f","image":{},"description":{},"id":"26","name":"Stenomask Equipment Packages","count":"16"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fcourtroom-recorders\u002f","image":{},"description":{},"id":"27","name":"Courtroom Recorders","count":"14"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fdm246-courtroom-recorder-system-for-courts\u002f","image":{},"description":{},"id":"89","name":"DM246 Courtroom Recorder System for Courts","count":"4"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fstenomask-microphones-for-court-reporters\u002f","image":{},"description":{},"id":"23","name":"Stenomask Microphones for Court Reporters","count":"20"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fcourt-reporter-wireless-microphones\u002f","image":{},"description":{},"id":"73","name":"Court Reporter Wireless Microphones","count":"1"}],"url":"https:\u002f\u002fmartelelectronics.com\u002fcourt-reporting-recorders-microphones-equipment\u002f","image":{},"description":{},"id":"19","name":"Court Reporting Recorders & Microphones","count":"84"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fstenomask-microphones\u002f","image":{},"description":{},"id":"77","name":"Stenomask | Microphones","count":"11"},{"url":"https:\u002f\u002fmartelelectronics.com\u002ftranscription\u002f","image":{},"description":{}
3469,"id":"18","name":"Transcription kits ","count":"10"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fzoom-court-reporting\u002f","image":{},"description":{},"id":"66","name":"Zoom Court Reporting","count":"12"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fhybrid-deposition-audio-setup-for-court-reporters\u002f","image":{},"description":{},"id":"92","name":"Hybrid Deposition Audio Setup for Court Reporters","count":"9"},{"children":[{"url":"https:\u002f\u002fmartelelectronics.com\u002fconference-recorders\u002f","image":{},"description":{},"id":"41","name":"Conference Recorders","count":"9"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fdictation-machine-\u002f","image":{},"description":{},"id":"56","name":"Dictation Machine ","count":"2"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fprofessional-dictation-recorders\u002f","image":{},"description":{},"id":"17","name":"Professional Dictation Recorders","count":"10"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fconsumer-dictation-recorders-1\u002f","image":{},"description":{},"id":"45","name":"Consumer Dictation Recorders","count":"7"},{"url":"https:\u002f\u002fmartelelectronics.com\u002flegal-dictation-recorders\u002f","image":{},"description":{},"id":"69","name":"Legal Dictation Recorders","count":"6"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fcourt-reporter-digital-recorders\u002f","image":{},"description":{},"id":"43","name":"Court Reporter Digital Recorders","count":"6"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fdictaphone-1\u002f","image":{},"description":{},"id":"83","name":"Dictaphone","count":"1"}],"url":"https:\u002f\u002fmartelelectronics.com\u002fvoice-recorders\u002f","image":{"data":"https:\u002f\u002fcdn11.bigcommerce.com\u002fs-m0o7bk\u002fimages\u002fstencil\u002f{:size}\u002fv\u002fcategory%20voice%20recorders%20__12236.original.png","alt":"Voice Recorders"},"description":{},"id":"40","name":"Voice Recorders","count":"43"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fzoom-multiple-microphones\u002f","image":{},"description":{},"id":"72","name":"Zoom Multiple Microphones ","count":"11"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fcourtroom-recording-software\u002f","image":{"data":"https:\u002f\u002fcdn11.bigcommerce.com\u002fs-m0o7bk\u002fimages\u002fstencil\u002f{:size}\u002fr\u002fcategory%20courtroom%20recording%20software%20__99997.original.png","alt":"Courtroom Recording Software "},"description":{},"id":"61","name":"Courtroom Recording Software ","count":"6"},{"children":[{"url":"https:\u002f\u002fmartelelectronics.com\u002fdictation-transcription-packages\u002f","image":{},"description":{},"id":"2","name":"Dictation & Transcription Packages","count":"5"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fdictation-machines\u002f","image":{},"description":{},"id":"44","name":"Dictation Machines ","count":"9"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fconsumer-dictation-recorders\u002f","image":{},"description":{},"id":"8","name":"Consumer Dictation Recorders","count":"7"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fdictation-recorder-management-software\u002f","image":{},"description":{},"id":"50","name":"Dictation Recorder Management Software","count":"3"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fdictation-microphones\u002f","image":{},"description":{},"id":"39","name":"Dictation Microphones","count":"0"}],"url":"https:\u002f\u002fmartelelectronics.com\u002fdictation-recorders\u002f","image":{"data":"https:\u002f\u002fcdn11.bigcommerce.com\u002fs-m0o7bk\u002fimages\u002fstencil\u002f{:size}\u002fq\u002fcategory%20dictation%20recorders__50667.original.png","alt":"Dictation Recorders"},"description":{},"id":"3","name":"Dictation Recorders","count":"30"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fpolice-car-cameras\u002f","image":{},"description":{},"id":"20","name":"Police Car Cameras Systems","count":"3"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fpolice-body-camera-packages\u002f","image":{},"description":{}
3469,"id":"71","name":"Police Body Camera Packages","count":"6"},{"children":[{"url":"https:\u002f\u002fmartelelectronics.com\u002fheadsets\u002f","image":{},"description":{},"id":"33","name":"Headsets","count":"6"},{"url":"https:\u002f\u002fmartelelectronics.com\u002ftranscription-foot-pedals\u002f","image":{},"description":{},"id":"34","name":"Transcription Foot Pedals","count":"7"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fac-power-cables\u002f","image":{},"description":{},"id":"35","name":"AC Power Cables","count":"1"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fwireless-microphone-systems-for-courts-meetings\u002f","image":{},"description":{},"id":"51","name":"Wireless Microphone Systems for Courts\u002fMeetings ","count":"1"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fdocking-cradles-for-dictation-machines-recorders\u002f","image":{},"description":{},"id":"47","name":"Docking Cradles for Dictation Machines Recorders","count":"1"},{"url":"https:\u002f\u002fmartelelectronics.com\u002ftelephone-recording-microphones-hookups\u002f","image":{},"description":{},"id":"49","name":"Telephone Recording Microphones & Hookups","count":"0"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fmemory-cards\u002f","image":{},"description":{},"id":"48","name":"Memory Cards","count":"2"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fcables\u002f","image":{},"description":{},"id":"36","name":"Cables","count":"9"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fbatteries\u002f","image":{},"description":{},"id":"37","name":"Batteries","count":"2"},{"url":"https:\u002f\u002fmartelelectronics.com\u002fbonus\u002f","image":{},"description":{},"id":"58","name":"Bonus ","count":"3"},{"children":[{"url":"https:\u002f\u002fmartelelectronics.com\u002fother-items\u002f","image":{},"description":{},"id":"60","name":"Other Items","count":"10"}],"url":"https:\u002f\u002fmartelelectronics.com\u002flearning\u002f","image":{},"description":{},"id":"64","name":"Learning ","count":"10"}],"url":"https:\u002f\u002fmartelelectronics.com\u002faccessories\u002f","image":{"data":"https:\u002f\u002fcdn11.bigcommerce.com\u002fs-m0o7bk\u002fimages\u002fstencil\u002f{:size}\u002fs\u002fcategory%20accessories__94224.original.png","alt":"Accessories"},"description":{},"id":"21","name":"Accessories","count":"54"}], 3470 currency_selector: {"currencies":[{"id":1,"name":"US Dollar","code":"USD","flag":"\u003cimg src=\"https:\u002f\u002fcdn11.bigcommerce.com\u002fs-m0o7bk\u002flib\u002fflags\u002fus.gif\" border=\"0\" alt=\"\" role=\"presentation\" \u002f\u003e","is_active":true,"switch_url":"https:\u002f\u002fmartelelectronics.com\u002fabout\u002f?setCurrencyId=1","cart_currency_switch_url":"https:\u002f\u002fmartelelectronics.com\u002fcart\u002fchange-currency"}],"active_currency_id":1,"active_currency_flag":"\u003cimg src=\"https:\u002f\u002fcdn11.bigcommerce.com\u002fs-m0o7bk\u002flib\u002fflags\u002fus.gif\" border=\"0\" alt=\"\" role=\"presentation\" \u002f\u003e","active_currency_name":"US Dollar","active_currency_code":"USD","default_currency_code":"USD"}, 3471 } 3472 }; 3473 3474 var script = document.createElement('script'); 3475 script.defer = true; 3476 script.src = 'https://app.crucials.io/bc/script.js?storeHash=m0o7bk&channelId=1&v=1789499931061'; 3477 document.head.appendChild(script); 3478 })(); 3479 </script>
3479 3480 3481
3481<script type="application/ld+json" class="cr-rich-snippets"> 3482 3483 3484 </script>
3484 3485 3486
3486<script> 3487(function () { 3488 var path = window.location.pathname || ""; 3489 3490 if (path.indexOf("/police-dash-cam-system-mdp6/") === -1) { 3491 return; 3492 } 3493 3494 if (document.getElementById("martel-mdp6-faq-breadcrumb-schema")) { 3495 return; 3496 } 3497 3498 var schema = { 3499 "@context": "https://schema.org", 3500 "@graph": [ 3501 { 3502 "@type": "BreadcrumbList", 3503 "@id": "https://martelelectronics.com/police-dash-cam-system-mdp6/#breadcrumb", 3504 "itemListElement": [ 3505 { 3506 "@type": "ListItem", 3507 "position": 1, 3508 "name": "Home", 3509 "item": "https://martelelectronics.com/" 3510 }, 3511 { 3512 "@type": "ListItem", 3513 "position": 2, 3514 "name": "Police Car Cameras", 3515 "item": "https://martelelectronics.com/police-car-cameras/" 3516 }, 3517 { 3518 "@type": "ListItem", 3519 "position": 3, 3520 "name": "Police Dash Cam System MDP6", 3521 "item": "https://martelelectronics.com/police-dash-cam-system-mdp6/" 3522 } 3523 ] 3524 }, 3525 { 3526 "@type": "FAQPage", 3527 "@id": "https://martelelectronics.com/police-dash-cam-system-mdp6/#faq", 3528 "mainEntity": [ 3529 { 3530 "@type": "Question", 3531 "name": "What is the MDP6 police dash cam system?", 3532 "acceptedAnswer": { 3533 "@type": "Answer", 3534 "text": "The Martel MDP6 is a portable police dash cam system for law enforcement agencies that combines an HD evidence camera, wireless officer microphone, remote camera control, Micro SD recording, light bar activation cable, and police vehicle recording workflow." 3535 } 3536 }, 3537 { 3538 "@type": "Question", 3539 "name": "Can the MDP6 be used inside and outside the police car?", 3540 "acceptedAnswer": { 3541 "@type": "Answer", 3542 "text": "Yes. The MDP6 is designed as a dual-purpose police dash camera system that can be used inside the police vehicle and removed for crime scene, vehicle search, interview, or evidence documentation." 3543 } 3544 }, 3545 { 3546 "@type": "Question", 3547 "name": "Does the MDP6 require monthly storage fees?", 3548 "acceptedAnswer": { 3549 "@type": "Answer", 3550 "text": "No. The MDP6 records directly to removable memory card storage and is positioned as a one-time purchase without required monthly cloud storage fees." 3551 } 3552 }, 3553 { 3554 "@type": "Question", 3555 "name": "What comes with the MDP6 police dash cam system?", 3556 "acceptedAnswer": { 3557 "@type": "Answer", 3558 "text": "The MDP6 package includes a Sony HD camera, Martel wireless microphone receiver, Martel wireless officer transmitter, Micro SD memory card, officer remote control for zoom and photo capture, light bar record activation trigger cable, instruction manual, installation diagram, and 2-year warranty." 3559 } 3560 }, 3561 { 3562 "@type": "Question", 3563 "name": "Who should buy the MDP6 instead of the DC7?", 3564 "acceptedAnswer": { 3565 "@type": "Answer", 3566 "text": "The MDP6 is best for smaller departments that want a budget-friendly portable police dash cam system. Agencies that need a stronger dedicated patrol vehicle system with front and rear vehicle camera coverage should compare the DC7 Police Car Camera System." 3567 } 3568 } 3569 ] 3570 } 3571 ] 3572 }; 3573 3574 var script = document.createElement("script"); 3575 script.id = "martel-mdp6-faq-breadcrumb-schema"; 3576 script.type = "application/ld+json"; 3577 script.textContent = JSON.stringify(schema); 3578 document.head.appendChild(script); 3579})(); 3580</script>
3580<script> 3581(function () { 3582 var path = window.location.pathname || ""; 3583 3584 if (path.indexOf("/police-car-cameras/") === -1) { 3585 return; 3586 } 3587 3588 if (document.getElementById("martel-police-car-cameras-category-schema")) { 3589 return; 3590 } 3591 3592 var schema = { 3593 "@context": "https://schema.org", 3594 "@graph": [ 3595 { 3596 "@type": "BreadcrumbList", 3597 "@id": "https://martelelectronics.com/police-car-cameras/#breadcrumb", 3598 "itemListElement": [ 3599 { 3600 "@type": "ListItem", 3601 "position": 1, 3602 "name": "Home", 3603 "item": "https://martelelectronics.com/" 3604 }, 3605 { 3606 "@type": "ListItem", 3607 "position": 2, 3608 "name": "Police Car Cameras", 3609 "item": "https://martelelectronics.com/police-car-cameras/" 3610 } 3611 ] 3612 }, 3613 { 3614 "@type": "ItemList", 3615 "@id": "https://martelelectronics.com/police-car-cameras/#police-camera-systems", 3616 "name": "Police Car Camera Systems", 3617 "description": "Compare Martel police car camera systems for law enforcement, including the DC7 dedicated patrol vehicle camera system and the MDP6 portable police dash cam system.", 3618 "itemListElement": [ 3619 { 3620 "@type": "ListItem", 3621 "position": 1, 3622 "url": "https://martelelectronics.com/dc7-police-car-camera-system/", 3623 "name": "DC7 Police Car Camera System" 3624 }, 3625 { 3626 "@type": "ListItem", 3627 "position": 2, 3628 "url": "https://martelelectronics.com/police-dash-cam-system-mdp6/", 3629 "name": "MDP6 Police Dash Cam System" 3630 } 3631 ] 3632 }, 3633 { 3634 "@type": "FAQPage", 3635 "@id": "https://martelelectronics.com/police-car-cameras/#faq", 3636 "mainEntity": [ 3637 { 3638 "@type": "Question", 3639 "name": "What is the best police car camera system for a full patrol vehicle setup?", 3640 "acceptedAnswer": { 3641 "@type": "Answer", 3642 "text": "The DC7 is the better choice for departments that want a stronger dedicated police car camera system with front and rear camera coverage, touchscreen control, MP4 files, wireless officer audio, and optional station upload." 3643 } 3644 }, 3645 { 3646 "@type": "Question", 3647 "name": "What is the best police dash cam for portable evidence recording?", 3648 "acceptedAnswer": { 3649 "@type": "Answer", 3650 "text": "The MDP6 is the better choice when a department wants a portable police dash cam that can be used inside the police vehicle and outside the car for scene video, vehicle searches, still photos, and officer audio." 3651 } 3652 }, 3653 { 3654 "@type": "Question", 3655 "name": "Do Martel police car camera systems require monthly storage fees?", 3656 "acceptedAnswer": { 3657 "@type": "Answer", 3658 "text": "The DC7 core system is positioned with no monthly storage fees, no annual support contracts, and no required software license burden. The MDP6 records to removable Micro SD storage without a required monthly cloud storage fee." 3659 } 3660 }, 3661 { 3662 "@type": "Question", 3663 "name": "Can police departments request written quotes?",
3664 "acceptedAnswer": { 3665 "@type": "Answer", 3666 "text": "Yes. Martel provides written quote options for police departments, sheriff's offices, municipalities, city agencies, and government purchasing teams that need pricing for review, approval, or purchase-order processing." 3667 } 3668 }, 3669 { 3670 "@type": "Question", 3671 "name": "Should a small department choose DC7 or MDP6?", 3672 "acceptedAnswer": { 3673 "@type": "Answer", 3674 "text": "Small departments should choose DC7 when they want a stronger fixed patrol vehicle camera system. They should choose MDP6 when they want a lower-cost portable police dash cam that can also be used for field evidence video outside the vehicle." 3675 } 3676 } 3677 ] 3678 } 3679 ] 3680 }; 3681 3682 var script = document.createElement("script"); 3683 script.id = "martel-police-car-cameras-category-schema"; 3684 script.type = "application/ld+json"; 3685 script.text = JSON.stringify(schema); 3686 document.head.appendChild(script); 3687})(); 3688</script>
3688<script type="text/javascript">// <![CDATA[ 3689(function () { 3690 function initDc7TwoBudgetYearQuoteFixed() { 3691 var form = document.getElementById("dc7QuoteForm"); 3692 if (!form) return; 3693 if (form.getAttribute("data-dc7-two-budget-year-fixed-ready") === "1") return; 3694 form.setAttribute("data-dc7-two-budget-year-fixed-ready", "1"); 3695 3696 var UNIT_PRICE = 3999.99; 3697 var UNIT_YEAR_ONE_PRICE = 2000.00; 3698 var UNIT_YEAR_TWO_PRICE = 1999.99; 3699 var WIRELESS_UPLOAD_PRICE = 399.99; 3700 var WIRELESS_YEAR_ONE_PRICE = 200.00; 3701 var WIRELESS_YEAR_TWO_PRICE = 199.99; 3702 var CA_TAX_RATE = 0.0775; 3703 var ENDPOINT = "https://dc7-quote.martelsales.workers.dev"; 3704 3705 var qtyInput = document.getElementById("dc7_quantity"); 3706 var wirelessCheckbox = document.getElementById("dc7_wireless_upload"); 3707 var billingSameCheckbox = document.getElementById("dc7_billing_same"); 3708 var billingSection = document.getElementById("dc7BillingSection"); 3709 var totalEl = document.getElementById("dc7Total"); 3710 var qtyTextEl = document.getElementById("dc7QtyText"); 3711 var wirelessSummaryRow = document.getElementById("dc7WirelessSummaryRow"); 3712 var wirelessSummaryText = document.getElementById("dc7WirelessSummaryText"); 3713 var statusEl = document.getElementById("dc7Status"); 3714 var submitBtn = document.getElementById("dc7SubmitBtn"); 3715 var submitting = false; 3716 3717 function getPageSource() { 3718 var path = String(window.location.pathname || "").toLowerCase(); 3719 3720 if (path === "/dc7/" || path === "/dc7") { 3721 return "dc7_landing_page"; 3722 } 3723 3724 if (path.indexOf("dc7") !== -1) { 3725 return "dc7_product_page"; 3726 } 3727 3728 return "dc7_quote_page"; 3729 } 3730 3731 if (qtyInput) { 3732 qtyInput.setAttribute("min", "1"); 3733 qtyInput.setAttribute("max", "100"); 3734 qtyInput.setAttribute("step", "1"); 3735 } 3736 3737 function money(value) { 3738 return new Intl.NumberFormat("en-US", { 3739 style: "currency", 3740 currency: "USD" 3741 }).format(Number(value) || 0); 3742 } 3743 3744 function roundMoney(value) { 3745 return Math.round((Number(value || 0) + Number.EPSILON) * 100) / 100; 3746 } 3747 3748 function clean(value) { 3749 return String(value || "").replace(/^\s+|\s+$/g, ""); 3750 } 3751 3752 function val(id) { 3753 var el = document.getElementById(id); 3754 return el ? clean(el.value) : ""; 3755 } 3756 3757 function setText(id, value) { 3758 var el = document.getElementById(id); 3759 if (el) el.textContent = value; 3760 } 3761 3762 function setHTML(id, value) { 3763 var el = document.getElementById(id); 3764 if (el) el.innerHTML = value; 3765 } 3766 3767 function normalizeQty(value) { 3768 var qty = parseInt(value, 10); 3769 if (isNaN(qty)) qty = 1; 3770 if (qty < 1) qty = 1; 3771 if (qty > 100) qty = 100; 3772 return qty; 3773 } 3774 3775 function validEmail(value) { 3776 return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(clean(value)); 3777 } 3778 3779 function isCalifornia(stateValue) { 3780 var state = clean(stateValue).toLowerCase(); 3781 return state === "ca" || state === "california"; 3782 } 3783 3784 function getQuotePlan() { 3785 var selectedPlan = form.querySelector('input[name="quote_plan"]:checked'); 3786 if (selectedPlan && selectedPlan.value) { 3787 return selectedPlan.value; 3788 } 3789 3790 var selectedQuoteType = form.querySelector('input[name="quote_type"]:checked'); 3791 if (selectedQuoteType && selectedQuoteType.value) { 3792 var value = String(selectedQuoteType.value).toLowerCase(); 3793 if (value.indexOf("standard") !== -1 || value.indexOf("full") !== -1) { 3794 return "standard_purchase"; 3795 } 3796 } 3797 3798 return "two_year_budget"; 3799 } 3800 3801 function quotePlanLabel(plan) { 3802 return plan === "standard_purchase" ? "Standard Full Purchase Quote" : "Two-Budget-Year Department Quote"; 3803 } 3804 3805 function ensureAfter(anchor, el) { 3806 if (!anchor || !el || !anchor.parentNode) return; 3807 if (anchor.nextSibling) anchor.parentNode.insertBefore(el, anchor.nextSibling); 3808 else anchor.parentNode.appendChild(el); 3809 } 3810 3811 function ensureSummaryLine(id, afterEl) { 3812 var el = document.getElementById(id); 3813 if (el) return el; 3814 3815 el = document.createElement("div"); 3816 el.id = id; 3817 el.style.cssText = "margin-top:8px;font-size:13px;line-height:1.45;color:#ffffff;"; 3818 3819 if (afterEl && afterEl.parentNode) ensureAfter(afterEl, el); 3820 else if (totalEl && totalEl.parentNode) totalEl.parentNode.appendChild(el); 3821 3822 return el; 3823 } 3824 3825 function getTotals() { 3826 var qty = normalizeQty(qtyInput ? qtyInput.value : 1); 3827 if (qtyInput) qtyInput.value = qty; 3828 3829 var quotePlan = getQuotePlan(); 3830 var isTwoYear = quotePlan !== "standard_purchase"; 3831 var wirelessEnabled = !!(wirelessCheckbox && wirelessCheckbox.checked); 3832 3833 var baseTotal = roundMoney(qty * UNIT_PRICE); 3834 var baseYearOneTotal = roundMoney(qty * UNIT_YEAR_ONE_PRICE); 3835 var baseYearTwoTotal = roundMoney(qty * UNIT_YEAR_TWO_PRICE); 3836
3837 var wirelessTotal = wirelessEnabled ? roundMoney(qty * WIRELESS_UPLOAD_PRICE) : 0; 3838 var wirelessYearOneTotal = wirelessEnabled ? roundMoney(qty * WIRELESS_YEAR_ONE_PRICE) : 0; 3839 var wirelessYearTwoTotal = wirelessEnabled ? roundMoney(qty * WIRELESS_YEAR_TWO_PRICE) : 0; 3840 3841 var productSubtotal = roundMoney(baseTotal + wirelessTotal); 3842 var taxApplies = isCalifornia(val("dc7_ship_state")); 3843 var salesTax = taxApplies ? roundMoney(productSubtotal * CA_TAX_RATE) : 0; 3844 var grandTotal = roundMoney(productSubtotal + salesTax); 3845 3846 var budgetYearOneTotal = isTwoYear ? roundMoney(baseYearOneTotal + wirelessYearOneTotal) : productSubtotal; 3847 var budgetYearTwoTotal = isTwoYear ? roundMoney(baseYearTwoTotal + wirelessYearTwoTotal) : 0; 3848 3849 var budgetYearOneTax = 0; 3850 var budgetYearTwoTax = 0; 3851 3852 if (taxApplies) { 3853 if (isTwoYear) { 3854 budgetYearOneTax = roundMoney(budgetYearOneTotal * CA_TAX_RATE); 3855 budgetYearTwoTax = roundMoney(salesTax - budgetYearOneTax); 3856 } else { 3857 budgetYearOneTax = salesTax; 3858 budgetYearTwoTax = 0; 3859 } 3860 } 3861 3862 var budgetYearOneGrandTotal = roundMoney(budgetYearOneTotal + budgetYearOneTax); 3863 var budgetYearTwoGrandTotal = roundMoney(budgetYearTwoTotal + budgetYearTwoTax); 3864 3865 return { 3866 qty: qty, 3867 quotePlan: quotePlan, 3868 isTwoYear: isTwoYear, 3869 wirelessEnabled: wirelessEnabled, 3870 3871 baseTotal: baseTotal, 3872 baseYearOneTotal: baseYearOneTotal, 3873 baseYearTwoTotal: baseYearTwoTotal, 3874 3875 wirelessTotal: wirelessTotal, 3876 wirelessYearOneTotal: wirelessYearOneTotal, 3877 wirelessYearTwoTotal: wirelessYearTwoTotal, 3878 3879 productSubtotal: productSubtotal, 3880 taxApplies: taxApplies, 3881 salesTax: salesTax, 3882 grandTotal: grandTotal, 3883 3884 budgetYearOneTotal: budgetYearOneTotal, 3885 budgetYearTwoTotal: budgetYearTwoTotal, 3886 budgetYearOneTax: budgetYearOneTax, 3887 budgetYearTwoTax: budgetYearTwoTax, 3888 budgetYearOneGrandTotal: budgetYearOneGrandTotal, 3889 budgetYearTwoGrandTotal: budgetYearTwoGrandTotal 3890 }; 3891 } 3892 3893 function quoteItems(totals) { 3894 var items = []; 3895 3896 if (totals.isTwoYear) { 3897 items.push({ 3898 sku: "2078", 3899 item_number: "2078", 3900 product_name: "DC7 Ultimate Police Car Camera System - Due This Budget Year", 3901 name: "DC7 Ultimate Police Car Camera System - Due This Budget Year", 3902 quantity: String(totals.qty), 3903 unit_price: UNIT_YEAR_ONE_PRICE.toFixed(2), 3904 line_total: totals.baseYearOneTotal.toFixed(2), 3905 option_summary: "First-year DC7 system portion. Two-budget-year department quote. No financing charges. Not a loan." 3906 }); 3907 3908 items.push({ 3909 sku: "2078", 3910 item_number: "2078", 3911 product_name: "DC7 Ultimate Police Car Camera System - Due Next Budget Year", 3912 name: "DC7 Ultimate Police Car Camera System - Due Next Budget Year", 3913 quantity: String(totals.qty), 3914 unit_price: UNIT_YEAR_TWO_PRICE.toFixed(2), 3915 line_total: totals.baseYearTwoTotal.toFixed(2), 3916 option_summary: "Next-year DC7 system portion. Two-budget-year department quote. No financing charges. Not a loan." 3917 }); 3918 3919 if (totals.wirelessEnabled) { 3920 items.push({ 3921 sku: "1180", 3922 item_number: "1180", 3923 product_name: "Automatic Wireless Video Uploading to Police Station Computer - Due This Budget Year", 3924 name: "Automatic Wireless Video Uploading to Police Station Computer - Due This Budget Year", 3925 quantity: String(totals.qty), 3926 unit_price: WIRELESS_YEAR_ONE_PRICE.toFixed(2), 3927 line_total: totals.wirelessYearOneTotal.toFixed(2), 3928 option_summary: "First-year wireless upload add-on portion. One-time upgrade split across the two-budget-year quote. No monthly fees. No cloud. Uses the department's own station computer and routers." 3929 }); 3930 3931 items.push({ 3932 sku: "1180", 3933 item_number: "1180", 3934 product_name: "Automatic Wireless Video Uploading to Police Station Computer - Due Next Budget Year", 3935 name: "Automatic Wireless Video Uploading to Police Station Computer - Due Next Budget Year", 3936 quantity: String(totals.qty), 3937 unit_price: WIRELESS_YEAR_TWO_PRICE.toFixed(2), 3938 line_total: totals.wirelessYearTwoTotal.toFixed(2), 3939 option_summary: "Next-year wireless upload add-on portion. One-time upgrade split across the two-budget-year quote. No monthly fees. No cloud. Uses the department's own station computer and routers." 3940 }); 3941 } 3942 } else { 3943 items.push({ 3944 sku: "2078", 3945 item_number: "2078", 3946 product_name: "DC7 Ultimate Police Car Camera System", 3947 name: "DC7 Ultimate Police Car Camera System", 3948 quantity: String(totals.qty),
3949 unit_price: UNIT_PRICE.toFixed(2), 3950 line_total: totals.baseTotal.toFixed(2), 3951 option_summary: "Standard full purchase quote." 3952 }); 3953 3954 if (totals.wirelessEnabled) { 3955 items.push({ 3956 sku: "1180", 3957 item_number: "1180", 3958 product_name: "Automatic Wireless Video Uploading to Police Station Computer", 3959 name: "Automatic Wireless Video Uploading to Police Station Computer", 3960 quantity: String(totals.qty), 3961 unit_price: WIRELESS_UPLOAD_PRICE.toFixed(2), 3962 line_total: totals.wirelessTotal.toFixed(2), 3963 option_summary: "One-time optional wireless upload upgrade. No monthly fees. No cloud. Uses the department's own station computer and routers." 3964 }); 3965 } 3966 } 3967 3968 return items; 3969 } 3970 3971 function toggleBilling() { 3972 if (!billingSameCheckbox || !billingSection) return; 3973 billingSection.style.display = billingSameCheckbox.checked ? "none" : "block"; 3974 } 3975 3976 function updateTotal() { 3977 var totals = getTotals(); 3978 3979 if (totalEl) totalEl.textContent = money(totals.grandTotal); 3980 if (qtyTextEl) qtyTextEl.textContent = String(totals.qty); 3981 3982 if (totals.wirelessEnabled) { 3983 if (wirelessSummaryRow) wirelessSummaryRow.style.display = "block"; 3984 if (wirelessSummaryText) { 3985 if (totals.isTwoYear) { 3986 wirelessSummaryText.textContent = "Automatic wireless uploading added (" + totals.qty + " × " + money(WIRELESS_UPLOAD_PRICE) + " = " + money(totals.wirelessTotal) + "). Wireless split: " + money(totals.wirelessYearOneTotal) + " this budget year + " + money(totals.wirelessYearTwoTotal) + " next budget year."; 3987 } else { 3988 wirelessSummaryText.textContent = "Automatic wireless uploading added (" + totals.qty + " × " + money(WIRELESS_UPLOAD_PRICE) + " = " + money(totals.wirelessTotal) + ")."; 3989 } 3990 } 3991 } else { 3992 if (wirelessSummaryRow) wirelessSummaryRow.style.display = "none"; 3993 if (wirelessSummaryText) wirelessSummaryText.textContent = ""; 3994 } 3995 3996 var budgetRow = ensureSummaryLine("dc7BudgetSplitSummaryRow", wirelessSummaryRow || totalEl); 3997 var subtotalRow = ensureSummaryLine("dc7SubtotalSummaryRow", budgetRow); 3998 var taxRow = ensureSummaryLine("dc7TaxSummaryRow", subtotalRow); 3999 var afterTaxSplitRow = ensureSummaryLine("dc7AfterTaxSplitSummaryRow", taxRow); 4000 4001 if (budgetRow) { 4002 budgetRow.style.display = "block"; 4003 4004 if (totals.isTwoYear) { 4005 budgetRow.innerHTML = "<strong>Two-Budget-Year Quote:</strong> " + money(totals.budgetYearOneTotal) + " due this budget year + " + money(totals.budgetYearTwoTotal) + " due next budget year before applicable sales tax."; 4006 } else { 4007 budgetRow.innerHTML = "<strong>Standard Full Purchase Quote:</strong> " + money(totals.productSubtotal) + " before applicable sales tax."; 4008 } 4009 } 4010 4011 if (subtotalRow) { 4012 subtotalRow.style.display = "block"; 4013 subtotalRow.innerHTML = "<strong>Product Subtotal:</strong> " + money(totals.productSubtotal); 4014 } 4015 4016 if (taxRow) { 4017 taxRow.style.display = "block"; 4018 4019 if (totals.taxApplies) { 4020 taxRow.innerHTML = "<strong>California Sales Tax 7.75%:</strong> " + money(totals.salesTax); 4021 } else { 4022 taxRow.innerHTML = "<strong>Sales Tax:</strong> " + money(0) + " <span style=\"color:#dbe7f7;\">(only charged for California shipping addresses)</span>"; 4023 } 4024 } 4025 4026 if (afterTaxSplitRow) { 4027 if (totals.isTwoYear && totals.taxApplies) { 4028 afterTaxSplitRow.style.display = "block"; 4029 afterTaxSplitRow.innerHTML = "<strong>Estimated CA-tax split:</strong> " + money(totals.budgetYearOneGrandTotal) + " this budget year including CA tax + " + money(totals.budgetYearTwoGrandTotal) + " next budget year including CA tax."; 4030 } else { 4031 afterTaxSplitRow.style.display = "none"; 4032 afterTaxSplitRow.innerHTML = ""; 4033 } 4034 } 4035 4036 var qtyLabel = totals.qty === 1 ? "1 DC7 system" : totals.qty + " DC7 systems"; 4037 var yearOneDisplay = totals.isTwoYear ? money(totals.budgetYearOneTotal) : money(totals.grandTotal); 4038 var yearTwoDisplay = totals.isTwoYear ? money(totals.budgetYearTwoTotal) : "$0.00"; 4039 4040 setText("dc7YearOneSummaryText", yearOneDisplay); 4041 setText("dc7YearTwoSummaryText", yearTwoDisplay); 4042 4043 setText("dc7HeroTotal", money(totals.grandTotal)); 4044 setText("dc7HeroThis", yearOneDisplay); 4045 setText("dc7HeroYearOne", yearOneDisplay); 4046 setText("dc7HeroYearTwo", yearTwoDisplay); 4047 setText("dc7SideTotal", money(totals.grandTotal)); 4048 setText("dc7SideSmall", qtyLabel + " selected"); 4049 setText("dc7BannerTotal", money(totals.grandTotal)); 4050 setText("dc7BannerYearOne", yearOneDisplay); 4051 setText("dc7BannerYearTwo", yearTwoDisplay); 4052 4053 if (totals.isTwoYear) { 4054 setHTML("dc7HeroSplitText", "Two-Budget-Year Department Quote: " + yearOneDisplay + " due this budget year + " + yearTwoDisplay + " due next budget year before applicable sales tax. Available for qualifying government agencies with approved purchase-order/payment terms. No financing charges. Not a loan."); 4055 setHTML("dc7SideYellowText", "<strong style=\"display:block;font-size:15px;margin-bottom:5px;font-weight:900;\">Two-Budget-Year Quote Available</strong>" + yearOneDisplay + " due this budget year + " + yearTwoDisplay + " due next budget year before applicable sales tax. No financing charges. Not a loan."); 4056 } else { 4057 setHTML("dc7HeroSplitText", "Standard Full Purchase Quote: " + money(totals.grandTotal) + " total calculated quote for " + qtyLabel + ". Optional wireless uploading is included only if selected."); 4058 setHTML("dc7SideYellowText", "<strong style=\"display:block;font-size:15px;margin-bottom:5px;font-weight:900;\">Standard Full Purchase Quote Selected</strong>" + money(totals.grandTotal) + " total calculated quote. No next-budget-year balance shown."); 4059 } 4060 } 4061 4062 function setStatus(type, message) { 4063 if (!statusEl) return; 4064 4065 if (!type) { 4066 statusEl.style.display = "none"; 4067 statusEl.textContent = ""; 4068 statusEl.style.background = ""; 4069 statusEl.style.color = ""; 4070 statusEl.style.border = ""; 4071 return; 4072 } 4073 4074 statusEl.style.display = "block"; 4075 statusEl.textContent = message; 4076 4077 if (type === "success") { 4078 statusEl.style.background = "#ecfdf5"; 4079 statusEl.style.color = "#065f46"; 4080 statusEl.style.border = "1px solid #a7f3d0"; 4081 } else { 4082 statusEl.style.background = "#fef2f2"; 4083 statusEl.style.color = "#991b1b"; 4084 statusEl.style.border = "1px solid #fecaca"; 4085 } 4086 } 4087 4088 function validateForm() { 4089 if (val("dc7_website")) return "Please refresh the page and try again."; 4090 if (!val("dc7_name")) return "Please enter Full Name."; 4091 if (!val("dc7_agency")) return "Please enter Agency / Department."; 4092 if (!val("dc7_email")) return "Please enter Business Email."; 4093 if (!validEmail(val("dc7_email"))) return "Please enter a valid Business Email."; 4094 if (!qtyInput || normalizeQty(qtyInput.value) < 1) return "Please enter how many DC7 systems you need.";
4095 if (!val("dc7_ship_address1")) return "Please enter Shipping Address Line 1."; 4096 if (!val("dc7_ship_city")) return "Please enter Shipping City."; 4097 if (!val("dc7_ship_state")) return "Please enter Shipping State."; 4098 if (!val("dc7_ship_zip")) return "Please enter Shipping ZIP."; 4099 4100 if (billingSameCheckbox && !billingSameCheckbox.checked) { 4101 if (!val("dc7_bill_address1")) return "Please enter Billing Address Line 1."; 4102 if (!val("dc7_bill_city")) return "Please enter Billing City."; 4103 if (!val("dc7_bill_state")) return "Please enter Billing State."; 4104 if (!val("dc7_bill_zip")) return "Please enter Billing ZIP."; 4105 } 4106 4107 return ""; 4108 } 4109 4110 function buildPaymentSummary(totals) { 4111 var wirelessPart = totals.wirelessEnabled 4112 ? " Wireless upload add-on split: " + money(totals.wirelessYearOneTotal) + " due this budget year and " + money(totals.wirelessYearTwoTotal) + " due next budget year. Total wireless add-on: " + money(totals.wirelessTotal) + "." 4113 : " No optional wireless upload selected."; 4114 4115 if (totals.isTwoYear) { 4116 return "Two-Budget-Year Department Quote. DC7 system split: " + money(totals.baseYearOneTotal) + " due this budget year and " + money(totals.baseYearTwoTotal) + " due next budget year." + wirelessPart + " Combined two-budget-year split before applicable sales tax: " + money(totals.budgetYearOneTotal) + " due this budget year and " + money(totals.budgetYearTwoTotal) + " due next budget year. Product subtotal before tax: " + money(totals.productSubtotal) + ". Sales tax: " + money(totals.salesTax) + ". Grand total: " + money(totals.grandTotal) + ". " + (totals.taxApplies ? "California sales tax is shown separately and is collected with the first invoice." : "Sales tax is not charged unless shipping to California."); 4117 } 4118 4119 return "Standard Full Purchase Quote. Full calculated quote before applicable sales tax: " + money(totals.productSubtotal) + ". Sales tax: " + money(totals.salesTax) + ". Grand total: " + money(totals.grandTotal) + "."; 4120 } 4121 4122 function buildPayload(totals) { 4123 var sameBilling = billingSameCheckbox ? billingSameCheckbox.checked : true; 4124 var items = quoteItems(totals); 4125 var paymentSummary = buildPaymentSummary(totals); 4126 var paymentOption = quotePlanLabel(totals.quotePlan); 4127 var pageSource = getPageSource(); 4128 4129 return { 4130 quote_type: "saved_multi_item", 4131 saved_multi_item: "dc7_written_quote_page", 4132 request_type: "dc7_instant_written_quote", 4133 quote_cycle: totals.isTwoYear ? "two_budget_year" : "standard_purchase", 4134 source: pageSource, 4135 source_url: window.location.href, 4136 product_url: window.location.href, 4137 4138 product_name: totals.isTwoYear ? "DC7 Ultimate Police Car Camera System - Two-Budget-Year Department Quote" : "DC7 Ultimate Police Car Camera System", 4139 sku: "2078", 4140 item_number: "2078", 4141 quantity: String(totals.qty), 4142 unit_price: UNIT_PRICE.toFixed(2), 4143 line_total: totals.baseTotal.toFixed(2), 4144 4145 product_subtotal: totals.productSubtotal.toFixed(2), 4146 subtotal: totals.productSubtotal.toFixed(2), 4147 sales_tax_rate: totals.taxApplies ? "7.75%" : "0%", 4148 sales_tax_amount: totals.salesTax.toFixed(2), 4149 tax_state_basis: val("dc7_ship_state"), 4150 grand_total: totals.grandTotal.toFixed(2), 4151 quote_total: totals.grandTotal.toFixed(2), 4152 total: totals.grandTotal.toFixed(2), 4153 4154 payment_option: paymentOption, 4155 payment_option_summary: paymentSummary, 4156 option_summary: paymentSummary, 4157 quote_notes: paymentSummary, 4158 4159 budget_year_1_unit_price: totals.isTwoYear ? UNIT_YEAR_ONE_PRICE.toFixed(2) : "", 4160 budget_year_2_unit_price: totals.isTwoYear ? UNIT_YEAR_TWO_PRICE.toFixed(2) : "", 4161 budget_year_1_total: totals.budgetYearOneTotal.toFixed(2), 4162 budget_year_2_total: totals.budgetYearTwoTotal.toFixed(2), 4163 budget_year_1_tax: totals.budgetYearOneTax.toFixed(2), 4164 budget_year_2_tax: totals.budgetYearTwoTax.toFixed(2), 4165 budget_year_1_grand_total: totals.budgetYearOneGrandTotal.toFixed(2), 4166 budget_year_2_grand_total: totals.budgetYearTwoGrandTotal.toFixed(2), 4167 4168 dc7_budget_year_1_total: totals.baseYearOneTotal.toFixed(2), 4169 dc7_budget_year_2_total: totals.baseYearTwoTotal.toFixed(2), 4170 4171 wireless_upload_budget_year_1_unit_price: totals.wirelessEnabled && totals.isTwoYear ? WIRELESS_YEAR_ONE_PRICE.toFixed(2) : "", 4172 wireless_upload_budget_year_2_unit_price: totals.wirelessEnabled && totals.isTwoYear ? WIRELESS_YEAR_TWO_PRICE.toFixed(2) : "", 4173 wireless_upload_budget_year_1_total: totals.wirelessEnabled && totals.isTwoYear ? totals.wirelessYearOneTotal.toFixed(2) : "", 4174 wireless_upload_budget_year_2_total: totals.wirelessEnabled && totals.isTwoYear ? totals.wirelessYearTwoTotal.toFixed(2) : "", 4175 4176 notes: val("dc7_message"), 4177 message: val("dc7_message"), 4178 4179 name: val("dc7_name"), 4180 title: val("dc7_title"), 4181 agency: val("dc7_agency"), 4182 company: val("dc7_agency"), 4183 email: val("dc7_email"), 4184 second_email: "", 4185 phone: val("dc7_phone"), 4186 timeframe: val("dc7_timeframe"), 4187 city: val("dc7_ship_city"), 4188 state: val("dc7_ship_state"), 4189 4190 shipping_name: val("dc7_ship_name") || val("dc7_name"), 4191 shipping_company: val("dc7_ship_company") || val("dc7_agency"), 4192 shipping_address1: val("dc7_ship_address1"), 4193 shipping_address2: val("dc7_ship_address2"), 4194 shipping_city: val("dc7_ship_city"), 4195 shipping_state: val("dc7_ship_state"), 4196 shipping_zip: val("dc7_ship_zip"), 4197 4198 billing_same_as_shipping: sameBilling, 4199 billing_name: sameBilling ? (val("dc7_ship_name") || val("dc7_name")) : val("dc7_bill_name"), 4200 billing_company: sameBilling ? (val("dc7_ship_company") || val("dc7_agency")) : val("dc7_bill_company"), 4201 billing_address1: sameBilling ? val("dc7_ship_address1") : val("dc7_bill_address1"), 4202 billing_address2: sameBilling ? val("dc7_ship_address2") : val("dc7_bill_address2"), 4203 billing_city: sameBilling ? val("dc7_ship_city") : val("dc7_bill_city"), 4204 billing_state: sameBilling ? val("dc7_ship_state") : val("dc7_bill_state"), 4205 billing_zip: sameBilling ? val("dc7_ship_zip") : val("dc7_bill_zip"), 4206 4207 wireless_upload_enabled: totals.wirelessEnabled, 4208 wireless_upload_price: totals.wirelessEnabled ? WIRELESS_UPLOAD_PRICE.toFixed(2) : "", 4209 wireless_upload_total: totals.wirelessEnabled ? totals.wirelessTotal.toFixed(2) : "", 4210 4211 items: items, 4212 line_items: items, 4213 item_count: String(items.length), 4214 website: val("dc7_website") 4215 }; 4216 } 4217 4218 function handleSubmit(event) { 4219 if (event) { 4220 event.preventDefault(); 4221 if (event.stopPropagation) event.stopPropagation(); 4222 if (event.stopImmediatePropagation) event.stopImmediatePropagation(); 4223 } 4224 4225 if (submitting) return false;
4226 4227 updateTotal(); 4228 4229 var error = validateForm(); 4230 if (error) { 4231 setStatus("error", error); 4232 return false; 4233 } 4234 4235 var totals = getTotals(); 4236 var payload = buildPayload(totals); 4237 4238 submitting = true; 4239 4240 if (submitBtn) { 4241 submitBtn.disabled = true; 4242 submitBtn.textContent = "Sending Quote..."; 4243 } 4244 4245 setStatus(null, ""); 4246 4247 fetch(ENDPOINT, { 4248 method: "POST", 4249 headers: { 4250 "Content-Type": "application/json" 4251 }, 4252 body: JSON.stringify(payload) 4253 }) 4254 .then(function (response) { 4255 return response.text().then(function (text) { 4256 var result = {}; 4257 try { 4258 result = JSON.parse(text); 4259 } catch (e) {} 4260 4261 if (!response.ok || result.ok === false) { 4262 var message = result.error || result.message || "Unable to send quote right now."; 4263 if (result.details) message += " " + result.details; 4264 throw new Error(message); 4265 } 4266 4267 var successMessage = "Your written quotation has been emailed. Please check your inbox. If you do not see it, check your spam folder or contact Martel Electronics."; 4268 if (result.quote_reference) successMessage += " Quote reference: " + result.quote_reference + "."; 4269 setStatus("success", successMessage); 4270 }); 4271 }) 4272 .catch(function (err) { 4273 setStatus("error", err && err.message ? err.message : "Unable to send quote right now. Please try again or contact Martel Electronics."); 4274 }) 4275 .then(function () { 4276 submitting = false; 4277 if (submitBtn) { 4278 submitBtn.disabled = false; 4279 submitBtn.textContent = "Email Me My Instant Written Quote"; 4280 } 4281 }); 4282 4283 return false; 4284 } 4285 4286 if (qtyInput) { 4287 qtyInput.addEventListener("input", updateTotal); 4288 qtyInput.addEventListener("change", updateTotal); 4289 qtyInput.addEventListener("keyup", updateTotal); 4290 qtyInput.addEventListener("blur", updateTotal); 4291 } 4292 4293 if (wirelessCheckbox) { 4294 wirelessCheckbox.addEventListener("change", updateTotal); 4295 wirelessCheckbox.addEventListener("click", function () { setTimeout(updateTotal, 0); }); 4296 } 4297 4298 if (billingSameCheckbox) { 4299 billingSameCheckbox.addEventListener("change", toggleBilling); 4300 billingSameCheckbox.addEventListener("click", function () { setTimeout(toggleBilling, 0); }); 4301 } 4302 4303 var stateInput = document.getElementById("dc7_ship_state"); 4304 if (stateInput) { 4305 stateInput.addEventListener("input", updateTotal); 4306 stateInput.addEventListener("change", updateTotal); 4307 stateInput.addEventListener("keyup", updateTotal); 4308 stateInput.addEventListener("blur", updateTotal); 4309 } 4310 4311 var quotePlanRadios = form.querySelectorAll('input[name="quote_plan"], input[name="quote_type"]'); 4312 for (var i = 0; i < quotePlanRadios.length; i++) { 4313 quotePlanRadios[i].addEventListener("change", updateTotal); 4314 quotePlanRadios[i].addEventListener("click", function () { setTimeout(updateTotal, 0); }); 4315 } 4316 4317 form.onsubmit = handleSubmit; 4318 form.addEventListener("submit", handleSubmit, true); 4319 4320 if (submitBtn) { 4321 submitBtn.setAttribute("type", "button"); 4322 submitBtn.addEventListener("click", handleSubmit, true); 4323 } 4324 4325 toggleBilling(); 4326 updateTotal(); 4327 } 4328 4329 if (document.readyState === "loading") { 4330 document.addEventListener("DOMContentLoaded", initDc7TwoBudgetYearQuoteFixed); 4331 } else { 4332 initDc7TwoBudgetYearQuoteFixed(); 4333 } 4334 4335 window.addEventListener("load", function () { 4336 initDc7TwoBudgetYearQuoteFixed(); 4337 setTimeout(initDc7TwoBudgetYearQuoteFixed, 250); 4338 }); 4339})(); 4340// ]]></script>
4340<script> 4341(function () { 4342 var path = window.location.pathname || ""; 4343 4344 if (path.indexOf("/zoom-multiple-microphones/") === -1) { 4345 return; 4346 } 4347 4348 var schemaId = "martel-zoom-multiple-microphones-category-schema-fixed"; 4349 4350 function removeOldZoomSchemas() { 4351 var scripts = document.querySelectorAll('script[type="application/ld+json"]'); 4352 4353 for (var i = 0; i < scripts.length; i++) { 4354 var script = scripts[i]; 4355 var text = String(script.textContent || ""); 4356 4357 if (script.id === schemaId) { 4358 if (script.parentNode) { 4359 script.parentNode.removeChild(script); 4360 } 4361 continue; 4362 } 4363 4364 if ( 4365 text.indexOf("https://martelelectronics.com/zoom-multiple-microphones/#faq") !== -1 || 4366 text.indexOf("https://martelelectronics.com/zoom-multiple-microphones/#itemlist") !== -1 || 4367 text.indexOf("martel-zoom-multiple-microphones-category-schema") !== -1 4368 ) { 4369 if (script.parentNode) { 4370 script.parentNode.removeChild(script); 4371 } 4372 } 4373 } 4374 } 4375 4376 removeOldZoomSchemas(); 4377 4378 var schema = { 4379 "@context": "https://schema.org", 4380 "@graph": [ 4381 { 4382 "@type": "BreadcrumbList", 4383 "@id": "https://martelelectronics.com/zoom-multiple-microphones/#breadcrumb", 4384 "itemListElement": [ 4385 { 4386 "@type": "ListItem", 4387 "position": 1, 4388 "name": "Home", 4389 "item": "https://martelelectronics.com/" 4390 }, 4391 { 4392 "@type": "ListItem", 4393 "position": 2, 4394 "name": "Zoom Multiple Microphones", 4395 "item": "https://martelelectronics.com/zoom-multiple-microphones/" 4396 } 4397 ] 4398 }, 4399 { 4400 "@type": "CollectionPage", 4401 "@id": "https://martelelectronics.com/zoom-multiple-microphones/#webpage", 4402 "url": "https://martelelectronics.com/zoom-multiple-microphones/", 4403 "name": "Zoom Multiple Microphones for Zoom, Teams & Hybrid Meetings", 4404 "description": "Compare Martel Zoom multiple microphone systems for conference rooms, boardrooms, courtrooms, city meetings, Microsoft Teams, Webex, and hybrid meetings.", 4405 "isPartOf": { 4406 "@type": "WebSite", 4407 "@id": "https://martelelectronics.com/#website", 4408 "name": "Martel Electronics", 4409 "url": "https://martelelectronics.com/" 4410 }, 4411 "breadcrumb": { 4412 "@id": "https://martelelectronics.com/zoom-multiple-microphones/#breadcrumb" 4413 }, 4414 "mainEntity": { 4415 "@id": "https://martelelectronics.com/zoom-multiple-microphones/#itemlist" 4416 } 4417 }, 4418 { 4419 "@type": "ItemList", 4420 "@id": "https://martelelectronics.com/zoom-multiple-microphones/#itemlist", 4421 "name": "Zoom Multiple Microphone Systems", 4422 "description": "Four Martel USB multiple microphone systems for Zoom, Teams, Webex, conference rooms, boardrooms, courtrooms, city meetings, and hybrid meetings.", 4423 "numberOfItems": 4, 4424 "itemListElement": [ 4425 { 4426 "@type": "ListItem", 4427 "position": 1, 4428 "name": "4 Microphone USB System for Zoom", 4429 "url": "https://martelelectronics.com/zoom-usb-multiple-microphones-system/" 4430 }, 4431 { 4432 "@type": "ListItem", 4433 "position": 2, 4434 "name": "8 Microphone USB System for Zoom and Hybrid Meetings", 4435 "url": "https://martelelectronics.com/zoom-usb-multiple-microphones-system-8-microphone-mixer-package-hybrid-meetings/" 4436 }, 4437 { 4438 "@type": "ListItem", 4439 "position": 3, 4440 "name": "12 Microphone USB System for Boardrooms", 4441 "url": "https://martelelectronics.com/zoom-usb-multiple-microphones-system-12-microphone-mixer-package-boardrooms/" 4442 }, 4443 { 4444 "@type": "ListItem", 4445 "position": 4, 4446 "name": "16 Microphone USB System for Large Meeting Rooms", 4447 "url": "https://martelelectronics.com/zoom-usb-multiple-microphones-system-16-microphone-mixer/" 4448 } 4449 ] 4450 }, 4451 { 4452 "@type": "FAQPage", 4453 "@id": "https://martelelectronics.com/zoom-multiple-microphones/#faq", 4454 "mainEntity": [ 4455 { 4456 "@type": "Question", 4457 "name": "Can Zoom use multiple microphones at the same time?",
4458 "acceptedAnswer": { 4459 "@type": "Answer", 4460 "text": "Zoom normally selects one microphone input, so Martel USB multiple microphone systems combine several microphones into one USB audio input for the computer. This lets several microphones work together as one unified microphone system for Zoom meetings." 4461 } 4462 }, 4463 { 4464 "@type": "Question", 4465 "name": "Which Zoom multiple microphone system should I choose?", 4466 "acceptedAnswer": { 4467 "@type": "Answer", 4468 "text": "Choose the 4 microphone system for up to 6 people, the 8 microphone system for 7 to 11 people, the 12 microphone system for 12 to 20 people, and the 16 microphone system for 20 or more people." 4469 } 4470 }, 4471 { 4472 "@type": "Question", 4473 "name": "Will these microphone systems work with Microsoft Teams and Webex?", 4474 "acceptedAnswer": { 4475 "@type": "Answer", 4476 "text": "Yes. Martel USB multiple microphone systems are designed for Zoom and hybrid meetings and are also strong fits for Microsoft Teams, Webex, and other video conferencing software that uses a computer USB microphone input." 4477 } 4478 }, 4479 { 4480 "@type": "Question", 4481 "name": "Do Zoom multiple microphone systems need software?", 4482 "acceptedAnswer": { 4483 "@type": "Answer", 4484 "text": "No. These are plug-and-play USB microphone systems designed to connect to the computer without complicated software setup." 4485 } 4486 }, 4487 { 4488 "@type": "Question", 4489 "name": "Why not use one microphone in the middle of the table?", 4490 "acceptedAnswer": { 4491 "@type": "Answer", 4492 "text": "One center microphone may not pick up everyone clearly in a larger room, especially when people sit farther away, speak softly, or sit around a long table. Multiple microphones spread around the table help reduce weak pickup and dead zones." 4493 } 4494 }, 4495 { 4496 "@type": "Question", 4497 "name": "Do Martel Zoom multiple microphone systems include support?", 4498 "acceptedAnswer": { 4499 "@type": "Answer", 4500 "text": "Yes. Martel Zoom multiple microphone systems include real Martel support, and the product pages list a 30-day money-back guarantee and a 3-year warranty." 4501 } 4502 } 4503 ] 4504 } 4505 ] 4506 }; 4507 4508 var script = document.createElement("script"); 4509 script.id = schemaId; 4510 script.type = "application/ld+json"; 4511 script.textContent = JSON.stringify(schema); 4512 document.head.appendChild(script); 4513})(); 4514</script>
4514<script> 4515(function () { 4516 var path = window.location.pathname || ""; 4517 4518 if (path.indexOf("/court-reporter-microphones/") === -1) { 4519 return; 4520 } 4521 4522 var schemaId = "martel-court-reporter-microphones-category-schema"; 4523 4524 function removeOldCourtReporterMicSchemas() { 4525 var scripts = document.querySelectorAll('script[type="application/ld+json"]'); 4526 4527 for (var i = 0; i < scripts.length; i++) { 4528 var script = scripts[i]; 4529 var text = String(script.textContent || ""); 4530 4531 if (script.id === schemaId) { 4532 if (script.parentNode) { 4533 script.parentNode.removeChild(script); 4534 } 4535 continue; 4536 } 4537 4538 if ( 4539 text.indexOf("https://martelelectronics.com/court-reporter-microphones/#faq") !== -1 || 4540 text.indexOf("https://martelelectronics.com/court-reporter-microphones/#itemlist") !== -1 || 4541 text.indexOf("martel-court-reporter-microphones-category-schema") !== -1 4542 ) { 4543 if (script.parentNode) { 4544 script.parentNode.removeChild(script); 4545 } 4546 } 4547 } 4548 } 4549 4550 removeOldCourtReporterMicSchemas(); 4551 4552 var schema = { 4553 "@context": "https://schema.org", 4554 "@graph": [ 4555 { 4556 "@type": "BreadcrumbList", 4557 "@id": "https://martelelectronics.com/court-reporter-microphones/#breadcrumb", 4558 "itemListElement": [ 4559 { 4560 "@type": "ListItem", 4561 "position": 1, 4562 "name": "Home", 4563 "item": "https://martelelectronics.com/" 4564 }, 4565 { 4566 "@type": "ListItem", 4567 "position": 2, 4568 "name": "Court Reporter Microphones", 4569 "item": "https://martelelectronics.com/court-reporter-microphones/" 4570 } 4571 ] 4572 }, 4573 { 4574 "@type": "CollectionPage", 4575 "@id": "https://martelelectronics.com/court-reporter-microphones/#webpage", 4576 "url": "https://martelelectronics.com/court-reporter-microphones/", 4577 "name": "Court Reporter Microphones | USB, Writer & Courtroom Mics", 4578 "description": "Shop court reporter microphones for laptops, steno writers, Zoom depositions, and courtroom recording. Compare USB, wireless, writer, and multi-mic options from Martel.", 4579 "isPartOf": { 4580 "@type": "WebSite", 4581 "@id": "https://martelelectronics.com/#website", 4582 "name": "Martel Electronics", 4583 "url": "https://martelelectronics.com/" 4584 }, 4585 "breadcrumb": { 4586 "@id": "https://martelelectronics.com/court-reporter-microphones/#breadcrumb" 4587 }, 4588 "mainEntity": { 4589 "@id": "https://martelelectronics.com/court-reporter-microphones/#itemlist" 4590 } 4591 }, 4592 { 4593 "@type": "ItemList", 4594 "@id": "https://martelelectronics.com/court-reporter-microphones/#itemlist", 4595 "name": "Court Reporter Microphones", 4596 "description": "Compare Martel court reporter microphones for USB laptop recording, steno writers, Zoom depositions, wireless courtroom audio, and multi-microphone courtroom coverage.", 4597 "numberOfItems": 6, 4598 "itemListElement": [ 4599 { 4600 "@type": "ListItem", 4601 "position": 1, 4602 "name": "HGM-2 Court Reporter Microphone with Battery Tester Built In", 4603 "url": "https://martelelectronics.com/hgm-2-court-reporter-microphone-w-battery-tester-built-in/" 4604 }, 4605 { 4606 "@type": "ListItem", 4607 "position": 2, 4608 "name": "Elite Court Reporter USB Microphone HGM-USB", 4609 "url": "https://martelelectronics.com/elite-court-reporter-usb-microphone-hgm-usb/" 4610 }, 4611 { 4612 "@type": "ListItem", 4613 "position": 3, 4614 "name": "Zoom Compatible Court Reporter Teleconference and Recording Kit", 4615 "url": "https://martelelectronics.com/zoom-compatible-court-reporter-teleconference-and-recording-kit-compatible-with-all-cat-programs/" 4616 }, 4617 { 4618 "@type": "ListItem", 4619 "position": 4, 4620 "name": "Luminex Steno Writer Microphone Ultimate Edition Kit", 4621 "url": "https://martelelectronics.com/luminex-steno-writer-microphone-ultimate-edition-kit-no-battery-only-from-martel/" 4622 }, 4623 { 4624 "@type": "ListItem", 4625 "position": 5, 4626 "name": "Elite Court Reporter USB 3 Microphone Package", 4627 "url": "https://martelelectronics.com/elite-court-reporter-usb-3-microphone-package/" 4628 }, 4629 { 4630 "@type": "ListItem", 4631 "position": 6, 4632 "name": "Sidebar Wireless Microphone for Court Reporters", 4633 "url": "https://martelelectronics.com/sidebar-wireless-microphone-for-court-reporters/" 4634 } 4635 ] 4636 }, 4637 { 4638 "@type": "FAQPage", 4639 "@id": "https://martelelectronics.com/court-reporter-microphones/#faq", 4640 "mainEntity": [ 4641 { 4642 "@type": "Question", 4643 "name": "What is the best court reporter microphone?",
4644 "acceptedAnswer": { 4645 "@type": "Answer", 4646 "text": "The best court reporter microphone depends on your setup. HGMUSB is best for USB laptop recording, HGM-2 is a strong battery-powered option, Luminex Mic is for steno writer audio, and Elite USB 3 is best for multi-microphone courtroom coverage." 4647 } 4648 }, 4649 { 4650 "@type": "Question", 4651 "name": "Do I need a USB court reporter microphone?", 4652 "acceptedAnswer": { 4653 "@type": "Answer", 4654 "text": "Choose a USB court reporter microphone when you want laptop recording, AudioSync, or software-based recording without relying on a battery-powered microphone connection." 4655 } 4656 }, 4657 { 4658 "@type": "Question", 4659 "name": "Will a steno writer microphone work with my laptop?", 4660 "acceptedAnswer": { 4661 "@type": "Answer", 4662 "text": "Not always. Some microphones are designed for steno writer input, while USB microphones are designed for laptop input. Check compatibility before choosing." 4663 } 4664 }, 4665 { 4666 "@type": "Question", 4667 "name": "Which microphone is best for Zoom depositions?", 4668 "acceptedAnswer": { 4669 "@type": "Answer", 4670 "text": "For Zoom depositions and remote court reporting jobs, start with the Zoom Court Reporter Kit or visit the Zoom Court Reporting category for remote audio setups." 4671 } 4672 }, 4673 { 4674 "@type": "Question", 4675 "name": "Why would I need a multi-microphone package?", 4676 "acceptedAnswer": { 4677 "@type": "Answer", 4678 "text": "A multi-microphone package can help when you need broader courtroom or deposition room coverage instead of relying on one microphone in one location." 4679 } 4680 }, 4681 { 4682 "@type": "Question", 4683 "name": "Should I keep a backup recording microphone?", 4684 "acceptedAnswer": { 4685 "@type": "Answer", 4686 "text": "Many reporters prefer backup audio options because transcript confidence depends on dependable audio. Choose a microphone that matches your software, writer, and backup recording workflow." 4687 } 4688 } 4689 ] 4690 } 4691 ] 4692 }; 4693 4694 var script = document.createElement("script"); 4695 script.id = schemaId; 4696 script.type = "application/ld+json"; 4697 script.textContent = JSON.stringify(schema); 4698 document.head.appendChild(script); 4699})(); 4700</script>
4700<script> 4701(function () { 4702 var path = window.location.pathname || ""; 4703 4704 if (path.indexOf("/court-reporting-recorders-microphones-equipment/") === -1) { 4705 return; 4706 } 4707 4708 var schemaId = "martel-court-reporting-equipment-category-schema"; 4709 4710 function removeOldCourtReportingEquipmentSchemas() { 4711 var scripts = document.querySelectorAll('script[type="application/ld+json"]'); 4712 4713 for (var i = 0; i < scripts.length; i++) { 4714 var script = scripts[i]; 4715 var text = String(script.textContent || ""); 4716 4717 if (script.id === schemaId) { 4718 if (script.parentNode) { 4719 script.parentNode.removeChild(script); 4720 } 4721 continue; 4722 } 4723 4724 if ( 4725 text.indexOf("https://martelelectronics.com/court-reporting-recorders-microphones-equipment/#faq") !== -1 || 4726 text.indexOf("https://martelelectronics.com/court-reporting-recorders-microphones-equipment/#itemlist") !== -1 || 4727 text.indexOf("martel-court-reporting-equipment-category-schema") !== -1 4728 ) { 4729 if (script.parentNode) { 4730 script.parentNode.removeChild(script); 4731 } 4732 } 4733 } 4734 } 4735 4736 removeOldCourtReportingEquipmentSchemas(); 4737 4738 var schema = { 4739 "@context": "https://schema.org", 4740 "@graph": [ 4741 { 4742 "@type": "BreadcrumbList", 4743 "@id": "https://martelelectronics.com/court-reporting-recorders-microphones-equipment/#breadcrumb", 4744 "itemListElement": [ 4745 { 4746 "@type": "ListItem", 4747 "position": 1, 4748 "name": "Home", 4749 "item": "https://martelelectronics.com/" 4750 }, 4751 { 4752 "@type": "ListItem", 4753 "position": 2, 4754 "name": "Court Reporting Recorders & Microphones", 4755 "item": "https://martelelectronics.com/court-reporting-recorders-microphones-equipment/" 4756 } 4757 ] 4758 }, 4759 { 4760 "@type": "CollectionPage", 4761 "@id": "https://martelelectronics.com/court-reporting-recorders-microphones-equipment/#webpage", 4762 "url": "https://martelelectronics.com/court-reporting-recorders-microphones-equipment/", 4763 "name": "Court Reporting Equipment | Recorders, Microphones & Stenomasks", 4764 "description": "Shop court reporting equipment including court reporter microphones, digital recorders, stenomasks, Zoom court reporting kits, wireless microphones, and voice writing tools from Martel.", 4765 "isPartOf": { 4766 "@type": "WebSite", 4767 "@id": "https://martelelectronics.com/#website", 4768 "name": "Martel Electronics", 4769 "url": "https://martelelectronics.com/" 4770 }, 4771 "breadcrumb": { 4772 "@id": "https://martelelectronics.com/court-reporting-recorders-microphones-equipment/#breadcrumb" 4773 }, 4774 "mainEntity": { 4775 "@id": "https://martelelectronics.com/court-reporting-recorders-microphones-equipment/#itemlist" 4776 } 4777 }, 4778 { 4779 "@type": "ItemList", 4780 "@id": "https://martelelectronics.com/court-reporting-recorders-microphones-equipment/#itemlist", 4781 "name": "Court Reporting Equipment Categories", 4782 "description": "Martel court reporting equipment categories including court reporter microphones, digital recorders, stenomasks, Zoom court reporting kits, wireless microphones, steno writer microphones, and reporting laptops.", 4783 "numberOfItems": 8, 4784 "itemListElement": [ 4785 { 4786 "@type": "ListItem", 4787 "position": 1, 4788 "name": "Court Reporter Microphones", 4789 "url": "https://martelelectronics.com/court-reporter-microphones/" 4790 }, 4791 { 4792 "@type": "ListItem", 4793 "position": 2, 4794 "name": "Court Reporter Digital Recorders", 4795 "url": "https://martelelectronics.com/court-reporter-digital-recorders/" 4796 }, 4797 { 4798 "@type": "ListItem", 4799 "position": 3, 4800 "name": "Court Reporter Steno Writer Microphones", 4801 "url": "https://martelelectronics.com/court-reporter-steno-writer-microphones/" 4802 }, 4803 { 4804 "@type": "ListItem", 4805 "position": 4, 4806 "name": "Stenomask Microphones", 4807 "url": "https://martelelectronics.com/stenomask-microphones/" 4808 }, 4809 { 4810 "@type": "ListItem", 4811 "position": 5, 4812 "name": "Court Reporter Wireless Microphones", 4813 "url": "https://martelelectronics.com/court-reporter-wireless-microphones/" 4814 }, 4815 { 4816 "@type": "ListItem", 4817 "position": 6, 4818 "name": "Zoom Court Reporting", 4819 "url": "https://martelelectronics.com/zoom-court-reporting/" 4820 }, 4821 { 4822 "@type": "ListItem", 4823 "position": 7, 4824 "name": "Elite Court Reporter Laptop", 4825 "url": "https://martelelectronics.com/court-reporter-laptop/" 4826 }, 4827 { 4828 "@type": "ListItem", 4829 "position": 8, 4830 "name": "Government Written Quotes", 4831 "url": "https://martelelectronics.com/written-quotes/" 4832 } 4833 ] 4834 }, 4835 { 4836 "@type": "FAQPage", 4837 "@id": "https://martelelectronics.com/court-reporting-recorders-microphones-equipment/#faq", 4838 "mainEntity": [ 4839 { 4840 "@type": "Question", 4841 "name": "What court reporting equipment should I buy first?",
4842 "acceptedAnswer": { 4843 "@type": "Answer", 4844 "text": "Start with the equipment that matches your primary workflow. Laptop reporters usually start with a USB microphone, voice writers start with a stenomask setup, and reporters needing backup audio often add a digital recorder." 4845 } 4846 }, 4847 { 4848 "@type": "Question", 4849 "name": "Do court reporters need a separate digital recorder?", 4850 "acceptedAnswer": { 4851 "@type": "Answer", 4852 "text": "Many reporters prefer a dedicated digital recorder as a backup audio source because it records separately from the laptop, writer, or remote meeting software." 4853 } 4854 }, 4855 { 4856 "@type": "Question", 4857 "name": "What is the difference between court reporter microphones and stenomasks?", 4858 "acceptedAnswer": { 4859 "@type": "Answer", 4860 "text": "Court reporter microphones capture room audio or software audio input. Stenomasks are used by voice writers who dictate into a mask for voice writing and speech recognition workflows." 4861 } 4862 }, 4863 { 4864 "@type": "Question", 4865 "name": "Which equipment is best for Zoom court reporting?", 4866 "acceptedAnswer": { 4867 "@type": "Answer", 4868 "text": "For remote depositions and Zoom jobs, use the Zoom Court Reporting category or a Zoom-compatible court reporter teleconference and recording kit." 4869 } 4870 }, 4871 { 4872 "@type": "Question", 4873 "name": "Should I choose a USB microphone or a writer microphone?", 4874 "acceptedAnswer": { 4875 "@type": "Answer", 4876 "text": "Choose a USB microphone for laptop recording and software audio input. Choose a compatible writer microphone when the audio needs to go directly into a steno writer." 4877 } 4878 }, 4879 { 4880 "@type": "Question", 4881 "name": "Can Martel help me choose the right setup?", 4882 "acceptedAnswer": { 4883 "@type": "Answer", 4884 "text": "Yes. Martel specializes in court reporting audio equipment and can help match microphones, recorders, stenomasks, laptops, and Zoom kits to your reporting workflow." 4885 } 4886 } 4887 ] 4888 } 4889 ] 4890 }; 4891 4892 var script = document.createElement("script"); 4893 script.id = schemaId; 4894 script.type = "application/ld+json"; 4895 script.textContent = JSON.stringify(schema); 4896 document.head.appendChild(script); 4897})(); 4898</script>
4898<script> 4899(function () { 4900 if (document.getElementById('martel-5000-master-css')) { 4901 return; 4902 } 4903 4904 var css = ` 4905.m5000-page{--blue:#08264a;--blue2:#0d3767;--blue3:#114983;--gold:#f2b84b;--gold2:#ffd36d;--text:#17212b;--muted:#5f6f7f;--soft:#f5f8fc;--line:#dbe5ef;--green:#1f7a4d;font-family:Arial,Helvetica,sans-serif;color:var(--text);line-height:1.62;max-width:1180px;margin:0 auto;font-size:16px} 4906.m5000-page *{box-sizing:border-box} 4907.m5000-page a{color:#0b4f93;text-decoration:underline;text-underline-offset:2px} 4908.m5000-hero{position:relative;overflow:hidden;display:grid;grid-template-columns:minmax(0,1.3fr) minmax(250px,.7fr);gap:28px;align-items:center;border-radius:24px;background:radial-gradient(circle at top right,rgba(255,211,109,.22) 0,rgba(255,211,109,0) 32%),linear-gradient(135deg,#08264a 0%,#0d3767 56%,#114983 100%);border:1px solid rgba(242,184,75,.38);box-shadow:0 20px 46px rgba(8,38,74,.18);padding:36px 34px 34px;margin:0 0 28px;color:#fff} 4909.m5000-hero:before{content:"";position:absolute;left:0;top:0;bottom:0;width:7px;background:linear-gradient(to bottom,var(--gold),var(--gold2))} 4910.m5000-kicker{display:inline-flex;align-items:center;color:var(--gold2);background:rgba(255,255,255,.1);border:1px solid rgba(255,211,109,.44);border-radius:999px;padding:7px 13px;font-weight:900;font-size:13px;text-transform:uppercase;letter-spacing:.03em;margin:0 0 16px} 4911.m5000-hero h2{color:#fff;font-size:clamp(31px,4.2vw,50px);line-height:1.06;margin:0 0 15px;font-weight:900;letter-spacing:-.035em} 4912.m5000-hero p{color:#e8f1fb;max-width:900px;font-size:19px;line-height:1.62;margin:0 0 16px} 4913.m5000-hero strong{color:#fff} 4914.m5000-hero-badges{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px} 4915.m5000-badge{display:inline-flex;align-items:center;min-height:40px;border-radius:999px;padding:9px 14px;background:#fff;color:var(--blue);font-size:14px;font-weight:900;box-shadow:0 10px 24px rgba(0,0,0,.13)} 4916.m5000-hero-image-card{position:relative;z-index:1;width:100%;max-width:320px;margin:0 auto;border-radius:22px;padding:18px;background:#fff;border:1px solid rgba(255,211,109,.38);box-shadow:0 20px 44px rgba(0,0,0,.24);text-align:center} 4917.m5000-hero-image-card img{display:block;width:auto;max-width:100%;max-height:250px;object-fit:contain;margin:0 auto} 4918.m5000-hero-image-card span{display:block;margin-top:12px;color:var(--blue);font-size:13px;font-weight:900} 4919.m5000-alert{border:1px solid rgba(242,184,75,.55);background:#fff8e8;color:#4b3507;border-radius:18px;padding:18px 20px;font-size:17px;line-height:1.55;font-weight:800;margin:0 0 26px} 4920.m5000-alert strong{color:var(--blue)} 4921.m5000-grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:24px 0 30px} 4922.m5000-card{background:#fff;border:1px solid var(--line);border-radius:18px;padding:21px;box-shadow:0 12px 28px rgba(16,48,83,.08)} 4923.m5000-card h3{color:var(--blue);margin:0 0 9px;font-size:21px;line-height:1.24;font-weight:900} 4924.m5000-card p{color:var(--muted);margin:0;font-size:16px;line-height:1.56} 4925.m5000-section{background:#fff;border:1px solid var(--line);border-radius:22px;padding:28px;margin:26px 0;box-shadow:0 12px 30px rgba(16,48,83,.06)} 4926.m5000-section h2{color:var(--blue);font-size:clamp(26px,3vw,37px);line-height:1.15;margin:0 0 14px;font-weight:900;letter-spacing:-.02em} 4927.m5000-section h3{color:var(--blue);font-size:22px;line-height:1.24;margin:24px 0 10px;font-weight:900} 4928.m5000-section p{margin:0 0 15px;font-size:17px;line-height:1.62;color:var(--text)} 4929.m5000-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;padding:0;margin:18px 0 0;list-style:none} 4930.m5000-list li{position:relative;min-height:54px;background:var(--soft);border:1px solid var(--line);border-radius:14px;padding:14px 15px 14px 44px;font-size:16px;line-height:1.48} 4931.m5000-list li:before{content:"✓";position:absolute;left:14px;top:14px;width:21px;height:21px;border-radius:50%;background:var(--green);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:900} 4932.m5000-chooser{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-top:18px} 4933.m5000-choice{border:1px solid var(--line);border-radius:18px;background:#f8fbff;padding:18px;box-shadow:0 10px 24px rgba(16,48,83,.06)} 4934.m5000-choice-current{background:#fff6de;border:2px solid var(--gold)} 4935.m5000-choice h3{margin:0 0 8px;color:var(--blue);font-size:20px;line-height:1.22;font-weight:900} 4936.m5000-choice p{margin:0 0 12px;color:var(--text);font-size:16px;line-height:1.5}
4937.m5000-choice a{display:inline-flex;align-items:center;justify-content:center;min-height:44px;border-radius:999px;padding:10px 14px;background:var(--blue);color:#fff!important;text-decoration:none!important;font-weight:900;font-size:14px} 4938.m5000-choice-current a{background:var(--gold);color:#10253a!important} 4939.m5000-table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:18px;background:#fff;box-shadow:0 12px 28px rgba(16,48,83,.06);margin:18px 0 0} 4940.m5000-table{width:100%;min-width:1120px;border-collapse:collapse;font-size:15.5px} 4941.m5000-table th{background:var(--blue);color:#fff;padding:16px 14px;text-align:left;vertical-align:top;border-right:1px solid rgba(255,255,255,.16);line-height:1.35;font-size:15px} 4942.m5000-table td{padding:16px 14px;border-top:1px solid var(--line);border-right:1px solid var(--line);vertical-align:top;color:var(--text);line-height:1.55} 4943.m5000-table tr:nth-child(even) td{background:#f8fbff} 4944.m5000-table strong{color:var(--blue)} 4945.m5000-table th a{color:#fff!important;text-decoration:none!important} 4946.m5000-table-product{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:8px;text-align:center} 4947.m5000-table-thumb-wrap{display:flex;align-items:center;justify-content:center;width:116px;height:92px;padding:7px;margin:0 auto 4px;border-radius:14px;background:#fff;border:1px solid rgba(255,255,255,.52);box-shadow:0 8px 18px rgba(0,0,0,.14)} 4948.m5000-table-thumb{display:block;width:auto;max-width:102px;max-height:78px;object-fit:contain;margin:0 auto} 4949.m5000-table-title{display:block;color:#fff;font-weight:900;line-height:1.25} 4950.m5000-table-price{display:inline-flex;align-items:center;justify-content:center;min-height:25px;border-radius:999px;padding:5px 11px;background:var(--gold);color:#10253a;font-size:13px;font-weight:900} 4951.m5000-current-head{background:radial-gradient(circle at top,rgba(255,211,109,.32),transparent 52%),var(--blue3)!important;box-shadow:inset 0 0 0 2px rgba(242,184,75,.75)} 4952.m5000-current-pill{display:inline-flex;align-items:center;justify-content:center;margin-top:2px;border-radius:999px;padding:4px 9px;background:#fff;color:var(--blue);font-size:11px;font-weight:900} 4953.m5000-chart-group td{background:#fff1c7!important;color:#10253a;font-weight:900;text-transform:uppercase;letter-spacing:.03em;font-size:13px} 4954.m5000-feature-label{display:block;color:var(--blue);font-weight:900;line-height:1.25} 4955.m5000-feature-note{display:block;margin-top:4px;color:var(--muted);font-size:13px;font-weight:500;line-height:1.35} 4956.m5000-special td{background:#fffdf7} 4957.m5000-special td:first-child{background:#fff6de;border-left:4px solid var(--gold)} 4958.m5000-check{color:var(--green);font-weight:900} 4959.m5000-no{color:#8b98a6;font-weight:700} 4960.m5000-current{background:#fff6de!important;font-weight:800} 4961.m5000-safe{display:block;margin-top:4px;color:#5f6f7f;font-size:13px;line-height:1.35} 4962.m5000-cta{border-radius:22px;background:radial-gradient(circle at top left,rgba(255,211,109,.22),transparent 34%),linear-gradient(135deg,var(--blue),var(--blue2));color:#fff;padding:28px;margin:26px 0;border:1px solid rgba(242,184,75,.35)} 4963.m5000-cta h2{color:#fff;margin:0 0 12px;font-size:31px;line-height:1.15;font-weight:900} 4964.m5000-cta p{color:#e8f1fb;margin:0 0 18px;font-size:17px;line-height:1.6;max-width:900px} 4965.m5000-buttons{display:flex;flex-wrap:wrap;gap:12px} 4966.m5000-button{display:inline-flex;align-items:center;justify-content:center;min-height:50px;border-radius:999px;padding:13px 19px;font-size:15.5px;font-weight:900;text-decoration:none!important} 4967.m5000-button-gold{background:var(--gold);color:#10253a!important} 4968.m5000-button-white{background:#fff;color:var(--blue)!important} 4969.m5000-button-blue{background:#0b4f93;color:#fff!important;border:1px solid rgba(255,255,255,.28)} 4970.m5000-faq{border-top:1px solid var(--line);padding-top:18px;margin-top:18px} 4971.m5000-faq h3{margin-top:0;font-size:20px} 4972.m5000-note{font-size:14px;color:var(--muted);margin-top:12px} 4973@media(max-width:980px){.m5000-hero{grid-template-columns:1fr}.m5000-grid-3,.m5000-chooser{grid-template-columns:repeat(2,minmax(0,1fr))}} 4974@media(max-width:680px){.m5000-hero,.m5000-section,.m5000-cta{padding:22px 18px;border-radius:18px}.m5000-hero p{font-size:17px}.m5000-grid-3,.m5000-chooser,.m5000-list{grid-template-columns:1fr}.m5000-button{width:100%}} 4975`; 4976 4977 var style = document.createElement('style'); 4978 style.id = 'martel-5000-master-css'; 4979 style.type = 'text/css'; 4980 style.appendChild(document.createTextNode(css)); 4981 document.head.appendChild(style); 4982})(); 4983</script>
4983<script> 4984(function () { 4985 'use strict'; 4986 4987 var css = ` 4988 /* Martel Premium Product Section Spacing Controller */ 4989 .productView-description .martel-premium-section, 4990 .productView-description .martel-premium-layout, 4991 .productView-description .martel-premium-hero, 4992 .productView-description .martel-product-premium, 4993 .productView-description [class*="martel-premium"] { 4994 max-width: 1180px !important; 4995 width: calc(100% - 48px) !important; 4996 margin-left: auto !important; 4997 margin-right: auto !important; 4998 box-sizing: border-box !important; 4999 } 5000 5001 .productView-description .martel-premium-section:first-child, 5002 .productView-description .martel-premium-layout:first-child, 5003 .productView-description .martel-premium-hero:first-child, 5004 .productView-description .martel-product-premium:first-child, 5005 .productView-description [class*="martel-premium"]:first-child { 5006 margin-top: 24px !important; 5007 } 5008 5009 .productView-description .martel-premium-section, 5010 .productView-description .martel-premium-layout, 5011 .productView-description .martel-premium-hero, 5012 .productView-description .martel-product-premium { 5013 margin-bottom: 28px !important; 5014 } 5015 5016 @media (max-width: 900px) { 5017 .productView-description .martel-premium-section, 5018 .productView-description .martel-premium-layout, 5019 .productView-description .martel-premium-hero, 5020 .productView-description .martel-product-premium, 5021 .productView-description [class*="martel-premium"] { 5022 width: calc(100% - 28px) !important; 5023 margin-left: auto !important; 5024 margin-right: auto !important; 5025 } 5026 } 5027 5028 @media (max-width: 600px) { 5029 .productView-description .martel-premium-section, 5030 .productView-description .martel-premium-layout, 5031 .productView-description .martel-premium-hero, 5032 .productView-description .martel-product-premium, 5033 .productView-description [class*="martel-premium"] { 5034 width: calc(100% - 20px) !important; 5035 } 5036 } 5037 `; 5038 5039 if (document.getElementById('martel-premium-spacing-controller')) { 5040 return; 5041 } 5042 5043 var style = document.createElement('style'); 5044 style.id = 'martel-premium-spacing-controller'; 5045 style.textContent = css; 5046 document.head.appendChild(style); 5047})(); 5048</script>
5048<script> 5049(function () { 5050 'use strict'; 5051 5052 function martelPremiumProductWidthFix() { 5053 var premiumSection = document.querySelector('.martel-premium-section'); 5054 5055 if (!premiumSection) { 5056 return; 5057 } 5058 5059 if (document.getElementById('martel-premium-product-width-fix')) { 5060 return; 5061 } 5062 5063 document.body.classList.add('martel-premium-product-width-active'); 5064 5065 var style = document.createElement('style'); 5066 style.id = 'martel-premium-product-width-fix'; 5067 style.type = 'text/css'; 5068 5069 style.appendChild(document.createTextNode( 5070 '\n' + 5071 'body.martel-premium-product-width-active .productView-descriptionWrapper,\n' + 5072 'body.martel-premium-product-width-active .productView-description,\n' + 5073 'body.martel-premium-product-width-active .tabs,\n' + 5074 'body.martel-premium-product-width-active .tabs-contents,\n' + 5075 'body.martel-premium-product-width-active .tab-content,\n' + 5076 'body.martel-premium-product-width-active .productView-description-tabContent,\n' + 5077 'body.martel-premium-product-width-active [data-tab-content],\n' + 5078 'body.martel-premium-product-width-active .tab-content.is-active {\n' + 5079 ' width: 100% !important;\n' + 5080 ' max-width: none !important;\n' + 5081 ' box-sizing: border-box !important;\n' + 5082 ' overflow: visible !important;\n' + 5083 '}\n' + 5084 '\n' + 5085 'body.martel-premium-product-width-active .productView-description-tabContent,\n' + 5086 'body.martel-premium-product-width-active .tab-content,\n' + 5087 'body.martel-premium-product-width-active [data-tab-content] {\n' + 5088 ' padding-left: 0 !important;\n' + 5089 ' padding-right: 0 !important;\n' + 5090 '}\n' + 5091 '\n' + 5092 'body.martel-premium-product-width-active .productView-description-tabContent > div:first-child,\n' + 5093 'body.martel-premium-product-width-active .tab-content > div:first-child,\n' + 5094 'body.martel-premium-product-width-active [data-tab-content] > div:first-child,\n' + 5095 'body.martel-premium-product-width-active .martel-premium-section,\n' + 5096 'body.martel-premium-product-width-active .martel-premium-section > div {\n' + 5097 ' width: 100% !important;\n' + 5098 ' max-width: none !important;\n' + 5099 ' margin-left: 0 !important;\n' + 5100 ' margin-right: 0 !important;\n' + 5101 ' box-sizing: border-box !important;\n' + 5102 '}\n' + 5103 '\n' + 5104 'body.martel-premium-product-width-active .productView-descriptionWrapper table,\n' + 5105 'body.martel-premium-product-width-active .productView-description table,\n' + 5106 'body.martel-premium-product-width-active .tabs-contents table,\n' + 5107 'body.martel-premium-product-width-active .tab-content table,\n' + 5108 'body.martel-premium-product-width-active .productView-description-tabContent table,\n' + 5109 'body.martel-premium-product-width-active .martel-premium-section table {\n' + 5110 ' max-width: none !important;\n' + 5111 '}\n' + 5112 '\n' + 5113 'body.martel-premium-product-width-active .productView-descriptionWrapper td,\n' + 5114 'body.martel-premium-product-width-active .productView-description td,\n' + 5115 'body.martel-premium-product-width-active .tabs-contents td,\n' + 5116 'body.martel-premium-product-width-active .tab-content td,\n' + 5117 'body.martel-premium-product-width-active .productView-description-tabContent td,\n' + 5118 'body.martel-premium-product-width-active .martel-premium-section td {\n' + 5119 ' box-sizing: border-box !important;\n' + 5120 '}\n' + 5121 '\n' + 5122 '@media (min-width: 1000px) {\n' + 5123 ' body.martel-premium-product-width-active .productView-descriptionWrapper {\n' + 5124 ' width: 100vw !important;\n' + 5125 ' max-width: 100vw !important;\n' + 5126 ' margin-left: calc(50% - 50vw) !important;\n' + 5127 ' margin-right: calc(50% - 50vw) !important;\n' + 5128 ' padding-left: 28px !important;\n' + 5129 ' padding-right: 28px !important;\n' + 5130 ' box-sizing: border-box !important;\n' + 5131 ' }\n' + 5132 '\n' + 5133 ' body.martel-premium-product-width-active .productView-description,\n' + 5134 ' body.martel-premium-product-width-active .tabs,\n' + 5135 ' body.martel-premium-product-width-active .tabs-contents,\n' + 5136 ' body.martel-premium-product-width-active .tab-content,\n' + 5137 ' body.martel-premium-product-width-active .productView-description-tab
5137Content,\n' + 5138 ' body.martel-premium-product-width-active [data-tab-content],\n' + 5139 ' body.martel-premium-product-width-active .tab-content.is-active {\n' + 5140 ' max-width: 1540px !important;\n' + 5141 ' margin-left: auto !important;\n' + 5142 ' margin-right: auto !important;\n' + 5143 ' box-sizing: border-box !important;\n' + 5144 ' }\n' + 5145 '}\n' + 5146 '\n' + 5147 '@media (min-width: 1600px) {\n' + 5148 ' body.martel-premium-product-width-active .productView-description,\n' + 5149 ' body.martel-premium-product-width-active .tabs,\n' + 5150 ' body.martel-premium-product-width-active .tabs-contents,\n' + 5151 ' body.martel-premium-product-width-active .tab-content,\n' + 5152 ' body.martel-premium-product-width-active .productView-description-tabContent,\n' + 5153 ' body.martel-premium-product-width-active [data-tab-content],\n' + 5154 ' body.martel-premium-product-width-active .tab-content.is-active {\n' + 5155 ' max-width: 1620px !important;\n' + 5156 ' }\n' + 5157 '}\n' + 5158 '\n' + 5159 '@media (max-width: 999px) {\n' + 5160 ' body.martel-premium-product-width-active .productView-descriptionWrapper {\n' + 5161 ' width: 100% !important;\n' + 5162 ' max-width: 100% !important;\n' + 5163 ' margin-left: 0 !important;\n' + 5164 ' margin-right: 0 !important;\n' + 5165 ' padding-left: 8px !important;\n' + 5166 ' padding-right: 8px !important;\n' + 5167 ' box-sizing: border-box !important;\n' + 5168 ' }\n' + 5169 '\n' + 5170 ' body.martel-premium-product-width-active .productView-description,\n' + 5171 ' body.martel-premium-product-width-active .tabs,\n' + 5172 ' body.martel-premium-product-width-active .tabs-contents,\n' + 5173 ' body.martel-premium-product-width-active .tab-content,\n' + 5174 ' body.martel-premium-product-width-active .productView-description-tabContent,\n' + 5175 ' body.martel-premium-product-width-active [data-tab-content],\n' + 5176 ' body.martel-premium-product-width-active .tab-content.is-active {\n' + 5177 ' max-width: 100% !important;\n' + 5178 ' }\n' + 5179 '}\n' 5180 )); 5181 5182 document.head.appendChild(style); 5183 } 5184 5185 if (document.readyState === 'loading') { 5186 document.addEventListener('DOMContentLoaded', martelPremiumProductWidthFix); 5187 } else { 5188 martelPremiumProductWidthFix(); 5189 } 5190})(); 5191</script>
5191<script> 5192(function () { 5193 if (window.__martelRemoveBadCrucialsSchemaLoaded === true) { 5194 return; 5195 } 5196 5197 window.__martelRemoveBadCrucialsSchemaLoaded = true; 5198 5199 var RUN_DELAYS = [0, 250, 750, 1500, 3000, 5000, 8000, 12000]; 5200 5201 function isProductPage() { 5202 var bodyClass = document.body ? String(document.body.className || "") : ""; 5203 5204 return !!( 5205 document.querySelector(".productView") || 5206 document.querySelector('input[name="product_id"]') || 5207 bodyClass.indexOf("papaSupermarket-pageType--product") !== -1 || 5208 bodyClass.indexOf("pageType--product") !== -1 5209 ); 5210 } 5211 5212 function isCrucialsRichSnippet(script) { 5213 if (!script) { 5214 return false; 5215 } 5216 5217 var className = String(script.getAttribute("class") || script.className || ""); 5218 var scriptId = String(script.id || ""); 5219 var text = String(script.textContent || ""); 5220 5221 if (className.indexOf("cr-rich-snippets") !== -1) { 5222 return true; 5223 } 5224 5225 if (scriptId.indexOf("cr-rich-snippets") !== -1) { 5226 return true; 5227 } 5228 5229 if ( 5230 text.indexOf("cr-rich-snippets") !== -1 && 5231 text.indexOf("Product") !== -1 5232 ) { 5233 return true; 5234 } 5235 5236 return false; 5237 } 5238 5239 function removeBadCrucialsSchema() { 5240 if (!isProductPage()) { 5241 return; 5242 } 5243 5244 var scripts = document.querySelectorAll('script[type="application/ld+json"]'); 5245 5246 for (var i = 0; i < scripts.length; i++) { 5247 var script = scripts[i]; 5248 5249 if (isCrucialsRichSnippet(script)) { 5250 if (script.parentNode) { 5251 script.parentNode.removeChild(script); 5252 } 5253 } 5254 } 5255 } 5256 5257 function scheduleRuns() { 5258 for (var i = 0; i < RUN_DELAYS.length; i++) { 5259 (function (delay) { 5260 setTimeout(removeBadCrucialsSchema, delay); 5261 })(RUN_DELAYS[i]); 5262 } 5263 } 5264 5265 function startObserver() { 5266 if (!window.MutationObserver || !document.documentElement) { 5267 return; 5268 } 5269 5270 var pending = false; 5271 5272 var observer = new MutationObserver(function () { 5273 if (pending) { 5274 return; 5275 } 5276 5277 pending = true; 5278 5279 setTimeout(function () { 5280 pending = false; 5281 removeBadCrucialsSchema(); 5282 }, 250); 5283 }); 5284 5285 observer.observe(document.documentElement, { 5286 childList: true, 5287 subtree: true 5288 }); 5289 } 5290 5291 if (document.readyState === "loading") { 5292 document.addEventListener("DOMContentLoaded", function () { 5293 scheduleRuns(); 5294 startObserver(); 5295 }); 5296 } else { 5297 scheduleRuns(); 5298 startObserver(); 5299 } 5300 5301 window.addEventListener("load", scheduleRuns); 5302 window.addEventListener("pageshow", scheduleRuns); 5303 5304 document.addEventListener("readystatechange", function () { 5305 if (document.readyState === "interactive" || document.readyState === "complete") { 5306 scheduleRuns(); 5307 } 5308 }); 5309})(); 5310</script>
5310<script> 5311(function () { 5312 'use strict'; 5313 5314 var MARTEL_HIDDEN_SEARCH_SKUS = [ 5315 '119', 5316 '582', 5317 '1176', 5318 '827', 5319 '353', 5320 '840', 5321 '556', 5322 '461' 5323 ]; 5324 5325 var MARTEL_HIDDEN_SEARCH_URL_PARTS = []; 5326 var HIDE_UNKNOWN_RESULT_CARDS_WHILE_CHECKING = true; 5327 var PRODUCT_CHECK_TIMEOUT_MS = 1600; 5328 var MAX_PRODUCT_PAGE_CHECKS_PER_LOAD = 120; 5329 var CACHE_PREFIX = 'martel_hidden_search_sku_url_'; 5330 var HIDDEN_SKU_LOOKUP = {}; 5331 var HIDDEN_URL_PARTS = []; 5332 var URL_CHECK_PROMISES = {}; 5333 var productPageChecksThisLoad = 0; 5334 var scanTimer = null; 5335 5336 MARTEL_HIDDEN_SEARCH_SKUS.forEach(function (sku) { 5337 HIDDEN_SKU_LOOKUP[normalizeSku(sku)] = true; 5338 }); 5339 5340 MARTEL_HIDDEN_SEARCH_URL_PARTS.forEach(function (urlPart) { 5341 var normalized = normalizeUrlPart(urlPart); 5342 if (normalized) { 5343 HIDDEN_URL_PARTS.push(normalized); 5344 } 5345 }); 5346 5347 addFilterStyle(); 5348 5349 function normalizeSku(value) { 5350 return String(value || '') 5351 .replace(/\u00a0/g, ' ') 5352 .replace(/^SKU\s*[:#-]?\s*/i, '') 5353 .trim() 5354 .toUpperCase(); 5355 } 5356 5357 function isHiddenSku(value) { 5358 return !!HIDDEN_SKU_LOOKUP[normalizeSku(value)]; 5359 } 5360 5361 function normalizeUrlPart(value) { 5362 return String(value || '') 5363 .replace(window.location.origin, '') 5364 .replace(/^https?:\/\/[^/]+/i, '') 5365 .trim() 5366 .toLowerCase(); 5367 } 5368 5369 function safeSessionGet(key) { 5370 try { 5371 return window.sessionStorage.getItem(key); 5372 } catch (e) { 5373 return null; 5374 } 5375 } 5376 5377 function safeSessionSet(key, value) { 5378 try { 5379 window.sessionStorage.setItem(key, value); 5380 } catch (e) {} 5381 } 5382 5383 function addFilterStyle() { 5384 var style; 5385 5386 if (document.getElementById('martel-hide-search-sku-style')) { 5387 return; 5388 } 5389 5390 style = document.createElement('style'); 5391 style.id = 'martel-hide-search-sku-style'; 5392 style.textContent = 5393 '[data-martel-hidden-from-search="true"]{' + 5394 'display:none!important;' + 5395 'visibility:hidden!important;' + 5396 '}' + 5397 '[data-martel-search-card-checking="true"]{' + 5398 'opacity:0!important;' + 5399 'visibility:hidden!important;' + 5400 'pointer-events:none!important;' + 5401 '}'; 5402 5403 (document.head || document.documentElement).appendChild(style); 5404 } 5405 5406 function isSearchPage() { 5407 var path = String(window.location.pathname || '').toLowerCase(); 5408 var search = String(window.location.search || '').toLowerCase(); 5409 5410 return ( 5411 path.indexOf('/search.php') !== -1 || 5412 path.indexOf('/search') !== -1 || 5413 search.indexOf('search_query=') !== -1 || 5414 search.indexOf('search=') !== -1 5415 ); 5416 } 5417 5418 function textHasHiddenSkuLabel(text) { 5419 var cleanText; 5420 var skuLabelRegex; 5421 var match; 5422 5423 if (!text) { 5424 return false; 5425 } 5426 5427 cleanText = String(text).replace(/\u00a0/g, ' '); 5428 skuLabelRegex = /(?:SKU|Item\s*#|Product\s*Code|Part\s*Number)\s*[:#-]?\s*([A-Za-z0-9._-]+)/gi; 5429 5430 while ((match = skuLabelRegex.exec(cleanText)) !== null) { 5431 if (match[1] && isHiddenSku(match[1])) { 5432 return true; 5433 } 5434 } 5435 5436 return false; 5437 } 5438 5439 function directSkuFromElement(element) { 5440 var attrNames; 5441 var skuNodes; 5442 5443 if (!element || !element.getAttribute) { 5444 return null; 5445 } 5446 5447 attrNames = [ 5448 'data-sku', 5449 'data-product-sku', 5450 'data-product-sku-value', 5451 'data-item-sku' 5452 ]; 5453 5454 for (var i = 0; i < attrNames.length; i++) { 5455 var attrValue = element.getAttribute(attrNames[i]); 5456 if (attrValue && isHiddenSku(attrValue)) { 5457 return normalizeSku(attrValue); 5458 } 5459 } 5460 5461 skuNodes = element.querySelectorAll( 5462 '[itemprop="sku"], [data-sku], [data-product-sku], [data-product-sku-value], [data-item-sku]' 5463 ); 5464 5465 for (var n = 0; n < skuNodes.length; n++) { 5466 var node = skuNodes[n]; 5467 5468 for (var a = 0; a < attrNames.length; a++) { 5469 var nodeAttrValue = node.getAttribute(attrNames[a]); 5470 if (nodeAttrValue && isHiddenSku(nodeAttrValue)) { 5471 return normalizeSku(nodeAttrValue); 5472 } 5473 } 5474 5475 if (node.textContent && isHiddenSku(node.textContent)) { 5476 return normalizeSku(node.textContent); 5477 } 5478 } 5479 5480 return null; 5481 } 5482 5483 function findSkuInProductInfo(documentOrElement) { 5484 var directSku; 5485 var labelNodes; 5486 5487 if (!documentOrElement || !documentOrElement.querySelectorAll) { 5488 return null; 5489 } 5490 5491 directSku = directSkuFromElement(documentOrElement); 5492 if (directSku) { 5493 return directSku; 5494 } 5495 5496 labelNodes = documentOrElement.querySelectorAll( 5497 '.productView-info-name, .productView-info-title, dt, th, label, span, div' 5498 ); 5499 5500 for (var i = 0; i < labelNodes.length; i++) { 5501 var label = labelNodes[i]; 5502 var labelText = String(label.textContent || '').replace(/\u00a0/g, ' ').trim(); 5503 5504 if (!/^(SKU|Item\s*#|Product\s*Code|Part\s*Number)\b/i.test(labelText)) { 5505 continue; 5506 } 5507 5508 var combinedText = labelText; 5509 5510 if (label.nextElementSibling) { 5511 combinedText += ' ' + String(label.nextElementSibling.textContent || ''); 5512 } 5513 5514 if (label.parentElement) { 5515 combinedText += ' ' + String(label.parentElement.textContent || ''); 5516 } 5517 5518 if (textHasHiddenSkuLabel(combinedText)) { 5519 var match = combinedText.match(/(?:SKU|Item\s*#|Product\s*Code|Part\s*Number)\s*[:#-]?\s*([A-Za-z0-9._-]+)/i); 5520 if (match && match[1]) { 5521 return normalizeSku(match[1]); 5522 } 5523 } 5524 } 5525 5526 return null; 5527 } 5528 5529 function objectHasHiddenSku(value) { 5530 var key; 5531 5532 if (!value) { 5533 return false;
5534 } 5535 5536 if (Array.isArray(value)) { 5537 for (var i = 0; i < value.length; i++) { 5538 if (objectHasHiddenSku(value[i])) { 5539 return true; 5540 } 5541 } 5542 return false; 5543 } 5544 5545 if (typeof value === 'object') { 5546 if (value.sku && isHiddenSku(value.sku)) { 5547 return true; 5548 } 5549 5550 for (key in value) { 5551 if (Object.prototype.hasOwnProperty.call(value, key)) { 5552 if (objectHasHiddenSku(value[key])) { 5553 return true; 5554 } 5555 } 5556 } 5557 } 5558 5559 return false; 5560 } 5561 5562 function htmlHasHiddenSku(html) { 5563 var parser; 5564 var doc; 5565 var jsonLdScripts; 5566 var skuJsonRegex; 5567 var match; 5568 5569 if (!html) { 5570 return false; 5571 } 5572 5573 parser = new DOMParser(); 5574 doc = parser.parseFromString(html, 'text/html'); 5575 5576 if (findSkuInProductInfo(doc)) { 5577 return true; 5578 } 5579 5580 jsonLdScripts = doc.querySelectorAll('script[type="application/ld+json"]'); 5581 5582 for (var i = 0; i < jsonLdScripts.length; i++) { 5583 var jsonText = jsonLdScripts[i].textContent || ''; 5584 5585 try { 5586 var json = JSON.parse(jsonText); 5587 if (objectHasHiddenSku(json)) { 5588 return true; 5589 } 5590 } catch (e) {} 5591 } 5592 5593 skuJsonRegex = /"sku"\s*:\s*"([^"]+)"/gi; 5594 5595 while ((match = skuJsonRegex.exec(html)) !== null) { 5596 if (match[1] && isHiddenSku(match[1])) { 5597 return true; 5598 } 5599 } 5600 5601 return textHasHiddenSkuLabel(doc.body ? doc.body.textContent : html); 5602 } 5603 5604 function normalizedUrlForCache(url) { 5605 try { 5606 var parsed = new URL(url, window.location.origin); 5607 return parsed.origin + parsed.pathname.replace(/\/$/, ''); 5608 } catch (e) { 5609 return String(url || ''); 5610 } 5611 } 5612 5613 function urlMatchesHiddenUrlPart(url) { 5614 var normalized; 5615 5616 if (!url || !HIDDEN_URL_PARTS.length) { 5617 return false; 5618 } 5619 5620 normalized = normalizeUrlPart(url); 5621 5622 for (var i = 0; i < HIDDEN_URL_PARTS.length; i++) { 5623 if (normalized.indexOf(HIDDEN_URL_PARTS[i]) !== -1) { 5624 return true; 5625 } 5626 } 5627 5628 return false; 5629 } 5630 5631 function isLikelyProductUrl(href) { 5632 var url; 5633 var path; 5634 5635 if (!href) { 5636 return false; 5637 } 5638 5639 try { 5640 url = new URL(href, window.location.origin); 5641 } catch (e) { 5642 return false; 5643 } 5644 5645 if (url.origin !== window.location.origin) { 5646 return false; 5647 } 5648 5649 path = String(url.pathname || '').toLowerCase(); 5650 5651 if ( 5652 path.indexOf('/search.php') !== -1 || 5653 path.indexOf('/cart.php') !== -1 || 5654 path.indexOf('/checkout') !== -1 || 5655 path.indexOf('/login.php') !== -1 || 5656 path.indexOf('/account.php') !== -1 || 5657 path.indexOf('/wishlist.php') !== -1 || 5658 path.indexOf('/compare') !== -1 || 5659 path.indexOf('/contact') !== -1 || 5660 path.indexOf('/giftcertificates') !== -1 5661 ) { 5662 return false; 5663 } 5664 5665 return true; 5666 } 5667 5668 function getProductLinkFromCard(card) { 5669 var selectors; 5670 5671 if (!card || !card.querySelectorAll) { 5672 return null; 5673 } 5674 5675 selectors = [ 5676 '.card-title a[href]', 5677 '.product-title a[href]', 5678 '.quickSearchResult-title a[href]', 5679 '.quickSearchResults-title a[href]', 5680 '.search-result-title a[href]', 5681 'h3 a[href]', 5682 'h4 a[href]', 5683 'a[href]' 5684 ]; 5685 5686 for (var i = 0; i < selectors.length; i++) { 5687 var links = card.querySelectorAll(selectors[i]); 5688 5689 for (var n = 0; n < links.length; n++) { 5690 var href = links[n].getAttribute('href'); 5691 if (isLikelyProductUrl(href)) { 5692 return new URL(href, window.location.origin).href; 5693 } 5694 } 5695 } 5696 5697 return null; 5698 } 5699 5700 function promiseWithTimeout(promise, milliseconds) { 5701 var timeout; 5702 5703 return Promise.race([ 5704 promise, 5705 new Promise(function (resolve) { 5706 timeout = window.setTimeout(function () { 5707 resolve(false); 5708 }, milliseconds); 5709 }) 5710 ]).then(function (result) { 5711 if (timeout) { 5712 window.clearTimeout(timeout); 5713 } 5714 return result; 5715 }).catch(function () { 5716 if (timeout) { 5717 window.clearTimeout(timeout); 5718 } 5719 return false;
5720 }); 5721 } 5722 5723 function productUrlShouldBeHidden(url) { 5724 var cacheKey = CACHE_PREFIX + normalizedUrlForCache(url); 5725 var cached = safeSessionGet(cacheKey); 5726 var fetchPromise; 5727 5728 if (urlMatchesHiddenUrlPart(url)) { 5729 safeSessionSet(cacheKey, '1'); 5730 return Promise.resolve(true); 5731 } 5732 5733 if (cached === '1') { 5734 return Promise.resolve(true); 5735 } 5736 5737 if (cached === '0') { 5738 return Promise.resolve(false); 5739 } 5740 5741 if (URL_CHECK_PROMISES[cacheKey]) { 5742 return URL_CHECK_PROMISES[cacheKey]; 5743 } 5744 5745 if (productPageChecksThisLoad >= MAX_PRODUCT_PAGE_CHECKS_PER_LOAD) { 5746 return Promise.resolve(false); 5747 } 5748 5749 productPageChecksThisLoad++; 5750 5751 fetchPromise = fetch(url, { 5752 method: 'GET', 5753 credentials: 'same-origin', 5754 cache: 'force-cache' 5755 }) 5756 .then(function (response) { 5757 if (!response || !response.ok) { 5758 safeSessionSet(cacheKey, '0'); 5759 return false; 5760 } 5761 5762 return response.text(); 5763 }) 5764 .then(function (html) { 5765 var shouldHide; 5766 5767 if (html === false) { 5768 return false; 5769 } 5770 5771 shouldHide = htmlHasHiddenSku(html); 5772 safeSessionSet(cacheKey, shouldHide ? '1' : '0'); 5773 return shouldHide; 5774 }) 5775 .catch(function () { 5776 safeSessionSet(cacheKey, '0'); 5777 return false; 5778 }); 5779 5780 URL_CHECK_PROMISES[cacheKey] = promiseWithTimeout(fetchPromise, PRODUCT_CHECK_TIMEOUT_MS); 5781 return URL_CHECK_PROMISES[cacheKey]; 5782 } 5783 5784 function hideCard(card) { 5785 if (!card) { 5786 return; 5787 } 5788 5789 card.removeAttribute('data-martel-search-card-checking'); 5790 card.setAttribute('data-martel-hidden-from-search', 'true'); 5791 card.setAttribute('aria-hidden', 'true'); 5792 card.style.display = 'none'; 5793 card.style.visibility = 'hidden'; 5794 } 5795 5796 function revealCard(card) { 5797 if (!card) { 5798 return; 5799 } 5800 5801 card.removeAttribute('data-martel-search-card-checking'); 5802 5803 if (card.getAttribute('data-martel-hidden-from-search') !== 'true') { 5804 card.removeAttribute('aria-hidden'); 5805 card.style.display = ''; 5806 card.style.visibility = ''; 5807 } 5808 } 5809 5810 function markCardChecking(card) { 5811 if (!card || !HIDE_UNKNOWN_RESULT_CARDS_WHILE_CHECKING) { 5812 return; 5813 } 5814 5815 if (card.getAttribute('data-martel-hidden-from-search') === 'true') { 5816 return; 5817 } 5818 5819 card.setAttribute('data-martel-search-card-checking', 'true'); 5820 } 5821 5822 function unhideCardForRecheck(card) { 5823 if (!card) { 5824 return; 5825 } 5826 5827 card.removeAttribute('data-martel-hidden-from-search'); 5828 card.removeAttribute('data-martel-search-card-checking'); 5829 card.removeAttribute('aria-hidden'); 5830 card.style.display = ''; 5831 card.style.visibility = ''; 5832 } 5833 5834 function getSearchContainers(root) { 5835 var containers = []; 5836 var seen = []; 5837 var selectors = [ 5838 '.quickSearchResults', 5839 '.quick-search-results', 5840 '#quickSearchResults', 5841 '[data-quick-search-results]', 5842 '[data-search-quick]', 5843 '[data-test="quick-search-results"]' 5844 ]; 5845 5846 if (isSearchPage()) { 5847 selectors = selectors.concat([ 5848 'main', 5849 '.page-content', 5850 '.searchResults', 5851 '.search-results', 5852 '[data-search-results]', 5853 '.productGrid', 5854 '.productList', 5855 '.body' 5856 ]); 5857 } 5858 5859 function addContainer(container) { 5860 if (!container || seen.indexOf(container) !== -1) { 5861 return; 5862 } 5863 5864 seen.push(container); 5865 containers.push(container); 5866 } 5867 5868 for (var i = 0; i < selectors.length; i++) { 5869 if (root.matches && root.matches(selectors[i])) { 5870 addContainer(root); 5871 } 5872 5873 if (root.querySelectorAll) { 5874 var found = root.querySelectorAll(selectors[i]); 5875 for (var n = 0; n < found.length; n++) { 5876 addContainer(found[n]); 5877 } 5878 } 5879 } 5880 5881 return containers; 5882 } 5883 5884 function getCandidateCards(root) { 5885 var candidates = []; 5886 var seen = []; 5887 5888 function addCard(card) { 5889 if (!card || seen.indexOf(card) !== -1) { 5890 return; 5891 } 5892 5893 seen.push(card); 5894 candidates.push(card); 5895 } 5896 5897 function scanContainer(container) { 5898 var cardSelectors; 5899 5900 if (!container || !container.querySelectorAll) { 5901 return; 5902 } 5903 5904 cardSelectors = [ 5905 '.productGrid > .product', 5906 '.productList > .product', 5907 '.quickSearchResults-item', 5908 '.quickSearchResult', 5909 '.searchResults-item', 5910 '.search-result', 5911 'article.product', 5912 'li.product', 5913 '.product', 5914 '.card' 5915 ]; 5916 5917 for (var i = 0; i < cardSelectors.length; i++) { 5918 var found = container.querySelectorAll(cardSelectors[i]); 5919 5920 for (var n = 0; n < found.length; n++) { 5921 var item = found[n]; 5922 var preferredParent = 5923 item.closest('.quickSearchResults-item') || 5924 item.closest('.quickSearchResult') || 5925 item.closest('.searchResults-item') || 5926 item.closest('.search-result') || 5927 item.closest('.product') || 5928 item.closest('article') || 5929 item.closest('li') || 5930 item; 5931 5932 addCard(preferredParent); 5933 } 5934 } 5935 } 5936 5937 var containers = getSearchContainers(root || document); 5938 5939 for (var c = 0; c < containers.length; c++) { 5940 scanContainer(containers[c]); 5941 } 5942 5943 return candidates; 5944 } 5945 5946 function scanCard(card) { 5947 var productUrl; 5948 var lastCheckedUrl; 5949 var capturedUrl; 5950 var cacheKey; 5951 var cached; 5952 5953 if (!card) { 5954 return; 5955 } 5956 5957 productUrl = getProductLinkFromCard(card) || ''; 5958 lastCheckedUrl = card.getAttribute('data-martel-last-checked-url') || ''; 5959 5960 if (productUrl && lastCheckedUrl && productUrl !== lastCheckedUrl) { 5961 unhideCardForRecheck(card); 5962 card.removeAttribute('data-martel-search-check-pending'); 5963 } 5964 5965 if (directSkuFromElement(card)) { 5966 card.setAttribute('data-martel-last-checked-url', productUrl || 'direct-sku'); 5967 hideCard(card); 5968 return; 5969 } 5970 5971 if (textHasHiddenSkuLabel(card.textContent || '')) { 5972 card.setAttribute('data-martel-last-checked-url', productUrl || 'text-sku'); 5973 hideCard(card); 5974 return; 5975 } 5976 5977 if (!productUrl) { 5978 revealCard(card); 5979 return; 5980 } 5981 5982 if (urlMatchesHiddenUrlPart(productUrl)) { 5983 card.setAttribute('data-martel-last-checked-url', productUrl); 5984 hideCard(card); 5985 return; 5986 } 5987 5988 cacheKey = CACHE_PREFIX + normalizedUrlForCache(productUrl); 5989 cached = safeSessionGet(cacheKey); 5990 card.setAttribute('data-martel-last-checked-url', productUrl); 5991 5992 if (cached === '1') { 5993 hideCard(card); 5994 return; 5995 } 5996 5997 if (cached === '0') { 5998 revealCard(card); 5999 return; 6000 } 6001 6002 if (card.getAttribute('data-martel-search-check-pending') === productUrl) { 6003 return; 6004 } 6005 6006 capturedUrl = productUrl; 6007 card.setAttribute('data-martel-search-check-pending', capturedUrl); 6008 markCardChecking(card); 6009 6010 productUrlShouldBeHidden(capturedUrl).then(function (shouldHide) { 6011 card.removeAttribute('data-martel-search-check-pending'); 6012 6013 if ((getProductLinkFromCard(card) || '') !== capturedUrl) { 6014 revealCard(card); 6015 return; 6016 } 6017 6018 if (shouldHide) { 6019 hideCard(card); 6020 } else { 6021 revealCard(card); 6022 } 6023 }).catch(function () { 6024 card.removeAttribute('data-martel-search-check-pending'); 6025 revealCard(card); 6026 }); 6027 } 6028 6029 function scanSearchAreas(root) { 6030 var cards; 6031 6032 addFilterStyle(); 6033 cards = getCandidateCards(root || document); 6034 6035 for (var i = 0; i < cards.length; i++) { 6036 scanCard(cards[i]); 6037 } 6038 } 6039 6040 function scheduleScan(root, delay) { 6041 if (scanTimer) { 6042 window.clearTimeout(scanTimer); 6043 } 6044 6045 scanTimer = window.setTimeout(function () { 6046 scanSearchAreas(root || document); 6047 }
6047, typeof delay === 'number' ? delay : 15); 6048 } 6049 6050 function isSearchInput(target) { 6051 return !!( 6052 target && 6053 target.matches && 6054 target.matches('input[name="search_query"], input[type="search"], .form-input') 6055 ); 6056 } 6057 6058 function start() { 6059 addFilterStyle(); 6060 scanSearchAreas(document); 6061 6062 window.setTimeout(function () { 6063 scanSearchAreas(document); 6064 }, 75); 6065 6066 window.setTimeout(function () { 6067 scanSearchAreas(document); 6068 }, 250); 6069 6070 window.setTimeout(function () { 6071 scanSearchAreas(document); 6072 }, 800); 6073 6074 window.setTimeout(function () { 6075 scanSearchAreas(document); 6076 }, 1800); 6077 6078 var observer = new MutationObserver(function (mutations) { 6079 for (var i = 0; i < mutations.length; i++) { 6080 if (mutations[i].addedNodes && mutations[i].addedNodes.length) { 6081 scanSearchAreas(document); 6082 scheduleScan(document, 20); 6083 break; 6084 } 6085 } 6086 }); 6087 6088 observer.observe(document.documentElement, { 6089 childList: true, 6090 subtree: true 6091 }); 6092 6093 document.addEventListener('keydown', function (event) { 6094 if (isSearchInput(event.target)) { 6095 scheduleScan(document, 1); 6096 } 6097 }, true); 6098 6099 document.addEventListener('keyup', function (event) { 6100 if (isSearchInput(event.target)) { 6101 scheduleScan(document, 1); 6102 } 6103 }, true); 6104 6105 document.addEventListener('input', function (event) { 6106 if (isSearchInput(event.target)) { 6107 scheduleScan(document, 1); 6108 } 6109 }, true); 6110 6111 document.addEventListener('search', function (event) { 6112 if (isSearchInput(event.target)) { 6113 scheduleScan(document, 1); 6114 } 6115 }, true); 6116 } 6117 6118 if (document.readyState === 'loading') { 6119 document.addEventListener('DOMContentLoaded', start); 6120 } else { 6121 start(); 6122 } 6123})(); 6124</script>
6124<script id="martel-crucials-waitlist-v5"> 6125(function () { 6126 'use strict'; 6127 6128 if (window.__martelCrucialsWaitlistV5) return; 6129 window.__martelCrucialsWaitlistV5 = true; 6130 6131 const VERSION = '5.3.0'; 6132 const PREFIX = '[Martel Crucials Waitlist V5]'; 6133 const RETRY_PARAM = 'martel_crucials_retry'; 6134 const WAIT_MS = 7000; 6135 const POLL_MS = 250; 6136 6137 let poll = null; 6138 let pollPath = ''; 6139 let observerDebounce = null; 6140 let instantLoadBound = false; 6141 6142 const log = (...args) => console.info(PREFIX, ...args); 6143 const warn = (...args) => console.warn(PREFIX, ...args); 6144 6145 function text(el) { 6146 return el && el.textContent 6147 ? el.textContent.replace(/\s+/g, ' ').trim().toLowerCase() 6148 : ''; 6149 } 6150 6151 function productRoot() { 6152 return document.querySelector('.productView, [data-product-view]'); 6153 } 6154 6155 function soldOut() { 6156 const root = productRoot(); 6157 if (!root) return false; 6158 6159 const pageText = text(root); 6160 6161 /* 6162 * The pink Martel sold-out notice is the primary trigger. 6163 * The cosmetic Availability field does not control this helper. 6164 */ 6165 if ( 6166 pageText.includes('currently sold out') || 6167 pageText.includes('join the priority waitlist') || 6168 /\bout of stock\b/.test(pageText) || 6169 /\btemporarily unavailable\b/.test(pageText) 6170 ) { 6171 return true; 6172 } 6173 6174 const button = root.querySelector( 6175 '#form-action-addToCart, ' + 6176 '[data-button-type="add-cart"], ' + 6177 'form[data-cart-item-add] button[type="submit"], ' + 6178 'form[data-cart-item-add] input[type="submit"]' 6179 ); 6180 6181 return !!( 6182 button && 6183 ( 6184 button.disabled || 6185 button.getAttribute('aria-disabled') === 'true' || 6186 button.classList.contains('disabled') || 6187 button.classList.contains('is-disabled') 6188 ) 6189 ); 6190 } 6191 6192 function isRealWaitlist(container) { 6193 if (!container || !container.querySelector('input[type="email"]')) { 6194 return false; 6195 } 6196 6197 /* 6198 * Never mistake the footer newsletter field for 6199 * the Crucials Back in Stock form. 6200 */ 6201 if ( 6202 container.closest( 6203 'footer, .footer, .footer-info, ' + 6204 '[data-newsletter-subscription-form], ' + 6205 'form[action*="subscribe"]' 6206 ) 6207 ) { 6208 return false; 6209 } 6210 6211 const containerText = text(container); 6212 6213 /* 6214 * Reject huge ancestors such as .productView or body. 6215 * The old helper climbed too far up the page and generated 6216 * a false positive from unrelated waitlist wording. 6217 */ 6218 if (!containerText || containerText.length > 1800) return false; 6219 6220 const submit = container.querySelector( 6221 'button[type="submit"], input[type="submit"], button' 6222 ); 6223 6224 const submitText = submit 6225 ? String(submit.value || submit.textContent || '') 6226 .replace(/\s+/g, ' ') 6227 .trim() 6228 .toLowerCase() 6229 : ''; 6230 6231 if ( 6232 /priority restock/.test(submitText) || 6233 /join.*waitlist/.test(submitText) || 6234 /notify me/.test(submitText) || 6235 /back in stock/.test(submitText) 6236 ) { 6237 return true; 6238 } 6239 6240 const signals = [ 6241 /priority waitlist/.test(containerText), 6242 /available again/.test(containerText), 6243 /back in stock/.test(containerText), 6244 /agree to receive your newsletter/.test(containerText), 6245 /restock access/.test(containerText) 6246 ].filter(Boolean).length; 6247 6248 return signals >= 2; 6249 } 6250 6251 function findWaitlist() { 6252 const root = productRoot(); 6253 if (!root) return null; 6254 6255 /* 6256 * Only inspect email fields inside the product panel. 6257 * Footer, popup, and general newsletter fields are excluded. 6258 */ 6259 const inputs = root.querySelectorAll('input[type="email"]'); 6260 6261 for (const input of inputs) { 6262 let node = input.closest('form') || input.parentElement; 6263 6264 for (let depth = 0; node && depth < 7; depth += 1) { 6265 if (!root.contains(node)) break; 6266 6267 if (isRealWaitlist(node)) { 6268 return node; 6269 } 6270 6271 if (node === root) break; 6272 6273 node = node.parentElement; 6274 } 6275 } 6276 6277 return null; 6278 } 6279 6280 function reveal(widget) { 6281 const root = productRoot(); 6282 let node = widget; 6283 6284 /* 6285 * If Crucials created the correct form but one of its 6286 * wrappers remained hidden, reveal those wrappers. 6287 */ 6288 for (let depth = 0; root && node && depth < 4; depth += 1) { 6289 if (!root.contains(node)) break; 6290 6291 node.hidden = false;
6292 node.removeAttribute('aria-hidden'); 6293 node.style.removeProperty('visibility'); 6294 node.style.removeProperty('opacity'); 6295 6296 if (getComputedStyle(node).display === 'none') { 6297 node.style.setProperty('display', 'block', 'important'); 6298 } 6299 6300 if (node === root) break; 6301 6302 node = node.parentElement; 6303 } 6304 6305 widget.setAttribute('data-martel-crucials-ready', 'true'); 6306 } 6307 6308 function retryKey() { 6309 return 'martel-crucials-v5:' + 6310 location.pathname.replace(/\/+$/, '').toLowerCase(); 6311 } 6312 6313 function readRetry() { 6314 try { 6315 return parseInt(sessionStorage.getItem(retryKey()), 10) || 0; 6316 } catch (_) { 6317 return 0; 6318 } 6319 } 6320 6321 function writeRetry(value) { 6322 try { 6323 sessionStorage.setItem(retryKey(), String(value)); 6324 } catch (_) { 6325 /* 6326 * The retry URL parameter still prevents a reload loop 6327 * when session storage is unavailable. 6328 */ 6329 } 6330 } 6331 6332 function clearRetry() { 6333 let url; 6334 6335 try { 6336 sessionStorage.removeItem(retryKey()); 6337 url = new URL(location.href); 6338 } catch (_) { 6339 return; 6340 } 6341 6342 /* 6343 * Remove the temporary retry marker once the genuine 6344 * Crucials form has loaded successfully. 6345 */ 6346 if (url.searchParams.has(RETRY_PARAM) && history.replaceState) { 6347 url.searchParams.delete(RETRY_PARAM); 6348 6349 history.replaceState( 6350 history.state, 6351 document.title, 6352 url.pathname + url.search + url.hash 6353 ); 6354 } 6355 } 6356 6357 function formReady(widget, reason) { 6358 reveal(widget); 6359 clearRetry(); 6360 6361 log( 6362 'Real Crucials waitlist loaded.', 6363 reason, 6364 'Version:', 6365 VERSION 6366 ); 6367 } 6368 6369 function reloadOnce(reason) { 6370 let url; 6371 6372 try { 6373 url = new URL(location.href); 6374 } catch (error) { 6375 warn('Could not build the retry URL.', error); 6376 return; 6377 } 6378 6379 /* 6380 * A retry marker already in the URL means the single 6381 * permitted recovery load has already occurred. 6382 */ 6383 if (url.searchParams.has(RETRY_PARAM)) { 6384 warn( 6385 'The form is still missing after the one full-page retry. ' + 6386 'No reload loop will occur.', 6387 reason 6388 ); 6389 6390 return; 6391 } 6392 6393 const now = Date.now(); 6394 const previous = readRetry(); 6395 6396 /* 6397 * Do not repeat a recovery load for the same product 6398 * within five minutes in the current browser tab. 6399 */ 6400 if (previous && now - previous < 5 * 60 * 1000) { 6401 warn( 6402 'A retry was already attempted recently.', 6403 reason 6404 ); 6405 6406 return; 6407 } 6408 6409 writeRetry(now); 6410 6411 /* 6412 * The timestamp creates a fresh URL and forces a real 6413 * product-page render so the original Crucials script 6414 * receives the current product data. 6415 */ 6416 url.searchParams.set(RETRY_PARAM, String(now)); 6417 6418 warn( 6419 'Sold-out page found without the Crucials form. ' + 6420 'Performing one clean full-page load.', 6421 reason 6422 ); 6423 6424 location.replace(url.href); 6425 } 6426 6427 function stopPoll() { 6428 if (poll) { 6429 clearInterval(poll); 6430 } 6431 6432 poll = null; 6433 } 6434 6435 function check(reason) { 6436 const path = location.pathname; 6437 6438 /* 6439 * Keep an existing check running instead of resetting its 6440 * seven-second timer whenever another widget changes the DOM. 6441 */ 6442 if (poll && pollPath === path) return; 6443 6444 stopPoll(); 6445 6446 if (!productRoot() || !soldOut()) return; 6447 6448 const existing = findWaitlist(); 6449 6450 if (existing) { 6451 formReady(existing, reason); 6452 return; 6453 } 6454 6455 pollPath = path; 6456 const started = Date.now(); 6457 6458 poll = setInterval(() => { 6459 if (!productRoot() || !soldOut()) { 6460 stopPoll(); 6461 return; 6462 } 6463 6464 const widget = findWaitlist(); 6465 6466 if (widget) { 6467 stopPoll(); 6468 formReady(widget, reason); 6469 return; 6470 } 6471 6472 if (Date.now() - started >= WAIT_MS) { 6473 stopPoll(); 6474 reloadOnce(reason); 6475 } 6476 }, POLL_MS); 6477 } 6478 6479 function later(reason, delay = 0) { 6480 setTimeout(() => check(reason), delay); 6481 } 6482 6483 function bindInstantLoad() { 6484 const $ = 6485 window.jQuerySupermarket || 6486 window.chiarajQuery || 6487 window.jQueryTheme || 6488 window.jQuery; 6489 6490 if ( 6491 instantLoadBound || 6492 !$ || 6493 !$.fn || 6494 !document.body 6495 ) { 6496 return false;
6497 } 6498 6499 /* 6500 * PapaThemes' documented event after an Instant Load 6501 * category-to-product or product-to-product navigation. 6502 */ 6503 $(document.body) 6504 .off('loaded.instantload.martelCrucialsV5') 6505 .on('loaded.instantload.martelCrucialsV5', () => { 6506 pollPath = ''; 6507 6508 later( 6509 'PapaThemes loaded.instantload', 6510 500 6511 ); 6512 }); 6513 6514 instantLoadBound = true; 6515 6516 return true; 6517 } 6518 6519 function start() { 6520 /* 6521 * PapaThemes may not have exposed its jQuery instance yet 6522 * when Script Manager first runs, so retry the event binding 6523 * briefly without blocking the page. 6524 */ 6525 if (!bindInstantLoad()) { 6526 let attempts = 0; 6527 6528 const bindTimer = setInterval(() => { 6529 attempts += 1; 6530 6531 if ( 6532 bindInstantLoad() || 6533 attempts >= 40 6534 ) { 6535 clearInterval(bindTimer); 6536 } 6537 }, 250); 6538 } 6539 6540 /* 6541 * Detect both the Crucials form being inserted and 6542 * PapaThemes replacing the product panel through AJAX. 6543 */ 6544 if (window.MutationObserver && document.body) { 6545 new MutationObserver(() => { 6546 clearTimeout(observerDebounce); 6547 6548 observerDebounce = setTimeout(() => { 6549 const widget = findWaitlist(); 6550 6551 if (widget) { 6552 stopPoll(); 6553 6554 formReady( 6555 widget, 6556 'product DOM update' 6557 ); 6558 6559 return; 6560 } 6561 6562 if (!poll && soldOut()) { 6563 check('product DOM update'); 6564 } 6565 }, 350); 6566 }).observe(document.body, { 6567 childList: true, 6568 subtree: true 6569 }); 6570 } 6571 6572 later( 6573 'initial product-page load', 6574 600 6575 ); 6576 6577 addEventListener('pageshow', () => { 6578 pollPath = ''; 6579 6580 later( 6581 'browser pageshow', 6582 500 6583 ); 6584 }); 6585 6586 log( 6587 'Helper active; original read-only Crucials script untouched.', 6588 'Version:', 6589 VERSION 6590 ); 6591 } 6592 6593 /* 6594 * Optional console controls for testing: 6595 * 6596 * MartelCrucialsWaitlistV5.checkNow() 6597 * MartelCrucialsWaitlistV5.findWidget() 6598 * MartelCrucialsWaitlistV5.isSoldOutPage() 6599 */ 6600 window.MartelCrucialsWaitlistV5 = { 6601 version: VERSION, 6602 6603 checkNow: () => { 6604 pollPath = ''; 6605 check('manual checkNow'); 6606 }, 6607 6608 findWidget: findWaitlist, 6609 6610 isSoldOutPage: soldOut 6611 }; 6612 6613 if (document.readyState === 'loading') { 6614 document.addEventListener( 6615 'DOMContentLoaded', 6616 start, 6617 { once: true } 6618 ); 6619 } else { 6620 start(); 6621 } 6622}()); 6623</script>
6623<script> 6624(function () { 6625 'use strict'; 6626 6627 /* 6628 ============================================================ 6629 MARTEL ELECTRONICS 6630 BIGCOMMERCE VERIFIED CART STATUS — FINAL MASTER 6631 ============================================================ 6632 6633 100% BIGCOMMERCE 6634 NO CLOUD 6635 NO EXTERNAL SERVER 6636 NO API TOKEN 6637 NO FAKE NUMBERS 6638 NO EXTERNAL JAVASCRIPT 6639 ============================================================ 6640 */ 6641 6642 const CONFIG = { 6643 6644 enabled: true, 6645 6646 /* 6647 Leave empty [] to run on ALL product pages. 6648 6649 To limit this later to certain products, enter the 6650 BigCommerce PRODUCT IDs, for example: 6651 6652 targetProductIds: [123, 456] 6653 6654 IMPORTANT: 6655 These are BigCommerce Product IDs, not SKUs. 6656 */ 6657 targetProductIds: [], 6658 6659 singleMessage: 6660 '✓ This item is already in your cart.', 6661 6662 multipleMessage: function (quantity) { 6663 return '✓ You currently have ' + 6664 quantity + 6665 ' of this item in your cart.'; 6666 }, 6667 6668 background: '#f2fff5', 6669 border: '#16843b', 6670 text: '#12652e', 6671 6672 /* 6673 Leave FALSE on the live store. 6674 Change to true only for troubleshooting. 6675 */ 6676 debug: false 6677 }; 6678 6679 6680 const BOX_ID = 'martelVerifiedCartStatus'; 6681 6682 let refreshNumber = 0; 6683 6684 6685 /* ======================================================== 6686 DEBUG 6687 ======================================================== */ 6688 6689 function log() { 6690 6691 if (!CONFIG.debug || !window.console) { 6692 return; 6693 } 6694 6695 const args = 6696 Array.prototype.slice.call(arguments); 6697 6698 args.unshift('[Martel Cart Status]'); 6699 6700 console.log.apply(console, args); 6701 } 6702 6703 6704 /* ======================================================== 6705 FIND BIGCOMMERCE PRODUCT FORM 6706 ======================================================== */ 6707 6708 function getProductForm() { 6709 6710 return document.querySelector( 6711 'form[data-cart-item-add]' 6712 ); 6713 } 6714 6715 6716 /* ======================================================== 6717 GET BIGCOMMERCE PRODUCT ID 6718 ======================================================== */ 6719 6720 function getCurrentProductId() { 6721 6722 const form = getProductForm(); 6723 6724 if (!form) { 6725 return null; 6726 } 6727 6728 6729 /* 6730 PRIMARY METHOD 6731 6732 Current BigCommerce Cornerstone product forms contain: 6733 6734 <input type="hidden" 6735 name="product_id" 6736 value="PRODUCT-ID"> 6737 */ 6738 6739 const input = 6740 form.querySelector( 6741 'input[name="product_id"]' 6742 ); 6743 6744 if (input) { 6745 6746 const productId = 6747 parseInt(input.value, 10); 6748 6749 if ( 6750 !Number.isNaN(productId) && 6751 productId > 0 6752 ) { 6753 return productId; 6754 } 6755 } 6756 6757 6758 /* 6759 SAFE FALLBACK 6760 6761 Standard Cornerstone also places the product ID 6762 on .productView as data-entity-id. 6763 */ 6764 6765 const productView = 6766 document.querySelector( 6767 '.productView[data-entity-id]' 6768 ); 6769 6770 if (productView) { 6771 6772 const fallbackId = 6773 parseInt( 6774 productView.getAttribute( 6775 'data-entity-id' 6776 ), 6777 10 6778 ); 6779 6780 if ( 6781 !Number.isNaN(fallbackId) && 6782 fallbackId > 0 6783 ) { 6784 return fallbackId; 6785 } 6786 } 6787 6788 6789 return null; 6790 } 6791 6792 6793 /* ======================================================== 6794 PRODUCT TARGETING 6795 ======================================================== */ 6796 6797 function isTargetProduct(productId) { 6798 6799 if ( 6800 !Array.isArray( 6801 CONFIG.targetProductIds 6802 ) || 6803 CONFIG.targetProductIds.length === 0 6804 ) { 6805 return true; 6806 } 6807 6808 6809 return CONFIG.targetProductIds.some( 6810 function (id) { 6811 6812 return Number(id) === productId; 6813 6814 } 6815 ); 6816 } 6817 6818 6819 /* ======================================================== 6820 MESSAGE BOX 6821 ======================================================== */ 6822
6823 function getMessageBox() { 6824 6825 return document.getElementById( 6826 BOX_ID 6827 ); 6828 } 6829 6830 6831 function removeMessage() { 6832 6833 const box = getMessageBox(); 6834 6835 if (box) { 6836 box.remove(); 6837 } 6838 } 6839 6840 6841 function createMessageBox() { 6842 6843 let box = getMessageBox(); 6844 6845 if (box) { 6846 return box; 6847 } 6848 6849 6850 box = document.createElement('div'); 6851 6852 box.id = BOX_ID; 6853 6854 box.setAttribute( 6855 'role', 6856 'status' 6857 ); 6858 6859 box.setAttribute( 6860 'aria-live', 6861 'polite' 6862 ); 6863 6864 6865 box.style.cssText = [ 6866 6867 'display:none', 6868 6869 'box-sizing:border-box', 6870 6871 'width:100%', 6872 6873 'margin:10px 0 12px', 6874 6875 'padding:11px 14px', 6876 6877 'border:1px solid ' + 6878 CONFIG.border, 6879 6880 'border-radius:7px', 6881 6882 'background:' + 6883 CONFIG.background, 6884 6885 'color:' + 6886 CONFIG.text, 6887 6888 'font-family:Arial,Helvetica,sans-serif', 6889 6890 'font-size:15px', 6891 6892 'font-weight:700', 6893 6894 'line-height:1.35', 6895 6896 'text-align:center' 6897 6898 ].join(';'); 6899 6900 6901 return box; 6902 } 6903 6904 6905 /* ======================================================== 6906 PLACE MESSAGE UNDER ADD TO CART AREA 6907 ======================================================== */ 6908 6909 function placeMessage(box) { 6910 6911 const form = 6912 getProductForm(); 6913 6914 if (!form) { 6915 return false; 6916 } 6917 6918 6919 const button = 6920 form.querySelector( 6921 '#form-action-addToCart' 6922 ); 6923 6924 6925 /* 6926 Use BigCommerce's standard Add to Cart wrapper first. 6927 6928 This avoids disturbing the actual Add to Cart button, 6929 wallet buttons, PayPal buttons, etc. 6930 */ 6931 6932 const anchor = 6933 6934 form.querySelector( 6935 '#add-to-cart-wrapper' 6936 ) || 6937 6938 ( 6939 button && 6940 button.closest( 6941 '.add-to-cart-buttons' 6942 ) 6943 ) || 6944 6945 ( 6946 button && 6947 button.closest( 6948 '.form-action' 6949 ) 6950 ); 6951 6952 6953 if (anchor) { 6954 6955 if ( 6956 box.parentNode !== 6957 anchor.parentNode || 6958 6959 box.previousElementSibling !== 6960 anchor 6961 ) { 6962 6963 anchor.insertAdjacentElement( 6964 'afterend', 6965 box 6966 ); 6967 } 6968 6969 return true; 6970 } 6971 6972 6973 /* 6974 Last-resort safe fallback. 6975 */ 6976 6977 if (box.parentNode !== form) { 6978 6979 form.appendChild(box); 6980 } 6981 6982 return true; 6983 } 6984 6985 6986 /* ======================================================== 6987 DISPLAY MESSAGE 6988 ======================================================== */ 6989 6990 function showMessage(quantity) { 6991 6992 const box = 6993 createMessageBox(); 6994 6995 6996 if (!placeMessage(box)) { 6997 return; 6998 } 6999 7000 7001 box.textContent = 7002 7003 quantity > 1 7004 7005 ? CONFIG.multipleMessage( 7006 quantity 7007 ) 7008 7009 : CONFIG.singleMessage; 7010 7011 7012 box.style.display = 'block'; 7013 } 7014 7015 7016 /* ======================================================== 7017 BIGCOMMERCE CART LINE ITEMS 7018 ======================================================== */ 7019 7020 function getAllProductLineItems(cart) { 7021 7022 if ( 7023 !cart || 7024 !cart.lineItems 7025 ) { 7026 return []; 7027 } 7028 7029 7030 const physical = 7031 Array.isArray( 7032 cart.lineItems.physicalItems 7033 ) 7034 ? cart.lineItems.physicalItems 7035 : []; 7036 7037 7038 const digital = 7039 Array.isArray( 7040 cart.lineItems.digitalItems 7041 ) 7042 ? cart.lineItems.digitalItems 7043 : []; 7044 7045 7046 return physical.concat( 7047 digital 7048 ); 7049 } 7050 7051 7052 /* ======================================================== 7053 FIND QUANTITY OF CURRENT PRODUCT 7054 ======================================================== */ 7055 7056 function quantityForProduct( 7057 carts, 7058 productId 7059 ) { 7060 7061 let quantity = 0; 7062 7063 7064 ( 7065 Array.isArray(carts) 7066 ? carts 7067 : [] 7068 ).forEach( 7069 function (cart) { 7070 7071 getAllProductLineItems( 7072 cart 7073 ).forEach( 7074 function (item) { 7075 7076 if ( 7077 Number( 7078 item.productId 7079 ) === productId 7080 ) { 7081 7082 quantity += 7083 Number( 7084 item.quantity 7085 ) || 0; 7086 } 7087 7088 } 7089 ); 7090 7091 } 7092 ); 7093 7094 7095 return quantity; 7096 } 7097 7098 7099 /* ======================================================== 7100 GET CURRENT SHOPPER'S REAL BIGCOMMERCE CART 7101 ======================================================== */ 7102 7103 async function getBigCommerceCarts() { 7104 7105 const response = 7106 await fetch( 7107 '/api/storefront/carts', 7108 { 7109 method: 'GET', 7110 7111 credentials:
7112 'same-origin', 7113 7114 cache: 7115 'no-store', 7116 7117 headers: { 7118 'Accept': 7119 'application/json' 7120 } 7121 } 7122 ); 7123 7124 7125 if (!response.ok) { 7126 7127 throw new Error( 7128 'BigCommerce cart request failed: ' + 7129 response.status 7130 ); 7131 } 7132 7133 7134 const data = 7135 await response.json(); 7136 7137 7138 return Array.isArray(data) 7139 ? data 7140 : []; 7141 } 7142 7143 7144 /* ======================================================== 7145 REFRESH DISPLAY 7146 ======================================================== */ 7147 7148 async function refreshCartStatus() { 7149 7150 const thisRefresh = 7151 ++refreshNumber; 7152 7153 7154 if (!CONFIG.enabled) { 7155 7156 removeMessage(); 7157 7158 return; 7159 } 7160 7161 7162 const productId = 7163 getCurrentProductId(); 7164 7165 7166 /* 7167 If this isn't a BigCommerce product page, 7168 stop immediately. 7169 */ 7170 7171 if ( 7172 !productId || 7173 !isTargetProduct(productId) 7174 ) { 7175 7176 removeMessage(); 7177 7178 return; 7179 } 7180 7181 7182 try { 7183 7184 const carts = 7185 await getBigCommerceCarts(); 7186 7187 7188 /* 7189 If another refresh started while this one 7190 was loading, ignore the older result. 7191 */ 7192 7193 if ( 7194 thisRefresh !== 7195 refreshNumber 7196 ) { 7197 return; 7198 } 7199 7200 7201 const quantity = 7202 quantityForProduct( 7203 carts, 7204 productId 7205 ); 7206 7207 7208 if (quantity > 0) { 7209 7210 showMessage( 7211 quantity 7212 ); 7213 7214 7215 log( 7216 'Verified product', 7217 productId, 7218 'quantity', 7219 quantity 7220 ); 7221 7222 } else { 7223 7224 removeMessage(); 7225 } 7226 7227 7228 } catch (error) { 7229 7230 /* 7231 FAIL SAFE 7232 7233 If BigCommerce's cart endpoint is ever unavailable, 7234 show nothing. 7235 7236 Never interfere with shopping or checkout. 7237 */ 7238 7239 if ( 7240 thisRefresh !== 7241 refreshNumber 7242 ) { 7243 return; 7244 } 7245 7246 7247 removeMessage(); 7248 7249 log(error); 7250 } 7251 } 7252 7253 7254 /* ======================================================== 7255 AFTER ADD TO CART 7256 ======================================================== */ 7257 7258 function scheduleRefreshes() { 7259 7260 /* 7261 These are fallbacks. 7262 7263 They are NOT permanent polling. 7264 They run only after the product form is submitted. 7265 */ 7266 7267 window.setTimeout( 7268 refreshCartStatus, 7269 700 7270 ); 7271 7272 window.setTimeout( 7273 refreshCartStatus, 7274 1600 7275 ); 7276 7277 window.setTimeout( 7278 refreshCartStatus, 7279 3000 7280 ); 7281 } 7282 7283 7284 /* ======================================================== 7285 INITIALIZE 7286 ======================================================== */ 7287 7288 function initialize() { 7289 7290 if (!CONFIG.enabled) { 7291 return; 7292 } 7293 7294 7295 /* 7296 Do absolutely nothing unless this page has 7297 BigCommerce's product Add to Cart form. 7298 */ 7299 7300 if (!getProductForm()) { 7301 return; 7302 } 7303 7304 7305 /* 7306 Check cart when product page loads. 7307 */ 7308 7309 refreshCartStatus(); 7310 7311 7312 /* 7313 Catch the standard BigCommerce product form submit. 7314 7315 This also works when the shopper submits using 7316 the keyboard rather than clicking the button. 7317 */ 7318 7319 document.addEventListener( 7320 'submit', 7321 function (event) { 7322 7323 const form = 7324 event.target; 7325 7326 7327 if ( 7328 form && 7329 form.matches && 7330 form.matches( 7331 'form[data-cart-item-add]' 7332 ) 7333 ) { 7334 7335 scheduleRefreshes(); 7336 } 7337 7338 }, 7339 true 7340 ); 7341 7342 7343 /* 7344 CURRENT BIGCOMMERCE CORNERSTONE EVENT 7345 7346 Cornerstone triggers cart-quantity-update after 7347 its cart content has successfully refreshed. 7348 7349 Use it when jQuery is available. 7350 7351 Script does NOT depend on this event because the 7352 timed refreshes above remain as the fallback. 7353 */ 7354 7355 if (window.jQuery) { 7356 7357 window.jQuery( 7358 document.body 7359 ).on( 7360 7361 'cart-quantity-update.martelVerifiedCartStatus', 7362 7363 function () { 7364 7365 window.setTimeout( 7366 refreshCartStatus, 7367 50 7368 ); 7369 7370 } 7371 ); 7372 } 7373 7374 7375 /* 7376 Shopper may change the cart in another tab. 7377 Recheck when they return. 7378 */ 7379 7380 window.addEventListener(
7381 'focus', 7382 refreshCartStatus 7383 ); 7384 7385 7386 /* 7387 Handles browser Back / Forward cache. 7388 */ 7389 7390 window.addEventListener( 7391 'pageshow', 7392 refreshCartStatus 7393 ); 7394 7395 7396 /* 7397 Recheck when hidden tab becomes visible. 7398 */ 7399 7400 document.addEventListener( 7401 'visibilitychange', 7402 function () { 7403 7404 if (!document.hidden) { 7405 7406 refreshCartStatus(); 7407 } 7408 7409 } 7410 ); 7411 } 7412 7413 7414 /* ======================================================== 7415 START 7416 ======================================================== */ 7417 7418 if ( 7419 document.readyState === 7420 'loading' 7421 ) { 7422 7423 document.addEventListener( 7424 'DOMContentLoaded', 7425 initialize, 7426 { 7427 once: true 7428 } 7429 ); 7430 7431 } else { 7432 7433 initialize(); 7434 } 7435 7436})(); 7437</script>
7437 7438<style> 7439.estimator-form--ups { 7440 display: block !important; 7441 clip: auto !important; 7442 height: auto !important; 7443 width: auto !important; 7444 position: static !important; 7445} 7446.estimator-form-toggleUPSRate { display: none; } 7447 7448.productCarousel .card-buttons, 7449.productGrid .card-buttons { 7450 opacity: 1; 7451 clip: auto; 7452 visibility: visible; 7453} 7454.card-figcaption { opacity: 1; } 7455.card-figcaption-button.quickview { opacity: 0; } 7456.card:hover .card-figcaption-button.quickview { opacity: 1; } 7457 7458.alertBox--info { 7459 background-color: #f16722 !important; 7460 border-color: #f16722 !important; 7461} 7462 7463.card-figcaption-button--compare:hover:after { 7464 content: 'Compare'; 7465 position: absolute; 7466 padding: 4px 8px; 7467 background: #fff; 7468 display: inline-block; 7469 font-size: 12px; 7470 color: #666666; 7471 bottom: calc(100% + 4px); 7472 right: 0; 7473 text-indent: 0; 7474} 7475 7476@media (max-width: 800px) { 7477 .productView-description-tabContent.emthemesModez-mobile-collapse-content { 7478 max-height: none; 7479 overflow: auto; 7480 } 7481 7482 .productView-description-tabContent .emthemesModez-mobile-collapse-handle { 7483 display: none; 7484 } 7485} 7486 7487@media (max-width: 800px) { 7488 .emthemesModez-header-topSection .navUser:last-child .navUser-section .navUser-item:last-child { 7489 display: block; 7490 margin-right: 50px; 7491 border: 0; 7492 } 7493} 7494 7495.pagination-item .pagination-link { 7496 font-size: 16px; 7497 font-weight: bold; 7498 min-width: 40px; 7499} 7500 7501.pagination-item, 7502.pagination-item.pagination-item--current { 7503 border-color: #f0790b; 7504 border-radius: 4px; 7505} 7506 7507.pagination-item--current .pagination-link, 7508.pagination-item--current .pagination-link:hover { 7509 background: #f0790b; 7510 color: #fff; 7511} 7512 7513@media (min-width: 801px) { 7514 .card { 7515 padding-bottom: 50px !important; 7516 } 7517 .card-figure { 7518 overflow: visible; 7519 position: static; 7520 } 7521 .card-img-container { 7522 position: relative; 7523 } 7524 .card-figcaption-button.quickview-alt { 7525 bottom: 0; 7526 } 7527} 7528 7529table.customTable { 7530 width: 100%; 7531 background-color: #FFFFFF; 7532 border-collapse: collapse; 7533 border-width: 1px; 7534 border-color: #D3D3D3; 7535 border-style: solid; 7536 color: #000000; 7537} 7538 7539table.customTable td, 7540table.customTable th { 7541 border-width: 1px; 7542 border-color: #D3D3D3; 7543 border-style: solid; 7544 padding: 3px; 7545} 7546 7547table.customTable thead { 7548 background-color: #D3D3D3; 7549} 7550</style> 7551
7552<script> 7553(function () { 7554 var style = document.createElement('style'); 7555 style.innerHTML = '.shippingOptionLabel .shippingOption-price { min-width: 10rem; max-width: 10rem; }'; 7556 document.head.appendChild(style); 7557})(); 7558</script>
7558 7559
7560<script> 7561(function ($) { 7562 if (!$) return; 7563 7564 $(function () { 7565 function addConditionBadgeToProductPage() { 7566 var $el = $('.productView-info-value--condition'); 7567 if (!$el.length || $('.productView-images .sale-flag-side--custom').length) return; 7568 7569 var $condBadge = $('<div class="sale-flag-side sale-flag-side--custom"><span class="sale-text">' + $el.text() + '</span></div>'); 7570 var $image = $('.productView-imageCarousel-main'); 7571 var $lastBadge = $('.productView-images .sale-flag-side').last(); 7572 7573 if ($lastBadge.length > 0) { 7574 $lastBadge.before($condBadge); 7575 } else if ($image.length) { 7576 $image.after($condBadge); 7577 } 7578 } 7579 7580 function requestCardCondition(id, $cardFigure) { 7581 $.ajax({ 7582 url: '/products.php?productId=' + id, 7583 headers: { 7584 'stencil-options': '{"render_with":"products/quick-view"}' 7585 }, 7586 success: function (data) { 7587 var $html = $(data); 7588 var $cond = $html.find('.productView-info-value--condition'); 7589 7590 if ($cond.length > 0 && !$cardFigure.find('.sale-flag-side--custom').length) { 7591 var $condBadge = $('<div class="sale-flag-side sale-flag-side--custom"><span class="sale-text">' + $cond.text() + '</span></div>'); 7592 var $lastBadge = $cardFigure.find('.sale-flag-side').last(); 7593 7594 if ($lastBadge.length > 0) { 7595 $lastBadge.after($condBadge); 7596 } else { 7597 $cardFigure.prepend($condBadge); 7598 } 7599 } 7600 } 7601 }); 7602 } 7603 7604 function requestAllConditionBadges($scope) { 7605 $('[data-emthemesmodez-cart-item-add]', $scope).each(function (_, a) { 7606 var match = a.href && a.href.match(/product_id=([0-9]+)/); 7607 if (!match) return; 7608 7609 var $cardFigure = $(a).closest('.card-figure'); 7610 if (!$cardFigure.length || $cardFigure.find('.sale-flag-side--custom').length) return; 7611 7612 requestCardCondition(match[1], $cardFigure); 7613 }); 7614 } 7615 7616 addConditionBadgeToProductPage(); 7617 requestAllConditionBadges($('body')); 7618 7619 setInterval(function () { 7620 $('.emthemesModez-productsByCategoryTabs-products').each(function (_, el) { 7621 var $el = $(el); 7622 if (!$el.data('conditionBadgeAdded')) { 7623 $el.data('conditionBadgeAdded', true); 7624 requestAllConditionBadges($el); 7625 } 7626 }); 7627 }, 800); 7628 }); 7629})(window.jQuerySupermarket || window.jQuery); 7630</script>
7630 7631
7632<script> 7633(function ($) { 7634 if (!$) return; 7635 7636 $(function () { 7637 $('#facetedSearch-navList--bool .navList-action').each(function (_, el) { 7638 var $el = $(el); 7639 if ($el.text().indexOf('In Stock') !== -1 && !$el.hasClass('is-selected')) { 7640 setTimeout(function () { 7641 $el.click(); 7642 }, 400); 7643 } 7644 }); 7645 }); 7646})(window.jQuerySupermarket || window.jQuery); 7647</script>
7647 7648
7649<script> 7650(function ($) { 7651 if (!$ || typeof stencilUtils === 'undefined' || !stencilUtils.hooks) return; 7652 7653 $(function () { 7654 function cloneCheckoutShippingTips() { 7655 var $tipsEl = $('#checkout-shipping-options-tips'); 7656 7657 if (!$tipsEl.length || $('#checkout-shipping-options-tips-clone').length) return; 7658 7659 var $shippingOptionsEl = $('#checkout-shipping-options'); 7660 if ($shippingOptionsEl.length > 0) { 7661 $tipsEl.clone() 7662 .attr('id', 'checkout-shipping-options-tips-clone') 7663 .show() 7664 .insertBefore($shippingOptionsEl.children('legend')); 7665 } 7666 } 7667 7668 if (!$('#checkout-shipping-options-tips').length) { 7669 $('body').append( 7670 '<div id="checkout-shipping-options-tips" style="display:none;">' + 7671 '<ul>' + 7672 '<li>We are shipping Online Orders Monday - Friday. | Free Shipping takes 3-7 days and is not time guaranteed. We ship from California. Free Shipping does not include international orders. 2 Day Air & Next Day Air are reliable!</li>' + 7673 '</ul>' + 7674 '</div>' 7675 ); 7676 } 7677 7678 cloneCheckoutShippingTips(); 7679 setInterval(cloneCheckoutShippingTips, 500); 7680 }); 7681})(window.jQuerySupermarket || window.jQuery); 7682</script>
7682 7683
7684<script> 7685(function ($) { 7686 if (!$) return; 7687 7688 $(function () { 7689 $('input[data-search-quick]').attr('placeholder', 'Search by product name,sku and keyword'); 7690 }); 7691})(window.jQuerySupermarket || window.jQuery); 7692</script>
7692 7693
7694<script> 7695(function ($) { 7696 if (!$ || typeof stencilUtils === 'undefined' || !stencilUtils.api || !stencilUtils.api.product) return; 7697 7698 function debounce(fn, wait) { 7699 var timeout; 7700 return function () { 7701 var context = this; 7702 var args = arguments; 7703 clearTimeout(timeout); 7704 timeout = setTimeout(function () { 7705 fn.apply(context, args); 7706 }, wait); 7707 }; 7708 } 7709 7710 function isInViewport(el) { 7711 var rect = el.getBoundingClientRect(); 7712 return rect.top < window.innerHeight && rect.bottom > 0; 7713 } 7714 7715 function main() { 7716 var $cards = $('.card'); 7717 7718 var update = debounce(function () { 7719 $cards.each(function (_, el) { 7720 var $scope = $(el); 7721 7722 if ($scope.data('stockLoaded') || !isInViewport(el)) { 7723 return; 7724 } 7725 7726 var id = $scope.find('.quickview[data-product-id]').data('productId'); 7727 if (!id) return; 7728 7729 stencilUtils.api.product.getById(id, { template: 'products/quick-view' }, function (err, resp) { 7730 if (err || !resp) return; 7731 7732 var stock = $(resp).find('[data-product-stock]').html(); 7733 if (stock) { 7734 stock = $.trim(stock); 7735 if (stock) { 7736 $scope.find('.card-body').append('<div class="card-text cart-text--stock">Current Stock: <span class="value">' + stock + '</span></div>'); 7737 } 7738 } 7739 }); 7740 7741 $scope.data('stockLoaded', true); 7742 }); 7743 }, 200); 7744 7745 $(window).on('scroll resize load', update); 7746 update(); 7747 7748 var MutationObserverClass = window.MutationObserver || window.WebKitMutationObserver; 7749 if (MutationObserverClass) { 7750 var mo = new MutationObserverClass(function (mutations) { 7751 mutations.forEach(function (mutation) { 7752 if (mutation.type === 'childList' && mutation.addedNodes && mutation.addedNodes.length) { 7753 $cards = $cards.add($(mutation.addedNodes).find('.card')); 7754 update(); 7755 } 7756 }); 7757 }); 7758 7759 mo.observe(document.documentElement, { 7760 childList: true, 7761 subtree: true 7762 }); 7763 } 7764 7765 if (!$('#martel-stock-style').length) { 7766 $('head').append('<style id="martel-stock-style">.cart-text--stock .value { font-weight:bold; color:#000; }</style>'); 7767 } 7768 } 7769 7770 $(document).ready(main); 7771})(window.jQuerySupermarket || window.jQuery); 7772</script>
7772 7773
7774<script> 7775(function () { 7776 var style = document.createElement('style'); 7777 style.innerHTML = 7778 ".productCarousel .card-buttons .card-figcaption-button:before, .productGrid .card-buttons .card-figcaption-button:before { content: '\\f07a'; }" + 7779 ".productCarousel .card-buttons .card-figcaption-button--compare:before, .productGrid .card-buttons .card-figcaption-button--compare:before { content: '\\f0ec'; }" + 7780 ".productCarousel .card-buttons .card-figcaption-button.quickview:before, .productGrid .card-buttons .card-figcaption-button.quickview:before { content: '\\f002'; }"; 7781 document.head.appendChild(style); 7782})(); 7783</script>
7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 <!-- snippet location footer --> 7794
7794<script>window.__CF$cv$params={r:'a4079664fc221b3c',t:'MTc5MDMxMzcwOA==',u:'01a0d7033c5d740a8609ab88fc8fba00',ut:'0sn8_vK8oZY0r8BYeY7sTlU5ZsfcZNvm671T3zRdUNY-1790313708-1.2.1.1-hbr_U1YIpG29Sb16.Omu_WVR_ZMF7Ems2UQI04q2gwtJUzlscttpsFqnkfs_ltjIymzxxX8tfF7.rsJWMatayBM57c8MdN8yzWjHPtevM00',i:60};(function(){if(!document.body)return;var s=document.createElement('script');s.src='/cdn-cgi/challenge-platform/scripts/precursor/main.js';document.head.appendChild(s);})();</script>
7794</body> 7795</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.