PageSourceSearch

https://ambouncealot.net/

html ambouncealot.net collected 2026-09-30 19:44:01 UTC 373,268 bytes, 7,573 lines download raw bytes

1<!doctype html>
2<html lang="en-US" prefix="og: https://ogp.me/ns#">
3<head>
4	<meta charset="UTF-8">
5	<meta name="viewport" content="width=device-width, initial-scale=1">
6	<link rel="profile" href="https://gmpg.org/xfn/11">
7		
8<!-- Search Engine Optimization by Rank Math - https://rankmath.com/ -->
9<title>Home - A&amp;M Bounce A-Lot, LLC Bridgeton NJ</title>
10<meta name="robots" content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"/>
11<link rel="canonical" href="https://ambouncealot.net/" />
12<meta property="og:locale" content="en_US" />
13<meta property="og:type" content="website" />
14<meta property="og:title" content="Home - A&amp;M Bounce A-Lot, LLC Bridgeton NJ" />
15<meta property="og:description" content="Check for Coupons welcome to the best New Jersey Bounce House Rentals What Our Customers Say&#8230; OUR RENTALS Your #1 Source For Event Rentals We rent to events both big and small – with the same world class service and dependability no matter who you are or what type of event you’re holding. What Makes [&hellip;]" />
16<meta property="og:url" content="https://ambouncealot.net/" />
17<meta property="og:site_name" content="A&amp;M Bounce A-Lot, LLC Bridgeton NJ" />
18<meta property="og:updated_time" content="2026-04-20T18:58:59+00:00" />
19<meta name="twitter:card" content="summary_large_image" />
20<meta name="twitter:title" content="Home - A&amp;M Bounce A-Lot, LLC Bridgeton NJ" />
21<meta name="twitter:description" content="Check for Coupons welcome to the best New Jersey Bounce House Rentals What Our Customers Say&#8230; OUR RENTALS Your #1 Source For Event Rentals We rent to events both big and small – with the same world class service and dependability no matter who you are or what type of event you’re holding. What Makes [&hellip;]" />
22<meta name="twitter:label1" content="Written by" />
23<meta name="twitter:data1" content="io" />
24<meta name="twitter:label2" content="Time to read" />
25<meta name="twitter:data2" content="1 minute" />
26<script type="application/ld+json" class="rank-math-schema">{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://ambouncealot.net/#organization","name":"A&amp;M Bounce A-Lot, LLC Bridgeton NJ","url":"https://ambouncealot.net","email":"[email protected]","logo":{"@type":"ImageObject","@id":"https://ambouncealot.net/#logo","url":"https://ambouncealot.net/wp-content/uploads/2020/02/Website-Client-Logos-150x150.webp","contentUrl":"https://ambouncealot.net/wp-content/uploads/2020/02/Website-Client-Logos-150x150.webp","caption":"A&amp;M Bounce A-Lot, LLC Bridgeton NJ","inLanguage":"en-US"}},{"@type":"WebSite","@id":"https://ambouncealot.net/#website","url":"https://ambouncealot.net","name":"A&amp;M Bounce A-Lot, LLC Bridgeton NJ","publisher":{"@id":"https://ambouncealot.net/#organization"},"inLanguage":"en-US","potentialAction":{"@type":"SearchAction","target":"https://ambouncealot.net/?s={search_term_string}","query-input":"required name=search_term_string"}},{"@type":"ImageObject","@id":"https://ambouncealot.net/wp-content/uploads/2026/04/Copy-of-Michael-Bermudez-Carousel.png","url":"https://ambouncealot.net/wp-content/uploads/2026/04/Copy-of-Michael-Bermudez-Carousel.png","width":"200","height":"200","inLanguage":"en-US"},{"@type":"WebPage","@id":"https://ambouncealot.net/#webpage","url":"https://ambouncealot.net/","name":"Home - A&amp;M Bounce A-Lot, LLC Bridgeton NJ","datePublished":"2025-05-21T17:29:12+00:00","dateModified":"2026-04-20T18:58:59+00:00","about":{"@id":"https://ambouncealot.net/#organization"},"isPartOf":{"@id":"https://ambouncealot.net/#website"},"primaryImageOfPage":{"@id":"https://ambouncealot.net/wp-content/uploads/2026/04/Copy-of-Michael-Bermudez-Carousel.png"},"inLanguage":"en-US"}]}</script>
26
27<!-- /Rank Math WordPress SEO plugin -->
28
29<link rel='dns-prefetch' href='//cdnjs.cloudflare.com' />
30<link rel="alternate" type="application/rss+xml" title="A&amp;M Bounce A-Lot, LLC Bridgeton NJ &raquo; Feed" href="https://ambouncealot.net/feed/" />
31<link rel="alternate" type="application/rss+xml" title="A&amp;M Bounce A-Lot, LLC Bridgeton NJ &raquo; Comments Feed" href="https://ambouncealot.net/comments/feed/" />
32<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://ambouncealot.net/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fambouncealot.net%2F" />
33<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://ambouncealot.net/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fambouncealot.net%2F&#038;format=xml" />
34<style id="wp-img-auto-sizes-contain-inline-css">
35img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
36/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
37</style>
38<style id="classic-theme-styles-inline-css">
39/*! This file is auto-generated */
40.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
41/*# sourceURL=/wp-includes/css/classic-themes.min.css */
42</style>
43<style id="global-styles-inline-css">
44:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
44--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
44.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
45:root :where(.wp-block-icon svg){width: 24px;}
46:where(.wp-block-gallery.is-layout-flex){gap: var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) );}:where(.wp-block-gallery.is-layout-grid){gap: var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) );}
47:where(.wp-block-latest-posts.is-layout-flex){gap: 1.25em;}:where(.wp-block-latest-posts.is-layout-grid){gap: 1.25em;}
48:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
49:where(.wp-block-term-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-term-template.is-layout-grid){gap: 1.25em;}
50:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
51:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}
52/*# sourceURL=global-styles-inline-css */
53</style>
54<link rel='stylesheet' id='io_styles-css' href='https://ambouncealot.net/wp-content/plugins/inflatableoffice/io_styles_v6.css?ver=7.1.2' media='all' />
55<link rel='stylesheet' id='font-awesome-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/lib/font-awesome/css/font-awesome.min.css?ver=4.7.0' media='all' />
56<link rel='stylesheet' id='datepicker_css-css' href='https://ambouncealot.net/wp-content/plugins/inflatableoffice/jquery.datepicker.css?ver=7.1.2' media='all' />
57<link rel='stylesheet' id='timePicker_css-css' href='https://ambouncealot.net/wp-content/plugins/inflatableoffice/jquery.timepicker.css?ver=7.1.2' media='all' />
58<link rel='stylesheet' id='fancyBox_css-css' href='https://ambouncealot.net/wp-content/plugins/inflatableoffice/jquery.fancybox.css?ver=7.1.2' media='all' />
59<link rel='stylesheet' id='slick-carousel-css-css' href='https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.css?ver=7.1.2' media='all' />
60<link rel='stylesheet' id='slick-carousel-theme-css-css' href='https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick-theme.min.css?ver=7.1.2' media='all' />
61<link rel='stylesheet' id='dashicons-css' href='https://ambouncealot.net/wp-includes/css/dashicons.min.css?ver=7.1.2' media='all' />
62<link rel='stylesheet' id='megamenu-css' href='https://ambouncealot.net/wp-content/uploads/maxmegamenu/style.css?ver=34badc' media='all' />
63<link rel='stylesheet' id='elementor-hello-theme-style-css' href='https://ambouncealot.net/wp-content/themes/io-kenos/style.css?ver=7.1.2' media='all' />
64<link rel='stylesheet' id='elementor-frontend-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/css/frontend.min.css?ver=4.3.2' media='all' />
65<link rel='stylesheet' id='widget-icon-list-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/css/widget-icon-list.min.css?ver=4.3.2' media='all' />
66<link rel='stylesheet' id='e-animation-grow-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/lib/animations/styles/e-animation-grow.min.css?ver=4.3.2' media='all' />
67<link rel='stylesheet' id='widget-image-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/css/widget-image.min.css?ver=4.3.2' media='all' />
68<link rel='stylesheet' id='widget-search-form-css' href='https://ambouncealot.net/wp-content/plugins/elementor-pro/assets/css/widget-search-form.min.css?ver=4.2.2' media='all' />
69<link rel='stylesheet' id='elementor-icons-shared-0-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/lib/font-awesome/css/fontawesome.min.css?ver=5.15.3' media='all' />
70<link rel='stylesheet' id='elementor-icons-fa-solid-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/lib/font-awesome/css/solid.min.css?ver=5.15.3' media='all' />
71<link rel='stylesheet' id='widget-nav-menu-css' href='https://ambouncealot.net/wp-content/plugins/elementor-pro/assets/css/widget-nav-menu.min.css?ver=4.2.2' media='all' />
72<link rel='stylesheet' id='e-sticky-css' href='https://ambouncealot.net/wp-content/plugins/elementor-pro/assets/css/modules/sticky.min.css?ver=4.2.2' media='all' />
73<link rel='stylesheet' id='widget-heading-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/css/widget-heading.min.css?ver=4.3.2' media='all' />
74<link rel='stylesheet' id='widget-form-css' href='https://ambouncealot.net/wp-content/plugins/elementor-pro/assets/css/widget-form.min.css?ver=4.2.2' media='all' />
75<link rel='stylesheet' id='elementor-icons-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/lib/eicons/css/elementor-icons.min.css?ver=5.54.0' media='all' />
76<link rel='stylesheet' id='elementor-post-812-css' href='https://ambouncealot.net/wp-content/uploads/elementor/css/post-812.css?ver=1790757737' media='all' />
77<link rel='stylesheet' id='swiper-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/lib/swiper/v8/css/swiper.min.css?ver=8.4.5' media='all' />
78<link rel='stylesheet' id='e-swiper-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/css/conditionals/e-swiper.min.css?ver=4.3.2' media='all' />
79<link rel='stylesheet' id='widget-image-carousel-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/css/widget-image-carousel.min.css?ver=4.3.2' media='all' />
80<link rel='stylesheet' id='e-animation-wobble-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/lib/animations/styles/wobble.min.css?ver=4.3.2' media='all' />
81<link rel='stylesheet' id='e-animation-fadeInRight-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/lib/animations/styles/fadeInRight.min.css?ver=4.3.2' media='all' />
82<link rel='stylesheet' id='widget-icon-box-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/css/widget-icon-box.min.css?ver=4.3.2' media='all' />
83<link rel='stylesheet' id='e-shapes-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/css/conditionals/shapes.min.css?ver=4.3.2' media='all' />
84<link rel='stylesheet' id='e-motion-fx-css' href='https://ambouncealot.net/wp-content/plugins/elementor-pro/assets/css/modules/motion-fx.min.css?ver=4.2.2' media='all' />
85<link rel='stylesheet' id='e-animation-tada-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/lib/animations/styles/tada.min.css?ver=4.3.2' media='all' />
86<link rel='stylesheet' id='elementor-post-5840-css' href='https://ambouncealot.net/wp-content/uploads/elementor/css/post-5840.css?ver=1790757738' media='all' />
87<link rel='stylesheet' id='elementor-post-4254-css' href='https://ambouncealot.net/wp-content/uploads/elementor/css/post-4254.css?ver=1790757738' media='all' />
88<link rel='stylesheet' id='elementor-post-4256-css' href='https://ambouncealot.net/wp-content/uploads/elementor/css/post-4256.css?ver=1790757738' media='all' />
89<link rel='stylesheet' id='searchio-live-search-css' href='https://ambouncealot.net/wp-content/plugins/inflatableoffice/search_widget/assets/styles/style.css?ver=1.6.1' media='all' />
90<link rel='stylesheet' id='elementor-gf-local-playfairdisplay-css' href='https://ambouncealot.net/wp-content/uploads/elementor/google-fonts/css/playfairdisplay.css?ver=1747924691' media='all' />
91<link rel='stylesheet' id='elementor-gf-local-montserrat-css' href='https://ambouncealot.net/wp-content/uploads/elementor/google-fonts/css/montserrat.css?ver=1747924685' media='all' />
92<link rel='stylesheet' id='elementor-gf-local-roboto-css' href='https://ambouncealot.net/wp-content/uploads/elementor/google-fonts/css/roboto.css?ver=1747924700' media='all' />
93<link rel='stylesheet' id='elementor-gf-local-boogaloo-css' href='https://ambouncealot.net/wp-content/uploads/elementor/google-fonts/css/boogaloo.css?ver=1747924700' media='all' />
94<link rel='stylesheet' id='elementor-gf-archivoblack-css' href='https://fonts.googleapis.com/css?family=Archivo+Black:100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic&#038;display=auto' media='all' />
95<link rel='stylesheet' id='elementor-gf-local-londrinasolid-css' href='https://ambouncealot.net/wp-content/uploads/elementor/google-fonts/css/londrinasolid.css?ver=1747924700' media='all' />
96<link rel='stylesheet' id='elementor-icons-fa-regular-css' href='https://ambouncealot.net/wp-content/plugins/elementor/assets/lib/font-awesome/css/regular.min.css?ver=5.15.3' media='all' />
97<script id="jquery-core-js" src="https://ambouncealot.net/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
vendor: 1 bytes, line 97
97
98<script id="jquery-migrate-js" src="https://ambouncealot.net/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
vendor: 1 bytes, line 98
98
99<script id="simpleCart-js" src="https://ambouncealot.net/wp-content/plugins/inflatableoffice/simpleCart_v9.js?ver=7.1.2"></script>
vendor: 1 bytes, line 99
99
100<script id="timePicker-js" src="https://ambouncealot.net/wp-content/plugins/inflatableoffice/jquery.timepicker.1_8_1.js?ver=7.1.2"></script>
vendor: 1 bytes, line 100
100
101<script id="fancyBox-js" src="https://ambouncealot.net/wp-content/plugins/inflatableoffice/jquery.fancybox.js?ver=7.1.2"></script>
vendor: 1 bytes, line 101
101
102<script id="flickity-js" src="https://ambouncealot.net/wp-content/plugins/inflatableoffice/flickity.js?ver=7.1.2"></script>
vendor: 1 bytes, line 102
102
103<script id="widget-TentCalcJS-js" src="https://ambouncealot.net/wp-content/plugins/inflatableoffice/widget-TentCalculator.js?ver=7.1.2"></script>
vendor: 1 bytes, line 103
103
104<script id="io-scripts-js-extra">
105var io_scripts_vars = {"io_username":"ambouncealot","io_locationid":"0","io_phonenumber":"(856) 982-8917","io_emailaddress":"[email protected]","io_businesshours":"","io_facebooklink":"https://www.facebook.com/","io_twitterlink":"https://twitter.com/","io_instagramlink":"https://www.instagram.com/","io_youtubelink":"","io_fpnumber":"","io_companyname":"A&M Bounce A-Lot, LLC Bridgeton NJ"};
106//# sourceURL=io-scripts-js-extra
107</script>
vendor: 1 bytes, line 107
107
108<script id="io-scripts-js" src="https://ambouncealot.net/wp-content/themes/io-kenos/js/io-scripts.js?ver=7.1.2"></script>
108
109<link rel="https://api.w.org/" href="https://ambouncealot.net/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://ambouncealot.net/wp-json/wp/v2/pages/5840" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://ambouncealot.net/xmlrpc.php?rsd" />
110
111<link rel='shortlink' href='https://ambouncealot.net/' />
112<!-- HFCM by 99 Robots - Snippet # 3: GTM tag -->
113<!-- Google Tag Manager -->
114<script>
vendor: 331 bytes, lines 114-118
114(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
115new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
116j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
117'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
118})(window,document,'script','dataLayer','
118GTM-N8P724X4
vendor: 3 bytes, line 118
118');
118</script>
118
119<!-- End Google Tag Manager -->
120<!-- /end HFCM by 99 Robots -->
121<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 121-122
121
122<script async src="https://www.googletagmanager.com/gtag/js?id=
122AW-11161763363
vendor: 12 bytes, line 122
122"></script>
123<script>
124  
vendor: 134 bytes, lines 124-128
124window.dataLayer = window.dataLayer || [];
125  function gtag(){dataLayer.push(arguments);}
126  gtag('js', new Date());
127
128  gtag('config', '
128AW-11161763363
vendor: 4 bytes, line 128
128');
129</script>
129<!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 129-130
129
130<script async src="https://www.googletagmanager.com/gtag/js?id=
130AW-11161763363
vendor: 13 bytes, line 130
130"></script>
131<script>
132  
vendor: 138 bytes, lines 132-136
132window.dataLayer = window.dataLayer || [];
133  function gtag(){dataLayer.push(arguments);}
134  gtag('js', new Date());
135
136  gtag('config', '
136AW-11161763363
vendor: 5 bytes, line 136
136');
137</script>
137
138<meta name="google-site-verification" content="KBk6zl4SPL6-YpYNqQzfuireFejfZFFvgNHuBnO9fe0" /><meta name="ti-site-data" content="eyJyIjoiMTowITc6MCEzMDowIiwibyI6Imh0dHBzOlwvXC9hbWJvdW5jZWFsb3QubmV0P3RpLW9ubGluZS11c2Vycy1nb29nbGU9MSZhbXA7cD0lMkYmYW1wO193cG5vbmNlPTE0YjkxMzg3NzkifQ==" /><meta name="generator" content="Elementor 4.3.2; features: additional_custom_breakpoints; settings: css_print_method-external, google_font-enabled, font_display-auto">
139			<style>
140				.e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload),
141				.e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload) * {
142					background-image: none !important;
143				}
144				@media screen and (max-height: 1024px) {
145					.e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload),
146					.e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload) * {
147						background-image: none !important;
148					}
149				}
150				@media screen and (max-height: 640px) {
151					.e-con.e-parent:nth-of-type(n+2):not(.e-lazyloaded):not(.e-no-lazyload),
152					.e-con.e-parent:nth-of-type(n+2):not(.e-lazyloaded):not(.e-no-lazyload) * {
153						background-image: none !important;
154					}
155				}
156			</style>
157			
157<script id='pixel-script-poptin' src='https://cdn.popt.in/pixel.js?id=9e07c065cef21' async='true'></script>
157<script 
158  src="https://widgets.leadconnectorhq.com/loader.js"  
159  data-resources-url="https://widgets.leadconnectorhq.com/chat-widget/loader.js" 
160 data-widget-id="696805b463195c5b37a7adda"   > 
161 </script>
161<link rel="icon" href="https://ambouncealot.net/wp-content/uploads/2020/02/Website-Client-Logos-150x150.webp" sizes="32x32" />
162<link rel="icon" href="https://ambouncealot.net/wp-content/uploads/2020/02/Website-Client-Logos-300x300.webp" sizes="192x192" />
163<link rel="apple-touch-icon" href="https://ambouncealot.net/wp-content/uploads/2020/02/Website-Client-Logos-300x300.webp" />
164<meta name="msapplication-TileImage" content="https://ambouncealot.net/wp-content/uploads/2020/02/Website-Client-Logos-300x300.webp" />
165<style id="wp-custom-css">
166.grecaptcha-badge { visibility: hidden; }
167
168.search-submit{display:none;}
169
170.cartInfo{
171	display:none !important;
172}
173.io-footer-link a {
174color: var(--e-global-color-accent, orange);
175}
176
177.catDescriptionIO.catDescriptionIO_small.elementor-widget-text-editor {
178    padding: 10px;
179    font-size: small;
180    text-align: left;
181}
182
183.io_brand {
184    margin-bottom: 20px;
185}
186
187.io_phrase_2839981{display:block !important}
188</style>
189</head>
190<body class="home wp-singular page-template-default page page-id-5840 wp-custom-logo wp-theme-io-kenos mega-menu-max-mega-menu-4 mega-menu-max-mega-menu-5 mega-menu-max-mega-menu-6 mega-menu-max-mega-menu-7 mega-menu-max-mega-menu-8 mega-menu-max-mega-menu-9 mega-menu-max-mega-menu-10 elementor-default elementor-kit-812 elementor-page elementor-page-5840">
191
192		<header data-elementor-type="header" data-elementor-id="4254" class="elementor elementor-4254 elementor-location-header" data-elementor-post-type="elementor_library">
193					<section class="elementor-section elementor-top-section elementor-element elementor-element-f2217b4 elementor-section-full_width io_header elementor-section-height-default elementor-section-height-default" data-id="f2217b4" data-element_type="section" data-e-type="section" data-settings="{&quot;background_background&quot;:&quot;gradient&quot;}">
194							<div class="elementor-background-overlay"></div>
195							<div class="elementor-container elementor-column-gap-default">
196					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ea8d589" data-id="ea8d589" data-element_type="column" data-e-type="column">
197			<div class="elementor-widget-wrap elementor-element-populated">
198						<section class="elementor-section elementor-inner-section elementor-element elementor-element-d673499 elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="d673499" data-element_type="section" data-e-type="section">
199						<div class="elementor-container elementor-column-gap-no">
200					<div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-ce1533e" data-id="ce1533e" data-element_type="column" data-e-type="column">
201			<div class="elementor-widget-wrap elementor-element-populated">
202						<div class="elementor-element elementor-element-1389b5f elementor-mobile-align-center elementor-align-center elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list" data-id="1389b5f" data-element_type="widget" data-e-type="widget" data-widget_type="icon-list.default">
203				<div class="elementor-widget-container">
204							<ul class="elementor-icon-list-items">
205							<li class="elementor-icon-list-item">
206											<a href="tel:(856)%20982-8917">
207
208												<span class="elementor-icon-list-icon">
209							<i aria-hidden="true" class="fas fa-phone-alt"></i>						</span>
210										<span class="elementor-icon-list-text">(856) 982-8917</span>
211											</a>
212									</li>
213								<li class="elementor-icon-list-item">
214											<a href="mailto:[email protected]">
215
216												<span class="elementor-icon-list-icon">
217							<i aria-hidden="true" class="fas fa-envelope"></i>						</span>
218										<span class="elementor-icon-list-text">[email protected]</span>
219											</a>
220									</li>
221						</ul>
222						</div>
223				</div>
224					</div>
225		</div>
226				<div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-418a14b" data-id="418a14b" data-element_type="column" data-e-type="column">
227			<div class="elementor-widget-wrap elementor-element-populated">
228						<div class="elementor-element elementor-element-8f055e0 elementor-widget-mobile__width-inherit elementor-widget__width-initial elementor-widget elementor-widget-theme-site-logo elementor-widget-image" data-id="8f055e0" data-element_type="widget" data-e-type="widget" data-widget_type="theme-site-logo.default">
229				<div class="elementor-widget-container">
230											<a href="https://ambouncealot.net">
231			<img width="1024" height="1024" src="https://ambouncealot.net/wp-content/uploads/2020/02/Website-Client-Logos.webp" class="elementor-animation-grow attachment-large size-large wp-image-5876" alt="" srcset="https://ambouncealot.net/wp-content/uploads/2020/02/Website-Client-Logos.webp 1024w, https://ambouncealot.net/wp-content/uploads/2020/02/Website-Client-Logos-300x300.webp 300w, https://ambouncealot.net/wp-content/uploads/2020/02/Website-Client-Logos-150x150.webp 150w, https://ambouncealot.net/wp-content/uploads/2020/02/Website-Client-Logos-768x768.webp 768w" sizes="(max-width: 1024px) 100vw, 1024px" />				</a>
232											</div>
233				</div>
234					</div>
235		</div>
236				<div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-33526ff elementor-hidden-mobile" data-id="33526ff" data-element_type="column" data-e-type="column">
237			<div class="elementor-widget-wrap elementor-element-populated">
238						<div class="elementor-element elementor-element-425f69f elementor-search-form--skin-classic elementor-search-form--button-type-icon elementor-search-form--icon-search elementor-widget elementor-widget-search-form" data-id="425f69f" data-element_type="widget" data-e-type="widget" data-settings="{&quot;skin&quot;:&quot;classic&quot;}" data-widget_type="search-form.default">
239				<div class="elementor-widget-container">
240							<search role="search">
241			<form class="elementor-search-form" action="https://ambouncealot.net" method="get">
242												<div class="elementor-search-form__container">
243					<label class="elementor-screen-only" for="elementor-search-form-425f69f">Search</label>
244
245					
246					<input id="elementor-search-form-425f69f" placeholder="Search..." class="elementor-search-form__input" type="search" name="s" value="">
247					
248											<button class="elementor-search-form__submit" type="submit" aria-label="Search">
249															<i aria-hidden="true" class="fas fa-search"></i>													</button>
250					
251									</div>
252			</form>
253		</search>
254						</div>
255				</div>
256					</div>
257		</div>
258					</div>
259		</section>
260				<section class="elementor-section elementor-inner-section elementor-element elementor-element-942073c elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="942073c" data-element_type="section" data-e-type="section" data-settings="{&quot;background_background&quot;:&quot;gradient&quot;,&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;],&quot;sticky_offset&quot;:0,&quot;sticky_effects_offset&quot;:0,&quot;sticky_anchor_link_offset&quot;:0}">
261						<div class="elementor-container elementor-column-gap-default">
262					<div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-ab829ec" data-id="ab829ec" data-element_type="column" data-e-type="column">
263			<div class="elementor-widget-wrap elementor-element-populated">
264						<div class="elementor-element elementor-element-7e4b631 elementor-nav-menu__align-center elementor-nav-menu--stretch elementor-widget-mobile__width-auto elementor-widget__width-initial elementor-nav-menu--dropdown-tablet elementor-nav-menu__text-align-aside elementor-nav-menu--toggle elementor-nav-menu--burger elementor-widget elementor-widget-nav-menu" data-id="7e4b631" data-element_type="widget" data-e-type="widget" data-settings="{&quot;full_width&quot;:&quot;stretch&quot;,&quot;layout&quot;:&quot;horizontal&quot;,&quot;submenu_icon&quot;:{&quot;value&quot;:&quot;&lt;i class=\&quot;fas fa-caret-down\&quot; aria-hidden=\&quot;true\&quot;&gt;&lt;\/i&gt;&quot;,&quot;library&quot;:&quot;fa-solid&quot;},&quot;toggle&quot;:&quot;burger&quot;}" data-widget_type="nav-menu.default">
265				<div class="elementor-widget-container">
266								<nav aria-label="Menu" class="elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-horizontal e--pointer-underline e--animation-fade">
267				<ul id="menu-1-7e4b631" class="elementor-nav-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6347"><a href="https://ambouncealot.net/rentals/moonwalks-bounce-houses/" class="elementor-item">Bounce Houses</a></li>
268<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6341"><a href="https://ambouncealot.net/rentals/water-rides/" class="elementor-item">Water Slides</a></li>
269<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6343"><a href="https://ambouncealot.net/rentals/slides-combos/" class="elementor-item">Bounce House w/ Slide Rentals</a></li>
270<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6349"><a href="https://ambouncealot.net/rentals/obstacle-courses/" class="elementor-item">Obstacle Courses</a></li>
271<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6361"><a href="https://ambouncealot.net/rentals/trackless-train/" class="elementor-item">Trackless Train</a></li>
272<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6363"><a href="https://ambouncealot.net/rentals/mechanical-bull/mechanical-bull/" class="elementor-item">Mechanical Bull</a></li>
273<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-7111"><a href="https://ambouncealot.net/rentals/games/" class="elementor-item">Games</a></li>
274<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-7113"><a href="https://ambouncealot.net/rentals/tents/" class="elementor-item">Tents</a></li>
275<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3685"><a href="https://ambouncealot.net/rentals/" class="elementor-item">Other Rentals</a></li>
276<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-3684"><a href="https://ambouncealot.net/about-us/" class="elementor-item">About Us<span class="sub-arrow"><i class="fas fa-caret-down" aria-hidden="true"></i></span></a>
277<ul class="sub-menu elementor-nav-menu--dropdown">
278	<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3683"><a href="https://ambouncealot.net/faqs/" class="elementor-sub-item">FAQs</a></li>
279	<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3680"><a href="https://ambouncealot.net/contact-us/" class="elementor-sub-item">Contact Us</a></li>
280	<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3682"><a href="https://ambouncealot.net/employment/" class="elementor-sub-item">Employment</a></li>
281</ul>
282</li>
283<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-7707"><a href="https://ambouncealot.net/deals/" class="elementor-item">Deals</a></li>
284<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-7717"><a href="https://ambouncealot.net/terms-and-conditions/" class="elementor-item">Terms and Conditions</a></li>
285</ul>			</nav>
286					<div class="elementor-menu-toggle" role="button" tabindex="0" aria-label="Menu Toggle" aria-expanded="false">
287			<i aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--open eicon-menu-bar"></i><i aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--close eicon-close"></i>		</div>
288					<nav class="elementor-nav-menu--dropdown elementor-nav-menu__container" aria-hidden="true">
289				<ul id="menu-2-7e4b631" class="elementor-nav-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6347"><a href="https://ambouncealot.net/rentals/moonwalks-bounce-houses/" class="elementor-item" tabindex="-1">Bounce Houses</a></li>
290<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6341"><a href="https://ambouncealot.net/rentals/water-rides/" class="elementor-item" tabindex="-1">Water Slides</a></li>
291<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6343"><a href="https://ambouncealot.net/rentals/slides-combos/" class="elementor-item" tabindex="-1">Bounce House w/ Slide Rentals</a></li>
292<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6349"><a href="https://ambouncealot.net/rentals/obstacle-courses/" class="elementor-item" tabindex="-1">Obstacle Courses</a></li>
293<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6361"><a href="https://ambouncealot.net/rentals/trackless-train/" class="elementor-item" tabindex="-1">Trackless Train</a></li>
294<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6363"><a href="https://ambouncealot.net/rentals/mechanical-bull/mechanical-bull/" class="elementor-item" tabindex="-1">Mechanical Bull</a></li>
295<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-7111"><a href="https://ambouncealot.net/rentals/games/" class="elementor-item" tabindex="-1">Games</a></li>
296<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-7113"><a href="https://ambouncealot.net/rentals/tents/" class="elementor-item" tabindex="-1">Tents</a></li>
297<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3685"><a href="https://ambouncealot.net/rentals/" class="elementor-item" tabindex="-1">Other Rentals</a></li>
298<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-3684"><a href="https://ambouncealot.net/about-us/" class="elementor-item" tabindex="-1">About Us<span class="sub-arrow"><i class="fas fa-caret-down" aria-hidden="true"></i></span></a>
299<ul class="sub-menu elementor-nav-menu--dropdown">
300	<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3683"><a href="https://ambouncealot.net/faqs/" class="elementor-sub-item" tabindex="-1">FAQs</a></li>
301	<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3680"><a href="https://ambouncealot.net/contact-us/" class="elementor-sub-item" tabindex="-1">Contact Us</a></li>
302	<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3682"><a href="https://ambouncealot.net/employment/" class="elementor-sub-item" tabindex="-1">Employment</a></li>
303</ul>
304</li>
305<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-7707"><a href="https://ambouncealot.net/deals/" class="elementor-item" tabindex="-1">Deals</a></li>
306<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-7717"><a href="https://ambouncealot.net/terms-and-conditions/" class="elementor-item" tabindex="-1">Terms and Conditions</a></li>
307</ul>			</nav>
308						</div>
309				</div>
310					</div>
311		</div>
312				<div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-1a93ff9" data-id="1a93ff9" data-element_type="column" data-e-type="column" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
313			<div class="elementor-widget-wrap elementor-element-populated">
314						<div class="elementor-element elementor-element-664c1e6 elementor-mobile-align-center elementor-widget elementor-widget-button" data-id="664c1e6" data-element_type="widget" data-e-type="widget" data-widget_type="button.default">
315				<div class="elementor-widget-container">
316									<div class="elementor-button-wrapper">
317					<a class="elementor-button elementor-button-link elementor-size-sm elementor-animation-grow" href="https://ambouncealot.net/io_quoteform/">
318						<span class="elementor-button-content-wrapper">
319									<span class="elementor-button-text">Book Now</span>
320					</span>
321					</a>
322				</div>
323								</div>
324				</div>
325					</div>
326		</div>
327				<div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-5a085ec" data-id="5a085ec" data-element_type="column" data-e-type="column" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
328			<div class="elementor-widget-wrap elementor-element-populated">
329						<div class="elementor-element elementor-element-0513ba5 ioCart elementor-widget__width-inherit elementor-view-default elementor-widget elementor-widget-icon" data-id="0513ba5" data-element_type="widget" data-e-type="widget" data-widget_type="icon.default">
330				<div class="elementor-widget-container">
331							<div class="elementor-icon-wrapper">
332			<div class="elementor-icon">
333			<i aria-hidden="true" class="fas fa-shopping-cart"></i>			</div>
334		</div>
335						</div>
336				</div>
337					</div>
338		</div>
339					</div>
340		</section>
341					</div>
342		</div>
343					</div>
344		</section>
345				</header>
346		
347    <main id="main" class="site-main" role="main">
348
349        <header class="page-header io_phshow">
350            <div class ="elementor-widget-heading">
351                            </div>
352        </header>
353
354        <div class="page-content">
355            		<div data-elementor-type="wp-page" data-elementor-id="5840" class="elementor elementor-5840" data-elementor-post-type="page">
356						<section class="elementor-section elementor-top-section elementor-element elementor-element-ff4735d elementor-section-full_width elementor-section-height-min-height elementor-section-items-top elementor-section-content-top elementor-section-height-default" data-id="ff4735d" data-element_type="section" data-e-type="section" data-settings="{&quot;background_background&quot;:&quot;slideshow&quot;,&quot;background_slideshow_slide_duration&quot;:1500,&quot;background_slideshow_gallery&quot;:[{&quot;id&quot;:11509,&quot;url&quot;:&quot;https:\/\/ambouncealot.net\/wp-content\/uploads\/2026\/04\/Banner-1_AM.png&quot;},{&quot;id&quot;:11511,&quot;url&quot;:&quot;https:\/\/ambouncealot.net\/wp-content\/uploads\/2026\/04\/Banner-2_AM.png&quot;},{&quot;id&quot;:11561,&quot;url&quot;:&quot;https:\/\/ambouncealot.net\/wp-content\/uploads\/2026\/04\/Banner-5_AM.png&quot;}],&quot;background_slideshow_loop&quot;:&quot;yes&quot;,&quot;background_slideshow_slide_transition&quot;:&quot;fade&quot;,&quot;background_slideshow_transition_duration&quot;:500}">
357						<div class="elementor-container elementor-column-gap-default">
358					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-250604b" data-id="250604b" data-element_type="column" data-e-type="column">
359			<div class="elementor-widget-wrap elementor-element-populated">
360						<div class="elementor-element elementor-element-0a36497 elementor-widget elementor-widget-image" data-id="0a36497" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
361				<div class="elementor-widget-container">
362															<img fetchpriority="high" decoding="async" width="1004" height="336" src="https://ambouncealot.net/wp-content/uploads/2026/04/Copy-of-Michael-Bermudez-Carou
362sel.png" class="attachment-full size-full wp-image-11597" alt="Copy of Michael Bermudez Carousel Home" srcset="https://ambouncealot.net/wp-content/uploads/2026/04/Copy-of-Michael-Bermudez-Carousel.png 1004w, https://ambouncealot.net/wp-content/uploads/2026/04/Copy-of-Michael-Bermudez-Carousel-300x100.png 300w, https://ambouncealot.net/wp-content/uploads/2026/04/Copy-of-Michael-Bermudez-Carousel-768x257.png 768w" sizes="(max-width: 1004px) 100vw, 1004px">															</div>
363				</div>
364					</div>
365		</div>
366					</div>
367		</section>
368				<section class="elementor-section elementor-top-section elementor-element elementor-element-cac275e elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="cac275e" data-element_type="section" data-e-type="section" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
369						<div class="elementor-container elementor-column-gap-default">
370					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0d4e80b" data-id="0d4e80b" data-element_type="column" data-e-type="column">
371			<div class="elementor-widget-wrap elementor-element-populated">
372						<div class="elementor-element elementor-element-7be3991 elementor-mobile-align-center elementor-align-center e-transform elementor-widget elementor-widget-button" data-id="7be3991" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_transform_scale_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1.3,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}" data-widget_type="button.default">
373				<div class="elementor-widget-container">
374									<div class="elementor-button-wrapper">
375					<a class="elementor-button elementor-button-link elementor-size-sm elementor-animation-grow" href="https://ambouncealot.net/coupon-form/">
376						<span class="elementor-button-content-wrapper">
377									<span class="elementor-button-text">Check for Coupons</span>
378					</span>
379					</a>
380				</div>
381								</div>
382				</div>
383					</div>
384		</div>
385					</div>
386		</section>
387				<section class="elementor-section elementor-top-section elementor-element elementor-element-c851f34 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="c851f34" data-element_type="section" data-e-type="section" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
388						<div class="elementor-container elementor-column-gap-default">
389					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d1589ba" data-id="d1589ba" data-element_type="column" data-e-type="column">
390			<div class="elementor-widget-wrap elementor-element-populated">
391						<div class="elementor-element elementor-element-7c602ac elementor-arrows-position-inside elementor-pagination-position-outside elementor-widget elementor-widget-image-carousel" data-id="7c602ac" data-element_type="widget" data-e-type="widget" data-settings="{&quot;slides_to_show&quot;:&quot;5&quot;,&quot;autoplay_speed&quot;:3000,&quot;speed&quot;:1500,&quot;slides_to_show_mobile&quot;:&quot;3&quot;,&quot;navigation&quot;:&quot;both&quot;,&quot;autoplay&quot;:&quot;yes&quot;,&quot;infinite&quot;:&quot;yes&quot;,&quot;image_spacing_custom&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:20,&quot;sizes&quot;:[]},&quot;image_spacing_custom_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;image_spacing_custom_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}" data-widget_type="image-carousel.default">
392				<div class="elementor-widget-container">
393							<div class="elementor-image-carousel-wrapper swiper" role="region" aria-roledescription="carousel" aria-label="Image Carousel" dir="ltr">
394			<div class="elementor-image-carousel swiper-wrapper" aria-live="off">
395								<div class="swiper-slide" role="group" aria-roledescription="slide" aria-label="1 of 8"><figure class="swiper-slide-inner"><img decoding="async" class="swiper-slide-image" src="https://ambouncealot.net/wp-content/uploads/2025/05/1-1.png" alt="1-1.png" /></figure></div><div class="swiper-slide" role="group" aria-roledescription="slide" aria-label="2 of 8"><figure class="swiper-slide-inner"><img decoding="async" class="swiper-slide-image" src="https://ambouncealot.net/wp-content/uploads/2025/05/2-2.png" alt="2-2.png" /></figure></div><div class="swiper-slide" role="group" aria-roledescription="slide" aria-label="3 of 8"><figure class="swiper-slide-inner"><img decoding="async" class="swiper-slide-image" src="https://ambouncealot.net/wp-content/uploads/2025/05/3-2.png" alt="3-2.png" /></figure></div><div class="swiper-slide" role="group" aria-roledescription="slide" aria-label="4 of 8"><figure class="swiper-slide-inner"><img decoding="async" class="swiper-slide-image" src="https://ambouncealot.net/wp-content/uploads/2025/05/4-2.png" alt="4-2.png" /></figure></div><div class="swiper-slide" role="group" aria-roledescription="slide" aria-label="5 of 8"><figure class="swiper-slide-inner"><img decoding="async" class="swiper-slide-image" src="https://ambouncealot.net/wp-content/uploads/2025/05/5.png" alt="5.png" /></figure></div><div class="swiper-slide" role="group" aria-roledescription="slide" aria-label="6 of 8"><figure class="swiper-slide-inner"><img decoding="async" class="swiper-slide-image" src="https://ambouncealot.net/wp-content/uploads/2025/05/6.png" alt="6.png" /></figure></div><div class="swiper-slide" role="group" aria-roledescription="slide" aria-label="7 of 8"><figure class="swiper-slide-inner"><img decoding="async" class="swiper-slide-image" src="https://ambouncealot.net/wp-content/uploads/2025/05/6-1.png" alt="6.png" /></figure></div><div class="swiper-slide" role="group" aria-roledescription="slide" aria-label="8 of 8"><figure class="swiper-slide-inner"><img decoding="async" class="swiper-slide-image" src="https://ambouncealot.net/wp-content/uploads/2025/05/2-3.png" alt="2-3.png" /></figure></div>			</div>
396												<div class="elementor-swiper-button elementor-swiper-button-prev" role="button" tabindex="0">
397						<i aria-hidden="true" class="eicon-chevron-left"></i>					</div>
398					<div class="elementor-swiper-button elementor-swiper-button-next" role="button" tabindex="0">
399						<i aria-hidden="true" class="eicon-chevron-right"></i>					</div>
400				
401									<div class="swiper-pagination"></div>
402									</div>
403						</div>
404				</div>
405					</div>
406		</div>
407					</div>
408		</section>
409				<section class="elementor-section elementor-top-section elementor-element elementor-element-72d56de elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="72d56de" data-element_type="section" data-e-type="section" data-settings="{&quot;background_background&quot;:&quot;gradient&quot;}">
410						<div class="elementor-container elementor-column-gap-default">
411					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-835eee1" data-id="835eee1" data-element_type="column" data-e-type="column">
412			<div class="elementor-widget-wrap elementor-element-populated">
413						<div class="elementor-element elementor-element-2417e3a elementor-invisible elementor-widget elementor-widget-heading" data-id="2417e3a" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;wobble&quot;,&quot;_animation_delay&quot;:300}" data-widget_type="heading.default">
414				<div class="elementor-widget-container">
415					<span class="elementor-heading-title elementor-size-default">welcome to the best</span>				</div>
416				</div>
417				<div class="elementor-element elementor-element-bfd8537 elementor-invisible elementor-widget elementor-widget-heading" data-id="bfd8537" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;wobble&quot;,&quot;_animation_delay&quot;:300}" data-widget_type="heading.default">
418				<div class="elementor-widget-container">
419					<h1 class="elementor-heading-title elementor-size-default">New Jersey Bounce House Rentals</h1>				</div>
420				</div>
421				<div class="elementor-element elementor-element-1e27ffc elementor-invisible elementor-widget elementor-widget-heading" data-id="1e27ffc" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;wobble&quot;,&quot;_animation_delay&quot;:300}" data-widget_type="heading.default">
422				<div class="elementor-widget-container">
423					<h2 class="elementor-heading-title elementor-size-default">What Our Customers Say...</h2>				</div>
424				</div>
425				<div class="elementor-element elementor-element-6eb09f9 elementor-widget elementor-widget-html" data-id="6eb09f9" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
426				<div class="elementor-widget-container">
427					<!-- Elfsight Google Reviews | Michael Bermudez -->
428<script src="https://static.elfsight.com/platform/platform.js" async></script>
428
429<div class="elfsight-app-9da97552-a747-4466-bf18-64bcaf0d0af2" data-elfsight-app-lazy></div>				</div>
430				</div>
431					</div>
432		</div>
433					</div>
434		</section>
435				<section class="elementor-section elementor-top-section elementor-element elementor-element-590a377 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="590a377" data-element_type="section" data-e-type="section">
436						<div class="elementor-container elementor-column-gap-default">
437					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0f681fb io_widget_home" data-id="0f681fb" data-element_type="column" data-e-type="column">
438			<div class="elementor-widget-wrap elementor-element-populated">
439						<div class="elementor-element elementor-element-99d8679 elementor-invisible elementor-widget elementor-widget-heading" data-id="99d8679" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;wobble&quot;,&quot;_animation_delay&quot;:300}" data-widget_type="heading.default">
440				<div class="elementor-widget-container">
441					<h2 class="elementor-heading-title elementor-size-default">OUR RENTALS</h2>				</div>
442				</div>
443				<div class="elementor-element elementor-element-2791436 elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-wp-widget-widget_featured" data-id="2791436" data-element_type="widget" data-e-type="widget" data-widget_type="wp-widget-widget_featured.default">
444				<div class="elementor-widget-container">
445					<div class="widget-text wp_widget_plugin_box panel-grid panel-has-style" style="margin-top:0px;">
445<script>
446              jQuery(document).ready(function(){
447                  jQuery('.io_mm_item .io_item2_list').css('box-shadow', 'none')
448                  jQuery('.io_mm_item .io_item2_list').addClass('nohover')
449
450                  jQuery('.io_mm_item .io_item2_listcat').css('box-shadow', 'none')
451                  jQuery('.io_mm_item .io_item2_listcat').addClass('nohover')
452              })
453             </script>
453<div class="io_mm_outer io_widget_33996 " style="grid-template-columns:repeat(3, calc((100% - 30px)/3)); display:grid;"><style>.io_widget_33996 .io_item2_list_inner .rentNameIO_button {display:none !important;} .io_widget_33996 .io_item2_list_inner .rentNameIO_price {display:none !important;} .io_widget_33996 .io_item2_list .view-product-button {display:none !important;} .io_widget_33996 .io_item2_listcat .view-product-button {display:none !important;} .io_widget_33996 .io_item2_listcat .catDescriptionIO {display:none;} </style>
454
455                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Mini_Golf_Rentals" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/mini-golf-rentals/">
456                                    <div class="cat_div">
457                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
458                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2026/03/Captura20de20pantalla202026-03-0420a20las201.08.06p.m._17726.png" alt="Mini Golf Rentals"
459                                             title="Mini Golf Rentals" style="">
460                                    </div>
461                                </a>
462                                <div class="io_item2_list_inner io_mm_title">
463                                <a href="https://ambouncealot.net/rentals/mini-golf-rentals/"><p class="elementor-heading-title rentNameIO item_name">Mini Golf Rentals</p></a>
464                                </div>
465                            </div>                    
466
467                    
468
469                    
470
471                    
472
473                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Bounce_House_Rentals" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/moonwalks-bounce-houses/">
474                                    <div class="cat_div">
475                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
476                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2025/06/Untitled20design2039_1747869569_big.png" alt="Bounce House Rentals"
477                                             title="Bounce House Rentals" style="">
478                                    </div>
479                                </a>
480                                <div class="io_item2_list_inner io_mm_title">
481                                <a href="https://ambouncealot.net/rentals/moonwalks-bounce-houses/"><p class="elementor-heading-title rentNameIO item_name">Bounce House Rentals</p></a>
482                                </div>
483                            </div>                    
484
485                    
486
487                    
488
489                    
490
491                    
492
493                    
494
495                    
496
497                    
498
499                    
500
501                    
502
503                    
504
505                    
506
507                    
508
509                    
510
511                    
512
513                    
514
515                    
516
517                    
518
519                    
520
521                    
522
523                    
524
525                    
526
527                    
528
529                    
530
531                    
532
533                    
534
535                    
536
537                    
538
539                    
540
541                    
542
543                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Obstacle_Course_Rentals" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/obstacle-courses/">
544                                    <div class="cat_div">
545                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
546                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2026/01/IMG_4728_610561141_1747870452_big_1767371239_big.png" alt="Obstacle Course Rentals"
547                                             title="Obstacle Course Rentals" style="">
548                                    </div>
549                                </a>
550                                <div class="io_item2_list_inner io_mm_title">
551                                <a href="https://ambouncealot.net/rentals/obstacle-courses/"><p class="elementor-heading-title rentNameIO item_name">Obstacle Course Rentals</p></a>
552                                </div>
553                            </div>                    
554
555                    
556
557                    
558
559                    
560
561                    
562
563                    
564
565                    
566
567                    
568
569                    
570
571                    
572
573                    
574
575                    
576
577                    
578
579                    
580
581                    
582
583                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Water_Slide_Rentals" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/water-rides/">
584                                    <div class="cat_div">
585                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
586                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2025/07/18-ft-Fire-blaster-Tsunami-Water-slidepool_1747866564_1747869598_b.png" alt="Water Slide Rentals"
587                                             title="Water Slide Rentals" style="">
588                                    </div>
589                                </a>
590                                <div class="io_item2_list_inner io_mm_title">
591                                <a href="https://ambouncealot.net/rentals/water-rides/"><p class="elementor-heading-title rentNameIO item_name">Water Slide Rentals</p></a>
592                                </div>
593                            </div>                    
594
595                    
596
597                    
598
599                    
600
601                    
602
603                    
604
605                    
606
607                    
608
609                    
610
611                    
612
613                    
614
615                    
616
617                    
618
619                    
620
621                    
622
623                    
624
625                    
626
627                    
628
629                    
630
631                    
632
633                    
634
635                    
636
637                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Bounce_House_w_Slide_Rentals" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/slides-combos/">
638                                    <div class="cat_div">
639                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
640                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2025/07/Untitled20design2039_1747869692_big.png" alt="Bounce House w/ Slide Rentals"
641                                             title="Bounce House w/ Slide Rentals" style="">
642                                    </div>
643                                </a>
644                                <div class="io_item2_list_inner io_mm_title">
645                                <a href="https://ambouncealot.net/rentals/slides-combos/"><p class="elementor-heading-title rentNameIO item_name">Bounce House w/ Slide Rentals</p></a>
646                                </div>
647                            </div>                    
648
649                    
650
651                    
652
653                    
654
655                    
656
657                    
658
659                    
660
661                    
662
663                    
664
665                    
666
667                    
668
669                    
670
671                    
672
673                    
674
675                    
676
677                    
678
679                    
680
681                    
682
683                    
684
685                    
686
687                    
688
689                    
690
691                    
692
693                    
694
695                    
696
697                    
698
699                    
700
701                    
702
703                    
704
705                    
706
707                    
708
709                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_MECHANICAL_BULL" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/mechanical-bull/">
710                                    <div class="cat_div">
711                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
712                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2025/05/Mechanical-bull-_1747868079_big-12.jpg" alt="MECHANICAL BULL"
713                                             title="MECHANICAL BULL" style="">
714                                    </div>
715                                </a>
716                                <div class="io_item2_list_inner io_mm_title">
717                                <a href="https://ambouncealot.net/rentals/mechanical-bull/"><p class="elementor-heading-title rentNameIO item_name">MECHANICAL BULL</p></a>
718                                </div>
719                            </div>                    
720
721                    
722
723                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Trackless_Train" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/trackless-train/">
724                                    <div class="cat_div">
725                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
726                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2025/05/trackless-train_1747868882_big-3.jpg" alt="Trackless Train"
727                                             title="Trackless Train" style="">
728                                    </div>
729                                </a>
730                                <div class="io_item2_list_inner io_mm_title">
731                                <a href="https://ambouncealot.net/rentals/trackless-train/"><p class="elementor-heading-title rentNameIO item_name">Trackless Train</p></a>
732                                </div>
733                            </div>                    
734
735                    
736
737                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Foam_Machine" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/foam-machine/">
738                                    <div class="cat_div">
739                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
740                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2025/05/foam-machine_1747870216_big-11.png" alt="Foam Machine"
741                                             title="Foam Machine" style="">
742                                    </div>
743                                </a>
744                                <div class="io_item2_list_inner io_mm_title">
745                                <a href="https://ambouncealot.net/rentals/foam-machine/"><p class="elementor-heading-title rentNameIO item_name">Foam Machine</p></a>
746                                </div>
747                            </div>                    
748
749                    
750
751                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Games" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/games/">
752                                    <div class="cat_div">
753                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
754                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2025/06/Double-Axe-Throw-Inflatable-Game_1747869882_big-3.jpg" alt="Games"
755                                             title="Games" style="">
756                                    </div>
757                                </a>
758                                <div class="io_item2_list_inner io_mm_title">
759                                <a href="https://ambouncealot.net/rentals/games/"><p class="elementor-heading-title rentNameIO item_name">Games</p></a>
760                                </div>
761                            </div>                    
762
763                    
764
765                    
766
767                    
768
769                    
770
771                    
772
773                    
774
775                    
776
777                    
778
779                    
780
781                    
782
783                    
784
785                    
786
787                    
788
789                    
790
791                    
792
793                    
794
795                    
796
797                    
798
799                    
800
801                    
802
803                    
804
805                    
806
807                    
808
809                    
810
811                    
812
813                    
814
815                    
816
817                    
818
819                    
820
821                    
822
823                    
824
825                    
826
827                    
828
829                    
830
831                    
832
833                    
834
835                    
836
837                    
838
839                    
840
841                    
842
843                    
844
845                    
846
847                    
848
849                    
850
851                    
852
853                    
854
855                    
856
857                    
858
859                    
860
861                    
862
863                    
864
865                    
866
867                    
868
869                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_C
869oncessions" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/concessions/">
870                                    <div class="cat_div">
871                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
872                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2026/01/sno-kones_720534_big.jpg" alt="Concessions"
873                                             title="Concessions" style="">
874                                    </div>
875                                </a>
876                                <div class="io_item2_list_inner io_mm_title">
877                                <a href="https://ambouncealot.net/rentals/concessions/"><p class="elementor-heading-title rentNameIO item_name">Concessions</p></a>
878                                </div>
879                            </div>                    
880
881                    
882
883                    
884
885                    
886
887                    
888
889                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Equipment" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/equipment/">
890                                    <div class="cat_div">
891                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
892                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2026/01/generator2_666957_big.jpg" alt="Equipment"
893                                             title="Equipment" style="">
894                                    </div>
895                                </a>
896                                <div class="io_item2_list_inner io_mm_title">
897                                <a href="https://ambouncealot.net/rentals/equipment/"><p class="elementor-heading-title rentNameIO item_name">Equipment</p></a>
898                                </div>
899                            </div>                    
900
901                    
902
903                    
904
905                    
906
907                    
908
909                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Tents" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/tents/">
910                                    <div class="cat_div">
911                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
912                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2025/05/IMG_9287_1748484354_big.jpeg" alt="Tents"
913                                             title="Tents" style="">
914                                    </div>
915                                </a>
916                                <div class="io_item2_list_inner io_mm_title">
917                                <a href="https://ambouncealot.net/rentals/tents/"><p class="elementor-heading-title rentNameIO item_name">Tents</p></a>
918                                </div>
919                            </div>                    
920
921                    
922
923                    
924
925                    
926
927                    
928
929                    
930
931                    
932
933                    
934
935                    
936
937                    
938
939                    
940
941                    </div></div><style> .io_mm_item .io_item2_list, .io_mm_item .io_item2_listcat, .io_mm_item .io_item2_listrent { margin-bottom: 0px !important; }</style>				</div>
942				</div>
943				<div class="elementor-element elementor-element-6757a16 elementor-hidden-desktop elementor-widget elementor-widget-wp-widget-widget_featured" data-id="6757a16" data-element_type="widget" data-e-type="widget" data-widget_type="wp-widget-widget_featured.default">
944				<div class="elementor-widget-container">
945					<div class="widget-text wp_widget_plugin_box panel-grid panel-has-style" style="margin-top:0px;">
945<script>
946              jQuery(document).ready(function(){
947                  jQuery('.io_mm_item .io_item2_list').css('box-shadow', 'none')
948                  jQuery('.io_mm_item .io_item2_list').addClass('nohover')
949
950                  jQuery('.io_mm_item .io_item2_listcat').css('box-shadow', 'none')
951                  jQuery('.io_mm_item .io_item2_listcat').addClass('nohover')
952              })
953             </script>
953<div class="io_mm_outer io_widget_33996 " style="grid-template-columns:repeat(1, calc((100% - 0px)/1)); display:grid;"><style>.io_widget_33996 .io_item2_list_inner .rentNameIO_button {display:none !important;} .io_widget_33996 .io_item2_list_inner .rentNameIO_price {display:none !important;} .io_widget_33996 .io_item2_list .view-product-button {display:none !important;} .io_widget_33996 .io_item2_listcat .view-product-button {display:none !important;} .io_widget_33996 .io_item2_listcat .catDescriptionIO {display:none;} </style>
954
955                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Bounce_House_Rentals" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/moonwalks-bounce-houses/">
956                                    <div class="cat_div">
957                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
958                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2025/06/Untitled20design2039_1747869569_big.png" alt="Bounce House Rentals"
959                                             title="Bounce House Rentals" style="">
960                                    </div>
961                                </a>
962                                <div class="io_item2_list_inner io_mm_title">
963                                <a href="https://ambouncealot.net/rentals/moonwalks-bounce-houses/"><p class="elementor-heading-title rentNameIO item_name">Bounce House Rentals</p></a>
964                                </div>
965                            </div>                    
966
967                    
968
969                    
970
971                    
972
973                    
974
975                    
976
977                    
978
979                    
980
981                    
982
983                    
984
985                    
986
987                    
988
989                    
990
991                    
992
993                    
994
995                    
996
997                    
998
999                    
1000
1001                    
1002
1003                    
1004
1005                    
1006
1007                    
1008
1009                    
1010
1011                    
1012
1013                    
1014
1015                    
1016
1017                    
1018
1019                    
1020
1021                    
1022
1023                    
1024
1025                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Obstacle_Course_Rentals" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/obstacle-courses/">
1026                                    <div class="cat_div">
1027                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
1028                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2026/01/IMG_4728_610561141_1747870452_big_1767371239_big.png" alt="Obstacle Course Rentals"
1029                                             title="Obstacle Course Rentals" style="">
1030                                    </div>
1031                                </a>
1032                                <div class="io_item2_list_inner io_mm_title">
1033                                <a href="https://ambouncealot.net/rentals/obstacle-courses/"><p class="elementor-heading-title rentNameIO item_name">Obstacle Course Rentals</p></a>
1034                                </div>
1035                            </div>                    
1036
1037                    
1038
1039                    
1040
1041                    
1042
1043                    
1044
1045                    
1046
1047                    
1048
1049                    
1050
1051                    
1052
1053                    
1054
1055                    
1056
1057                    
1058
1059                    
1060
1061                    
1062
1063                    
1064
1065                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Water_Slide_Rentals" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/water-rides/">
1066                                    <div class="cat_div">
1067                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
1068                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2025/07/18-ft-Fire-blaster-Tsunami-Water-slidepool_1747866564_1747869598_b.png" alt="Water Slide Rentals"
1069                                             title="Water Slide Rentals" style="">
1070                                    </div>
1071                                </a>
1072                                <div class="io_item2_list_inner io_mm_title">
1073                                <a href="https://ambouncealot.net/rentals/water-rides/"><p class="elementor-heading-title rentNameIO item_name">Water Slide Rentals</p></a>
1074                                </div>
1075                            </div>                    
1076
1077                    
1078
1079                    
1080
1081                    
1082
1083                    
1084
1085                    
1086
1087                    
1088
1089                    
1090
1091                    
1092
1093                    
1094
1095                    
1096
1097                    
1098
1099                    
1100
1101                    
1102
1103                    
1104
1105                    
1106
1107                    
1108
1109                    
1110
1111                    
1112
1113                    
1114
1115                    
1116
1117                    
1118
1119                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Bounce_House_w_Slide_Rentals" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/slides-combos/">
1120                                    <div class="cat_div">
1121                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
1122                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2025/07/Untitled20design2039_1747869692_big.png" alt="Bounce House w/ Slide Rentals"
1123                                             title="Bounce House w/ Slide Rentals" style="">
1124                                    </div>
1125                                </a>
1126                                <div class="io_item2_list_inner io_mm_title">
1127                                <a href="https://ambouncealot.net/rentals/slides-combos/"><p class="elementor-heading-title rentNameIO item_name">Bounce House w/ Slide Rentals</p></a>
1128                                </div>
1129                            </div>                    
1130
1131                    
1132
1133                    
1134
1135                    
1136
1137                    
1138
1139                    
1140
1141                    
1142
1143                    
1144
1145                    
1146
1147                    
1148
1149                    
1150
1151                    
1152
1153                    
1154
1155                    
1156
1157                    
1158
1159                    
1160
1161                    
1162
1163                    
1164
1165                    
1166
1167                    
1168
1169                    
1170
1171                    
1172
1173                    
1174
1175                    
1176
1177                    
1178
1179                    
1180
1181                    
1182
1183                    
1184
1185                    
1186
1187                    
1188
1189                    
1190
1191                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_MECHANICAL_BULL" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/mechanical-bull/">
1192                                    <div class="cat_div">
1193                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
1194                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2025/05/Mechanical-bull-_1747868079_big-12.jpg" alt="MECHANICAL BULL"
1195                                             title="MECHANICAL BULL" style="">
1196                                    </div>
1197                                </a>
1198                                <div class="io_item2_list_inner io_mm_title">
1199                                <a href="https://ambouncealot.net/rentals/mechanical-bull/"><p class="elementor-heading-title rentNameIO item_name">MECHANICAL BULL</p></a>
1200                                </div>
1201                            </div>                    
1202
1203                    
1204
1205                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Trackless_Train" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/trackless-train/">
1206                                    <div class="cat_div">
1207                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
1208                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2025/05/trackless-train_1747868882_big-3.jpg" alt="Trackless Train"
1209                                             title="Trackless Train" style="">
1210                                    </div>
1211                                </a>
1212                                <div class="io_item2_list_inner io_mm_title">
1213                                <a href="https://ambouncealot.net/rentals/trackless-train/"><p class="elementor-heading-title rentNameIO item_name">Trackless Train</p></a>
1214                                </div>
1215                            </div>                    
1216
1217                    
1218
1219                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Foam_Machine" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/foam-machine/">
1220                                    <div class="cat_div">
1221                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
1222                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2025/05/foam-machine_1747870216_big-11.png" alt="Foam Machine"
1223                                             title="Foam Machine" style="">
1224                                    </div>
1225                                </a>
1226                                <div class="io_item2_list_inner io_mm_title">
1227                                <a href="https://ambouncealot.net/rentals/foam-machine/"><p class="elementor-heading-title rentNameIO item_name">Foam Machine</p></a>
1228                                </div>
1229                            </div>                    
1230
1231                    
1232
1233                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Games" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/games/">
1234                                    <div class="cat_div">
1235                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
1236                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2025/06/Double-Axe-Throw-Inflatable-Game_1747869882_big-3.jpg" alt="Games"
1237                                             title="Games" style="">
1238                                    </div>
1239                                </a>
1240                                <div class="io_item2_list_inner io_mm_title">
1241                                <a href="https://ambouncealot.net/rentals/games/"><p class="elementor-heading-title rentNameIO item_name">Games</p></a>
1242                                </div>
1243                            </div>                    
1244
1245                    
1246
1247                    
1248
1249                    
1250
1251                    
1252
1253                    
1254
1255                    
1256
1257                    
1258
1259                    
1260
1261                    
1262
1263                    
1264
1265                    
1266
1267                    
1268
1269                    
1270
1271                    
1272
1273                    
1274
1275                    
1276
1277                    
1278
1279                    
1280
1281                    
1282
1283                    
1284
1285                    
1286
1287                    
1288
1289                    
1290
1291                    
1292
1293                    
1294
1295                    
1296
1297                    
1298
1299                    
1300
1301                    
1302
1303                    
1304
1305                    
1306
1307                    
1308
1309                    
1310
1311                    
1312
1313                    
1314
1315                    
1316
1317                    
1318
1319                    
1320
1321                    
1322
1323                    
1324
1325                    
1326
1327                    
1328
1329                    
1330
1331                    
1332
1333                    
1334
1335                    
1336
1337                    
1338
1339                    
1340
1341                    
1342
1343                    
1344
1345                    
1346
1347                    
1348
1349                    
1350
1351                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_C
1351oncessions" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/concessions/">
1352                                    <div class="cat_div">
1353                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
1354                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2026/01/sno-kones_720534_big.jpg" alt="Concessions"
1355                                             title="Concessions" style="">
1356                                    </div>
1357                                </a>
1358                                <div class="io_item2_list_inner io_mm_title">
1359                                <a href="https://ambouncealot.net/rentals/concessions/"><p class="elementor-heading-title rentNameIO item_name">Concessions</p></a>
1360                                </div>
1361                            </div>                    
1362
1363                    
1364
1365                    
1366
1367                    
1368
1369                    
1370
1371                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Equipment" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/equipment/">
1372                                    <div class="cat_div">
1373                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
1374                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2026/01/generator2_666957_big.jpg" alt="Equipment"
1375                                             title="Equipment" style="">
1376                                    </div>
1377                                </a>
1378                                <div class="io_item2_list_inner io_mm_title">
1379                                <a href="https://ambouncealot.net/rentals/equipment/"><p class="elementor-heading-title rentNameIO item_name">Equipment</p></a>
1380                                </div>
1381                            </div>                    
1382
1383                    
1384
1385                    
1386
1387                    
1388
1389                    
1390
1391                    <div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_Tents" style="text-align:center">                                <a class="item_href" href="https://ambouncealot.net/rentals/tents/">
1392                                    <div class="cat_div">
1393                                        <div class="btn btn-primary view-product-button" style="display:none;">View Products</div>
1394                                        <img decoding="async" class="cat_img item_image" src="https://ambouncealot.net/wp-content/uploads/2025/05/IMG_9287_1748484354_big.jpeg" alt="Tents"
1395                                             title="Tents" style="">
1396                                    </div>
1397                                </a>
1398                                <div class="io_item2_list_inner io_mm_title">
1399                                <a href="https://ambouncealot.net/rentals/tents/"><p class="elementor-heading-title rentNameIO item_name">Tents</p></a>
1400                                </div>
1401                            </div>                    
1402
1403                    
1404
1405                    
1406
1407                    
1408
1409                    
1410
1411                    
1412
1413                    
1414
1415                    
1416
1417                    
1418
1419                    
1420
1421                    
1422
1423                    </div></div><style> .io_mm_item .io_item2_list, .io_mm_item .io_item2_listcat, .io_mm_item .io_item2_listrent { margin-bottom: 0px !important; }</style>				</div>
1424				</div>
1425					</div>
1426		</div>
1427					</div>
1428		</section>
1429				<section class="elementor-section elementor-top-section elementor-element elementor-element-5297786 elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="5297786" data-element_type="section" data-e-type="section" data-settings="{&quot;background_background&quot;:&quot;classic&quot;,&quot;shape_divider_bottom&quot;:&quot;wave-brush&quot;}">
1430					<div class="elementor-shape elementor-shape-bottom" aria-hidden="true" data-negative="false">
1431			<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 283.5 27.8" preserveAspectRatio="none">
1432	<path class="elementor-shape-fill" d="M283.5,9.7c0,0-7.3,4.3-14,4.6c-6.8,0.3-12.6,0-20.9-1.5c-11.3-2-33.1-10.1-44.7-5.7	s-12.1,4.6-18,7.4c-6.6,3.2-20,9.6-36.6,9.3C131.6,23.5,99.5,7.2,86.3,8c-1.4,0.1-6.6,0.8-10.5,2c-3.8,1.2-9.4,3.8-17,4.7	c-3.2,0.4-8.3,1.1-14.2,0.9c-1.5-0.1-6.3-0.4-12-1.6c-5.7-1.2-11-3.1-15.8-3.7C6.5,9.2,0,10.8,0,10.8V0h283.5V9.7z M260.8,11.3	c-0.7-1-2-0.4-4.3-0.4c-2.3,0-6.1-1.2-5.8-1.1c0.3,0.1,3.1,1.5,6,1.9C259.7,12.2,261.4,12.3,260.8,11.3z M242.4,8.6	c0,0-2.4-0.2-5.6-0.9c-3.2-0.8-10.3-2.8-15.1-3.5c-8.2-1.1-15.8,0-15.1,0.1c0.8,0.1,9.6-0.6,17.6,1.1c3.3,0.7,9.3,2.2,12.4,2.7	C239.9,8.7,242.4,8.6,242.4,8.6z M185.2,8.5c1.7-0.7-13.3,4.7-18.5,6.1c-2.1,0.6-6.2,1.6-10,2c-3.9,0.4-8.9,0.4-8.8,0.5	c0,0.2,5.8,0.8,11.2,0c5.4-0.8,5.2-1.1,7.6-1.6C170.5,14.7,183.5,9.2,185.2,8.5z M199.1,6.9c0.2,0-0.8-0.4-4.8,1.1	c-4,1.5-6.7,3.5-6.9,3.7c-0.2,0.1,3.5-1.8,6.6-3C197,7.5,199,6.9,199.1,6.9z M283,6c-0.1,0.1-1.9,1.1-4.8,2.5s-6.9,2.8-6.7,2.7	c0.2,0,3.5-0.6,7.4-2.5C282.8,6.8,283.1,5.9,283,6z M31.3,11.6c0.1-0.2-1.9-0.2-4.5-1.2s-5.4-1.6-7.8-2C15,7.6,7.3,8.5,7.7,8.6	C8,8.7,15.9,8.3,20.2,9.3c2.2,0.5,2.4,0.5,5.7,1.6S31.2,11.9,31.3,11.6z M73,9.2c0.4-0.1,3.5-1.6,8.4-2.6c4.9-1.1,8.9-0.5,8.9-0.8	c0-0.3-1-0.9-6.2-0.3S72.6,9.3,73,9.2z M71.6,6.7C71.8,6.8,75,5.4,77.3,5c2.3-0.3,1.9-0.5,1.9-0.6c0-0.1-1.1-0.2-2.7,0.2	C74.8,5.1,71.4,6.6,71.6,6.7z M93.6,4.4c0.1,0.2,3.5,0.8,5.6,1.8c2.1,1,1.8,0.6,1.9,0.5c0.1-0.1-0.8-0.8-2.4-1.3	C97.1,4.8,93.5,4.2,93.6,4.4z M65.4,11.1c-0.1,0.3,0.3,0.5,1.9-0.2s2.6-1.3,2.2-1.2s-0.9,0.4-2.5,0.8C65.3,10.9,65.5,10.8,65.4,11.1	z M34.5,12.4c-0.2,0,2.1,0.8,3.3,0.9c1.2,0.1,2,0.1,2-0.2c0-0.3-0.1-0.5-1.6-0.4C36.6,12.8,34.7,12.4,34.5,12.4z M152.2,21.1	c-0.1,0.1-2.4-0.3-7.5-0.3c-5,0-13.6-2.4-17.2-3.5c-3.6-1.1,10,3.9,16.5,4.1C150.5,21.6,152.3,21,152.2,21.1z"/>
1433	<path class="elementor-shape-fill" d="M269.6,18c-0.1-0.1-4.6,0.3-7.2,0c-7.3-0.7-17-3.2-16.
14336-2.9c0.4,0.3,13.7,3.1,17,3.3	C267.7,18.8,269.7,18,269.6,18z"/>
1434	<path class="elementor-shape-fill" d="M227.4,9.8c-0.2-0.1-4.5-1-9.5-1.2c-5-0.2-12.7,0.6-12.3,0.5c0.3-0.1,5.9-1.8,13.3-1.2	S227.6,9.9,227.4,9.8z"/>
1435	<path class="elementor-shape-fill" d="M204.5,13.4c-0.1-0.1,2-1,3.2-1.1c1.2-0.1,2,0,2,0.3c0,0.3-0.1,0.5-1.6,0.4	C206.4,12.9,204.6,13.5,204.5,13.4z"/>
1436	<path class="elementor-shape-fill" d="M201,10.6c0-0.1-4.4,1.2-6.3,2.2c-1.9,0.9-6.2,3.1-6.1,3.1c0.1,0.1,4.2-1.6,6.3-2.6	S201,10.7,201,10.6z"/>
1437	<path class="elementor-shape-fill" d="M154.5,26.7c-0.1-0.1-4.6,0.3-7.2,0c-7.3-0.7-17-3.2-16.6-2.9c0.4,0.3,13.7,3.1,17,3.3	C152.6,27.5,154.6,26.8,154.5,26.7z"/>
1438	<path class="elementor-shape-fill" d="M41.9,19.3c0,0,1.2-0.3,2.9-0.1c1.7,0.2,5.8,0.9,8.2,0.7c4.2-0.4,7.4-2.7,7-2.6	c-0.4,0-4.3,2.2-8.6,1.9c-1.8-0.1-5.1-0.5-6.7-0.4S41.9,19.3,41.9,19.3z"/>
1439	<path class="elementor-shape-fill" d="M75.5,12.6c0.2,0.1,2-0.8,4.3-1.1c2.3-0.2,2.1-0.3,2.1-0.5c0-0.1-1.8-0.4-3.4,0	C76.9,11.5,75.3,12.5,75.5,12.6z"/>
1440	<path class="elementor-shape-fill" d="M15.6,13.2c0-0.1,4.3,0,6.7,0.5c2.4,0.5,5,1.9,5,2c0,0.1-2.7-0.8-5.1-1.4	C19.9,13.7,15.7,13.3,15.6,13.2z"/>
1441</svg>		</div>
1442					<div class="elementor-container elementor-column-gap-default">
1443					<div class="elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-17ce900 elementor-invisible" data-id="17ce900" data-element_type="column" data-e-type="column" data-settings="{&quot;animation&quot;:&quot;fadeInRight&quot;}">
1444			<div class="elementor-widget-wrap elementor-element-populated">
1445						<div class="elementor-element elementor-element-e44b434 elementor-widget elementor-widget-image" data-id="e44b434" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
1446				<div class="elementor-widget-container">
1447															<img decoding="async" width="1024" height="1024" src="https://ambouncealot.net/wp-content/uploads/2025/05/Website-Client-Logos.png" class="attachment-large size-large wp-image-5854" alt="Website Client Logos Home" srcset="https://ambouncealot.net/wp-content/uploads/2025/05/Website-Client-Logos.png 1024w, https://ambouncealot.net/wp-content/uploads/2025/05/Website-Client-Logos-300x300.png 300w, https://ambouncealot.net/wp-content/uploads/2025/05/Website-Client-Logos-150x150.png 150w, https://ambouncealot.net/wp-content/uploads/2025/05/Website-Client-Logos-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px">															</div>
1448				</div>
1449					</div>
1450		</div>
1451				<div class="elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-507ab54 elementor-invisible" data-id="507ab54" data-element_type="column" data-e-type="column" data-settings="{&quot;animation&quot;:&quot;fadeInRight&quot;,&quot;background_background&quot;:&quot;classic&quot;}">
1452			<div class="elementor-widget-wrap elementor-element-populated">
1453						<div class="elementor-element elementor-element-c6bd7c4 elementor-position-inline-start elementor-view-stacked elementor-shape-circle elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box" data-id="c6bd7c4" data-element_type="widget" data-e-type="widget" data-widget_type="icon-box.default">
1454				<div class="elementor-widget-container">
1455							<div class="elementor-icon-box-wrapper">
1456
1457						<div class="elementor-icon-box-icon">
1458				<span  class="elementor-icon elementor-animation-grow">
1459				<i aria-hidden="true" class="fas fa-hashtag"></i>				</span>
1460			</div>
1461			
1462						<div class="elementor-icon-box-content">
1463
1464									<h3 class="elementor-icon-box-title">
1465						<span  >
1466							Your #1 Source For Event Rentals						</span>
1467					</h3>
1468				
1469									<p class="elementor-icon-box-description">
1470						We rent to events both big and small – with the same world class service and dependability no matter who you are or what type of event you’re holding.					</p>
1471				
1472			</div>
1473			
1474		</div>
1475						</div>
1476				</div>
1477				<div class="elementor-element elementor-element-589eba5 elementor-position-inline-start elementor-view-stacked elementor-shape-circle elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box" data-id="589eba5" data-element_type="widget" data-e-type="widget" data-widget_type="icon-box.default">
1478				<div class="elementor-widget-container">
1479							<div class="elementor-icon-box-wrapper">
1480
1481						<div class="elementor-icon-box-icon">
1482				<span  class="elementor-icon elementor-animation-grow">
1483				<i aria-hidden="true" class="fas fa-exclamation"></i>				</span>
1484			</div>
1485			
1486						<div class="elementor-icon-box-content">
1487
1488									<h3 class="elementor-icon-box-title">
1489						<span  >
1490							What Makes Us Different						</span>
1491					</h3>
1492				
1493									<p class="elementor-icon-box-description">
1494						We pride ourselves on our customer service by putting your needs first. Our friendly staff and impeccable performance helps us to ensure our service is second to none. 					</p>
1495				
1496			</div>
1497			
1498		</div>
1499						</div>
1500				</div>
1501				<div class="elementor-element elementor-element-6c1a537 elementor-position-inline-start elementor-view-stacked elementor-shape-circle elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box" data-id="6c1a537" data-element_type="widget" data-e-type="widget" data-widget_type="icon-box.default">
1502				<div class="elementor-widget-container">
1503							<div class="elementor-icon-box-wrapper">
1504
1505						<div class="elementor-icon-box-icon">
1506				<span  class="elementor-icon elementor-animation-grow">
1507				<i aria-hidden="true" class="fas fa-dollar-sign"></i>				</span>
1508			</div>
1509			
1510						<div class="elementor-icon-box-content">
1511
1512									<h3 class="elementor-icon-box-title">
1513						<span  >
1514							Satisfaction Guaranteed!						</span>
1515					</h3>
1516				
1517									<p class="elementor-icon-box-description">
1518						When we say your satisfaction is guaranteed, we mean it. If we didn’t cover your type of party event, please feel free to give us a call or message us on our Contact Us form. We will promptly respond with any necessary feedback.					</p>
1519				
1520			</div>
1521			
1522		</div>
1523						</div>
1524				</div>
1525					</div>
1526		</div>
1527					</div>
1528		</section>
1529				<section class="elementor-section elementor-top-section elementor-element elementor-element-72235e8 elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="72235e8" data-element_type="section" data-e-type="section" data-settings="{&quot;shape_divider_top&quot;:&quot;wave-brush&quot;}">
1530					<div class="elementor-shape elementor-shape-top" aria-hidden="true" data-negative="false">
1531			<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 283.5 27.8" preserveAspectRatio="none">
1532	<path class="elementor-shape-fill" d="M283.5,9.7c0,0-7.3,4.3-14,4.6c-6.8,0.3-12.6,0-20.9-1.5c-11.3-2-33.1-10.1-44.7-5.7	s-12.1,4.6-18,7.4c-6.6,3.2-20,9.6-36.6,9.3C131.6,23.5,99.5,7.2,86.3,8c-1.4,0.1-6.6,0.8-10.5,2c-3.8,1.2-9.4,3.8-17,4.7	c-3.2,0.4-8.3,1.1-14.2,0.9c-1.5-0.1-6.3-0.4-12-1.6c-5.7-1.2-11-3.1-15.8-3.7C6.5,9.2,0,10.8,0,10.8V0h283.5V9.7z M260.8,11.3	c-0.7-1-2-0.4-4.3-0.4c-2.3,0-6.1-1.2-5.8-1.1c0.3,0.1,3.1,1.5,6,1.9C259.7,12.2,261.4,12.3,260.8,11.3z M242.4,8.6	c0,0-2.4-0.2-5.6-0.9c-3.2-0.8-10.3-2.8-15.1-3.5c-8.2-1.1-15.8,0-15.1,0.1c0.8,0.1,9.6-0.6,17.6,1.1c3.3,0.7,9.3,2.2,12.4,2.7	C239.9,8.7,242.4,8.6,242.4,8.6z M185.2,8.5c1.7-0.7-13.3,4.7-18.5,6.1c-2.1,0.6-6.2,1.6-10,2c-3.9,0.4-8.9,0.4-8.8,0.5	c0,0.2,5.8,0.8,11.2,0c5.4-0.8,5.2-1.1,7.6-1.6C170.5,14.7,183.5,9.2,185.2,8.5z M199.1,6.9c0.2,0-0.8-0.4-4.8,1.1	c-4,1.5-6.7,3.5-6.9,3.7c-0.2,0.1,3.5-1.8,6.6-3C197,7.5,199,6.9,199.1,6.9z M283,6c-0.1,0.1-1.9,1.1-4.8,2.5s-6.9,2.8-6.7,2.7	c0.2,0,3.5-0.6,7.4-2.5C282.8,6.8,283.1,5.9,283,6z M31.3,11.6c0.1-0.2-1.9-0.2-4.5-1.2s-5.4-1.6-7.8-2C15,7.6,7.3,8.5,7.7,8.6	C8,8.7,15.9,8.3,20.2,9.3c2.2,0.5,2.4,0.5,5.7,1.6S31.2,11.9,31.3,11.6z M73,9.2c0.4-0.1,3.5-1.6,8.4-2.6c4.9-1.1,8.9-0.5,8.9-0.8	c0-0.3-1-0.9-6.2-0.3S72.6,9.3,73,9.2z M71.6,6.7C71.8,6.8,75,5.4,77.3,5c2.3-0.3,1.9-0.5,1.9-0.6c0-0.1-1.1-0.2-2.7,0.2	C74.8,5.1,71.4,6.6,71.6,6.7z M93.6,4.4c0.1,0.2,3.5,0.8,5.6,1.8c2.1,1,1.8,0.6,1.9,0.5c0.1-0.1-0.8-0.8-2.4-1.3	C97.1,4.8,93.5,4.2,93.6,4.4z M65.4,11.1c-0.1,0.3,0.3,0.5,1.9-0.2s2.6-1.3,2.2-1.2s-0.9,0.4-2.5,0.8C65.3,10.9,65.5,10.8,65.4,11.1	z M34.5,12.4c-0.2,0,2.1,0.8,3.3,0.9c1.2,0.1,2,0.1,2-0.2c0-0.3-0.1-0.5-1.6-0.4C36.6,12.8,34.7,12.4,34.5,12.4z M152.2,21.1	c-0.1,0.1-2.4-0.3-7.5-0.3c-5,0-13.6-2.4-17.2-3.5c-3.6-1.1,10,3.9,16.5,4.1C150.5,21.6,152.3,21,152.2,21.1z"/>
1533	<path class="elementor-shape-fill" d="M269.6,18c-0.1-0.1-4.6,0.3-7.2,0c-7.3-0.7-17-3.2-16.6-2.9c0.4,0.3,13.7,3.1,17,3.3	C267.7,18.8,269.7,18,269.6,18z"/>
1534	<path class="elementor-shape-fill" d="M227.4,9.8c-0.2-0.1-4.5-1-9.5-1.2c-5-0.2-12.7,0.6-12.3,0.5c0.3-0.1,5.9-1.8,13.3-1.2	S227.6,9.9,227.4,9.8z"/>
1535	<path class="elementor-shape-fill" d="M204.5,13.4c-0.1-0.1,2-1,3.2-1.1c1.2-0.1,2,0,2,0.3c0,0.3-0.1,0.5-1.6,0.4	C206.4,12.9,204.6,13.5,204.5,13.4z"/>
1536	<path class="elementor-shape-fill" d="M201,10.6c0-0.1-4.4,1.2-6.3,2.2c-1.9,0.9-6.2,3.1-6.1,3.1c0.1,0.1,4.2-1.6,6.3-2.6	S201,10.7,201,10.6z"/>
1537	<path class="elementor-shape-fill" d="M154.5,26.7c-0.1-0.1-4.6,0.3-7.2,0c-7.3-0.7-17-3.2-16.
15376-2.9c0.4,0.3,13.7,3.1,17,3.3	C152.6,27.5,154.6,26.8,154.5,26.7z"/>
1538	<path class="elementor-shape-fill" d="M41.9,19.3c0,0,1.2-0.3,2.9-0.1c1.7,0.2,5.8,0.9,8.2,0.7c4.2-0.4,7.4-2.7,7-2.6	c-0.4,0-4.3,2.2-8.6,1.9c-1.8-0.1-5.1-0.5-6.7-0.4S41.9,19.3,41.9,19.3z"/>
1539	<path class="elementor-shape-fill" d="M75.5,12.6c0.2,0.1,2-0.8,4.3-1.1c2.3-0.2,2.1-0.3,2.1-0.5c0-0.1-1.8-0.4-3.4,0	C76.9,11.5,75.3,12.5,75.5,12.6z"/>
1540	<path class="elementor-shape-fill" d="M15.6,13.2c0-0.1,4.3,0,6.7,0.5c2.4,0.5,5,1.9,5,2c0,0.1-2.7-0.8-5.1-1.4	C19.9,13.7,15.7,13.3,15.6,13.2z"/>
1541</svg>		</div>
1542					<div class="elementor-container elementor-column-gap-default">
1543					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-91554ba" data-id="91554ba" data-element_type="column" data-e-type="column">
1544			<div class="elementor-widget-wrap elementor-element-populated">
1545						<section class="elementor-section elementor-inner-section elementor-element elementor-element-a1fdd68 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="a1fdd68" data-element_type="section" data-e-type="section" data-settings="{&quot;background_background&quot;:&quot;gradient&quot;}">
1546						<div class="elementor-container elementor-column-gap-default">
1547					<div class="elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-2ba1d23" data-id="2ba1d23" data-element_type="column" data-e-type="column">
1548			<div class="elementor-widget-wrap elementor-element-populated">
1549						<div class="elementor-element elementor-element-30fabb7 elementor-widget elementor-widget-heading" data-id="30fabb7" data-element_type="widget" data-e-type="widget" data-settings="{&quot;motion_fx_motion_fx_scrolling&quot;:&quot;yes&quot;,&quot;motion_fx_translateX_effect&quot;:&quot;yes&quot;,&quot;motion_fx_translateX_affectedRange&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:0,&quot;end&quot;:50}},&quot;motion_fx_translateX_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:4,&quot;sizes&quot;:[]},&quot;motion_fx_devices&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;]}" data-widget_type="heading.default">
1550				<div class="elementor-widget-container">
1551					<h2 class="elementor-heading-title elementor-size-default">OUR SERVICE AREA</h2>				</div>
1552				</div>
1553				<div class="elementor-element elementor-element-466c26b elementor-widget elementor-widget-text-editor" data-id="466c26b" data-element_type="widget" data-e-type="widget" data-settings="{&quot;motion_fx_motion_fx_scrolling&quot;:&quot;yes&quot;,&quot;motion_fx_translateX_effect&quot;:&quot;yes&quot;,&quot;motion_fx_translateX_affectedRange&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:0,&quot;end&quot;:50}},&quot;motion_fx_translateX_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:4,&quot;sizes&quot;:[]},&quot;motion_fx_devices&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;]}" data-widget_type="text-editor.default">
1554				<div class="elementor-widget-container">
1555									<p>WE DELIVER TO ALL SURROUNDING AREAS!</p>								</div>
1556				</div>
1557				<div class="elementor-element elementor-element-dd38a5b elementor-widget elementor-widget-text-editor" data-id="dd38a5b" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
1558				<div class="elementor-widget-container">
1559									<ul><li style="list-style-type: none"><ul><li>Cumberland County NJ &#8211; <a href="https://ambouncealot.net/bounce-house-rentals-in-cumberland-county-nj/">Bounce Houses</a>, <a href="https://ambouncealot.net/water-slide-rentals-in-cumberland-county-nj/">Water Slides</a></li><li>Gloucester County NJ &#8211; <a href="https://ambouncealot.net/bounce-house-rentals-in-gloucester-county-nj/">Bounce Houses</a>, <a href="https://ambouncealot.net/water-slide-rentals-in-gloucester-county-nj/">Water Slides</a></li><li>Atlantic County NJ &#8211; <a href="https://ambouncealot.net/bounce-house-rentals-in-atlantic-county-nj/">Bounce Houses</a>, <a href="https://ambouncealot.net/water-slide-rentals-in-gloucester-county-nj/">Water Slides</a></li><li>Salem County NJ &#8211; <a href="https://ambouncealot.net/bounce-house-rentals-in-salem-county-nj/">Bounce Houses</a>, <a href="https://ambouncealot.net/water-slide-rentals-in-salem-county-nj/">Water Slides</a></li><li>Cape May County NJ &#8211; <a href="https://ambouncealot.net/bounce-house-rentals-in-cape-may-county-nj/">Bounce Houses</a>, <a href="https://ambouncealot.net/water-slide-rentals-in-cape-may-county-nj/">Water Slides</a></li></ul></li></ul><p> </p>								</div>
1560				</div>
1561					</div>
1562		</div>
1563				<div class="elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-b7bd7f8" data-id="b7bd7f8" data-element_type="column" data-e-type="column">
1564			<div class="elementor-widget-wrap elementor-element-populated">
1565						<div class="elementor-element elementor-element-36e8113 elementor-widget elementor-widget-html" data-id="36e8113" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
1566				<div class="elementor-widget-container">
1567					<link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css"/>
1568<style>
1569  /* Adjust height for Elementor widget or page layout as needed */
1570  #map { height: 420px; width: 100%; min-height: 300px; }
1571  .leaflet-tooltip {
1572    font-weight: 600;
1573    background: rgba(255,255,230,0.95);
1574    border: 1px solid #d4c79a;
1575    font-size: 14px;
1576    padding: 4px 6px;
1577    white-space: nowrap;
1578  }
1579  @media (max-width: 480px) {
1580    .leaflet-tooltip { font-size: 12px; padding: 3px 5px; }
1581  }
1582</style>
1583
1584<div id="map"></div>
1585
1586<script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
vendor: 1 bytes, line 1586
1586
1587<script>
1588  // Locations around Cumberland County, NJ — approximate coordinates
1589  var locations = [
1590    { name: "Cumberland County NJ", coords: [39.3137208, -75.1482086] },
1591    { name: "Gloucester County NJ", coords: [39.7015816, -75.3183126] },   // approximate county center
1592    { name: "Atlantic County NJ", coords: [39.5035662, -75.8556723] },  // approximate county center
1593    { name: "Salem County NJ", coords: [39.5757903, -75.6430519] },     // approximate county center
1594    { name: "Cape May County NJ", coords: [39.0565834, -75.1470282] },     // approximate county center
1595    { name: "Egg Harbor NJ", coords: [39.3797723, -74.9173969] },     // approximate county center
1596    { name: "Ocean City NJ", coords: [39.2585025, -74.7534943] },     // approximate county center
1597    { name: "Atlantic City NJ", coords: [39.3766701, -74.4940226] },     // approximate county center
1598    { name: "Galloway NJ", coords: [39.4858657, -74.6465278] },    // approximate county center
1599    { name: "Little Egg Harbor NJ", coords: [39.5985827, -74.3472703] },     // approximate county center
1600    { name: "Mullica Hill NJ", coords: [39.7291217, -75.2411935] },     // approximate county center
1601    { name: "Winslow Township NJ", coords: [39.6964308, -75.2197064] },     // approximate county center
1602    { name: "Mount Laurel NJ", coords: [39.957607, -74.9574215] },     // approximate county center
1603    { name: "Voorhees NJ", coords: [39.8418066, -75.0043741] },     // approximate county center
1604    { name: "Moorestown NJ", coords: [39.9758895, -74.9850246] },    // approximate county center
1605    { name: "Glassboro NJ", coords: [39.7075633, -75.151718] }     // approximate county center
1606  ];
1607
1608  // Initialize map
1609  var map = L.map('map', { zoomControl: true });
1610
1611  // Add OpenStreetMap tiles
1612  L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
1613    maxZoom: 18,
1614    attribution: '© OpenStreetMap contributors'
1615  }).addTo(map);
1616
1617  // Add markers with permanent tooltips (English labels)
1618  var markers = [];
1619  locations.forEach(function(loc){
1620    var m = L.marker(loc.coords).addTo(map)
1621      .bindTooltip(loc.name, {permanent: true, direction: 'top', offset: [0, -10]});
1622    markers.push(m);
1623  });
1624
1625  // Fit map bounds to include all markers with padding
1626  var group = L.featureGroup(markers);
1627  map.fitBounds(group.getBounds().pad(0.14));
1628
1629  // Increase zoom a bit after fitBounds so labels are easier to read (clamped)
1630  var extraZoom = 1;       // set to 2 for a closer view
1631  var maxAllowedZoom = 15; // prevent zooming in too far
1632  map.once('moveend', function(){
1633    var newZoom = Math.min(map.getZoom() + extraZoom, maxAllowedZoom);
1634    map.setZoom(newZoom);
1635  });
1636
1637  // Cap zoom if user interacts
1638  map.on('zoomend', function(){
1639    if (map.getZoom() > maxAllowedZoom) map.setZoom(maxAllowedZoom);
1640  });
1641
1642  // If used inside Elementor editor (widget hidden at init), re-render after short delay
1643  setTimeout(function(){ map.invalidateSize(); }, 400);
1644</script>
1644				</div>
1645				</div>
1646					</div>
1647		</div>
1648					</div>
1649		</section>
1650				<section class="elementor-section elementor-inner-section elementor-element elementor-element-f8052a1 elementor-section-boxed elementor-section-height-default elementor-section-height-default elementor-invisible" data-id="f8052a1" data-element_type="section" data-e-type="section" data-settings="{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;tada&quot;}">
1651							<div class="elementor-background-overlay"></div>
1652							<div class="elementor-container elementor-column-gap-default">
1653					<div class="elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-d332d93" data-id="d332d93" data-element_type="column" data-e-type="column" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
1654			<div class="elementor-widget-wrap elementor-element-populated">
1655					<div class="elementor-background-overlay"></div>
1656						<div class="elementor-element elementor-element-182f7c6 elementor-widget elementor-widget-heading" data-id="182f7c6" data-element_type="widget" data-e-type="widget" data-settings="{&quot;motion_fx_motion_fx_scrolling&quot;:&quot;yes&quot;,&quot;motion_fx_translateX_effect&quot;:&quot;yes&quot;,&quot;motion_fx_translateX_affectedRange&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:0,&quot;end&quot;:50}},&quot;motion_fx_translateX_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:4,&quot;sizes&quot;:[]},&quot;motion_fx_devices&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;]}" data-widget_type="heading.default">
1657				<div class="elementor-widget-container">
1658					<h2 class="elementor-heading-title elementor-size-default">Satisfaction Guaranteed!</h2>				</div>
1659				</div>
1660				<div class="elementor-element elementor-element-4bd36b0 elementor-widget elementor-widget-text-editor" data-id="4bd36b0" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
1661				<div class="elementor-widget-container">
1662									<p>When we say your <strong>satisfaction is guaranteed, we mean it</strong>. If we didn’t cover your type of party or event, please feel free to give us a call or message us on our <u>Contact Us</u> form. We will promptly respond with any necessary feedback.</p>								</div>
1663				</div>
1664					</div>
1665		</div>
1666					</div>
1667		</section>
1668					</div>
1669		</div>
1670					</div>
1671		</section>
1672				<section class="elementor-section elementor-top-section elementor-element elementor-element-a2b39a2 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="a2b39a2" data-element_type="section" data-e-type="section">
1673						<div class="elementor-container elementor-column-gap-default">
1674					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c03532a" data-id="c03532a" data-element_type="column" data-e-type="column">
1675			<div class="elementor-widget-wrap">
1676							</div>
1677		</div>
1678					</div>
1679		</section>
1680				</div>
1681		        </div>
1682
1683    </main>
1684
1685		<footer data-elementor-type="footer" data-elementor-id="4256" class="elementor elementor-4256 elementor-location-footer" data-elementor-post-type="elementor_library">
1686					<section class="elementor-section elementor-top-section elementor-element elementor-element-06083b9 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="06083b9" data-element_type="section" data-e-type="section">
1687						<div class="elementor-container elementor-column-gap-default">
1688					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f6c0198" data-id="f6c0198" data-element_type="column" data-e-type="column">
1689			<div class="elementor-widget-wrap elementor-element-populated">
1690						<div class="elementor-element elementor-element-05b1dde elementor-widget elementor-widget-heading" data-id="05b1dde" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
1691				<div class="elementor-widget-container">
1692					<h2 class="elementor-heading-title elementor-size-medium">Contact Us</h2>				</div>
1693				</div>
1694				<div class="elementor-element elementor-element-82f99ce elementor-widget elementor-widget-text-editor" data-id="82f99ce" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
1695				<div class="elementor-widget-container">
1696									<p>Don&#8217;t hesitate to reach out with any questions or feedback.</p>								</div>
1697				</div>
1698				<div class="elementor-element elementor-element-e92574d elementor-icon-list--layout-inline elementor-mobile-align-center elementor-align-center elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list" data-id="e92574d" data-element_type="widget" data-e-type="widget" data-widget_type="icon-list.default">
1699				<div class="elementor-widget-container">
1700							<ul class="elementor-icon-list-items elementor-inline-items">
1701							<li class="elementor-icon-list-item elementor-inline-item">
1702											<a href="tel:(856)%20982-8917">
1703
1704												<span class="elementor-icon-list-icon">
1705							<i aria-hidden="true" class="fas fa-phone-alt"></i>						</span>
1706										<span class="elementor-icon-list-text">(856) 982-8917</span>
1707											</a>
1708									</li>
1709								<li class="elementor-icon-list-item elementor-inline-item">
1710											<a href="mailto:[email protected]">
1711
1712												<span class="elementor-icon-list-icon">
1713							<i aria-hidden="true" class="fas fa-envelope"></i>						</span>
1714										<span class="elementor-icon-list-text">[email protected]</span>
1715											</a>
1716									</li>
1717						</ul>
1718						</div>
1719				</div>
1720				<div class="elementor-element elementor-element-1aa99ee elementor-icon-list--layout-inline elementor-mobile-align-center elementor-align-center elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list" data-id="1aa99ee" data-element_type="widget" data-e-type="widget" data-widget_type="icon-list.default">
1721				<div class="elementor-widget-container">
1722							<ul class="elementor-icon-list-items elementor-inline-items">
1723							<li class="elementor-icon-list-item elementor-inline-item">
1724											<span class="elementor-icon-list-icon">
1725							<i aria-hidden="true" class="fas fa-map-marked-alt"></i>						</span>
1726										<span class="elementor-icon-list-text">Vineland, NJ 08302</span>
1727									</li>
1728						</ul>
1729						</div>
1730				</div>
1731				<div class="elementor-element elementor-element-94f52ac elementor-button-align-stretch elementor-widget elementor-widget-global elementor-global-4712 elementor-widget-form" data-id="94f52ac" data-element_type="widget" data-e-type="widget" data-settings="{&quot;step_next_label&quot;:&quot;Next&quot;,&quot;step_previous_label&quot;:&quot;Previous&quot;,&quot;button_width&quot;:&quot;100&quot;,&quot;step_type&quot;:&quot;number_text&quot;,&quot;step_icon_shape&quot;:&quot;circle&quot;}" data-widget_type="form.default">
1732				<div class="elementor-widget-container">
1733							<form class="elementor-form" method="post" id="io_contactusform" name="Request Call Back" aria-label="Request Call Back">
1734			<input type="hidden" name="post_id" value="4256"/>
1735			<input type="hidden" name="form_id" value="94f52ac"/>
1736			<input type="hidden" name="referer_title" value="Home - A&amp;M Bounce A-Lot, LLC Bridgeton NJ" />
1737
1738							<input type="hidden" name="queried_id" value="5840"/>
1739			
1740			<div class="elementor-form-fields-wrapper elementor-labels-">
1741								<div class="elementor-field-type-text elementor-field-group elementor-column elementor-field-group-firstandlastname elementor-col-33">
1742												<label for="form-field-firstandlastname" class="elementor-field-label elementor-screen-only">
1743								Name							</label>
1744														<input size="1" type="text" name="form_fields[firstandlastname]" id="form-field-firstandlastname" class="elementor-field elementor-size-sm  elementor-field-textual" placeholder="Name">
1745											</div>
1746								<div class="elementor-field-type-email elementor-field-group elementor-column elementor-field-group-email elementor-col-33 elementor-field-required">
1747												<label for="form-field-email" class="elementor-field-label elementor-screen-only">
1748								Email							</label>
1749														<input size="1" type="email" name="form_fields[email]" id="form-field-email" class="elementor-field elementor-size-sm  elementor-field-textual" placeholder="Email" required="required">
1750											</div>
1751								<div class="elementor-field-type-tel elementor-field-group elementor-column elementor-field-group-cellphone elementor-col-33">
1752												<label for="form-field-cellphone" class="elementor-field-label elementor-screen-only">
1753								Phone							</label>
1754								<input size="1" type="tel" name="form_fields[cellphone]" id="form-field-cellphone" class="elementor-field elementor-size-sm  elementor-field-textual" placeholder="Phone" pattern="[0-9()#&amp;+*-=.]+" title="Only numbers and phone characters (#, -, *, etc) are accepted.">
1755
1756						</div>
1757								<div class="elementor-field-type-textarea elementor-field-group elementor-column elementor-field-group-notes elementor-col-100">
1758												<label for="form-field-notes" class="elementor-field-label elementor-screen-only">
1759								Message							</label>
1760						<textarea class="elementor-field-textual elementor-field  elementor-size-sm" name="form_fields[notes]" id="form-field-notes" rows="3" placeholder="&quot;I need help from a human sales rep.&quot;"></textarea>				</div>
1761								<div class="elementor-field-type-recaptcha_v3 elementor-field-group elementor-column elementor-field-group-field_1a42aac elementor-col-100 recaptcha_v3-bottomright">
1762					<div class="elementor-field" id="form-field-field_1a42aac"><div class="elementor-g-recaptcha" data-sitekey="6LcSNw8eAAAAAN1cy4N20ZlzWX4YetiG7zmLXN_f" data-type="v3" data-action="Form" data-badge="bottomright" data-size="invisible"></div></div>
1762				</div>
1763								<div class="elementor-field-type-text">
1764					<input size="1" type="text" name="form_fields[website_url]" id="form-field-website_url" class="elementor-field elementor-size-sm " style="display:none !important;">				</div>
1765								<div class="elementor-field-group elementor-column elementor-field-type-submit elementor-col-100 e-form__buttons">
1766					<button class="elementor-button elementor-size-sm elementor-animation-grow" type="submit" id="io_cub">
1767						<span class="elementor-button-content-wrapper">
1768															<span class="elementor-button-icon">
1769									<i aria-hidden="true" class="far fa-paper-plane"></i>																	</span>
1770																						<span class="elementor-button-text">Send</span>
1771													</span>
1772					</button>
1773				</div>
1774			</div>
1775		</form>
1776						</div>
1777				</div>
1778				<div class="elementor-element elementor-element-462b659 elementor-widget elementor-widget-text-editor" data-id="462b659" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
1779				<div class="elementor-widget-container">
1780									This site is protected by reCAPTCHA and the Google
1781    <a href="https://policies.google.com/privacy">Privacy Policy</a> and
1782    <a href="https://policies.google.com/terms">Terms of Service</a> apply.								</div>
1783				</div>
1784					</div>
1785		</div>
1786					</div>
1787		</section>
1788				<section class="elementor-section elementor-top-section elementor-element elementor-element-594fea1 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="594fea1" data-element_type="section" data-e-type="section" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
1789						<div class="elementor-container elementor-column-gap-default">
1790					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3ab037c" data-id="3ab037c" data-element_type="column" data-e-type="column">
1791			<div class="elementor-widget-wrap elementor-element-populated">
1792						<div class="elementor-element elementor-element-068e7ac elementor-widget elementor-widget-global elementor-global-4780 elementor-widget-text-editor" data-id="068e7ac" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
1793				<div class="elementor-widget-container">
1794									Copyright © A&amp;M Bounce A-Lot, LLC Bridgeton NJ All Rights Reserved | <a href="https://ambouncealot.net/privacy/">Privacy Policy</a> | Rental Software Powered By <a href="https://eventoffice.io/" target="_blank" rel="noopener">EventOffice</a> | Web Design By <a href="https://www.myadacademy.com/">EventHawk</a>								</div>
1795				</div>
1796					</div>
1797		</div>
1798					</div>
1799		</section>
1800				</footer>
1801		
1802<script type="speculationrules">
1803{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/io-kenos/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
1804</script>
1804
1805<img src="https://rental.software/include/iotracking.php" style="display:none;" importance="low" alt="dynamic io trk code" />
1806     <style>
1807     .io_product_price_4h,.io_product_price_8h,.io_product_price_24h,.io_product_price_additionalday{display:none}.io_product_price_24h{display: grid !important}.io_product_price_2h_2545731,.io_product_price_additionalhour_2545731{display: grid !important}.io_product_price_24h_2545731,.io_product_price_24h_2545731{display: none !important}
1808        .io_product_cust_price
1809        {
1810            display: none !important;
1811        }
1812        #item_live_price_time_set_message
1813        {
1814            display: none !important;
1815        }
1816        
1817    /* ALWAYS hide toggle buttons and list view on inventory/all-items pages (no category ID) */
1818    body.io-no-category-id .io_view_toggle_container,
1819    body.io-no-category-id .io_list_view_content
1820    {
1821        display: none !important;
1822    }
1823    
1824    /* Force grid/tile layout on pages without category IDs */
1825    body.io-no-category-id .io_catdiv2.list-view {
1826        display: grid !important;
1827        grid-template-columns: repeat(auto-fit, minmax(250px, 350px)) !important;
1828        grid-gap: 10px !important;
1829        margin: 50px !important;
1830        max-width: none !important;
1831        justify-content: space-evenly !important;
1832    }
1833    body.io-no-category-id .io_catdiv2.list-view .io_item2_list {
1834        display: block !important;
1835        flex-direction: column !important;
1836        margin-bottom: 0 !important;
1837        padding: 0 !important;
1838        align-items: initial !important;
1839        text-align: center !important;
1840    }
1841    body.io-no-category-id .io_catdiv2.list-view .cat_div {
1842        flex: initial !important;
1843        margin-right: 0 !important;
1844        position: relative !important;
1845    }
1846    body.io-no-category-id .io_catdiv2.list-view .cat_img {
1847        width: 100% !important;
1848        height: auto !important;
1849        object-fit: cover !important;
1850    }
1851    body.io-no-category-id .io_catdiv2.list-view .io_item2_list_inner {
1852        flex: initial !important;
1853        margin-top: initial !important;
1854        display: block !important;
1855        flex-direction: initial !important;
1856        justify-content: initial !important;
1857        min-height: auto !important;
1858        height: auto !important;
1859    }
1860    
1861    .io_all_item_cat{
1862        display:none;
1863        float:none;
1864        width:100%;
1865        margin-top:20px;
1866    }
1867    </style>
1868
1869<!-- Magic List -->
1870    
1870<script>
1871    var io_wp_local_path = "";
1872    var io_checkavail = "warn";
1873    var io_hidetimes = "off";
1874    var io_user_country = "US";
1875    var io_user_currency = "USD";
1876    var io_default_start_time = "7:00 pm";
1877    var io_default_end_time = "5:00 am";
1878    var io_default_duration = 10.00;
1879    var io_force_blank_timepickers = "off";
1880    var io_hide_end_time = "off";
1881    var io_cart_date_format = "m/d/yy";
1882    var io_cart_message = "If customer cancels their event you are responsible for 50% of the total rental fee. The card that was used to book will be charged automatically.";
1883    var io_cart_time_format = "g:i a";
1884    var io_multidayquote = "off";
1885    var io_cartdayselect = "single_day";
1886    var io_cartAllowSameDay = "off";
1887    var io_overnightPickupTime = "10:00 am";
1888    var io_incartupsell = "on";
1889    var io_distancecharge = "on";
1890    var io_deliverymethod = "off";
1891    var io_brand = "IO";
1892    var io_restrict_times = "on";
1893    var io_restrict_time_start = "8:00 am";
1894    var io_restrict_time_end = "9:00 pm";
1895    var io_default_state = "NJ";
1896    var io_hide_zero = "1";
1897    var io_weekEndPrice = "off";
1898    var io_weekDayText = "Weekday price.";
1899    var io_weekEndText = "Weekend price.";
1900    var io_weekendDefine = "friday-sunday";
1901    var io_accessory_price = "off";
1902    var io_accessory_select = "off";
1903    var io_upsell_price = "off";
1904    var io_cart_party_planner_email = "off";
1905    var io_cart_party_planner_destination = "https://ambouncealot.net/plan-a-party/";
1906    var io_hideQuantityAvail = "off";
1907    var io_company_timeslots = [];
1908    var io_info_required = "off";
1909    var io_always_display_live_price = "off";
1910    var io_default_delivery_method = "Drop-Off";
1911    var io_hide_live_prices = 1;
1912    var io_info_required_data = [];
1913    var io_prices = {"0":"isset","override_groups":{"8866091":{"2545731":1}},"1":"io_product_price_24h","2":"io_product_price_2h_2545731","3":"io_product_price_additionalhour_2545731"};
1914    var io_delivery_prices = {"default":[],"override":[]};
1915    var io_custom_prices = {"default":[],"override":[]};
1916    var io_delivery_methods = {"Drop-Off":{"restricted":[],"id":"25463"}};
1917    var io_customer_geolocation = "";
1918    var io_customer_ip = "199.16.186.82";
1919    var io_delivery_methods_restrict = null;
1920    var io_pagename = "A&M Bounce A-Lot, LLC";
1921    var io_categoryVariantImages = "";
1922    //var io_seocitylinktext = "Professional delivery to <span class=\"io_city_list\">%%landing_pages%%</span> and surrounding areas. Please submit a quote or contact us to be sure we service your area.";
1923    jQuery( document ).ready(function() {
1924
1925        //force all quote form links to use cart data
1926        //removing back to cart shortcode as this needs to only be done if cart is not empty IO-22561
1927        /*
1928        let headerBookButton = jQuery("a[href$='io_quoteform/']");
1929        headerBookButton.addClass("ioCart_link");
1930        headerBookButton.attr("href", "javascript:;");
1931        */
1932
1933
1934        let last_cat_name = "";
1935        let ioTrigger = false;
1936        jQuery(".io_all_item_cat").each(function() {
1937            current_cat_name = jQuery(this).html();
1938            if(last_cat_name !== current_cat_name) {
1939                jQuery(this).show();
1940                ioTrigger = true;
1941            }
1942            last_cat_name = current_cat_name;
1943        });
1944
1945        // Setup gen page blocks
1946		let io_divs = document.querySelectorAll(".io_item2_list, .io_item2_listcat, .io_item2_listrent, .io_all_item_cat");
1947		let io_divscat = document.querySelectorAll(".io_item2_listcat");
1948		let io_divsrent = document.querySelectorAll(".io_item2_listrent");
1949		let io_divcat = document.querySelector(".io_catdiv2");
1950		let io_pcc = document.querySelector(".page-content");
1951		let io_html;
1952
1953		if (io_divs.length > 0) {
1954	      for (let i of io_divs) {
1955	        if(i.parentNode.className.indexOf("io_mm_") === -1){
1956	          io_divcat.appendChild(i);
1957	        }
1958		  }
1959		  if(io_divcat!==null) io_divcat.style.display = "grid";
1960		}
1961
1962		if (ioTrigger) {
1963            let pageBlock = document.querySelector(".io_catdiv2");
1964            pageBlock.classList.add("elementor-widget-heading");
1965            let scanRes = pageBlock.querySelectorAll(".io_item2_listrent");
1966            pageBlock.style.display = "block";
1967            pageBlock.style.margin = "auto";
1968            pageBlock.style.textAlign = "center";
1969            pageBlock.style.marginLeft = "5px";
1970            pageBlock.style.marginRight = "5px";
1971            for (let i of scanRes) {
1972                i.style.display = "inline-block";
1973                i.style.marginLeft = "5px";
1974                i.style.marginRight = "5px";
1975            }
1976        }
1977
1978		/* fix font color on older sites */
1979		if(jQuery("#cartData").css("background-color")=="rgb(35, 36, 37)"){
1980		    jQuery("#cartData").css("color","white");
1981		}
1982    });
1983  </script>
1983<!-- Start Shortcoder content --><style> .ui-datepicker-trigger{display:none} </style>
1984
1985<div id="cartPopover">
1986  <div id="ioCartLoadingOverlay" aria-hidden="true">
1987      <div class="io-spinner" role="status" aria-live="polite" aria-label="Loading"></div>
1988  </div>
1989  <div id="triangle"></div>
1990  <div id="cartCalendarTimePickerContainer">
1991    <div id="cartCalendar"></div>
1992    <div id="cartTimePicker">
1993      <div id="div-overnight">
1994        Days <select style="color:black;" name="whatday" id="whatday" onchange="endDisplay();">
1995        <option value="Same Day" selected="selected">Single Day</option>
1996        <option value="Overnight">Overnight</option>
1997        <option value="Multi-Day">Multi-Day</option>
1998      </select>
1999      </div>
2000      <br>
2001      <div id="ioCartTimeSelectContainer">
2002        <div>
2003          <span class="calTimeLabel calTimeLabelStart">Start</span>
2004          <i class="fas fa-calendar-check"></i>
2005          <input type="text" name="dateStart" class="ioCartDateInput" readonly="readonly" />
2006          <i class="fas fa-clock"></i>
2007          <input type="text" name="timeStart" class="timepicker" style="width:75px;" />
2008        </div>
2009        <div>
2010          <span class="calTimeLabel calTimeLabelEnd">End</span>
2011          <i class="fas fa-calendar-check"></i>
2012          <input type="text" name="dateEnd" class="ioCartDateInput" readonly="readonly" />
2013          <i class="fas fa-clock"></i>
2014          <input type="text" name="timeEnd" class="timepicker" style="width:75px;" />
2015        </div>
2016      </div>
2017      <br>
2018      <div id="ioDeliveryMethodContainer" style="display:none; text-align: center;"></div>
2019      <br>
2020      <div id="ioAdditonalInformationContainer" style="display:none; text-align: center;">
2021        <div class="io_info_modal_data_container" id="io_info_modal_address">
2022          <label for="address" id="io_iml_address_label" style="width:105px"> Street Address </label>
2023          <input class="io_modal_input_address" style="margin-left:5px" id="io_im_address"  name="address" type="text"></input>
2024          <br>
2025        </div>
2026        <div class="io_info_modal_data_container" id="io_info_modal_city">
2027          <label for="city" id="io_iml_city_label" style="width:105px"> City </label>
2028          <input class="io_modal_input_city" style="margin-left:5px" id="io_im_city" name="city" type="text"></input>
2029          <br>
2030        </div>
2031        <div class="io_info_modal_data_container" id="io_info_modal_zip">
2032          <label for="zip" id="io_iml_zip_label" style="width:105px"> Zip Code </label>
2033          <input class="io_modal_input_zip" id="io_im_zip" style="margin-left:5px" name="zip" type="text"></input>
2034        </div>
2035      </div>
2036      <br>
2037      <div class="elementor-widget-button" style="padding:10px;display:inline-block;">
2038        <a onclick="calApply()" href="javascript:;"
2039           class="elementor-button-link elementor-button elementor-size-sm elementor-animation-grow"
2040           style="text-decoration: none;">Apply</a></div>
2041      <div class="elementor-widget-button" style="padding:10px;display:inline-block;">
2042        <a onclick="calCancel()" href="javascript:;"
2043           class="elementor-button-link elementor-button elementor-size-sm elementor-animation-grow simpleCart_cancel"
2044           style="text-decoration: none;">Cancel</a>
2045      </div>
2046    </div>
2047    <div id="cartDateRange" class="ioDateRange" onclick="calSetDateRange(1)" style="display:none;">
2048    </div>
2049    <div class="changeDateLinkWrapper elementor-widget-button">
2050      <div id="changeDateLink" onclick="calSetDateRange(1)" class="elementor-button elementor-animation-grow">Change Date</div>
2051    </div>
2052  </div>
2053  <div id="cartPartyBuilderEmailContainer" style="display:none;text-align:center">
2054    <p>Provide an email address here to recieve our free party planner!</p>
2055    <input type="text" id="cartPartyBuilderEmailInput">
2056    <div class="elementor-widget-button" style="display:inline-block;">
2057      <a onclick="io_party_planner_email_submit()" href="javascript:;" class="elementor-button-link elementor-button elementor-size-sm" style="padding: 6px 15px;text-decoration: none;">Go</a>
2058    </div>
2059    <div id="cartPartyBuilderEmailWarning" style="display:none">Pleave provide a valid email address.</div>
2060    <br><br>
2061  </div>
2062  <div id="cartCustomMessage" style="display:none;text-align:center"></div>
2063  <div id="cartWarning" class="clearfix"></div>
2064  <div id="deliveryMethodWarning" class="clearfix">Some items are not available for the selected delivery method.</div>
2065  <span class="io_locationRedirectLink">You may not be on the correct site. Click here to change location.</span>
2066  <div id="cartData" class="clearfix">
2067    <div class="simpleCart_items"></div>
2068  </div>
2069  <div class="cartSubtotalBox">
2070    Subtotal (estimate):<div id="cartSubtotal"></div>
2071  </div>
2072  <div class="checkDeliveryCartContainer">
2073    <div id="checkDeliveryMessage" class="cartDeliverytotalBox"><a class="cartLink" href="javascript:;" onClick="showAddressEntry(true)">Check Delivery</a></div>
2074    <div id="deliverSubtotalContainer" class="cartDeliverytotalBox">
2075      Delivery Fee (<span><a class="cartLink" href="javascript:;" onClick="showAddressEntry(true)">Change Address</a></span>):<div id="deliverySubtotal"></div>
2076    </div>
2077  </div>
2078  <div id="cartCheckoutButton" class="clearfix">
2079    <div class="elementor-widget-button">
2080      <a href="javascript:cartHide();
2080" class="simpleCart_continue elementor-button elementor-size-sm elementor-animation-grow io_button">Continue Shopping</a>
2081      <a href="javascript:;" class="simpleCart_checkout elementor-button elementor-size-sm elementor-animation-grow io_button">Checkout</a>
2082    </div>
2083    <div id="cart-carousel-container" style="display:none">
2084      <label> Some items you may be interested in: </label>
2085      <br>
2086      <div class="cart-carousel"></div>
2087    </div>
2088    <div class="ioLink"><a href="https://www.inflatableoffice.com" target="_blank">powered by io</a></div>
2089  </div>
2090</div>
2091
2092<!-- Start JS -->
2093<script>
2094  /* configurable globals */
2095  var start_default = "11:00 am";
2096  if(io_default_start_time != "") start_default = io_default_start_time;
2097  var end_default = "3:00 pm";
2098  if(io_default_end_time != "") end_default = io_default_end_time;
2099
2100  if(io_user_currency){
2101    var currency = io_user_currency;
2102  } else{
2103    var currency = "USD";
2104  }
2105
2106  if(io_user_country){
2107    var country = io_user_country;
2108  } else{
2109    var country = "US";
2110  }
2111
2112
2113  var timeFormat = "g:i a";
2114  if(io_cart_time_format != "") timeFormat = io_cart_time_format;
2115  var dateFormat = "m/d/yy";
2116  if(io_cart_date_format != "") dateFormat = io_cart_date_format;
2117
2118  var restrictTimes = false;
2119  if(io_restrict_times === "on") restrictTimes = true;
2120  var restrictTimeStart = start_default;
2121  if(io_restrict_time_start != "") restrictTimeStart = io_restrict_time_start;
2122  var restrictTimeEnd = end_default;
2123  if(io_restrict_time_end != "") restrictTimeEnd = io_restrict_time_end;
2124
2125
2126  var multi_day = true;
2127  if(io_multidayquote === "off" || io_cartdayselect == "Single Day") multi_day = false;
2128  var in_cart_upsell = false;
2129  if(io_incartupsell === "on") in_cart_upsell = true;
2130  var io_distance_charge = false;
2131  if(io_distancecharge === "on") io_distance_charge = true;
2132
2133  /* other globals */
2134  var pallet_color1 = ""; /* set in onready */
2135  /* track the date start/end of calendar clicking */
2136  var click_count = 0;
2137
2138  /* for configuring upsell carosel in cart */
2139  var cart_carousel_set = false;
2140
2141  /* for checking when we remove an item from the cart */
2142  var last_remove = 0;
2143  var last_upsell_call = 0;
2144
2145  /* for buffering cart qty changes checkAvail calls for qty change only */
2146  var last_checkAvail_call = 0;
2147
2148  /* for cart loading animation */
2149  var io_cart_loading_active = false;
2150  var io_cart_loading_count = 0;
2151  var io_cart_loading_fallback_timer = null;
2152
2153  /*var start_default = "11:00";
2154    var end_default = "15:00";
2155    var currency = "EUR";
2156    var timeFormat = "G:i";
2157    var dateFormat = "d/m/yy";*/
2158
2159
2160  /* For weekday weekend pricing */
2161  var use_weekday_weekend = false;
2162  if(io_weekEndPrice == "on") use_weekday_weekend = true;
2163
2164  /* Accessory and Upsell Prices */
2165  var show_accessory_price = false;
2166  if(io_accessory_price == "on") show_accessory_price = true;
2167  var show_upsell_price = false;
2168  if(io_upsell_price == "on") show_upsell_price = true;
2169
2170  /* For customer geolocation shortcode */
2171  var storage_key = 'io_customer_location';
2172
2173  /*<editor-fold defaultstate="collapsed" desc="On Ready">*/
2174  jQuery(document).ready(function () {
2175    pallet_color1 = "var( --e-global-color-accent,green )";
2176    if(pallet_color1=="rgba(0, 0, 0, 0)" || pallet_color1=="rgb(255, 255, 255)") pallet_color1="rgb(25, 147, 35)";
2177
2178    /*<editor-fold defaultstate="collapsed" desc="SimpleCart Init">*/
2179    simpleCart({
2180      currency: currency,
2181      cartColumns: [{
2182        view: "image",
2183        attr: "image",
2184        label: "Image"
2185      },
2186        {
2187          attr: "name",
2188          label: "Name"
2189        },
2190        {
2191          attr: "encoded",
2192          label: false
2193        },
2194        {
2195          attr: "rentalid",
2196          label: false
2197        },
2198        {
2199          attr: "availability",
2200          label: false
2201        },
2202        {
2203          view: "decrement",
2204          label: false,
2205          text: "<i class='fas far fa-minus-square' style='color:" + pallet_color1 + "'></i>"
2206        },
2207        {
2208          view: "calculate_area",
2209          label: false
2210        },
2211        {
2212          view:"input",
2213          attr:"quantity"
2214
2215        },
2216        {
2217          attr: "qtyincrement",
2218          label: false
2219        },
2220        {
2221          attr: "inputtype",
2222          label: false
2223        },
2224        {
2225          attr: "qtytype",
2226          label: false
2227        },
2228        {
2229          attr: "vendorid",
2230          label: false
2231        },
2232        {
2233          view: "increment",
2234          label: false,
2235          text: "<i class='fas far fa-plus-square' style='color:" + pallet_
2235color1 + "'></i>"
2236        },
2237        {
2238          attr: "price",
2239          label: "Price",
2240          view: 'currency'
2241        },
2242        {
2243          view: "remove",
2244          label: false,
2245          text: "<i class='fas fa-trash' style='color:" + pallet_color1 + "'></i>"
2246        },
2247        {
2248          attr: "total",
2249          label: "SubTotal",
2250          view: 'currency'
2251        },
2252        {
2253          attr: "timeslots",
2254          label: false
2255        },
2256        {
2257          attr: "timeslots-orig",
2258          label: false
2259        },
2260        {
2261          attr: "href",
2262          label: false
2263        },
2264        {
2265          attr: "linkqty",
2266          label: false
2267        },
2268        {
2269          attr: "acc_dd_parent_limit",
2270          label: false
2271        }
2272      ],
2273      checkout: {
2274        type: "SendForm",
2275        method: "GET",
2276        url: io_wp_local_path+"/io_quoteform/",
2277        extra_data: {
2278          /* name: decodeURIComponent("A&M Bounce A-Lot, LLC".replace(/[+]/gi, " ")), */
2279          clear_rentals: "1",
2280          selected_only: "1",
2281          wp_checkout: "1",
2282          startdate: "",
2283          enddate: "",
2284          starttime: "",
2285          endtime: "",
2286          io_custguid: ""
2287        }
2288      }
2289    });
2290
2291    simpleCart.bind('update', cart_onUpdate);
2292    simpleCart.bind('beforeSave', cart_hideTimepickerWrapper);
2293    simpleCart.bind('beforeRemove', cart_beforeRemove);
2294    simpleCart.bind('afterRemove', cart_afterRemove);
2295    simpleCart.bind('afterQtyChange', cart_afterQtyChange);
2296    simpleCart.bind('beforeCheckout', cart_beforeCheckout);
2297    simpleCart.bind('afterAdd', cart_afterAdd);
2298    simpleCart.bind('beforeAdd', cart_beforeAdd);
2299    simpleCart.bind('load', cart_afterLoad)
2300    /*</editor-fold>*/
2301
2302    /* showAvail(""); */
2303    let io_star_pic = document.querySelector("#io_star_pic");
2304    if (io_star_pic != null) {
2305      let io_star_src = io_star_pic.src;
2306      if (io_star_src.indexOf("0star") > -1 || io_star_src.indexOf("1star") > -1 || io_star_src.indexOf("2star") > -1 ||
2307              io_star_src.indexOf("3star") > -1) {
2308        io_star_pic.style.display = "none";
2309      }
2310    }
2311
2312    /*<editor-fold desc="Build Thumb Images">*/
2313    /* build multiple thumb images */
2314
2315    /*</editor-fold>*/
2316
2317    /*<editor-fold desc="Set up Accessories">*/
2318    /* Add Add To Cart Buttons */
2319    let button_add = document.querySelector("#bookNowBtn");
2320    var main_id = 0;
2321    if(jQuery(".io_product_container .item_rentalid")){
2322      main_id = jQuery(".io_product_container .item_rentalid").first().text();
2323    }
2324    /* if main item is dd but not pkg (linen code) */
2325    if(jQuery(".io_acc_accessorydd").text()==1 && jQuery(".io_acc_ispackage").text()!=1){
2326      /* if order is defined, then reorder here. */
2327      var acc_cls = jQuery('.io_product_accessories')
2328      acc_cls.hide();
2329      let pkg = document.querySelector(".io_product_acc_pkg");
2330      if(pkg==undefined){
2331        pkg = document.createElement("div");
2332        pkg.classList.add("io_product_acc_pkg");
2333        pkg.style.textAlign = "center";
2334        acc_cls.after(pkg);
2335      }
2336      for (let [key, value] of acc_obj_relate) {
2337        elem = getAccElem(key,main_id);
2338        if(elem){
2339          btn = makeAccBtn(elem,main_id);
2340          pkg.append(btn);
2341        }
2342
2343      }
2344      let line = document.createElement("div");
2345      line.innerHTML = "<br>";
2346      pkg.append(line.cloneNode(true));
2347      for (let [key, value] of acc_obj_relate) {
2348        for (key2 in acc_obj_relate.get(key)) {
2349          if(Object.keys(value[key2]).length > 0){
2350            /* 3rd level */
2351            pkg.append(line.cloneNode(true));
2352            for (key3 in acc_obj_relate.get(key)[key2]) {
2353              elem = getAccElem(key3,key2);
2354              if(elem){
2355                btn = makeAccBtn(elem,key2);
2356                btn.style.display = "none";
2357                pkg.append(btn);
2358              }
2359            }
2360          }else{
2361            elem = getAccElem(key2,key);
2362            if(elem){
2363              btn = makeAccBtn(elem,key);
2364              btn.style.display = "none";
2365              pkg.append(btn);
2366            }
2367
2368          }
2369        }
2370      }
2371    }else {
2372      let access_array = document.querySelectorAll(".io_acc_li");
2373      let count = 0;
2374      for (let i of access_array) {
2375        let path = i.id.replace("io_acc_","");
2376        count++;
2377        let newButton = button_add.cloneNode(true);
2378        newButton.id = button_add.id + count;
2379        newButton.classList.remove("elementor-animation-grow");
2380        newButton.classList.add("elementor-animation-shrink");
2381
2382        let path_arr = path.split("_");
2383        let pid = parseInt(path_arr[0]);
2384        let this_id = parseInt(path_arr[1]);
2385        if(path_arr.length==1) pid=0;
2386
2387        if(jQuery("#io_acc_accessorydd_"+path).first().text()==1){
2388          /* display different to provide choices in dd */
2389          //main_id = pid;
2390        }else{
2391          /* hide accessories inside a pkg when under an accessory choice item until clicked */
2392          if(jQuery("#io_acc_accessorydd_"+main_id+"_"+pid).first().text()==1){
2393          }else{
2394            /* jpa - not finished/tested yet */
2395            /*jQuery("#io_acc_"+path).hide();*/
2396          }
2397          /* Fix broken images for accessories. */
2398          let img_box = document.querySelectorAll(".io_acc_li_img_thumb");
2399          let firstImg = true;
2400          let lastAcc = "";
2401          for (let i of img_box) {
2402            if(lastAcc=="") lastAcc = i.id;
2403            if(lastAcc!=i.id){
2404              lastAcc = i.id;
2405              firstImg = true;
2406            }
2407            let io_img_src = i.src;
2408            if(io_img_src!==null) io_img_src = io_img_src.toLowerCase();
2409            let io_img_datasrc = i.getAttribute("data-src");
2410            if(io_img_datasrc===null){
2411              io_img_datasrc = "";
2412            }else{
2413              io_img_datasrc = io_img_datasrc.toLowerCase();
2414            }
2415            if ((io_img_src.indexOf("io_noimage.png") >= 0 || io_img_datasrc.indexOf("io_noimage.png") >= 0) || (io_img_src.indexOf(".jpg") == -1 && io_img_src.indexOf(".jpe") == -1 && io_img_src.indexOf(".png") == -1 && io_img_src.indexOf(".gif") == -1 && io_img_src.indexOf(".tif") == -1 && io_img_src.indexOf(".webp") == -1)){
2416              i.style.display = "none";
2417            }else if(!firstImg && jQuery("#io_acc_accessorydd_"+main_id+"_"+pid).first().text()!=1){
2418              i.style.display = "none";
2419            }
2420            firstImg = false;
2421          }
2422          if(jQuery("#io_acc_accessorydd_"+main_id+"_"+pid).first().text()==1){
2423            /* Make the accessory category look more mike a label. */
2424            jQuery("#iothumb_"+main_id+"_"+pid).hide();
2425            jQuery("#io_acc_"+main_id+"_"+pid).css("border", "none");
2426            jQuery("#io_acc_"+main_id+"_"+pid).css("width", "100%");
2427            jQuery("#io_acc_"+main_id+"_"+pid).css("margin-bottom", "5vh");
2428            jQuery("#io_acc_"+main_id+"_"+pid).css("box-shadow", "none");
2429            jQuery("#io_acc_shortname_"+pid).css("font-weight", "bold");
2430            jQuery("#io_acc_shortname_"+pid).css("position", "absolute");
2431            /* Make this auto selected to fix an issue where we can not add to cart if this item is
2432                           a child of another hidden accessory on screen */
2433            jQuery("#io_acc_"+main_id+"_"+pid).prop("selected", true);
2434            accessory_cat_text = jQuery("#io_acc_shortname_"+pid).first().text();
2435            /* This is necessary to make sure there are not multiple colons. */
2436            if(!accessory_cat_text.includes(":")){
2437              jQuery("#io_acc_shortname_"+pid).text(accessory_cat_text+":");
2438            }
2439            /* Remove Href so we do not open images on click for dd accessories. */
2440            jQuery("[id^=io_acc_imgbig_"+pid+"_]").removeAttr("href");
2441
2442            /* Get the accessory limit for this set of acessories, then set up click events. */
2443            /* Unbind is used to prevent cascading calls. */
2444            accLmt = parseInt(jQuery("#io_acc_accessorylimit_"+main_id+"_"+pid).prop("textContent"));
2445            jQuery("[id^=io_acc_"+pid+"_]").unbind("click").click({pid: pid, accLmt: accLmt}, accDDClicked);
2446            jQuery("[id^=io_acc_"+pid+"_]").css("cursor", "pointer");
2447            /* Set up the slected property of all children accessories. Default to false. */
2448            jQuery("[id^=io_acc_"+pid+"_]").prop("selected", false);
2449            /* We need to add a hidden button so we can simulate a click on add_item for the cart. */
2450            let newButton = button_add.cloneNode(true);
2451            newButton.id = button_add.id + count;
2452            newButton.classList.remove("elementor-animation-grow");
2453            newButton.setAttribute("style", "display: none !important");
2454            i.appendChild(newButton);
2455          }else{
2456            let button_wrap = document.createElement("div");
2457            button_wrap.classList.add("elementor-widget-button");
2458            button_wrap.classList.add("io_access_button");
2459            button_wrap.appendChild(newButton);
2460            let req = false;
2461            if(jQuery("#io_acc_required_"+path).first().text()>0) req = true;
2462            if(!req){
2463              i.appendChild(button_wrap);
2464            }else{
2465              var textnode = document.createTextNode("Included");
2466              i.appendChild(textnode);
2467            }
2468          }
2469        }
2470      }
2471    }
2472    /*</editor-fold>*/
2473
2474    let upsell_array = document.querySelectorAll(".io_upsell_li");
2475    count = 0;
2476    for (let i of upsell_array) {
2477      count++;
2478      let newButton = button_add.cloneNode(true);
2479      newButton.id = button_add.id + count;
2480      newButton.classList.remove("elementor-animation-grow");
2481      newButton.classList.add("elementor-animation-shrink");
2482
2483      let button_wrap = document.createElement("div");
2484      button_wrap.classList.add("elementor-widget-button");
2485      button_wrap.classList.add("io_upsell_button");
2486      button_wrap.appendChild(newButton);
2487      i.appendChild(button_wrap);
2488    }
2489
2490    if(io_deliverymethod == "on" && jQuery(".calDeliveryMethodLabel").length==0){
2491      let delivery_method_container = jQuery("#ioDeliveryMethodContainer").first();
2492      delivery_method_container.append('<span class="calDeliveryMethodLabel">Select Delivery Method</span>');
2493      let delivery_method_html = '<select class="ioDeliveryMethods" onchange="deliveryMethodSelected()">';
2494      let delivery_methods = Object.keys(io_delivery_methods)
2495      for(const index in delivery_methods){
2496        if(!io_delivery_methods_restrict){
2497          delivery_method_html += '<option value="'+delivery_methods[index]+'">'+delivery_methods[index]+'</option>';
2498          if(index == 0 && !getCookie("io_delivery_method")) setCookie("io_delivery_method", delivery_methods[index], 14);
2499        }else if( !io_delivery_methods_restrict.includes( io_delivery_methods[ delivery_methods[index] ]["id"] ) ){
2500          delivery_method_html += '<option value="'+delivery_methods[index]+'">'+delivery_methods[index]+'</option>';
2501          if(index == 0 && !getCookie("io_delivery_method")) setCookie("io_delivery_method", delivery_methods[index], 14);
2502        }
2503      }
2504      delivery_method_container.append(delivery_method_html);
2505      delivery_method_container.show();
2506      if(getCookie("io_delivery_method")){
2507        jQuery(".ioDeliveryMethods").val(getCookie("io_delivery_method"));
2508      }
2509    }else{
2510      setCookie("io_delivery_method", "", 14);
2511    }
2512
2513    let allow_same_day = 1;
2514    if(io_cartAllowSameDay == "on"){
2515      allow_same_day = 0;
2516    }
2517
2518    /*<editor-fold desc="Cart Calandar and Time Settings Setup">*/
2519    //var fullmonth_array = jQuery.datepicker.regional["en"].monthNames;
2520    jQuery("#cartCalendar").datepicker({
2521      changeMonth: true,
2522      changeYear: true,
2523      //monthNamesShort : fullmonth_array,
2524      dateFormat: dateFormat,
2525      rangeSelect: true,
2526      numberOfMonths: 1,
2527      stepMonths: 1,
2528      prevText: "<< Previous Months",
2529      nextText: "Next Months >>",
2530      speed: "fast",
2531      showOn: "both",
2532      onChangeMonthYear: cal_onChangeMonthYear,
2533      onSelect: cal_onSelect,
2534      buttonText: "Calendar",
2535      minDate: allow_same_day,
2536      firstDay: 0
2537    });
2538    jQuery(".ui-datepicker-trigger").hide();
2539    if(restrictTimes){
2540      jQuery(".timepicker").timepicker({
2541        startTime: new Date(0, 0, 10, 0, 0, 0),
2542        endTime: new Date(0, 0, 0, 20, 0, 0, 0),
2543        minTime:restrictTimeStart,
2544        maxTime:restrictTimeEnd,
2545        /*show24Hours: $show24Hours,*/
2546        timeFormat: timeFormat,
2547        separator: ":",
2548        className: "elementor-widget-text-editor",
2549        step: 15,
2550        disableTouchKeyboard: true
2551      }).keypress(function(e){
2552        e.preventDefault();
2553      });
2554    } else{
2555      jQuery(".timepicker").timepicker({
2556        startTime: new Date(0, 0, 10, 0, 0, 0),
2557        endTime: new Date(0, 0, 0, 20, 0, 0, 0),
2558        /*show24Hours: $show24Hours,*/
2559        timeFormat: timeFormat,
2560        separator: ":",
2561        className: "elementor-widget-text-editor",
2562        step: 15,
2563        disableTouchKeyboard: true
2564      });
2565    }
2566
2567    /* if we have company wide timeslots, alter time select in cart. Do this only if we are set to single day only */
2568    if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day"){
2569      let time_select_container = jQuery("#ioCartTimeSelectContainer").first();
2570      time_select_container.empty();
2571      let selected_date_html = '<span style="margin-right: 5px !important" class="calTimeLabel">Date</span><i class="fas fa-calendar-check"></i><input style="margin-left: 5px !important" type="text" name="dateStart" class="ioCartDateInput" readonly="readonly" /><input style="display: none !important" type="text" name="dateEnd" class="ioCartDateInput" readonly="readonly" />'
2572      time_select_container.append(selected_date_html);
2573      time_select_container.append("<br>")
2574      time_select_container.append('<span class="calTimeLabel">Select Timeslot</span>');
2575      let timeslot_html = '<select class="ioCartCompanyTimeslots">';
2576      for(i=0; i<io_company_timeslots.length; ++i){
2577        timeslot_html += io_company_timeslots[i];
2578      }
2579      timeslot_html += "</select>"
2580      time_select_container.append(timeslot_html);
2581
2582    }
2583
2584    // Timeslot element on Quote Form
2585    const timeslotSelectElement = jQuery(".controls select[name=timeslot]");
2586
2587    /* jQuery( ".datepicker" ).datepicker({dateFormat: "m/d/yy",minDate:0}); */
2588    /* jQuery( ".datepicker" ).val(getCookie("checkDate")); */
2589    start_date = getCookie("io_dateStart");
2590    end_date = getCookie("io_dateEnd");
2591    start_time = getCookie("io_timeStart");
2592    end_time = getCookie("io_timeEnd");
2593    jQuery("input[name=dateStart]").val(start_date);
2594    jQuery("input[name=dateEnd]").val(end_date);
2595    if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day" && getCookie("io_company_timeslot_selected")){
2596      jQuery(".ioCartCompanyTimeslots").val(getCookie("company_timeslot_selected"));
2597      // Set it on the quote page too.
2598      timeslotSelectElement.val(getCookie("io_company_timeslot_selected"));
2599    } else{
2600      jQuery("input[name=timeStart]").val(start_time);
2601      jQuery("input[name=timeEnd]").val(end_time);
2602    }
2603
2604    timeslotSelectElement.on('change', function() {
2605      // IO-31167: Upon timeslot change on Quote Form,
2606      // update timeslot cookie value for persistence
2607      if(this.value) {
2608        setCookie('io_company_timeslot_selected', this.value, 14);
2609      }
2610    });
2611
2612    if (jQuery("input[name=dateEnd]").val() != "") {
2613      setCalBackground();
2614      jQuery("#cartSubtotal").html(simpleCart.toCurrency(simpleCart.total()));
2615      if(getCookie("io_dateApplied") === "true") calCancel();
2616      else {
2617        jQuery("input[name=dateStart]").val(getCookie("io_dateStart"));
2618        jQuery("input[name=dateEnd]").val(getCookie("io_dateEnd"));
2619        if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day" && getCookie("io_company_timeslot_selected")){
2620          jQuery(".ioCartCompanyTimeslots").val(getCookie("io_company_timeslot_selected"));
2621        }
2622        else if(io_force_blank_timepickers == "on")
2623        {
2624          setCookie("io_timeStart", "", 14);
2625          setCookie("io_timeEnd", "", 14);
2626          jQuery('[name=timeStart]').val("");
2627          jQuery('[name=timeEnd]').val("");
2628        }
2629        else{
2630          jQuery("input[name=timeStart]").val(getCookie("io_timeStart"));
2631          jQuery("input[name=timeEnd]").val(getCookie("io_timeEnd"));
2632        }
2633
2634        jQuery(".changeDateLinkWrapper").hide();
2635      }
2636    }
2637    /*</editor-fold>*/
2638
2639    jQuery("#io-dialog").dialog({
2640      autoOpen: false,
2641      resizable: false,
2642      modal: true,
2643      dialogClass: "noTitleStuff",
2644      width: 350,
2645      open: function () {
2646        jQuery(".ui-widget-overlay").bind("click", function () {
2647          jQuery("#io-dialog").dialog("close");
2648        })
2649      }
2650    });
2651
2652    /* change jquery calendar next/prev buttons to fa arrows w/matching site color */
2653    jQuery("#cartCalendar .ui-datepicker-prev").addClass("fas fa-arrow-left").css("color", pallet_color1);
2654    jQuery("#cartCalendar .ui-datepicker-next").addClass("fas fa-arrow-right").css("color", pallet_color1);
2655
2656    /* hide sections if not set */
2657    if(jQuery(".io_product_circuits_right").first().text()=="0"){jQuery(".io_product_circuits_right,.io_product_circuits_left").hide();}
2658    if(jQuery(".io_city_list").html()==""){jQuery(".io_landingpages").hide();}
2659    /* using this instead as it will handle custom ones added */
2660    let io_field_valbox = document.querySelector(".io_product_infobox");
2661    if (io_field_valbox != null || io_field_valbox != undefined) {
2662      let io_field_valarr = io_field_valbox.querySelectorAll(".io_product_detail_box");
2663      for (let i of io_field_valarr) {
2664        let check = i.querySelector("p:nth-child(2)");
2665        if (check != null && check.innerText == "") i.style.display = "none";
2666      }
2667    }
2668
2669    /* Hide description if there is no description */
2670    desc_box = document.querySelector(".io_product_desc")
2671    if(desc_box != null && desc_box.innerText.length == 0 && desc_box.innerHTML.length == 0){
2672      desc_detail_box = desc_box.parentElement;
2673      desc_detail_box.style.display = "none";
2674    }
2675
2676    if(document.querySelector(".io_product_reviewbox")!=null){
2677      if (document.querySelector(".io_product_reviewbox").innerText == "") {
2678        if(document.querySelector(".io_star_rating")!=null) document.querySelector(".io_star_rating a").style.display = "none";
2679      }
2680    }
2681
2682    let rid = jQuery(".io_product_container .item_rentalid").first().text();
2683    let regex = new RegExp("^io_product_price_.*_" + rid + "$");
2684    for (const price_index in io_prices){
2685      if(regex.test(io_prices[price_index])){
2686        use_weekday_weekend = false;
2687      }
2688    }
2689
2690    /* hide end date input. */
2691    if(!multi_day){
2692      /* TODO: Need to wait and see if this is necessary. If so needs to be more involved than this. */
2693      /* jQuery("input[name=dateEnd]").style("visibility", "hidden"); */
2694    }
2695    /* Call page avail now so we can display live price if its enabled */
2696    setTimeout(function(){
2697      if(jQuery(".io_acc_accessorydd").text()==1 && jQuery(".io_acc_ispackage").text()!=1){
2698        jQuery("#bookNowBtn").removeClass("item_add").addClass("item_add_off").trigger("classChange");
2699        checkAvailPageOnly();
2700      }else{
2701        checkAvailPageOnly();
2702      }
2703    },50);
2704
2705    /* Adjust picbox for header heights */
2706    setTimeout(adjustPicBoxForHeader,500);
2707
2708    /* Show buttons for distance charge check if the setting is on. Hide or show map button if applicable*/
2709    if(io_distance_charge){
2710      jQuery(".delivery_charge_check_container").show();
2711      jQuery(".calc_price_with_map_container").hide();
2712      jQuery(".checkDeliveryCartContainer").show();
2713    } else {
2714      jQuery(".delivery_charge_check_container").hide();
2715      jQuery(".calc_price_with_map_container").hide();
2716      jQuery(".checkDeliveryCartContainer").hide();
2717    }
2718    if(io_brand=="EH"){
2719      jQuery(".delivery_charge_check_container").hide();
2720      jQuery(".eh_additional_description").show();
2721    }
2722    if(jQuery(".io_product_infobox .item_inputtype").text() === "Map"){
2723      jQuery(".delivery_charge_check_container").hide();
2724      jQuery(".checkDeliveryCartContainer").hide();
2725      jQuery(".calc_price_with_map_container").show();
2726    }
2727
2728    /* If we have delivery set in cookie, be sure to show the charge in the cart. */
2729    if(getCookie("io_deliveryFee") && simpleCart.items().length > 0) {
2730      setDeliverySubtotal(getCookie("io_deliveryFee"));
2731      jQuery("#deliverSubtotalContainer").show();
2732      jQuery("#checkDeliveryMessage").hide();
2733    } else{
2734      jQuery("#deliverSubtotalContainer").hide();
2735    }
2736
2737    /* moved back here for IO-22561 */
2738    if(simpleCart.items().length > 0){
2739      let headerBookButton = jQuery("a[href$='io_quoteform/']");
2740      headerBookButton.addClass("ioCart_link");
2741      headerBookButton.attr("href", "javascript:;");
2742    }
2743    jQuery(".cartInfo").unbind("click").one("click", function(event){
2744      event.stopPropagation();
2745      event.stopImmediatePropagation();
2746      cartShow();
2747    });
2748    jQuery(".ioCart,.ioCart_link").unbind("click").one("click", function(event){
2749      event.stopPropagation();
2750      event.stopImmediatePropagation();
2751      cartShow();
2752    });
2753
2754    /* hide if click outside cart */
2755    jQuery(document).mouseup(function(e){
2756      var container = jQuery("#cartPopover");
2757      var cartButton = jQuery(".cartInfo, .ioCart, .ioCart_link");
2758      var addButton = jQuery(".item_add");
2759      var timePicker = jQuery(".ui-timepicker-wrapper");
2760
2761      if(jQuery(".cartInfo, .ioCart, .ioCart_link").hasClass("open")){
2762        if(!container.is(e.target) && container.has(e.target).length === 0 && !cartButton.is(e.target) && cartButton.has(e.target).length === 0 && !addButton.is(e.target) &&  addButton.has(e.target).length === 0 && !timePicker.is(e.target) &&  timePicker.has(e.target).length === 0 && !jQuery(".address_entry").is(e.target) &&  jQuery(".address_entry").has(e.target).length === 0){
2763          cartHide();
2764        }
2765      }
2766    });
2767
2768    if(!getCookie("io_state") && io_default_state){
2769      setCookie("io_state", io_default_state, 14);
2770    }
2771    if(country != "US") {
2772      jQuery("#io_cd_state").replaceWith('<input id="io_cd_state" style="display: table-cell" name="state" type="text"></input>');
2773      jQuery("#io_cdl_zip_label").text("Postal code");
2774      if(country == "CA"){
2775        jQuery("#io_cdl_state_label").text("Province");
2776      } else if(country == "AU"){
2777        jQuery("#io_cdl_city_label").text("Suburb");
2778      }
2779    } else{
2780      jQuery("#io_cd_zip").attr("type", "number");
2781    }
2782    /* Set up on change events to stop end timepickers from allowing users to pick times before start time */
2783    setTimeout(restrictEndTimepickers, 500);
2784    if(io_hide_end_time == "on" && io_default_duration > 0){
2785      jQuery('[name="timeEnd"]').parent().hide();
2786      // Hide end time stuff on checkout page and in the text.
2787      jQuery(".io_event_body_time .control-group:nth-child(2)").hide();
2788      jQuery(".io_event_body_time_display_text").text(jQuery(".io_event_body_time_display_text").text().replace(/\s*→.*/, ""))
2789      jQuery('[name="timeStart"]').change(function(){
2790        const regex = /^(\d{1,2}):(\d{2})(?:\s*([AP]M))?$/i;
2791        const match = this.value.match(regex);
2792
2793        let hours = parseInt(match[1], 10);
2794        const minutes = parseInt(match[2], 10);
2795        const period = match[3] ? match[3].toUpperCase() : null;
2796
2797        if (period) {
2798          if (period === "PM" && hours !== 12) hours += 12;
2799          if (period === "AM" && hours === 12) hours = 0;
2800        }
2801
2802        const baseDate = new Date(1970, 0, 1, hours, minutes);
2803        const newTime = new Date(baseDate.getTime() + io_default_duration * 3600000);
2804
2805        if (period) {
2806          // 12-hour
2807          let newHours = newTime.getHours();
2808          const newMinutes = newTime.getMinutes();
2809          const newPeriod = newHours >= 12 ? "PM" : "AM";
2810          newHours = newHours % 12;
2811          if (newHours === 0) newHours = 12;
2812          let end_time = `${newHours}:${newMinutes.toString().padStart(2, "0")} ${newPeriod}`;
2813          jQuery('[name="timeEnd"]').val(end_time);
2814        } else {
2815          // 24 hour
2816          let end_time = `${newTime.getHours().toString().padStart(2, "0")}:${newTime.getMinutes().toString().padStart(2, "0")}`;
2817          jQuery('[name="timeEnd"]').val(end_time);
2818        }
2819      });
2820    }
2821
2822    /* If we have a custom message in cart, display it. */
2823    if(io_cart_message){
2824      show_cart_message();
2825    }
2826
2827    /* code for day select in cart */
2828    if(io_cartdayselect == "dropdown_options" && io_multidayquote === "on"){
2829      saved_whatday = getCookie("io_whatday");
2830      if(saved_whatday) jQuery("#whatday").val(saved_whatday);
2831      endDisplay();
2832      setCalBackground();
2833    } else{
2834      jQuery("#div-overnight").hide();
2835      jQuery("#whatday").val("");
2836    }
2837
2838    checkRestrictedDeliveries()
2839    /* If we are using the information gathering tool, we do not want to show this message. */
2840    if( live_pricing_is_on() && io_info_required == "off" ){
2841      if(!event_time_set() && io_always_display_live_price != "on"){
2842        jQuery("#item_live_price_time_set_message").show();
2843      }else{
2844        jQuery("#item_live_price_time_set_message").hide();
2845      }
2846    }
2847
2848
2849    /* Check if information gathering header exists. If it does, Remove set even button and add some classes on onclicks */
2850    if(jQuery("#ioInfoHeader").length){
2851      remove_set_event_buttton();
2852      add_classes_and_onClicks();
2853      header_increment_step();
2854    }
2855
2856    jQuery(".io_acc_li").each(function() {
2857      if(jQuery(this).find(".item_required").first().text() > 0 && jQuery(this).find(".item_accessorydd").first().text() == 1){
2858        jQuery(jQuery(jQuery(this).parent()).prev()).appendTo(".io_product_requiredDD_accessories");
2859        jQuery(jQuery(this).parent()).appendTo(".io_product_requiredDD_accessories");
2860        jQuery(".io_product_requiredDD_accessories").show();
2861      }
2862    });
2863
2864    if(jQuery(".io_product_accessories .io_acc_li").length == 0) jQuery(".io_product_accessories").hide();
2865
2866    /* Hide the cart add button for items with required accessories on category page */
2867    jQuery(".item_hasRequiredAcc").each(function() {
2868      if (this.innerText == '1') {
2869        let rental_id_element = jQuery(this).parent().find(".item_rentalid")[0];
2870        let addCartButton = jQuery(".io_item2_list_inner .add_cart_" + rental_id_element.innerText).find('.io_button');
2871        addCartButton.removeClass("item_add");
2872        addCartButton.html('<i class="fas fa-arrow-right"></i>');
2873
2874        let itemHref = jQuery(this).parent().find(".item_href").text();
2875        addCartButton.attr('href', itemHref);
2876      }
2877    });
2878
2879
2880    /* If they have same day selection allowed, need to update checkout page datepicker on delay to make sure it works */
2881    if(io_cartAllowSameDay == "on"){
2882      setTimeout(allow_same_day_select_on_checkout, 500);
2883    }
2884
2885    if(io_info_required_data && io_info_required == "on"){
2886      let io_required_data = io_info_required_data;
2887      jQuery("#ioAdditonalInformationContainer").show();
2888      for (const [data, value] of Object.entries(io_required_data)) {
2889        if(value == 1){
2890          jQuery("#io_info_modal_"+data).css("display", "inline-flex")
2891          jQuery("#io_im_"+data).val(getCookie(data));
2892        }
2893      }
2894      show_or_hide_required_info_message()
2895    }
2896    if(jQuery(".bootstrap-timepicker").length == 0) {
2897      if (!/Mobi|Android/i.test(navigator.userAgent)) {
2898        jQuery("#cartPopover").scroll(function () {
2899          jQuery("[name=timeStart]").timepicker("hide");
2900          jQuery("[name=timeEnd]").timepicker("hide");
2901        });
2902        jQuery(window).scroll(function () {
2903          jQuery("#cartPopover [name=timeStart]").timepicker("hide");
2904          jQuery("#cartPopover [name=timeEnd]").timepicker("hide");
2905        });
2906      }
2907    }
2908
2909    if(jQuery(".io_product_infobox .item_inputtype").text() == "Map"){
2910      simpleCart.items().forEach(function (item, index){
2911        if(item.get("rentalid") === jQuery(".io_product_infobox .item_rentalid").text()){
2912          if(item.get("quantity") > 1){
2913            let units;
2914            if(jQuery(".io_product_infobox .item_qtytype").text() == "Area"){
2915              units = "sq meters"
2916              if(country === "US") units = "sq feet"
2917            }else if(jQuery(".io_product_infobox .item_qtytype").text() == "Perimeter"){
2918              units = "meters"
2919              if(country === "US") units = "feet"
2920            }
2921            set_price_on_item_page(units, item.get("quantity"));
2922          }
2923        }
2924      });
2925    }
2926    /* IO-21808 */
2927    jQuery(".io_product_price_box").each(function() {
2928      let classes = jQuery(this).attr("class");
2929      jQuery(this).attr("class", classes.replace(":", "_"));
2930    });
2931
2932    /* Set time instructions (IO-21496) */
2933    set_cart_time_instructions();
2934
2935    if(io_accessory_select === "on"){
2936      if(jQuery(".io_product_acc_pkg").children().length > 0){
2937        let main_rental_id = jQuery(".item_rentalid").text();
2938        let sel_div = jQuery("<div class=\"io_product_acc_pkg\" style=\"display:flex; margin-top:10px;\"></div>");
2939        let sel = jQuery("<select class=\"io_product_acc_pkg\" onchange=\"accOnClick(this)\" />");
2940        sel.append("<option value=\"\" selected=\"selected\" style=\"display:none\" disabled>Select one..</option>")
2941        jQuery("[id^=io_acc_shortname_"+main_rental_id+"]").each(function(){
2942          sel.append("<option value="+this.id+">"+this.innerHTML+"</option>")
2943          if(this.id.split("_").length > 4){
2944            let split_id = this.id.split("_");
2945            let option_rental_id = split_id[split_id.length - 1];
2946            let sel2 = jQuery("<select id=\"io_product_acc_pkg_sel_"+option_rental_id+"\" style=\"display:none; margin-left:5px;\" onchange=\"accOnClick(this)\" />");
2947            sel2.append("<option value=\"\" selected=\"selected\" style=\"display:none\" disabled>Select one..</option>")
2948            jQuery("[id^=io_acc_shortname_"+option_rental_id+"_]").each(function(){
2949              sel2.append("<option value="+this.id+">"+this.innerHTML+"</option>")
2950            });
2951            sel_div.append(sel2);
2952          }
2953        });
2954        sel_div.prepend(sel);
2955        jQuery(".io_product_acc_pkg").replaceWith(sel_div);
2956      }
2957    }
2958    if(io_cart_party_planner_email === "on" && io_cart_party_planner_destination){
2959      jQuery("#cartPartyBuilderEmailContainer").show()
2960      if(getCookie("io_email")){
2961        jQuery("#cartPartyBuilderEmailInput").val(getCookie("io_email"));
2962      }
2963    }
2964
2965    if(io_brand == "PW"){
2966      jQuery(".io_product_price_box").attr("style", "display: none !important;");
2967      jQuery(".io_product_price_sqfoot").attr("style", "display: grid !important;");
2968    }
2969
2970    setTimeout(simpleCart.init, 100);
2971    if(io_hide_zero == 1){
2972      jQuery(".io_product_price_top_left").each(function (){
2973        if(Number(this.innerText.replace(/[^0-9.-]+/g,"")) == 0){
2974          jQuery(this).parent().attr('style','display:none !important');
2975        }
2976      });
2977      jQuery(".io_product_price_left").each(function (){
2978        if(Number(this.innerText.replace(/[^0-9.-]+/g,"")) == 0){
2979          jQuery(this).parent().attr('style','display:none !important');
2980        }
2981      });
2982    }
2983      if (io_categoryVariantImages == 'on'){
2984          jQuery(".io_category_thumbox").show();
2985          jQuery('.view-product-button').addClass('view-product-button2')
2986      }
2987    let giftcard_value = jQuery(".item_giftcardvalue");
2988    if(giftcard_value && giftcard_value.text()){
2989      jQuery(".delivery_charge_check_container").hide();
2990    }
2991
2992    if (io_customer_geolocation == 'on') initializeGeolocation();
2993  }); /*end of on-ready*/
2994  /*</editor-fold>*/
2995
2996  /*<editor-fold defaultstate="collapsed" desc="Helper Functions">*/
2997  function phraseUpdateCount(inputElement)
2998  {
2999  //read the text and strip out spaces
3000    const fullText = inputElement.value;
3001    const lettersOnly  = fullText.replace(/\s+/g, "");
3002    const count = lettersOnly.length;
3003
3004    const cookieKey = inputElement.classList[0];
3005
3006    document.querySelector(".item_quantity").textContent = count;
3007
3008    setCookie(cookieKey, fullText, 45);
3009  }
3010  function io_party_planner_email_submit(){
3011    let valid_regex = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
3012    let email = jQuery("#cartPartyBuilderEmailInput").val();
3013    if(email){
3014      if(email.match(valid_regex)){
3015        setCookie("io_email", email, 14);
3016        window.open(io_cart_party_planner_destination, '_blank').focus();
3017      }else{
3018        jQuery("#cartPartyBuilderEmailWarning").show();
3019      }
3020    }else{
3021      jQuery("#cartPartyBuilderEmailWarning").show();
3022    }
3023  }
3024
3025  function rid_in_batch(rid, batch_ids){
3026    let result = batch_ids.filter(function(batch){
3027      if(batch.includes(this)) return true;
3028    }, rid);
3029    return result
3030  }
3031
3032  function set_cart_time_instructions(){
3033    /* Making it clearer that customers need to set the time in order to see pricing and availability. */
3034    let instructions_container = jQuery("<p id=\"ioCartTimeInstructions\"></p>");
3035    let instructions = "";
3036
3037    if(multi_day){
3038      instructions += "Select the event date or date range using the calendar";
3039    }else{
3040      instructions += "Select the event date using the calendar";
3041    }
3042    instructions += ".";
3043    instructions_container.text(instructions);
3044    jQuery("#cartCalendar").append(instructions_container);
3045  }
3046
3047  function live_pricing_is_on(){
3048    /*
3049    Checks to see if live pricing is on. Assumes it is on unless one of the following conditions:
3050       The setting Hide Live Price is off.
3051       The setting Show Weekend/Weekday Pricing is off.
3052       Delivery method pricing is enabled by default.
3053       We are on an item page that uses delivery method pricing.
3054    */
3055    if(io_hide_live_prices != 1 || io_weekEndPrice != "on" ||
3056            io_delivery_prices["default"].length != 0 || jQuery(".io_product_infobox .item_rentalid").innerText in io_delivery_prices["override"] ||
3057            io_custom_prices["default"].length != 0 || jQuery(".io_product_infobox .item_rentalid").innerText in io_delivery_prices["override"]){
3058      return false;
3059    }
3060    return true;
3061  }
3062
3063  function allow_same_day_select_on_checkout(){
3064    jQuery(".jquery-datepicker").datepicker("option", "minDate", 0);
3065  }
3066
3067  function show_or_hide_required_info_message(){
3068    if(io_info_required == "on"){
3069      if(!all_info_provided()){
3070        jQuery("#io_all_prices").hide();
3071        jQuery("#item_additonal_info_open_message").show();
3072      }else{
3073        jQuery("#io_all_prices").show();
3074        jQuery("#item_additonal_info_open_message").hide();
3075      }
3076    }
3077  }
3078
3079  function all_info_provided(){
3080    /* This is used for when the "Hide all pricing on page until information is provided" setting is on price settings. */
3081    let all_data_provided = true;
3082    let io_required_data = io_info_required_data;
3083    for (const [data, value] of Object.entries(io_required_data)) {
3084      if(value == 1){
3085        if(!getCookie(data)){
3086          all_data_provided = false
3087        }
3088      }
3089    }
3090
3091    if(live_pricing_is_on() && !event_time_set()) {
3092      all_data_provided = false;
3093    }
3094
3095    return all_data_provided;
3096  }
3097
3098  function event_time_set(){
3099    if(getCookie("io_timeStart") &&
3100            getCookie("io_timeEnd") &&
3101            getCookie("io_dateStart") &&
3102            getCookie("io_dateEnd")){
3103      return true;
3104    } else{
3105      return false
3106    }
3107  }
3108
3109  function show_cart_message(){
3110    message_container = jQuery("#cartCustomMessage");
3111    message_container.html(io_cart_message);
3112    message_container.show();
3113  }
3114
3115  function deliveryMethodSelected(){
3116    setCookie("io_delivery_method", jQuery(".ioDeliveryMethods option:selected").text(), 14);
3117    checkRestrictedDeliveries();
3118  }
3119
3120  function adjustPicBoxForHeader(){
3121    /* For some reason its hard to get css with querySelector so we use jQuery to get the picbox. */
3122    pic_box = jQuery(".io_product_picbox");
3123    io_header = document.querySelector(".io_header");
3124    if(pic_box != null && pic_box.css("position") == "sticky"){
3125      if(io_header != null){
3126        header_height = io_header.offsetHeight;
3127        pic_box.css("top", (10+header_height).toString()+"px");
3128      }
3129      else{
3130        possible_headers = document.querySelectorAll("header,section")
3131        possible_headers.forEach((ele) =>{
3132          if(ele.style.top == "0px" && (ele.style.position == "fixed" || ele.style.position == "sticky")){
3133            header = ele;
3134            header_height = header.offsetHeight;
3135            pic_box.css("top", (10+header_height).toString()+"px");
3136
3137          }
3138        });
3139      }
3140    }
3141  }
3142  function cart_times_all_set(){
3143    if(jQuery("#ioCartTimeSelectContainer [name=dateStart]").val() == ""){
3144      return false;
3145    }
3146    if(io_hidetimes === "off" || io_hidetimes === ""){
3147      if(jQuery("#ioCartTimeSelectContainer [name=timeStart]").val() == ""){
3148        return false;
3149      }
3150      if(jQuery("#ioCartTimeSelectContainer [name=timeEnd]").val() == ""){
3151        return false;
3152      }
3153    }
3154
3155    return true;
3156  }
3157  function checkRestrictedDeliveries(){
3158    let items = simpleCart.items()
3159    let restrictions_found = false;
3160    for(i in items){
3161      let rid = items[i].get("rentalid");
3162      if(typeof jQuery(".ioDeliveryMethods").val() != "undefined"){
3163        if(io_delivery_methods[jQuery(".ioDeliveryMethods").val()]["restricted"].includes(rid)){
3164          jQuery("#deliveryMethodWarning").show();
3165          restrictions_found = true;
3166        }
3167      }
3168    }
3169    if(!restrictions_found){
3170      jQuery("#deliveryMethodWarning").hide();
3171    }
3172  }
3173
3174  function display_cart_warning(item){
3175    let cart_warning_container = jQuery("#cartWarning");
3176
3177    // Check if an event date if not we should tell them to set it.
3178    event_times = getAvailTimes();
3179    if(!event_times[0] || !event_times[1]){
3180      cart_warning_container.text("Please set the date and time for your event above.");
3181      cart_warning_container.show();
3182      return false;
3183    }
3184
3185    let item_name = item.get("name");
3186    let item_timeslots = item.get("timeslots");
3187    let timeslot_name = getTimeslotName(item_timeslots);
3188
3189    let stop_loop = false;
3190    if(item_timeslots){
3191      if(jQuery(item_timeslots).nodeName == "SELECT"){
3192        /* NOTE: It should not be possible for timeslots to be empty.
3193                   But in the event they somehow are, we should have this here. */
3194        /* timeslots */
3195        var timeslot_sel_range = jQuery(".item-timeslots [name=\""+timeslot_name+"\"] option:selected").val();
3196        if(typeof timeslot_sel_range != "undefined"){
3197          var [start_time, end_time] = break_timeslot_sel_range(timeslot_sel_range);
3198        }
3199      }else{
3200        /*  timepickers */
3201        let [start_timepicker, end_timepicker] = get_cart_timepickers(timeslot_name);
3202        var start_time = start_timepicker.value;
3203        var end_time = end_timepicker.value;
3204      }
3205      if(!start_time || !end_time){
3206        cart_warning_container.text("Please select a time range for the following item: " + item_name);
3207        cart_warning_container.show()
3208        stop_loop = true;
3209      }
3210    } else{
3211      cart_warning_container.text("Some items are not available on this date.");
3212      cart_warning_container.show()
3213    }
3214    return stop_loop
3215  }
3216
3217  const io_personal_cookie_keys = ["io_email", "io_phone", "io_address", "io_city", "io_state", "io_zip"];
3218
3219  function ioHasMarketingConsent(){
3220    if(typeof cmplz_has_consent !== 'function'){
3221      return true;
3222    }
3223    return cmplz_has_consent('marketing');
3224  }
3225
3226  function ioUnwrapStoredValue(raw) {
3227      // Fully peel any {v,e} wrapper layers that may have accumulated when an
3228      // older plugin version re-saved an already-wrapped value (IO-36799). Cart
3229      // values (dates, times, addresses) are never JSON objects, so any layer
3230      // that parses to a {v,...} object is a wrapper to unwrap. Returns
3231      // { value, expired, malformed } describing the innermost stored string.
3232      var value = (raw == null) ? "" : String(raw);
3233      for (var depth = 0; depth < 25; depth++) {
3234        var trimmed = value.trim();
3235        if (trimmed.charAt(0) !== '{') break;          // plain value -> done
3236        var obj;
3237        try {
3238          obj = JSON.parse(trimmed);
3239        } catch (e) {
3240          break;                                       // not parseable -> stop, keep value
3241        }
3242        if (!obj || typeof obj !== 'object' || !('v' in obj)) break;  // not our wrapper
3243        if (obj.e && Date.now() > obj.e) {
3244          return { value: "", expired: true, malformed: false };
3245        }
3246        value = (obj.v != null) ? String(obj.v) : "";
3247      }
3248      // Only flag as malformed if what remains still looks like our own broken
3249      // {"v":...} wrapper (e.g. truncated) -- never an ordinary value that just
3250      // happens to start with "{", which must be preserved untouched.
3251      var malformed = /^\s*\{\s*"v"\s*:/.test(value);
3252      return { value: value, expired: false, malformed: malformed };
3253  }
3254
3255  function setCookie(cname, cvalue, exdays) {
3256      if(io_personal_cookie_keys.indexOf(cname) !== -1 && !ioHasMarketingConsent()){
3257        return;
3258      }
3259      // Store values in localStorage with an io_ prefix for uniqueness and emulate expiration
3260      try {
3261        // Unwrap first so an already-wrapped value can never be re-wrapped and
3262        // compound into nested {v,e} layers (IO-36799).
3263        var clean = ioUnwrapStoredValue(cvalue).value;
3264        var expiresAt = (typeof exdays === 'number' && exdays > 0)
3265          ? Date.now() + (exdays * 24 * 60 * 60 * 1000)
3266          : null;
3267        var payload = JSON.stringify({ v: clean, e: expiresAt });
3268        window.localStorage.setItem(cname, payload);
3269      } catch (e) {
3270        // Swallow errors to keep behavior similar to cookie writes silently failing
3271        console.log(e);
3272      }
3273  }
3274
3275  function getCookie(cname) {
3276    // Read values from localStorage honoring expiration; return empty string if missing/expired
3277    try {
3278      var raw = window.localStorage.getItem(cname);
3279      if (!raw) return "";
3280      var result = ioUnwrapStoredValue(raw);
3281      if (result.expired || result.malformed) {
3282        // Drop expired or corrupted entries so they self-heal instead of being
3283        // rendered as raw JSON in the date/time fields (IO-36799).
3284        try { window.localStorage.removeItem(cname); } catch (e) {}
3285        return "";
3286      }
3287      return result.value;
3288    } catch (e) {
3289      return "";
3290    }
3291  }
3292  async function fetchAndSetCookie(name) {
3293    var requestInit = { credentials: "include" };
3294    fetch("https://rental.software/include/get_cookie.php?name=" + name, requestInit).then(function (response) {
3295      return response.json();
3296    }).then(function (response) {
3297      return handleResponse(name, response);
3298    });
3299  }
3300
3301  function handleResponse(name, response) {
3302    var currentCookieValue = getCookie(name);
3303    if (!!response.value && currentCookieValue !== response.value) {
3304      setCookie(name, response.value, 14);
3305    }
3306    return response.value;
3307  }
3308
3309  function clearIoPersonalDataForNoConsent(){
3310    io_personal_cookie_keys.forEach(function(key){
3311      try {
3312        window.localStorage.removeItem(key);
3313      } catch (e) {
3314        console.log(e);
3315      }
3316    });
3317
3318    var trackingUrl = (window.location.href.indexOf("localhost") > -1)
3319      ? "http://localhost/io/bugs/include/iotracking.php"
3320      : "https://rental.software/include/iotracking.php";
3321    var clearImg = new Image();
3322    clearImg.src = trackingUrl + "?action=remove&nocache=" + Math.random();
3323  }
3324
3325  document.addEventListener("cmplz_status_change", function (e) {
3326    if (e.detail.category === 'marketing' && e.detail.value === 'deny') {
3327      clearIoPersonalDataForNoConsent();
3328    }
3329  });
3330
3331  function break_timeslot_sel_range(timeslot_sel_range){
3332    /* Takes a time range given by selected timeslot and gets the start and end time removing meridiem.*/
3333    timeslot_sel_arr = timeslot_sel_range.split(" - ");
3334    var start_time = timeslot_sel_arr[0].replace("am"," am").replace("pm"," pm").replace("  "," ");
3335    var end_time = timeslot_sel_arr[1].replace("am"," am").replace("pm"," pm").replace("  "," ");
3336
3337    return Array(start_time, end_time);
3338  }
3339  function getAvailTimes(){
3340    /*
3341    Commonly used helper function. Accomplishes two things:
3342      Returns an array containing start_date, start_time, and event duration.
3343      Sets cookies for start and end date, and start and end time.
3344
3345    Uses the inputs available in the cart if they are filled out, so dateStart, dateEnd, timeStart, and timeEnd.
3346    If timeslots are being used in cart it chooses the selected timeslot and breaks it on - and gets the start ane end time from that.
3347    */
3348    let start_date = jQuery("input[name=dateStart]").val();
3349    let end_date = jQuery("input[name=dateEnd]").val();
3350    if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day"){
3351      let cart_company_timeslot_selected = jQuery(".ioCartCompanyTimeslots option:selected").first().val();
3352      if(cart_company_timeslot_selected){
3353        setCookie("io_company_timeslot_selected", cart_company_timeslot_selected, 14);
3354        cart_company_timeslot_selected = cart_company_timeslot_selected.split("-");
3355        var start_time = cart_company_timeslot_selected[0].trim();
3356        var end_time = cart_company_timeslot_selected[1].trim();
3357      }
3358    } else {
3359      var start_time = jQuery("input[name=timeStart]").val();
3360      var end_time = jQuery("input[name=timeEnd]").val();
3361    }
3362
3363    if (start_date.length == 0) {
3364      start_date = getCookie("io_dateStart");
3365      end_date = getCookie("io_dateEnd");
3366      start_time = getCookie("io_timeStart");
3367      end_time = getCookie("io_timeEnd");
3368    }
3369
3370    const has_selected_company_timeslot = io_company_timeslots.length != 0
3371      && io_cartdayselect == "single_day"
3372      && jQuery(".ioCartCompanyTimeslots option:selected").first().val();
3373
3374    if(io_hidetimes === "on"
3375      && io_force_blank_timepickers != "on"
3376      && !has_selected_company_timeslot) {
3377      start_time = start_default;
3378      end_time = end_default;
3379      jQuery("input[name=timeStart]").val(start_time);
3380      jQuery("input[name=timeEnd]").val(end_time);
3381    }
3382
3383    if(io_force_blank_timepickers != "on")
3384    {
3385      if(start_time.length == 0)
3386      {
3387        start_time = start_default;
3388      }
3389      if(end_time.length == 0)
3390      {
3391        end_time = end_default;
3392      }
3393    }
3394
3395
3396    /* no past dates */
3397    if(start_date.length != 0 && convertDateStringtoDateObject(start_date, start_time) < new Date()){
3398      start_date="";
3399      end_date="";
3400    }
3401    /* setCookie("checkDate", start_date, 14); */
3402    setCookie("io_dateStart", start_date, 14);
3403    setCookie("io_dateEnd", end_date, 14);
3404    setCookie("io_timeStart", start_time, 14);
3405    setCookie("io_timeEnd", end_time, 14);
3406    /* If we are using the information gathering tool, we do not want to show this message.*/
3407    if( live_pricing_is_on() && io_info_required == "off" ){
3408      if(!event_time_set() && io_always_display_live_price != "on"){
3409        jQuery("#item_live_price_time_set_message").show();
3410      }else{
3411        jQuery("#item_live_price_time_set_message").hide();
3412      }
3413    }
3414
3415    var newDate1 = convertDateStringtoDateObject(start_date, start_time);
3416    var newDate2 = convertDateStringtoDateObject(end_date, end_time);
3417    let time_duration = ((newDate2 - newDate1) / 3600) / 1000;
3418    return [start_date,start_time,time_duration];
3419  }
3420
3421  function  getAllRentalIDsFromCart(){
3422    let rental_ids = "";
3423    jQuery("[id^='cartItem_']").each(function(){
3424      children = this.children
3425      for(let i = 0; i < children.length; ++i){
3426        if(children[i].className == "item-rentalid") {
3427          rental_ids += children[i].innerText + "|";
3428          break;
3429        }
3430      }
3431    });
3432    return rental_ids
3433  }
3434  /*</editor-fold>*/
3435
3436  /*<editor-fold defaultstate="collapsed" desc="Info Header Functions">*/
3437  function init_date_timepicker_for_info_header(){
3438    jQuery(".ioInfoDatepicker").datepicker({
3439      changeMonth: true,
3440      changeYear: true,
3441      dateFormat: dateFormat,
3442      rangeSelect: true,
3443      numberOfMonths: 1,
3444      stepMonths: 1,
3445      speed: "fast",
3446      showOn: "both",
3447      onChangeMonthYear: cal_onChangeMonthYear,
3448      buttonText: "Calendar",
3449      minDate: 1,
3450      firstDay: 0
3451    });
3452    jQuery("#ioHeaderDateStart").datepicker("option", { onSelect: function() {
3453        set_info_header_end_date();
3454        saveInfoHeader();
3455        // Add more functions if needed
3456      }
3457    });
3458
3459    if(restrictTimes){
3460      jQuery(".ioInfoTimepicker").timepicker({
3461        startTime: new Date(0, 0, 10, 0, 0, 0),
3462        endTime: new Date(0, 0, 0, 20, 0, 0, 0),
3463        minTime:restrictTimeStart,
3464        maxTime:restrictTimeEnd,
3465        /*show24Hours: $show24Hours,*/
3466        timeFormat: timeFormat,
3467        separator: ":",
3468        className: "elementor-widget-text-editor",
3469        step: 15,
3470        disableTouchKeyboard: true
3471      });
3472    } else{
3473      jQuery(".ioInfoTimepicker").timepicker({
3474        startTime: new Date(0, 0, 10, 0, 0, 0),
3475        endTime: new Date(0, 0, 0, 20, 0, 0, 0),
3476        /*show24Hours: $show24Hours,*/
3477        timeFormat: timeFormat,
3478        separator: ":",
3479        className: "elementor-widget-text-editor",
3480        step: 15,
3481        disableTouchKeyboard: true
3482      });
3483    }
3484    setTimeout(setUpTimeRestrictions_infoHeaderTimepickers, 500);
3485  }
3486
3487  function saveInfoHeader(){
3488    let info_header_start_date = jQuery("[id$=ioHeaderDateStart]");
3489    let info_header_end_date = jQuery("[id$=ioHeaderDateEnd]");
3490    let info_header_start_time = jQuery("[id$=ioHeaderTimeStart]");
3491    let info_header_end_time = jQuery("[id$=ioHeaderTimeEnd]");
3492    let info_header_address = jQuery("[id$=ioHeaderAddress]");
3493    let info_header_city = jQuery("[id$=ioHeaderCity]");
3494    let info_header_state = jQuery("[id$=ioHeaderState]");
3495    let info_header_zip = jQuery("[id$=ioHeaderZipCode]");
3496    let info_header_phone = jQuery("[id$=ioHeaderPhone]");
3497    let info_header_email = jQuery("[id$=ioHeaderEmail]");
3498
3499    if(info_header_start_time.val()) setCookie("io_timeStart", info_header_start_time.val(), 14);
3500    if(info_header_end_time.val()) setCookie("io_timeEnd", info_header_end_time.val(), 14);
3501    if(info_header_start_date.val()) setCookie("io_dateStart", info_header_start_date.val(), 14);
3502    if(info_header_end_date.val()) setCookie("io_dateEnd", info_header_end_date.val(), 14);
3503    if(info_header_address.val()) setCookie("io_address", info_header_address.val(), 14);
3504    if(info_header_city.val()) setCookie("io_city", info_header_city.val(), 14);
3505    if(info_header_state.val()) setCookie("io_state", info_header_state.val(), 14);
3506    if(info_header_zip.val()) setCookie("io_zip", info_header_zip.val(), 14);
3507    if(info_header_phone.val()) setCookie("io_phone", info_header_phone.val(), 14);
3508    if(info_header_email.val()) setCookie("io_email", info_header_email.val(), 14);
3509
3510    /* Set information in the cart. */
3511    calCancel();
3512
3513    header_increment_step();
3514
3515    /* Stop form from doing anything else for elementor */
3516    // jpa - still allow, turn off actions in form if wanted. to turn off io lead submission use the plugin settings
3517    //event.preventDefault();
3518    //event.stopPropagation();
3519    return true;
3520  }
3521
3522  function set_info_header_values(){
3523    let info_header_start_date = jQuery("[id$=ioHeaderDateStart]");
3524    let info_header_end_date = jQuery("[id$=ioHeaderDateEnd]");
3525    let info_header_start_time = jQuery("[id$=ioHeaderTimeStart]");
3526    let info_header_end_time = jQuery("[id$=ioHeaderTimeEnd]");
3527    let info_header_street = jQuery("[id$=ioHeaderAddress]");
3528    let info_header_city = jQuery("[id$=ioHeaderCity]");
3529    let info_header_state = jQuery("[id$=ioHeaderState]");
3530    let info_header_zip = jQuery("[id$=ioHeaderZipCode]");
3531    let info_header_phone = jQuery("[id$=ioHeaderPhone]");
3532    let info_header_email = jQuery("[id$=ioHeaderEmail]");
3533
3534    if(getCookie("io_timeStart")) info_header_start_time.val(getCookie("io_timeStart"));
3535    if(getCookie("io_timeEnd")) info_header_end_time.val(getCookie("io_timeEnd"));
3536    if(getCookie("io_dateStart")) info_header_start_date.val(getCookie("io_dateStart"));
3537    if(getCookie("io_dateEnd")) info_header_end_date.val(getCookie("io_dateEnd"));
3538    if(getCookie("io_address")) info_header_street.val(getCookie("io_address"));
3539    if(getCookie("io_city")) info_header_city.val(getCookie("io_city"));
3540    if(getCookie("io_state")) info_header_state.val(getCookie("io_state"));
3541    if(getCookie("io_zip")) info_header_zip.val(getCookie("io_zip"));
3542    if(getCookie("io_phone")) info_header_phone.val(getCookie("io_phone"));
3543    if(getCookie("io_email")) info_header_email.val(getCookie("io_email"));
3544  }
3545
3546  function add_classes_and_onClicks(){
3547
3548    /* First set up for dates */
3549    let info_header_start_date = jQuery("#ioHeaderDateStart");
3550    let info_header_end_date = jQuery("#ioHeaderDateEnd");
3551    info_header_start_date.addClass("ioInfoDatepicker");
3552    info_header_end_date.addClass("ioInfoDatepicker");
3553
3554    /* Now Timepickers */
3555    let info_header_start_time = jQuery("#ioHeaderTimeStart");
3556    let info_header_end_time = jQuery("#ioHeaderTimeEnd");
3557    info_header_start_time.addClass("ioInfoTimepicker");
3558    info_header_end_time.addClass("ioInfoTimepicker");
3559
3560    /* Add the onClick to the button */
3561    let button = jQuery("#ioInfoHeaderSubmit");
3562    button.click(saveInfoHeader);
3563    button.css("cursor", "pointer");
3564
3565    /* Init datepicker and timepickers */
3566    init_date_timepicker_for_info_header();
3567
3568    /* Lastly set the values if they are set already */
3569    set_info_header_values();
3570  }
3571
3572  function remove_set_event_buttton(){
3573    let set_event_button = jQuery(".pageDateRangeWrapper");
3574    if(set_event_button.length > 0) set_event_button.hide();
3575  }
3576
3577  function set_info_header_end_date(){
3578    if(!jQuery("#ioHeaderDateEnd").val()){
3579      jQuery("#ioHeaderDateEnd").val(jQuery("#ioHeaderDateStart").val())
3580    }
3581    jQuery("#ioHeaderDateEnd").datepicker("option", { minDate: new Date(jQuery("#ioHeaderDateStart").val()) });
3582  }
3583
3584  function header_increment_step(){
3585    let active = jQuery(".io-step-active");
3586
3587    switch(active.attr("id")){
3588      case "io-step-1":
3589        if (/Mobi|Android/i.test(navigator.userAgent)) {
3590          jQuery("#io-step-2,#io-step-3,#io-step-4").hide();
3591        }
3592        if(check_header_step_one(active)){
3593          active.removeClass("io-step-active");
3594          active.addClass("io-step-done")
3595          jQuery("#io-step-2").addClass("io-step-active")
3596          header_increment_step();
3597        }
3598        break;
3599      case "io-step-2":
3600        if (/Mobi|Android/i.test(navigator.userAgent)) {
3601          jQuery("#io-step-2,#io-step-3,#io-step-4").show();
3602        }
3603        if(simpleCart.items().length > 0){
3604          active.removeClass("io-step-active");
3605          active.addClass("io-step-done")
3606          jQuery("#io-step-3").addClass("io-step-active")
3607          header_increment_step();
3608        }
3609        break;
3610      case "io-step-3":
3611        if (/Mobi|Android/i.test(navigator.userAgent)) {
3612          jQuery("#io-step-2,#io-step-3,#io-step-4").show();
3613        }
3614        if(document.location.href.indexOf("io_quoteconfirm") >= 0){
3615          active.removeClass("io-step-active");
3616          active.addClass("io-step-done")
3617          jQuery("#io-step-4").addClass("io-step-active")
3618          header_increment_step();
3619        }
3620        break;
3621      case "io-step-4":
3622        if (/Mobi|Android/i.test(navigator.userAgent)) {
3623          jQuery("#io-step-2,#io-step-3,#io-step-4").show();
3624        }
3625        break;
3626    }
3627  }
3628
3629  function check_header_step_one(active) {
3630    var allInputs = active.find('input');
3631
3632    for (var i = 0; i < allInputs.length; i++) {
3633      if (jQuery(allInputs[i]).val() === "") {
3634        return false; // Return false if any input is empty
3635      }
3636    }
3637    return true; // Return true if all inputs have a value
3638  }
3639
3640  /*</editor-fold>*/
3641
3642  /*<editor-fold defaultstate="collapsed" desc="Accessory Click Functions">*/
3643  function accDDClicked(event){
3644    this_element = jQuery(this)
3645    if(!this_element.prop("selected")){
3646      pid = event.data.pid
3647      accLmt = event.data.accLmt
3648      all_elements = jQuery("[id^=io_acc_"+pid+"_]")
3649      let count = 0;
3650      /* Tried using .filter and .length to get the count of selected items but could not make it work. */
3651      for(i = 0; i < all_elements.length; ++i){
3652        if(all_elements[i].selected){
3653          ++count;
3654        }
3655      }
3656      if(accLmt == 0){
3657        this_element.css("border", "5px solid #bbb");
3658        this_element.prop("selected", true);
3659      } else if(count >= accLmt){
3660        let selected_value = jQuery("[id^=io_acc_"+pid+"_]").filter(function() {
3661          return this["selected"];
3662        });
3663        /* be sure to unselect other slected values if our acc limit has been reached. */
3664        selected_value.prop("selected", false);
3665        selected_value.css("border", "1px solid #bbb");
3666      }
3667      this_element.css("border", "5px solid #bbb");
3668      this_element.prop("selected", true);
3669    } else{
3670      this_element.prop("selected", false);
3671      this_element.css("border", "1px solid #bbb");
3672    }
3673  }
3674
3675  /* when accessory choice is clicked */
3676  function accOnClick(acc_select=null){
3677    /* set name/img back to original main in case they are just clicking on a 1st level size option */
3678    jQuery("#bookNowBtn").removeClass("item_add").addClass("item_add_off").trigger("classChange");
3679    jQuery(".io_product_title.item_name").html(main_name_orig);
3680    jQuery(".io_product_container .item_image").first().attr("src",main_img_src);
3681    jQuery(".io_product_container .item_image").first().attr("data-src",main_img_src);
3682    jQuery(".io_product_container .item_encoded").first().html(main_encoded);
3683    jQuery(".io_product_container .io_image_big").first().attr("src",main_img_src);
3684    jQuery(".io_product_container .io_image_big").first().attr("data-src",main_img_src);
3685    let main_id = jQuery(".io_product_container .item_rentalid").first().text();
3686    let main_id_arr = main_id.split(":")
3687    jQuery(".io_product_container .item_rentalid").html(main_id_arr[0]);
3688    let clk_id;
3689    if(jQuery(acc_select).find(":selected").val()){
3690      clk_id = jQuery(acc_select).find(":selected").val().replace("io_acc_shortname_","");
3691    }else{
3692      clk_id = this.id.replace("io_acc_shortname_","");
3693    }
3694    clk_id = clk_id.replace("iothumb_","");
3695    let click_id_arr = clk_id.split("_");
3696    /* let pid = main_id; */
3697    /* if(main_id.split("_").length>1) pid = parseInt(click_id_arr[0]); */
3698    let acc_obj_relate_is_map = acc_obj_relate instanceof Map;
3699    let acc_obj_relate_entries = acc_obj_relate_is_map ? acc_obj_relate.entries() : Object.entries(acc_obj_relate);
3700    for (let [key, value] of acc_obj_relate_entries) {
3701      let id = key;
3702      let children = acc_obj_relate_is_map ? acc_obj_relate.get(key) : value;
3703      if(Object.keys(children).length>0){
3704        for (key2 in children) {
3705          if(Object.keys(children[key2]).length > 0){
3706            /* 3rd level */
3707            for (key3 in children[key2]) {
3708              displayPackageChoices(clk_id,key2,key3,children[key2]);
3709            }
3710          }else{
3711            displayPackageChoices(clk_id,key,key2,children);
3712          }
3713        }
3714      }else{
3715        displayPackageChoices(clk_id,0,id,acc_obj_relate);
3716      }
3717    }
3718  }
3719
3720  /* show/hide accessory levels as needed */
3721  /* clk_id: one they clicked on, pid: parentid, id: iterator, arr: relationship array */
3722  function displayPackageChoices(clk_id,pid,id,arr){
3723    let main_id = jQuery(".io_product_container .item_rentalid").first().text();
3724    let main_arr = main_id.split("_");
3725    if(main_arr.length>1) main_id = parseInt(main_arr[0]);
3726    let click_id_arr = clk_id.split("_");
3727    elem = getAccElem(id,pid);
3728    if(click_id_arr[0]==pid || click_id_arr[1]==pid || pid==0){
3729      elem.style.display="inline-block";
3730    }else{
3731      elem.style.display="none";
3732    }
3733    if(click_id_arr[1]==id && (click_id_arr[0]==pid || (pid==0 && click_id_arr[0]==main_id) ) || (click_id_arr.length==1 && click_id_arr[0]==id)){
3734      jQuery("#bookNowBtn").removeClass("item_add_off").addClass("item_add").trigger("classChange");
3735      updateMainItem(id,pid);
3736    }
3737  }
3738
3739  /* update it with accessory data for choices */
3740  var main_img_src = jQuery("#single_image").first().attr("href");
3741  var main_name_orig = jQuery(".io_product_title.item_name").html();
3742  var main_encoded = jQuery(".io_product_container .item_encoded").html();
3743  var main_desc = jQuery(".io_product_detailbox .io_product_desc").html();
3744  function updateMainItem(id,pid){
3745    /* update add to cart btn, name, img, desc */
3746    let name = "";
3747    let name_enc = "";
3748    let main_id = jQuery(".io_product_container .item_rentalid").first().text();
3749    let main_arr = main_id.split(":");
3750    if(main_arr.length>1) main_id = main_arr[0];
3751    if(pid!=0){
3752      name += jQuery("#io_acc_itemname_"+pid).html()+":";
3753      name_enc += jQuery("#io_acc_itemname_"+pid).html()+":";
3754      name += jQuery("#io_acc_shortname_"+id).html();
3755      name_enc += jQuery("#io_acc_itemname_"+id).html();
3756    }else{
3757      pid = main_id;
3758      name += jQuery("#io_acc_itemname_"+id).html();
3759      name_enc += jQuery("#io_acc_itemname_"+id).html();
3760    }
3761    jQuery(".io_product_container .item_encoded").html(encodeURIComponent(name_enc.replace(/[\u2032\u2019]+/ig,"'")));
3762    jQuery(".io_product_container .item_rentalid").html(main_id+":"+pid+"_"+id);
3763    jQuery(".io_product_title.item_name").html(name);
3764    // Make sure the description actually displays text.
3765    let acc_desc = jQuery("#io_acc_desc_"+pid+"_"+id).first();
3766    if(acc_desc.length>0 && acc_desc.text()){
3767      jQuery(".io_product_container .io_product_desc").first().html(jQuery("#io_acc_desc_"+pid+"_"+id).first()[0].innerHTML);
3768    }
3769
3770    /* swap accessory image with main image pic for drop-down type items (linens) */
3771    let img = jQuery("#io_acc_imgbig_"+pid+"_"+id).first().attr("href");
3772    if(img==null) img = jQuery("#iothumb_"+pid+"_"+id).first().attr("src")
3773    if(img==null){
3774    }else{
3775      if(img.length==0 && pid==main_id){
3776        /* for 1 level dd items that have no img, use the main img */
3777        img = main_img_src;
3778      }
3779      jQuery(".io_product_container .io_image_big").first().attr("src",img);
3780      jQuery(".io_product_container .io_image_big").first().attr("data-src",
3780img);
3781      jQuery(".io_product_container .item_image").first().attr("src",jQuery("#iothumb_"+pid+"_"+id).first().attr("src"));
3782      jQuery(".io_product_container .item_image").first().attr("data-src",jQuery("#iothumb_"+pid+"_"+id).first().attr("src"));
3783
3784      jQuery("#single_image").first().attr("href",img).show();
3785    }
3786    checkAvailFilter();
3787  }
3788
3789  /* get either img or text for accessory choices */
3790  function getAccElem(id,pid){
3791    let path =pid+"_"+id;
3792    if(pid==0){
3793      path=id;
3794    }
3795    let elem = null;
3796    try{
3797      elem = document.querySelector("#ioAccButtonWrapper_"+path);
3798    }catch(e){}
3799    if(elem == null){
3800      try{
3801        elem = document.querySelector("#iothumb_"+path);
3802      }catch(e){}
3803    }
3804    if(elem==null){
3805      try{
3806        elem = document.querySelector("#io_product_acc_pkg_sel_"+pid);
3807      }catch(e){}
3808      if(elem!=null) return elem;
3809    }else{ return elem; }
3810    if(elem == null){
3811      try{
3812        elem = document.querySelector("#io_acc_shortname_"+path);
3813      }catch(e){}
3814    }else if(elem.src=="" | elem.getAttribute("data-src")==""){
3815      try{
3816        elem = document.querySelector("#io_acc_shortname_"+path);
3817      }catch(e){}
3818    }else if(elem.src.substr(-1)=="/"){
3819      try{
3820        elem = document.querySelector("#io_acc_shortname_"+path);
3821      }catch(e){}
3822    }
3823    if(elem==null){
3824      try{
3825        elem = document.querySelector("#io_acc_shortname_"+id);
3826      }catch(e){}
3827    }
3828    return elem;
3829  }
3830
3831  /* create the accessory choice btn (img/text) */
3832  function makeAccBtn(button_add,pid){
3833    let newButton;
3834    if(button_add.nodeName=="IMG"){
3835      newButton = button_add;
3836      let id =  newButton.id.replace("iothumb_"+pid,"");
3837      var wrapper = document.createElement("div");
3838      wrapper.setAttribute("id", "ioAccButtonWrapper_"+pid+id);
3839      wrapper.style.display = "inline-block";
3840      wrapper.appendChild(newButton);
3841      let acc_name = document.createElement("span");
3842      acc_name.style.overflow = "hidden";
3843      acc_name.style.textOverflow = "ellipsis";
3844      acc_name.style.maxWidth = "80px";
3845      acc_name.style.display = "block";
3846      acc_name.style.whiteSpace = "nowrap";
3847      acc_name.textContent = jQuery("#io_acc_shortname"+id).text();
3848      acc_name.classList.add("accTextName");
3849      acc_name.setAttribute("id", "io_acc_shortname_"+pid+id);
3850      wrapper.appendChild(document.createElement("br"));
3851      wrapper.appendChild(acc_name);
3852
3853    }else{
3854      newButton = button_add.cloneNode(true);
3855      let id = newButton.id.replace("io_acc_shortname_","");
3856      newButton.id = "io_acc_shortname_" + pid + "_" + id;
3857    }
3858    newButton.classList.add("elementor-animation-grow");
3859    newButton.classList.remove("item_image");
3860    newButton.style="cursor:pointer;border: solid 1px grey";
3861    newButton.classList.add("io_access_button");
3862    newButton.style.display = "inline-block";
3863    newButton.style.verticalAlign = "top";
3864    newButton.onclick=accOnClick;
3865    if(newButton.nodeName=="IMG"){
3866      newButton.style.minWidth = "80px";
3867      newButton.style.width = "80px";
3868      newButton.style.margin = "2px";
3869      newButton.style.height = "80px";
3870    }else{
3871      newButton.style.margin = "0px 2px 0px 2px";
3872    }
3873    if(button_add.nodeName=="IMG"){
3874      return wrapper
3875    }
3876
3877    return newButton;
3878  }
3879  /* when clicking the thumb swatches under main image (2nd image for an item) */
3880  function updateMainPic(img) {
3881    let container = img.parentElement;
3882    while (container && !container.querySelector(".io_image_big")) {
3883      container = container.parentElement;
3884    }
3885
3886    const main_img = container ? container.querySelector(".io_image_big") : null;
3887    if (!main_img) return;
3888
3889    const dataBigSrc = img.getAttribute("data-big-src");
3890    if (dataBigSrc) {
3891      main_img.src = dataBigSrc;
3892      return;
3893    }
3894
3895    let thumb_id = img.id;
3896    let big_id = thumb_id.replace("thumb", "big");
3897    const img_big = document.getElementById(big_id);
3898
3899    if (img_big && img_big.href) {
3900      main_img.src = img_big.href;
3901    }
3902  }
3903  /*</editor-fold>*/
3904
3905  /*<editor-fold defaultstate="collapsed" desc="Calendar Functions">*/
3906  function calApply() {
3907    /* reset timeslots if filtering is on */
3908    filterTimeslotsByDay_itemTimeslots();
3909    simpleCart.update();
3910
3911    /* Prevent zero-duration selection: disallow identical start and end date/time */
3912    try
3913    {
3914      var ds = jQuery("input[name=dateStart]").val();
3915      var de = jQuery("input[name=dateEnd]").val();
3916      var ts = jQuery("input[name=timeStart]").val();
3917      var te = jQuery("input[name=timeEnd]").val();
3918      if(ts && te && ds && de)
3919      {
3920        var s24 = convert12HourTo24Hour(ts);
3921        var e24 = convert12HourTo24Hour(te);
3922        var sObj = buildDateObj(ds.split("/"), s24);
3923        var eObj = buildDateObj(de.split("/"), e24);
3924        if(sObj && eObj && typeof sObj.getTime === 'function' && typeof eObj.getTime === 'function')
3925        {
3926          if(eObj.getTime() === sObj.getTime())
3927          {
3928            alert("Please choose an end time that's after the start time.");
3929            jQuery("input[name=timeEnd]").val("");
3930            return false;
3931          }
3932        }
3933      }
3934    }catch(e){}
3935
3936    if(cart_times_all_set()){
3937      ioCartLoaderActivate();
3938      setCookie("io_dateApplied", "true", 1)
3939      checkAvailAll();
3940      // If no availability calls were made, hide loader shortly after
3941      setTimeout(function()
3942      {
3943        if(io_cart_loading_active && io_cart_loading_count === 0)
3944        {
3945          io_cart_loading_active = false;
3946          ioCartShowOverlay(false);
3947        }
3948      }, 300);
3949      calCancel();
3950    }
3951
3952
3953    let io_required_data = io_info_required_data;
3954    for (const [data, value] of Object.entries(io_required_data)) {
3955      if(value == 1){
3956        setCookie(data, jQuery("#io_im_"+data).val(), 14);
3957      }
3958    }
3959
3960    /* Check if information gathering header exists. If it does, update the times on there. */
3961    if(jQuery("#ioInfoHeader").length){
3962      jQuery("#ioHeaderTimeStart").val(jQuery("[name=timeStart]").val());
3963      jQuery("#ioHeaderTimeEnd").val(jQuery("[name=timeEnd]").val());
3964      jQuery("#ioHeaderDateStart").val(jQuery("[name=dateStart]").val());
3965      jQuery("#ioHeaderDateEnd").val(jQuery("[name=dateEnd]").val());
3966      header_increment_step();
3967    }
3968
3969    show_or_hide_required_info_message()
3970    /* if(!cartStayOpen) cartHide(); */
3971  }
3972
3973  function calCancel() {
3974    click_count = 0;
3975    start_date = getCookie("io_dateStart");
3976    end_date = getCookie("io_dateEnd");
3977    start_time = getCookie("io_timeStart");
3978    end_time = getCookie("io_timeEnd");
3979    jQuery("input[name=dateStart]").val(start_date);
3980    jQuery("input[name=dateEnd]").val(end_date);
3981    if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day" && getCookie("io_company_timeslot_selected")){
3982      jQuery(".ioCartCompanyTimeslots").val(getCookie("io_company_timeslot_selected"));
3983    } else{
3984      jQuery("input[name=timeStart]").val(start_time);
3985      jQuery("input[name=timeEnd]").val(end_time);
3986    }
3987    setCalBackground();
3988
3989    jQuery(".ioDateRange").html(smartFormatDateRange())
3990    jQuery("#cartCalendar, #cartTimePicker").hide();
3991    jQuery(".ioDateRange").show();
3992    jQuery(".changeDateLinkWrapper").show();
3993  }
3994
3995  /* var cartStayOpen = false; */
3996  function calSetDateRange(stayOpen) {
3997    /*
3998        if(stayOpen==1){
3999            cartStayOpen = true;
4000        }else{
4001            cartStayOpen = false;
4002        }
4003        */
4004    jQuery(".changeDateLinkWrapper").hide();
4005    jQuery("#cartCalendar, #cartTimePicker").show();
4006    jQuery("#cartDateRange").hide();
4007  }
4008
4009  function smartFormatDateRange() {
4010    let start_date = jQuery("input[name=dateStart]").val();
4011    let end_date = jQuery("input[name=dateEnd]").val();
4012    if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day"){
4013      let cart_company_timeslot_selected = jQuery(".ioCartCompanyTimeslots option:selected").first().val();
4014      if(cart_company_timeslot_selected){
4015        setCookie("io_company_timeslot_selected", cart_company_timeslot_selected, 14);
4016        cart_company_timeslot_selected = cart_company_timeslot_selected.split("-");
4017        var start_time = cart_company_timeslot_selected[0].trim();
4018        var end_time = cart_company_timeslot_selected[1].trim();
4019      }
4020    } else {
4021      var start_time = jQuery("input[name=timeStart]").val();
4022      var end_time = jQuery("input[name=timeEnd]").val();
4023    }
4024
4025    let text = "";
4026    text = start_date;
4027    if(io_hidetimes!="on") text += " " + start_time;
4028
4029    if (start_date == end_date) {
4030      if(io_hidetimes!="on"){
4031        text += "  <i class='fas fa-arrow-right' style='padding:5px;'></i> ";
4032        text += end_time;
4033      }
4034    } else {
4035      text += "  <i class='fas fa-arrow-right' style='padding:5px;'></i> ";
4036      text += end_date;
4037      if(io_hidetimes!="on") text += " " + end_time;
4038    }
4039    /* text += "  <i class='fas fa-pencil-alt' style='margin-left:9px;color:"+pallet_color1+";'></i> "; */
4040
4041    return text;
4042  }
4043
4044
4045  function resetCalButtons() {
4046    jQuery("#cartCalendar .ui-datepicker-prev").addClass("fas fa-arrow-left").css("color", pallet_color1);
4047    jQuery("#cartCalendar .ui-datepicker-next").addClass("fas fa-arrow-right").
4047css("color", pallet_color1);
4048  }
4049
4050  function cal_onChangeMonthYear(year, month, obj) {
4051    setTimeout(resetCalButtons, 10);
4052    setTimeout(setCalBackground, 10);
4053  }
4054
4055  function cal_onSelect(dateText, obj) {
4056    setTimeout(resetCalButtons, 10);
4057    let whatday_choice = "";
4058    if(io_cartdayselect === "dropdown_options" && io_multidayquote === "on"){
4059      let choice_obj = jQuery("#whatday");
4060      if(choice_obj){
4061        whatday_choice = choice_obj.val();
4062      }
4063    }
4064
4065    click_count++;
4066    end_timepicker = jQuery("input[name=timeEnd]");
4067    let timeStart = jQuery("input[name=timeStart]").val();
4068    if(io_force_blank_timepickers != "on")
4069    {
4070      if (timeStart == "") {
4071        jQuery("input[name=timeStart]").val(start_default);
4072        jQuery("input[name=timeEnd]").val(end_default);
4073      }
4074    }
4075
4076    if (click_count == 1 || !multi_day || whatday_choice==="Same Day" || whatday_choice==="Overnight") {
4077      jQuery("input[name=dateStart]").val(dateText);
4078      jQuery("input[name=dateEnd]").val(dateText)
4079      end_timepicker.timepicker("option",{"minTime": jQuery("input[name=timeStart]").val()});
4080      if(EndTimeLessThanStartTime(
4081              jQuery("input[name=timeStart]").val(),
4082              end_timepicker.val(),
4083              jQuery("[name='dateStart']").val(),
4084              jQuery("[name='dateEnd']").val() ) ) {
4085        end_timepicker.val("");
4086      }
4087      if(io_cartAllowSameDay == "on"){
4088        restrictStartTimepickerOnSameDaySelect(dateText, jQuery("input[name=timeStart]"), end_timepicker);
4089      }
4090    } else if (click_count == 2) {
4091      jQuery("input[name=dateEnd]").val(dateText);
4092      let start_date_str = jQuery("input[name=dateStart]").val();
4093      let start_date_obj = convertDateStringtoDateObject(start_date_str);
4094      let end_date_obj = convertDateStringtoDateObject(dateText);
4095      if(end_date_obj < start_date_obj){
4096        jQuery("input[name=dateStart]").val(dateText);
4097        if(io_cartAllowSameDay == "on"){
4098          restrictStartTimepickerOnSameDaySelect(dateText, jQuery("input[name=timeStart]"), end_timepicker);
4099        }
4100      } else{
4101        end_timepicker.timepicker("option",{"minTime": io_restrict_time_start});
4102      }
4103      click_count = 0;
4104    } else {
4105      click_count = 0;
4106    }
4107    //custom code for suncoast_event
4108    if(io_cartdayselect === "dropdown_options" && io_multidayquote === "on"){
4109      endDisplay();
4110      //daysSelect();
4111    }
4112    filterTimeslotsByDay_companyTimeslots();
4113
4114    setTimeout(setCalBackground, 10);
4115  }
4116
4117  function endDisplay(){
4118    //todo: need to figure out if these work and set triggers
4119    // trigger enddisplay after date is selected or possibly when dateEnd changes?
4120    let choice = jQuery("#whatday").val();
4121
4122    setCookie("io_whatday", choice, 14);
4123    let dateStart = jQuery("[name=dateStart]");
4124    let timeStart = jQuery("[name=timeStart]");
4125    let dateEnd = jQuery("[name=dateEnd]");
4126    let timeEnd = jQuery("[name=timeEnd]");
4127    if(choice==='Overnight'){
4128      let startdate = dateStart.val();
4129      let starttime = io_overnightPickupTime;
4130      let endcalc_date_obj = new Date(buildDateobjectstring(startdate,dateFormat,starttime));
4131      let duration_hrs = 24;
4132      let end_date_obj = new Date(endcalc_date_obj.getTime()+duration_hrs*60*60*1000);
4133      if(!isNaN(end_date_obj)){
4134        dateEnd.val(getFormatteddate(end_date_obj));
4135        timeEnd.val(getFormattedtime(end_date_obj));
4136        timeEnd.attr('readonly','readonly');
4137      }
4138    }else if(choice==='Multi-Day'){
4139      let startdate = dateStart.val();
4140      let starttime = timeStart.val() || start_default;
4141      let start_date_obj = new Date(buildDateobjectstring(startdate, dateFormat, starttime));
4142      if(!isNaN(start_date_obj)){
4143        //dateEnd.val(getFormatteddate(start_date_obj));
4144        let cal = jQuery("#cartCalendar");
4145        let origOnSelect = cal.datepicker("option", "onSelect");
4146        cal.datepicker("option", "onSelect", null);
4147        cal.datepicker("setDate", start_date_obj);
4148        cal.datepicker("option", "onSelect", origOnSelect);
4149      }
4150      timeEnd.removeAttr('readonly');
4151      if(io_force_blank_timepickers == "on" && !timeEnd.val()){
4152        timeEnd.val("");
4153      } else if(!timeEnd.val()){
4154        timeEnd.val(end_default);
4155      }
4156    }else{
4157      let startdate = dateStart.val();
4158      let starttime = timeStart.val() || start_default;
4159      let start_date_obj = new Date(buildDateobjectstring(startdate, dateFormat, starttime));
4160      if(!isNaN(start_date_obj)){
4161        dateEnd.val(getFormatteddate(start_date_obj));
4162        let cal = jQuery("#cartCalendar");
4163        let origOnSelect = cal.datepicker("option", "onSelect");
4164        cal.datepicker("option", "onSelect", null);
4165        cal.datepicker("setDate", start_date_obj);
4166        cal.datepicker("option", "onSelect", origOnSelect);
4167      }
4168      timeEnd.removeAttr('readonly');
4169      if(io_force_blank_timepickers == "on"  && !timeEnd.val()){
4170        timeEnd.val("");
4171      } else if(!timeEnd.val()){
4172        timeEnd.val(end_default);
4173      }
4174      click_count = 0;
4175    }
4176    setTimeout(setCalBackground, 10);
4177  }
4178  function setCalBackground() {
4179    let dateStart_string = jQuery("input[name=dateStart]").val();
4180    let dateEnd_string = jQuery("input[name=dateEnd]").val();
4181
4182    if (dateFormat == "d/m/yy") {
4183      let dateStartArray = dateStart_string.split("/");
4184      let dateEndArray = dateEnd_string.split("/");
4185      var dateStart = new Date(dateStartArray[2], Number(dateStartArray[1])-1, dateStartArray[0]);
4186      var dateEnd = new Date(dateEndArray[2], Number(dateEndArray[1])-1, dateEndArray[0]);
4187    } else {
4188      var dateStart = new Date(dateStart_string);
4189      var dateEnd = new Date(dateEnd_string);
4190    }
4191
4192
4193    let sday = dateStart.getDate();
4194    let smonth = dateStart.getMonth();
4195    let syear = dateStart.getFullYear();
4196
4197    let eday = dateEnd.getDate();
4198    let emonth = dateEnd.getMonth();
4199    let eyear = dateEnd.getFullYear();
4200
4201    /* clear any (in case of cancel) */
4202    jQuery(".ui-datepicker-calendar [data-handler=selectDay]").css("background-color","initial");
4203
4204    /* set the selected ones */
4205    jQuery("#cartCalendar [data-month=" + smonth + "][data-year=" + syear + "], #cartCalendar [data-month=" +
4206            emonth + "][data-year=" + eyear + "]").each(function (i) {
4207      let cday = jQuery(this).find("a").first().text();
4208      let cmonth = jQuery(this).attr("data-month");
4209      let cyear = jQuery(this).attr("data-year");
4210      /* let dateCurrent = new Date(Date.UTC(cyear,cmonth,cday,12)); */
4211      let dateCurrent = new Date(cyear, cmonth, cday);
4212      if (click_count == 1 && dateEnd_string.length == 0) dateEnd = dateStart;
4213      if (dateCurrent.getTime() == dateStart.getTime() && dateCurrent.getTime() == dateEnd.getTime()) {
4214        jQuery(this).css("border-radius", "6px 6px 6px 6px");
4215      } else if (dateCurrent.getTime() == dateStart.getTime()) {
4216        jQuery(this).css("border-radius", "6px 0 0 6px");
4217      } else if (dateCurrent.getTime() == dateEnd.getTime()) {
4218        jQuery(this).css("border-radius", "0 6px 6px 0");
4219      }
4220
4221      if (dateCurrent >= dateStart && dateCurrent <= dateEnd) {
4222        jQuery(this).css("background-color", pallet_color1);
4223      }
4224
4225
4226    });
4227  }
4228  /*</editor-fold>*/
4229
4230  /*<editor-fold defaultstate="collapsed" desc="Timeslot/Timepicker Functions">*/
4231  /* called from simplecart */
4232  function timeslotChange(){
4233    checkAvailCartTimeslots();
4234  }
4235  function filterTimeslotsByDay_companyTimeslots(){
4236    var weekday = new Array();
4237    weekday[0] = "Sunday";
4238    weekday[1] = "Monday";
4239    weekday[2] = "Tuesday";
4240    weekday[3] = "Wednesday";
4241    weekday[4] = "Thursday";
4242    weekday[5] = "Friday";
4243    weekday[6] = "Saturday";
4244
4245    let times = getAvailTimes();
4246    let start_date = times[0];
4247    var newDate1 = convertDateStringtoDateObject(start_date);
4248    let day = weekday[new Date(newDate1).getDay()];
4249
4250    let selected_option_label = jQuery(".ioCartCompanyTimeslots option:selected").first().text().toLowerCase();
4251    if(optionHasDay(weekday, selected_option_label)){
4252      if(selected_option_label.indexOf(day.toLowerCase()) === -1){
4253        jQuery(".ioCartCompanyTimeslots").val("");
4254      }
4255    }
4256    if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day"){
4257      jQuery(".ioCartCompanyTimeslots > option").each(function() {
4258        if(optionHasDay(weekday, this.text.toLowerCase())){
4259          for(i=0; i<weekday.length; ++i){
4260            if(day.toLowerCase() == weekday[i].toLowerCase() && this.text.toLowerCase().indexOf(day.toLowerCase()) !== -1){
4261              jQuery(this).show();
4262              day_missing = false;
4263            } else if(day.toLowerCase() != weekday[i].toLowerCase() && this.text.toLowerCase().indexOf(day.toLowerCase()) === -1){
4264              jQuery(this).hide();
4265            }
4266          }
4267        }
4268      });
4269    }
4270  }
4271
4272  function filterTimeslotsByDay_itemTimeslots(){
4273    var weekday = new Array();
4274    weekday[0] = "Sunday";
4275    weekday[1] = "Monday";
4276    weekday[2] = "Tuesday";
4277    weekday[3] = "Wednesday";
4278    weekday[4] = "Thursday";
4279    weekday[5] = "Friday";
4280    weekday[6] = "Saturday";
4281
4282    let times = getAvailTimes();
4283    let start_date = times[0];
4284    var newDate1 = convertDateStringtoDateObject(start_date);
4285    let day = weekday[new Date(newDate1).getDay()];
4286
4287    simpleCart.each(function (item, x) {
4288      var timeslots_html = item.get('timeslots');
4289      if(typeof timeslots_html != "undefined" && jQuery.parseHTML(timeslots_html)[0].nodeName == "SELECT"){
4290        if(timeslots_html.length > 0){
4291          var timeslot_name = getTimeslotName(timeslots_html);
4292          if(typeof item.get("timeslots-orig") == "undefined"){
4293            var timeslots_obj = jQuery.parseHTML(timeslots_html);
4294          } else{
4295            var timeslots_obj = jQuery.parseHTML(item.get('timeslots-orig'));
4296          }
4297          jQuery(timeslots_obj).find("option").each(function(){
4298            if(optionHasDay(weekday, this.text.toLowerCase())){
4299              for(i=0; i<weekday.length; ++i){
4300                if(day.toLowerCase() == weekday[i].toLowerCase() && this.text.toLowerCase().indexOf(day.toLowerCase()) !== -1){
4301                  /* jQuery(this).show(); */
4302                } else if(day.toLowerCase() != weekday[i].toLowerCase() && this.text.toLowerCase().indexOf(day.toLowerCase()) === -1){
4303                  jQuery(this).remove();
4304                }
4305              }
4306            }
4307          });
4308          if(typeof item.get("timeslots-orig") == "undefined") item.set("timeslots-orig",item.get("timeslots"));
4309          item.set("timeslots",'<select class="simpleCart_timeslots" name="'+timeslot_name+'">'+jQuery(timeslots_obj).html()+'</select>');
4310        }
4311      }
4312    });
4313  }
4314
4315  function optionHasDay(weekdays, option_label){
4316    for(i=0; i<weekdays.length; ++i){
4317      if(option_label.indexOf(weekdays[i].toLowerCase()) !== -1){
4318        return true;
4319      }
4320    }
4321    return false;
4322  }
4323
4324  function getTimeslotName(timeslots_html){
4325    if(typeof timeslots_html=="undefined") return "";
4326    var timeslot_name_s = timeslots_html.indexOf('name="');
4327    timeslot_name_s += 6;
4328    var timeslot_name_e = timeslots_html.indexOf('"',timeslot_name_s);
4329    var timeslot_name = timeslots_html.substr(timeslot_name_s,timeslot_name_e-timeslot_name_s);
4330    return timeslot_name;
4331  }
4332  function setTimeslotSelected(item, timeslot_name){
4333    jQuery(".item-timeslots [name=\""+timeslot_name+"\"] option").not(":selected").removeAttr("selected");
4334    jQuery(".item-timeslots [name=\""+timeslot_name+"\"] option:selected").attr("selected","selected");
4335    if(jQuery(".item-timeslots [name=\""+timeslot_name+"\"]").length>0){
4336      item.set("timeslots",jQuery(".item-timeslots [name=\""+timeslot_name+"\"]")[0].outerHTML);
4337    }
4338
4339    /* set on quote page */
4340    jQuery(".controls [name=\""+timeslot_name+"\"] option").not(":selected").removeAttr("selected");
4341    jQuery(".controls [name=\""+timeslot_name+"\"] option[value='"+jQuery(".item-timeslots [name=\""+timeslot_name+"\"] option:selected").val()+"']").attr("selected","selected");
4342  }
4343
4344  function setTimePicker(item, timepicker_name){
4345    let [start_timepicker, end_timepicker] = get_cart_timepickers(timepicker_name);
4346    let start_time = start_timepicker.value;
4347    let end_time = end_timepicker.value;
4348
4349    if(!start_time){
4350      start_timepicker.style.borderColor = "red";
4351    } else{
4352      start_timepicker.style.borderColor = "";
4353    }
4354    if(!end_time){
4355      end_timepicker.style.borderColor = "red";
4356    } else{
4357      end_timepicker.style.borderColor = "";
4358    }
4359
4360    let start_timepicker_html = start_timepicker.outerHTML;
4361    let end_timepicker_html = end_timepicker.outerHTML;
4362    if(document.querySelectorAll(".item-timeslots [name=\""+timepicker_name+"\"]").length>0){
4363      start_timepicker_html = addOrReplaceValueInTimepicker(start_timepicker_html, start_time);
4364      end_timepicker_html = addOrReplaceValueInTimepicker(end_timepicker_html, end_time);
4365      item.set("timeslots", '<div name="'+timepicker_name+'"> Start: '+start_timepicker_html+' End: '+end_timepicker_html+'</div>');
4366    }
4367    /* set on quote page */
4368    /* For linen type items with timepickers */
4369    let rental_id = item.get("rentalid");
4370    let split_on_colon = rental_id.split(":");
4371    if(split_on_colon.length > 1){
4372      fix_time_name_for_linen_rid(timepicker_name, split_on_colon, start_time, end_time, rental_id)
4373    }else{
4374      let quote_page_start_timepicker = document.querySelectorAll(".controls [name=\""+timepicker_name.replace("io_timepicker_", "starttime_")+"\"]")[0];
4375      let quote_page_end_timepicker = document.querySelectorAll(".controls [name=\""+timepicker_name.replace("io_timepicker_", "endtime_")+"\"]")[0];
4376      if(quote_page_start_timepicker != null && quote_page_end_timepicker != null){
4377        quote_page_start_timepicker.value = start_time;
4378        quote_page_end_timepicker.value = end_time;
4379      }
4380    }
4381  }
4382
4383  function fix_time_name_for_linen_rid(time_name, split_rid, start_time, end_time, rental_id){
4384    for(let x = 0; x < split_rid.length; x++){
4385      temp_timepicker_name = time_name.replace(rental_id, split_rid[x]);
4386      let quote_page_start_timepicker = document.querySelectorAll(".controls [name=\""+temp_timepicker_name.replace("io_timepicker_", "starttime_")+"\"]")[0];
4387      let quote_page_end_timepicker = document.querySelectorAll(".controls [name=\""+temp_timepicker_name.replace("io_timepicker_", "endtime_")+"\"]")[0];
4388      if(quote_page_start_timepicker != null && quote_page_end_timepicker != null){
4389        quote_page_start_timepicker.value = start_time;
4390        quote_page_end_timepicker.value = end_time;
4391      }
4392    }
4393  }
4394
4395  function addOrReplaceValueInTimepicker(timepicker_html, time_value){
4396    if(timepicker_html.includes("value=")){
4397      timepicker_html = [timepicker_html.slice(0, timepicker_html.indexOf("value=")), 'value="'+time_value+'"', timepicker_html.slice(timepicker_html.length-1)].join("");
4398    }else{
4399      /* No value defined. Add it at the end of the outer html. */
4400      let position = timepicker_html.lastIndexOf(">");
4401      timepicker_html = [timepicker_html.slice(0, position), ' value="'+time_value+'"', timepicker_html.slice(position)].join("");
4402    }
4403    return timepicker_html
4404  }
4405
4406  function restrictEndTimepickers(){
4407    setUpTimeRestrictions_cartTimepickers()
4408    setUpTimeRestrictions_timeBasedItems()
4409  }
4410
4411  function setUpTimeRestrictions_timeBasedItems(){
4412    jQuery("input[name^=start_timeslot_]").change(function()
4413    {
4414      end_timepicker = jQuery("input[name='"+this.name.replace("start", "end")+"']");
4415      end_timepicker = jQuery(end_timepicker[end_timepicker.length - 1]);
4416      end_timepicker.timepicker("option",{"minTime": jQuery(this).val()});
4417      if( EndTimeLessThanStartTime( jQuery(this).val(), end_timepicker.val(), "0/0/0", "0/0/0" ) ){
4418        end_timepicker.val("");
4419      }
4420    });
4421  }
4422
4423  function setUpTimeRestrictions_cartTimepickers(){
4424    jQuery("input[name=timeStart]").change(function()
4425    {
4426      end_timepicker = jQuery("[name='"+this.name.replace("Start", "End")+"']");
4427      if(jQuery("[name='dateStart']").val() === jQuery("input[name='dateEnd']").val()){
4428        end_timepicker.timepicker("option",{"minTime": jQuery(this).val()});
4429        if(EndTimeLessThanStartTime(
4430                jQuery(this).val(),
4431                end_timepicker.val(),
4432                jQuery("[name='dateStart']").val(),
4433                jQuery("[name='dateEnd']").val() ) ) {
4434          end_timepicker.val("");
4435        }
4436      }
4437    });
4438  }
4439
4440  function setUpTimeRestrictions_infoHeaderTimepickers(){
4441    jQuery("#ioHeaderTimeStart").change(function()
4442    {
4443      end_timepicker = jQuery("#ioHeaderTimeEnd");
4444      if(jQuery("#ioHeaderDateStart").val() === jQuery("#ioHeaderDateEnd").val()){
4445        end_timepicker.timepicker("option",{"minTime": jQuery(this).val()});
4446        if(EndTimeLessThanStartTime(
4447                jQuery(this).val(),
4448                end_timepicker.val(),
4449                jQuery("#ioHeaderDateStart").val(),
4450                jQuery("#ioHeaderDateEnd").val() ) ) {
4451          end_timepicker.val("");
4452        }
4453      }
4454    });
4455  }
4456
4457  /*
4458        helper function to see if the value from a start timepicker is less than the string value of an end timepicker.
4459
4460        param start_time: string representation of the start time picker. 12hr or 24hr.
4461        param end_time: string representation of the end time picker. 12hr or 24hr.
4462        param start_date: string representation of the start date, seperated by "/". Can be wither d/m/y or m/d/y. Pass "0/0/0" if dates do not matter.
4463        param end_date: string representation of the end date, seperated by "/". Can be wither d/m/y or m/d/y. Pass "0/0/0" if dates do not matter.
4464
4465  */
4466  function EndTimeLessThanStartTime(start_time, end_time, start_date, end_date){
4467    if(!start_time || !end_time) return false;
4468    start_time = convert12HourTo24Hour(start_time);
4469    end_time = convert12HourTo24Hour(end_time);
4470    var split_start_date = start_date.split("/");
4471    var split_end_date = end_date.split("/");
4472    var startDate = buildDateObj(split_start_date, start_time);
4473    var endDate = buildDateObj(split_end_date, end_time);
4474    if(endDate < startDate){
4475      return true;
4476    } else {
4477      return false;
4478    }
4479  }
4480  function get_cart_timepickers(timepicker_name){
4481    let start_timepicker = document.getElementsByName(timepicker_name.replace("io_timepicker_", "start_timeslot_"));
4482    let end_timepicker = document.getElementsByName(timepicker_name.replace("io_timepicker_", "end_timeslot_"));
4483    start_timepicker = start_timepicker[start_timepicker.length-1];
4484    end_timepicker = end_timepicker[end_timepicker.length-1];
4485    return Array(start_timepicker, end_timepicker);
4486  }
4487  function restrictStartTimepickerOnSameDaySelect(start_date_str, start_timepicker, end_timepicker){
4488    let selected_date_obj = convertDateStringtoDateObject(start_date_str);
4489    let current_date_obj = new Date();
4490    if(current_date_obj.getDate()  == selected_date_obj.getDate() &&
4491            current_date_obj.getMonth() == selected_date_obj.getMonth() &&
4492            current_date_obj.getYear()  == selected_date_obj.getYear()){
4493      let next_hour_time_stamp = current_date_obj.setMinutes(60);
4494      let next_hour_str = getFormattedtime(new Date(next_hour_time_stamp))
4495      start_timepicker.timepicker("option",{"minTime": next_hour_str});
4496
4497      /* If the time in the input box is less than the time we just restricted too, then clear time inputs */
4498      restricted_time_obj = convertDateStringtoDateObject(start_date_str, next_hour_str);
4499      currently_selected_time_obj = convertDateStringtoDateObject(start_date_str, start_timepicker.val());
4500      if(currently_selected_time_obj < restricted_time_obj){
4501        start_timepicker.val(next_hour_str);
4502        end_timepicker.val("");
4503        end_timepicker.timepicker("option",{"minTime": next_hour_str});
4504      }
4505    }else{
4506      start_timepicker.timepicker("option",{"minTime": restrictTimeStart});
4507    }
4508  }
4509  /*</editor-fold>*/
4510
4511  /*<editor-fold defaultstate="collapsed" desc="Simple Cart Bound Functions">*/
4512  function cart_onUpdate() {
4513    /* need slight delay so simplecart updates before this runs */
4514    setTimeout(cart_onUpdate2, 500);
4515    try{
4516      for(var i=0;i<document.getElementsByClassName("ioCart").length;i++){
4517        document.getElementsByClassName("ioCart")[i].setAttribute("cnt", simpleCart.items().length);
4518      }
4519    }catch(e){}
4520  }
4521
4522  function cart_onUpdate2() {
4523    jQuery("#cartSubtotal").html(simpleCart.toCurrency(simpleCart.total()));
4524    if(io_checkavail=="off") return;
4525    jQuery("#cartWarning").hide();
4526    let hasUnavail = false;
4527    gift_cards_only = false;
4528    simpleCart.each(function (item, x) {
4529      let item_id = item.get("id");
4530      var giftCardValue = item.get("giftcardvalue");
4531      if (giftCardValue && giftCardValue.trim()) {
4532        gift_cards_only = true;
4533      }
4534      let avail = 0;
4535      let stop_loop = false;
4536      if (item.get("availability") != null) avail = item.get("availability").replace(" available", "");
4537      let quantity = Number(item.get("quantity"));
4538      if(item.get("inputtype") == "Map"){
4539        quantity = 1
4540      }
4541      if(typeof item.get("availability") != 'undefined'){
4542        if (quantity > Number(avail) || avail == "not") {
4543          /* item.set("availability","<span style=color:red>"+item.get("availability")+"</span>"); */
4544          setTimeout(function () {
4545            jQuery("#cartItem_" + item_id + " .item-availability").css("color", "red")
4546          }, 10);
4547          //jQuery("#cartWarning").show();
4548          stop_loop = display_cart_warning(item);
4549          hasUnavail = true;
4550        } else {
4551          jQuery("#cartItem_" + item_id + " .item-availability").css("color", "inherit");
4552        }
4553      }else{
4554        event_times = getAvailTimes();
4555        if(!event_times[0] || !event_times[1]){
4556          jQuery("#cartWarning").text("Please set the date and time for your event above.");
4557          jQuery("#cartWarning").show()
4558        }
4559      }
4560
4561      var timeslots_html = item.get("timeslots");
4562      if(typeof timeslots_html != "undefined"){
4563        if(timeslots_html.length > 0){
4564          var timeslot_name = getTimeslotName(timeslots_html);
4565          if(timeslots_html.indexOf("<select") >= 0){
4566            setTimeslotSelected(item, timeslot_name);
4567          }else{
4568            setTimePicker(item, timeslot_name);
4569          }
4570        }
4571      }
4572      if(stop_loop){
4573        return false;
4574      }
4575    });
4576
4577    if(gift_cards_only){
4578      jQuery("#cartCalendarTimePickerContainer").hide();
4579    }else{
4580      jQuery("#cartCalendarTimePickerContainer").show();
4581    }
4582
4583    if(hasUnavail && io_checkavail!="off"){
4584      jQuery(".simpleCart_checkout").removeClass("simpleCart_checkout").addClass("simpleCart_checkout_off").trigger("classChange").click(cartShow);
4585    }else if(io_checkavail!="off"){
4586      jQuery(".simpleCart_checkout_off").removeClass("simpleCart_
4586checkout_off").addClass("simpleCart_checkout").trigger("classChange");
4587    }
4588
4589    add_cart_buttons = document.querySelectorAll("[class*=add_cart_]");
4590    if(add_cart_buttons){
4591      for(let i = 0; i < add_cart_buttons.length; ++i){
4592        add_cart_buttons[i].innerHTML = add_cart_buttons[i].innerHTML.replace("fa-cart-arrow-down", "fa-shopping-cart");
4593        add_cart_buttons[i].innerHTML = add_cart_buttons[i].innerHTML.replace("Added to Cart", "Add to Cart");
4594        add_cart_buttons[i].style.filter = "brightness(100%)";
4595        simpleCart.each(function (item, x) {
4596          if( add_cart_buttons[i].className.includes( item.get("rentalid") ) ){
4597            add_cart_buttons[i].innerHTML = add_cart_buttons[i].innerHTML.replace("fa-shopping-cart", "fa-cart-arrow-down");
4598            add_cart_buttons[i].innerHTML = add_cart_buttons[i].innerHTML.replace("Add to Cart", "Added to Cart");
4599            add_cart_buttons[i].style.filter = "brightness(90%)";
4600          }
4601        });
4602      }
4603    }
4604
4605    /* init time-based items */
4606    if(document.location.href.indexOf("io_quoteform") == -1){
4607      let today = new Date();
4608      let io_dd = today.getDate();
4609      let io_mm = today.getMonth() + 1;
4610      let io_yyyy = today.getFullYear();
4611      if(restrictTimes){
4612        jQuery(".item-timeslots .timepicker").each( function() {
4613          if(this.name.includes("end")){
4614            start_timepicker = jQuery("input[name='"+this.name.replace("end", "start")+"']");
4615            start_timepicker = jQuery(start_timepicker[start_timepicker.length - 1]);
4616
4617            if (io_force_blank_timepickers == "on")
4618            {
4619              start_timepicker.val("");
4620              jQuery(this).timepicker({
4621                startTime: "",
4622                endTime:   "",
4623                minTime:   restrictTimeStart,
4624                maxTime:   restrictTimeEnd,
4625                timeFormat: timeFormat,
4626                separator:  ":",
4627                className:  "elementor-widget-text-editor",
4628                step: 15,
4629                disableTouchKeyboard: true
4630              });
4631            }
4632            else
4633            {
4634              // Existing logic if "force blank" is not active
4635              if (start_timepicker.val() != "") {
4636                jQuery(this).timepicker({
4637                  startTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + start_default),
4638                  endTime:   new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + end_default),
4639                  minTime:   start_timepicker.val(),
4640                  maxTime:   restrictTimeEnd,
4641                  timeFormat: timeFormat,
4642                  separator:  ":",
4643                  className:  "elementor-widget-text-editor",
4644                  step: 15,
4645                  disableTouchKeyboard: true
4646                });
4647              } else {
4648                jQuery(this).timepicker({
4649                  startTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + start_default),
4650                  endTime:   new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + end_default),
4651                  minTime:   restrictTimeStart,
4652                  maxTime:   restrictTimeEnd,
4653                  timeFormat: timeFormat,
4654                  separator:  ":",
4655                  className:  "elementor-widget-text-editor",
4656                  step: 15,
4657                  disableTouchKeyboard: true
4658                });
4659              }
4660            }
4661
4662          }
4663          else {
4664            if (io_force_blank_timepickers == "on")
4665            {
4666              start_timepicker.val("");
4667              jQuery(this).timepicker({
4668                startTime: "",
4669                endTime:   "",
4670                minTime:   restrictTimeStart,
4671                maxTime:   restrictTimeEnd,
4672                timeFormat: timeFormat,
4673                separator:  ":",
4674                className:  "elementor-widget-text-editor",
4675                step: 15,
4676                disableTouchKeyboard: true
4677              });
4678            }
4679            else
4680            {
4681              jQuery(this).timepicker({
4682                startTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + start_default),
4683                endTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + end_default),
4684                minTime:restrictTimeStart,
4685                maxTime:restrictTimeEnd,
4686                timeFormat: timeFormat,
4687                separator: ":",
4688                className: "elementor-widget-text-editor",
4689                step: 15,
4690                disableTouchKeyboard: true
4691              });
4692            }
4693          }
4694        });
4695      } else{
4696        jQuery(".item-timeslots .timepicker").each( function() {
4697          if(this.name.includes("end") != -1){
4698            start_timepicker = jQuery("input[name='"+this.name.replace("end", "start")+"']");
4699            start_timepicker = jQuery(start_timepicker[start_timepicker.length - 1]);
4700            if (io_force_blank_timepickers == "on")
4701            {
4702              start_timepicker.val("");
4703              jQuery(this).timepicker({
4704                startTime: "",
4705                endTime:   "",
4706                minTime:   restrictTimeStart,
4707                maxTime:   restrictTimeEnd,
4708                timeFormat: timeFormat,
4709                separator:  ":",
4710                className:  "elementor-widget-text-editor",
4711                step: 15,
4712                disableTouchKeyboard: true
4713              });
4714            }
4715            else
4716            {
4717              if (start_timepicker.val() != "") {
4718                jQuery(this).timepicker({
4719                  startTime: new Date(io_mm + "/" + io_dd + "/" + io_yyyy + " " + start_default),
4720                  endTime: new Date(io_mm + "/" + io_dd + "/" + io_yyyy + " " + end_default),
4721                  minTime: start_timepicker.val(),
4722                  timeFormat: timeFormat,
4723                  separator: ":",
4724                  className: "elementor-widget-text-editor",
4725                  step: 15,
4726                  disableTouchKeyboard: true
4727                });
4728              } else {
4729                jQuery(this).timepicker({
4730                  startTime: new Date(io_mm + "/" + io_dd + "/" + io_yyyy + " " + start_default),
4731                  endTime: new Date(io_mm + "/" + io_dd + "/" + io_yyyy + " " + end_default),
4732                  timeFormat: timeFormat,
4733                  separator: ":",
4734                  className: "elementor-widget-text-editor",
4735                  step: 15,
4736                  disableTouchKeyboard: true
4737                });
4738              }
4739            }
4740          }
4741          else
4742          {
4743            if (io_force_blank_timepickers == "on")
4744            {
4745              start_timepicker.val("");
4746              jQuery(this).timepicker({
4747                startTime: "",
4748                endTime:   "",
4749                minTime:   restrictTimeStart,
4750                maxTime:   restrictTimeEnd,
4751                timeFormat: timeFormat,
4752                separator:  ":",
4753                className:  "elementor-widget-text-editor",
4754                step: 15,
4755                disableTouchKeyboard: true
4756              });
4757            }
4758            else
4759            {
4760              jQuery(this).timepicker({
4761                startTime: new Date(io_mm + "/" + io_dd + "/" + io_yyyy + " " + start_default),
4762                endTime: new Date(io_mm + "/" + io_dd + "/" + io_yyyy + " " + end_default),
4763                timeFormat: timeFormat,
4764                separator: ":",
4765                className: "elementor-widget-text-editor",
4766                step: 15,
4767                disableTouchKeyboard: true
4768              });
4769            }
4770          }
4771        });
4772      }
4773      setUpTimeRestrictions_timeBasedItems();
4774      if(!event_time_set()){
4775        jQuery(".itemRow .item-total").hide();
4776      }else{
4777        jQuery(".itemRow .item-total").show();
4778      }
4779    }
4780  }
4781  function cart_beforeCheckout(data) {
4782    data.startdate = jQuery("input[name=dateStart]").val();
4783    data.enddate = jQuery("input[name=dateEnd]").val();
4784    if(getCookie("guid")){
4785      data.guid = getCookie("guid");
4786    }else{
4787      data.io_custguid = fetchAndSetCookie("guid");
4788    }
4789    if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day"){
4790      let cart_company_timeslot_selected = jQuery(".ioCartCompanyTimeslots option:selected").first().val();
4791      if(cart_company_timeslot_selected){
4792        setCookie("io_company_timeslot_selected", cart_company_timeslot_selected, 14);
4793        cart_company_timeslot_selected = cart_company_timeslot_selected.split("-");
4794        data.starttime = cart_company_timeslot_selected[0];
4795        data.endtime = cart_company_timeslot_selected[1];
4796      }
4797    } else {
4798      data.starttime = jQuery("input[name=timeStart]").val();
4799      data.endtime = jQuery("input[name=timeEnd]").val();
4800    }
4801  }
4802  function cart_beforeAdd(item) {
4803    var main_id = jQuery(".io_product_container .item_rentalid").first().text();
4804    var item_id = item.get("rentalid");
4805
4806    timeslots = item.get("timeslots");
4807    if(timeslots){
4808      if(timeslots.indexOf("<select") !== -1){
4809        timeslot_name_id_start_pos = timeslots.lastIndexOf('name="timeslot_') + 'name="timeslot_'.length;
4810        timeslot_name_id_end_pos = timeslots.indexOf('"', timeslot_name_id_start_pos);
4811        new_timeslots = [timeslots.slice(0, timeslot_name_id_start_pos), item_id, timeslots.slice(timeslot_name_id_end_pos,timeslots.length)]
4812        new_timeslots = new_timeslots.join("")
4813        item.set("timeslots", new_timeslots);
4814      }else if(timeslots.indexOf("<div name=\"io_timepicker_") !== -1){
4815        timeslot_name_id_start_pos = timeslots.lastIndexOf('name="io_timepicker_') + 'name="io_timepicker_'.length;
4816        timeslot_name_id_end_pos = timeslots.indexOf('"', timeslot_name_id_start_pos);
4817        new_timeslots = [timeslots.slice(0, timeslot_name_id_start_pos), item_id, timeslots.slice(timeslot_name_id_end_pos,timeslots.length)]
4818        new_timeslots = new_timeslots.join("")
4819
4820        timeslot_name_id_start_pos = new_timeslots.lastIndexOf('name="start_timeslot_') + 'name="start_timeslot_'.length;
4821        timeslot_name_id_end_pos = new_timeslots.indexOf('"', timeslot_name_id_start_pos);
4822        new_timeslots = [new_timeslots.slice(0, timeslot_name_id_start_pos), item_id, new_timeslots.slice(timeslot_name_id_end_pos,new_timeslots.length)]
4823        new_timeslots = new_timeslots.join("")
4824
4825        timeslot_name_id_start_pos = new_timeslots.lastIndexOf('name="end_timeslot_') + 'name="end_timeslot_'.length;
4826        timeslot_name_id_end_pos = new_timeslots.indexOf('"', timeslot_name_id_start_pos);
4827        new_timeslots = [new_timeslots.slice(0, timeslot_name_id_start_pos), item_id, new_timeslots.slice(timeslot_name_id_end_pos,new_timeslots.length)]
4828        new_timeslots = new_timeslots.join("")
4829
4830        item.set("timeslots", new_timeslots);
4831      }
4832
4833    }
4834    /* Here we are checking if we are on an item page and if we are adding the main item.
4835           If this is not true, we do not want to continue. Bail here. */
4836    if((!main_id || !item_id)){
4837      return true;
4838    }else if (item_id != main_id){
4839      /* we are adding an accessory, We want to forcibly add the main item first. */
4840      /* IO-26864 */
4841      jQuery("#bookNowBtn").click();
4842    }
4843    let required_dropdown_values = jQuery(".io_acc_li").filter(function() {
4844      let required_ele = jQuery(this).find(".item_required");
4845      let required = 0;
4846      if(required_ele[0]){
4847        required = required_ele[0].outerText;
4848      }
4849      let dropdown_ele = jQuery(this).find(".item_accessorydd");
4850      let dropdown = 0;
4851      if(dropdown_ele[0]){
4852        dropdown = dropdown_ele[0].outerText;
4853      }
4854      return (required > 0 && dropdown == 1)
4855    });
4856    var required_selected = true;
4857    required_dropdown_values.each(function() {
4858      required_value_id = jQuery(this).find(".item_rentalid")[0].outerText;
4859      required_value_id = required_value_id.split("_");
4860      required_value_id = required_value_id[required_value_id.length-1];
4861
4862      let selected = jQuery("[id^='io_acc_"+required_value_id+"']").filter(function() {
4863        return this["selected"];
4864      });
4865
4866      //IO-22431 - This wasnt catching if [0] was undefined
4867      if(jQuery(this).find(".io_acc_li_name")[0] != undefined){
4868        required_value_name = jQuery(this).find(".io_acc_li_name")[0].outerText ? jQuery(this).find(".io_acc_li_name")[0].outerText : "";
4869      }
4870      if(selected.length < jQuery(this).find(".item_required")[0].outerText){
4871        if(item_id == main_id){
4872          alert(required_value_name+" is a required field.");
4873        }
4874        required_selected = false;
4875      }
4876
4877      if(!required_selected){
4878        return false;
4879      }
4880      return true;
4881    });
4882    if(!required_selected){
4883      return false;
4884    }
4885
4886    /* IO-14857 */
4887    if(jQuery(".io_product_measurement_price").length > 0){
4888      let units;
4889      if(jQuery(".io_product_infobox .item_qtytype").text() == "Area"){
4890        units = "sq meters"
4891        if(country === "US") units = "sq feet"
4892      }else if(jQuery(".io_product_infobox .item_qtytype").text() == "Perimeter"){
4893        units = "meters"
4894        if(country === "US") units = "feet"
4895      }
4896      item.set("units", units);
4897      item.set("quantity", jQuery(".io_measure_price_raw_measurement").text());
4898    }
4899  }
4900  function cart_afterAdd(item) {
4901    /*loading animation*/
4902    ioCartLoaderActivate();
4903    setTimeout(function(){ if(io_cart_loading_active && io_cart_loading_count === 0){ io_cart_loading_active=false; ioCartShowOverlay(false);} }, 300);
4904
4905    /* Add required Accessories */
4906    let required_accs = jQuery("[id^=io_acc_required_]").filter(function() {
4907      return parseInt(this["outerText"]) > 0 && this.parentElement.style['display'] != 'none';
4908    });
4909    required_accs.each(function(index) {
4910      simpleCart.parse_html_and_add(this, true);
4911    });
4912
4913
4914    let selected_values = jQuery("[id^=io_acc_]").filter(function() {
4915      return this["selected"];
4916    });
4917
4918    selected_values.each(function() {
4919      let info = {};
4920      let rid = jQuery(this).find(".item_rentalid")[0].outerText;
4921      let split_rid = rid.split("_");
4922      if(split_rid.length == 3){
4923        let parent_rid = split_rid[1];
4924        let main_item_rid = split_rid[0];
4925        info["acc_dd_parent_limit"] = jQuery("#io_acc_accessorylimit_"+main_item_rid+"_"+parent_rid)[0].outerText;
4926      }else{
4927        info["acc_dd_parent_limit"] = "0";
4928      }
4929      info["name"]         = jQuery(this).find(".io_acc_li_name")[0].outerText
4930      info["qtyincrement"] = jQuery(this).find(".item_qtyincrement")[0].outerText
4931      info["quantity"]     = jQuery(this).find(".item_required")[0].outerText > 0 ? jQuery(this).find(".item_required")[0].outerText : 1;
4932      info["rentalid"]     = jQuery(this).find(".item_rentalid")[0].outerText
4933      info["linkqty"]      = jQuery(this).find(".item_linkqty")[0].outerText
4934      info["pagename"]     = io_pagename;
4935      if(jQuery(this).find(".io_acc_li_img_thumb")[0]){
4936        info["image"] = jQuery(this).find(".io_acc_li_img_thumb")[0].src
4937      }
4938      let already_added = simpleCart.items().filter((item) => item.get("rentalid").startsWith(split_rid[0]+"_"+split_rid[1]));
4939      if(jQuery(this).find(".item_accessorydd")[0].outerText != 1 &&
4940         (info["acc_dd_parent_limit"] == "0" || already_added.length < info["acc_dd_parent_limit"]) ){
4941        simpleCart.add(info, true);
4942      }
4943    });
4944
4945    checkAvailCartOnly(true);
4946
4947    let last_upsell_call_time = Date.now() - last_upsell_call;
4948    if(in_cart_upsell && last_upsell_call_time > 2000){
4949      let rental_ids = "";
4950
4951      /* Get the last element in the cart. This is the last item added. */
4952      last_added = jQuery("[id^='cartItem_']").last();
4953      if(last_added.length){
4954        last_added_children = last_added.children();
4955        for(let i = 0; i < last_added_children.length; ++i){
4956          if(last_added_children[i].className == "item-rentalid") {
4957            rental_ids += last_added_children[i].innerText + "|";
4958          }
4959        }
4960      }
4961
4962      if(rental_ids.length>0 && jQuery("#cartPopover").attr("class") == "cartIn"){
4963        var times = getAvailTimes();
4964        last_upsell_call = Date.now();
4965        getUpsellsCall(times[0],times[1],times[2],rental_ids,updateCartUpsell);
4966      }
4967      else{
4968        jQuery("#cart-carousel-container").hide();
4969      }
4970    }
4971
4972    if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day"){
4973      filterTimeslotsByDay_itemTimeslots();
4974      simpleCart.update();
4975    }
4976
4977    if (jQuery(".cartInfo.open,.ioCart.open, .ioCart_link.open").length == 0) {
4978      setTimeout(function () {
4979        cartShow();
4980      }, 100);
4981    }
4982
4983    if(simpleCart.items().length==0){
4984      jQuery(".simpleCart_checkout").hide()
4985    }else{
4986      jQuery(".simpleCart_checkout").show();
4987    }
4988
4989    if(simpleCart.items().length > 0){
4990      let headerBookButton = jQuery("a[href$='io_quoteform/']");
4991      headerBookButton.addClass("ioCart_link");
4992      headerBookButton.attr("href", "javascript:;");
4993    }
4994
4995    checkRestrictedDeliveries()
4996
4997    if(jQuery("#ioInfoHeader").length){
4998      header_increment_step();
4999    }
5000  }
5001  function cart_afterQtyChange(){
5002    let last_checkAvail_call_time = Date.now() - last_checkAvail_call;
5003    if(last_checkAvail_call_time > 2000){
5004      /*loading animation*/
5005      ioCartLoaderActivate();
5006      setTimeout(function(){ if(io_cart_loading_active && io_cart_loading_count === 0){ io_cart_loading_active=false; ioCartShowOverlay(false);} }, 300);
5007      last_checkAvail_call = Date.now();
5008      checkAvailCart();
5009      checkAvailCartTimeslots();
5010    }
5011  }
5012  function cart_hideTimepickerWrapper(){
5013    jQuery(".ui-timepicker-wrapper").hide();
5014  }
5015  function cart_beforeRemove() {
5016    last_remove = Date.now();
5017  }
5018  function cart_afterRemove(removed_item){
5019    checkAvailCart();
5020    last_upsell_call_time = Date.now() - last_upsell_call;
5021    if(in_cart_upsell && last_upsell_call_time > 2000){
5022      rental_ids = getAllRentalIDsFromCart();
5023      if(rental_ids.length>0 && jQuery("#cartPopover").attr("class") == "cartIn"){
5024        var times = getAvailTimes();
5025        last_upsell_call = Date.now();
5026        getUpsellsCall(times[0],times[1],times[2],rental_ids,updateCartUpsell);
5027      }
5028      else{
5029        jQuery("#cart-carousel-container").hide();
5030      }
5031    }
5032
5033    /* IO-24060 */
5034    simpleCart.items().forEach(function (item, index) {
5035      let expression = '^' + removed_item.get('rentalid') + '(?:[_:]\\d+)*';
5036      if(item.get("rentalid").match(expression)){
5037        item.remove();
5038      }
5039    });
5040
5041
5042    checkAvailCartTimeslots();
5043    checkRestrictedDeliveries();
5044    if(simpleCart.items().length==0){
5045      jQuery(".simpleCart_checkout").hide()
5046    }else{
5047      jQuery(".simpleCart_checkout").show();
5048    }
5049
5050    if(jQuery("#ioInfoHeader").length && simpleCart.items().length == 0){
5051      jQuery("#io-step-3").removeClass("io-step-active");
5052      jQuery("#io-step-2").addClass("io-step-active");
5053      jQuery("#io-step-2").removeClass("io-step-done")
5054    }
5055  }
5056  function cart_afterLoad(){
5057    var items_removed = false;
5058    simpleCart.items().forEach(function(item){
5059      if(item.get("pagename") != io_pagename){
5060        item.remove()
5061        items_removed = true;
5062      }
5063    })
5064    if(items_removed){
5065      alert("Some items in the cart are from a different location and have been removed.");
5066    }
5067  }
5068  /*</editor-fold>*/
5069
5070  /*<editor-fold defaultstate="collapsed" desc="Date/Time Object/String Conversion Functions">*/
5071  function getFormatteddate(date_obj){
5072    if(dateFormat.substring(0,1)=='d'){
5073      let month = date_obj.getMonth() + 1;
5074      formatteddate = date_obj.getDate()+'/'+month+'/'+date_obj.getFullYear();
5075    }else{
5076      let month = date_obj.getMonth() + 1;
5077      formatteddate = month+'/'+date_obj.getDate()+'/'+date_obj.getFullYear();
5078    }
5079    return formatteddate;
5080  }
5081
5082  function getFormattedtime(date_obj){
5083    var hour24 = false;
5084    var ampm = 'am';
5085    var starttime = jQuery('[name=timeStart]').val();
5086    if(starttime.length>0 && starttime.indexOf('m')==-1) hour24 = true;
5087    if(hour24){ //24 hour return
5088      return date_obj.getHours()+':'+pad(date_obj.getMinutes(),2);
5089    }else{ //12 hour return
5090      var hour = date_obj.getHours();
5091      if(hour==12) ampm='pm';
5092      if(hour==0) hour=12;
5093      if(hour>12){
5094        hour-=12;
5095        ampm='pm';
5096      }
5097      return hour+':'+pad(date_obj.getMinutes(),2)+' '+ampm;
5098    }
5099  }
5100
5101  function buildDateobjectstring(date,dateformat,time){
5102    var ampm = 'am';
5103    var hour24 = false;
5104    if(typeof date == "undefined") return;
5105    if(typeof dateformat == "undefined") return;
5106    var start_arr = date.split('/');
5107    if(dateformat.substring(0,1)=='d'){
5108      date = start_arr[2]+'/'+pad(start_arr[1],2)+'/'+pad(start_arr[0],2);
5109    }else{
5110      date = start_arr[2]+'/'+pad(start_arr[0],2)+'/'+pad(start_arr[1],2);
5111    }
5112    if(time.length>0 && time.indexOf('m')==-1) hour24 = true;
5113    if(hour24){
5114      try{
5115        var time_arr = time.split(':');
5116        var hour = parseInt(time_arr[0]);
5117        var min = pad(time_arr[1], 2);
5118        time = hour + ':' + min + ':00';
5119      }catch(err){
5120        time = "";
5121      }
5122    }else {
5123      try {
5124        time = time.replace('am', "").replace(' ', "");
5125        if (time.indexOf('pm') != -1) ampm = 'pm';
5126        time = time.replace('pm', "").replace(' ', "");
5127        var time_arr = time.split(':');
5128        var hour = parseInt(time_arr[0]);
5129        var min = pad(time_arr[1], 2);
5130        if (ampm == 'pm') {
5131          if (hour < 12) hour += 12;
5132        } else if (ampm == 'am' && hour == 12) {
5133          hour -= 12;
5134        }
5135        hour = pad(hour, 2);
5136        time = hour + ':' + min + ':00';
5137      } catch (err) {
5138        time = "";
5139      }
5140    }
5141    return date+' '+time;
5142  }
5143
5144  function pad(num, size) {
5145    var s = num+"";
5146    while (s.length < size) s = "0" + s;
5147    return s;
5148  }
5149  function convertDateStringtoDateObject(date_str, time_str=null){
5150    if(date_str){
5151      split_date_str = date_str.split("/");
5152      /* Parse start and end time. */
5153      if(time_str){
5154        /* Check and see if we are in 12 hour format, if so convert it to 24 hour format. */
5155        split_time_str = convert12HourTo24Hour(time_str);
5156      }else{
5157        /* If we do not have a time, then default to zeros */
5158        split_time_str = [0, 0];
5159      }
5160      /* Create date object based off our set date format. */
5161      date_obj = buildDateObj(split_date_str, split_time_str);
5162      return date_obj;
5163    }else{
5164      return new Date();
5165    }
5166  }
5167
5168  function buildDateObj(split_date_str, split_time_str){
5169    if (dateFormat == "d/m/yy"){
5170      return new Date(split_date_str[2], (+split_date_str[1] - 1).toString(), split_date_str[0],
5171              split_time_str[0], split_time_str[1]);
5172    }else{
5173      return new Date(split_date_str[2], (+split_date_str[0] - 1).toString(), split_date_str[1],
5174              split_time_str[0], split_time_str[1]);
5175    }
5176  }
5177
5178  function convert12HourTo24Hour(time_str){
5179    /* This function returns an array containing hours and minutes of provided string in 24 hour format. */
5180    /* This is primarily used for creating JS Date objects */
5181    split_time = time_str.split(":");
5182
5183    /* We are in 12 hour format if there is an "m" attached to minutes portion. */
5184    if(split_time[1].toLowerCase().search("m") != -1) {
5185      let separated_minutes = split_time[1].split(" ");
5186      if(separated_minutes.length==1){
5187        split_time[1] = split_time[1].replace("am"," am");
5188        split_time[1] = split_time[1].replace("pm"," pm");
5189        separated_minutes = split_time[1].split(" ");
5190      }
5191      let minutes = separated_minutes[0];
5192      let modifier = separated_minutes[1];
5193      split_time[1] = minutes;
5194
5195      /* First assume that if the hours are 12, then its midnight. */
5196      if(split_time[0] == "12"){
5197        split_time[0] = "00";
5198      }
5199      /* Second if there is a "p" in the modifier, then add twelve to the hours. */
5200      if(typeof modifier != "undefined"){
5201        if(modifier.toLowerCase().search("p") != -1){
5202          split_time[0] = (parseInt(split_time[0], 10) + 12);
5203        }
5204      }
5205    }
5206    return split_time;
5207  }
5208  /*</editor-fold>*/
5209
5210  /*<editor-fold defaultstate="collapsed" desc="Cart Show and Hide">*/
5211  function cartShow() {
5212    jQuery("#cartPopover").show();
5213    jQuery("#cartPopover").removeClass("cartOut");
5214    jQuery("#cartPopover").addClass("cartIn");
5215    jQuery(".cartInfo,.ioCart,.ioCart_link").addClass("open");
5216    if (/Mobi|Android/i.test(navigator.userAgent)) {
5217      document.body.style.overflow = "hidden";
5218    }
5219    /* jQuery(this).one("click", cartHide); */
5220    jQuery(".cartInfo").unbind("click").one("click", function(event){
5221      event.stopPropagation();
5222      event.stopImmediatePropagation();
5223      cartHide();
5224    });
5225    jQuery(".ioCart, .ioCart_link").unbind("click").one("click", function(event){
5226      event.stopPropagation();
5227      event.stopImmediatePropagation();
5228      cartHide();
5229    });
5230    jQuery(".cartIcon").removeClass("fa-shopping-cart").addClass("fa-close");
5231    if(simpleCart.items().length==0){
5232      jQuery(".simpleCart_checkout").hide()
5233    }else{
5234      jQuery(".simpleCart_checkout").show();
5235    }
5236
5237    checkAvailCartOnly();
5238
5239    last_upsell_call_time = Date.now() - last_upsell_call;
5240    if(in_cart_upsell && last_upsell_call_time > 2000){
5241      rental_ids = getAllRentalIDsFromCart();
5242      if(rental_ids.length>0 && jQuery("#cartPopover").attr("class") == "cartIn"){
5243        var times = getAvailTimes();
5244        last_upsell_call = Date.now();
5245        getUpsellsCall(times[0],times[1],times[2],rental_ids,updateCartUpsell);
5246      }
5247      else{
5248        jQuery("#cart-carousel-container").hide();
5249      }
5250    }
5251  }
5252
5253  function cartHide() {
5254    jQuery("#cartPopover").removeClass("cartIn");
5255    jQuery("#cartPopover").addClass("cartOut");
5256    if (/Mobi|Android/i.test(navigator.userAgent)) {
5257      document.body.style.overflow = "auto";
5258    }
5259    /* jQuery("#cartPopover").hide(); */
5260    jQuery(".cartInfo,.ioCart, .ioCart_link").removeClass("open");
5261    /* jQuery(this).one("click", cartShow); */
5262    jQuery(".cartInfo").unbind("click").one("click", function(event){
5263      event.stopPropagation();
5264      event.stopImmediatePropagation();
5265      cartShow();
5266    });
5267    jQuery(".ioCart, .ioCart_link").unbind("click").one("click", function(event){
5268      event.stopPropagation();
5269      event.stopImmediatePropagation();
5270      cartShow();
5271    });
5272    jQuery(".cartIcon").removeClass("fa-close").addClass("fa-shopping-cart");
5273  }
5274  /*
5275    function set_date_cookie(){
5276        if(this.id.indexOf("start_") !== -1){
5277            setCookie("dateStart", this.value, 14);
5278        } else if(this.id.indexOf("end_") !== -1){
5279            setCookie("dateEnd", this.value, 14);
5280        }
5281    }
5282    */
5283  jQuery(document).ready(function () {setTimeout(simpleCart.init, 3);});
5284  /*</editor-fold>*/
5285
5286  /*<editor-fold defaultstate="collapsed" desc="Check Avail All Call">*/
5287  function checkAvailAll(){
5288    checkAvailCart();
5289    checkAvailCartTimeslots();
5290    checkAvailFilter();
5291  }
5292  /*</editor-fold>*/
5293
5294  /*<editor-fold defaultstate="collapsed" desc="Check Avail - Page">*/
5295  /* for items on page not in cart */
5296  function checkAvailFilter() {
5297    let rental_names = "";
5298    let rental_ids = "";
5299    let batch_ids = [];
5300    let cart_rental_names = "";
5301    let cart_rental_ids = "";
5302    let item_id = "";
5303    let main_id = "";
5304    jQuery(".item_encoded").each(function(){
5305      rental_names += this.innerText + "|";
5306    });
5307    jQuery(".io_product_infobox .item_rentalid").each(function(){
5308      rental_ids += this.innerText + "|";
5309      item_id = this.innerText;
5310      main_id = this.innerText;
5311    });
5312    let batch_count = 0;
5313    let batch_index = 0;
5314    // If we have rental id string set, then we don't want to include availability checking for fpw items in header
5315    // IO-31498
5316    if(!rental_ids) {
5317      jQuery(".io_item2_list_inner .item_rentalid, .io_item2_listrent .item_rentalid").each(function () {
5318        /*
5319        if(rental_ids.indexOf(this.innerText+"|") == -1){
5320          rental_ids += this.innerText + "|";
5321        }
5322        */
5323        if (batch_count < 9) {
5324          if (!batch_ids.length) batch_ids.push("")
5325          if (!rid_in_batch(this.innerText + "|", batch_ids).length) {
5326            batch_ids[batch_index] += this.innerText + "|";
5327            batch_count++;
5328          }
5329        } else {
5330          if (!rid_in_batch(this.innerText + "|", batch_ids).length) {
5331            batch_ids[batch_index] += this.innerText + "|";
5332            batch_index++;
5333            batch_count = 0;
5334            batch_ids.push("");
5335          }
5336        }
5337      });
5338    }
5339    simpleCart.each(function (item, x) {
5340      var cart_name = item.get("encoded");
5341      if(cart_name==null){
5342        cart_name = encodeURIComponent(item.get("name"));
5343        cart_name = encodeURIComponent(decodeURIComponent(cart_name).replace(/[\u2032\u2019]+/ig,"'"));
5344      }
5345      let quantity = item.get("quantity");
5346      if(item.get("inputtype") == "Map"){
5347        quantity = 1
5348      }
5349      cart_rental_names += cart_name + "-" + quantity + "|";
5350      var cart_id = item.get("rentalid");
5351      cart_rental_ids += cart_id + "-" + quantity + "|";
5352    });
5353    /* #14494 IO-13779 */
5354    let delivery_methods_arr = [];
5355    var delivery_prices = [];
5356    if(io_delivery_prices){
5357      if(Object.keys(io_delivery_prices["override"]).includes(item_id)){
5358        delivery_prices = io_delivery_prices["override"][item_id]
5359      }else{
5360        if(!item_is_in_overrride_group(main_id)){
5361          delivery_prices = io_delivery_prices["default"]
5362        }
5363      }
5364      for(item in io_delivery_methods){
5365        if(delivery_prices.includes(io_delivery_methods[item]["id"])){
5366          delivery_methods_arr.push(item);
5367        }
5368      }
5369    }
5370
5371    let custom_prices_arr = [];
5372    if(io_custom_prices){
5373      if(Object.keys(io_custom_prices["override"]).includes(item_id.replace(":", '_'))){
5374        custom_prices_arr = io_custom_prices["override"][item_id.replace(":", '_')]
5375      }else{
5376        if(!item_is_in_overrride_group(main_id)){
5377          custom_prices_arr = io_custom_prices["default"]
5378        }
5379      }
5380    }
5381
5382    /* IO-13548 */
5383    if(io_accessory_price == "on"){
5384      let times = getAvailTimes();
5385      let acc_rental_id_str = getAccIDforPrice();
5386      let return_id = 0;
5387      if(acc_rental_id_str != ""){
5388        checkAvailCall(times[0],times[1],times[2],rental_names,acc_rental_id_str,displayAccessoryPrices,0,[],[],return_id,0,null,1,"",1);
5389      }
5390    }
5391
5392    let times = getAvailTimes();
5393    if(rental_names.length>0){
5394      if(use_weekday_weekend && rental_ids && !item_is_in_overrride_group(main_id)){
5395        let return_id = 0;
5396        let week_weekend = "";
5397        if(rental_ids != ""){
5398          return_id = 1;
5399          week_weekend = get_week_weekend_times(times, main_id);
5400          checkAvailCall(week_weekend["weekday"][0],week_weekend["weekday"][1],week_weekend["weekday"][2],rental_names,rental_ids,updatePageAvail_weekday,0,cart_rental_ids,cart_rental_names,return_id,1);
5401          checkAvailCall(week_weekend["weekend"][0],week_weekend["weekend"][1],week_weekend["weekend"][2],rental_names,rental_ids,updatePageAvail_weekend,0,cart_rental_ids,cart_rental_names,return_id,1);
5402        }
5403      }
5404      let return_id = 0;
5405      if(rental_ids != "" || batch_ids.length){
5406        return_id = 1;
5407      }
5408      if(delivery_methods_arr && rental_ids){
5409        delivery_methods_arr.forEach(function(delivery_method){
5410          checkAvailCall(times[0],times[1],times[2],rental_names,rental_ids,updatePageAvail_delivery_method,0,cart_rental_ids,cart_rental_names,return_id,1,delivery_method);
5411        });
5412      }
5413      if(custom_prices_arr && rental_ids){
5414        custom_prices_arr.forEach(function(custom_price){
5415          let start_date = times[0];
5416          let start_time = times[1];
5417          if(!start_date){
5418            start_date = getFormatteddate(new Date());
5419          }
5420          if(!start_time){
5421            start_time = io_default_start_time;
5422          }
5423          checkAvailCall(start_date,start_time,custom_price['duration'],rental_names,rental_ids,updatePageAvail_custom_price,0,cart_rental_ids,cart_rental_names,return_id,1,"",1,custom_price['name']);
5424        });
5425      }
5426
5427      if(batch_ids.length){
5428        batch_ids.forEach(function(rids){
5429          return checkAvailCall(times[0],times[1],times[2],"",rids,updatePageAvail,0,cart_rental_ids,cart_rental_names,return_id,1,null,1,"",1);
5430        });
5431      }else{
5432        return checkAvailCall(times[0],times[1],times[2],rental_names,rental_ids,updatePageAvail,0,cart_rental_ids,cart_rental_names,return_id,1,null,1);
5433      }
5434    }
5435  }
5436
5437  function item_is_in_overrride_group(item_id){
5438    for(const group_id in io_prices['override_groups']){
5439      for(const search_id in io_prices['override_groups'][group_id]){
5440        if(search_id == item_id){
5441          return true;
5442        }
5443      }
5444    }
5445    return false
5446  }
5447
5448  function get_week_weekend_times(times, rid){
5449    /* Create a copy instead of reference.*/
5450    let temp_times = JSON.parse(JSON.stringify(times));
5451    let start_date = temp_times[0];
5452    if(!start_date){
5453      start_date = getFormatteddate(new Date());
5454      temp_times[0] = start_date;
5455    }
5456    temp_times[1] = io_default_start_time
5457    var newDate1 = convertDateStringtoDateObject(start_date, io_default_start_time);
5458    var newDate2 = convertDateStringtoDateObject(start_date, io_default_end_time);
5459    let time_duration = ((newDate2 - newDate1) / 3600) / 1000;
5460    temp_times[2] = time_duration;
5461    let day = new Date(newDate1).getDay(); //IO-28150 - Other countries put the date dd/mm/yy so using the formatted newDate1 instead of start_date accounts for this
5462    let weekday_weekend = {};
5463    weekday_weekend["rid"] = rid;
5464    if(io_weekendDefine == "friday-sunday"){
5465      if(day == 5 || day == 6 || day == 0){
5466        weekday_weekend["weekend"] = JSON.parse(JSON.stringify(temp_times));
5467        temp_times[0] = getNextMonday(temp_times[0]);
5468        weekday_weekend["weekday"] = JSON.parse(JSON.stringify(temp_times));
5469      }else if(day == 1 || day == 2 || day == 3 || day == 4){
5470        weekday_weekend["weekday"] = JSON.parse(JSON.stringify(temp_times));
5471        temp_times[0] = getNextSaturday(temp_times[0]);
5472        weekday_weekend["weekend"] = JSON.parse(JSON.stringify(temp_times));
5473      }
5474    }else if(io_weekendDefine == "saturday-sunday") {
5475      if (day == 6 || day == 0) {
5476        weekday_weekend["weekend"] = JSON.parse(JSON.stringify(temp_times));
5477        temp_times[0] = getNextMonday(temp_times[0]);
5478        weekday_weekend["weekday"] = JSON.parse(JSON.stringify(temp_times));
5479      } else if (day == 1 || day == 2 || day == 3 || day == 4 || day == 5) {
5480        weekday_weekend["weekday"] = JSON.parse(JSON.stringify(temp_times));
5481        temp_times[0] = getNextSaturday(temp_times[0]);
5482        weekday_weekend["weekend"] = JSON.parse(JSON.stringify(temp_times));
5483      }
5484    }else if (io_weekendDefine == "friday-monday"){
5485      if(day == 5 || day == 6 || day == 0 || day == 1){
5486        weekday_weekend["weekend"] = JSON.parse(JSON.stringify(temp_times));
5487        temp_times[0] = getNextTuesday(temp_times[0]);
5488        weekday_weekend["weekday"] = JSON.parse(JSON.stringify(temp_times));
5489      }else if(day == 2 || day == 3 || day == 4){
5490        weekday_weekend["weekday"] = JSON.parse(JSON.stringify(temp_times));
5491        temp_times[0] = getNextSaturday(temp_times[0]);
5492        weekday_weekend["weekend"] = JSON.parse(JSON.stringify(temp_times));
5493      }
5494    }
5495    return weekday_weekend;
5496  }
5497
5498  /*
5499        helper function found here:
5500        https://bobbyhadz.com/blog/javascript-get-date-of-next-monday#:~:text=To%20get%20the%20next%20Monday%2C%20we%3A&text=If%20the%20remainder%20is%20equal,month%20for%20the%20next%20Monday.
5501    */
5502  function getNextMonday(date_str) {
5503    const date_obj = parseDate(date_str, dateFormat);
5504
5505    const nextMonday = new Date(
5506            date_obj.setDate(
5507                    date_obj.getDate() + ((7 - date_obj.getDay() + 1) % 7 || 7),
5508            ),
5509    );
5510
5511    return getFormatteddate(nextMonday);
5512  }
5513
5514    function getNextTuesday(date_str) {
5515      const date_obj = parseDate(date_str, dateFormat);
5516
5517      const nextMonday = new Date(
5518              date_obj.setDate(
5519                      date_obj.getDate() + ((7 - date_obj.getDay() + 2) % 7 || 7),
5520              ),
5521      );
5522
5523      return getFormatteddate(nextMonday);
5524    }
5525
5526  function parseDate(date_str, format) {
5527      var parts = date_str.split(/[/.-]/);
5528      var day, month, year;
5529
5530      if (format === "m/d/yy") {
5531          month = parseInt(parts[0]) - 1;
5532          day = parseInt(parts[1]);
5533          year = parseInt(parts[2]) + (parts[2].length === 2 ? 2000 : 0);
5534      } else if (format === "d/m/yy") {
5535          day = parseInt(parts[0]);
5536          month = parseInt(parts[1]) - 1;
5537          year = parseInt(parts[2]) + (parts[2].length === 2 ? 2000 : 0);
5538      } else if (format === "yy/m/d") {
5539          year = parseInt(parts[0]) + (parts[0].length === 2 ? 2000 : 0);
5540          month = parseInt(parts[1]) - 1;
5541          day = parseInt(parts[2]);
5542      } else {
5543          throw new Error("Unsupported date format");
5544      }
5545
5546      return new Date(year, month, day);
5547  }
5548
5549  /* modified from function above */
5550  function getNextSaturday(date_str) {
5551    const date_obj = parseDate(date_str, dateFormat);
5552
5553    const next_friday = new Date(
5554            date_obj.setDate(
5555                    date_obj.getDate() + ((7 - date_obj.getDay() + 6) % 7 || 7),
5556            ),
5557    );
5558
5559    return getFormatteddate(next_friday);
5560  }
5561
5562  function updatePageAvail(data){
5563    let use_id = data["return_id"]
5564    delete data["return_id"];
5565    if(use_id == 1){
5566      updatePageAvail_itemIDs(data)
5567    }else{
5568      updatePageAvail_itemNames(data);
5569    }
5570  }
5571  function updatePageAvail_weekday(data){
5572    jQuery.each(data, function (rental_id, qty){
5573      if (rental_id == "price") {
5574        var prices = qty;
5575        jQuery.each(prices, function (price_id, amt) {
5576          let cust_price = document.querySelector(".io_product_cust_price_weekday");
5577          if(cust_price==undefined){
5578            var first_price = document.querySelector(".io_product_price_box");
5579            if(first_price != null){
5580              cust_price = first_price.cloneNode(true);
5581              /* clear all classes */
5582              cust_price.className = "";
5583              cust_price.classList.add("io_product_price_box");
5584              cust_price.classList.add("io_product_cust_price_weekday");
5585              cust_price.style.display = "none";
5586              first_price.before(cust_price);
5587            }
5588          }
5589
5590          main_item_id = jQuery(".io_product_infobox .item_rentalid").first().text();
5591          if(main_item_id == price_id && cust_price!=undefined){
5592            if(typeof amt == "string") amt = Number(amt.replace(",",""));
5593            cust_price.querySelector("p:nth-child(1)").innerHTML=simpleCart.toCurrency(amt);
5594            let times = getAvailTimes();
5595            cust_price.querySelector("p:nth-child(2)").innerHTML = io_weekDayText;
5596            if(amt>0){
5597              cust_price.style.display = "grid";
5598            }else{
5599              cust_price.style.display = "none";
5600            }
5601          }
5602        });
5603      }
5604    });
5605  }
5606  function updatePageAvail_delivery_method(data){
5607    var delivery_method = data["delivery_method"]
5608    jQuery.each(data, function (rental_id, qty){
5609      if (rental_id == "price") {
5610        var prices = qty;
5611        jQuery.each(prices, function (price_id, amt) {
5612          let cust_price = document.querySelector(".io_product_cust_price_delivery_method"+io_delivery_methods[delivery_method]["id"]);
5613          let rid = jQuery(".io_product_container .item_rentalid").first().text();
5614          if(cust_price==undefined && !io_delivery_methods[delivery_method]["restricted"].includes(rid)){
5615            var first_price = document.querySelector(".io_product_price_box");
5616            if(first_price != null){
5617              cust_price = first_price.cloneNode(true);
5618              /* clear all classes */
5619              cust_price.className = "";
5620              cust_price.classList.add("io_product_price_box");
5621              cust_price.classList.add("io_product_cust_price_delivery_method"+io_delivery_methods[delivery_method]["id"]);
5622              cust_price.style.display = "none";
5623              first_price.before(cust_price);
5624            }
5625          }
5626
5627          main_item_id = jQuery(".io_product_infobox .item_rentalid").first().text();
5628          if(main_item_id == price_id && cust_price!=undefined){
5629            if(typeof amt == "string") amt = Number(amt.replace(",",""));
5630            cust_price.querySelector("p:nth-child(1)").innerHTML=simpleCart.toCurrency(amt);
5631            let times = getAvailTimes();
5632            cust_price.querySelector("p:nth-child(2)").innerHTML = make_live_price_editable_time(times, delivery_method);
5633            if(amt>0 && event_time_set()){
5634              cust_price.style.display = "grid";
5635            }else{
5636              cust_price.style.display = "none";
5637            }
5638          }
5639        });
5640      }
5641    });
5642  }
5643  function updatePageAvail_custom_price(data, custom_price_name){
5644    let custom_price_class_name = custom_price_name.replace(/[\s:./()!]/g, '_');
5645    jQuery.each(data, function (rental_id, qty){
5646      if (rental_id == "price") {
5647        var prices = qty;
5648        jQuery.each(prices, function (price_id, amt) {
5649          let cust_price = document.querySelector(".io_product_cust_price_"+custom_price_class_name);
5650          let rid = jQuery(".io_product_container .item_rentalid").first().text();
5651          if(cust_price==undefined){
5652            var first_price = document.querySelector(".io_product_price_box");
5653            if(first_price != null){
5654              cust_price = first_price.cloneNode(true);
5655              /* clear all classes */
5656              cust_price.className = "";
5657              cust_price.classList.add("io_product_price_box");
5658              cust_price.classList.add("io_product_cust_price_"+custom_price_class_name);
5659              cust_price.style.display = "none";
5660              first_price.before(cust_price);
5661            }
5662          }
5663
5664          main_item_id = jQuery(".io_product_infobox .item_rentalid").first().text();
5665          if(main_item_id == price_id && cust_price!=undefined){
5666            if(typeof amt == "string") amt = Number(amt.replace(",",""));
5667            cust_price.querySelector("p:nth-child(1)").innerHTML=simpleCart.toCurrency(amt);
5668            cust_price.querySelector("p:nth-child(2)").innerHTML = "for " + custom_price_name;
5669            if(amt>0){
5670              cust_price.style.display = "grid";
5671            }else{
5672              cust_price.style.display = "none";
5673            }
5674          }
5675        });
5676      }
5677    });
5678  }
5679  function updatePageAvail_weekend(data){
5680    jQuery.each(data, function (rental_id, qty){
5681      if (rental_id == "price") {
5682        var prices = qty;
5683        jQuery.each(prices, function (price_id, amt) {
5684          let cust_price = document.querySelector(".io_product_cust_price_weekend");
5685          if(cust_price==undefined){
5686            var first_price = document.querySelector(".io_product_price_box");
5687            if(first_price != null){
5688              cust_price = first_price.cloneNode(true);
5689              /* clear all classes */
5690              cust_price.className = "";
5691              cust_price.classList.add("io_product_price_box");
5692              cust_price.classList.add("io_product_cust_price_weekend");
5693              cust_price.style.display = "none";
5694              first_price.before(cust_price);
5695            }
5696          }
5697
5698          main_item_id = jQuery(".io_product_infobox .item_rentalid").first().text();
5699          if(main_item_id == price_id && cust_price!=undefined){
5700            if(typeof amt == "string") amt = Number(amt.replace(",",""));
5701            cust_price.querySelector("p:nth-child(1)").innerHTML=simpleCart.toCurrency(amt);
5702            let times = getAvailTimes();
5703            cust_price.querySelector("p:nth-child(2)").innerHTML = io_weekEndText;
5704            if(amt>0){
5705              cust_price.style.display = "grid";
5706            }else{
5707              cust_price.style.display = "none";
5708            }
5709          }
5710        });
5711      }
5712    });
5713  }
5714  function updatePageAvail_itemIDs(data){
5715    jQuery.each(data, function (rental_id, qty){
5716      if (rental_id == "price"  && jQuery(".io_product_infobox .item_inputtype").text() != "Map") {
5717        var prices = qty;
5718        jQuery.each(prices, function (price_id, amt) {
5719          let cust_price = document.querySelector(".io_product_cust_price");
5720          if(cust_price==undefined){
5721            var first_price = document.querySelector(".io_product_price_box");
5722            if(first_price != null){
5723              cust_price = first_price.cloneNode(true);
5724              /* clear all classes */
5725              cust_price.className = "";
5726              cust_price.classList.add("io_product_price_box");
5727              cust_price.classList.add("io_product_cust_price");
5728              cust_price.style.display = "none";
5729              first_price.before(cust_price);
5730            }
5731          }
5732          main_item_id = jQuery(".io_product_infobox .item_rentalid").first().text();
5733          if(main_item_id == price_id && cust_price!=undefined){
5734            if(typeof amt == "string") amt = Number(amt.replace(",",""));
5735            cust_price.querySelector("p:nth-child(1)").innerHTML=simpleCart.toCurrency(amt);
5736            let times = getAvailTimes();
5737            cust_price.querySelector("p:nth-child(2)").innerHTML = make_live_price_editable_time(times);
5738            if(amt>0 && (event_time_set() || io_always_display_live_price == "on")){
5739              cust_price.style.display = "grid";
5740            }else{
5741              cust_price.style.display = "none";
5742            }
5743          }
5744        });
5745      }
5746
5747      if(qty<=0 && rental_id != "delivery_method"){
5748        /* cat,all-item,widget */
5749        if(io_checkavail=="warn"){
5750          jQuery(".add_cart_"+rental_id.replace(":", "\\\:")+" .item_add").removeClass("item_add").addClass("item_add_off").trigger("classChange");
5751          jQuery(".unavailable_message_"+rental_id.replace(":", "\\\:")).show();
5752        }
5753        if(io_checkavail=="hide") jQuery(".add_cart_"+rental_id).parent().parent().parent().hide();
5754
5755        /* product page */
5756        if(jQuery(".io_product_container").length && io_checkavail!="off" && jQuery(".io_product_container .item_rentalid").first().text() === rental_id){
5757          jQuery(".add_cart_"+rental_id.replace(":", "\\\:")+" .item_add").first().removeClass("item_add").addClass("item_add_off").trigger("classChange");
5758          jQuery(".io_product_container .unavailable_message").show();
5759        }
5760      }else if(qty>0){
5761        if(io_checkavail=="warn"){
5762          jQuery(".add_cart_"+rental_id.replace(":", "\\\:")+" .item_add_off").removeClass("item_add_off").addClass("item_add").trigger("classChange");
5763          jQuery(".unavailable_message_"+rental_id.replace(":", "\\\:")).hide();
5764        }
5765        if(io_checkavail=="hide") jQuery(".add_cart_"+rental_id).parent().parent().parent().show();
5766
5767        /* product page */
5768        if(jQuery(".io_product_container").length && io_checkavail!="off" && jQuery(".io_product_container .item_rentalid").first().text() === rental_id){
5769          jQuery(".add_cart_"+rental_id.replace(":", "\\\:")+" .item_add_off").removeClass("item_add_off").addClass("item_add").trigger("classChange");
5770          jQuery(".io_product_container .unavailable_message").hide();
5771        }
5772      }
5773    });
5774  }
5775  function updatePageAvail_itemNames(data){
5776    jQuery.each(data, function (rental_name, qty) {
5777      rental_name = rental_name.replace(/[\u2032\u2019]+/ig,"'");
5778      var main_name_temp = "";
5779      if(typeof main_name_orig != "undefined"){
5780        main_name_temp = main_name_orig.replace(/[\u2032\u2019]+/ig,"'");
5781      }
5782      rental_name_esc = rental_name.replace(/'/g, "\\\\'");
5783      if (rental_name == "price") {
5784        var prices = qty;
5785        jQuery.each(prices, function (price_name, amt) {
5786          /* var prices = document.querySelector(".io_product_price_box:not(.io_product_cust_price)"); */
5787          /* if(prices != null) prices.remove(); */
5788          let cust_price = document.querySelector(".io_product_cust_price");
5789          if(cust_price==undefined){
5790            var first_price = document.querySelector(".io_product_price_box");
5791            if(first_price != null){
5792              cust_price = first_price.cloneNode(true);
5793              /* clear all classes */
5794              cust_price.className = "";
5795              cust_price.classList.add("io_product_price_box");
5796              cust_price.classList.add("io_product_cust_price");
5797              cust_price.style.display = "none";
5798              first_price.before(cust_price);
5799            }
5800          }
5801          try{
5802            var main_name = decodeURIComponent(jQuery(".io_product_container .item_encoded").first().html().replace(/[+]/gi, "%20"));
5803          }catch(e){main_name=""}
5804          var i = main_name.lastIndexOf(":");
5805          let acc_name = "";
5806          let rental_name = "";
5807          var i = main_name.lastIndexOf(":");
5808          if(i>0){
5809            rental_name = main_name.substring(0, i);
5810            acc_name = main_name.substring(i+1);
5811          }
5812          if (acc_name.toUpperCase() == price_name.toUpperCase() && cust_price!=undefined){
5813            var rental_id = document.querySelector(".item_rentalid").innerText;
5814            if(rental_id != null){
5815              rid_arr = rental_id.split(":");
5816              /* ignore the main id for this */
5817              rental_id = rid_arr[rid_arr.length-1];
5818              if(jQuery("#io_acc_overrideprice_"+rental_id).first().text()>0){
5819                amt = prices[acc_name];
5820              }else{
5821                let item_price = Number(prices[rental_name].replace(",",""));
5822                amt = Number(amt.replace(",","")) + item_price;
5823                amt = simpleCart.toCurrency(amt, {symbol:""})
5824              }
5825            }
5826            cust_price.querySelector("p:nth-child(1)").innerText="$"+amt;
5827            if(typeof amt == "string") amt = Number(amt.replace(",",""));
5828            let times = getAvailTimes();
5829            cust_price.querySelector("p:nth-child(2)").innerHTML = make_live_price_editable_time(times);
5830            if(amt>0 && (event_time_set() || io_always_display_live_price == "on")){
5831              cust_price.style.display = "grid";
5832            }else{
5833              cust_price.style.display = "none";
5834            }
5835
5836          }else if(!rental_name && !acc_name && cust_price!=undefined){
5837            amt = prices[main_name];
5838            cust_price.querySelector("p:nth-child(1)").innerText="$"+amt;
5839            if(typeof amt == "string") amt = Number(amt.replace(",",""));
5840            let times = getAvailTimes();
5841            cust_price.querySelector("p:nth-child(2)").innerHTML = make_live_price_editable_time(times);
5842            if(amt>0 && (event_time_set() || io_always_display_live_price == "on")){
5843              cust_price.style.display = "grid";
5844            }else{
5845              cust_price.style.display = "none";
5846            }
5847          }
5848
5849        });
5850      }
5851
5852      if(qty<=0){
5853        /* cat,all-item,widget */
5854        if(io_checkavail=="warn"){
5855          jQuery("div[name='maindiv_"+rental_name_esc+"'] .item_add").removeClass("item_add").addClass("item_add_off").trigger("classChange");
5856          jQuery("div[name='maindiv_"+rental_name_esc+"'] .unavailable_message").show();
5857        }
5858        if(io_checkavail=="hide") jQuery("div[name='maindiv_"+rental_name_esc+"']").hide();
5859
5860        /* product page */
5861        if(jQuery(".io_product_container").length && io_checkavail!="off"){
5862          if(main_name_temp==rental_name){
5863            jQuery(".io_product_container .item_add").first().removeClass("item_add").addClass("item_add_off").trigger("classChange");
5864            jQuery(".io_product_container .unavailable_message").show();
5865          }
5866        }
5867      }else if(qty>0){
5868        /* console.log("good"); */
5869        if(io_checkavail=="warn"){
5870          jQuery("div[name='maindiv_"+rental_name_esc+"'] .item_add_off").removeClass("item_add_off").addClass("item_add").trigger("classChange");
5871          jQuery("div[name='maindiv_"+rental_name_esc+"'] .unavailable_message").hide();
5872        }
5873        if(io_checkavail=="hide") jQuery("div[name='maindiv_"+rental_name_esc+"']").show();
5874
5875        /* product page */
5876        if(jQuery(".io_product_container").length && io_checkavail!="off"){
5877          if(main_name_temp==rental_name){
5878            jQuery(".io_product_container .item_add_off").removeClass("item_add_off").addClass("item_add").trigger("classChange");
5879            jQuery(".io_product_container .unavailable_message").hide();
5880          }
5881        }
5882      }
5883    });
5884  }
5885  function displayAccessoryPrices(data) {
5886      if (data.price) {
5887          let acc_prices = data.price;
5888          for (const [key, value] of Object.entries(acc_prices)) {
5889              let new_key = key;
5890              if ((key.match(/_/g) || []).length > 1) {
5891                  let split_key = key.split("_");
5892                  let second_to_last = split_key[split_key.length - 2];
5893                  let last = split_key[split_key.length - 1];
5894                  new_key = second_to_last + "_" + last;
5895              }
5896              if (io_hide_zero == 1 && value > 0) {
5897                  let id_string = "#io_acc_desc_" + new_key;
5898                  let formatted_price = simpleCart.toCurrency(value);
5899                  if (jQuery("#io_acc_" + new_key + " .io_acc_price").length > 0) {
5900                      jQuery("#io_acc_" + new_key + " .io_acc_price").html(formatted_price);
5901                  } else {
5902                      let price_display = '<span class="io_acc_price"> ' + formatted_price + ' </span>';
5903                      jQuery(id_string).after(price_display);
5904                  }
5905              } else if (io_hide_zero == 0) {
5906                  let id_string = "#io_acc_desc_" + new_key;
5907                  let formatted_price = simpleCart.toCurrency(value);
5908                  if (jQuery("#io_acc_" + new_key + " .io_acc_price").length > 0) {
5909                      jQuery("#io_acc_" + new_key + " .io_acc_price").html(formatted_price);
5910                  } else {
5911                      let price_display = '<span class="io_acc_price"> ' + formatted_price + ' </span>';
5912                      jQuery(id_string).after(price_display);
5913                  }
5914              }
5915          }
5916      }
5917  }
5918  function make_live_price_editable_time(times, delivery_method=null) {
5919    if(!delivery_method) delivery_method = getCookie("io_delivery_method");
5920    let ele_text = "";
5921    if(times[0]) ele_text = "on " + times[0] + " ";
5922    if(times[2] === 0) times[2] = 1;
5923    if(io_hidetimes!="on" && !isNaN(times[2])) ele_text += "for "+times[2]+" hours ";
5924    if(delivery_method) ele_text += "for " + delivery_method + ". ";
5925    ele_text += '<span style="cursor:pointer; color:blue; text-decoration:underline;" onclick=checkAvailDateClick()>edit</span>';
5926    return ele_text;
5927  }
5928  function checkAvailDateClick(){
5929    cartShow();
5930    /* expand the date picker */
5931    setTimeout(calSetDateRange,100);
5932  }
5933  function checkAvailPageOnly(){
5934    checkAvailFilter();
5935    if(addressCookiesSet() && io_distance_charge){
5936      runDeliveryCall(true);
5937    }
5938  }
5939  function getAccIDforPrice(){
5940    let accessory_arr = jQuery(".io_acc_li").toArray();
5941    let acc_rental_id_str = "";
5942    for(let current_accessory = 0; current_accessory < accessory_arr.length; current_accessory++){
5943      let required_tag = jQuery(accessory_arr[current_accessory]).find(".item_required");
5944      if(required_tag.length > 0){
5945        if(required_tag[0].innerText == 0){
5946          acc_rental_id_str += jQuery(accessory_arr[current_accessory]).find(".item_rentalid")[0].innerText +"|";
5947        }
5948      }
5949    }
5950    return acc_rental_id_str;
5951  }
5952  function getUpsellIDforPrice(){
5953    let upsell_arr = jQuery(".page-carousel-rid").toArray();
5954    let upsell_rental_id_str = "";
5955    for(let current_upsell = 0; current_upsell < upsell_arr.length; current_upsell++){
5956      upsell_rental_id_str +=upsell_arr[current_upsell].innerText+"|";
5957    }
5958    return upsell_rental_id_str;
5959  }
5960  function displayUpsellPrices(data){
5961    if(data.price){
5962      let upsell_prices = data.price;
5963      for (const [key, value] of Object.entries(upsell_prices)) {
5964        if(io_hide_zero == 1 && value > 0){
5965          let id_string = "#rid"+ key;
5966          let formatted_price = simpleCart.toCurrency(value);
5967          let price_display ='<span class="page-carousel-price"> '+formatted_price+' </span>';
5968          jQuery(id_string).after(price_display);
5969        }else if(io_hide_zero == 0){
5970          let id_string = "#rid"+ key;
5971          let formatted_price = simpleCart.toCurrency(value);
5972          let price_display ='<span class="page-carousel-price"> '+formatted_price+' </span>';
5973          jQuery(id_string).after(price_display);
5974        }
5975      }
5976      pageFlickityRefresh();
5977    }
5978  }
5979  /*</editor-fold>*/
5980
5981  /*<editor-fold defaultstate="collapsed" desc="Check Avail - Cart">*/
5982  function checkAvailCartOnly(skip_timer=false){
5983    checkAvailCart();
5984    checkAvailCartTimeslots();
5985  }
5986
5987  function checkAvailCartTimeslots(){
5988    let rental_names = "";
5989    let rental_ids = "";
5990    let cart_rental_names = "";
5991    let cart_rental_ids = "";
5992    let times = getAvailTimes();
5993    let start_date = times[0];
5994    let event_duration = times[2];
5995    let end_date = start_date;
5996    var event_start_time = getCookie("io_timeStart");
5997    simpleCart.each(function (item, x) {
5998      var timeslots_html = item.get('timeslots');
5999      if(typeof timeslots_html == "undefined") return;
6000      if(timeslots_html.length == 0) return;
6001      var cart_name = item.get("encoded");
6002      if(cart_name==null) {
6003        cart_name = encodeURIComponent(item.get("name"));
6004        cart_name = encodeURIComponent(decodeURIComponent(cart_name).replace(/[\u2032\u2019]+/ig,"'"));
6005      }
6006      rental_id = item.get("rentalid");
6007
6008      var timeslot_name = getTimeslotName(timeslots_html);
6009      var timeslot_sel_range = jQuery(".item-timeslots [name=\""+timeslot_name+"\"] option:selected").val();
6010      if(typeof timeslot_sel_range != "undefined"){
6011        /* timeslots */
6012        setTimeslotSelected(item, timeslot_name);
6013      }else{
6014        /*  timepickers */
6015        setTimePicker(item, timeslot_name);
6016        let start_timepicker = document.getElementsByName(timeslot_name.replace("io_timepicker_", "start_timeslot_"));
6017        let end_timepicker = document.getElementsByName(timeslot_name.replace("io_timepicker_", "end_timeslot_"));
6018        timeslot_sel_range = start_timepicker[start_timepicker.length-1].value;
6019        timeslot_sel_range += " - " + end_timepicker[end_timepicker.length-1].value;
6020      }
6021
6022      var timeslot_sel_arr = "";
6023      if(typeof timeslot_sel_range != "undefined"){
6024        var [start_time, end_time] = break_timeslot_sel_range(timeslot_sel_range);
6025        if(start_time && end_time){
6026          let newDate1 = convertDateStringtoDateObject(start_date, start_time);
6027          let newDate2 = convertDateStringtoDateObject(end_date, end_time);
6028          let time_duration = ((newDate2 - newDate1) / 3600) / 1000;
6029          let quantity = item.get("quantity");
6030          if(item.get("inputtype") == "Map"){
6031            quantity = 1
6032          }
6033          rental_names += cart_name + "-" + quantity+"|";
6034          rental_ids += rental_id+"-"+quantity+"-"+start_time+"-"+time_duration+"|";
6035          cart_rental_names = rental_names;
6036          cart_rental_ids = rental_ids;
6037        }
6038      }
6039    });
6040    if(rental_ids || rental_names){
6041      checkAvailCall(start_date,event_start_time,event_duration,rental_names,rental_ids,updateCartAvail,1,cart_rental_ids,cart_rental_names,1);
6042    }
6043    return true;
6044  }
6045
6046  function checkAvailCart(){
6047    let rental_names = "";
6048    let rental_ids = "";
6049    let cart_rental_names = "";
6050    let cart_rental_ids = "";
6051    simpleCart.each(function (item, x) {
6052      if(typeof item.get('timeslots') != "undefined"){
6053        if(item.get('timeslots').length > 0){
6054          return;
6055        }
6056      }
6057      var cart_name = item.get("encoded");
6058      if(cart_name==null){
6059        cart_name = encodeURIComponent(item.get("name"));
6060        cart_name = encodeURIComponent(decodeURIComponent(cart_name).replace(/[\u2032\u2019]+/ig,"'"));
6061      }
6062      let quantity = item.get("quantity");
6063      if(item.get("inputtype") == "Map"){
6064        quantity = 1
6065      }
6066      rental_names += cart_name + "-" + quantity + "|";
6067      cart_rental_names += cart_name + "-" + quantity + "|";
6068      var cart_id = item.get("rentalid");
6069      rental_ids += cart_id + "-" + quantity + "|";
6070      cart_rental_ids += cart_id + "-" + quantity + "|";
6071    });
6072    var times = getAvailTimes();
6073    let return_id = 0;
6074    if(rental_ids != ""){
6075      return_id = 1;
6076    }
6077    if(rental_ids != "" || rental_names != ""){
6078      return checkAvailCall(times[0],times[1],times[2],rental_names,rental_ids,updateCartAvail,1,cart_rental_ids,cart_rental_names,return_id);
6079    }
6080    return true;
6081  }
6082  function updateCartAvail(data){
6083    let use_id = data["return_id"]
6084    delete data["return_id"];
6085    if(use_id == 1){
6086      updateCartAvail_itemIDs(data)
6087    }else{
6088      updateCartAvail_itemNames(data);
6089    }
6090    console.log("cart update");
6091    if(addressCookiesSet() && io_distance_charge){
6092      runDeliveryCall(true);
6093    }
6094    /* simpleCart.trigger("update"); */
6095    simpleCart.update();
6096    /* jQuery("#avail").html(output); */
6097  }
6098
6099  function updateCartAvail_itemIDs(data){
6100    jQuery.each(data, function (rental_id, qty){
6101      simpleCart.each(function (item, x) {
6102        if(rental_id == item.get("rentalid")){
6103          if(io_hideQuantityAvail == "off"){
6104            if(qty>=9999 || item.get("inputtype") == "Map" || (item.get("giftcardvalue") && item.get("giftcardvalue").trim())){
6105              item.set("availability", "available");
6106            }else{
6107              item.set("availability", qty + " available");
6108            }
6109          }else if(io_hideQuantityAvail == "on"){
6110            if(qty<=0 || qty < item.get("quantity")){
6111              item.set("availability", "not available");
6112            }else{
6113              item.set("availability", "available");
6114            }
6115          }
6116          var vendorid = item.get("vendorid");
6117          if(vendorid && vendorid.trim()){
6118            item.set("availability", "availability must be verified");
6119          }
6120        }
6121        if (rental_id == "price") {
6122          var prices = qty;
6123          jQuery.each(prices, function (price_name, amt) {
6124            if(price_name == item.get("rentalid")){
6125              if (typeof amt == "string" || amt instanceof String){
6126                if(amt != "TBD"){
6127                  if(typeof amt == "string") amt = Number(amt.replace(",",""));
6128                }
6129              }
6130              item.set("price", amt);
6131            }
6132          });
6133        }
6134      });
6135    });
6136  }
6137
6138  function updateCartAvail_itemNames(data){
6139    jQuery.each(data, function (rental_name, qty) {
6140      rental_name = rental_name.replace(/[\u2032\u2019]+/ig,"'");
6141      simpleCart.each(function (item, x) {
6142        try{
6143          var cart_name = decodeURIComponent(item.get("encoded").replace(/[+]/gi, "%20"));
6144        }catch(e){cart_name=null}
6145        if(cart_name==null) cart_name = item.get("name")
6146        cart_name = cart_name.replace(/[\u2032\u2019]+/ig,"'");
6147        var i = cart_name.lastIndexOf(":");
6148        if(i>0 && cart_name.toUpperCase() != rental_name.toUpperCase() && rental_name!="price"){cart_name = cart_name.substring(i+1)}
6149        if (cart_name.toUpperCase() == rental_name.toUpperCase()) {
6150          if(qty>9999){
6151            item.set("availability", "available");
6152          }else{
6153            item.set("availability", qty + " available");
6154          }
6155        }
6156        if (rental_name == "price") {
6157          var prices = qty;
6158          jQuery.each(prices, function (price_name, amt) {
6159            price_name = price_name.replace(/[\u2032\u2019]+/ig,"'");
6160            let acc_name = "";
6161            let rental_name = "";
6162            var i = cart_name.lastIndexOf(":");
6163            if(i>0){
6164              rental_name = cart_name.substring(0, i);
6165              acc_name = cart_name.substring(i+1);
6166            }
6167            if (acc_name === price_name) {
6168              var rental_id = item.get("rentalid");
6169              if(rental_id != null){
6170                rid_arr = rental_id.split(":");
6171                /* ignore the main id for this */
6172                rental_id = rid_arr[rid_arr.length-1];
6173                if(jQuery("#io_acc_overrideprice_"+rental_id).first().text()>0){
6174                  amt = prices[acc_name];
6175                }else{
6176                  let item_price = Number(prices[rental_name].replace(",",""));
6177                  amt = Number(amt.replace(",","")) + item_price;
6178                  item.set("price", amt);
6179                  return;
6180                }
6181              }
6182              if(amt==null){
6183                amt = "0";
6184              }
6185              /* returned price is per unit */
6186              if(typeof amt == "string") amt = Number(amt.replace(",",""));
6187              item.set("price", amt);
6188            }else if(!rental_name && !acc_name){
6189              amt = Number(prices[cart_name].replace(",",""));
6190              item.set("price", amt);
6191            }
6192          });
6193        }
6194      });
6195    });
6196  }
6197  /*</editor-fold>*/
6198
6199  /*<editor-fold defaultstate="collapsed" desc="Upsell Carousels">*/
6200  function updateCartUpsell(data){
6201    let cart_carousel = jQuery(".cart-carousel");
6202    viewport = jQuery(".cart-carousel .flickity-viewport");
6203    if(viewport.length > 0){
6204      cart_carousel.flickity("destroy");
6205    }
6206    cart_carousel.empty();
6207    data.forEach(function(upsell){
6208      cell = createCartCarouselCell(upsell["image"], upsell["name"], upsell["page"]);
6209      cart_carousel.append(cell);
6210    });
6211    makeCarousel(cart_carousel);
6212    jQuery("#cart-carousel-container").show();
6213    setTimeout(cartFlickityRefresh, 500);
6214  }
6215
6216  function cartFlickityRefresh(){
6217    jQuery(".cart-carousel").flickity("resize");
6218  }
6219
6220  //IO-14031
6221  function isMobile()
6222  {
6223  // Modern detection
6224    if (navigator.userAgentData && navigator.userAgentData.mobile !== undefined) {
6225      return navigator.userAgentData.mobile;
6226    }
6227
6228  // Fallback for older browsers
6229    return /Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent) ||
6230           ('ontouchstart' in window && navigator.maxTouchPoints > 0);
6231  }
6232
6233  function makeCarousel(cart_carousel)
6234  {
6235    cart_carousel.flickity({
6236      wrapAround: true,
6237      draggable: isMobile(),
6238      cellAlign: 'left',
6239      //autoPlay: 3000,
6240      groupCells: true,
6241      resize: true
6242    });
6243    cart_carousel_set = true;
6244  }
6245
6246  function createCartCarouselCell(image, name, page){
6247    cell = '<div class="io_cart_carousel_cell"> <a href='+page+' class="cart-carousel-link"> <img class="cart-carousel-image" src='+image+'> <p class="cart-carousel-name"> '+name+' </p> </a> </div>';
6248    return cell;
6249  }
6250  /*</editor-fold>*/
6251
6252  /*<editor-fold defaultstate="collapsed" desc="Ajax Calls">*/
6253  function checkAvailCall(start_date,start_time,time_duration,rental_names,rental_ids,returnFunc,singleCart,cart_rental_ids,cart_rental_names,return_id,temp=0,delivery_method=null,price_only=0,custom_price_name="", skip_hidden_lead = 0) {
6254        /*
6255        IO-21459 If we have no duration set (event not set in cart), and we are doing the call for the page live
6256        price, and we have the setting on where we want to display this price even if the event date is not set:
6257
6258        We set the time_duration to 1 hour. This defaults the start date to January 1, 1970 with duration of
6259        1 hour in the lead meaning it will be available and we have the one hour price.
6260        */
6261    if((isNaN(time_duration) || time_duration===0) && price_only==1 && io_always_display_live_price == "on"){
6262      time_duration = 1;
6263      if(!start_date){
6264        start_date = getFormatteddate(new Date());
6265      }
6266      if(!start_time){
6267        start_time = getFormattedtime(new Date());
6268      }
6269    }else if((isNaN(time_duration) || time_duration===0) && price_only==0 && io_hidetimes === "on"){
6270      /* IO-22689 if they have times hidden, and happen to have the same default start and end time, we still want to do the call. */
6271      time_duration = 1;
6272    }else if(isNaN(time_duration) || time_duration===0){
6273      return;
6274    }
6275    url = "https://rental.software/quotes/check_availability_v2.php?callback=?";
6276    if(window.location.href.indexOf("localhost") > -1){
6277      //url = "http://localhost/bugs/quotes/check_availability_v2.php?callback=?";
6278      url = "http://localhost/io/bugs/quotes/check_availability_v2.php?callback=?";
6279      //url = "http://localhost/jbug/trunk/quotes/check_availability_v2.php?callback=?";
6280    }
6281    if(!delivery_method) delivery_method = getCookie("io_delivery_method");
6282    let address_data = {
6283      "address": getCookie("io_address"),
6284      "state": getCookie("io_state"),
6285      "city": getCookie("io_city"),
6286      "zip": getCookie("io_zip")
6287    };
6288    if(!ioHasMarketingConsent()){
6289      address_data = {"address":"", "state":"", "city":"", "zip":""};
6290    }
6291    url +=
6292            "&name=" + encodeURIComponent("A&M Bounce A-Lot, LLC") +
6293            "&startdate=" + start_date +
6294            "&starttime=" + start_time +
6295            "&duration=" + time_duration +
6296            "&street=" + encodeURIComponent(address_data["address"]) +
6297            "&city=" + encodeURIComponent(address_data["city"]) +
6298            "&state=" + encodeURIComponent(address_data["state"]) +
6299            "&zip=" + encodeURIComponent(address_data["zip"]) +
6300            "&single_cart=" + singleCart +
6301            "&usecushion=1" +
6302            "&include_price=1" +
6303            "&showlocations=0" +
6304            "&rental_names=" + rental_names +
6305            "&rental_ids=" + rental_ids +
6306            "&cart_rental_names=" + cart_rental_names +
6307            "&cart_rental_ids=" + cart_rental_ids +
6308            "&return_id=" + return_id +
6309            "&delivery_method=" + delivery_method +
6310            "&temp=" + temp +
6311            "&skip_hidden_lead="+ skip_hidden_lead;
6312      if (custom_price_name)
6313      {
6314          ioCartLoaderIncrement();
6315          jQuery.getJSON(url, function (data)
6316          {
6317              try
6318              {
6319                  returnFunc(data, custom_price_name);
6320              }
6321              finally
6322              {
6323                  ioCartLoaderDecrement();
6324              }
6325          });
6326      }
6327      else
6328      {
6329          ioCartLoaderIncrement();
6330          jQuery.getJSON(url, function (data)
6331          {
6332              try
6333              {
6334                  returnFunc(data);
6335              }
6336              finally
6337              {
6338                  ioCartLoaderDecrement();
6339              }
6340          });
6341      }
6342  }
6343
6344  function getUpsellsCall(start_date,start_time,time_duration,rental_ids,returnFunc) {
6345    if(rental_ids.replace(/[|]/g,"").length==0){return;}
6346    url = "https://rental.software/quotes/in_cart_upsell.php?callback=?";
6347    if(window.location.href.indexOf("localhost") > -1){
6348      //url = "http://localhost/bugs/quotes/in_cart_upsell.php?callback=?"
6349      url = "http://localhost/io/bugs/quotes/in_cart_upsell.php?callback=?"
6350    }
6351    url +=
6352            "&name=" + encodeURIComponent("A&M Bounce A-Lot, LLC") +
6353            "&startdate=" + start_date +
6354            "&starttime=" + start_time +
6355            "&duration=" + time_duration +
6356            "&usecushion=1" +
6357            "&include_price=1" +
6358            "&showlocations=0" +
6359            "&rental_ids=" + rental_ids;
6360    //IO-25557
6361    if(window.location.href.indexOf("dev.rental.software") > -1)//if it is a dev site, we need to send
6362    {
6363      let pattern = /(https:\/\/dev\.rental\.software\/[^\/]+\/)/;
6364      let matches = window.location.href.match(pattern);
6365      matches && matches.length > 0 ? url += "&site=" + matches[0]:0;
6366    }
6367    else
6368    {
6369      url += "&site=" + window.location.host;
6370    }
6371    jQuery.getJSON(url, returnFunc);
6372  }
6373  /*</editor-fold>*/
6374
6375  /*<editor-fold defaultstate="collapsed" desc="Customer Geolocation Functions">*/
6376  function setLocationInLocalStorage(city)
6377  {
6378      try
6379      {
6380          const location_data =
6381          {
6382              city: city,
6383              timestamp: Date.now()
6384          };
6385          localStorage.setItem(storage_key, JSON.stringify(location_data));
6386          return true;
6387      }
6388      catch (e)
6389      {
6390          console.warn('Failed to save location to localStorage:', e);
6391          return false;
6392      }
6393  }
6394
6395  function getLocationFromLocalStorage()
6396  {
6397      try
6398      {
6399          const location_data = localStorage.getItem(storage_key);
6400          if (location_data)
6401          {
6402              return JSON.parse(location_data);
6403          }
6404
6405      }
6406      catch (e)
6407      {
6408          console.warn('Failed to retrieve location from localStorage:', e);
6409      }
6410      return null;
6411  }
6412
6413  function displayLocation(city)
6414  {
6415      const location_element = jQuery('.io_geo_city');
6416      const container_element = jQuery('#io_customer_geolocation');
6417
6418      if (location_element.length && container_element.length)
6419      {
6420          location_element.text(`${city}`);
6421          container_element.show();
6422          return true;
6423      }
6424      return false;
6425  }
6426
6427  function getCityFromIO(returnFunc)
6428  {
6429    var url = "https://rental.software/include/geolocation_handler.php?callback=?";
6430    if(window.location.href.indexOf("localhost") > -1)
6431    {
6432      url = "http://localhost//features//include/geolocation_handler.php?callback=?";
6433    }
6434    url +=
6435        "&name=" + encodeURIComponent("A&M Bounce A-Lot, LLC") +
6436        "&ip=" + encodeURIComponent(io_customer_ip);
6437
6438    jQuery.getJSON(url, returnFunc);
6439  }
6440
6441  function initializeGeolocation()
6442  {
6443      try
6444      {
6445      // Check local storage first
6446          const cached_location = getLocationFromLocalStorage();
6447          if (cached_location && cached_location.city)
6448          {
6449              if (displayLocation(cached_location.city))
6450              {
6451                  return;
6452              }
6453          }
6454
6455          // If no cached location, call the handler to get location
6456          getCityFromIO(function(location_data)
6457          {
6458              if (location_data && location_data.city && !location_data.error)
6459              {
6460                  // Display and store the location
6461                  if (displayLocation(location_data.city))
6462                  {
6463                      setLocationInLocalStorage(location_data.city);
6464                  }
6465              }
6466              else
6467              {
6468                  console.warn('Failed to get location:', location_data ? location_data.error : 'Unknown error');
6469              }
6470          });
6471      } 
6472      catch (error)
6473      {
6474          console.error('Geolocation initialization failed:', error);
6475      }
6476  }
6477  /*</editor-fold>*/
6478
6479  /*<editor-fold defaultstate="collapsed" desc="Loading Animation Helpers">*/
6480
6481  /**
6482  * Toggles the visibility of the cart loading overlay.
6483  *
6484  * @param {boolean} show - A boolean value to determine whether to show or hide the overlay.
6485  *                         If true, the overlay becomes visible; if false, it is hidden.
6486  * @return {void} This function does not return a value.
6487  */
6488  function ioCartShowOverlay(show)
6489  {
6490      try
6491      {
6492          var overlay = document.getElementById('ioCartLoadingOverlay');
6493          if (!overlay) return;
6494          if (show)
6495          {
6496              overlay.style.display = 'flex';
6497              overlay.setAttribute('aria-hidden', 'false');
6498          }
6499          else
6500          {
6501              overlay.style.display = 'none';
6502              overlay.setAttribute('aria-hidden', 'true');
6503          }
6504      }
6505      catch (e)
6506      {}
6507  }
6508
6509  /**
6510   * Activates the cart loader by setting the loading state to active, initializing the loading count,
6511   * and displaying the overlay. Includes a fallback to deactivate the loader if no response is received
6512   * within a specified timeout period.
6513   *
6514   * @return {void} This method does not return a value.
6515   */
6516  function ioCartLoaderActivate()
6517  {
6518      io_cart_loading_active = true;
6519      io_cart_loading_count = 0;
6520      ioCartShowOverlay(true);
6521
6522      //fallback in case the availability call doesn't come back
6523      if (io_cart_loading_fallback_timer) clearTimeout(io_cart_loading_fallback_timer);
6524      io_cart_loading_fallback_timer = setTimeout(function () {
6525          if (io_cart_loading_active) {
6526              io_cart_loading_active = false;
6527              io_cart_loading_count = 0;
6528              ioCartShowOverlay(false);
6529          }
6530      }, 15000);
6531  }
6532
6533  /**
6534   * Increments the count of active cart loading operations and ensures the cart overlay is displayed.
6535   *
6536   * This method increases the `io_cart_loading_count` if the `io_cart_loading_active` flag is set to true.
6537   * It also calls the `ioCartShowOverlay` function with a true value to show the overlay.
6538   *
6539   * @return {void} This function does not return any value.
6540   */
6541  function ioCartLoaderIncrement()
6542  {
6543      if (io_cart_loading_active)
6544      {
6545          io_cart_loading_count++;
6546          ioCartShowOverlay(true);
6547      }
6548  }
6549
6550  /**
6551   * Decrements the `io_cart_loading_count` if `io_cart_loading_active` is true.
6552   * If the count reaches zero, it deactivates the loader, removes the overlay,
6553   * and clears the fallback timer
6554   */
6555  function ioCartLoaderDecrement()
6556  {
6557      if (io_cart_loading_active)
6558      {
6559          io_cart_loading_count = Math.max(0, io_cart_loading_count - 1);
6560
6561          if (io_cart_loading_count === 0)
6562          {
6563              io_cart_loading_active = false;
6564              ioCartShowOverlay(false);
6565
6566              if (io_cart_loading_fallback_timer)
6567              {
6568                  clearTimeout(io_cart_loading_fallback_timer);
6569                  io_cart_loading_fallback_timer = null;
6570              }
6571          }
6572      }
6573  }
6574
6575  /*</editor-fold>*/
6576
6577</script>
6577
6578<!-- Start Shortcoder content --><div class="address_entry elementor-widget-text-editor">
6579  <table>
6580    <tr>
6581      <td> <label for="address" id="io_cdl_address_label" style="display: table-cell"> Street Address </label> </td>
6582      <td> <input id="io_cd_address" style="display: table-cell" name="address" type="text"></input> </td>
6583    </tr>
6584    <tr>
6585      <td> <label for="city" id="io_cdl_city_label" style="display: table-cell"> City </label> </td>
6586      <td> <input id="io_cd_city" style="display: table-cell" name="city" type="text"></input> </td>
6587    </tr>
6588    <tr id="us-state-select">
6589      <td> <label for="state" id="io_cdl_state_label" style="display: table-cell"> State </label> </td>
6590      <td> <select name="state" id="io_cd_state" style="display: table-cell" class="input-mini">
6591        <option value=""></option>
6592        <option value="AK">AK</option>
6593        <option value="AL">AL</option>
6594        <option value="AR">AR</option>
6595        <option value="AZ">AZ</option>
6596        <option value="CA">CA</option>
6597        <option value="CO">CO</option>
6598        <option value="CT">CT</option>
6599        <option value="DC">DC</option>
6600        <option value="DE">DE</option>
6601        <option value="FL">FL</option>
6602        <option value="GA">GA</option>
6603        <option value="HI">HI</option>
6604        <option value="IA">IA</option>
6605        <option value="ID">ID</option>
6606        <option value="IL">IL</option>
6607        <option value="IN">IN</option>
6608        <option value="KS">KS</option>
6609        <option value="KY">KY</option>
6610        <option value="LA">LA</option>
6611        <option value="MA">MA</option>
6612        <option value="MD">MD</option>
6613        <option value="ME">ME</option>
6614        <option value="MI">MI</option>
6615        <option value="MN">MN</option>
6616        <option value="MO">MO</option>
6617        <option value="MS">MS</option>
6618        <option value="MT">MT</option>
6619        <option value="NC">NC</option>
6620        <option value="ND">ND</option>
6621        <option value="NE">NE</option>
6622        <option value="NH">NH</option>
6623        <option value="NJ">NJ</option>
6624        <option value="NM">NM</option>
6625        <option value="NV">NV</option>
6626        <option value="NY">NY</option>
6627        <option value="OH">OH</option>
6628        <option value="OK">OK</option>
6629        <option value="OR">OR</option>
6630        <option value="PA">PA</option>
6631        <option value="RI">RI</option>
6632        <option value="SC">SC</option>
6633        <option value="SD">SD</option>
6634        <option value="TN">TN</option>
6635        <option value="TX">TX</option>
6636        <option value="UT">UT</option>
6637        <option value="VA">VA</option>
6638        <option value="VT">VT</option>
6639        <option value="WA">WA</option>
6640        <option value="WI">WI</option>
6641        <option value="WV">WV</option>
6642        <option value="WY">WY</option>
6643      </select>
6644      </td>
6645    </tr>
6646    <tr>
6647      <td> <label for="zip" id="io_cdl_zip_label" style="display: table-cell"> Zip Code </label> </td>
6648      <td> <input id="io_cd_zip" style="display: table-cell" name="zip" type="text"></input> </td>
6649    </tr>
6650  </table>
6651  <a class="elementor-button elementor-size-sm io_button"
6652     id="address_entry_submit"
6653     href="javascript:;"> Save Address
6654  </a>
6655  <div id="delivery_charge_info_box">
6656    <hr>
6657    <h3 id="info_box_header"> </h3>
6658    <p id="info_box_information"> </p>
6659    <a href="javascript:;" onClick="closeAddressEntry()" class="delivery_info_continue elementor-button elementor-size-sm io_button">Continue Shopping</a>
6660  </div>
6661</div>
6662<script>
6663  /* for checking delivery */
6664  function runDeliveryCall(cart_only = false){
6665    let address_fields = jQuery("[id^='io_cd_']");
6666    let address_data = {
6667      "address": getCookie("io_address"),
6668      "state": getCookie("io_state"),
6669      "city": getCookie("io_city"),
6670      "zip": getCookie("io_zip")
6671    };
6672
6673    let times = getAvailTimes();
6674
6675    let start_date = times[0];
6676    let end_date = start_date;
6677    let start_time = times[1];
6678    let duration = times[2];
6679
6680    let rental_ids = "";
6681    simpleCart.each(function (item, x) {
6682      if(typeof item.get('timeslots') != "undefined"){
6683        if(item.get('timeslots').length > 0){
6684        var timeslots_html = item.get('timeslots');
6685        var rental_id = item.get('rentalid');
6686        if(typeof timeslots_html == "undefined") return;
6687        if(timeslots_html.length == 0) return;
6688
6689        var timeslot_name = getTimeslotName(timeslots_html);
6690        var timeslot_sel_range = jQuery(".item-timeslots [name=\""+timeslot_name+"\"] option:selected").val();
6691        if(typeof timeslot_sel_range != "undefined"){
6692          /* timeslots */
6693          setTimeslotSelected(item, timeslot_name);
6694        }else{
6695          /*  timepickers */
6696          setTimePicker(item, timeslot_name);//todo?
6697          let start_timepicker = document.getElementsByName(timeslot_name.replace("io_timepicker_", "start_timeslot_"));
6698          let end_timepicker = document.getElementsByName(timeslot_name.replace("io_timepicker_", "end_timeslot_"));
6699          timeslot_sel_range = start_timepicker[start_timepicker.length-1].value;
6700          timeslot_sel_range += " - " + end_timepicker[end_timepicker.length-1].value;
6701        }
6702
6703        var timeslot_sel_arr = "";
6704        if(typeof timeslot_sel_range != "undefined"){
6705          timeslot_sel_arr = timeslot_sel_range.split(" - ");
6706          var timeslot_start_time = timeslot_sel_arr[0].replace("am"," am").replace("pm"," pm").replace("  "," ");
6707          var timeslot_end_time = timeslot_sel_arr[1].replace("am"," am").replace("pm"," pm").replace("  "," ");
6708          if(timeslot_start_time && timeslot_end_time){
6709            let newDate1 = convertDateStringtoDateObject(start_date, timeslot_start_time);
6710            let newDate2 = convertDateStringtoDateObject(end_date, timeslot_end_time);
6711            let timeslot_duration = ((newDate2 - newDate1) / 3600) / 1000;
6712            rental_ids += rental_id+"-"+item.get("quantity")+"-"+timeslot_start_time+"-"+timeslot_duration+"|";
6713          }
6714        }
6715      }
6716    }
6717  else{
6718    var cart_id = item.get("rentalid");
6719    rental_ids += cart_id + "-" + item.get("quantity") + "|";
6720  }
6721  });
6722
6723  address_fields.each(function() {
6724    let field = this.id.split("_")[2];
6725    value = this.value;
6726    if(!value && !address_data[field]){
6727      jQuery(this).addClass("invalid_address_field")
6728    }
6729    else if(value){
6730      jQuery(this).removeClass("invalid_address_field")
6731      address_data[field] = this.value;
6732    }
6733  });
6734  if(jQuery(".invalid_address_field").length > 0){
6735    return;
6736  }
6737    let delivery_method = ""
6738    if(io_default_delivery_method)
6739    {
6740      delivery_method = io_default_delivery_method;
6741    }
6742    else if(getCookie("io_delivery_method"))
6743    {
6744      delivery_method = getCookie("io_delivery_method");
6745    }
6746
6747
6748  setCookie("io_address", address_data["address"], 14);
6749  setCookie("io_city", address_data["city"], 14);
6750  setCookie("io_state", address_data["state"], 14);
6751  setCookie("io_zip", address_data["zip"], 14);
6752
6753  cart_total = simpleCart.total();
6754  if(cart_total === "TBD") cart_total = 0;
6755  url = "https://rental.software/quotes/get_delivery_info.php?callback=?";
6756  if(window.location.href.indexOf("localhost") > -1){
6757    //url = "http://localhost/bugs/quotes/get_delivery_info.php?callback=?";
6758    url = "http://localhost/io/bugs/quotes/get_delivery_info.php?callback=?";
6759  }
6760  url +=
6761          "&name=" + encodeURIComponent("A&M Bounce A-Lot, LLC") +
6762          "&rental_ids=" + rental_ids +
6763          "&street=" + encodeURIComponent(address_data["address"]) +
6764          "&city=" + encodeURIComponent(address_data["city"]) +
6765          "&state=" + encodeURIComponent(address_data["state"]) +
6766          "&zip=" + encodeURIComponent(address_data["zip"]) +
6767          "&startdate=" + start_date +
6768          "&starttime=" + start_time +
6769          "&duration=" + duration +
6770          "&delivery_method=" + encodeURIComponent(delivery_method) +
6771          "&total=" + cart_total +
6772          "&cart_only=" + cart_only;
6773  jQuery.getJSON(url, function(data){
6774    if(data["delivery_restrict"] === 1){
6775      data["charge"] = 0;
6776    }
6777    handleDeliveryInfo(data, cart_only);
6778  });
6779  }
6780
6781  function handleDeliveryInfo(data, cart_only = false){
6782    jQuery("#deliverSubtotalContainer").show();
6783    jQuery("#checkDeliveryMessage").hide();
6784    let info_box = jQuery("#delivery_charge_info_box");
6785    if(data["delivery_restrict"] == 1){
6786      jQuery("#info_box_header").text("Sorry...");
6787      jQuery("#info_box_information").text(data["error"])
6788      setDeliverySubtotal(data["charge"], true)
6789    }
6790    else{
6791      setDeliverySubtotal(data["charge"])
6792      jQuery("#info_box_header").text("Success!");
6793      if(data["charge"] > 0){
6794        jQuery("#info_box_information").html("We are able to deliver to your location with a " + simpleCart.toCurrency(data["charge"]) +" fee!");
6795      }
6796      else{
6797        jQuery("#info_box_information").html("We are able to deliver to your location with no charge!");
6798      }
6799    }
6800    if(simpleCart.items().length == 0 && cart_only){
6801      jQuery("#info_box_header").text("Items Required.");
6802      jQuery("#info_box_information").html("There needs to be items in your cart to check for delivery fees. But we will save the address information so you don't have to enter it again!")
6803    }
6804    info_box.show();
6805    jQuery.fancybox.update(jQuery(".address_entry"));
6806  }
6807  function showAddressEntry(cart_only=false){
6808    cartHide();
6809    jQuery(".invalid_address_field").removeClass("invalid_address_field")
6810    jQuery("#delivery_charge_info_box").hide();
6811    jQuery("#io_cd_address").val(getCookie("io_address"));
6812    jQuery("#io_cd_state").val(getCookie("io_state"));
6813    jQuery("#io_cd_city").val(getCookie("io_city"));
6814    jQuery("#io_cd_zip").val(getCookie("io_zip"));
6815    if(!cart_only){
6816      jQuery("#address_entry_submit").on("click", null, function(){ runDeliveryCall(); });
6817    } else{
6818      jQuery("#address_entry_submit").on("click", null, function(){ runDeliveryCall(cart_only); });
6819    }
6820    jQuery.fancybox.open(jQuery(".address_entry"));
6821  }
6822
6823  function closeAddressEntry(){
6824    jQuery.fancybox.close();
6825  }
6826
6827  function setDeliverySubtotal(amount, unavailable=false){
6828    if(unavailable){
6829      jQuery("#deliverySubtotal").html("Unavailable");
6830    } else{
6831      jQuery("#deliverySubtotal").html(simpleCart.toCurrency(amount));
6832    }
6833  }
6834
6835  function addressCookiesSet(){
6836    if(getCookie("address") && getCookie("state") && getCookie("city") && getCookie("zip")){
6837      return true;
6838    } else{
6839      return false
6840    }
6841  }
6842</script>
6842<!-- End Shortcoder content -->
6843<!-- Start Shortcoder content -->
6843<script>
6844  let map;
6845  let geocoder;
6846  let item_id_map;
6847  let drawingManager;
6848  let drawingListener;
6849
6850  let polygons = new Array();
6851
6852  let polyline_markers = new Array();
6853  let polylines = new Array();
6854  let previous_marker;
6855  current_polyline = undefined;
6856  let previous_map_height = "";
6857
6858  function initMap() {
6859    map = new google.maps.Map(document.getElementById("map_container"), {
6860      center: { lat: -34.397, lng: 150.644 },
6861      zoom: 8,
6862      mapTypeId: "hybrid",
6863      disableDefaultUI: true,
6864      tilt: 0
6865    });
6866    drawingManager = new google.maps.drawing.DrawingManager({
6867      drawingControl: true,
6868      drawingControlOptions: {
6869        position: google.maps.ControlPosition.TOP_CENTER,
6870        drawingModes: [
6871          google.maps.drawing.OverlayType.POLYGON,
6872        ],
6873      }
6874    });
6875
6876    geocoder = new google.maps.Geocoder();
6877  }
6878
6879  function io_geocode(){
6880    let prefix = "#io_mc_"
6881    let request = ""
6882    let address_value = "";
6883    if(jQuery(prefix+"address").length) {
6884      address_value = jQuery(prefix+"address").val();
6885      if(address_value) setCookie("address", jQuery("#io_mc_address").val(), 14);
6886    }
6887    let city_value = "";
6888    if(jQuery(prefix+"city").length){
6889      city_value = jQuery(prefix+"city").val();
6890      if(city_value) setCookie("city", jQuery("#io_mc_city").val(), 14);
6891    }
6892    let state_value = "";
6893    if(jQuery(prefix+"state").length){
6894      state_value = jQuery(prefix+"state").val();
6895      if(state_value) setCookie("state", jQuery("#io_mc_state").val(), 14);
6896    }
6897    let zip_value = "";
6898    if(jQuery(prefix+"zip").length){
6899      zip_value = jQuery(prefix+"zip").val();
6900      if(zip_value) setCookie("zip", jQuery("#io_mc_zip").val(), 14);
6901    }
6902
6903    request = address_value + " " + city_value + " " + state_value + " " + zip_value;
6904    if(request){
6905      geocoder.geocode({address:request}).then((result) => {
6906        const { results } = result;
6907        map.setCenter(results[0].geometry.location);
6908        map.setZoom(24);
6909        return results;
6910      });
6911
6912    }
6913
6914    if(!addressProvided()) {
6915      jQuery("#io_map_address_entry").attr("open", "open");
6916    }else{
6917      jQuery("#io_map_address_entry").removeAttr("open");
6918    }
6919  }
6920
6921  function openMap(element){
6922    cartHide()
6923    io_map_clear()
6924    let unit = "meters"
6925    if(country === "US") unit = "feet"
6926    polygons = new Array();
6927    polyline_marker_sets = new Array();
6928    polylines = new Array();
6929    previous_marker = undefined;
6930    current_polyline = undefined;
6931
6932    jQuery("#io_mc_address").val(getCookie("address"));
6933    jQuery("#io_mc_state").val(getCookie("state"));
6934    jQuery("#io_mc_city").val(getCookie("city"));
6935    jQuery("#io_mc_zip").val(getCookie("zip"));
6936    io_geocode();
6937
6938    google.maps.event.removeListener(drawingListener);
6939
6940    if(element.id == "calcPriceOpenMap"){
6941      item_id_map = jQuery(".io_product_infobox .item_rentalid").text();
6942      if(jQuery(".io_product_infobox .item_qtytype").text() == "Area"){
6943        setMapTools_Area(unit, true)
6944      }else if(jQuery(".io_product_infobox .item_qtytype").text() == "Perimeter"){
6945        setMapTools_Perimeter(unit, true)
6946      }
6947    }
6948    else{
6949      item_id_map = jQuery(element).parent().parent().find(".item-rentalid").text();
6950      if(jQuery(element).parent().parent().find(".item-qtytype").text() == "Area"){
6951        setMapTools_Area(unit)
6952      }else if(jQuery(element).parent().parent().find(".item-qtytype").text() == "Perimeter"){
6953        setMapTools_Perimeter(unit)
6954      }
6955    }
6956  }
6957
6958  function addressProvided(){
6959    if(jQuery("#io_mc_address").val() && jQuery("#io_mc_state").val() &&
6960            jQuery("#io_mc_city").val() && jQuery("#io_mc_zip").val() ){
6961      return true;
6962    }
6963    return false;
6964  }
6965
6966  function setMapTools_Area(unit, item_page=false){
6967    jQuery.fancybox.open(jQuery(".map_fancybox"));
6968    drawingManager.setOptions({
6969      drawingControlOptions: {
6970        drawingModes: [google.maps.drawing.OverlayType.POLYGON]
6971      },
6972      drawingMode: google.maps.drawing.OverlayType.POLYGON,
6973      polygonOptions: {
6974        fillColor: "#0191fc",
6975        strokeColor: "#0113fc"
6976      },
6977    });
6978    let units = "meters"
6979    if(country === "US") units = "feet"
6980
6981    jQuery("#io_measurement_input_label").text("Approximate area in "+units+": ");
6982    jQuery("#io_map_manual_input").off("click");
6983    jQuery("#io_map_manual_input").on("click", function(){manual_calc_price("Area", item_page)});
6984    jQuery("#io_perimeter_options_container").hide();
6985    jQuery("#io_map_new_line_container").hide();
6986    jQuery("#io_map_instructions").html("Use the map below to take measurements by clicking on each corner of the area you want to measure. <span id=\"io_map_additional_instructions\">You can draw multiple polygons to include multiple separate surfaces in the total area. Press Clear to remove all polygons and start again. Alternatively if you know the approximate area in "+units+" you can enter the measurement manually below. When finished press Done and the price of the item will be updated </span><i id=\"io_show_more_instructions\" onClick=\"show_more_instruct_click(this)\">(more)</i>")
6987
6988    drawingListener = google.maps.event.addListener(drawingManager, "polygoncomplete", function(polygon) {
6989      polygons.push(polygon);
6990      let convert_feet = 1;
6991      if(country === "US") convert_feet = 10.764;
6992      let approx_area = 0;
6993      polygons.forEach(function(polygon) {
6994        approx_area += google.maps.geometry.spherical.computeArea(polygon.getPath()) * convert_feet;
6995      });
6996      calcprice_approx_area(Math.round(approx_area));
6997    });
6998    drawingManager.setMap(map);
6999  }
7000
7001  function setMapTools_Perimeter(unit, item_page=false){
7002    jQuery.fancybox.open(jQuery(".map_fancybox"));
7003    drawingManager.setOptions({
7004      drawingControlOptions: {
7005        drawingModes: [google.maps.drawing.OverlayType.MARKER]
7006      },
7007      drawingMode: google.maps.drawing.OverlayType.MARKER
7008    });
7009    let height = jQuery("#perimeter_height").val();
7010    let units = "";
7011    if(height){
7012      units = "sq meters"
7013      if(country === "US") units = "sq feet"
7014      jQuery("#io_measurement_input_label").text("Approximate surface area in "+units+": ");
7015      jQuery("#io_map_instructions").html("Use the map below to take measurements by clicking on each corner of the area you want to measure. <span id=\"io_map_additional_instructions\">You can add additional lines by clicking Add New Line button to include more structures into the total. Press Clear to remove all lines and start again. Alternatively if you know the approximate surface area in "+units+" you can enter the measurement manually below. When finished press Done and the price of the item will be updated </span><i id=\"io_show_more_instructions\" onClick=\"show_more_instruct_click(this)\">(more)</i>")
7016
7017    }else{
7018      units = "meters"
7019      if(country === "US") units = "feet"
7020      jQuery("#io_measurement_input_label").text("Approximate perimeter in "+units+": ");
7021      jQuery("#io_map_instructions").html("Use the map below to take measurements by clicking on each corner of the area you want to measure. <span id=\"io_map_additional_instructions\">You can add additional lines by clicking Add New Line button to include more structures into the total. Press Clear to remove all lines and start again. Alternatively if you know the approximate perimeter in "+units+" you can enter the measurement manually below. When finished press Done and the price of the item will be updated </span><i id=\"io_show_more_instructions\" onClick=\"show_more_instruct_click(this)\">(more)</i>")
7022
7023    }
7024
7025    jQuery("#io_map_manual_input").off("click");
7026    jQuery("#io_map_manual_input").bind("click", function(){manual_calc_price("Perimeter", item_page)});
7027    jQuery("#perimeter_height").bind("change", function(){change_perimeter_instructions()});
7028    jQuery("#io_perimeter_options_container").show();
7029    jQuery("#io_map_clear_container").show();
7030    jQuery("#io_map_new_line_container").show();
7031
7032    current_polyline = new google.maps.Polyline({
7033      map: map,
7034      path: [],
7035      strokeColor: "#0113fc",
7036      strokeOpacity: 1.0,
7037      strokeWeight: 2
7038    })
7039    drawingListener = google.maps.event.addListener(drawingManager, "markercomplete", function(marker) {
7040      polyline_markers.push(marker)
7041      marker.setVisible(false);
7042      current_polyline.getPath().push(marker.getPosition())
7043      if(previous_marker){
7044        let convert_feet = 1;
7045        if(country === "US") convert_feet = 3.281;
7046        let approx_perimeter = 0;
7047        polylines.forEach(function(polyline) {
7048          if(convert_feet > 1) convert_feet = 10.764
7049          approx_perimeter += google.maps.geometry.spherical.computeArea(polyline.getPath()) * convert_feet;
7050        });
7051        approx_perimeter += google.maps.geometry.spherical.computeLength(current_polyline.getPath()) * convert_feet;
7052        calcprice_approx_perimeter(Math.round(approx_perimeter));
7053      }
7054      previous_marker = marker;
7055    });
7056
7057    jQuery("#perimeter_height_contianer").show();
7058
7059    drawingManager.setMap(map);
7060  }
7061
7062  function change_perimeter_instructions(){
7063    let height = jQuery("#perimeter_height").val();
7064    if(height){
7065      units = "sq meters"
7066      if(country === "US") units = "sq feet"
7067      jQuery("#io_measurement_input_label").text("Approximate surface area in "+units+": ");
7068      jQuery("#io_map_instructions").html("Use the map below to take measurements by clicking on each corner of the area you want to measure. <span id=\"io_map_additional_instructions\">You can add additional lines by clicking Add New Line button to include more structures into the total. Press Clear to remove all lines and start again. Alternatively if you know the approximate surface area in "+units+" you can enter the measurement manually below. When finished press Done and the price of the item will be updated </span><i id=\"io_show_more_instructions\" onClick=\"show_more_instruct_click(this)\">(more)</i>")
7069    }else {
7070      units = "meters"
7071      if(country === "US") units = "feet"
7072      jQuery("#io_measurement_input_label").text("Approximate perimeter in "+units+": ");
7073      jQuery("#io_map_instructions").html("Use the map below to take measurements by clicking on each corner of the area you want to measure. <span id=\"io_map_additional_instructions\">You can add additional lines by clicking Add New Line button to include more structures into the total. Press Clear to remove all lines and start again. Alternatively if you know the approximate perimeter in "+units+" you can enter the measurement manually below. When finished press Done and the price of the item will be updated </span><i id=\"io_show_more_instructions\" onClick=\"show_more_instruct_click(this)\">(more)</i>")
7074    }
7075  }
7076
7077  function manual_calc_price(method, item_page){
7078    let approx_measurement = parseInt(jQuery("#io_measurement_input").val());
7079    let units = "";
7080    if(approx_measurement){
7081      if(method == "Area"){
7082        units = "sq meters"
7083        if(country === "US") units = "sq feet"
7084      }else if(method == "Perimeter"){
7085        let height = jQuery("#perimeter_height").val();
7086        if(height){
7087          units = "sq meters"
7088          if(country === "US") units = "sq feet"
7089        }else{
7090          units = "meters"
7091          if(country === "US") units = "feet"
7092        }
7093      }
7094      simpleCart.items().forEach(function (item, index){
7095        if(item.get("rentalid") === item_id_map){
7096          item.set("units", units);
7097          item.set("quantity", approx_measurement);
7098        }
7099      });
7100
7101      simpleCart.update();
7102
7103      if(item_page || jQuery(".io_product_infobox .item_rentalid").text() == item_id_map) set_price_on_item_page(units, approx_measurement);
7104      if(!item_page) cartShow();
7105    }
7106    jQuery.fancybox.close();
7107  }
7108
7109  function calcprice_approx_area(approx_area){
7110    jQuery("#io_measurement_input").val(approx_area);
7111  }
7112
7113  function calcprice_approx_perimeter(approx_perimeter){
7114    let height = jQuery("#perimeter_height").val();
7115    if(height && height > 0) approx_perimeter *= parseInt(height);
7116
7117    jQuery("#io_measurement_input").val(approx_perimeter);
7118  }
7119
7120  function set_price_on_item_page(units, measurement){
7121    let measurement_price = document.querySelector(".io_product_measurement_price");
7122    if(measurement_price==undefined){
7123      var first_price = document.querySelector(".io_product_price_box");
7124      if(first_price != null){
7125        measurement_price = first_price.cloneNode(true);
7126        /* clear all classes */
7127        measurement_price.className = "";
7128        measurement_price.classList.add("io_product_price_box");
7129        measurement_price.classList.add("io_product_measurement_price");
7130        measurement_price.style.display = "grid";
7131        /* Make a hidden data span for when adding to cart */
7132        raw_measurement = document.createElement("span");
7133        raw_measurement.classList.add("io_measure_price_raw_measurement");
7134        raw_measurement.style.display = "none";
7135        raw_measurement.textContent = measurement;
7136        measurement_price.appendChild(raw_measurement);
7137        first_price.before(measurement_price);
7138      }
7139    }
7140    var price_1h = Number(jQuery(".io_product_price_1h_"+jQuery(".io_product_infobox .item_rentalid").text()).text().replace(/[^0-9.-]+/g,""));
7141    measurement_price.querySelector("p:nth-child(1)").innerHTML = simpleCart.toCurrency(price_1h*measurement);
7142    measurement_price.querySelector("p:nth-child(2)").innerHTML = "For approximately "+measurement+" "+units;
7143  }
7144
7145  function io_map_clear() {
7146    if(drawingManager.getDrawingMode() == "polygon"){
7147      drawingManager.setDrawingMode("polygon");
7148    }
7149
7150    if(polygons) polygons.forEach(function(polygon) {
7151      polygon.setMap(null);
7152    });
7153    if(current_polyline) current_polyline.setMap(null);
7154    if(polylines) polylines.forEach(function(polyline) {
7155      polyline.setMap(null);
7156    });
7157    if(polyline_markers) polyline_markers.forEach(function(marker) {
7158      marker.setMap(null);
7159    });
7160
7161    current_polyline = new google.maps.Polyline({
7162      map: map,
7163      path: [],
7164      strokeColor: "#0113fc",
7165      strokeOpacity: 1.0,
7166      strokeWeight: 2
7167    });
7168    polygons = new Array();
7169    polylines = new Array();
7170    polyline_markers = new Array();
7171    previous_marker = undefined;
7172  }
7173
7174  function io_map_new_line() {
7175    polylines.push(new google.maps.Polyline({
7176              map: map,
7177              path: current_polyline.getPath(),
7178              strokeColor: "#0113fc",
7179              strokeOpacity: 1.0,
7180              strokeWeight: 2
7181            })
7182    );
7183    previous_marker = undefined;
7184    current_polyline.setMap(null);
7185    current_polyline = new google.maps.Polyline({
7186      map: map,
7187      path: [],
7188      strokeColor: "#0113fc",
7189      strokeOpacity: 1.0,
7190      strokeWeight: 2
7191    });
7192  }
7193
7194  function show_more_instruct_click(show_more_button) {
7195    if(show_more_button.textContent == "(more)") {
7196      show_more_button.textContent = "(hide)";
7197      jQuery("#io_map_additional_instructions").show();
7198    }else if(show_more_button.textContent == "(hide)") {
7199      show_more_button.textContent = "(more)";
7200      jQuery("#io_map_additional_instructions").hide();
7201    }
7202  }
7203
7204  function perimeter_height_changed(){
7205    let current_map_height = jQuery("#perimeter_height").val();
7206    if(current_map_height && current_map_height > 0){
7207      if(jQuery("#io_measurement_input").val() && !previous_map_height){
7208        let measurement = jQuery("#io_measurement_input").val();
7209        jQuery("#io_measurement_input").val(measurement * current_map_height);
7210      }else if(jQuery("#io_measurement_input").val() && previous_map_height){
7211        let measurement = jQuery("#io_measurement_input").val();
7212        if(previous_map_height > 0){
7213          measurement = measurement / previous_map_height;
7214        }
7215        jQuery("#io_measurement_input").val(measurement * current_map_height);
7216      }
7217    }else if (!current_map_height || current_map_height == 0){
7218      if(jQuery("#io_measurement_input").val() && previous_map_height){
7219        let measurement = jQuery("#io_measurement_input").val();
7220        if(previous_map_height > 0){
7221          measurement = measurement / previous_map_height;
7222        }
7223        jQuery("#io_measurement_input").val(measurement);
7224      }
7225    }
7226    previous_map_height = current_map_height;
7227  }
7228
7229  window.initMap = initMap;
7230</script>
7230
7231<div class="map_fancybox">
7232  <div class="elementor-widget-text-editor">
7233    <div>
7234      <details id="io_map_address_entry">
7235        <summary style = "cursor:pointer">Enter Address Information (edit)</summary>
7236        <table style="margin-left: 10px">
7237          <tr>
7238            <td> <label for="address" id="io_mcl_address_label" style="display: table-cell"> Street Address </label> </td>
7239            <td> <input id="io_mc_address" style="display: table-cell" name="address" type="text"></input> </td>
7240          </tr>
7241          <tr>
7242            <td> <label for="city" id="io_mcl_city_label" style="display: table-cell"> City </label> </td>
7243            <td> <input id="io_mc_city" style="display: table-cell" name="city" type="text"></input> </td>
7244          </tr>
7245          <tr id="io_mc_us-state-select">
7246            <td> <label for="state" id="io_mcl_state_label" style="display: table-cell"> State </label> </td>
7247            <td> <select name="state" id="io_mc_state" style="display: table-cell" class="input-mini">
7248              <option value=""></option>
7249              <option value="AK">AK</option>
7250              <option value="AL">AL</option>
7251              <option value="AR">AR</option>
7252              <option value="AZ">AZ</option>
7253              <option value="CA">CA</option>
7254              <option value="CO">CO</option>
7255              <option value="CT">CT</option>
7256              <option value="DC">DC</option>
7257              <option value="DE">DE</option>
7258              <option value="FL">FL</option>
7259              <option value="GA">GA</option>
7260              <option value="HI">HI</option>
7261              <option value="IA">IA</option>
7262              <option value="ID">ID</option>
7263              <option value="IL">IL</option>
7264              <option value="IN">IN</option>
7265              <option value="KS">KS</option>
7266              <option value="KY">KY</option>
7267              <option value="LA">LA</option>
7268              <option value="MA">MA</option>
7269              <option value="MD">MD</option>
7270              <option value="ME">ME</option>
7271              <option value="MI">MI</option>
7272              <option value="MN">MN</option>
7273              <option value="MO">MO</option>
7274              <option value="MS">MS</option>
7275              <option value="MT">MT</option>
7276              <option value="NC">NC</option>
7277              <option value="ND">ND</option>
7278              <option value="NE">NE</option>
7279              <option value="NH">NH</option>
7280              <option value="NJ">NJ</option>
7281              <option value="NM">NM</option>
7282              <option value="NV">NV</option>
7283              <option value="NY">NY</option>
7284              <option value="OH">OH</option>
7285              <option value="OK">OK</option>
7286              <option value="OR">OR</option>
7287              <option value="PA">PA</option>
7288              <option value="RI">RI</option>
7289              <option value="SC">SC</option>
7290              <option value="SD">SD</option>
7291              <option value="TN">TN</option>
7292              <option value="TX">TX</option>
7293              <option value="UT">UT</option>
7294              <option value="VA">VA</option>
7295              <option value="VT">VT</option>
7296              <option value="WA">WA</option>
7297              <option value="WI">WI</option>
7298              <option value="WV">WV</option>
7299              <option value="WY">WY</option>
7300            </select>
7301            </td>
7302          </tr>
7303          <tr>
7304            <td> <label for="zip" id="io_mcl_zip_label" style="display: table-cell"> Zip Code </label> </td>
7305            <td> <input id="io_mc_zip" style="display: table-cell" name="zip" type="text"></input> </td>
7306          </tr>
7307        </table>
7308        <a class="elementor-button elementor-size-sm io_button"
7309           id="map_geocode_submit"
7310           onClick="io_geocode()"
7311           href="javascript:;"> Locate
7312        </a>
7313      </details>
7314      <div id="perimeter_height_contianer">
7315        <p>If you are taking measurements for a structure such as a building or fence, please provide the height of the structure here. If height does not apply to the wash, for instance for a gutter wash, leave this field empty. <strong> Please note if you enter a value here after taking measurements, you will need to take measurements again. </strong></p>
7316        <label> Height of structure: </label>
7317        <input type="number" id="perimeter_height" onChange="perimeter_height_changed()"/>
7318      </div>
7319      <div>
7320        <p id="io_map_instructions"></p>
7321      </div>
7322      <div id="io_measurement_input_container">
7323        <label id="io_measurement_input_label"> </label>
7324        <input type="number" id="io_measurement_input"/>
7325        <a class="elementor-button elementor-size-sm io_button"
7326           id="io_map_manual_input"
7327           href="javascript:;"> Done
7328        </a>
7329      </div>
7330      <div style="display: inline-flex">
7331        <div id="io_map_clear_container">
7332          <a class="elementor-button elementor-size-sm io_button"
7333             id="io_map_clear_btn"
7334             onClick="io_map_clear()"
7335             href="javascript:;"> Clear
7336          </a>
7337        </div>
7338        <div id="io_map_new_line_container" style="margin-left:5px">
7339          <a class="elementor-button elementor-size-sm io_button"
7340             id="io_map_new_line_btn"
7341             onClick="io_map_new_line()"
7342             href="javascript:;"> Add New Line
7343          </a>
7344        </div>
7345      </div>
7346    </div>
7347  </div>
7348  <br>
7349  <div id="map_container">
7350    
7350<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDEuvvqefKaUABPvydm00SV8Fr8tQeGVcw&libraries=drawing&callback=initMap" defer></script>
7350
7351  </div>
7352</div><!-- End Shortcoder content -->
7353<!-- End Shortcoder content -->
7354        
7354<script>
7355        jQuery(".io_testimonials, #io_testimonials").each(function(){
7356           io_get_reviews(this);
7357        })
7358        setTimeout(function(){
7359            jQuery(".io_testimonials .w3-ul li p").each(function(){
7360                const container = jQuery(this).parent()
7361                const element = jQuery(this);
7362
7363                if (element[0].scrollHeight > container[0].clientHeight) {
7364
7365                    jQuery(this).parent().parent().append(create_read_more());
7366                }
7367            });
7368        }, 500);
7369
7370        function create_read_more(){
7371            let html = "<p class=\"io_review_readmore\" onClick=\"review_readmore_clicked(this)\">read more</p>"
7372            return html;
7373        }
7374
7375        function review_readmore_clicked(element){
7376            let review_li = jQuery(element).parent().find("li:eq(3)");
7377            new_height = jQuery(review_li).find("p").height() + 16;
7378            jQuery(review_li).height(new_height);
7379            jQuery(element).hide();
7380        }
7381
7382        function io_get_reviews(element){
7383        let io_un = "ambouncealot";
7384	  let io_loc = "0";
7385	  let io_url1 = 'https://rental.software/testimonials_iframe.php?user=';
7386	  if (location.hostname === "localhost"){
7387	      io_url1 = 'http://localhost/io/bugs/testimonials_iframe.php?user=';
7388          //io_url1 = 'http://localhost/jbug/trunk/testimonials_iframe.php?user=';
7389        }
7390	  let io_url2 = '&location_id=';
7391	  let io_url3 = '&width=100%&number_of_reviews=10&show_average_rating=1&show_stars=1&show_date=&show_reviewer_name=1&orderby=time&iframe=0';
7392	  let io_url_c = io_url1 + io_un + io_url2 + io_loc + io_url3;
7393	  fetch(io_url_c, {
7394		method: 'get'
7395	}).then(
7396	  function(response){
7397		 return response.json();
7398		}
7399	).then(function(data) {
7400
7401
7402
7403	//let element = document.getElementById("io_testimonials");
7404	//DOM-built on purpose: literal markup in this inline script lands in the raw page
7405	//source and SEO crawlers read it as page content (IO-37932).
7406	element.textContent = "";
7407	let review_cnt=0;
7408	let rating_sum = 0;
7409	data.forEach((user) => {
7410				const { name, review, rating, time } = user;
7411				rating_sum += Number(rating);
7412				review_cnt++;
7413				let review_div = document.createElement("div");
7414				let review_list = document.createElement("ul");
7415				review_list.className = "w3-ul";
7416				let name_li = document.createElement("li");
7417				name_li.textContent = name;
7418				let rating_li = document.createElement("li");
7419				rating_li.textContent = rating + " ";
7420				let date_li = document.createElement("li");
7421				date_li.textContent = time;
7422				let review_li = document.createElement("li");
7423				let review_p = document.createElement("p");
7424				review_p.textContent = review;
7425				review_li.appendChild(review_p);
7426				let img_star = Math.round(parseFloat(rating));
7427				let star_img = document.createElement("img");
7428				star_img.className = "review_img";
7429				star_img.src = "https://rental.software/images/" + img_star + "star.png";
7430				rating_li.appendChild(star_img);
7431				review_list.appendChild(name_li);
7432				review_list.appendChild(rating_li);
7433				review_list.appendChild(date_li);
7434				review_list.appendChild(review_li);
7435				review_div.appendChild(review_list);
7436				element.appendChild(review_div);
7437	});
7438	let avg = (parseFloat(rating_sum)/parseFloat(review_cnt)).toFixed(1);
7439	let avg_img = Math.round(avg);
7440	let head = document.createElement("div");
7441	let head_h2 = document.createElement("h2");
7442	head_h2.textContent = "Avg Rating: " + avg;
7443	let head_img = document.createElement("img");
7444	head_img.className = "review_avg_img";
7445	head_img.src = "https://rental.software/images/" + avg_img + "star.png";
7446	head.appendChild(head_h2);
7447	head.appendChild(head_img);
7448	element.prepend(head);
7449	}).catch(function(err) {
7450		console.log(err);
7451	});
7452}
7453
7454	  </script>
7454				<style type="text/css">
7455					.searchio-live-search-results {
7456						opacity: 0;
7457						transition: opacity .25s ease-in-out;
7458						-moz-transition: opacity .25s ease-in-out;
7459						-webkit-transition: opacity .25s ease-in-out;
7460						height: 0;
7461						overflow: hidden;
7462						z-index: 9999995; /* Exceed searchIO Modal Search Form overlay. */
7463						position: absolute;
7464						display: none;
7465					}
7466
7467					.searchio-live-search-results-showing {
7468						display: block;
7469						opacity: 1;
7470						height: auto;
7471						overflow: auto;
7472					}
7473
7474					.searchio-live-search-no-results {
7475						padding: 3em 2em 0;
7476						text-align: center;
7477					}
7478
7479					.searchio-live-search-no-min-chars:after {
7480						content: "Continue typing";
7481						display: block;
7482						text-align: center;
7483						padding: 2em 2em 0;
7484					}
7485				</style>
7486						
7486<script>
7487			var _searchIO_LIVE_AJAX_SEARCH_BLOCKS = true;
7488			var _searchIO_LIVE_AJAX_SEARCH_ENGINE = 'default';
7489			var _searchIO_LIVE_AJAX_SEARCH_CONFIG = 'default';
7490			</script>
7490
7491						
7491<script>
7492				( () => {
7493					const lazyloadRunObserver = () => {
7494						const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` );
7495						const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => {
7496							entries.forEach( ( entry ) => {
7497								if ( entry.isIntersecting ) {
7498									let lazyloadBackground = entry.target;
7499									if( lazyloadBackground ) {
7500										lazyloadBackground.classList.add( 'e-lazyloaded' );
7501									}
7502									lazyloadBackgroundObserver.unobserve( entry.target );
7503								}
7504							});
7505						}, { rootMargin: '200px 0px 200px 0px' } );
7506						lazyloadBackgrounds.forEach( ( lazyloadBackground ) => {
7507							lazyloadBackgroundObserver.observe( lazyloadBackground );
7508						} );
7509					};
7510					const events = [
7511						'DOMContentLoaded',
7512						'elementor/lazyload/observe',
7513					];
7514					events.forEach( ( event ) => {
7515						document.addEventListener( event, lazyloadRunObserver );
7516					} );
7517				} )();
7518			</script>
7518
7519			
7519<script id="jquery-ui-core-js-before">
7520jQuery.uiBackCompat = true;
7521//# sourceURL=jquery-ui-core-js-before
7522</script>
vendor: 1 bytes, line 7522
7522
7523<script id="jquery-ui-core-js" src="https://ambouncealot.net/wp-includes/js/jquery/ui/core.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 7523
7523
7524<script id="jquery-ui-mouse-js" src="https://ambouncealot.net/wp-includes/js/jquery/ui/mouse.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 7524
7524
7525<script id="jquery-ui-resizable-js" src="https://ambouncealot.net/wp-includes/js/jquery/ui/resizable.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 7525
7525
7526<script id="jquery-ui-draggable-js" src="https://ambouncealot.net/wp-includes/js/jquery/ui/draggable.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 7526
7526
7527<script id="jquery-ui-controlgroup-js" src="https://ambouncealot.net/wp-includes/js/jquery/ui/controlgroup.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 7527
7527
7528<script id="jquery-ui-checkboxradio-js" src="https://ambouncealot.net/wp-includes/js/jquery/ui/checkboxradio.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 7528
7528
7529<script id="jquery-ui-button-js" src="https://ambouncealot.net/wp-includes/js/jquery/ui/button.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 7529
7529
7530<script id="jquery-ui-dialog-js" src="https://ambouncealot.net/wp-includes/js/jquery/ui/dialog.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 7530
7530
7531<script id="jquery-ui-datepicker-js" src="https://ambouncealot.net/wp-includes/js/jquery/ui/datepicker.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 7531
7531
7532<script id="jquery-ui-datepicker-js-after">
7533jQuery(function(jQuery){jQuery.datepicker.setDefaults({"closeText":"Close","currentText":"Today","monthNames":["January","February","March","April","May","June","July","August","September","October","November","December"],"monthNamesShort":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"nextText":"Next","prevText":"Previous","dayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dayNamesShort":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dayNamesMin":["S","M","T","W","T","F","S"],"dateFormat":"MM d, yy","firstDay":1,"isRTL":false});});
7534//# sourceURL=jquery-ui-datepicker-js-after
7535</script>
vendor: 1 bytes, line 7535
7535
7536<script id="slick-carousel-js-js" src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js?ver=1.8.1"></script>
vendor: 1 bytes, line 7536
7536
7537<script id="elementor-webpack-runtime-js" src="https://ambouncealot.net/wp-content/plugins/elementor/assets/js/webpack.runtime.min.js?ver=4.3.2"></script>
vendor: 1 bytes, line 7537
7537
7538<script id="elementor-frontend-modules-js" src="https://ambouncealot.net/wp-content/plugins/elementor/assets/js/frontend-modules.min.js?ver=4.3.2"></script>
vendor: 1 bytes, line 7538
7538
7539<script id="elementor-frontend-js-before">
7540var elementorFrontendConfig = {"environmentMode":{"edit":false,"wpPreview":false,"isScriptDebug":false},"i18n":{"shareOnFacebook":"Share on Facebook","shareOnX":"Share on X","pinIt":"Pin it","download":"Download","downloadImage":"Download image","fullscreen":"Fullscreen","zoom":"Zoom","share":"Share","playVideo":"Play Video","previous":"Previous","next":"Next","close":"Close","a11yCarouselPrevSlideMessage":"Previous slide","a11yCarouselNextSlideMessage":"Next slide","a11yCarouselFirstSlideMessage":"This is the first slide","a11yCarouselLastSlideMessage":"This is the last slide","a11yCarouselPaginationBulletMessage":"Go to slide"},"is_rtl":false,"breakpoints":{"xs":0,"sm":480,"md":768,"lg":1025,"xl":1440,"xxl":1600},"responsive":{"breakpoints":{"mobile":{"label":"Mobile Portrait","value":767,"default_value":767,"direction":"max","is_enabled":true},"mobile_extra":{"label":"Mobile Landscape","value":880,"default_value":880,"direction":"max","is_enabled":false},"tablet":{"label":"Tablet Portrait","value":1024,"default_value":1024,"direction":"max","is_enabled":true},"tablet_extra":{"label":"Tablet Landscape","value":1200,"default_value":1200,"direction":"max","is_enabled":false},"laptop":{"label":"Laptop","value":1366,"default_value":1366,"direction":"max","is_enabled":false},"widescreen":{"label":"Widescreen","value":2400,"default_value":2400,"direction":"min","is_enabled":false}},"hasCustomBreakpoints":false},"version":"4.3.2","is_static":false,"experimentalFeatures":{"additional_custom_breakpoints":true,"theme_builder_v2":true,"import-export-customization":true,"e_pro_atomic_form":true,"e_pro_collection_loop":true,"e_pro_variables":true,"e_pro_interactions":true},"urls":{"assets":"https:\/\/ambouncealot.net\/wp-content\/plugins\/elementor\/assets\/","ajaxurl":"https:\/\/ambouncealot.net\/wp-admin\/admin-ajax.php","uploadUrl":"https:\/\/ambouncealot.net\/wp-content\/uploads"},"nonces":{"floatingButtonsClickTracking":"9ec862e15d","atomicFormsSendForm":"bb2a27e608"},"swiperClass":"swiper","settings":{"page":[],"editorPreferences":[]},"kit":{"body_background_background":"classic","active_breakpoints":["viewport_mobile","viewport_tablet"],"lightbox_enable_counter":"yes","lightbox_enable_fullscreen":"yes","lightbox_enable_zoom":"yes","lightbox_enable_share":"yes","lightbox_title_src":"title","lightbox_description_src":"description"},"post":{"id":5840,"title":"Home%20-%20A%26M%20Bounce%20A-Lot%2C%20LLC%20Bridgeton%20NJ","excerpt":"","featuredImage":false}};
7541//# sourceURL=elementor-frontend-js-before
7542</script>
vendor: 1 bytes, line 7542
7542
7543<script id="elementor-frontend-js" src="https://ambouncealot.net/wp-content/plugins/elementor/assets/js/frontend.min.js?ver=4.3.2"></script>
vendor: 1 bytes, line 7543
7543
7544<script id="smartmenus-js" src="https://ambouncealot.net/wp-content/plugins/elementor-pro/assets/lib/smartmenus/jquery.smartmenus.min.js?ver=1.2.1"></script>
vendor: 1 bytes, line 7544
7544
7545<script id="e-sticky-js" src="https://ambouncealot.net/wp-content/plugins/elementor-pro/assets/lib/sticky/jquery.sticky.min.js?ver=4.2.2"></script>
vendor: 1 bytes, line 7545
7545
7546<script id="swiper-js" src="https://ambouncealot.net/wp-content/plugins/elementor/assets/lib/swiper/v8/swiper.min.js?ver=8.4.5"></script>
vendor: 1 bytes, line 7546
7546
7547<script id="swp-live-search-client-js-extra">
7548var searchio_live_search_params = [];
7549searchio_live_search_params = {"ajaxurl":"https:\/\/ambouncealot.net\/wp-admin\/admin-ajax.php","origin_id":5840,"config":{"default":{"engine":"default","input":{"delay":300,"min_chars":3},"results":{"position":"bottom","width":"auto","offset":{"x":0,"y":5}},"spinner":{"lines":12,"length":8,"width":3,"radius":8,"scale":1,"corners":1,"color":"#424242","fadeColor":"transparent","speed":1,"rotate":0,"animation":"searchio-spinner-line-fade-quick","direction":1,"zIndex":2000000000,"className":"spinner","top":"50%","left":"50%","shadow":"0 0 1px transparent","position":"absolute"}}},"msg_no_config_found":"No valid searchIO Live Search configuration found!","aria_instructions":"When autocomplete results are available use up and down arrows to review and enter to go to the desired page. Touch device users, explore by touch or with swipe gestures.","io_search_results_same_width":"1","io_search_results_width":"400","io_search_results_align":"right"};;
7550//# sourceURL=swp-live-search-client-js-extra
7551</script>
vendor: 1 bytes, line 7551
7551
7552<script id="swp-live-search-client-js" src="https://ambouncealot.net/wp-content/plugins/inflatableoffice/search_widget/assets/javascript/dist/script.js?ver=1.6.1"></script>
vendor: 1 bytes, line 7552
7552
7553<script id="hoverIntent-js" src="https://ambouncealot.net/wp-includes/js/hoverIntent.min.js?ver=1.10.2"></script>
vendor: 1 bytes, line 7553
7553
7554<script id="megamenu-js" src="https://ambouncealot.net/wp-content/plugins/megamenu/js/maxmegamenu.min.js?ver=3.10.8"></script>
vendor: 131 bytes, lines 7554-7555
7554
7555<script id="elementor-recaptcha_v3-api-js" src="https://www.google.com/recaptcha/api.js?render=explicit&#038;ver=4.2.2"></script>
7556<script id="elementor-pro-webpack-runtime-js" src="https://ambouncealot.net/wp-content/plugins/elementor-pro/assets/js/webpack-pro.runtime.min.js?ver=4.2.2"></script>
vendor: 1 bytes, line 7556
7556
7557<script id="wp-hooks-js" src="https://ambouncealot.net/wp-includes/js/dist/hooks.min.js?ver=f0f188028580e8dc1255"></script>
vendor: 1 bytes, line 7557
7557
7558<script id="wp-i18n-js" src="https://ambouncealot.net/wp-includes/js/dist/i18n.min.js?ver=1dfe7db3940c23ea9216"></script>
vendor: 1 bytes, line 7558
7558
7559<script id="wp-i18n-js-after">
7560wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
7561//# sourceURL=wp-i18n-js-after
7562</script>
vendor: 1 bytes, line 7562
7562
7563<script id="elementor-pro-frontend-js-before">
7564var ElementorProFrontendConfig = {"ajaxurl":"https:\/\/ambouncealot.net\/wp-admin\/admin-ajax.php","nonce":"a2f575ed23","urls":{"assets":"https:\/\/ambouncealot.net\/wp-content\/plugins\/elementor-pro\/assets\/","rest":"https:\/\/ambouncealot.net\/wp-json\/"},"settings":{"lazy_load_background_images":true},"popup":{"hasPopUps":true},"shareButtonsNetworks":{"facebook":{"title":"Facebook","has_counter":true},"twitter":{"title":"Twitter"},"linkedin":{"title":"LinkedIn","has_counter":true},"pinterest":{"title":"Pinterest","has_counter":true},"reddit":{"title":"Reddit","has_counter":true},"vk":{"title":"VK","has_counter":true},"odnoklassniki":{"title":"OK","has_counter":true},"tumblr":{"title":"Tumblr"},"digg":{"title":"Digg"},"skype":{"title":"Skype"},"stumbleupon":{"title":"StumbleUpon","has_counter":true},"mix":{"title":"Mix"},"telegram":{"title":"Telegram"},"pocket":{"title":"Pocket","has_counter":true},"xing":{"title":"XING","has_counter":true},"whatsapp":{"title":"WhatsApp"},"email":{"title":"Email"},"print":{"title":"Print"},"x-twitter":{"title":"X"},"threads":{"title":"Threads"}},"facebook_sdk":{"lang":"en_US","app_id":""},"lottie":{"defaultAnimationUrl":"https:\/\/ambouncealot.net\/wp-content\/plugins\/elementor-pro\/modules\/lottie\/assets\/animations\/default.json"}};
7565//# sourceURL=elementor-pro-frontend-js-before
7566</script>
vendor: 1 bytes, line 7566
7566
7567<script id="elementor-pro-frontend-js" src="https://ambouncealot.net/wp-content/plugins/elementor-pro/assets/js/frontend.min.js?ver=4.2.2"></script>
vendor: 1 bytes, line 7567
7567
7568<script id="pro-elements-handlers-js" src="https://ambouncealot.net/wp-content/plugins/elementor-pro/assets/js/elements-handlers.min.js?ver=4.2.2"></script>
7568
7569
7570</body>
7571</html>
7572
7573<!-- Cached by WP-Optimize (gzip) - https://teamupdraft.com/wp-optimize/ - Last modified: September 30, 2026 8:42 am (UTC:0) -->

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.