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&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&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… 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 […]" /> 16<meta property="og:url" content="https://ambouncealot.net/" /> 17<meta property="og:site_name" content="A&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&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… 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 […]" /> 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&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&M Bounce A-Lot, LLC Bridgeton NJ","inLanguage":"en-US"}},{"@type":"WebSite","@id":"https://ambouncealot.net/#website","url":"https://ambouncealot.net","name":"A&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&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&M Bounce A-Lot, LLC Bridgeton NJ » Feed" href="https://ambouncealot.net/feed/" /> 31<link rel="alternate" type="application/rss+xml" title="A&M Bounce A-Lot, LLC Bridgeton NJ » 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&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&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="{"background_background":"gradient"}"> 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="{"skin":"classic"}" 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="{"background_background":"gradient","sticky":"top","sticky_on":["desktop","tablet","mobile"],"sticky_offset":0,"sticky_effects_offset":0,"sticky_anchor_link_offset":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="{"full_width":"stretch","layout":"horizontal","submenu_icon":{"value":"<i class=\"fas fa-caret-down\" aria-hidden=\"true\"><\/i>","library":"fa-solid"},"toggle":"burger"}" 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="{"background_background":"classic"}"> 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="{"background_background":"classic"}"> 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="{"background_background":"slideshow","background_slideshow_slide_duration":1500,"background_slideshow_gallery":[{"id":11509,"url":"https:\/\/ambouncealot.net\/wp-content\/uploads\/2026\/04\/Banner-1_AM.png"},{"id":11511,"url":"https:\/\/ambouncealot.net\/wp-content\/uploads\/2026\/04\/Banner-2_AM.png"},{"id":11561,"url":"https:\/\/ambouncealot.net\/wp-content\/uploads\/2026\/04\/Banner-5_AM.png"}],"background_slideshow_loop":"yes","background_slideshow_slide_transition":"fade","background_slideshow_transition_duration":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="{"background_background":"classic"}"> 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="{"_transform_scale_effect":{"unit":"px","size":1.3,"sizes":[]},"_transform_scale_effect_tablet":{"unit":"px","size":"","sizes":[]},"_transform_scale_effect_mobile":{"unit":"px","size":"","sizes":[]}}" 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="{"background_background":"classic"}"> 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="{"slides_to_show":"5","autoplay_speed":3000,"speed":1500,"slides_to_show_mobile":"3","navigation":"both","autoplay":"yes","infinite":"yes","image_spacing_custom":{"unit":"px","size":20,"sizes":[]},"image_spacing_custom_tablet":{"unit":"px","size":"","sizes":[]},"image_spacing_custom_mobile":{"unit":"px","size":"","sizes":[]}}" 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="{"background_background":"gradient"}"> 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="{"_animation":"wobble","_animation_delay":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="{"_animation":"wobble","_animation_delay":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="{"_animation":"wobble","_animation_delay":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="{"_animation":"wobble","_animation_delay":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="{"background_background":"classic","shape_divider_bottom":"wave-brush"}"> 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="{"animation":"fadeInRight"}"> 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="{"animation":"fadeInRight","background_background":"classic"}"> 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="{"shape_divider_top":"wave-brush"}"> 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="{"background_background":"gradient"}"> 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="{"motion_fx_motion_fx_scrolling":"yes","motion_fx_translateX_effect":"yes","motion_fx_translateX_affectedRange":{"unit":"%","size":"","sizes":{"start":0,"end":50}},"motion_fx_translateX_speed":{"unit":"px","size":4,"sizes":[]},"motion_fx_devices":["desktop","tablet","mobile"]}" 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="{"motion_fx_motion_fx_scrolling":"yes","motion_fx_translateX_effect":"yes","motion_fx_translateX_affectedRange":{"unit":"%","size":"","sizes":{"start":0,"end":50}},"motion_fx_translateX_speed":{"unit":"px","size":4,"sizes":[]},"motion_fx_devices":["desktop","tablet","mobile"]}" 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 – <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 – <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 – <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 – <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 – <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="{"background_background":"classic","animation":"tada"}"> 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="{"background_background":"classic"}"> 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="{"motion_fx_motion_fx_scrolling":"yes","motion_fx_translateX_effect":"yes","motion_fx_translateX_affectedRange":{"unit":"%","size":"","sizes":{"start":0,"end":50}},"motion_fx_translateX_speed":{"unit":"px","size":4,"sizes":[]},"motion_fx_devices":["desktop","tablet","mobile"]}" 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’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="{"step_next_label":"Next","step_previous_label":"Previous","button_width":"100","step_type":"number_text","step_icon_shape":"circle"}" 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&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()#&+*-=.]+" 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=""I need help from a human sales rep.""></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="{"background_background":"classic"}"> 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&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&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.