PageSourceSearch

https://brincabrincaselpariente.net/

html brincabrincaselpariente.net collected 2026-10-08 23:35:27 UTC 339,786 bytes, 5,454 lines download raw bytes

1<!doctype html><html lang="en-US" prefix="og: https://ogp.me/ns#"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="profile" href="https://gmpg.org/xfn/11"><link media="all" href="https://brincabrincaselpariente.net/wp-content/cache/autoptimize/css/autoptimize_11688bc0eba48d3f81a1aaf890487af8.css" rel="stylesheet"><title>Brincabrincas El Pariente Phoenix AZ - Party Rental and Bounce House Rental</title><meta name="description" content="Party and Event rentals of the highest quality. We have a large selection of clean equipment."/><meta name="robots" content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"/><link rel="canonical" href="https://brincabrincaselpariente.net/" /><meta property="og:locale" content="en_US" /><meta property="og:type" content="website" /><meta property="og:title" content="Brincabrincas El Pariente Phoenix AZ - Party Rental and Bounce House Rental" /><meta property="og:description" content="Party and Event rentals of the highest quality. We have a large selection of clean equipment." /><meta property="og:url" content="https://brincabrincaselpariente.net/" /><meta property="og:site_name" content="Brincabrincas El Pariente Phoenix AZ" /><meta property="og:updated_time" content="2026-07-31T23:39:49+00:00" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="Brincabrincas El Pariente Phoenix AZ - Party Rental and Bounce House Rental" /><meta name="twitter:description" content="Party and Event rentals of the highest quality. We have a large selection of clean equipment." /><meta name="twitter:label1" content="Written by" /><meta name="twitter:data1" content="io" /><meta name="twitter:label2" content="Time to read" /><meta name="twitter:data2" content="2 minutes" /> 
1<script type="application/ld+json" class="rank-math-schema">{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://brincabrincaselpariente.net/#organization","name":"Brincabrincas El Pariente Phoenix AZ","url":"https://brincabrincaselpariente.net","email":"[email protected]","logo":{"@type":"ImageObject","@id":"https://brincabrincaselpariente.net/#logo","url":"https://brincabrincaselpariente.net/wp-content/uploads/2020/02/Untitled-design-6-150x150.png","contentUrl":"https://brincabrincaselpariente.net/wp-content/uploads/2020/02/Untitled-design-6-150x150.png","caption":"Brincabrincas El Pariente Phoenix AZ","inLanguage":"en-US"}},{"@type":"WebSite","@id":"https://brincabrincaselpariente.net/#website","url":"https://brincabrincaselpariente.net","name":"Brincabrincas El Pariente Phoenix AZ","publisher":{"@id":"https://brincabrincaselpariente.net/#organization"},"inLanguage":"en-US","potentialAction":{"@type":"SearchAction","target":"https://brincabrincaselpariente.net/?s={search_term_string}","query-input":"required name=search_term_string"}},{"@type":"ImageObject","@id":"https://brincabrincaselpariente.net/wp-content/uploads/2020/01/clean-shield.png","url":"https://brincabrincaselpariente.net/wp-content/uploads/2020/01/clean-shield.png","width":"200","height":"200","inLanguage":"en-US"},{"@type":"WebPage","@id":"https://brincabrincaselpariente.net/#webpage","url":"https://brincabrincaselpariente.net/","name":"Brincabrincas El Pariente Phoenix AZ - Party Rental and Bounce House Rental","datePublished":"2020-01-28T15:14:48+00:00","dateModified":"2026-07-31T23:39:49+00:00","about":{"@id":"https://brincabrincaselpariente.net/#organization"},"isPartOf":{"@id":"https://brincabrincaselpariente.net/#website"},"primaryImageOfPage":{"@id":"https://brincabrincaselpariente.net/wp-content/uploads/2020/01/clean-shield.png"},"inLanguage":"en-US"},{"@type":"Service","name":"Brincabrincas El Pariente Phoenix AZ - Party Rental and Bounce House Rental","description":"Party and Event rentals of the highest quality. We have a large selection of clean equipment.","serviceType":"Bounce House Rental","offers":{"@type":"Offer","availability":"InStock"},"image":{"@id":"https://brincabrincaselpariente.net/wp-content/uploads/2020/01/clean-shield.png"},"@id":"https://brincabrincaselpariente.net/#schema-20673","mainEntityOfPage":{"@id":"https://brincabrincaselpariente.net/#webpage"}}]}</script>
1 <link rel='dns-prefetch' href='//cdnjs.cloudflare.com' /><link rel="alternate" type="application/rss+xml" title="Brincabrincas El Pariente Phoenix AZ &raquo; Feed" href="https://brincabrincaselpariente.net/feed/" /><link rel="alternate" type="application/rss+xml" title="Brincabrincas El Pariente Phoenix AZ &raquo; Comments Feed" href="https://brincabrincaselpariente.net/comments/feed/" /><link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://brincabrincaselpariente.net/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fbrincabrincaselpariente.net%2F" /><link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://brincabrincaselpariente.net/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fbrincabrincaselpariente.net%2F&#038;format=xml" /><style id="wp-img-auto-sizes-contain-inline-css">img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
2/*# sourceURL=wp-img-auto-sizes-contain-inline-css */</style><style id="classic-theme-styles-inline-css">/*! This file is auto-generated */
3.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}
4/*# sourceURL=/wp-includes/css/classic-themes.min.css */</style><style id="global-styles-inline-css">: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%);
4--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;}
4.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;}
5:root :where(.wp-block-icon svg){width: 24px;}
6: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 ) ) );}
7:where(.wp-block-latest-posts.is-layout-flex){gap: 1.25em;}:where(.wp-block-latest-posts.is-layout-grid){gap: 1.25em;}
8:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
9:where(.wp-block-term-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-term-template.is-layout-grid){gap: 1.25em;}
10:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
11:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}
12/*# sourceURL=global-styles-inline-css */</style><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.3' media='all' /><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.3' media='all' /> 
12<script id="jquery-core-js" src="https://brincabrincaselpariente.net/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
12 
12<script id="io-scripts-js-extra">var io_scripts_vars = {"io_username":"BrincabrincasElPariente","io_locationid":"0","io_phonenumber":"(602) 272-0499","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":"Brincabrincas El Pariente Phoenix AZ"};
13//# sourceURL=io-scripts-js-extra</script>
13 <link rel="https://api.w.org/" href="https://brincabrincaselpariente.net/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://brincabrincaselpariente.net/wp-json/wp/v2/pages/109" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://brincabrincaselpariente.net/xmlrpc.php?rsd" /><link rel='shortlink' href='https://brincabrincaselpariente.net/' />
vendor: 65 bytes, line 13
13  <script async src="https://www.googletagmanager.com/gtag/js?id=
13AW-16496590631
vendor: 12 bytes, line 13
13"></script> 
13<script>
vendor: 134 bytes, lines 13-17
13window.dataLayer = window.dataLayer || [];
14  function gtag(){dataLayer.push(arguments);}
15  gtag('js', new Date());
16
17  gtag('config', '
17AW-16496590631
vendor: 3 bytes, line 17
17');
17</script>
17<meta name="generator" content="Elementor 4.3.4; features: additional_custom_breakpoints; settings: css_print_method-external, google_font-enabled, font_display-auto"><style>.e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload),
18				.e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload) * {
19					background-image: none !important;
20				}
21				@media screen and (max-height: 1024px) {
22					.e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload),
23					.e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload) * {
24						background-image: none !important;
25					}
26				}
27				@media screen and (max-height: 640px) {
28					.e-con.e-parent:nth-of-type(n+2):not(.e-lazyloaded):not(.e-no-lazyload),
29					.e-con.e-parent:nth-of-type(n+2):not(.e-lazyloaded):not(.e-no-lazyload) * {
30						background-image: none !important;
31					}
32				}</style><link rel="icon" href="https://brincabrincaselpariente.net/wp-content/uploads/2020/02/Untitled-design-6-150x150.png" sizes="32x32" /><link rel="icon" href="https://brincabrincaselpariente.net/wp-content/uploads/2020/02/Untitled-design-6-300x300.png" sizes="192x192" /><link rel="apple-touch-icon" href="https://brincabrincaselpariente.net/wp-content/uploads/2020/02/Untitled-design-6-300x300.png" /><meta name="msapplication-TileImage" content="https://brincabrincaselpariente.net/wp-content/uploads/2020/02/Untitled-design-6-300x300.png" /><style id="wp-custom-css">.grecaptcha-badge { visibility: hidden; }
33
34.search-submit{display:none;}
35
36.cartInfo{
37	display:none !important;
38}
39.io-footer-link a {
40color: var(--e-global-color-accent, orange);
41}
42
43.catDescriptionIO.catDescriptionIO_small.elementor-widget-text-editor {
44    padding: 10px;
45    font-size: small;
46    text-align: left;
47}
48
49.io_brand {
50    margin-bottom: 20px;
51}</style></head><body class="home wp-singular page-template page-template-elementor_header_footer page page-id-109 wp-custom-logo wp-theme-io-kenos eio-default 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-template-full-width elementor-kit-812 elementor-page elementor-page-109"><header data-elementor-type="header" data-elementor-id="14449" class="elementor elementor-14449 elementor-location-header" data-elementor-post-type="elementor_library"><div class="elementor-element elementor-element-b0bc370 e-flex e-con-boxed e-con e-parent" data-id="b0bc370" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}"><div class="e-con-inner"><div class="elementor-element elementor-element-cf474bd e-con-full e-flex e-con e-child" data-id="cf474bd" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-8670ad6 elementor-mobile-align-center elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list" data-id="8670ad6" data-element_type="widget" data-e-type="widget" data-widget_type="icon-list.default"><div class="elementor-widget-container"><ul class="elementor-icon-list-items"><li class="elementor-icon-list-item"> <span class="elementor-icon-list-icon"> <i aria-hidden="true" class="fas fa-tag"></i> </span> <span class="elementor-icon-list-text">ENJOY $10 OFF ANY INFLATABLE RENTAL</span></li></ul></div></div></div><div class="elementor-element elementor-element-8b626f7 e-con-full e-flex e-con e-child" data-id="8b626f7" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-2fff7dd elementor-widget elementor-widget-heading" data-id="2fff7dd" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default"><div class="elementor-widget-container"><h2 class="elementor-heading-title elementor-size-default">USE CODE: PROMO10</h2></div></div></div></div></div><div class="elementor-element elementor-element-542e7b56 e-con-full e-flex e-con e-parent" data-id="542e7b56" data-element_type="container" data-e-type="container" id="header_pop" data-settings="{&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;],&quot;sticky_offset&quot;:0,&quot;sticky_effects_offset&quot;:0,&quot;sticky_anchor_link_offset&quot;:0}"><div class="elementor-element elementor-element-67aa7e26 e-flex e-con-boxed e-con e-child" data-id="67aa7e26" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}"><div class="e-con-inner"><div class="elementor-element elementor-element-7037cee7 elementor-hidden-mobile e-con-full e-flex e-con e-child" data-id="7037cee7" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-7251c3ba elementor-icon-list--layout-inline elementor-align-start elementor-mobile-align-center elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list" data-id="7251c3ba" data-element_type="widget" data-e-type="widget" data-widget_type="icon-list.default"><div class="elementor-widget-container"><ul class="elementor-icon-list-items elementor-inline-items"><li class="elementor-icon-list-item elementor-inline-item"> <span class="elementor-icon-list-icon"> <i aria-hidden="true" class="fas fa-phone"></i> </span> <span class="elementor-icon-list-text">602-272-0499</span></li><li class="elementor-icon-list-item elementor-inline-item"> <span class="elementor-icon-list-icon"> <i aria-hidden="true" class="fas fa-map-marker-alt"></i> </span> <span class="elementor-icon-list-text">3840 W Indian School Rd. Phx, AZ 85019</span></li></ul></div></div></div><div class="elementor-element elementor-element-223fd5cb e-con-full e-flex e-con e-child" data-id="223fd5cb" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-276c4052 elementor-search-form--skin-full_screen elementor-widget elementor-widget-search-form" data-id="276c4052" data-element_type="widget" data-e-type="widget" data-settings="{&quot;skin&quot;:&quot;full_screen&quot;}" data-widget_type="search-form.default"><div class="elementor-widget-container"> <search role="search"><form class="elementor-search-form" action="https://brincabrincaselpariente.net" method="get"><div class="elementor-search-form__toggle" role="button" tabindex="0" aria-label="Search"> <i aria-hidden="true" class="fas fa-search"></i></div><div class="elementor-search-form__container"> <label class="elementor-screen-only" for="elementor-search-form-276c4052">Search</label> <input id="elementor-search-form-276c4052" placeholder="" class="elementor-search-form__input" type="search" name="s" value=""><div class="dialog-lightbox-close-button dialog-close-button" role="button" tabindex="0" aria-label="Close this search box."> <i aria-hidden="true" class="eicon-close"></i></div></div></form> </search></div></div><div class="elementor-element elementor-element-245788ba elementor-icon-list--layout-inline elementor-align-en
51d elementor-mobile-align-start elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list" data-id="245788ba" data-element_type="widget" data-e-type="widget" data-widget_type="icon-list.default"><div class="elementor-widget-container"><ul class="elementor-icon-list-items elementor-inline-items"><li class="elementor-icon-list-item elementor-inline-item"> <a href="https://www.instagram.com/brincabrincas_el_pariente?igsh=aTUzcHhlZ2I0Nm5q"> <span class="elementor-icon-list-icon"> <i aria-hidden="true" class="fab fa-instagram"></i> </span> <span class="elementor-icon-list-text"></span> </a></li><li class="elementor-icon-list-item elementor-inline-item"> <a href="https://www.tiktok.com/@jose.gaxiola?_t=ZP-90AhigITnBv&#038;_r=1"> <span class="elementor-icon-list-icon"> <i aria-hidden="true" class="fab fa-tiktok"></i> </span> <span class="elementor-icon-list-text"></span> </a></li><li class="elementor-icon-list-item elementor-inline-item"> <a href="https://www.facebook.com/brincabrincaselparientellc"> <span class="elementor-icon-list-icon"> <i aria-hidden="true" class="fab fa-facebook-f"></i> </span> <span class="elementor-icon-list-text"></span> </a></li></ul></div></div></div></div></div><div class="elementor-element elementor-element-318b8a97 e-flex e-con-boxed e-con e-child" data-id="318b8a97" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}"><div class="e-con-inner"><div class="elementor-element elementor-element-5f9eb170 elementor-widget elementor-widget-image" data-id="5f9eb170" data-element_type="widget" data-e-type="widget" data-widget_type="image.default"><div class="elementor-widget-container"> <a href="https://brincabrincaselpariente.net"> <img fetchpriority="high" width="225" height="224" src="https://brincabrincaselpariente.net/wp-content/uploads/2025/04/logo-PARIENTE_588613.jpg" class="attachment-large size-large wp-image-5297" alt="Brincabrincas El Pariente Phoenix AZ" srcset="https://brincabrincaselpariente.net/wp-content/uploads/2025/04/logo-PARIENTE_588613.jpg 225w, https://brincabrincaselpariente.net/wp-content/uploads/2025/04/logo-PARIENTE_588613-150x150.jpg 150w" sizes="(max-width: 225px) 100vw, 225px" /> </a></div></div><div class="elementor-element elementor-element-74ad78b elementor-mobile-align-end ioCart elementor-hidden-desktop elementor-hidden-tablet elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list" data-id="74ad78b" data-element_type="widget" data-e-type="widget" data-widget_type="icon-list.default"><div class="elementor-widget-container"><ul class="elementor-icon-list-items"><li class="elementor-icon-list-item"> <span class="elementor-icon-list-icon"> <i aria-hidden="true" class="fas fa-shopping-cart"></i> </span> <span class="elementor-icon-list-text"></span></li></ul></div></div><div class="elementor-element elementor-element-4e99f697 elementor-nav-menu--stretch elementor-nav-menu__text-align-center elementor-nav-menu--dropdown-tablet elementor-nav-menu--toggle elementor-nav-menu--burger elementor-widget elementor-widget-nav-menu" data-id="4e99f697" data-element_type="widget" data-e-type="widget" data-settings="{&quot;full_width&quot;:&quot;stretch&quot;,&quot;layout&quot;:&quot;horizontal&quot;,&quot;submenu_icon&quot;:{&quot;value&quot;:&quot;&lt;i class=\&quot;fas fa-caret-down\&quot; aria-hidden=\&quot;true\&quot;&gt;&lt;\/i&gt;&quot;,&quot;library&quot;:&quot;fa-solid&quot;},&quot;toggle&quot;:&quot;burger&quot;}" data-widget_type="nav-menu.default"><div class="elementor-widget-container"><nav aria-label="Menu" class="elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-horizontal e--pointer-underline e--animation-fade"><ul id="menu-1-4e99f697" class="elementor-nav-menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-11659"><a href="https://brincabrincaselpariente.net/rentals/bounce-houses/" class="elementor-item">Bounce Houses &#038; Jumps</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9917"><a href="https://brincabrincaselpariente.net/rentals/tables-chairs/" class="elementor-item">Tables &#038; Chairs</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-14189"><a href="https://brincabrincaselpariente.net/rentals/table-linens-2/" class="elementor-item">Table Linens</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9929"><a href="https://brincabrincaselpariente.net/rentals/slides-combos/" class="elementor-item">Wet &#038; Dry Combos</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9921"><a href="https://brincabrincaselpariente.net/rentals/interactive-inflatables-2/" class="elementor-item">Obstacle Courses &#038; Sports Inflatables</a></li><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-10059"><a href="https://brincabrincaselpariente.net/rentals/" class="elementor-item">Other Rentals<span class="sub-arrow"><i class="fas fa-caret-down" aria-hidden="true"></i></span></a><ul class="sub-menu elementor-nav-menu--dropdown"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9943"><a href="https://brincabrincaselpariente.net/rentals/tents-canopies/" class="elementor-sub-item">Tents &#038; Canopies</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10453"><a href="https://brincabrincaselpariente.net/rentals/toddler-units/" class="elementor-sub-item">Toddler &#038; Junior Units</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9829"><a href="https://brincabrincaselpariente.net/rentals/games-equipment-more/" class="elementor-sub-item">Concessions, Games, Equipment &#038; More</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9953"><a href="https://brincabrincaselpariente.net/rentals/waterslides/" class="elementor-sub-item">Waterslides</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9823"><a href="https://brincabrincaselpariente.net/rentals/halloween-bou
51nce-houses/" class="elementor-sub-item">Spooky &#038; Festive Jumpers</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9831"><a href="https://brincabrincaselpariente.net/rentals/special-occasion-jumpers/" class="elementor-sub-item">Special Occasion Jumpers</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9833"><a href="https://brincabrincaselpariente.net/rentals/wedding-equipment/" class="elementor-sub-item">Wedding Equipment</a></li></ul></li></ul></nav><div class="elementor-menu-toggle" role="button" tabindex="0" aria-label="Menu Toggle" aria-expanded="false"> <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><nav class="elementor-nav-menu--dropdown elementor-nav-menu__container" aria-hidden="true"><ul id="menu-2-4e99f697" class="elementor-nav-menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-11659"><a href="https://brincabrincaselpariente.net/rentals/bounce-houses/" class="elementor-item" tabindex="-1">Bounce Houses &#038; Jumps</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9917"><a href="https://brincabrincaselpariente.net/rentals/tables-chairs/" class="elementor-item" tabindex="-1">Tables &#038; Chairs</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-14189"><a href="https://brincabrincaselpariente.net/rentals/table-linens-2/" class="elementor-item" tabindex="-1">Table Linens</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9929"><a href="https://brincabrincaselpariente.net/rentals/slides-combos/" class="elementor-item" tabindex="-1">Wet &#038; Dry Combos</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9921"><a href="https://brincabrincaselpariente.net/rentals/interactive-inflatables-2/" class="elementor-item" tabindex="-1">Obstacle Courses &#038; Sports Inflatables</a></li><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-10059"><a href="https://brincabrincaselpariente.net/rentals/" class="elementor-item" tabindex="-1">Other Rentals<span class="sub-arrow"><i class="fas fa-caret-down" aria-hidden="true"></i></span></a><ul class="sub-menu elementor-nav-menu--dropdown"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9943"><a href="https://brincabrincaselpariente.net/rentals/tents-canopies/" class="elementor-sub-item" tabindex="-1">Tents &#038; Canopies</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10453"><a href="https://brincabrincaselpariente.net/rentals/toddler-units/" class="elementor-sub-item" tabindex="-1">Toddler &#038; Junior Units</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9829"><a href="https://brincabrincaselpariente.net/rentals/games-equipment-more/" class="elementor-sub-item" tabindex="-1">Concessions, Games, Equipment &#038; More</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9953"><a href="https://brincabrincaselpariente.net/rentals/waterslides/" class="elementor-sub-item" tabindex="-1">Waterslides</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9823"><a href="https://brincabrincaselpariente.net/rentals/halloween-bounce-houses/" class="elementor-sub-item" tabindex="-1">Spooky &#038; Festive Jumpers</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9831"><a href="https://brincabrincaselpariente.net/rentals/special-occasion-jumpers/" class="elementor-sub-item" tabindex="-1">Special Occasion Jumpers</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9833"><a href="https://brincabrincaselpariente.net/rentals/wedding-equipment/" class="elementor-sub-item" tabindex="-1">Wedding Equipment</a></li></ul></li></ul></nav></div></div><div class="elementor-element elementor-element-7f19ae94 elementor-align-right elementor-hidden-phone ioCart elementor-widget elementor-widget-button" data-id="7f19ae94" data-element_type="widget" data-e-type="widget" data-widget_type="button.default"><div class="elementor-widget-container"><div class="elementor-button-wrapper"> <a class="elementor-button elementor-size-md" role="button"> <span class="elementor-button-content-wrapper"> <span class="elementor-button-icon"> <i aria-hidden="true" class="fas fa-long-arrow-alt-right"></i> </span> <span class="elementor-button-text">Book Now</span> </span> </a></div></div></div></div></div></div></header><div data-elementor-type="wp-page" data-elementor-id="109" class="elementor elementor-109" data-elementor-post-type="page"><section class="elementor-section elementor-top-section elementor-element elementor-element-48eac65a elementor-section-full_width elementor-section-height-full elementor-section-height-default elementor-section-items-middle" data-id="48eac65a" data-element_type="section" data-e-type="section" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}"><div class="elementor-container elementor-column-gap-default"><div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-fcec3c5" data-id="fcec3c5" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-3ff7ef5 elementor-widget elementor-widget-heading" data-id="3ff7ef5" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default"><div class="elementor-widget-container"><h2 class="elementor-heading-title elementor-size-large">ready to throw the</h2></div></div><div class="elementor-element elementor-element-4bdc211 elementor-headline--style-highlight elementor-widget elementor-widget-animated-headline" data-id="4bdc211" data-element_type="widget" data-e-type="widget" data-settings="{&quot;marker&quot;:&quot;underline_zigzag&quot;,&quot;highlighted_text&quot;:&quot;Ultimate Party?&quot;,&quot;headline_style&quot;:&quot;highlight&quot;,&quot;loop&quot;:&quot;yes&quot;,&quot;highlight_animation_duration&quot;:1200,&quot;highlight_iteration_delay&quot;:8000}" data-widget_type="animated-headline.default"><div class="elementor-widget-container"><h3 class="elementor-headline"> <span class="elementor-headline-dynamic-wrapper elementor-headline-text-wrapper"> <span class="elementor-headline-dynamic-text elementor-headline-text-active">
51Ultimate Party?</span> </span></h3></div></div><div class="elementor-element elementor-element-ef59224 elementor-widget elementor-widget-text-editor" data-id="ef59224" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><h1>We are your local go-to for inflatable, bounce house, and party event rentals.</h1></div></div><div class="elementor-element elementor-element-d0b0750 elementor-align-center elementor-tablet-align-center elementor-widget__width-initial elementor-widget elementor-widget-button" data-id="d0b0750" data-element_type="widget" data-e-type="widget" data-widget_type="button.default"><div class="elementor-widget-container"><div class="elementor-button-wrapper"> <a class="elementor-button elementor-button-link elementor-size-xl" href="https://brincabrincaselpariente.net/io_quoteform"> <span class="elementor-button-content-wrapper"> <span class="elementor-button-text">Get quote</span> </span> </a></div></div></div><div class="elementor-element elementor-element-1cd242d elementor-align-center elementor-tablet-align-center elementor-widget__width-initial elementor-widget elementor-widget-button" data-id="1cd242d" data-element_type="widget" data-e-type="widget" data-widget_type="button.default"><div class="elementor-widget-container"><div class="elementor-button-wrapper"> <a class="elementor-button elementor-button-link elementor-size-lg" href="https://brincabrincaselpariente.net/rentals/slides-combos/"> <span class="elementor-button-content-wrapper"> <span class="elementor-button-icon"> <i aria-hidden="true" class="fas fa-check"></i> </span> <span class="elementor-button-text">Book Now</span> </span> </a></div></div></div></div></div></div></section><section class="elementor-section elementor-top-section elementor-element elementor-element-1681d1b elementor-section-full_width elementor-section-height-default elementor-section-height-default" data-id="1681d1b" data-element_type="section" data-e-type="section" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}"><div class="elementor-container elementor-column-gap-default"><div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8215e75" data-id="8215e75" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><section class="elementor-section elementor-inner-section elementor-element elementor-element-ac7b7e7 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="ac7b7e7" data-element_type="section" data-e-type="section"><div class="elementor-container elementor-column-gap-default"><div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-8d1dd34" data-id="8d1dd34" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-e01cf18 elementor-align-center elementor-tablet-align-center elementor-mobile-align-justify elementor-widget elementor-widget-button" data-id="e01cf18" data-element_type="widget" data-e-type="widget" data-widget_type="button.default"><div class="elementor-widget-container"><div class="elementor-button-wrapper"> <a class="elementor-button elementor-button-link elementor-size-sm" href="https://brincabrincaselpariente.net/rentals/bounce-houses/"> <span class="elementor-button-content-wrapper"> <span class="elementor-button-text">Bounce Houses</span> </span> </a></div></div></div></div></div><div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-7428c43" data-id="7428c43" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-cb0ed6b elementor-align-center elementor-tablet-align-center elementor-mobile-align-justify elementor-widget elementor-widget-button" data-id="cb0ed6b" data-element_type="widget" data-e-type="widget" data-widget_type="button.default"><div class="elementor-widget-container"><div class="elementor-button-wrapper"> <a class="elementor-button elementor-button-link elementor-size-sm" href="https://brincabrincaselpariente.net/rentals/obstacle-courses/"> <span class="elementor-button-content-wrapper"> <span class="elementor-button-text">Obstacles</span> </span> </a></div></div></div></div></div><div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-59cf65c" data-id="59cf65c" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-9d48161 elementor-align-center elementor-tablet-align-center elementor-mobile-align-justify elementor-widget elementor-widget-button" data-id="9d48161" data-element_type="widget" data-e-type="widget" data-widget_type="button.default"><div class="elementor-widget-container"><div class="elementor-button-wrapper"> <a class="elementor-button elementor-button-link elementor-size-sm" href="https://brincabrincaselpariente.net/rentals/waterslides/"> <span class="elementor-button-content-wrapper"> <span class="elementor-button-text">Waterslides</span> </span> </a></div></div></div></div></div></div></section><section class="elementor-section elementor-inner-section elementor-element elementor-element-c004ba0 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="c004ba0" data-element_type="section" data-e-type="section"><div class="elementor-container elementor-column-gap-default"><div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-65f9b27" data-id="65f9b27" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-9de7107 elementor-align-center elementor-tablet-align-center elementor-mobile-align-justify elementor-widget elementor-widget-button" data-id="9de7107" data-element_type="widget" data-e-type="widget" data-widget_type="button.default"><div class="elementor-widget-container"><div class="elementor-button-wrapper"> <a class="elementor-button elementor-button-link elementor-size-sm" href="https://brincabrincaselpariente.net/rentals/interactive-inflatables/"> <span class="elementor-button-content-wrapper"> <span class="elementor-button-text">Interactives</span> </span> </a></div></div></div></div></div><div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-cde70c6" data-id="cde70c6" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-c0e9072 elementor-align-center elementor-tablet-align-center elementor-mobile-align-justify elementor-widget elementor-widget-button" data-id="c0e9072" data-element_type="widget" data-e-type="widget" data-widget_type="button.default"><div class="elementor-widget-container"><div class="elementor-button-wrapper"> <a class="elementor-button elementor-button-link elementor-size-sm" href="https://brincabrincaselpariente.net/rentals/tents-canopies/"> <span class="elementor-button-content-wrapper"> <span class="elementor-button-text">TENTS &amp; CANOPIES</span> </span> </a></div></div></div></div></div><div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-87d4b31" data-id="87d4b31" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-281b2ed elementor-align-center elementor-tablet-align-center elementor-mobile-align-justify elementor-widget elementor-widget-button" data-id="281b2ed" data-element_type="widget" data-e-type="widget" data-widget_type="button.default"><div class="elementor-widget-container"><div class="elementor-button-wrapper"> <a class="elementor-button elementor-button-link elementor-size-sm" href="https://brincabrincaselpariente.net/rentals/tables-chairs/"> <span class="elementor-button-content-wrapper"> <span class="elementor-button-text">Tables &amp; Chairs</span> </span> </a></div></div></div></div></div></div></section><div class="elementor-element elementor-element-4c8261c elementor-widget elementor-widget-spacer" data-id="4c8261c" data-element_type="widget" data-e-type="widget" data-widget_type="spacer.default"><div class="elementor-widget-container"><div class="elementor-spacer"><div class="elementor-spacer-inner"></div></div></div></div><div class="elementor-element elementor-element-689d321 elementor-widget elementor-widget-heading" data-id="689d321" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default"><div class="elementor-widget-container"><h3 class="elementor-heading-title elementor-size-large">What makes us different</h3></div></div><section class="elementor-section elementor-inner-section elementor-element elementor-element-dd79f1f elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="dd79f1f" data-element_type="section" data-e-type="section"><div class="elementor-container elementor-column-gap-wider"><div class="elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-748d938" data-id="748d938" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-74cfdbb elementor-view-framed elementor-position-inline-start elementor-shape-circle elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box" data-id="74cfdbb" data-element_type="widget" data-e-type="widget" data-widget_type="icon-box.default"><div class="elementor-widget-container"><div class="elementor-icon-box-wrapper"><div class="elementor-icon-box-icon"> <span  class="elementor-icon"> <i aria-hidden="true" class="far fa-star"></i> </span></div><div class="elementor-icon-box-content"><h3 class="elementor-icon-box-title"> <span  > A+ Service </span></h3><p class="elementor-icon-box-description"> We pride ourselves on our customer service. Take a look at our reviews to see why we are top rated.</p></div></div></div></div></div></div><div class="elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-efd195d" data-id="efd195d" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-61e1b5f elementor-view-framed elementor-position-inline-start elementor-shape-circle elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box" data-id="61e1b5f" data-element_type="widget" data-e-type="widget" data-widget_type="icon-box.default"><div class="elementor-widget-container"><div class="elementor-icon-box-wrapper"><div class="elementor-icon-box-icon"> <span  class="elementor-icon"> <i aria-hidden="true" class="far fa-plus-square"></i> </span></div><div class="elementor-icon-box-content"><h3 class="elementor-icon-box-title"> <span  > Reliable Inventory </span></h3><p class="elementor-icon-box-description"> Elevate your event with reliable party rentals—perfectly timed, perfectly executed, every time!</p></div></div></div></div></div></div></div></section></div></div></div></section><section class="elementor-section elementor-top-section elementor-element elementor-element-5442069f elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="5442069f" data-element_type="section" data-e-type="section"><div class="elementor-container elementor-column-gap-default"><div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-72e77cc2 io_widget_home" data-id="72e77cc2" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-349e4e28 elementor-hidden-desktop elementor-hidden-tablet elementor-widget elementor-widget-wp-widget-searchio_live_search" data-id="349e4e28" data-element_type="widget" data-e-type="widget" data-widget_type="wp-widget-searchio_live_search.default"><div class="elementor-widget-container"><form role="search" method="get" class="searchio-live-search-widget-search-form" action="https://brincabrincaselpariente.net"> <label> <span class="screen-reader-text">Search for:</span> <input type="search" class="search-field" style="width: 220px" placeholder="Search for..." value="" name="s" data-swplive="true" data-swpengine="default" data-swpconfig="default" autocomplete="off"> </label> <input type="submit" class="search-submit"  value="Search"></form></div></div><div class="elementor-element elementor-element-2f5a4f98 elementor-widget elementor-widget-wp-widget-widget_featured" data-id="2f5a4f98" data-element_type="widget" data-e-type="widget" data-widget_type="wp-widget-widget_featured.default"><div class="elementor-widget-container"><div class="widget-text wp_widget_plugin_box panel-grid panel-has-style" style="margin-top:0px;">
51<script>jQuery(document).ready(function(){
52                  jQuery('.io_mm_item .io_item2_list').css('box-shadow', 'none')
53                  jQuery('.io_mm_item .io_item2_list').addClass('nohover')
54
55                  jQuery('.io_mm_item .io_item2_listcat').css('box-shadow', 'none')
56                  jQuery('.io_mm_item .io_item2_listcat').addClass('nohover')
57              })</script>
57<div class="io_mm_outer io_widget_45651 " style="grid-template-columns:repeat(4, calc((100% - 45px)/4)); display:grid;"><style>.io_widget_45651 .io_item2_list_inner .rentNameIO_button {display:none !important;} .io_widget_45651 .io_item2_list_inner .rentNameIO_price {display:none !important;} .io_widget_45651 .io_item2_list .view-product-button {display:none !important;} .io_widget_45651 .io_item2_listcat .view-product-button {display:none !important;}</style><div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_brincabr" style="text-align:center"><div class="io_item2_listcat elementor-widget-heading"> <a href="https://brincabrincaselpariente.net/rentals/bounce-houses/"><div class="cat_div"><div class="btn btn-primary view-product-button">View Products</div> <img decoding="async" class="cat_img" src="https://brincabrincaselpariente.net/wp-content/uploads/2025/11/OBSTACLES20COURSE2023_1762811565_big.png" alt="Bounce Houses & Jumps" title="Bounce Houses & Jumps" /></div> </a><div class="cat_div_inner"> <a href="https://brincabrincaselpariente.net/rentals/bounce-houses/"><p class="rentNameIO elementor-heading-title">Bounce Houses & Jumps</p><div class="catDescriptionIO catDescriptionIO_small elementor-widget-text-editor"><p><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">Bring the fun to your next event!  Our bounce houses are a great choice for birthday parties, family celebrations, school events, and special occasions.&nbsp;</span><span style="font-size: 16px;"></span><span style="font-size: 16px;"><span style="font-family: Tahoma,Geneva,sans-serif;">With different sizes, colors, and themes available, there&rsquo;s a bounce house for every celebration!</span></span></p></div> </a></div></div></div><div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_brincabr" style="text-align:center"><div class="io_item2_listcat elementor-widget-heading"> <a href="https://brincabrincaselpariente.net/rentals/games-equipment-more/"><div class="cat_div"><div class="btn btn-primary view-product-button">View Products</div> <img decoding="async" class="cat_img" src="https://brincabrincaselpariente.net/wp-content/uploads/2025/04/OBSTACLES20COURSE2010_1729038834_big.png" alt="Concessions, Games, Equipment & More" title="Concessions, Games, Equipment & More" /></div> </a><div class="cat_div_inner"> <a href="https://brincabrincaselpariente.net/rentals/games-equipment-more/"><p class="rentNameIO elementor-heading-title">Concessions, Games, Equipment & More</p><div class="catDescriptionIO catDescriptionIO_small elementor-widget-text-editor"><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">A flexible mix of party add-ons, including concession items, games, and helpful event equipment for all kinds of gatherings. Great for rounding out your setup with extra fun and convenience.</span></div> </a></div></div></div><div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_brincabr" style="text-align:center"><div class="io_item2_listcat elementor-widget-heading"> <a href="https://brincabrincaselpariente.net/rentals/interactive-inflatables-2/"><div class="cat_div"><div class="btn btn-primary view-product-button">View Products</div> <img decoding="async" class="cat_img" src="https://brincabrincaselpariente.net/wp-content/uploads/2026/10/OBSTACLES20COURSE2035_1790899934_big.png" alt="Obstacle Courses & Sports Inflatables" title="Obstacle Courses & Sports Inflatables" /></div> </a><div class="cat_div_inner"> <a href="https://brincabrincaselpariente.net/rentals/interactive-inflatables-2/"><p class="rentNameIO elementor-heading-title">Obstacle Courses & Sports Inflatables</p><div class="catDescriptionIO catDescriptionIO_small elementor-widget-text-editor"><p><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">Ready for some friendly competition? Our sports and challenge inflatables are perfect for birthday parties, school events, sports events, team-building, and special celebrations.</span></p><p><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">Choose from exciting sports games, challenges, competitions, and interactive inflatables designed to keep everyone active and entertained.</span></p></div> </a></div></div></div><div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_brincabr" style="text-align:center"><div class="io_item2_listcat elementor-widget-heading"> <a href="https://brincabrincaselpariente.net/rentals/special-occasion-jumpers/"><div class="cat_div"><div class="btn btn-primary view-product-button">View Products</div> <img decoding="async" class="cat_img" src="https://brincabrincaselpariente.net/wp-content/uploads/2026/01/OBSTACLES20COURSE2032_1769024357_big.png" alt="Special Occasion Jumpers" title="Special Occasion Jumpers" /></div> </a><div class="cat_div_inner"> <a href="https://brincabrincaselpariente.net/rentals/special-occasion-jumpers/"><p class="rentNameIO elementor-heading-title">Special Occasion Jumpers</p><div class="catDescriptionIO catDescriptionIO_small elementor-widget-text-editor"><p><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">Make every celebration extra special! Our themed jumpers are perfect for baby showers, gender reveals, baptisms, birthdays, and other special occasions.</span></p><p><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">Choose from a variety of fun and festive designs that add the perfect touch of entertainment to your celebration.</span></p></div> </a></div></div></div><div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_brincabr" style="text-align:center"><div class="io_item2_listcat elementor-widget-heading"> <a href="https://brincabrincaselpariente.net/rentals/halloween-bou
57nce-houses/"><div class="cat_div"><div class="btn btn-primary view-product-button">View Products</div> <img decoding="async" class="cat_img" src="https://brincabrincaselpariente.net/wp-content/uploads/2026/01/OBSTACLES20COURSE2033_1769024668_big.png" alt="Spooky & Festive Jumpers" title="Spooky & Festive Jumpers" /></div> </a><div class="cat_div_inner"> <a href="https://brincabrincaselpariente.net/rentals/halloween-bounce-houses/"><p class="rentNameIO elementor-heading-title">Spooky & Festive Jumpers</p><div class="catDescriptionIO catDescriptionIO_small elementor-widget-text-editor"><p><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">Bring the fun and excitement to your seasonal celebrations! Our spooky and festive jumpers are perfect for Halloween parties, holiday events, themed parties, and special celebrations.</span></p><p><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">Choose from fun, colorful, and festive designs that make every event more exciting and memorable.</span></p></div> </a></div></div></div><div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_brincabr" style="text-align:center"><div class="io_item2_listcat elementor-widget-heading"> <a href="https://brincabrincaselpariente.net/rentals/table-linens-2/"><div class="cat_div"><div class="btn btn-primary view-product-button">View Products</div> <img decoding="async" class="cat_img" src="https://brincabrincaselpariente.net/wp-content/uploads/2026/01/OBSTACLES20COURSE2030_1769023892_big.png" alt="Table Linens" title="Table Linens" /></div> </a><div class="cat_div_inner"> <a href="https://brincabrincaselpariente.net/rentals/table-linens-2/"><p class="rentNameIO elementor-heading-title">Table Linens</p><div class="catDescriptionIO catDescriptionIO_small elementor-widget-text-editor"><p style="text-align: left;"><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">Elegant table linens that elevate any event setting. Available in a variety of colors and sizes to match your theme. Clean, pressed, and event-ready for a polished look. Perfect for weddings, parties, and special occasions.</span></p><ul><li style="text-align: left; font-family: Tahoma, Geneva, sans-serif; font-size: 16px;"><em>Tables and chairs not included.&nbsp;</em></li></ul></div> </a></div></div></div><div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_brincabr" style="text-align:center"><div class="io_item2_listcat elementor-widget-heading"> <a href="https://brincabrincaselpariente.net/rentals/tables-chairs/"><div class="cat_div"><div class="btn btn-primary view-product-button">View Products</div> <img decoding="async" class="cat_img" src="https://brincabrincaselpariente.net/wp-content/uploads/2026/01/OBSTACLES20COURSE2031_1769024032_big.png" alt="Tables & Chairs" title="Tables & Chairs" /></div> </a><div class="cat_div_inner"> <a href="https://brincabrincaselpariente.net/rentals/tables-chairs/"><p class="rentNameIO elementor-heading-title">Tables & Chairs</p><div class="catDescriptionIO catDescriptionIO_small elementor-widget-text-editor"><p><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">Make your event complete with comfortable seating and quality tables for every occasion. Whether you&#39;re planning a birthday party, family gathering, wedding, corporate event, or special celebration, we have a variety of options to fit your needs.</span></p><p><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">Choose from round tables, rectangle tables, kids&#39; tables, cocktail tables, and folding chairs in different styles to create the perfect setup for your guests.</span></p></div> </a></div></div></div><div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_brincabr" style="text-align:center"><div class="io_item2_listcat elementor-widget-heading"> <a href="https://brincabrincaselpariente.net/rentals/tents-canopies/"><div class="cat_div"><div class="btn btn-primary view-product-button">View Products</div> <img decoding="async" class="cat_img" src="https://brincabrincaselpariente.net/wp-content/uploads/2025/04/OBSTACLES20COURSE208_1717802627_big.png" alt="Tents & Canopies" title="Tents & Canopies" /></div> </a><div class="cat_div_inner"> <a href="https://brincabrincaselpariente.net/rentals/tents-canopies/"><p class="rentNameIO elementor-heading-title">Tents & Canopies</p><div class="catDescriptionIO catDescriptionIO_small elementor-widget-text-editor"><p data-end="388" data-start="84"><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">Create the perfect space for your next event! Our tents and canopies provide shade, comfort, and protection for your guests while adding a clean and professional look to your celebration.&nbsp;</span><span style="font-size: 16px;"><span style="font-family: Tahoma,Geneva,sans-serif;">Perfect for birthday parties, weddings, graduations, baby showers, corporate events, outdoor festivals, and special occasions.</span></span></p><p data-end="641" data-start="390"><span style="font-size: 16px;"><span style="font-family: Tahoma,Geneva,sans-serif;">Each rental is well-maintained, sturdy, and professionally installed to ensure safety and a polished appearance.</span></span></p><p data-end="388" data-start="84" style="text-align: left;"><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;"><strong>MULTIPLE SIZES &bull; QUALITY SETUPS &bull; PERFECT FOR ANY EVENT</strong></span></p></div> </a></div></div></div><div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_brincabr" style="text-align:center"><div class="io_item2_listcat elementor-widget-heading"> <a href="https://brincabrincaselpariente.net/rentals/toddler-units/"><div class="cat_div"><div class="btn btn-primary view-product-button">View Products</div> <img decoding="async" class="cat_img" src="https://brincabrincaselpariente.net/wp-content/uploads/2025/11/OBSTACLES20COURSE2024_1762811941_big.png" alt="Toddler & Junior Units" title="Toddler & Junior Units" /></div> </a><div class="cat_div_inner"> <a href="https://brincabrincaselpariente.net/rentals/toddler-units/"><p class="rentNameIO elementor-heading-title">Toddler & Junior Units</p><div class="catDescriptionIO catDescriptionIO_small elementor-widget-text-editor"><p><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">Fun, colorful, and designed especially for little ones! Our toddler inflatables are perfect for ages 2&ndash;7 and ideal for birthday parties, family gatherings, baby showers, and special celebrations.</span></p><p><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">Choose from a variety of fun themes, slides, bounce areas, and interactive play features designed with toddlers and young children in mind. They&rsquo;re a great way to keep little ones active, entertained, and smiling throughout the celebration!</span></p></div> </a></div></div></div><div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_brincabr" style="text-align:center"><div class="io_item2_listcat elementor-widget-heading"> <a href="https://brincabrincaselpariente.net/rentals/waterslides/"><div class="cat_div"><div class="btn btn-primary view-product-button">View Products</div> <img decoding="async" class="cat_img" src="https://brincabrincaselpariente.net/wp-content/uploads/2025/09/OBSTACLES20COURSE2020_1757707375_big.png" alt="Waterslides" title="Waterslides" /></div> </a><div class="cat_div_inner"> <a href="https://brincabrincaselpariente.net/rentals/waterslides/"><p class="rentNameIO elementor-heading-title">Waterslides</p><div class="catDescriptionIO catDescriptionIO_small elementor-widget-text-editor"><p><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">Make a splash at your next celebration with our exciting selection of water slides! From family-friendly slides for younger children to taller, faster options for older kids and teens, we have something for every level of adventure.</span></p><p><span style="font-size: 16px;"><span style="font-family: Tahoma,Geneva,sans-serif;">Our water slides feature wide and exciting slides, convenient climbing stairs, and splash pools designed for hours of summer fun. Perfect for birthdays, family gatherings, neighborhood parties, special events and more.<br></span></span></p></div> </a></div></div></div><div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_brincabr" style="text-align:center"><div class="io_item2_listcat elementor-widget-heading"> <a href="https://brincabrincaselpariente.net/rentals/wedding-equipment/"><div class="cat_div"><div class="btn btn-primary view-product-button">View Products</div> <img decoding="async" class="cat_img" src="https://brincabrincaselpariente.net/wp-content/uploads/2026/01/Copy20of20RENTA20DE20EQUIPO202_1769024779_big.png" alt="Wedding Equipment" title="Wedding Equipment" /></div> </a><div class="cat_div_inner"> <a href="https://brincabrincaselpariente.net/rentals/wedding-equipment/"><p class="rentNameIO elementor-heading-title">Wedding Equipment</p><div class="catDescriptionIO catDescriptionIO_small elementor-widget-text-editor"><span style="font-size: 16px; font-family: Tahoma, Geneva, sans-serif;">Create a polished wedding setup with essential rental items, including round and rectangular tables, garden chairs, cocktail tables, 32-gallon trash cans, lighting, and more. These versatile pieces help keep your ceremony or reception comfortable, organized, and ready for guests.</span></div> </a></div></div></div><div class="io_mm_item elementor-widget-heading simpleCart_ioShelfItem" name="maindiv_brincabr" style="text-align:center"><div class="io_item2_listcat elementor-widget-heading"> <a href="https://brincabrincaselpariente.net/rentals/slides-combos/"><div class="cat_div"><div class="btn btn-primary view-product-button">View Products</div> <img decoding="async" class="cat_img" src="https://brincabrincaselpariente.net/wp-content/uploads/2025/09/OBSTACLES20COURSE2018_1757706668_big.png" alt="Wet & Dry Combos" title="Wet & Dry Combos" /></div> </a><div class="cat_div_inner"> <a href="https://brincabrincaselpariente.net/rentals/slides-combos/"><p class="rentNameIO elementor-heading-title">Wet & Dry Combos</p><div class="catDescriptionIO catDescriptionIO_small elementor-widget-text-editor"><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">Our Wet &amp; Dry Combos combine the excitement of a bounce house with interactive play features in one colorful inflatable rental. Designed for both sunny and cooler days, these colorful inflatable combos can be enjoyed as a dry play attraction or paired with water for refreshing summer fun. Available in a variety of fun themes and designs, kids can bounce, climb, slide, and explore while staying active and entertained. </span><br><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;"></span><br><span style="font-family: Tahoma, Geneva, sans-serif; font-size: 16px;">Perfect for birthday parties, school events, community celebrations, and family gatherings!</span></div> </a></div></div></div></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></div></div></div></div></section><section class="elementor-section elementor-top-section elementor-element elementor-element-5a3909e elementor-section-height-min-height elementor-section-items-stretch elementor-section-boxed elementor-section-height-default" data-id="5a3909e" data-element_type="section" data-e-type="section" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}"><div class="elementor-background-overlay"></div><div class="elementor-container elementor-column-gap-default"><div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3f0d362e" data-id="3f0d362e" data-element_type="column" data-e-type="column" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}"><div class="elementor-widget-wrap elementor-element-populated"><section class="elementor-section elementor-inner-section elementor-element elementor-element-6b5316e8 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="6b5316e8" data-element_type="section" data-e-type="section"><div class="elementor-container elementor-column-gap-default"><div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-663d6e47" data-id="663d6e47" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-6235e90e elementor-widget elementor-widget-text-editor" data-id="6235e90e" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p>3-Step Clean</p></div></div><div class="elementor-element elementor-element-6597a3c3 elementor-widget elementor-widget-text-editor" data-id="6597a3c3" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p>Keeping Your Family Safe!</p></div></div></div></div><div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-8f28513" data-id="8f28513" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-17ea3886 elementor-widget elementor-widget-image" data-id="17ea3886" data-element_type="widget" data-e-type="widget" data-widget_type="image.default"><div class="elementor-widget-container"> <img decoding="async" width="140" height="171" src="https://brincabrincaselpariente.net/wp-content/uploads/2020/01/clean-shield.png" class="attachment-large size-large wp-image-1092" alt="clean shield Home"></div></div></div></div><div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-2e8a7056" data-id="2e8a7056" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-6ef01b3c elementor-widget elementor-widget-text-editor" data-id="6ef01b3c" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"> We honor and value your trust in our service and equipment. We are dedicated to providing our customers with properly cleaned and sanitized rentals each and every time.</div></div></div></div></div></section><section class="elementor-section elementor-inner-section elementor-element elementor-element-4fa5e5f6 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="4fa5e5f6" data-element_type="section" data-e-type="section"><div class="elementor-container elementor-column-gap-default"><div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-357fd59c" data-id="357fd59c" data-element_type="column" data-e-type="column" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-6c27926c elementor-widget elementor-widget-heading" data-id="6c27926c" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default"><div class="elementor-widget-container"><h3 class="elementor-heading-title elementor-size-default">Step 1</h3></div></div><div class="elementor-element elementor-element-6922ee70 elementor-widget elementor-widget-image" data-id="6922ee70" data-element_type="widget" data-e-type="widget" data-widget_type="image.default"><div class="elementor-widget-container"> <img decoding="async" width="147" height="147" src="https://brincabrincaselpariente.net/wp-content/uploads/2020/01/brush-dust.png" class="attachment-large size-large wp-image-1089" alt="brush dust Home"></div></div><div class="elementor-element elementor-element-430af59c elementor-widget elementor-widget-text-editor" data-id="430af59c" data-e
57lement_type="widget" data-e-type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p>Sweep<br />All Dust, Dirt, &amp; Debris</p></div></div></div></div><div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-316c229c" data-id="316c229c" data-element_type="column" data-e-type="column" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-6fd0c14a elementor-widget elementor-widget-heading" data-id="6fd0c14a" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default"><div class="elementor-widget-container"><h3 class="elementor-heading-title elementor-size-default">Step 2</h3></div></div><div class="elementor-element elementor-element-2f25b8ba elementor-widget elementor-widget-image" data-id="2f25b8ba" data-element_type="widget" data-e-type="widget" data-widget_type="image.default"><div class="elementor-widget-container"> <img loading="lazy" decoding="async" width="214" height="171" src="https://brincabrincaselpariente.net/wp-content/uploads/2020/01/sanitize.png" class="attachment-large size-large wp-image-1090" alt="sanitize Home"></div></div><div class="elementor-element elementor-element-73ea2ac2 elementor-widget elementor-widget-text-editor" data-id="73ea2ac2" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p>Deep Clean Unit<br />with Cleaner &amp; Sanitizer</p></div></div></div></div><div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-656db32c" data-id="656db32c" data-element_type="column" data-e-type="column" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-6b7030c2 elementor-widget elementor-widget-heading" data-id="6b7030c2" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default"><div class="elementor-widget-container"><h3 class="elementor-heading-title elementor-size-default">Step 3</h3></div></div><div class="elementor-element elementor-element-435845ff elementor-widget elementor-widget-image" data-id="435845ff" data-element_type="widget" data-e-type="widget" data-widget_type="image.default"><div class="elementor-widget-container"> <img loading="lazy" decoding="async" width="169" height="158" src="https://brincabrincaselpariente.net/wp-content/uploads/2020/01/ready-fun.png" class="attachment-large size-large wp-image-1091" alt="ready fun Home"></div></div><div class="elementor-element elementor-element-26d834a7 elementor-widget elementor-widget-text-editor" data-id="26d834a7" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p>Clean, Sanitized &amp;<br />Ready for Fun!</p></div></div></div></div></div></section></div></div></div></section><section class="elementor-section elementor-top-section elementor-element elementor-element-1e54a058 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="1e54a058" data-element_type="section" data-e-type="section" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}"><div class="elementor-container elementor-column-gap-default"><div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-40d771a2" data-id="40d771a2" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-44397c0f elementor-widget elementor-widget-heading" data-id="44397c0f" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default"><div class="elementor-widget-container"><h3 class="elementor-heading-title elementor-size-large">Reviews you can trust</h3></div></div><div class="elementor-element elementor-element-5c6690bc elementor-widget elementor-widget-text-editor" data-id="5c6690bc" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p>Feel confident in your decision, our reviews will help.</p></div></div><div class="elementor-element elementor-element-1a493d7 elementor-arrows-yes elementor-pagination-type-bullets elementor-review--has-separator elementor--star-style-star_fontawesome elementor-widget elementor-widget-reviews" data-id="1a493d7" data-element_type="widget" data-e-type="widget" data-settings="{&quot;show_arrows&quot;:&quot;yes&quot;,&quot;pagination&quot;:&quot;bullets&quot;,&quot;speed&quot;:500,&quot;autoplay&quot;:&quot;yes&quot;,&quot;autoplay_speed&quot;:5000,&quot;loop&quot;:&quot;yes&quot;,&quot;pause_on_hover&quot;:&quot;yes&quot;,&quot;pause_on_interaction&quot;:&quot;yes&quot;,&quot;space_between&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]},&quot;space_between_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]},&quot;space_between_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]}}" data-widget_type="reviews.default"><div class="elementor-widget-container"><div class="elementor-swiper"><div class="elementor-main-swiper swiper" role="region" aria-roledescription="carousel" aria-label="Slides"><div class="swiper-wrapper"><div class="swiper-slide" role="group" aria-roledescription="slide"><div class="elementor-testimonial elementor-repeater-item-0c424b1"><div class="elementor-testimonial__header"> <cite class="elementor-testimonial__cite"><span class="elementor-testimonial__name">Natalia M</span><div class="elementor-star-rating"><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i></div></cite><div class="elementor-testimonial__icon elementor-icon elementor-icon-" aria-label="Read More"></div></div><div class="elementor-testimonial__content"><div class="elementor-testimonial__text"> We had an incredible experience and time with Brincabrincas - they made our vision come true for a barnyard bash.. they offered everything we needed plus and it was a one stop shop! Staff was friendly, prompt with their responses and accommodating on many levels! Can’t wait to host another event and have them part of it!</div></div></div></div><div class="swiper-slide" role="group" aria-roledescription="slide"><div class="elementor-testimonial elementor-repeater-item-1e81bf5"><div class="elementor-testimonial__header"> <cite class="elementor-testimonial__cite"><span class="elementor-testimonial__name">Jorge M</span><div class="elementor-star-rating"><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i></div></cite><div class="elementor-testimonial__icon elementor-icon elementor-icon-" aria-label="Read More"></div></div><div class="elementor-testimonial__content"><div class="elementor-testimonial__text"> Best party rental business in Arizona. If you want quality and reliability this is your one stop shop. I’ve been using them for over 5 years and have never let me down.</div></div></div></div><div class="swiper-slide" role="group" aria-roledescription="slide"><div class="elementor-testimonial elementor-repeater-item-ca577c8"><div class="elementor-testimonial__header"> <cite class="elementor-testimonial__cite"><span class="elementor-testimonial__name">Valentina B</span><div class="elementor-star-rating"><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i></div></cite><div class="elementor-testimonial__icon elementor-icon elementor-icon-" aria-label="Read More"></div></div><div class="elementor-testimonial__content"><div class="elementor-testimonial__text"> Easy to schedule an event with Bricabrincas El Pariente. Communication was great via text and email. I was notified via text when the rental would be ready for drop off & set up. Set up was quick, efficient & arrived between previously agreed on time frame. Highly recommend & will book again.</div></div></div></div><div class="swiper-slide" role="group" aria-roledescription="slide"><div class="elementor-testimonial elementor-repeater-item-197df59"><div class="elementor-testimonial__header"> <cite class="elementor-testimonial__cite"><span class="elementor-testimonial__name">Misael F</span><div class="elementor-star-rating"><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i></div></cite><div class="elementor-testimonial__icon elementor-icon elementor-icon-" aria-label="Read More"></div></div><div class="elementor-testimonial__content"><div class="elementor-testimonial__text"> Not only do they have the best price rates and services, but they were very helpful and understanding when it came to the event adju
57stments and special requests for the rentals. ALWAYS GO WITH THEM, THEY ARE THE BEST!!!!!!!!!!!!!!!!</div></div></div></div><div class="swiper-slide" role="group" aria-roledescription="slide"><div class="elementor-testimonial elementor-repeater-item-8827c29"><div class="elementor-testimonial__header"> <cite class="elementor-testimonial__cite"><span class="elementor-testimonial__name">Jesus C</span><div class="elementor-star-rating"><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i></div></cite><div class="elementor-testimonial__icon elementor-icon elementor-icon-" aria-label="Read More"></div></div><div class="elementor-testimonial__content"><div class="elementor-testimonial__text"> I've worked with Jose and his family for a few years now. They've always been very customer oriented and are very dependable when planning our events. I've referred them to family members and friends with full confidence in their work and reliability. They are definitely my first call when we need entertainment options.</div></div></div></div><div class="swiper-slide" role="group" aria-roledescription="slide"><div class="elementor-testimonial elementor-repeater-item-db8c9b4"><div class="elementor-testimonial__header"> <cite class="elementor-testimonial__cite"><span class="elementor-testimonial__name">Daimara M</span><div class="elementor-star-rating"><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i><i class="elementor-star-full">&#xE934;</i></div></cite><div class="elementor-testimonial__icon elementor-icon elementor-icon-" aria-label="Read More"></div></div><div class="elementor-testimonial__content"><div class="elementor-testimonial__text"> Rente un waterslide para el cumpleaños de mi hija y quedaron encantados los niños,el servicio estuvo muy muy eficiente muy puntual y muy amable ,sin dudas los recomiendo 100 porciento .</div></div></div></div></div><div class="elementor-swiper-button elementor-swiper-button-prev" role="button" tabindex="0" aria-label="Previous"> <i aria-hidden="true" class="eicon-chevron-left"></i></div><div class="elementor-swiper-button elementor-swiper-button-next" role="button" tabindex="0" aria-label="Next"> <i aria-hidden="true" class="eicon-chevron-right"></i></div><div class="swiper-pagination"></div></div></div></div></div></div></div></div></section><section class="elementor-section elementor-inner-section elementor-element elementor-element-28559dae elementor-section-full_width elementor-section-height-default elementor-section-height-default" data-id="28559dae" data-element_type="section" data-e-type="section" data-settings="{&quot;background_background&quot;:&quot;classic&quot;,&quot;shape_divider_top&quot;:&quot;tilt&quot;,&quot;shape_divider_bottom&quot;:&quot;tilt&quot;}"><div class="elementor-background-overlay"></div><div class="elementor-shape elementor-shape-top" aria-hidden="true" data-negative="false"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 100" preserveAspectRatio="none"> <path class="elementor-shape-fill" d="M0,6V0h1000v100L0,6z"/> </svg></div><div class="elementor-shape elementor-shape-bottom" aria-hidden="true" data-negative="false"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 100" preserveAspectRatio="none"> <path class="elementor-shape-fill" d="M0,6V0h1000v100L0,6z"/> </svg></div><div class="elementor-container elementor-column-gap-default"><div class="elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-4c611399" data-id="4c611399" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-2d785a4c elementor-widget elementor-widget-theme-site-logo elementor-widget-image" data-id="2d785a4c" data-element_type="widget" data-e-type="widget" data-widget_type="theme-site-logo.default"><div class="elementor-widget-container"> <a href="https://brincabrincaselpariente.net"> <img loading="lazy" decoding="async" width="500" height="500" src="https://brincabrincaselpariente.net/wp-content/uploads/2020/02/Untitled-design-6.png" class="elementor-animation-grow attachment-full size-full wp-image-8189" alt="Untitled design 6 Home" srcset="https://brincabrincaselpariente.net/wp-content/uploads/2020/02/Untitled-design-6.png 500w, https://brincabrincaselpariente.net/wp-content/uploads/2020/02/Untitled-design-6-300x300.png 300w, https://brincabrincaselpariente.net/wp-content/uploads/2020/02/Untitled-design-6-150x150.png 150w" sizes="(max-width: 500px) 100v
57w, 500px"> </a></div></div></div></div><div class="elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-4e4ad014" data-id="4e4ad014" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-10efbaa elementor-widget elementor-widget-heading" data-id="10efbaa" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default"><div class="elementor-widget-container"><h3 class="elementor-heading-title elementor-size-large">Who we are</h3></div></div><div class="elementor-element elementor-element-3811e173 elementor-widget elementor-widget-text-editor" data-id="3811e173" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p>We are your <strong>#1 source</strong> for inflatable and party rentals. We pride ourselves in providing the absolute <strong>best &#8220;bounce&#8221; for your buck</strong> in the industry. With every rental and every event, we focus on providing world-class service so you can focus on having <strong>FUN</strong>.</p><p>We also pride ourselves in providing <strong>clean and safe rentals</strong> at the most competitive pricing around. Each unit is cleaned and sanitized after every rental to guarantee your safety and satisfaction.  We always follow the <strong>strictest safety guidelines</strong> and we absolutely will not sacrifice your safety for business. <strong>EVER</strong>. </p></div></div></div></div></div></section><section class="elementor-section elementor-top-section elementor-element elementor-element-873e20b elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="873e20b" data-element_type="section" data-e-type="section"><div class="elementor-container elementor-column-gap-default"><div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-78d90d2" data-id="78d90d2" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-05b6d5b elementor-widget elementor-widget-google_maps" data-id="05b6d5b" data-element_type="widget" data-e-type="widget" data-widget_type="google_maps.default"><div class="elementor-widget-container"><div class="elementor-custom-embed"> <iframe loading="lazy"
58 src="https://maps.google.com/maps?q=3840%20W%20Indian%20School%20Rd.&#038;t=m&#038;z=10&#038;output=embed&#038;iwloc=near"
59 title="3840 W Indian School Rd."
60 aria-label="3840 W Indian School Rd."
61 ></iframe></div></div></div></div></div></div></section></div><footer data-elementor-type="footer" data-elementor-id="468" class="elementor elementor-468 elementor-location-footer" data-elementor-post-type="elementor_library"><section class="elementor-section elementor-top-section elementor-element elementor-element-586d06be elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="586d06be" data-element_type="section" data-e-type="section" id="io_contactform" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}"><div class="elementor-container elementor-column-gap-default"><div class="elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-5c25c82" data-id="5c25c82" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-14a8b138 elementor-widget elementor-widget-heading" data-id="14a8b138" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default"><div class="elementor-widget-container"><h2 class="elementor-heading-title elementor-size-xxl">Contact Us</h2></div></div><div class="elementor-element elementor-element-e89f5c7 elementor-icon-list--layout-inline elementor-mobile-align-start elementor-list-item-link-full_width elementor-widget elementor-widget-global elementor-global-1877 elementor-widget-icon-list" data-id="e89f5c7" data-element_type="widget" data-e-type="widget" data-widget_type="icon-list.default"><div class="elementor-widget-container"><ul class="elementor-icon-list-items elementor-inline-items"><li class="elementor-icon-list-item elementor-inline-item"> <a href="tel:(602)%20272-0499"> <span class="elementor-icon-list-icon"> <i aria-hidden="true" class="fas fa-phone-alt"></i> </span> <span class="elementor-icon-list-text">(602) 272-0499</span> </a></li><li class="elementor-icon-list-item elementor-inline-item"> <a href="mailto:[email protected]"> <span class="elementor-icon-list-icon"> <i aria-hidden="true" class="fas fa-envelope"></i> </span> <span class="elementor-icon-list-text">[email protected]</span> </a></li></ul></div></div><div class="elementor-element elementor-element-e483193 elementor-icon-list--layout-inline elementor-mobile-align-start elementor-list-item-link-full_width elementor-widget elementor-widget-global elementor-global-2496 elementor-widget-icon-list" data-id="e483193" data-element_type="widget" data-e-type="widget" data-widget_type="icon-list.default"><div class="elementor-widget-container"><ul class="elementor-icon-list-items elementor-inline-items"><li class="elementor-icon-list-item elementor-inline-item"> <span class="elementor-icon-list-icon"> <i aria-hidden="true" class="fas fa-map-marked-alt"></i> </span> <span class="elementor-icon-list-text">3840 W Indian School Rd Phoenix, AZ 85019</span></li></ul></div></div><div class="elementor-element elementor-element-ff1ff93 elementor-shape-rounded elementor-grid-0 e-grid-align-center elementor-widget elementor-widget-social-icons" data-id="ff1ff93" data-element_type="widget" data-e-type="widget" data-widget_type="social-icons.default"><div class="elementor-widget-container"><div class="elementor-social-icons-wrapper elementor-grid" role="list"> <span class="elementor-grid-item" role="listitem"> <a class="elementor-icon elementor-social-icon elementor-social-icon-facebook elementor-repeater-item-e0e8ade" href="https://www.facebook.com/brincabrincaselparientellc" target="_blank"> <span class="elementor-screen-only">Facebook</span> <i aria-hidden="true" class="fab fa-facebook"></i> </a> </span> <span class="elementor-grid-item" role="listitem"> <a class="elementor-icon elementor-social-icon elementor-social-icon-instagram elementor-repeater-item-cfeb3a6" href="https://www.instagram.com/brincabrincas_el_pariente" target="_blank"> <span class="elementor-screen-only">Instagram</span> <i aria-hidden="true" class="fab fa-instagram"></i> </a> </span></div></div></div></div></div><div class="elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-4ef0b9ff" data-id="4ef0b9ff" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-9f7a821 elementor-button-align-stretch elementor-widget elementor-widget-global elementor-global-4712 elementor-widget-form" data-id="9f7a821" data-element_type="widget" data-e-type="widget" data-settings="{&quot;step_next_label&quot;:&quot;Next&quot;,&quot;step_previous_label&quot;:&quot;Previous&quot;,&quot;button_width&quot;:&quot;100&quot;,&quot;step_type&quot;:&quot;number_text&quot;,&quot;step_icon_shape&quot;:&quot;circle&quot;}" data-widget_type="form.default"><div class="elementor-widget-container"><form class="elementor-form" method="post" id="io_contactusform" name="Request Call Back" aria-label="Request Call Back"> <input type="hidden" name="post_id" value="468"/> <input type="hidden" name="form_id" value="9f7a821"/> <input type="hidden" name="referer_title" value="Brincabrincas El Pariente Phoenix AZ - Party Rental and Bounce House Rental" /> <input type="hidden" name="queried_id" value="109"/><div class="elementor-form-fields-wrapper elementor-labels-"><div class="elementor-field-type-text elementor-field-group elementor-column elementor-field-group-firstandlastname elementor-col-33"> <label for="form-field-firstandlastname" class="elementor-field-label elementor-screen-only"> Name </label> <input size="1" type="text" name="form_fields[firstandlastname]" id="form-field-firstandlastname" class="elementor-field elementor-size-sm  elementor-field-textual" placeholder="Name"></div><div class="elementor-field-type-email elementor-field-group elementor-column elementor-field-group-email elementor-col-33 elementor-field-required"> <label for="form-field-email" class="elementor-field-label elementor-screen-only"> Email </label> <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"></div><div class="elementor-field-type-tel elementor-field-group elementor-column elementor-field-group-cellphone elementor-col-33"> <label for="form-field-cellphone" class="elementor-field-label elementor-screen-only"> Phone </label> <input size="1" type="tel" name="form_fields[cellphone]" id="form-field-cellphone" class="elementor-field elementor-size-sm  elementor-field-textual" placeholder="Phone" pattern="[0-9()#&amp;+*-=.]+" title="Only numbers and phone characters (#, -, *, etc) are accepted."></div><div class="elementor-field-type-textarea elementor-field-group elementor-column elementor-field-group-notes elementor-col-100"> <label for="form-field-notes" class="elementor-field-label elementor-screen-only"> Message </label><textarea class="elementor-field-textual elementor-field  elementor-size-sm" name="form_fields[notes]" id="form-field-notes" rows="3" placeholder="&quot;I need help from a human sales rep.&quot;"></textarea></div><div class="elementor-field-type-recaptcha_v3 elementor-field-group elementor-column elementor-field-group-field_1a42aac elementor-col-100 recaptcha_v3-bottomright"><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></div><div class="elementor-field-type-text"> <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><div class="elementor-field-group elementor-column elementor-field-type-submit elementor-col-100 e-form__buttons"> <button class="elementor-button elementor-size-sm elementor-animation-grow" type="submit" id="io_cub"> <span class="elementor-button-content-wrapper"> <span class="elementor-button-icon"> <i aria-hidden="true" class="far fa-paper-plane"></i> </span> <span class="elementor-button-text">Send</span> </span> </button></div></div></form></div></div><div class="elementor-element elementor-element-6e039ac elementor-widget elementor-widget-text-editor" data-id="6e039ac" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"> This site is protected by reCAPTCHA and the Google <a href="https://policies.google.com/privacy">Privacy Policy</a> and <a href="https://policies.google.com/terms">Terms of Service</a> apply.</div></div></div></div></div></section><div class="elementor-element elementor-element-0a792ff e-flex e-con-boxed e-con e-parent" data-id="0a792ff" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}"><div class="e-con-inner"><div class="elementor-element elementor-element-d021e14 e-flex e-con-boxed e-con e-child" data-id="d021e14" data-element_type="container" data-e-type="container"><div class="e-con-inner"><div class="elementor-element elementor-element-53b08c7 e-con-full e-flex e-con e-child" data-id="53b08c7" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-71fabd0 e-flex e-con-boxed e-con e-child" data-id="71fabd0" data-element_type="container" data-e-type="container"><div class="e-con-inner"><div class="elementor-element elementor-element-c47c378 elementor-widget elementor-widget-heading" data-id="c47c378" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default"><div class="elementor-widget-container"><h2 class="elementor-heading-title elementor-size-default">HELP</h2></div></div></div></div><div class="elementor-element elementor-element-ff0974b elementor-nav-menu--dropdown-tablet elementor-nav-menu__text-align-aside elementor-widget elementor-widget-nav-menu" data-id="ff0974b" data-element_type="widget" data-e-type="widget" data-settings="{&quot;layout&quot;:&quot;vertical&quot;,&quot;submenu_icon&quot;:{&quot;value&quot;:&quot;&lt;i class=\&quot;fas fa-caret-down\&quot; aria-hidden=\&quot;true\&quot;&gt;&lt;\/i&gt;&quot;,&quot;library&quot;:&quot;fa-solid&quot;}}" data-widget_type="nav-menu.default"><div class="elementor-widget-container"><nav aria-label="Menu" class="elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-vertical e--pointer-underline e--animation-fade"><ul id="menu-1-ff0974b" class="elementor-nav-menu sm-vertical"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-16963"><a href="https://brincabrincaselpariente.net/terms-conditions/" class="elementor-item">Terms &#038; Conditions</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-16829"><a href="https://brincabrincaselpariente.net/cancellation-refund-policy/" class="elementor-item">Cancellation &#038; Refund Policy</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-16961"><a href="https://brincabrincaselpariente.net/delivery-policy/" class="elementor-item">Delivery Policy</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4054"><a href="https://brincabrincaselpariente.net/faqs/" class="elementor-item">FAQs</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4051"><a href="https://brincabrincaselpariente.net/contact-us/" class="elementor-item">Contact Us</a></li></ul></nav><nav class="elementor-nav-menu--dropdown elementor-nav-menu__container" aria-hidden="true"><ul id="menu-2-ff0974b" class="elementor-nav-menu sm-vertical"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-16963"><a href="https://brincabrincaselpariente.net/terms-conditions/" class="elementor-item" tabindex="-1">Terms &#038; Conditions</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-16829"><a href="https://brincabrincaselpariente.net/cancellation-refund-policy/" class="elementor-item" tabindex="-1">Cancellation &#038; Refund Policy</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-16961"><a href="https://brincabrincaselpariente.net/delivery-policy/" class="elementor-item" tabindex="-1">Delivery Policy</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4054"><a href="https://brincabrincaselpariente.net/faqs/" class="elementor-item" tabindex="-1">FAQs</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4051"><a href="https://brincabrincaselpariente.net/contact-us/" class="elementor-item" tabindex="-1">Contact Us</a></li></ul></nav></div></div></div></div></div></div></div><section class="elementor-section elementor-top-section elementor-element elementor-element-ce36742 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="ce36742" data-element_type="section" data-e-type="section" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}"><div class="elementor-container elementor-column-gap-default"><div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-753947bc" data-id="753947bc" data-element_type="column" data-e-type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-b518968 elementor-widget elementor-widget-global elementor-global-1920 elementor-widget-text-editor" d
61ata-id="b518968" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p>Copyright © <span id="io_fbs">Brincabrincas El Pariente Phoenix AZ</span> All Rights Reserved | <a href="https://brincabrincaselpariente.net/privacy/">Privacy Policy</a> | Rental Software Powered By <a href="https://www.inflatableoffice.com/" target="_blank" rel="noopener">InflatableOffice</a></p></div></div></div></div></div></section></footer> 
61<script type="speculationrules">{"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"}]}</script>
61 <img src="https://rental.software/include/iotracking.php" style="display:none;" importance="low" alt="dynamic io trk code" /><style>.io_product_price_4h,.io_product_price_8h,.io_product_price_24h,.io_product_price_additionalday{display:none}.io_product_price_24h,.io_product_price_48h,.io_product_price_additionalday{display: grid !important}
62        .io_product_cust_price
63        {
64            display: none !important;
65        }
66        #item_live_price_time_set_message
67        {
68            display: none !important;
69        }
70        
71    /* ALWAYS hide toggle buttons and list view on inventory/all-items pages (no category ID) */
72    body.io-no-category-id .io_view_toggle_container,
73    body.io-no-category-id .io_list_view_content
74    {
75        display: none !important;
76    }
77    
78    /* Force grid/tile layout on pages without category IDs */
79    body.io-no-category-id .io_catdiv2.list-view {
80        display: grid !important;
81        grid-template-columns: repeat(auto-fit, minmax(250px, 350px)) !important;
82        grid-gap: 10px !important;
83        margin: 50px !important;
84        max-width: none !important;
85        justify-content: space-evenly !important;
86    }
87    body.io-no-category-id .io_catdiv2.list-view .io_item2_list {
88        display: block !important;
89        flex-direction: column !important;
90        margin-bottom: 0 !important;
91        padding: 0 !important;
92        align-items: initial !important;
93        text-align: center !important;
94    }
95    body.io-no-category-id .io_catdiv2.list-view .cat_div {
96        flex: initial !important;
97        margin-right: 0 !important;
98        position: relative !important;
99    }
100    body.io-no-category-id .io_catdiv2.list-view .cat_img {
101        width: 100% !important;
102        height: auto !important;
103        object-fit: cover !important;
104    }
105    body.io-no-category-id .io_catdiv2.list-view .io_item2_list_inner {
106        flex: initial !important;
107        margin-top: initial !important;
108        display: block !important;
109        flex-direction: initial !important;
110        justify-content: initial !important;
111        min-height: auto !important;
112        height: auto !important;
113    }
114    
115    .io_all_item_cat{
116        display:none;
117        float:none;
118        width:100%;
119        margin-top:20px;
120    }</style> 
120<script>var io_wp_local_path = "";
121    var io_checkavail = "warn";
122    var io_hidetimes = "off";
123    var io_user_country = "US";
124    var io_user_currency = "USD";
125    var io_default_start_time = "11:00 am";
126    var io_default_end_time = "3:00 pm";
127    var io_default_duration = 4.00;
128    var io_force_blank_timepickers = "off";
129    var io_hide_end_time = "off";
130    var io_cart_date_format = "m/d/yy";
131    var io_cart_message = "Please only reserve residential orders online. For all non-residential orders, please call our office or send us an email. Thank you.";
132    var io_cart_time_format = "g:i a";
133    var io_multidayquote = "on";
134    var io_cartdayselect = "dropdown_options";
135    var io_cartAllowSameDay = "off";
136    var io_overnightPickupTime = "10:00 am";
137    var io_incartupsell = "on";
138    var io_distancecharge = "on";
139    var io_deliverymethod = "off";
140    var io_brand = "IO";
141    var io_restrict_times = "on";
142    var io_restrict_time_start = "8:00 am";
143    var io_restrict_time_end = "9:00 pm";
144    var io_default_state = "AZ";
145    var io_hide_zero = "1";
146    var io_weekEndPrice = "off";
147    var io_weekDayText = "Weekday price.";
148    var io_weekEndText = "Weekend price.";
149    var io_weekendDefine = "friday-sunday";
150    var io_accessory_price = "off";
151    var io_accessory_select = "off";
152    var io_upsell_price = "off";
153    var io_cart_party_planner_email = "off";
154    var io_cart_party_planner_destination = "https://brincabrincaselpariente.net/plan-a-party/";
155    var io_hideQuantityAvail = "off";
156    var io_company_timeslots = [];
157    var io_info_required = "off";
158    var io_always_display_live_price = "off";
159    var io_default_delivery_method = "Delivery";
160    var io_hide_live_prices = 1;
161    var io_info_required_data = [];
162    var io_prices = {"0":"isset","override_groups":[],"1":"io_product_price_24h","2":"io_product_price_48h","3":"io_product_price_additionalday"};
163    var io_delivery_prices = {"default":[],"override":[]};
164    var io_custom_prices = {"default":[],"override":[]};
165    var io_delivery_methods = {"Delivery":{"restricted":"[]","id":"86915"},"Customer Pickup\/Dropoff":{"restricted":"[\"2250859\",\"2250925\",\"2256301\",\"2250919\",\"2250923\",\"2250921\",\"2250917\",\"2256305\",\"2256253\",\"2256287\",\"2256307\",\"2250869\",\"2250835\",\"2250875\",\"2250881\",\"2250903\",\"2250911\",\"2250913\",\"2250841\",\"2250853\",\"2256313\",\"2250915\",\"2256291\",\"2250857\",\"2250927\",\"2250929\",\"2256285\",\"2250827\",\"2250833\",\"2256355\",\"2256353\",\"2256325\",\"2256559\",\"2256319\",\"2369418\",\"2256359\",\"2256367\",\"2256377\",\"2256373\",\"2256385\",\"2256531\",\"2256535\",\"2256487\",\"2256439\",\"2256495\",\"2256515\",\"2256521\",\"2260735\",\"2260709\",\"2260725\",\"2260707\",\"2262913\",\"2260759\",\"2260741\",\"2260705\",\"2369386\",\"2260737\",\"2262911\",\"2260749\",\"2260715\",\"2260753\",\"2260757\",\"2260727\",\"2263071\",\"2263073\",\"2263079\",\"2260747\",\"2262925\",\"2262933\",\"2263329\",\"2260717\",\"2260719\",\"2260745\",\"2256589\",\"2256593\",\"2256565\",\"2256601\",\"2256613\",\"2256623\",\"2256631\",\"2256629\",\"2256619\",\"2256615\",\"2256621\",\"2263461\",\"2263339\",\"2263337\",\"2263341\",\"2369424\",\"2369428\",\"2263355\",\"2263379\",\"2263383\",\"2263377\",\"2263363\",\"2263425\",\"2263431\",\"2263429\",\"2263435\",\"2263451\",\"2263441\",\"2263453\",\"2263443\",\"2263445\",\"2263449\",\"2263437\",\"2263457\",\"2263459\",\"2263467\",\"2263465\",\"2256701\",\"2256693\",\"2256695\",\"2256699\",\"2369430\",\"2411437\",\"2411451\",\"2411457\",\"2411499\",\"2411505\",\"2411509\",\"2376519\",\"2376535\",\"2376543\",\"2369474\",\"2369476\",\"2369482\",\"2411463\",\"2411467\",\"2411471\",\"2369454\",\"2369458\",\"2369460\",\"2376599\",\"2376635\",\"2376649\",\"2376731\",\"2376739\",\"2376747\",\"2376757\",\"2376787\",\"2376797\",\"2376811\",\"2376817\",\"2376825\",\"2376839\",\"2376841\",\"2376845\",\"2376861\",\"2376865\",\"2376901\",\"2376911\",\"2376919\",\"2376921\",\"2439047\",\"2439041\",\"2439049\",\"2376929\",\"2376937\",\"2376941\",\"2376995\",\"2376997\",\"2377003\",\"2376955\",\"2376959\",\"2376971\",\"2376943\",\"2376949\",\"2376951\",\"2401467\",\"2370634\",\"2373469\",\"2373471\"]","id":"98255"}};
166    var io_customer_geolocation = "";
167    var io_customer_ip = "57.141.4.16";
168    var io_delivery_methods_restrict = null;
169    var io_pagename = "Brincabrincas El Pariente";
170    var io_categoryVariantImages = "";
171    //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.";
172    jQuery( document ).ready(function() {
173
174        //force all quote form links to use cart data
175        //removing back to cart shortcode as this needs to only be done if cart is not empty IO-22561
176        /*
177        let headerBookButton = jQuery("a[href$='io_quoteform/']");
178        headerBookButton.addClass("ioCart_link");
179        headerBookButton.attr("href", "javascript:;");
180        */
181
182
183        let last_cat_name = "";
184        let ioTrigger = false;
185        jQuery(".io_all_item_cat").each(function() {
186            current_cat_name = jQuery(this).html();
187            if(last_cat_name !== current_cat_name) {
188                jQuery(this).show();
189                ioTrigger = true;
190            }
191            last_cat_name = current_cat_name;
192        });
193
194        // Setup gen page blocks
195		let io_divs = document.querySelectorAll(".io_item2_list, .io_item2_listcat, .io_item2_listrent, .io_all_item_cat");
196		let io_divscat = document.querySelectorAll(".io_item2_listcat");
197		let io_divsrent = document.querySelectorAll(".io_item2_listrent");
198		let io_divcat = document.querySelector(".io_catdiv2");
199		let io_pcc = document.querySelector(".page-content");
200		let io_html;
201
202		if (io_divs.length > 0) {
203	      for (let i of io_divs) {
204	        if(i.parentNode.className.indexOf("io_mm_") === -1){
205	          io_divcat.appendChild(i);
206	        }
207		  }
208		  if(io_divcat!==null) io_divcat.style.display = "grid";
209		}
210
211		if (ioTrigger) {
212            let pageBlock = document.querySelector(".io_catdiv2");
213            pageBlock.classList.add("elementor-widget-heading");
214            let scanRes = pageBlock.querySelectorAll(".io_item2_listrent");
215            pageBlock.style.display = "block";
216            pageBlock.style.margin = "auto";
217            pageBlock.style.textAlign = "center";
218            pageBlock.style.marginLeft = "5px";
219            pageBlock.style.marginRight = "5px";
220            for (let i of scanRes) {
221                i.style.display = "inline-block";
222                i.style.marginLeft = "5px";
223                i.style.marginRight = "5px";
224            }
225        }
226
227		/* fix font color on older sites */
228		if(jQuery("#cartData").css("background-color")=="rgb(35, 36, 37)"){
229		    jQuery("#cartData").css("color","white");
230		}
231    });</script>
231<style>.ui-datepicker-trigger{display:none}</style><div id="cartPopover"><div id="ioCartLoadingOverlay" aria-hidden="true"><div class="io-spinner" role="status" aria-live="polite" aria-label="Loading"></div></div><div id="triangle"></div><div id="cartCalendarTimePickerContainer"><div id="cartCalendar"></div><div id="cartTimePicker"><div id="div-overnight"> Days <select style="color:black;" name="whatday" id="whatday" onchange="endDisplay();"><option value="Same Day" selected="selected">Single Day</option><option value="Overnight">Overnight</option><option value="Multi-Day">Multi-Day</option> </select></div> <br><div id="ioCartTimeSelectContainer"><div> <span class="calTimeLabel calTimeLabelStart">Start</span> <i class="fas fa-calendar-check"></i> <input type="text" name="dateStart" class="ioCartDateInput" readonly="readonly" /> <i class="fas fa-clock"></i> <input type="text" name="timeStart" class="timepicker" style="width:75px;" /></div><div> <span class="calTimeLabel calTimeLabelEnd">End</span> <i class="fas fa-calendar-check"></i> <input type="text" name="dateEnd" class="ioCartDateInput" readonly="readonly" /> <i class="fas fa-clock"></i> <input type="text" name="timeEnd" class="timepicker" style="width:75px;" /></div></div> <br><div id="ioDeliveryMethodContainer" style="display:none; text-align: center;"></div> <br><div id="ioAdditonalInformationContainer" style="display:none; text-align: center;"><div class="io_info_modal_data_container" id="io_info_modal_address"> <label for="address" id="io_iml_address_label" style="width:105px"> Street Address </label> <input class="io_modal_input_address" style="margin-left:5px" id="io_im_address"  name="address" type="text"></input> <br></div><div class="io_info_modal_data_container" id="io_info_modal_city"> <label for="city" id="io_iml_city_label" style="width:105px"> City </label> <input class="io_modal_input_city" style="margin-left:5px" id="io_im_city" name="city" type="text"></input> <br></div><div class="io_info_modal_data_container" id="io_info_modal_zip"> <label for="zip" id="io_iml_zip_label" style="width:105px"> Zip Code </label> <input class="io_modal_input_zip" id="io_im_zip" style="margin-left:5px" name="zip" type="text"></input></div></div> <br><div class="elementor-widget-button" style="padding:10px;display:inline-block;"> <a onclick="calApply()" href="javascript:;"
232 class="elementor-button-link elementor-button elementor-size-sm elementor-animation-grow"
233 style="text-decoration: none;">Apply</a></div><div class="elementor-widget-button" style="padding:10px;display:inline-block;"> <a onclick="calCancel()" href="javascript:;"
234 class="elementor-button-link elementor-button elementor-size-sm elementor-animation-grow simpleCart_cancel"
235 style="text-decoration: none;">Cancel</a></div></div><div id="cartDateRange" class="ioDateRange" onclick="calSetDateRange(1)" style="display:none;"></div><div class="changeDateLinkWrapper elementor-widget-button"><div id="changeDateLink" onclick="calSetDateRange(1)" class="elementor-button elementor-animation-grow">Change Date</div></div></div><div id="cartPartyBuilderEmailContainer" style="display:none;text-align:center"><p>Provide an email address here to recieve our free party planner!</p> <input type="text" id="cartPartyBuilderEmailInput"><div class="elementor-widget-button" style="display:inline-block;"> <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></div><div id="cartPartyBuilderEmailWarning" style="display:none">Pleave provide a valid email address.</div> <br><br></div><div id="cartCustomMessage" style="display:none;text-align:center"></div><div id="cartWarning" class="clearfix"></div><div id="deliveryMethodWarning" class="clearfix">Some items are not available for the selected delivery method.</div> <span class="io_locationRedirectLink">You may not be on the correct site. Click here to change location.</span><div id="cartData" class="clearfix"><div class="simpleCart_items"></div></div><div class="cartSubtotalBox"> Subtotal (estimate):<div id="cartSubtotal"></div></div><div class="checkDeliveryCartContainer"><div id="checkDeliveryMessage" class="cartDeliverytotalBox"><a class="cartLink" href="javascript:;" onClick="showAddressEntry(true)">Check Delivery</a></div><div id="deliverSubtotalContainer" class="cartDeliverytotalBox"> Delivery Fee (<span><a class="cartLink" href="javascript:;" onClick="showAddressEntry(true)">Change Address</a></span>):<div id="deliverySubtotal"></div></div></div><div id="cartCheckoutButton" class="clearfix"><div class="elementor-widget-button"> <a href="javascript:cartHide();
235" class="simpleCart_continue elementor-button elementor-size-sm elementor-animation-grow io_button">Continue Shopping</a> <a href="javascript:;" class="simpleCart_checkout elementor-button elementor-size-sm elementor-animation-grow io_button">Checkout</a></div><div id="cart-carousel-container" style="display:none"> <label> Some items you may be interested in: </label> <br><div class="cart-carousel"></div></div><div class="ioLink"><a href="https://www.inflatableoffice.com" target="_blank">powered by io</a></div></div></div>  
235<script>/* configurable globals */
236  var start_default = "11:00 am";
237  if(io_default_start_time != "") start_default = io_default_start_time;
238  var end_default = "3:00 pm";
239  if(io_default_end_time != "") end_default = io_default_end_time;
240
241  if(io_user_currency){
242    var currency = io_user_currency;
243  } else{
244    var currency = "USD";
245  }
246
247  if(io_user_country){
248    var country = io_user_country;
249  } else{
250    var country = "US";
251  }
252
253
254  var timeFormat = "g:i a";
255  if(io_cart_time_format != "") timeFormat = io_cart_time_format;
256  var dateFormat = "m/d/yy";
257  if(io_cart_date_format != "") dateFormat = io_cart_date_format;
258
259  var restrictTimes = false;
260  if(io_restrict_times === "on") restrictTimes = true;
261  var restrictTimeStart = start_default;
262  if(io_restrict_time_start != "") restrictTimeStart = io_restrict_time_start;
263  var restrictTimeEnd = end_default;
264  if(io_restrict_time_end != "") restrictTimeEnd = io_restrict_time_end;
265
266
267  var multi_day = true;
268  if(io_multidayquote === "off" || io_cartdayselect == "Single Day") multi_day = false;
269  var in_cart_upsell = false;
270  if(io_incartupsell === "on") in_cart_upsell = true;
271  var io_distance_charge = false;
272  if(io_distancecharge === "on") io_distance_charge = true;
273
274  /* other globals */
275  var pallet_color1 = ""; /* set in onready */
276  /* track the date start/end of calendar clicking */
277  var click_count = 0;
278
279  /* for configuring upsell carosel in cart */
280  var cart_carousel_set = false;
281
282  /* for checking when we remove an item from the cart */
283  var last_remove = 0;
284  var last_upsell_call = 0;
285
286  /* for buffering cart qty changes checkAvail calls for qty change only */
287  var last_checkAvail_call = 0;
288
289  /* for cart loading animation */
290  var io_cart_loading_active = false;
291  var io_cart_loading_count = 0;
292  var io_cart_loading_fallback_timer = null;
293
294  /*var start_default = "11:00";
295    var end_default = "15:00";
296    var currency = "EUR";
297    var timeFormat = "G:i";
298    var dateFormat = "d/m/yy";*/
299
300
301  /* For weekday weekend pricing */
302  var use_weekday_weekend = false;
303  if(io_weekEndPrice == "on") use_weekday_weekend = true;
304
305  /* Accessory and Upsell Prices */
306  var show_accessory_price = false;
307  if(io_accessory_price == "on") show_accessory_price = true;
308  var show_upsell_price = false;
309  if(io_upsell_price == "on") show_upsell_price = true;
310
311  /* For customer geolocation shortcode */
312  var storage_key = 'io_customer_location';
313
314  /*<editor-fold defaultstate="collapsed" desc="On Ready">*/
315  jQuery(document).ready(function () {
316    pallet_color1 = "var( --e-global-color-accent,green )";
317    if(pallet_color1=="rgba(0, 0, 0, 0)" || pallet_color1=="rgb(255, 255, 255)") pallet_color1="rgb(25, 147, 35)";
318
319    /*<editor-fold defaultstate="collapsed" desc="SimpleCart Init">*/
320    simpleCart({
321      currency: currency,
322      cartColumns: [{
323        view: "image",
324        attr: "image",
325        label: "Image"
326      },
327        {
328          attr: "name",
329          label: "Name"
330        },
331        {
332          attr: "encoded",
333          label: false
334        },
335        {
336          attr: "rentalid",
337          label: false
338        },
339        {
340          attr: "availability",
341          label: false
342        },
343        {
344          view: "decrement",
345          label: false,
346          text: "<i class='fas far fa-minus-square' style='color:" + pallet_color1 + "'></i>"
347        },
348        {
349          view: "calculate_area",
350          label: false
351        },
352        {
353          view:"input",
354          attr:"quantity"
355
356        },
357        {
358          attr: "qtyincrement",
359          label: false
360        },
361        {
362          attr: "inputtype",
363          label: false
364        },
365        {
366          attr: "qtytype",
367          label: false
368        },
369        {
370          attr: "vendorid",
371          label: false
372        },
373        {
374          view: "increment",
375          label: false,
376          text: "<i class='fas far fa-plus-square' style='color:" + pallet_color1 + "'></i>"
377        },
378        {
379          attr: "price",
380          label: "Price",
381          view: 'currency'
382        },
383        {
384          view: "remove",
385          label: false,
386          text: "<i class='fas fa-trash' style='color:" + pallet_color1 + "'></i>"
387        },
388        {
389          attr: "total",
390          label: "SubTotal",
391          view: 'currency'
392        },
393        {
394          attr: "timeslots",
395          label: false
396        },
397        {
398          attr: "timeslots-orig",
399          label: false
400        },
401        {
402          attr: "href",
403          label: false
404        },
405        {
406          attr: "linkqty",
407          label: false
408        },
409        {
410          attr: "acc_dd_parent_limit",
411          label: false
412        }
413      ],
414      checkout: {
415        type: "SendForm",
416        method: "GET",
417        url: io_wp_local_path+"/io_quoteform/",
418        extra_data: {
419          /* name: decodeURIComponent("Brincabrincas El Pariente".replace(/[+]/gi, " ")), */
420          clear_rentals: "1",
421          selected_only: "1",
422          wp_checkout: "1",
423          startdate: "",
424          enddate: "",
425          starttime: "",
426          endtime: "",
427          io_custguid: ""
428        }
429      }
430    });
431
432    simpleCart.bind('update', cart_onUpdate);
433    simpleCart.bind('beforeSave', cart_hideTimepickerWrapper);
434    simpleCart.bind('beforeRemove', cart_beforeRemove);
435    simpleCart.bind('afterRemove', cart_afterRemove);
436    simpleCart.bind('afterQtyChange', cart_afterQtyChange);
437    simpleCart.bind('beforeCheckout', cart_beforeCheckout);
438    simpleCart.bind('afterAdd', cart_afterAdd);
439    simpleCart.bind('beforeAdd', cart_beforeAdd);
440    simpleCart.bind('load', cart_afterLoad)
441    /*</editor-fold>*/
442
443    /* showAvail(""); */
444    let io_star_pic = document.querySelector("#io_star_pic");
445    if (io_star_pic != null) {
446      let io_star_src = io_star_pic.src;
447      if (io_star_src.indexOf("0star") > -1 || io_star_src.indexOf("1star") > -1 || io_star_src.indexOf("2star") > -1 ||
448              io_star_src.indexOf("3star") > -1) {
449        io_star_pic.style.display = "none";
450      }
451    }
452
453    /*<editor-fold desc="Build Thumb Images">*/
454    /* build multiple thumb images */
455
456    /*</editor-fold>*/
457
458    /*<editor-fold desc="Set up Accessories">*/
459    /* Add Add To Cart Buttons */
460    let button_add = document.querySelector("#bookNowBtn");
461    var main_id = 0;
462    if(jQuery(".io_product_container .item_rentalid")){
463      main_id = jQuery(".io_product_container .item_rentalid").first().text();
464    }
465    /* if main item is dd but not pkg (linen code) */
466    if(jQuery(".io_acc_accessorydd").text()==1 && jQuery(".io_acc_ispackage").text()!=1){
467      /* if order is defined, then reorder here. */
468      var acc_cls = jQuery('.io_product_accessories')
469      acc_cls.hide();
470      let pkg = document.querySelector(".io_product_acc_pkg");
471      if(pkg==undefined){
472        pkg = document.createElement("div");
473        pkg.classList.add("io_product_acc_pkg");
474        pkg.style.textAlign = "center";
475        acc_cls.after(pkg);
476      }
477      for (let [key, value] of acc_obj_relate) {
478        elem = getAccElem(key,main_id);
479        if(elem){
480          btn = makeAccBtn(elem,main_id);
481          pkg.append(btn);
482        }
483
484      }
485      let line = document.createElement("div");
486      line.innerHTML = "<br>";
487      pkg.append(line.cloneNode(true));
488      for (let [key, value] of acc_obj_relate) {
489        for (key2 in acc_obj_relate.get(key)) {
490          if(Object.keys(value[key2]).length > 0){
491            /* 3rd level */
492            pkg.append(line.cloneNode(true));
493            for (key3 in acc_obj_relate.get(key)[key2]) {
494              elem = getAccElem(key3,key2);
495              if(elem){
496                btn = makeAccBtn(elem,key2);
497                btn.style.display = "none";
498                pkg.append(btn);
499              }
500            }
501          }else{
502            elem = getAccElem(key2,key);
503            if(elem){
504              btn = makeAccBtn(elem,key);
505              btn.style.display = "none";
506              pkg.append(btn);
507            }
508
509          }
510        }
511      }
512    }else {
513      let access_array = document.querySelectorAll(".io_acc_li");
514      let count = 0;
515      for (let i of access_array) {
516        let path = i.id.replace("io_acc_","");
517        count++;
518        let newButton = button_add.cloneNode(true);
519        newButton.id = button_add.id + count;
520        newButton.classList.remove("elementor-animation-grow");
521        newButton.classList.add("elementor-animation-shrink");
522
523        let path_arr = path.split("_");
524        let pid = parseInt(path_arr[0]);
525        let this_id = parseInt(path_arr[1]);
526        if(path_arr.length==1) pid=0;
527
528        if(jQuery("#io_acc_accessorydd_"+path).first().text()==1){
529          /* display different to provide choices in dd */
530          //main_id = pid;
531        }else{
532          /* hide accessories inside a pkg when under an accessory choice item until clicked */
533          if(jQuery("#io_acc_accessorydd_"+main_id+"_"+pid).first().text()==1){
534          }else{
535            /* jpa - not finished/tested yet */
536            /*jQuery("#io_acc_"+path).hide();*/
537          }
538          /* Fix broken images for accessories. */
539          let img_box = document.querySelectorAll(".io_acc_li_img_thumb");
540          let firstImg = true;
541          let lastAcc = "";
542          for (let i of img_box) {
543            if(lastAcc=="") lastAcc = i.id;
544            if(lastAcc!=i.id){
545              lastAcc = i.id;
546              firstImg = true;
547            }
548            let io_img_src = i.src;
549            if(io_img_src!==null) io_img_src = io_img_src.toLowerCase();
550            let io_img_datasrc = i.getAttribute("data-src");
551            if(io_img_datasrc===null){
552              io_img_datasrc = "";
553            }else{
554              io_img_datasrc = io_img_datasrc.toLowerCase();
555            }
556            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)){
557              i.style.display = "none";
558            }else if(!firstImg && jQuery("#io_acc_accessorydd_"+main_id+"_"+pid).first().text()!=1){
559              i.style.display = "none";
560            }
561            firstImg = false;
562          }
563          if(jQuery("#io_acc_accessorydd_"+main_id+"_"+pid).first().text()==1){
564            /* Make the accessory category look more mike a label. */
565            jQuery("#iothumb_"+main_id+"_"+pid).hide();
566            jQuery("#io_acc_"+main_id+"_"+pid).css("border", "none");
567            jQuery("#io_acc_"+main_id+"_"+pid).css("width", "100%");
568            jQuery("#io_acc_"+main_id+"_"+pid).css("margin-bottom", "5vh");
569            jQuery("#io_acc_"+main_id+"_"+pid).css("box-shadow", "none");
570            jQuery("#io_acc_shortname_"+pid).css("font-weight", "bold");
571            jQuery("#io_acc_shortname_"+pid).css("position", "absolute");
572            /* Make this auto selected to fix an issue where we can not add to cart if this item is
573                           a child of another hidden accessory on screen */
574            jQuery("#io_acc_"+main_id+"_"+pid).prop("selected", true);
575            accessory_cat_text = jQuery("#io_acc_shortname_"+pid).first().text();
576            /* This is necessary to make sure there are not multiple colons. */
577            if(!accessory_cat_text.includes(":")){
578              jQuery("#io_acc_shortname_"+pid).text(accessory_cat_text+":");
579            }
580            /* Remove Href so we do not open images on click for dd accessories. */
581            jQuery("[id^=io_acc_imgbig_"+pid+"_]").removeAttr("href");
582
583            /* Get the accessory limit for this set of acessories, then set up click events. */
584            /* Unbind is used to prevent cascading calls. */
585            accLmt = parseInt(jQuery("#io_acc_accessorylimit_"+main_id+"_"+pid).prop("textContent"));
586            jQuery("[id^=io_acc_"+pid+"_]").unbind("click").click({pid: pid, accLmt: accLmt}, accDDClicked);
587            jQuery("[id^=io_acc_"+pid+"_]").css("cursor", "pointer");
588            /* Set up the slected property of all children accessories. Default to false. */
589            jQuery("[id^=io_acc_"+pid+"_]").prop("selected", false);
590            /* We need to add a hidden button so we can simulate a click on add_item for the cart. */
591            let newButton = button_add.cloneNode(true);
592            newButton.id = button_add.id + count;
593            newButton.classList.remove("elementor-animation-grow");
594            newButton.setAttribute("style", "display: none !important");
595            i.appendChild(newButton);
596          }else{
597            let button_wrap = document.createElement("div");
598            button_wrap.classList.add("elementor-widget-button");
599            button_wrap.classList.add("io_access_button");
600            button_wrap.appendChild(newButton);
601            let req = false;
602            if(jQuery("#io_acc_required_"+path).first().text()>0) req = true;
603            if(!req){
604              i.appendChild(button_wrap);
605            }else{
606              var textnode = document.createTextNode("Included");
607              i.appendChild(textnode);
608            }
609          }
610        }
611      }
612    }
613    /*</editor-fold>*/
614
615    let upsell_array = document.querySelectorAll(".io_upsell_li");
616    count = 0;
617    for (let i of upsell_array) {
618      count++;
619      let newButton = button_add.cloneNode(true);
620      newButton.id = button_add.id + count;
621      newButton.classList.remove("elementor-animation-grow");
622      newButton.classList.add("elementor-animation-shrink");
623
624      let button_wrap = document.createElement("div");
625      button_wrap.classList.add("elementor-widget-button");
626      button_wrap.classList.add("io_upsell_button");
627      button_wrap.appendChild(newButton);
628      i.appendChild(button_wrap);
629    }
630
631    if(io_deliverymethod == "on" && jQuery(".calDeliveryMethodLabel").length==0){
632      let delivery_method_container = jQuery("#ioDeliveryMethodContainer").first();
633      delivery_method_container.append('<span class="calDeliveryMethodLabel">Select Delivery Method</span>');
634      let delivery_method_html = '<select class="ioDeliveryMethods" onchange="deliveryMethodSelected()">';
635      let delivery_methods = Object.keys(io_delivery_methods)
636      for(const index in delivery_methods){
637        if(!io_delivery_methods_restrict){
638          delivery_method_html += '<option value="'+delivery_methods[index]+'">'+delivery_methods[index]+'</option>';
639          if(index == 0 && !getCookie("io_delivery_method")) setCookie("io_delivery_method", delivery_methods[index], 14);
640        }else if( !io_delivery_methods_restrict.includes( io_delivery_methods[ delivery_methods[index] ]["id"] ) ){
641          delivery_method_html += '<option value="'+delivery_methods[index]+'">'+delivery_methods[index]+'</option>';
642          if(index == 0 && !getCookie("io_delivery_method")) setCookie("io_delivery_method", delivery_methods[index], 14);
643        }
644      }
645      delivery_method_container.append(delivery_method_html);
646      delivery_method_container.show();
647      if(getCookie("io_delivery_method")){
648        jQuery(".ioDeliveryMethods").val(getCookie("io_delivery_method"));
649      }
650    }else{
651      setCookie("io_delivery_method", "", 14);
652    }
653
654    let allow_same_day = 1;
655    if(io_cartAllowSameDay == "on"){
656      allow_same_day = 0;
657    }
658
659    /*<editor-fold desc="Cart Calandar and Time Settings Setup">*/
660    //var fullmonth_array = jQuery.datepicker.regional["en"].monthNames;
661    jQuery("#cartCalendar").datepicker({
662      changeMonth: true,
663      changeYear: true,
664      //monthNamesShort : fullmonth_array,
665      dateFormat: dateFormat,
666      rangeSelect: true,
667      numberOfMonths: 1,
668      stepMonths: 1,
669      prevText: "<< Previous Months",
670      nextText: "Next Months >>",
671      speed: "fast",
672      showOn: "both",
673      onChangeMonthYear: cal_onChangeMonthYear,
674      onSelect: cal_onSelect,
675      buttonText: "Calendar",
676      minDate: allow_same_day,
677      firstDay: 0
678    });
679    jQuery(".ui-datepicker-trigger").hide();
680    if(restrictTimes){
681      jQuery(".timepicker").timepicker({
682        startTime: new Date(0, 0, 10, 0, 0, 0),
683        endTime: new Date(0, 0, 0, 20, 0, 0, 0),
684        minTime:restrictTimeStart,
685        maxTime:restrictTimeEnd,
686        /*show24Hours: $show24Hours,*/
687        timeFormat: timeFormat,
688        separator: ":",
689        className: "elementor-widget-text-editor",
690        step: 15,
691        disableTouchKeyboard: true
692      }).keypress(function(e){
693        e.preventDefault();
694      });
695    } else{
696      jQuery(".timepicker").timepicker({
697        startTime: new Date(0, 0, 10, 0, 0, 0),
698        endTime: new Date(0, 0, 0, 20, 0, 0, 0),
699        /*show24Hours: $show24Hours,*/
700        timeFormat: timeFormat,
701        separator: ":",
702        className: "elementor-widget-text-editor",
703        step: 15,
704        disableTouchKeyboard: true
705      });
706    }
707
708    /* if we have company wide timeslots, alter time select in cart. Do this only if we are set to single day only */
709    if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day"){
710      let time_select_container = jQuery("#ioCartTimeSelectContainer").first();
711      time_select_container.empty();
712      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" />'
713      time_select_container.append(selected_date_html);
714      time_select_container.append("<br>")
715      time_select_container.append('<span class="calTimeLabel">Select Timeslot</span>');
716      let timeslot_html = '<select class="ioCartCompanyTimeslots">';
717      for(i=0; i<io_company_timeslots.length; ++i){
718        timeslot_html += io_company_timeslots[i];
719      }
720      timeslot_html += "</select>"
721      time_select_container.append(timeslot_html);
722
723    }
724
725    // Timeslot element on Quote Form
726    const timeslotSelectElement = jQuery(".controls select[name=timeslot]");
727
728    /* jQuery( ".datepicker" ).datepicker({dateFormat: "m/d/yy",minDate:0}); */
729    /* jQuery( ".datepicker" ).val(getCookie("checkDate")); */
730    start_date = getCookie("io_dateStart");
731    end_date = getCookie("io_dateEnd");
732    start_time = getCookie("io_timeStart");
733    end_time = getCookie("io_timeEnd");
734    jQuery("input[name=dateStart]").val(start_date);
735    jQuery("input[name=dateEnd]").val(end_date);
736    if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day" && getCookie("io_company_timeslot_selected")){
737      jQuery(".ioCartCompanyTimeslots").val(getCookie("company_timeslot_selected"));
738      // Set it on the quote page too.
739      timeslotSelectElement.val(getCookie("io_company_timeslot_selected"));
740    } else{
741      jQuery("input[name=timeStart]").val(start_time);
742      jQuery("input[name=timeEnd]").val(end_time);
743    }
744
745    timeslotSelectElement.on('change', function() {
746      // IO-31167: Upon timeslot change on Quote Form,
747      // update timeslot cookie value for persistence
748      if(this.value) {
749        setCookie('io_company_timeslot_selected', this.value, 14);
750      }
751    });
752
753    if (jQuery("input[name=dateEnd]").val() != "") {
754      setCalBackground();
755      jQuery("#cartSubtotal").html(simpleCart.toCurrency(simpleCart.total()));
756      if(getCookie("io_dateApplied") === "true") calCancel();
757      else {
758        jQuery("input[name=dateStart]").val(getCookie("io_dateStart"));
759        jQuery("input[name=dateEnd]").val(getCookie("io_dateEnd"));
760        if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day" && getCookie("io_company_timeslot_selected")){
761          jQuery(".ioCartCompanyTimeslots").val(getCookie("io_company_timeslot_selected"));
762        }
763        else if(io_force_blank_timepickers == "on")
764        {
765          setCookie("io_timeStart", "", 14);
766          setCookie("io_timeEnd", "", 14);
767          jQuery('[name=timeStart]').val("");
768          jQuery('[name=timeEnd]').val("");
769        }
770        else{
771          jQuery("input[name=timeStart]").val(getCookie("io_timeStart"));
772          jQuery("input[name=timeEnd]").val(getCookie("io_timeEnd"));
773        }
774
775        jQuery(".changeDateLinkWrapper").hide();
776      }
777    }
778    /*</editor-fold>*/
779
780    jQuery("#io-dialog").dialog({
781      autoOpen: false,
782      resizable: false,
783      modal: true,
784      dialogClass: "noTitleStuff",
785      width: 350,
786      open: function () {
787        jQuery(".ui-widget-overlay").bind("click", function () {
788          jQuery("#io-dialog").dialog("close");
789        })
790      }
791    });
792
793    /* change jquery calendar next/prev buttons to fa arrows w/matching site color */
794    jQuery("#cartCalendar .ui-datepicker-prev").addClass("fas fa-arrow-left").css("color", pallet_color1);
795    jQuery("#cartCalendar .ui-datepicker-next").addClass("fas fa-arrow-right").css("color", pallet_color1);
796
797    /* hide sections if not set */
798    if(jQuery(".io_product_circuits_right").first().text()=="0"){jQuery(".io_product_circuits_right,.io_product_circuits_left").hide();}
799    if(jQuery(".io_city_list").html()==""){jQuery(".io_landingpages").hide();}
800    /* using this instead as it will handle custom ones added */
801    let io_field_valbox = document.querySelector(".io_product_infobox");
802    if (io_field_valbox != null || io_field_valbox != undefined) {
803      let io_field_valarr = io_field_valbox.querySelectorAll(".io_product_detail_box");
804      for (let i of io_field_valarr) {
805        let check = i.querySelector("p:nth-child(2)");
806        if (check != null && check.innerText == "") i.style.display = "none";
807      }
808    }
809
810    /* Hide description if there is no description */
811    desc_box = document.querySelector(".io_product_desc")
812    if(desc_box != null && desc_box.innerText.length == 0 && desc_box.innerHTML.length == 0){
813      desc_detail_box = desc_box.parentElement;
814      desc_detail_box.style.display = "none";
815    }
816
817    if(document.querySelector(".io_product_reviewbox")!=null){
818      if (document.querySelector(".io_product_reviewbox").innerText == "") {
819        if(document.querySelector(".io_star_rating")!=null) document.querySelector(".io_star_rating a").style.display = "none";
820      }
821    }
822
823    let rid = jQuery(".io_product_container .item_rentalid").first().text();
824    let regex = new RegExp("^io_product_price_.*_" + rid + "$");
825    for (const price_index in io_prices){
826      if(regex.test(io_prices[price_index])){
827        use_weekday_weekend = false;
828      }
829    }
830
831    /* hide end date input. */
832    if(!multi_day){
833      /* TODO: Need to wait and see if this is necessary. If so needs to be more involved than this. */
834      /* jQuery("input[name=dateEnd]").style("visibility", "hidden"); */
835    }
836    /* Call page avail now so we can display live price if its enabled */
837    setTimeout(function(){
838      if(jQuery(".io_acc_accessorydd").text()==1 && jQuery(".io_acc_ispackage").text()!=1){
839        jQuery("#bookNowBtn").removeClass("item_add").addClass("item_add_off").trigger("classChange");
840        checkAvailPageOnly();
841      }else{
842        checkAvailPageOnly();
843      }
844    },50);
845
846    /* Adjust picbox for header heights */
847    setTimeout(adjustPicBoxForHeader,500);
848
849    /* Show buttons for distance charge check if the setting is on. Hide or show map button if applicable*/
850    if(io_distance_charge){
851      jQuery(".delivery_charge_check_container").show();
852      jQuery(".calc_price_with_map_container").hide();
853      jQuery(".checkDeliveryCartContainer").show();
854    } else {
855      jQuery(".delivery_charge_check_container").hide();
856      jQuery(".calc_price_with_map_container").hide();
857      jQuery(".checkDeliveryCartContainer").hide();
858    }
859    if(io_brand=="EH"){
860      jQuery(".delivery_charge_check_container").hide();
861      jQuery(".eh_additional_description").show();
862    }
863    if(jQuery(".io_product_infobox .item_inputtype").text() === "Map"){
864      jQuery(".delivery_charge_check_container").hide();
865      jQuery(".checkDeliveryCartContainer").hide();
866      jQuery(".calc_price_with_map_container").show();
867    }
868
869    /* If we have delivery set in cookie, be sure to show the charge in the cart. */
870    if(getCookie("io_deliveryFee") && simpleCart.items().length > 0) {
871      setDeliverySubtotal(getCookie("io_deliveryFee"));
872      jQuery("#deliverSubtotalContainer").show();
873      jQuery("#checkDeliveryMessage").hide();
874    } else{
875      jQuery("#deliverSubtotalContainer").hide();
876    }
877
878    /* moved back here for IO-22561 */
879    if(simpleCart.items().length > 0){
880      let headerBookButton = jQuery("a[href$='io_quoteform/']");
881      headerBookButton.addClass("ioCart_link");
882      headerBookButton.attr("href", "javascript:;");
883    }
884    jQuery(".cartInfo").unbind("click").one("click", function(event){
885      event.stopPropagation();
886      event.stopImmediatePropagation();
887      cartShow();
888    });
889    jQuery(".ioCart,.ioCart_link").unbind("click").one("click", function(event){
890      event.stopPropagation();
891      event.stopImmediatePropagation();
892      cartShow();
893    });
894
895    /* hide if click outside cart */
896    jQuery(document).mouseup(function(e){
897      var container = jQuery("#cartPopover");
898      var cartButton = jQuery(".cartInfo, .ioCart, .ioCart_link");
899      var addButton = jQuery(".item_add");
900      var timePicker = jQuery(".ui-timepicker-wrapper");
901
902      if(jQuery(".cartInfo, .ioCart, .ioCart_link").hasClass("open")){
903        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){
904          cartHide();
905        }
906      }
907    });
908
909    if(!getCookie("io_state") && io_default_state){
910      setCookie("io_state", io_default_state, 14);
911    }
912    if(country != "US") {
913      jQuery("#io_cd_state").replaceWith('<input id="io_cd_state" style="display: table-cell" name="state" type="text"></input>');
914      jQuery("#io_cdl_zip_label").text("Postal code");
915      if(country == "CA"){
916        jQuery("#io_cdl_state_label").text("Province");
917      } else if(country == "AU"){
918        jQuery("#io_cdl_city_label").text("Suburb");
919      }
920    } else{
921      jQuery("#io_cd_zip").attr("type", "number");
922    }
923    /* Set up on change events to stop end timepickers from allowing users to pick times before start time */
924    setTimeout(restrictEndTimepickers, 500);
925    if(io_hide_end_time == "on" && io_default_duration > 0){
926      jQuery('[name="timeEnd"]').parent().hide();
927      // Hide end time stuff on checkout page and in the text.
928      jQuery(".io_event_body_time .control-group:nth-child(2)").hide();
929      jQuery(".io_event_body_time_display_text").text(jQuery(".io_event_body_time_display_text").text().replace(/\s*→.*/, ""))
930      jQuery('[name="timeStart"]').change(function(){
931        const regex = /^(\d{1,2}):(\d{2})(?:\s*([AP]M))?$/i;
932        const match = this.value.match(regex);
933
934        let hours = parseInt(match[1], 10);
935        const minutes = parseInt(match[2], 10);
936        const period = match[3] ? match[3].toUpperCase() : null;
937
938        if (period) {
939          if (period === "PM" && hours !== 12) hours += 12;
940          if (period === "AM" && hours === 12) hours = 0;
941        }
942
943        const baseDate = new Date(1970, 0, 1, hours, minutes);
944        const newTime = new Date(baseDate.getTime() + io_default_duration * 3600000);
945
946        if (period) {
947          // 12-hour
948          let newHours = newTime.getHours();
949          const newMinutes = newTime.getMinutes();
950          const newPeriod = newHours >= 12 ? "PM" : "AM";
951          newHours = newHours % 12;
952          if (newHours === 0) newHours = 12;
953          let end_time = `${newHours}:${newMinutes.toString().padStart(2, "0")} ${newPeriod}`;
954          jQuery('[name="timeEnd"]').val(end_time);
955        } else {
956          // 24 hour
957          let end_time = `${newTime.getHours().toString().padStart(2, "0")}:${newTime.getMinutes().toString().padStart(2, "0")}`;
958          jQuery('[name="timeEnd"]').val(end_time);
959        }
960      });
961    }
962
963    /* If we have a custom message in cart, display it. */
964    if(io_cart_message){
965      show_cart_message();
966    }
967
968    /* code for day select in cart */
969    if(io_cartdayselect == "dropdown_options" && io_multidayquote === "on"){
970      saved_whatday = getCookie("io_whatday");
971      if(saved_whatday) jQuery("#whatday").val(saved_whatday);
972      endDisplay();
973      setCalBackground();
974    } else{
975      jQuery("#div-overnight").hide();
976      jQuery("#whatday").val("");
977    }
978
979    checkRestrictedDeliveries()
980    /* If we are using the information gathering tool, we do not want to show this message. */
981    if( live_pricing_is_on() && io_info_required == "off" ){
982      if(!event_time_set() && io_always_display_live_price != "on"){
983        jQuery("#item_live_price_time_set_message").show();
984      }else{
985        jQuery("#item_live_price_time_set_message").hide();
986      }
987    }
988
989
990    /* Check if information gathering header exists. If it does, Remove set even button and add some classes on onclicks */
991    if(jQuery("#ioInfoHeader").length){
992      remove_set_event_buttton();
993      add_classes_and_onClicks();
994      header_increment_step();
995    }
996
997    jQuery(".io_acc_li").each(function() {
998      if(jQuery(this).find(".item_required").first().text() > 0 && jQuery(this).find(".item_accessorydd").first().text() == 1){
999        jQuery(jQuery(jQuery(this).parent()).prev()).appendTo(".io_product_requiredDD_accessories");
1000        jQuery(jQuery(this).parent()).appendTo(".io_product_requiredDD_accessories");
1001        jQuery(".io_product_requiredDD_accessories").show();
1002      }
1003    });
1004
1005    if(jQuery(".io_product_accessories .io_acc_li").length == 0) jQuery(".io_product_accessories").hide();
1006
1007    /* Hide the cart add button for items with required accessories on category page */
1008    jQuery(".item_hasRequiredAcc").each(function() {
1009      if (this.innerText == '1') {
1010        let rental_id_element = jQuery(this).parent().find(".item_rentalid")[0];
1011        let addCartButton = jQuery(".io_item2_list_inner .add_cart_" + rental_id_element.innerText).find('.io_button');
1012        addCartButton.removeClass("item_add");
1013        addCartButton.html('<i class="fas fa-arrow-right"></i>');
1014
1015        let itemHref = jQuery(this).parent().find(".item_href").text();
1016        addCartButton.attr('href', itemHref);
1017      }
1018    });
1019
1020
1021    /* If they have same day selection allowed, need to update checkout page datepicker on delay to make sure it works */
1022    if(io_cartAllowSameDay == "on"){
1023      setTimeout(allow_same_day_select_on_checkout, 500);
1024    }
1025
1026    if(io_info_required_data && io_info_required == "on"){
1027      let io_required_data = io_info_required_data;
1028      jQuery("#ioAdditonalInformationContainer").show();
1029      for (const [data, value] of Object.entries(io_required_data)) {
1030        if(value == 1){
1031          jQuery("#io_info_modal_"+data).css("display", "inline-flex")
1032          jQuery("#io_im_"+data).val(getCookie(data));
1033        }
1034      }
1035      show_or_hide_required_info_message()
1036    }
1037    if(jQuery(".bootstrap-timepicker").length == 0) {
1038      if (!/Mobi|Android/i.test(navigator.userAgent)) {
1039        jQuery("#cartPopover").scroll(function () {
1040          jQuery("[name=timeStart]").timepicker("hide");
1041          jQuery("[name=timeEnd]").timepicker("hide");
1042        });
1043        jQuery(window).scroll(function () {
1044          jQuery("#cartPopover [name=timeStart]").timepicker("hide");
1045          jQuery("#cartPopover [name=timeEnd]").timepicker("hide");
1046        });
1047      }
1048    }
1049
1050    if(jQuery(".io_product_infobox .item_inputtype").text() == "Map"){
1051      simpleCart.items().forEach(function (item, index){
1052        if(item.get("rentalid") === jQuery(".io_product_infobox .item_rentalid").text()){
1053          if(item.get("quantity") > 1){
1054            let units;
1055            if(jQuery(".io_product_infobox .item_qtytype").text() == "Area"){
1056              units = "sq meters"
1057              if(country === "US") units = "sq feet"
1058            }else if(jQuery(".io_product_infobox .item_qtytype").text() == "Perimeter"){
1059              units = "meters"
1060              if(country === "US") units = "feet"
1061            }
1062            set_price_on_item_page(units, item.get("quantity"));
1063          }
1064        }
1065      });
1066    }
1067    /* IO-21808 */
1068    jQuery(".io_product_price_box").each(function() {
1069      let classes = jQuery(this).attr("class");
1070      jQuery(this).attr("class", classes.replace(":", "_"));
1071    });
1072
1073    /* Set time instructions (IO-21496) */
1074    set_cart_time_instructions();
1075
1076    if(io_accessory_select === "on"){
1077      if(jQuery(".io_product_acc_pkg").children().length > 0){
1078        let main_rental_id = jQuery(".item_rentalid").text();
1079        let sel_div = jQuery("<div class=\"io_product_acc_pkg\" style=\"display:flex; margin-top:10px;\"></div>");
1080        let sel = jQuery("<select class=\"io_product_acc_pkg\" onchange=\"accOnClick(this)\" />");
1081        sel.append("<option value=\"\" selected=\"selected\" style=\"display:none\" disabled>Select one..</option>")
1082        jQuery("[id^=io_acc_shortname_"+main_rental_id+"]").each(function(){
1083          sel.append("<option value="+this.id+">"+this.innerHTML+"</option>")
1084          if(this.id.split("_").length > 4){
1085            let split_id = this.id.split("_");
1086            let option_rental_id = split_id[split_id.length - 1];
1087            let sel2 = jQuery("<select id=\"io_product_acc_pkg_sel_"+option_rental_id+"\" style=\"display:none; margin-left:5px;\" onchange=\"accOnClick(this)\" />");
1088            sel2.append("<option value=\"\" selected=\"selected\" style=\"display:none\" disabled>Select one..</option>")
1089            jQuery("[id^=io_acc_shortname_"+option_rental_id+"_]").each(function(){
1090              sel2.append("<option value="+this.id+">"+this.innerHTML+"</option>")
1091            });
1092            sel_div.append(sel2);
1093          }
1094        });
1095        sel_div.prepend(sel);
1096        jQuery(".io_product_acc_pkg").replaceWith(sel_div);
1097      }
1098    }
1099    if(io_cart_party_planner_email === "on" && io_cart_party_planner_destination){
1100      jQuery("#cartPartyBuilderEmailContainer").show()
1101      if(getCookie("io_email")){
1102        jQuery("#cartPartyBuilderEmailInput").val(getCookie("io_email"));
1103      }
1104    }
1105
1106    if(io_brand == "PW"){
1107      jQuery(".io_product_price_box").attr("style", "display: none !important;");
1108      jQuery(".io_product_price_sqfoot").attr("style", "display: grid !important;");
1109    }
1110
1111    setTimeout(simpleCart.init, 100);
1112    if(io_hide_zero == 1){
1113      jQuery(".io_product_price_top_left").each(function (){
1114        if(Number(this.innerText.replace(/[^0-9.-]+/g,"")) == 0){
1115          jQuery(this).parent().attr('style','display:none !important');
1116        }
1117      });
1118      jQuery(".io_product_price_left").each(function (){
1119        if(Number(this.innerText.replace(/[^0-9.-]+/g,"")) == 0){
1120          jQuery(this).parent().attr('style','display:none !important');
1121        }
1122      });
1123    }
1124      if (io_categoryVariantImages == 'on'){
1125          jQuery(".io_category_thumbox").show();
1126          jQuery('.view-product-button').addClass('view-product-button2')
1127      }
1128    let giftcard_value = jQuery(".item_giftcardvalue");
1129    if(giftcard_value && giftcard_value.text()){
1130      jQuery(".delivery_charge_check_container").hide();
1131    }
1132
1133    if (io_customer_geolocation == 'on') initializeGeolocation();
1134  }); /*end of on-ready*/
1135  /*</editor-fold>*/
1136
1137  /*<editor-fold defaultstate="collapsed" desc="Helper Functions">*/
1138  function phraseUpdateCount(inputElement)
1139  {
1140  //read the text and strip out spaces
1141    const fullText = inputElement.value;
1142    const lettersOnly  = fullText.replace(/\s+/g, "");
1143    const count = lettersOnly.length;
1144
1145    const cookieKey = inputElement.classList[0];
1146
1147    document.querySelector(".item_quantity").textContent = count;
1148
1149    setCookie(cookieKey, fullText, 45);
1150  }
1151  function io_party_planner_email_submit(){
1152    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,}))$/;
1153    let email = jQuery("#cartPartyBuilderEmailInput").val();
1154    if(email){
1155      if(email.match(valid_regex)){
1156        setCookie("io_email", email, 14);
1157        window.open(io_cart_party_planner_destination, '_blank').focus();
1158      }else{
1159        jQuery("#cartPartyBuilderEmailWarning").show();
1160      }
1161    }else{
1162      jQuery("#cartPartyBuilderEmailWarning").show();
1163    }
1164  }
1165
1166  function rid_in_batch(rid, batch_ids){
1167    let result = batch_ids.filter(function(batch){
1168      if(batch.includes(this)) return true;
1169    }, rid);
1170    return result
1171  }
1172
1173  function set_cart_time_instructions(){
1174    /* Making it clearer that customers need to set the time in order to see pricing and availability. */
1175    let instructions_container = jQuery("<p id=\"ioCartTimeInstructions\"></p>");
1176    let instructions = "";
1177
1178    if(multi_day){
1179      instructions += "Select the event date or date range using the calendar";
1180    }else{
1181      instructions += "Select the event date using the calendar";
1182    }
1183    instructions += ".";
1184    instructions_container.text(instructions);
1185    jQuery("#cartCalendar").append(instructions_container);
1186  }
1187
1188  function live_pricing_is_on(){
1189    /*
1190    Checks to see if live pricing is on. Assumes it is on unless one of the following conditions:
1191       The setting Hide Live Price is off.
1192       The setting Show Weekend/Weekday Pricing is off.
1193       Delivery method pricing is enabled by default.
1194       We are on an item page that uses delivery method pricing.
1195    */
1196    if(io_hide_live_prices != 1 || io_weekEndPrice != "on" ||
1197            io_delivery_prices["default"].length != 0 || jQuery(".io_product_infobox .item_rentalid").innerText in io_delivery_prices["override"] ||
1198            io_custom_prices["default"].length != 0 || jQuery(".io_product_infobox .item_rentalid").innerText in io_delivery_prices["override"]){
1199      return false;
1200    }
1201    return true;
1202  }
1203
1204  function allow_same_day_select_on_checkout(){
1205    jQuery(".jquery-datepicker").datepicker("option", "minDate", 0);
1206  }
1207
1208  function show_or_hide_required_info_message(){
1209    if(io_info_required == "on"){
1210      if(!all_info_provided()){
1211        jQuery("#io_all_prices").hide();
1212        jQuery("#item_additonal_info_open_message").show();
1213      }else{
1214        jQuery("#io_all_prices").show();
1215        jQuery("#item_additonal_info_open_message").hide();
1216      }
1217    }
1218  }
1219
1220  function all_info_provided(){
1221    /* This is used for when the "Hide all pricing on page until information is provided" setting is on price settings. */
1222    let all_data_provided = true;
1223    let io_required_data = io_info_required_data;
1224    for (const [data, value] of Object.entries(io_required_data)) {
1225      if(value == 1){
1226        if(!getCookie(data)){
1227          all_data_provided = false
1228        }
1229      }
1230    }
1231
1232    if(live_pricing_is_on() && !event_time_set()) {
1233      all_data_provided = false;
1234    }
1235
1236    return all_data_provided;
1237  }
1238
1239  function event_time_set(){
1240    if(getCookie("io_timeStart") &&
1241            getCookie("io_timeEnd") &&
1242            getCookie("io_dateStart") &&
1243            getCookie("io_dateEnd")){
1244      return true;
1245    } else{
1246      return false
1247    }
1248  }
1249
1250  function show_cart_message(){
1251    message_container = jQuery("#cartCustomMessage");
1252    message_container.html(io_cart_message);
1253    message_container.show();
1254  }
1255
1256  function deliveryMethodSelected(){
1257    setCookie("io_delivery_method", jQuery(".ioDeliveryMethods option:selected").text(), 14);
1258    checkRestrictedDeliveries();
1259  }
1260
1261  function adjustPicBoxForHeader(){
1262    /* For some reason its hard to get css with querySelector so we use jQuery to get the picbox. */
1263    pic_box = jQuery(".io_product_picbox");
1264    io_header = document.querySelector(".io_header");
1265    if(pic_box != null && pic_box.css("position") == "sticky"){
1266      if(io_header != null){
1267        header_height = io_header.offsetHeight;
1268        pic_box.css("top", (10+header_height).toString()+"px");
1269      }
1270      else{
1271        possible_headers = document.querySelectorAll("header,section")
1272        possible_headers.forEach((ele) =>{
1273          if(ele.style.top == "0px" && (ele.style.position == "fixed" || ele.style.position == "sticky")){
1274            header = ele;
1275            header_height = header.offsetHeight;
1276            pic_box.css("top", (10+header_height).toString()+"px");
1277
1278          }
1279        });
1280      }
1281    }
1282  }
1283  function cart_times_all_set(){
1284    if(jQuery("#ioCartTimeSelectContainer [name=dateStart]").val() == ""){
1285      return false;
1286    }
1287    if(io_hidetimes === "off" || io_hidetimes === ""){
1288      if(jQuery("#ioCartTimeSelectContainer [name=timeStart]").val() == ""){
1289        return false;
1290      }
1291      if(jQuery("#ioCartTimeSelectContainer [name=timeEnd]").val() == ""){
1292        return false;
1293      }
1294    }
1295
1296    return true;
1297  }
1298  function checkRestrictedDeliveries(){
1299    let items = simpleCart.items()
1300    let restrictions_found = false;
1301    for(i in items){
1302      let rid = items[i].get("rentalid");
1303      if(typeof jQuery(".ioDeliveryMethods").val() != "undefined"){
1304        if(io_delivery_methods[jQuery(".ioDeliveryMethods").val()]["restricted"].includes(rid)){
1305          jQuery("#deliveryMethodWarning").show();
1306          restrictions_found = true;
1307        }
1308      }
1309    }
1310    if(!restrictions_found){
1311      jQuery("#deliveryMethodWarning").hide();
1312    }
1313  }
1314
1315  function display_cart_warning(item){
1316    let cart_warning_container = jQuery("#cartWarning");
1317
1318    // Check if an event date if not we should tell them to set it.
1319    event_times = getAvailTimes();
1320    if(!event_times[0] || !event_times[1]){
1321      cart_warning_container.text("Please set the date and time for your event above.");
1322      cart_warning_container.show();
1323      return false;
1324    }
1325
1326    let item_name = item.get("name");
1327    let item_timeslots = item.get("timeslots");
1328    let timeslot_name = getTimeslotName(item_timeslots);
1329
1330    let stop_loop = false;
1331    if(item_timeslots){
1332      if(jQuery(item_timeslots).nodeName == "SELECT"){
1333        /* NOTE: It should not be possible for timeslots to be empty.
1334                   But in the event they somehow are, we should have this here. */
1335        /* timeslots */
1336        var timeslot_sel_range = jQuery(".item-timeslots [name=\""+timeslot_name+"\"] option:selected").val();
1337        if(typeof timeslot_sel_range != "undefined"){
1338          var [start_time, end_time] = break_timeslot_sel_range(timeslot_sel_range);
1339        }
1340      }else{
1341        /*  timepickers */
1342        let [start_timepicker, end_timepicker] = get_cart_timepickers(timeslot_name);
1343        var start_time = start_timepicker.value;
1344        var end_time = end_timepicker.value;
1345      }
1346      if(!start_time || !end_time){
1347        cart_warning_container.text("Please select a time range for the following item: " + item_name);
1348        cart_warning_container.show()
1349        stop_loop = true;
1350      }
1351    } else{
1352      cart_warning_container.text("Some items are not available on this date.");
1353      cart_warning_container.show()
1354    }
1355    return stop_loop
1356  }
1357
1358  const io_personal_cookie_keys = ["io_email", "io_phone", "io_address", "io_city", "io_state", "io_zip"];
1359
1360  function ioHasMarketingConsent(){
1361    if(typeof cmplz_has_consent !== 'function'){
1362      return true;
1363    }
1364    return cmplz_has_consent('marketing');
1365  }
1366
1367  function ioUnwrapStoredValue(raw) {
1368      // Fully peel any {v,e} wrapper layers that may have accumulated when an
1369      // older plugin version re-saved an already-wrapped value (IO-36799). Cart
1370      // values (dates, times, addresses) are never JSON objects, so any layer
1371      // that parses to a {v,...} object is a wrapper to unwrap. Returns
1372      // { value, expired, malformed } describing the innermost stored string.
1373      var value = (raw == null) ? "" : String(raw);
1374      for (var depth = 0; depth < 25; depth++) {
1375        var trimmed = value.trim();
1376        if (trimmed.charAt(0) !== '{') break;          // plain value -> done
1377        var obj;
1378        try {
1379          obj = JSON.parse(trimmed);
1380        } catch (e) {
1381          break;                                       // not parseable -> stop, keep value
1382        }
1383        if (!obj || typeof obj !== 'object' || !('v' in obj)) break;  // not our wrapper
1384        if (obj.e && Date.now() > obj.e) {
1385          return { value: "", expired: true, malformed: false };
1386        }
1387        value = (obj.v != null) ? String(obj.v) : "";
1388      }
1389      // Only flag as malformed if what remains still looks like our own broken
1390      // {"v":...} wrapper (e.g. truncated) -- never an ordinary value that just
1391      // happens to start with "{", which must be preserved untouched.
1392      var malformed = /^\s*\{\s*"v"\s*:/.test(value);
1393      return { value: value, expired: false, malformed: malformed };
1394  }
1395
1396  function setCookie(cname, cvalue, exdays) {
1397      if(io_personal_cookie_keys.indexOf(cname) !== -1 && !ioHasMarketingConsent()){
1398        return;
1399      }
1400      // Store values in localStorage with an io_ prefix for uniqueness and emulate expiration
1401      try {
1402        // Unwrap first so an already-wrapped value can never be re-wrapped and
1403        // compound into nested {v,e} layers (IO-36799).
1404        var clean = ioUnwrapStoredValue(cvalue).value;
1405        var expiresAt = (typeof exdays === 'number' && exdays > 0)
1406          ? Date.now() + (exdays * 24 * 60 * 60 * 1000)
1407          : null;
1408        var payload = JSON.stringify({ v: clean, e: expiresAt });
1409        window.localStorage.setItem(cname, payload);
1410      } catch (e) {
1411        // Swallow errors to keep behavior similar to cookie writes silently failing
1412        console.log(e);
1413      }
1414  }
1415
1416  function getCookie(cname) {
1417    // Read values from localStorage honoring expiration; return empty string if missing/expired
1418    try {
1419      var raw = window.localStorage.getItem(cname);
1420      if (!raw) return "";
1421      var result = ioUnwrapStoredValue(raw);
1422      if (result.expired || result.malformed) {
1423        // Drop expired or corrupted entries so they self-heal instead of being
1424        // rendered as raw JSON in the date/time fields (IO-36799).
1425        try { window.localStorage.removeItem(cname); } catch (e) {}
1426        return "";
1427      }
1428      return result.value;
1429    } catch (e) {
1430      return "";
1431    }
1432  }
1433  async function fetchAndSetCookie(name) {
1434    var requestInit = { credentials: "include" };
1435    fetch("https://rental.software/include/get_cookie.php?name=" + name, requestInit).then(function (response) {
1436      return response.json();
1437    }).then(function (response) {
1438      return handleResponse(name, response);
1439    });
1440  }
1441
1442  function handleResponse(name, response) {
1443    var currentCookieValue = getCookie(name);
1444    if (!!response.value && currentCookieValue !== response.value) {
1445      setCookie(name, response.value, 14);
1446    }
1447    return response.value;
1448  }
1449
1450  function clearIoPersonalDataForNoConsent(){
1451    io_personal_cookie_keys.forEach(function(key){
1452      try {
1453        window.localStorage.removeItem(key);
1454      } catch (e) {
1455        console.log(e);
1456      }
1457    });
1458
1459    var trackingUrl = (window.location.href.indexOf("localhost") > -1)
1460      ? "http://localhost/io/bugs/include/iotracking.php"
1461      : "https://rental.software/include/iotracking.php";
1462    var clearImg = new Image();
1463    clearImg.src = trackingUrl + "?action=remove&nocache=" + Math.random();
1464  }
1465
1466  document.addEventListener("cmplz_status_change", function (e) {
1467    if (e.detail.category === 'marketing' && e.detail.value === 'deny') {
1468      clearIoPersonalDataForNoConsent();
1469    }
1470  });
1471
1472  function break_timeslot_sel_range(timeslot_sel_range){
1473    /* Takes a time range given by selected timeslot and gets the start and end time removing meridiem.*/
1474    timeslot_sel_arr = timeslot_sel_range.split(" - ");
1475    var start_time = timeslot_sel_arr[0].replace("am"," am").replace("pm"," pm").replace("  "," ");
1476    var end_time = timeslot_sel_arr[1].replace("am"," am").replace("pm"," pm").replace("  "," ");
1477
1478    return Array(start_time, end_time);
1479  }
1480  function getAvailTimes(){
1481    /*
1482    Commonly used helper function. Accomplishes two things:
1483      Returns an array containing start_date, start_time, and event duration.
1484      Sets cookies for start and end date, and start and end time.
1485
1486    Uses the inputs available in the cart if they are filled out, so dateStart, dateEnd, timeStart, and timeEnd.
1487    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.
1488    */
1489    let start_date = jQuery("input[name=dateStart]").val();
1490    let end_date = jQuery("input[name=dateEnd]").val();
1491    if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day"){
1492      let cart_company_timeslot_selected = jQuery(".ioCartCompanyTimeslots option:selected").first().val();
1493      if(cart_company_timeslot_selected){
1494        setCookie("io_company_timeslot_selected", cart_company_timeslot_selected, 14);
1495        cart_company_timeslot_selected = cart_company_timeslot_selected.split("-");
1496        var start_time = cart_company_timeslot_selected[0].trim();
1497        var end_time = cart_company_timeslot_selected[1].trim();
1498      }
1499    } else {
1500      var start_time = jQuery("input[name=timeStart]").val();
1501      var end_time = jQuery("input[name=timeEnd]").val();
1502    }
1503
1504    if (start_date.length == 0) {
1505      start_date = getCookie("io_dateStart");
1506      end_date = getCookie("io_dateEnd");
1507      start_time = getCookie("io_timeStart");
1508      end_time = getCookie("io_timeEnd");
1509    }
1510
1511    const has_selected_company_timeslot = io_company_timeslots.length != 0
1512      && io_cartdayselect == "single_day"
1513      && jQuery(".ioCartCompanyTimeslots option:selected").first().val();
1514
1515    if(io_hidetimes === "on"
1516      && io_force_blank_timepickers != "on"
1517      && !has_selected_company_timeslot) {
1518      start_time = start_default;
1519      end_time = end_default;
1520      jQuery("input[name=timeStart]").val(start_time);
1521      jQuery("input[name=timeEnd]").val(end_time);
1522    }
1523
1524    if(io_force_blank_timepickers != "on")
1525    {
1526      if(start_time.length == 0)
1527      {
1528        start_time = start_default;
1529      }
1530      if(end_time.length == 0)
1531      {
1532        end_time = end_default;
1533      }
1534    }
1535
1536
1537    /* no past dates */
1538    if(start_date.length != 0 && convertDateStringtoDateObject(start_date, start_time) < new Date()){
1539      start_date="";
1540      end_date="";
1541    }
1542    /* setCookie("checkDate", start_date, 14); */
1543    setCookie("io_dateStart", start_date, 14);
1544    setCookie("io_dateEnd", end_date, 14);
1545    setCookie("io_timeStart", start_time, 14);
1546    setCookie("io_timeEnd", end_time, 14);
1547    /* If we are using the information gathering tool, we do not want to show this message.*/
1548    if( live_pricing_is_on() && io_info_required == "off" ){
1549      if(!event_time_set() && io_always_display_live_price != "on"){
1550        jQuery("#item_live_price_time_set_message").show();
1551      }else{
1552        jQuery("#item_live_price_time_set_message").hide();
1553      }
1554    }
1555
1556    var newDate1 = convertDateStringtoDateObject(start_date, start_time);
1557    var newDate2 = convertDateStringtoDateObject(end_date, end_time);
1558    let time_duration = ((newDate2 - newDate1) / 3600) / 1000;
1559    return [start_date,start_time,time_duration];
1560  }
1561
1562  function  getAllRentalIDsFromCart(){
1563    let rental_ids = "";
1564    jQuery("[id^='cartItem_']").each(function(){
1565      children = this.children
1566      for(let i = 0; i < children.length; ++i){
1567        if(children[i].className == "item-rentalid") {
1568          rental_ids += children[i].innerText + "|";
1569          break;
1570        }
1571      }
1572    });
1573    return rental_ids
1574  }
1575  /*</editor-fold>*/
1576
1577  /*<editor-fold defaultstate="collapsed" desc="Info Header Functions">*/
1578  function init_date_timepicker_for_info_header(){
1579    jQuery(".ioInfoDatepicker").datepicker({
1580      changeMonth: true,
1581      changeYear: true,
1582      dateFormat: dateFormat,
1583      rangeSelect: true,
1584      numberOfMonths: 1,
1585      stepMonths: 1,
1586      speed: "fast",
1587      showOn: "both",
1588      onChangeMonthYear: cal_onChangeMonthYear,
1589      buttonText: "Calendar",
1590      minDate: 1,
1591      firstDay: 0
1592    });
1593    jQuery("#ioHeaderDateStart").datepicker("option", { onSelect: function() {
1594        set_info_header_end_date();
1595        saveInfoHeader();
1596        // Add more functions if needed
1597      }
1598    });
1599
1600    if(restrictTimes){
1601      jQuery(".ioInfoTimepicker").timepicker({
1602        startTime: new Date(0, 0, 10, 0, 0, 0),
1603        endTime: new Date(0, 0, 0, 20, 0, 0, 0),
1604        minTime:restrictTimeStart,
1605        maxTime:restrictTimeEnd,
1606        /*show24Hours: $show24Hours,*/
1607        timeFormat: timeFormat,
1608        separator: ":",
1609        className: "elementor-widget-text-editor",
1610        step: 15,
1611        disableTouchKeyboard: true
1612      });
1613    } else{
1614      jQuery(".ioInfoTimepicker").timepicker({
1615        startTime: new Date(0, 0, 10, 0, 0, 0),
1616        endTime: new Date(0, 0, 0, 20, 0, 0, 0),
1617        /*show24Hours: $show24Hours,*/
1618        timeFormat: timeFormat,
1619        separator: ":",
1620        className: "elementor-widget-text-editor",
1621        step: 15,
1622        disableTouchKeyboard: true
1623      });
1624    }
1625    setTimeout(setUpTimeRestrictions_infoHeaderTimepickers, 500);
1626  }
1627
1628  function saveInfoHeader(){
1629    let info_header_start_date = jQuery("[id$=ioHeaderDateStart]");
1630    let info_header_end_date = jQuery("[id$=ioHeaderDateEnd]");
1631    let info_header_start_time = jQuery("[id$=ioHeaderTimeStart]");
1632    let info_header_end_time = jQuery("[id$=ioHeaderTimeEnd]");
1633    let info_header_address = jQuery("[id$=ioHeaderAddress]");
1634    let info_header_city = jQuery("[id$=ioHeaderCity]");
1635    let info_header_state = jQuery("[id$=ioHeaderState]");
1636    let info_header_zip = jQuery("[id$=ioHeaderZipCode]");
1637    let info_header_phone = jQuery("[id$=ioHeaderPhone]");
1638    let info_header_email = jQuery("[id$=ioHeaderEmail]");
1639
1640    if(info_header_start_time.val()) setCookie("io_timeStart", info_header_start_time.val(), 14);
1641    if(info_header_end_time.val()) setCookie("io_timeEnd", info_header_end_time.val(), 14);
1642    if(info_header_start_date.val()) setCookie("io_dateStart", info_header_start_date.val(), 14);
1643    if(info_header_end_date.val()) setCookie("io_dateEnd", info_header_end_date.val(), 14);
1644    if(info_header_address.val()) setCookie("io_address", info_header_address.val(), 14);
1645    if(info_header_city.val()) setCookie("io_city", info_header_city.val(), 14);
1646    if(info_header_state.val()) setCookie("io_state", info_header_state.val(), 14);
1647    if(info_header_zip.val()) setCookie("io_zip", info_header_zip.val(), 14);
1648    if(info_header_phone.val()) setCookie("io_phone", info_header_phone.val(), 14);
1649    if(info_header_email.val()) setCookie("io_email", info_header_email.val(), 14);
1650
1651    /* Set information in the cart. */
1652    calCancel();
1653
1654    header_increment_step();
1655
1656    /* Stop form from doing anything else for elementor */
1657    // jpa - still allow, turn off actions in form if wanted. to turn off io lead submission use the plugin settings
1658    //event.preventDefault();
1659    //event.stopPropagation();
1660    return true;
1661  }
1662
1663  function set_info_header_values(){
1664    let info_header_start_date = jQuery("[id$=ioHeaderDateStart]");
1665    let info_header_end_date = jQuery("[id$=ioHeaderDateEnd]");
1666    let info_header_start_time = jQuery("[id$=ioHeaderTimeStart]");
1667    let info_header_end_time = jQuery("[id$=ioHeaderTimeEnd]");
1668    let info_header_street = jQuery("[id$=ioHeaderAddress]");
1669    let info_header_city = jQuery("[id$=ioHeaderCity]");
1670    let info_header_state = jQuery("[id$=ioHeaderState]");
1671    let info_header_zip = jQuery("[id$=ioHeaderZipCode]");
1672    let info_header_phone = jQuery("[id$=ioHeaderPhone]");
1673    let info_header_email = jQuery("[id$=ioHeaderEmail]");
1674
1675    if(getCookie("io_timeStart")) info_header_start_time.val(getCookie("io_timeStart"));
1676    if(getCookie("io_timeEnd")) info_header_end_time.val(getCookie("io_timeEnd"));
1677    if(getCookie("io_dateStart")) info_header_start_date.val(getCookie("io_dateStart"));
1678    if(getCookie("io_dateEnd")) info_header_end_date.val(getCookie("io_dateEnd"));
1679    if(getCookie("io_address")) info_header_street.val(getCookie("io_address"));
1680    if(getCookie("io_city")) info_header_city.val(getCookie("io_city"));
1681    if(getCookie("io_state")) info_header_state.val(getCookie("io_state"));
1682    if(getCookie("io_zip")) info_header_zip.val(getCookie("io_zip"));
1683    if(getCookie("io_phone")) info_header_phone.val(getCookie("io_phone"));
1684    if(getCookie("io_email")) info_header_email.val(getCookie("io_email"));
1685  }
1686
1687  function add_classes_and_onClicks(){
1688
1689    /* First set up for dates */
1690    let info_header_start_date = jQuery("#ioHeaderDateStart");
1691    let info_header_end_date = jQuery("#ioHeaderDateEnd");
1692    info_header_start_date.addClass("ioInfoDatepicker");
1693    info_header_end_date.addClass("ioInfoDatepicker");
1694
1695    /* Now Timepickers */
1696    let info_header_start_time = jQuery("#ioHeaderTimeStart");
1697    let info_header_end_time = jQuery("#ioHeaderTimeEnd");
1698    info_header_start_time.addClass("ioInfoTimepicker");
1699    info_header_end_time.addClass("ioInfoTimepicker");
1700
1701    /* Add the onClick to the button */
1702    let button = jQuery("#ioInfoHeaderSubmit");
1703    button.click(saveInfoHeader);
1704    button.css("cursor", "pointer");
1705
1706    /* Init datepicker and timepickers */
1707    init_date_timepicker_for_info_header();
1708
1709    /* Lastly set the values if they are set already */
1710    set_info_header_values();
1711  }
1712
1713  function remove_set_event_buttton(){
1714    let set_event_button = jQuery(".pageDateRangeWrapper");
1715    if(set_event_button.length > 0) set_event_button.hide();
1716  }
1717
1718  function set_info_header_end_date(){
1719    if(!jQuery("#ioHeaderDateEnd").val()){
1720      jQuery("#ioHeaderDateEnd").val(jQuery("#ioHeaderDateStart").val())
1721    }
1722    jQuery("#ioHeaderDateEnd").datepicker("option", { minDate: new Date(jQuery("#ioHeaderDateStart").val()) });
1723  }
1724
1725  function header_increment_step(){
1726    let active = jQuery(".io-step-active");
1727
1728    switch(active.attr("id")){
1729      case "io-step-1":
1730        if (/Mobi|Android/i.test(navigator.userAgent)) {
1731          jQuery("#io-step-2,#io-step-3,#io-step-4").hide();
1732        }
1733        if(check_header_step_one(active)){
1734          active.removeClass("io-step-active");
1735          active.addClass("io-step-done")
1736          jQuery("#io-step-2").addClass("io-step-active")
1737          header_increment_step();
1738        }
1739        break;
1740      case "io-step-2":
1741        if (/Mobi|Android/i.test(navigator.userAgent)) {
1742          jQuery("#io-step-2,#io-step-3,#io-step-4").show();
1743        }
1744        if(simpleCart.items().length > 0){
1745          active.removeClass("io-step-active");
1746          active.addClass("io-step-done")
1747          jQuery("#io-step-3").addClass("io-step-active")
1748          header_increment_step();
1749        }
1750        break;
1751      case "io-step-3":
1752        if (/Mobi|Android/i.test(navigator.userAgent)) {
1753          jQuery("#io-step-2,#io-step-3,#io-step-4").show();
1754        }
1755        if(document.location.href.indexOf("io_quoteconfirm") >= 0){
1756          active.removeClass("io-step-active");
1757          active.addClass("io-step-done")
1758          jQuery("#io-step-4").addClass("io-step-active")
1759          header_increment_step();
1760        }
1761        break;
1762      case "io-step-4":
1763        if (/Mobi|Android/i.test(navigator.userAgent)) {
1764          jQuery("#io-step-2,#io-step-3,#io-step-4").show();
1765        }
1766        break;
1767    }
1768  }
1769
1770  function check_header_step_one(active) {
1771    var allInputs = active.find('input');
1772
1773    for (var i = 0; i < allInputs.length; i++) {
1774      if (jQuery(allInputs[i]).val() === "") {
1775        return false; // Return false if any input is empty
1776      }
1777    }
1778    return true; // Return true if all inputs have a value
1779  }
1780
1781  /*</editor-fold>*/
1782
1783  /*<editor-fold defaultstate="collapsed" desc="Accessory Click Functions">*/
1784  function accDDClicked(event){
1785    this_element = jQuery(this)
1786    if(!this_element.prop("selected")){
1787      pid = event.data.pid
1788      accLmt = event.data.accLmt
1789      all_elements = jQuery("[id^=io_acc_"+pid+"_]")
1790      let count = 0;
1791      /* Tried using .filter and .length to get the count of selected items but could not make it work. */
1792      for(i = 0; i < all_elements.length; ++i){
1793        if(all_elements[i].selected){
1794          ++count;
1795        }
1796      }
1797      if(accLmt == 0){
1798        this_element.css("border", "5px solid #bbb");
1799        this_element.prop("selected", true);
1800      } else if(count >= accLmt){
1801        let selected_value = jQuery("[id^=io_acc_"+pid+"_]").filter(function() {
1802          return this["selected"];
1803        });
1804        /* be sure to unselect other slected values if our acc limit has been reached. */
1805        selected_value.prop("selected", false);
1806        selected_value.css("border", "1px solid #bbb");
1807      }
1808      this_element.css("border", "5px solid #bbb");
1809      this_element.prop("selected", true);
1810    } else{
1811      this_element.prop("selected", false);
1812      this_element.css("border", "1px solid #bbb");
1813    }
1814  }
1815
1816  /* when accessory choice is clicked */
1817  function accOnClick(acc_select=null){
1818    /* set name/img back to original main in case they are just clicking on a 1st level size option */
1819    jQuery("#bookNowBtn").removeClass("item_add").addClass("item_add_off").trigger("classChange");
1820    jQuery(".io_product_title.item_name").html(main_name_orig);
1821    jQuery(".io_product_container .item_image").first().attr("src",main_img_src);
1822    jQuery(".io_product_container .item_image").first().attr("data-src",main_img_src);
1823    jQuery(".io_product_container .item_encoded").first().html(main_encoded);
1824    jQuery(".io_product_container .io_image_big").first().attr("src",main_img_src);
1825    jQuery(".io_product_container .io_image_big").first().attr("data-src",main_img_src);
1826    let main_id = jQuery(".io_product_container .item_rentalid").first().text();
1827    let main_id_arr = main_id.split(":")
1828    jQuery(".io_product_container .item_rentalid").html(main_id_arr[0]);
1829    let clk_id;
1830    if(jQuery(acc_select).find(":selected").val()){
1831      clk_id = jQuery(acc_select).find(":selected").val().replace("io_acc_shortname_","");
1832    }else{
1833      clk_id = this.id.replace("io_acc_shortname_","");
1834    }
1835    clk_id = clk_id.replace("iothumb_","");
1836    let click_id_arr = clk_id.split("_");
1837    /* let pid = main_id; */
1838    /* if(main_id.split("_").length>1) pid = parseInt(click_id_arr[0]); */
1839    let acc_obj_relate_is_map = acc_obj_relate instanceof Map;
1840    let acc_obj_relate_entries = acc_obj_relate_is_map ? acc_obj_relate.entries() : Object.entries(acc_obj_relate);
1841    for (let [key, value] of acc_obj_relate_entries) {
1842      let id = key;
1843      let children = acc_obj_relate_is_map ? acc_obj_relate.get(key) : value;
1844      if(Object.keys(children).length>0){
1845        for (key2 in children) {
1846          if(Object.keys(children[key2]).length > 0){
1847            /* 3rd level */
1848            for (key3 in children[key2]) {
1849              displayPackageChoices(clk_id,key2,key3,children[key2]);
1850            }
1851          }else{
1852            displayPackageChoices(clk_id,key,key2,children);
1853          }
1854        }
1855      }else{
1856        displayPackageChoices(clk_id,0,id,acc_obj_relate);
1857      }
1858    }
1859  }
1860
1861  /* show/hide accessory levels as needed */
1862  /* clk_id: one they clicked on, pid: parentid, id: iterator, arr: relationship array */
1863  function displayPackageChoices(clk_id,pid,id,arr){
1864    let main_id = jQuery(".io_product_container .item_rentalid").first().text();
1865    let main_arr = main_id.split("_");
1866    if(main_arr.length>1) main_id = parseInt(main_arr[0]);
1867    let click_id_arr = clk_id.split("_");
1868    elem = getAccElem(id,pid);
1869    if(click_id_arr[0]==pid || click_id_arr[1]==pid || pid==0){
1870      elem.style.display="inline-block";
1871    }else{
1872      elem.style.display="none";
1873    }
1874    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)){
1875      jQuery("#bookNowBtn").removeClass("item_add_off").addClass("item_add").trigger("classChange");
1876      updateMainItem(id,pid);
1877    }
1878  }
1879
1880  /* update it with accessory data for choices */
1881  var main_img_src = jQuery("#single_image").first().attr("href");
1882  var main_name_orig = jQuery(".io_product_title.item_name").html();
1883  var main_encoded = jQuery(".io_product_container .item_encoded").html();
1884  var main_desc = jQuery(".io_product_detailbox .io_product_desc").html();
1885  function updateMainItem(id,pid){
1886    /* update add to cart btn, name, img, desc */
1887    let name = "";
1888    let name_enc = "";
1889    let main_id = jQuery(".io_product_container .item_rentalid").first().text();
1890    let main_arr = main_id.split(":");
1891    if(main_arr.length>1) main_id = main_arr[0];
1892    if(pid!=0){
1893      name += jQuery("#io_acc_itemname_"+pid).html()+":";
1894      name_enc += jQuery("#io_acc_itemname_"+pid).html()+":";
1895      name += jQuery("#io_acc_shortname_"+id).html();
1896      name_enc += jQuery("#io_acc_itemname_"+id).html();
1897    }else{
1898      pid = main_id;
1899      name += jQuery("#io_acc_itemname_"+id).html();
1900      name_enc += jQuery("#io_acc_itemname_"+id).html();
1901    }
1902    jQuery(".io_product_container .item_encoded").html(encodeURIComponent(name_enc.replace(/[\u2032\u2019]+/ig,"'")));
1903    jQuery(".io_product_container .item_rentalid").html(main_id+":"+pid+"_"+id);
1904    jQuery(".io_product_title.item_name").html(name);
1905    // Make sure the description actually displays text.
1906    let acc_desc = jQuery("#io_acc_desc_"+pid+"_"+id).first();
1907    if(acc_desc.length>0 && acc_desc.text()){
1908      jQuery(".io_product_container .io_product_desc").first().html(jQuery("#io_acc_desc_"+pid+"_"+id).first()[0].innerHTML);
1909    }
1910
1911    /* swap accessory image with main image pic for drop-down type items (linens) */
1912    let img = jQuery("#io_acc_imgbig_"+pid+"_"+id).first().attr("href");
1913    if(img==null) img = jQuery("#iothumb_"+pid+"_"+id).first().attr("src")
1914    if(img==null){
1915    }else{
1916      if(img.length==0 && pid==main_id){
1917        /* for 1 level dd items that have no img, use the main img */
1918        img = main_img_src;
1919      }
1920      jQuery(".io_product_container .io_image_big").first().attr("src",img);
1921      jQuery(".io_product_container .io_image_big").first().attr("data-src",
1921img);
1922      jQuery(".io_product_container .item_image").first().attr("src",jQuery("#iothumb_"+pid+"_"+id).first().attr("src"));
1923      jQuery(".io_product_container .item_image").first().attr("data-src",jQuery("#iothumb_"+pid+"_"+id).first().attr("src"));
1924
1925      jQuery("#single_image").first().attr("href",img).show();
1926    }
1927    checkAvailFilter();
1928  }
1929
1930  /* get either img or text for accessory choices */
1931  function getAccElem(id,pid){
1932    let path =pid+"_"+id;
1933    if(pid==0){
1934      path=id;
1935    }
1936    let elem = null;
1937    try{
1938      elem = document.querySelector("#ioAccButtonWrapper_"+path);
1939    }catch(e){}
1940    if(elem == null){
1941      try{
1942        elem = document.querySelector("#iothumb_"+path);
1943      }catch(e){}
1944    }
1945    if(elem==null){
1946      try{
1947        elem = document.querySelector("#io_product_acc_pkg_sel_"+pid);
1948      }catch(e){}
1949      if(elem!=null) return elem;
1950    }else{ return elem; }
1951    if(elem == null){
1952      try{
1953        elem = document.querySelector("#io_acc_shortname_"+path);
1954      }catch(e){}
1955    }else if(elem.src=="" | elem.getAttribute("data-src")==""){
1956      try{
1957        elem = document.querySelector("#io_acc_shortname_"+path);
1958      }catch(e){}
1959    }else if(elem.src.substr(-1)=="/"){
1960      try{
1961        elem = document.querySelector("#io_acc_shortname_"+path);
1962      }catch(e){}
1963    }
1964    if(elem==null){
1965      try{
1966        elem = document.querySelector("#io_acc_shortname_"+id);
1967      }catch(e){}
1968    }
1969    return elem;
1970  }
1971
1972  /* create the accessory choice btn (img/text) */
1973  function makeAccBtn(button_add,pid){
1974    let newButton;
1975    if(button_add.nodeName=="IMG"){
1976      newButton = button_add;
1977      let id =  newButton.id.replace("iothumb_"+pid,"");
1978      var wrapper = document.createElement("div");
1979      wrapper.setAttribute("id", "ioAccButtonWrapper_"+pid+id);
1980      wrapper.style.display = "inline-block";
1981      wrapper.appendChild(newButton);
1982      let acc_name = document.createElement("span");
1983      acc_name.style.overflow = "hidden";
1984      acc_name.style.textOverflow = "ellipsis";
1985      acc_name.style.maxWidth = "80px";
1986      acc_name.style.display = "block";
1987      acc_name.style.whiteSpace = "nowrap";
1988      acc_name.textContent = jQuery("#io_acc_shortname"+id).text();
1989      acc_name.classList.add("accTextName");
1990      acc_name.setAttribute("id", "io_acc_shortname_"+pid+id);
1991      wrapper.appendChild(document.createElement("br"));
1992      wrapper.appendChild(acc_name);
1993
1994    }else{
1995      newButton = button_add.cloneNode(true);
1996      let id = newButton.id.replace("io_acc_shortname_","");
1997      newButton.id = "io_acc_shortname_" + pid + "_" + id;
1998    }
1999    newButton.classList.add("elementor-animation-grow");
2000    newButton.classList.remove("item_image");
2001    newButton.style="cursor:pointer;border: solid 1px grey";
2002    newButton.classList.add("io_access_button");
2003    newButton.style.display = "inline-block";
2004    newButton.style.verticalAlign = "top";
2005    newButton.onclick=accOnClick;
2006    if(newButton.nodeName=="IMG"){
2007      newButton.style.minWidth = "80px";
2008      newButton.style.width = "80px";
2009      newButton.style.margin = "2px";
2010      newButton.style.height = "80px";
2011    }else{
2012      newButton.style.margin = "0px 2px 0px 2px";
2013    }
2014    if(button_add.nodeName=="IMG"){
2015      return wrapper
2016    }
2017
2018    return newButton;
2019  }
2020  /* when clicking the thumb swatches under main image (2nd image for an item) */
2021  function updateMainPic(img) {
2022    let container = img.parentElement;
2023    while (container && !container.querySelector(".io_image_big")) {
2024      container = container.parentElement;
2025    }
2026
2027    const main_img = container ? container.querySelector(".io_image_big") : null;
2028    if (!main_img) return;
2029
2030    const dataBigSrc = img.getAttribute("data-big-src");
2031    if (dataBigSrc) {
2032      main_img.src = dataBigSrc;
2033      return;
2034    }
2035
2036    let thumb_id = img.id;
2037    let big_id = thumb_id.replace("thumb", "big");
2038    const img_big = document.getElementById(big_id);
2039
2040    if (img_big && img_big.href) {
2041      main_img.src = img_big.href;
2042    }
2043  }
2044  /*</editor-fold>*/
2045
2046  /*<editor-fold defaultstate="collapsed" desc="Calendar Functions">*/
2047  function calApply() {
2048    /* reset timeslots if filtering is on */
2049    filterTimeslotsByDay_itemTimeslots();
2050    simpleCart.update();
2051
2052    /* Prevent zero-duration selection: disallow identical start and end date/time */
2053    try
2054    {
2055      var ds = jQuery("input[name=dateStart]").val();
2056      var de = jQuery("input[name=dateEnd]").val();
2057      var ts = jQuery("input[name=timeStart]").val();
2058      var te = jQuery("input[name=timeEnd]").val();
2059      if(ts && te && ds && de)
2060      {
2061        var s24 = convert12HourTo24Hour(ts);
2062        var e24 = convert12HourTo24Hour(te);
2063        var sObj = buildDateObj(ds.split("/"), s24);
2064        var eObj = buildDateObj(de.split("/"), e24);
2065        if(sObj && eObj && typeof sObj.getTime === 'function' && typeof eObj.getTime === 'function')
2066        {
2067          if(eObj.getTime() === sObj.getTime())
2068          {
2069            alert("Please choose an end time that's after the start time.");
2070            jQuery("input[name=timeEnd]").val("");
2071            return false;
2072          }
2073        }
2074      }
2075    }catch(e){}
2076
2077    if(cart_times_all_set()){
2078      ioCartLoaderActivate();
2079      setCookie("io_dateApplied", "true", 1)
2080      checkAvailAll();
2081      // If no availability calls were made, hide loader shortly after
2082      setTimeout(function()
2083      {
2084        if(io_cart_loading_active && io_cart_loading_count === 0)
2085        {
2086          io_cart_loading_active = false;
2087          ioCartShowOverlay(false);
2088        }
2089      }, 300);
2090      calCancel();
2091    }
2092
2093
2094    let io_required_data = io_info_required_data;
2095    for (const [data, value] of Object.entries(io_required_data)) {
2096      if(value == 1){
2097        setCookie(data, jQuery("#io_im_"+data).val(), 14);
2098      }
2099    }
2100
2101    /* Check if information gathering header exists. If it does, update the times on there. */
2102    if(jQuery("#ioInfoHeader").length){
2103      jQuery("#ioHeaderTimeStart").val(jQuery("[name=timeStart]").val());
2104      jQuery("#ioHeaderTimeEnd").val(jQuery("[name=timeEnd]").val());
2105      jQuery("#ioHeaderDateStart").val(jQuery("[name=dateStart]").val());
2106      jQuery("#ioHeaderDateEnd").val(jQuery("[name=dateEnd]").val());
2107      header_increment_step();
2108    }
2109
2110    show_or_hide_required_info_message()
2111    /* if(!cartStayOpen) cartHide(); */
2112  }
2113
2114  function calCancel() {
2115    click_count = 0;
2116    start_date = getCookie("io_dateStart");
2117    end_date = getCookie("io_dateEnd");
2118    start_time = getCookie("io_timeStart");
2119    end_time = getCookie("io_timeEnd");
2120    jQuery("input[name=dateStart]").val(start_date);
2121    jQuery("input[name=dateEnd]").val(end_date);
2122    if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day" && getCookie("io_company_timeslot_selected")){
2123      jQuery(".ioCartCompanyTimeslots").val(getCookie("io_company_timeslot_selected"));
2124    } else{
2125      jQuery("input[name=timeStart]").val(start_time);
2126      jQuery("input[name=timeEnd]").val(end_time);
2127    }
2128    setCalBackground();
2129
2130    jQuery(".ioDateRange").html(smartFormatDateRange())
2131    jQuery("#cartCalendar, #cartTimePicker").hide();
2132    jQuery(".ioDateRange").show();
2133    jQuery(".changeDateLinkWrapper").show();
2134  }
2135
2136  /* var cartStayOpen = false; */
2137  function calSetDateRange(stayOpen) {
2138    /*
2139        if(stayOpen==1){
2140            cartStayOpen = true;
2141        }else{
2142            cartStayOpen = false;
2143        }
2144        */
2145    jQuery(".changeDateLinkWrapper").hide();
2146    jQuery("#cartCalendar, #cartTimePicker").show();
2147    jQuery("#cartDateRange").hide();
2148  }
2149
2150  function smartFormatDateRange() {
2151    let start_date = jQuery("input[name=dateStart]").val();
2152    let end_date = jQuery("input[name=dateEnd]").val();
2153    if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day"){
2154      let cart_company_timeslot_selected = jQuery(".ioCartCompanyTimeslots option:selected").first().val();
2155      if(cart_company_timeslot_selected){
2156        setCookie("io_company_timeslot_selected", cart_company_timeslot_selected, 14);
2157        cart_company_timeslot_selected = cart_company_timeslot_selected.split("-");
2158        var start_time = cart_company_timeslot_selected[0].trim();
2159        var end_time = cart_company_timeslot_selected[1].trim();
2160      }
2161    } else {
2162      var start_time = jQuery("input[name=timeStart]").val();
2163      var end_time = jQuery("input[name=timeEnd]").val();
2164    }
2165
2166    let text = "";
2167    text = start_date;
2168    if(io_hidetimes!="on") text += " " + start_time;
2169
2170    if (start_date == end_date) {
2171      if(io_hidetimes!="on"){
2172        text += "  <i class='fas fa-arrow-right' style='padding:5px;'></i> ";
2173        text += end_time;
2174      }
2175    } else {
2176      text += "  <i class='fas fa-arrow-right' style='padding:5px;'></i> ";
2177      text += end_date;
2178      if(io_hidetimes!="on") text += " " + end_time;
2179    }
2180    /* text += "  <i class='fas fa-pencil-alt' style='margin-left:9px;color:"+pallet_color1+";'></i> "; */
2181
2182    return text;
2183  }
2184
2185
2186  function resetCalButtons() {
2187    jQuery("#cartCalendar .ui-datepicker-prev").addClass("fas fa-arrow-left").css("color", pallet_color1);
2188    jQuery("#cartCalendar .ui-datepicker-next").addClass("fas fa-arrow-right").
2188css("color", pallet_color1);
2189  }
2190
2191  function cal_onChangeMonthYear(year, month, obj) {
2192    setTimeout(resetCalButtons, 10);
2193    setTimeout(setCalBackground, 10);
2194  }
2195
2196  function cal_onSelect(dateText, obj) {
2197    setTimeout(resetCalButtons, 10);
2198    let whatday_choice = "";
2199    if(io_cartdayselect === "dropdown_options" && io_multidayquote === "on"){
2200      let choice_obj = jQuery("#whatday");
2201      if(choice_obj){
2202        whatday_choice = choice_obj.val();
2203      }
2204    }
2205
2206    click_count++;
2207    end_timepicker = jQuery("input[name=timeEnd]");
2208    let timeStart = jQuery("input[name=timeStart]").val();
2209    if(io_force_blank_timepickers != "on")
2210    {
2211      if (timeStart == "") {
2212        jQuery("input[name=timeStart]").val(start_default);
2213        jQuery("input[name=timeEnd]").val(end_default);
2214      }
2215    }
2216
2217    if (click_count == 1 || !multi_day || whatday_choice==="Same Day" || whatday_choice==="Overnight") {
2218      jQuery("input[name=dateStart]").val(dateText);
2219      jQuery("input[name=dateEnd]").val(dateText)
2220      end_timepicker.timepicker("option",{"minTime": jQuery("input[name=timeStart]").val()});
2221      if(EndTimeLessThanStartTime(
2222              jQuery("input[name=timeStart]").val(),
2223              end_timepicker.val(),
2224              jQuery("[name='dateStart']").val(),
2225              jQuery("[name='dateEnd']").val() ) ) {
2226        end_timepicker.val("");
2227      }
2228      if(io_cartAllowSameDay == "on"){
2229        restrictStartTimepickerOnSameDaySelect(dateText, jQuery("input[name=timeStart]"), end_timepicker);
2230      }
2231    } else if (click_count == 2) {
2232      jQuery("input[name=dateEnd]").val(dateText);
2233      let start_date_str = jQuery("input[name=dateStart]").val();
2234      let start_date_obj = convertDateStringtoDateObject(start_date_str);
2235      let end_date_obj = convertDateStringtoDateObject(dateText);
2236      if(end_date_obj < start_date_obj){
2237        jQuery("input[name=dateStart]").val(dateText);
2238        if(io_cartAllowSameDay == "on"){
2239          restrictStartTimepickerOnSameDaySelect(dateText, jQuery("input[name=timeStart]"), end_timepicker);
2240        }
2241      } else{
2242        end_timepicker.timepicker("option",{"minTime": io_restrict_time_start});
2243      }
2244      click_count = 0;
2245    } else {
2246      click_count = 0;
2247    }
2248    //custom code for suncoast_event
2249    if(io_cartdayselect === "dropdown_options" && io_multidayquote === "on"){
2250      endDisplay();
2251      //daysSelect();
2252    }
2253    filterTimeslotsByDay_companyTimeslots();
2254
2255    setTimeout(setCalBackground, 10);
2256  }
2257
2258  function endDisplay(){
2259    //todo: need to figure out if these work and set triggers
2260    // trigger enddisplay after date is selected or possibly when dateEnd changes?
2261    let choice = jQuery("#whatday").val();
2262
2263    setCookie("io_whatday", choice, 14);
2264    let dateStart = jQuery("[name=dateStart]");
2265    let timeStart = jQuery("[name=timeStart]");
2266    let dateEnd = jQuery("[name=dateEnd]");
2267    let timeEnd = jQuery("[name=timeEnd]");
2268    if(choice==='Overnight'){
2269      let startdate = dateStart.val();
2270      let starttime = io_overnightPickupTime;
2271      let endcalc_date_obj = new Date(buildDateobjectstring(startdate,dateFormat,starttime));
2272      let duration_hrs = 24;
2273      let end_date_obj = new Date(endcalc_date_obj.getTime()+duration_hrs*60*60*1000);
2274      if(!isNaN(end_date_obj)){
2275        dateEnd.val(getFormatteddate(end_date_obj));
2276        timeEnd.val(getFormattedtime(end_date_obj));
2277        timeEnd.attr('readonly','readonly');
2278      }
2279    }else if(choice==='Multi-Day'){
2280      let startdate = dateStart.val();
2281      let starttime = timeStart.val() || start_default;
2282      let start_date_obj = new Date(buildDateobjectstring(startdate, dateFormat, starttime));
2283      if(!isNaN(start_date_obj)){
2284        //dateEnd.val(getFormatteddate(start_date_obj));
2285        let cal = jQuery("#cartCalendar");
2286        let origOnSelect = cal.datepicker("option", "onSelect");
2287        cal.datepicker("option", "onSelect", null);
2288        cal.datepicker("setDate", start_date_obj);
2289        cal.datepicker("option", "onSelect", origOnSelect);
2290      }
2291      timeEnd.removeAttr('readonly');
2292      if(io_force_blank_timepickers == "on" && !timeEnd.val()){
2293        timeEnd.val("");
2294      } else if(!timeEnd.val()){
2295        timeEnd.val(end_default);
2296      }
2297    }else{
2298      let startdate = dateStart.val();
2299      let starttime = timeStart.val() || start_default;
2300      let start_date_obj = new Date(buildDateobjectstring(startdate, dateFormat, starttime));
2301      if(!isNaN(start_date_obj)){
2302        dateEnd.val(getFormatteddate(start_date_obj));
2303        let cal = jQuery("#cartCalendar");
2304        let origOnSelect = cal.datepicker("option", "onSelect");
2305        cal.datepicker("option", "onSelect", null);
2306        cal.datepicker("setDate", start_date_obj);
2307        cal.datepicker("option", "onSelect", origOnSelect);
2308      }
2309      timeEnd.removeAttr('readonly');
2310      if(io_force_blank_timepickers == "on"  && !timeEnd.val()){
2311        timeEnd.val("");
2312      } else if(!timeEnd.val()){
2313        timeEnd.val(end_default);
2314      }
2315      click_count = 0;
2316    }
2317    setTimeout(setCalBackground, 10);
2318  }
2319  function setCalBackground() {
2320    let dateStart_string = jQuery("input[name=dateStart]").val();
2321    let dateEnd_string = jQuery("input[name=dateEnd]").val();
2322
2323    if (dateFormat == "d/m/yy") {
2324      let dateStartArray = dateStart_string.split("/");
2325      let dateEndArray = dateEnd_string.split("/");
2326      var dateStart = new Date(dateStartArray[2], Number(dateStartArray[1])-1, dateStartArray[0]);
2327      var dateEnd = new Date(dateEndArray[2], Number(dateEndArray[1])-1, dateEndArray[0]);
2328    } else {
2329      var dateStart = new Date(dateStart_string);
2330      var dateEnd = new Date(dateEnd_string);
2331    }
2332
2333
2334    let sday = dateStart.getDate();
2335    let smonth = dateStart.getMonth();
2336    let syear = dateStart.getFullYear();
2337
2338    let eday = dateEnd.getDate();
2339    let emonth = dateEnd.getMonth();
2340    let eyear = dateEnd.getFullYear();
2341
2342    /* clear any (in case of cancel) */
2343    jQuery(".ui-datepicker-calendar [data-handler=selectDay]").css("background-color","initial");
2344
2345    /* set the selected ones */
2346    jQuery("#cartCalendar [data-month=" + smonth + "][data-year=" + syear + "], #cartCalendar [data-month=" +
2347            emonth + "][data-year=" + eyear + "]").each(function (i) {
2348      let cday = jQuery(this).find("a").first().text();
2349      let cmonth = jQuery(this).attr("data-month");
2350      let cyear = jQuery(this).attr("data-year");
2351      /* let dateCurrent = new Date(Date.UTC(cyear,cmonth,cday,12)); */
2352      let dateCurrent = new Date(cyear, cmonth, cday);
2353      if (click_count == 1 && dateEnd_string.length == 0) dateEnd = dateStart;
2354      if (dateCurrent.getTime() == dateStart.getTime() && dateCurrent.getTime() == dateEnd.getTime()) {
2355        jQuery(this).css("border-radius", "6px 6px 6px 6px");
2356      } else if (dateCurrent.getTime() == dateStart.getTime()) {
2357        jQuery(this).css("border-radius", "6px 0 0 6px");
2358      } else if (dateCurrent.getTime() == dateEnd.getTime()) {
2359        jQuery(this).css("border-radius", "0 6px 6px 0");
2360      }
2361
2362      if (dateCurrent >= dateStart && dateCurrent <= dateEnd) {
2363        jQuery(this).css("background-color", pallet_color1);
2364      }
2365
2366
2367    });
2368  }
2369  /*</editor-fold>*/
2370
2371  /*<editor-fold defaultstate="collapsed" desc="Timeslot/Timepicker Functions">*/
2372  /* called from simplecart */
2373  function timeslotChange(){
2374    checkAvailCartTimeslots();
2375  }
2376  function filterTimeslotsByDay_companyTimeslots(){
2377    var weekday = new Array();
2378    weekday[0] = "Sunday";
2379    weekday[1] = "Monday";
2380    weekday[2] = "Tuesday";
2381    weekday[3] = "Wednesday";
2382    weekday[4] = "Thursday";
2383    weekday[5] = "Friday";
2384    weekday[6] = "Saturday";
2385
2386    let times = getAvailTimes();
2387    let start_date = times[0];
2388    var newDate1 = convertDateStringtoDateObject(start_date);
2389    let day = weekday[new Date(newDate1).getDay()];
2390
2391    let selected_option_label = jQuery(".ioCartCompanyTimeslots option:selected").first().text().toLowerCase();
2392    if(optionHasDay(weekday, selected_option_label)){
2393      if(selected_option_label.indexOf(day.toLowerCase()) === -1){
2394        jQuery(".ioCartCompanyTimeslots").val("");
2395      }
2396    }
2397    if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day"){
2398      jQuery(".ioCartCompanyTimeslots > option").each(function() {
2399        if(optionHasDay(weekday, this.text.toLowerCase())){
2400          for(i=0; i<weekday.length; ++i){
2401            if(day.toLowerCase() == weekday[i].toLowerCase() && this.text.toLowerCase().indexOf(day.toLowerCase()) !== -1){
2402              jQuery(this).show();
2403              day_missing = false;
2404            } else if(day.toLowerCase() != weekday[i].toLowerCase() && this.text.toLowerCase().indexOf(day.toLowerCase()) === -1){
2405              jQuery(this).hide();
2406            }
2407          }
2408        }
2409      });
2410    }
2411  }
2412
2413  function filterTimeslotsByDay_itemTimeslots(){
2414    var weekday = new Array();
2415    weekday[0] = "Sunday";
2416    weekday[1] = "Monday";
2417    weekday[2] = "Tuesday";
2418    weekday[3] = "Wednesday";
2419    weekday[4] = "Thursday";
2420    weekday[5] = "Friday";
2421    weekday[6] = "Saturday";
2422
2423    let times = getAvailTimes();
2424    let start_date = times[0];
2425    var newDate1 = convertDateStringtoDateObject(start_date);
2426    let day = weekday[new Date(newDate1).getDay()];
2427
2428    simpleCart.each(function (item, x) {
2429      var timeslots_html = item.get('timeslots');
2430      if(typeof timeslots_html != "undefined" && jQuery.parseHTML(timeslots_html)[0].nodeName == "SELECT"){
2431        if(timeslots_html.length > 0){
2432          var timeslot_name = getTimeslotName(timeslots_html);
2433          if(typeof item.get("timeslots-orig") == "undefined"){
2434            var timeslots_obj = jQuery.parseHTML(timeslots_html);
2435          } else{
2436            var timeslots_obj = jQuery.parseHTML(item.get('timeslots-orig'));
2437          }
2438          jQuery(timeslots_obj).find("option").each(function(){
2439            if(optionHasDay(weekday, this.text.toLowerCase())){
2440              for(i=0; i<weekday.length; ++i){
2441                if(day.toLowerCase() == weekday[i].toLowerCase() && this.text.toLowerCase().indexOf(day.toLowerCase()) !== -1){
2442                  /* jQuery(this).show(); */
2443                } else if(day.toLowerCase() != weekday[i].toLowerCase() && this.text.toLowerCase().indexOf(day.toLowerCase()) === -1){
2444                  jQuery(this).remove();
2445                }
2446              }
2447            }
2448          });
2449          if(typeof item.get("timeslots-orig") == "undefined") item.set("timeslots-orig",item.get("timeslots"));
2450          item.set("timeslots",'<select class="simpleCart_timeslots" name="'+timeslot_name+'">'+jQuery(timeslots_obj).html()+'</select>');
2451        }
2452      }
2453    });
2454  }
2455
2456  function optionHasDay(weekdays, option_label){
2457    for(i=0; i<weekdays.length; ++i){
2458      if(option_label.indexOf(weekdays[i].toLowerCase()) !== -1){
2459        return true;
2460      }
2461    }
2462    return false;
2463  }
2464
2465  function getTimeslotName(timeslots_html){
2466    if(typeof timeslots_html=="undefined") return "";
2467    var timeslot_name_s = timeslots_html.indexOf('name="');
2468    timeslot_name_s += 6;
2469    var timeslot_name_e = timeslots_html.indexOf('"',timeslot_name_s);
2470    var timeslot_name = timeslots_html.substr(timeslot_name_s,timeslot_name_e-timeslot_name_s);
2471    return timeslot_name;
2472  }
2473  function setTimeslotSelected(item, timeslot_name){
2474    jQuery(".item-timeslots [name=\""+timeslot_name+"\"] option").not(":selected").removeAttr("selected");
2475    jQuery(".item-timeslots [name=\""+timeslot_name+"\"] option:selected").attr("selected","selected");
2476    if(jQuery(".item-timeslots [name=\""+timeslot_name+"\"]").length>0){
2477      item.set("timeslots",jQuery(".item-timeslots [name=\""+timeslot_name+"\"]")[0].outerHTML);
2478    }
2479
2480    /* set on quote page */
2481    jQuery(".controls [name=\""+timeslot_name+"\"] option").not(":selected").removeAttr("selected");
2482    jQuery(".controls [name=\""+timeslot_name+"\"] option[value='"+jQuery(".item-timeslots [name=\""+timeslot_name+"\"] option:selected").val()+"']").attr("selected","selected");
2483  }
2484
2485  function setTimePicker(item, timepicker_name){
2486    let [start_timepicker, end_timepicker] = get_cart_timepickers(timepicker_name);
2487    let start_time = start_timepicker.value;
2488    let end_time = end_timepicker.value;
2489
2490    if(!start_time){
2491      start_timepicker.style.borderColor = "red";
2492    } else{
2493      start_timepicker.style.borderColor = "";
2494    }
2495    if(!end_time){
2496      end_timepicker.style.borderColor = "red";
2497    } else{
2498      end_timepicker.style.borderColor = "";
2499    }
2500
2501    let start_timepicker_html = start_timepicker.outerHTML;
2502    let end_timepicker_html = end_timepicker.outerHTML;
2503    if(document.querySelectorAll(".item-timeslots [name=\""+timepicker_name+"\"]").length>0){
2504      start_timepicker_html = addOrReplaceValueInTimepicker(start_timepicker_html, start_time);
2505      end_timepicker_html = addOrReplaceValueInTimepicker(end_timepicker_html, end_time);
2506      item.set("timeslots", '<div name="'+timepicker_name+'"> Start: '+start_timepicker_html+' End: '+end_timepicker_html+'</div>');
2507    }
2508    /* set on quote page */
2509    /* For linen type items with timepickers */
2510    let rental_id = item.get("rentalid");
2511    let split_on_colon = rental_id.split(":");
2512    if(split_on_colon.length > 1){
2513      fix_time_name_for_linen_rid(timepicker_name, split_on_colon, start_time, end_time, rental_id)
2514    }else{
2515      let quote_page_start_timepicker = document.querySelectorAll(".controls [name=\""+timepicker_name.replace("io_timepicker_", "starttime_")+"\"]")[0];
2516      let quote_page_end_timepicker = document.querySelectorAll(".controls [name=\""+timepicker_name.replace("io_timepicker_", "endtime_")+"\"]")[0];
2517      if(quote_page_start_timepicker != null && quote_page_end_timepicker != null){
2518        quote_page_start_timepicker.value = start_time;
2519        quote_page_end_timepicker.value = end_time;
2520      }
2521    }
2522  }
2523
2524  function fix_time_name_for_linen_rid(time_name, split_rid, start_time, end_time, rental_id){
2525    for(let x = 0; x < split_rid.length; x++){
2526      temp_timepicker_name = time_name.replace(rental_id, split_rid[x]);
2527      let quote_page_start_timepicker = document.querySelectorAll(".controls [name=\""+temp_timepicker_name.replace("io_timepicker_", "starttime_")+"\"]")[0];
2528      let quote_page_end_timepicker = document.querySelectorAll(".controls [name=\""+temp_timepicker_name.replace("io_timepicker_", "endtime_")+"\"]")[0];
2529      if(quote_page_start_timepicker != null && quote_page_end_timepicker != null){
2530        quote_page_start_timepicker.value = start_time;
2531        quote_page_end_timepicker.value = end_time;
2532      }
2533    }
2534  }
2535
2536  function addOrReplaceValueInTimepicker(timepicker_html, time_value){
2537    if(timepicker_html.includes("value=")){
2538      timepicker_html = [timepicker_html.slice(0, timepicker_html.indexOf("value=")), 'value="'+time_value+'"', timepicker_html.slice(timepicker_html.length-1)].join("");
2539    }else{
2540      /* No value defined. Add it at the end of the outer html. */
2541      let position = timepicker_html.lastIndexOf(">");
2542      timepicker_html = [timepicker_html.slice(0, position), ' value="'+time_value+'"', timepicker_html.slice(position)].join("");
2543    }
2544    return timepicker_html
2545  }
2546
2547  function restrictEndTimepickers(){
2548    setUpTimeRestrictions_cartTimepickers()
2549    setUpTimeRestrictions_timeBasedItems()
2550  }
2551
2552  function setUpTimeRestrictions_timeBasedItems(){
2553    jQuery("input[name^=start_timeslot_]").change(function()
2554    {
2555      end_timepicker = jQuery("input[name='"+this.name.replace("start", "end")+"']");
2556      end_timepicker = jQuery(end_timepicker[end_timepicker.length - 1]);
2557      end_timepicker.timepicker("option",{"minTime": jQuery(this).val()});
2558      if( EndTimeLessThanStartTime( jQuery(this).val(), end_timepicker.val(), "0/0/0", "0/0/0" ) ){
2559        end_timepicker.val("");
2560      }
2561    });
2562  }
2563
2564  function setUpTimeRestrictions_cartTimepickers(){
2565    jQuery("input[name=timeStart]").change(function()
2566    {
2567      end_timepicker = jQuery("[name='"+this.name.replace("Start", "End")+"']");
2568      if(jQuery("[name='dateStart']").val() === jQuery("input[name='dateEnd']").val()){
2569        end_timepicker.timepicker("option",{"minTime": jQuery(this).val()});
2570        if(EndTimeLessThanStartTime(
2571                jQuery(this).val(),
2572                end_timepicker.val(),
2573                jQuery("[name='dateStart']").val(),
2574                jQuery("[name='dateEnd']").val() ) ) {
2575          end_timepicker.val("");
2576        }
2577      }
2578    });
2579  }
2580
2581  function setUpTimeRestrictions_infoHeaderTimepickers(){
2582    jQuery("#ioHeaderTimeStart").change(function()
2583    {
2584      end_timepicker = jQuery("#ioHeaderTimeEnd");
2585      if(jQuery("#ioHeaderDateStart").val() === jQuery("#ioHeaderDateEnd").val()){
2586        end_timepicker.timepicker("option",{"minTime": jQuery(this).val()});
2587        if(EndTimeLessThanStartTime(
2588                jQuery(this).val(),
2589                end_timepicker.val(),
2590                jQuery("#ioHeaderDateStart").val(),
2591                jQuery("#ioHeaderDateEnd").val() ) ) {
2592          end_timepicker.val("");
2593        }
2594      }
2595    });
2596  }
2597
2598  /*
2599        helper function to see if the value from a start timepicker is less than the string value of an end timepicker.
2600
2601        param start_time: string representation of the start time picker. 12hr or 24hr.
2602        param end_time: string representation of the end time picker. 12hr or 24hr.
2603        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.
2604        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.
2605
2606  */
2607  function EndTimeLessThanStartTime(start_time, end_time, start_date, end_date){
2608    if(!start_time || !end_time) return false;
2609    start_time = convert12HourTo24Hour(start_time);
2610    end_time = convert12HourTo24Hour(end_time);
2611    var split_start_date = start_date.split("/");
2612    var split_end_date = end_date.split("/");
2613    var startDate = buildDateObj(split_start_date, start_time);
2614    var endDate = buildDateObj(split_end_date, end_time);
2615    if(endDate < startDate){
2616      return true;
2617    } else {
2618      return false;
2619    }
2620  }
2621  function get_cart_timepickers(timepicker_name){
2622    let start_timepicker = document.getElementsByName(timepicker_name.replace("io_timepicker_", "start_timeslot_"));
2623    let end_timepicker = document.getElementsByName(timepicker_name.replace("io_timepicker_", "end_timeslot_"));
2624    start_timepicker = start_timepicker[start_timepicker.length-1];
2625    end_timepicker = end_timepicker[end_timepicker.length-1];
2626    return Array(start_timepicker, end_timepicker);
2627  }
2628  function restrictStartTimepickerOnSameDaySelect(start_date_str, start_timepicker, end_timepicker){
2629    let selected_date_obj = convertDateStringtoDateObject(start_date_str);
2630    let current_date_obj = new Date();
2631    if(current_date_obj.getDate()  == selected_date_obj.getDate() &&
2632            current_date_obj.getMonth() == selected_date_obj.getMonth() &&
2633            current_date_obj.getYear()  == selected_date_obj.getYear()){
2634      let next_hour_time_stamp = current_date_obj.setMinutes(60);
2635      let next_hour_str = getFormattedtime(new Date(next_hour_time_stamp))
2636      start_timepicker.timepicker("option",{"minTime": next_hour_str});
2637
2638      /* If the time in the input box is less than the time we just restricted too, then clear time inputs */
2639      restricted_time_obj = convertDateStringtoDateObject(start_date_str, next_hour_str);
2640      currently_selected_time_obj = convertDateStringtoDateObject(start_date_str, start_timepicker.val());
2641      if(currently_selected_time_obj < restricted_time_obj){
2642        start_timepicker.val(next_hour_str);
2643        end_timepicker.val("");
2644        end_timepicker.timepicker("option",{"minTime": next_hour_str});
2645      }
2646    }else{
2647      start_timepicker.timepicker("option",{"minTime": restrictTimeStart});
2648    }
2649  }
2650  /*</editor-fold>*/
2651
2652  /*<editor-fold defaultstate="collapsed" desc="Simple Cart Bound Functions">*/
2653  function cart_onUpdate() {
2654    /* need slight delay so simplecart updates before this runs */
2655    setTimeout(cart_onUpdate2, 500);
2656    try{
2657      for(var i=0;i<document.getElementsByClassName("ioCart").length;i++){
2658        document.getElementsByClassName("ioCart")[i].setAttribute("cnt", simpleCart.items().length);
2659      }
2660    }catch(e){}
2661  }
2662
2663  function cart_onUpdate2() {
2664    jQuery("#cartSubtotal").html(simpleCart.toCurrency(simpleCart.total()));
2665    if(io_checkavail=="off") return;
2666    jQuery("#cartWarning").hide();
2667    let hasUnavail = false;
2668    gift_cards_only = false;
2669    simpleCart.each(function (item, x) {
2670      let item_id = item.get("id");
2671      var giftCardValue = item.get("giftcardvalue");
2672      if (giftCardValue && giftCardValue.trim()) {
2673        gift_cards_only = true;
2674      }
2675      let avail = 0;
2676      let stop_loop = false;
2677      if (item.get("availability") != null) avail = item.get("availability").replace(" available", "");
2678      let quantity = Number(item.get("quantity"));
2679      if(item.get("inputtype") == "Map"){
2680        quantity = 1
2681      }
2682      if(typeof item.get("availability") != 'undefined'){
2683        if (quantity > Number(avail) || avail == "not") {
2684          /* item.set("availability","<span style=color:red>"+item.get("availability")+"</span>"); */
2685          setTimeout(function () {
2686            jQuery("#cartItem_" + item_id + " .item-availability").css("color", "red")
2687          }, 10);
2688          //jQuery("#cartWarning").show();
2689          stop_loop = display_cart_warning(item);
2690          hasUnavail = true;
2691        } else {
2692          jQuery("#cartItem_" + item_id + " .item-availability").css("color", "inherit");
2693        }
2694      }else{
2695        event_times = getAvailTimes();
2696        if(!event_times[0] || !event_times[1]){
2697          jQuery("#cartWarning").text("Please set the date and time for your event above.");
2698          jQuery("#cartWarning").show()
2699        }
2700      }
2701
2702      var timeslots_html = item.get("timeslots");
2703      if(typeof timeslots_html != "undefined"){
2704        if(timeslots_html.length > 0){
2705          var timeslot_name = getTimeslotName(timeslots_html);
2706          if(timeslots_html.indexOf("<select") >= 0){
2707            setTimeslotSelected(item, timeslot_name);
2708          }else{
2709            setTimePicker(item, timeslot_name);
2710          }
2711        }
2712      }
2713      if(stop_loop){
2714        return false;
2715      }
2716    });
2717
2718    if(gift_cards_only){
2719      jQuery("#cartCalendarTimePickerContainer").hide();
2720    }else{
2721      jQuery("#cartCalendarTimePickerContainer").show();
2722    }
2723
2724    if(hasUnavail && io_checkavail!="off"){
2725      jQuery(".simpleCart_checkout").removeClass("simpleCart_checkout").addClass("simpleCart_checkout_off").trigger("classChange").click(cartShow);
2726    }else if(io_checkavail!="off"){
2727      jQuery(".simpleCart_checkout_off").removeClass("simpleCart_checkout_off").addClass("simpleCart_checkout").trigger("classChange");
2728    }
2729
2730    add_cart_buttons = document.querySelectorAll("[class*=add_cart_]");
2731    if(add_cart_buttons){
2732      for(let i = 0; i < add_cart_buttons.length; ++i){
2733        add_cart_buttons[i].innerHTML = add_cart_buttons[i].innerHTML.replace("fa-cart-arrow-down", "fa-shopping-cart");
2734        add_cart_buttons[i].innerHTML = add_cart_buttons[i].innerHTML.replace("Added to Cart", "Add to Cart");
2735        add_cart_buttons[i].style.filter = "brightness(100%)";
2736        simpleCart.each(function (item, x) {
2737          if( add_cart_buttons[i].className.includes( item.get("rentalid") ) ){
2738            add_cart_buttons[i].innerHTML = add_cart_buttons[i].innerHTML.replace("fa-shopping-cart", "fa-cart-arrow-down");
2739            add_cart_buttons[i].innerHTML = add_cart_buttons[i].innerHTML.replace("Add to Cart", "Added to Cart");
2740            add_cart_buttons[i].style.filter = "brightness(90%)";
2741          }
2742        });
2743      }
2744    }
2745
2746    /* init time-based items */
2747    if(document.location.href.indexOf("io_quoteform") == -1){
2748      let today = new Date();
2749      let io_dd = today.getDate();
2750      let io_mm = today.getMonth() + 1;
2751      let io_yyyy = today.getFullYear();
2752      if(restrictTimes){
2753        jQuery(".item-timeslots .timepicker").each( function() {
2754          if(this.name.includes("end")){
2755            start_timepicker = jQuery("input[name='"+this.name.replace("end", "start")+"']");
2756            start_timepicker = jQuery(start_timepicker[start_timepicker.length - 1]);
2757
2758            if (io_force_blank_timepickers == "on")
2759            {
2760              start_timepicker.val("");
2761              jQuery(this).timepicker({
2762                startTime: "",
2763                endTime:   "",
2764                minTime:   restrictTimeStart,
2765                maxTime:   restrictTimeEnd,
2766                timeFormat: timeFormat,
2767                separator:  ":",
2768                className:  "elementor-widget-text-editor",
2769                step: 15,
2770                disableTouchKeyboard: true
2771              });
2772            }
2773            else
2774            {
2775              // Existing logic if "force blank" is not active
2776              if (start_timepicker.val() != "") {
2777                jQuery(this).timepicker({
2778                  startTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + start_default),
2779                  endTime:   new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + end_default),
2780                  minTime:   start_timepicker.val(),
2781                  maxTime:   restrictTimeEnd,
2782                  timeFormat: timeFormat,
2783                  separator:  ":",
2784                  className:  "elementor-widget-text-editor",
2785                  step: 15,
2786                  disableTouchKeyboard: true
2787                });
2788              } else {
2789                jQuery(this).timepicker({
2790                  startTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + start_default),
2791                  endTime:   new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + end_default),
2792                  minTime:   restrictTimeStart,
2793                  maxTime:   restrictTimeEnd,
2794                  timeFormat: timeFormat,
2795                  separator:  ":",
2796                  className:  "elementor-widget-text-editor",
2797                  step: 15,
2798                  disableTouchKeyboard: true
2799                });
2800              }
2801            }
2802
2803          }
2804          else {
2805            if (io_force_blank_timepickers == "on")
2806            {
2807              start_timepicker.val("");
2808              jQuery(this).timepicker({
2809                startTime: "",
2810                endTime:   "",
2811                minTime:   restrictTimeStart,
2812                maxTime:   restrictTimeEnd,
2813                timeFormat: timeFormat,
2814                separator:  ":",
2815                className:  "elementor-widget-text-editor",
2816                step: 15,
2817                disableTouchKeyboard: true
2818              });
2819            }
2820            else
2821            {
2822              jQuery(this).timepicker({
2823                startTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + start_default),
2824                endTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + end_default),
2825                minTime:restrictTimeStart,
2826                maxTime:restrictTimeEnd,
2827                timeFormat: timeFormat,
2828                separator: ":",
2829                className: "elementor-widget-text-editor",
2830                step: 15,
2831                disableTouchKeyboard: true
2832              });
2833            }
2834          }
2835        });
2836      } else{
2837        jQuery(".item-timeslots .timepicker").each( function() {
2838          if(this.name.includes("end") != -1){
2839            start_timepicker = jQuery("input[name='"+this.name.replace("end", "start")+"']");
2840            start_timepicker = jQuery(start_timepicker[start_timepicker.length - 1]);
2841            if (io_force_blank_timepickers == "on")
2842            {
2843              start_timepicker.val("");
2844              jQuery(this).timepicker({
2845                startTime: "",
2846                endTime:   "",
2847                minTime:   restrictTimeStart,
2848                maxTime:   restrictTimeEnd,
2849                timeFormat: timeFormat,
2850                separator:  ":",
2851                className:  "elementor-widget-text-editor",
2852                step: 15,
2853                disableTouchKeyboard: true
2854              });
2855            }
2856            else
2857            {
2858              if (start_timepicker.val() != "") {
2859                jQuery(this).timepicker({
2860                  startTime: new Date(io_mm + "/" + io_dd + "/" + io_yyyy + " " + start_default),
2861                  endTime: new Date(io_mm + "/" + io_dd + "/" + io_yyyy + " " + end_default),
2862                  minTime: start_timepicker.val(),
2863                  timeFormat: timeFormat,
2864                  separator: ":",
2865                  className: "elementor-widget-text-editor",
2866                  step: 15,
2867                  disableTouchKeyboard: true
2868                });
2869              } else {
2870                jQuery(this).timepicker({
2871                  startTime: new Date(io_mm + "/" + io_dd + "/" + io_yyyy + " " + start_default),
2872                  endTime: new Date(io_mm + "/" + io_dd + "/" + io_yyyy + " " + end_default),
2873                  timeFormat: timeFormat,
2874                  separator: ":",
2875                  className: "elementor-widget-text-editor",
2876                  step: 15,
2877                  disableTouchKeyboard: true
2878                });
2879              }
2880            }
2881          }
2882          else
2883          {
2884            if (io_force_blank_timepickers == "on")
2885            {
2886              start_timepicker.val("");
2887              jQuery(this).timepicker({
2888                startTime: "",
2889                endTime:   "",
2890                minTime:   restrictTimeStart,
2891                maxTime:   restrictTimeEnd,
2892                timeFormat: timeFormat,
2893                separator:  ":",
2894                className:  "elementor-widget-text-editor",
2895                step: 15,
2896                disableTouchKeyboard: true
2897              });
2898            }
2899            else
2900            {
2901              jQuery(this).timepicker({
2902                startTime: new Date(io_mm + "/" + io_dd + "/" + io_yyyy + " " + start_default),
2903                endTime: new Date(io_mm + "/" + io_dd + "/" + io_yyyy + " " + end_default),
2904                timeFormat: timeFormat,
2905                separator: ":",
2906                className: "elementor-widget-text-editor",
2907                step: 15,
2908                disableTouchKeyboard: true
2909              });
2910            }
2911          }
2912        });
2913      }
2914      setUpTimeRestrictions_timeBasedItems();
2915      if(!event_time_set()){
2916        jQuery(".itemRow .item-total").hide();
2917      }else{
2918        jQuery(".itemRow .item-total").show();
2919      }
2920    }
2921  }
2922  function cart_beforeCheckout(data) {
2923    data.startdate = jQuery("input[name=dateStart]").val();
2924    data.enddate = jQuery("input[name=dateEnd]").val();
2925    if(getCookie("guid")){
2926      data.guid = getCookie("guid");
2927    }else{
2928      data.io_custguid = fetchAndSetCookie("guid");
2929    }
2930    if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day"){
2931      let cart_company_timeslot_selected = jQuery(".ioCartCompanyTimeslots option:selected").first().val();
2932      if(cart_company_timeslot_selected){
2933        setCookie("io_company_timeslot_selected", cart_company_timeslot_selected, 14);
2934        cart_company_timeslot_selected = cart_company_timeslot_selected.split("-");
2935        data.starttime = cart_company_timeslot_selected[0];
2936        data.endtime = cart_company_timeslot_selected[1];
2937      }
2938    } else {
2939      data.starttime = jQuery("input[name=timeStart]").val();
2940      data.endtime = jQuery("input[name=timeEnd]").val();
2941    }
2942  }
2943  function cart_beforeAdd(item) {
2944    var main_id = jQuery(".io_product_container .item_rentalid").first().text();
2945    var item_id = item.get("rentalid");
2946
2947    timeslots = item.get("timeslots");
2948    if(timeslots){
2949      if(timeslots.indexOf("<select") !== -1){
2950        timeslot_name_id_start_pos = timeslots.lastIndexOf('name="timeslot_') + 'name="timeslot_'.length;
2951        timeslot_name_id_end_pos = timeslots.indexOf('"', timeslot_name_id_start_pos);
2952        new_timeslots = [timeslots.slice(0, timeslot_name_id_start_pos), item_id, timeslots.slice(timeslot_name_id_end_pos,timeslots.length)]
2953        new_timeslots = new_timeslots.join("")
2954        item.set("timeslots", new_timeslots);
2955      }else if(timeslots.indexOf("<div name=\"io_timepicker_") !== -1){
2956        timeslot_name_id_start_pos = timeslots.lastIndexOf('name="io_timepicker_') + 'name="io_timepicker_'.length;
2957        timeslot_name_id_end_pos = timeslots.indexOf('"', timeslot_name_id_start_pos);
2958        new_timeslots = [timeslots.slice(0, timeslot_name_id_start_pos), item_id, timeslots.slice(timeslot_name_id_end_pos,timeslots.length)]
2959        new_timeslots = new_timeslots.join("")
2960
2961        timeslot_name_id_start_pos = new_timeslots.lastIndexOf('name="start_timeslot_') + 'name="start_timeslot_'.length;
2962        timeslot_name_id_end_pos = new_timeslots.indexOf('"', timeslot_name_id_start_pos);
2963        new_timeslots = [new_timeslots.slice(0, timeslot_name_id_start_pos), item_id, new_timeslots.slice(timeslot_name_id_end_pos,new_timeslots.length)]
2964        new_timeslots = new_timeslots.join("")
2965
2966        timeslot_name_id_start_pos = new_timeslots.lastIndexOf('name="end_timeslot_') + 'name="end_timeslot_'.length;
2967        timeslot_name_id_end_pos = new_timeslots.indexOf('"', timeslot_name_id_start_pos);
2968        new_timeslots = [new_timeslots.slice(0, timeslot_name_id_start_pos), item_id, new_timeslots.slice(timeslot_name_id_end_pos,new_timeslots.length)]
2969        new_timeslots = new_timeslots.join("")
2970
2971        item.set("timeslots", new_timeslots);
2972      }
2973
2974    }
2975    /* Here we are checking if we are on an item page and if we are adding the main item.
2976           If this is not true, we do not want to continue. Bail here. */
2977    if((!main_id || !item_id)){
2978      return true;
2979    }else if (item_id != main_id){
2980      /* we are adding an accessory, We want to forcibly add the main item first. */
2981      /* IO-26864 */
2982      jQuery("#bookNowBtn").click();
2983    }
2984    let required_dropdown_values = jQuery(".io_acc_li").filter(function() {
2985      let required_ele = jQuery(this).find(".item_required");
2986      let required = 0;
2987      if(required_ele[0]){
2988        required = required_ele[0].outerText;
2989      }
2990      let dropdown_ele = jQuery(this).find(".item_accessorydd");
2991      let dropdown = 0;
2992      if(dropdown_ele[0]){
2993        dropdown = dropdown_ele[0].outerText;
2994      }
2995      return (required > 0 && dropdown == 1)
2996    });
2997    var required_selected = true;
2998    required_dropdown_values.each(function() {
2999      required_value_id = jQuery(this).find(".item_rentalid")[0].outerText;
3000      required_value_id = required_value_id.split("_");
3001      required_value_id = required_value_id[required_value_id.length-1];
3002
3003      let selected = jQuery("[id^='io_acc_"+required_value_id+"']").filter(function() {
3004        return this["selected"];
3005      });
3006
3007      //IO-22431 - This wasnt catching if [0] was undefined
3008      if(jQuery(this).find(".io_acc_li_name")[0] != undefined){
3009        required_value_name = jQuery(this).find(".io_acc_li_name")[0].outerText ? jQuery(this).find(".io_acc_li_name")[0].outerText : "";
3010      }
3011      if(selected.length < jQuery(this).find(".item_required")[0].outerText){
3012        if(item_id == main_id){
3013          alert(required_value_name+" is a required field.");
3014        }
3015        required_selected = false;
3016      }
3017
3018      if(!required_selected){
3019        return false;
3020      }
3021      return true;
3022    });
3023    if(!required_selected){
3024      return false;
3025    }
3026
3027    /* IO-14857 */
3028    if(jQuery(".io_product_measurement_price").length > 0){
3029      let units;
3030      if(jQuery(".io_product_infobox .item_qtytype").text() == "Area"){
3031        units = "sq meters"
3032        if(country === "US") units = "sq feet"
3033      }else if(jQuery(".io_product_infobox .item_qtytype").text() == "Perimeter"){
3034        units = "meters"
3035        if(country === "US") units = "feet"
3036      }
3037      item.set("units", units);
3038      item.set("quantity", jQuery(".io_measure_price_raw_measurement").text());
3039    }
3040  }
3041  function cart_afterAdd(item) {
3042    /*loading animation*/
3043    ioCartLoaderActivate();
3044    setTimeout(function(){ if(io_cart_loading_active && io_cart_loading_count === 0){ io_cart_loading_active=false; ioCartShowOverlay(false);} }, 300);
3045
3046    /* Add required Accessories */
3047    let required_accs = jQuery("[id^=io_acc_required_]").filter(function() {
3048      return parseInt(this["outerText"]) > 0 && this.parentElement.style['display'] != 'none';
3049    });
3050    required_accs.each(function(index) {
3051      simpleCart.parse_html_and_add(this, true);
3052    });
3053
3054
3055    let selected_values = jQuery("[id^=io_acc_]").filter(function() {
3056      return this["selected"];
3057    });
3058
3059    selected_values.each(function() {
3060      let info = {};
3061      let rid = jQuery(this).find(".item_rentalid")[0].outerText;
3062      let split_rid = rid.split("_");
3063      if(split_rid.length == 3){
3064        let parent_rid = split_rid[1];
3065        let main_item_rid = split_rid[0];
3066        info["acc_dd_parent_limit"] = jQuery("#io_acc_accessorylimit_"+main_item_rid+"_"+parent_rid)[0].outerText;
3067      }else{
3068        info["acc_dd_parent_limit"] = "0";
3069      }
3070      info["name"]         = jQuery(this).find(".io_acc_li_name")[0].outerText
3071      info["qtyincrement"] = jQuery(this).find(".item_qtyincrement")[0].outerText
3072      info["quantity"]     = jQuery(this).find(".item_required")[0].outerText > 0 ? jQuery(this).find(".item_required")[0].outerText : 1;
3073      info["rentalid"]     = jQuery(this).find(".item_rentalid")[0].outerText
3074      info["linkqty"]      = jQuery(this).find(".item_linkqty")[0].outerText
3075      info["pagename"]     = io_pagename;
3076      if(jQuery(this).find(".io_acc_li_img_thumb")[0]){
3077        info["image"] = jQuery(this).find(".io_acc_li_img_thumb")[0].src
3078      }
3079      let already_added = simpleCart.items().filter((item) => item.get("rentalid").startsWith(split_rid[0]+"_"+split_rid[1]));
3080      if(jQuery(this).find(".item_accessorydd")[0].outerText != 1 &&
3081         (info["acc_dd_parent_limit"] == "0" || already_added.length < info["acc_dd_parent_limit"]) ){
3082        simpleCart.add(info, true);
3083      }
3084    });
3085
3086    checkAvailCartOnly(true);
3087
3088    let last_upsell_call_time = Date.now() - last_upsell_call;
3089    if(in_cart_upsell && last_upsell_call_time > 2000){
3090      let rental_ids = "";
3091
3092      /* Get the last element in the cart. This is the last item added. */
3093      last_added = jQuery("[id^='cartItem_']").last();
3094      if(last_added.length){
3095        last_added_children = last_added.children();
3096        for(let i = 0; i < last_added_children.length; ++i){
3097          if(last_added_children[i].className == "item-rentalid") {
3098            rental_ids += last_added_children[i].innerText + "|";
3099          }
3100        }
3101      }
3102
3103      if(rental_ids.length>0 && jQuery("#cartPopover").attr("class") == "cartIn"){
3104        var times = getAvailTimes();
3105        last_upsell_call = Date.now();
3106        getUpsellsCall(times[0],times[1],times[2],rental_ids,updateCartUpsell);
3107      }
3108      else{
3109        jQuery("#cart-carousel-container").hide();
3110      }
3111    }
3112
3113    if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day"){
3114      filterTimeslotsByDay_itemTimeslots();
3115      simpleCart.update();
3116    }
3117
3118    if (jQuery(".cartInfo.open,.ioCart.open, .ioCart_link.open").length == 0) {
3119      setTimeout(function () {
3120        cartShow();
3121      }, 100);
3122    }
3123
3124    if(simpleCart.items().length==0){
3125      jQuery(".simpleCart_checkout").hide()
3126    }else{
3127      jQuery(".simpleCart_checkout").show();
3128    }
3129
3130    if(simpleCart.items().length > 0){
3131      let headerBookButton = jQuery("a[href$='io_quoteform/']");
3132      headerBookButton.addClass("ioCart_link");
3133      headerBookButton.attr("href", "javascript:;");
3134    }
3135
3136    checkRestrictedDeliveries()
3137
3138    if(jQuery("#ioInfoHeader").length){
3139      header_increment_step();
3140    }
3141  }
3142  function cart_afterQtyChange(){
3143    let last_checkAvail_call_time = Date.now() - last_checkAvail_call;
3144    if(last_checkAvail_call_time > 2000){
3145      /*loading animation*/
3146      ioCartLoaderActivate();
3147      setTimeout(function(){ if(io_cart_loading_active && io_cart_loading_count === 0){ io_cart_loading_active=false; ioCartShowOverlay(false);} }, 300);
3148      last_checkAvail_call = Date.now();
3149      checkAvailCart();
3150      checkAvailCartTimeslots();
3151    }
3152  }
3153  function cart_hideTimepickerWrapper(){
3154    jQuery(".ui-timepicker-wrapper").hide();
3155  }
3156  function cart_beforeRemove() {
3157    last_remove = Date.now();
3158  }
3159  function cart_afterRemove(removed_item){
3160    checkAvailCart();
3161    last_upsell_call_time = Date.now() - last_upsell_call;
3162    if(in_cart_upsell && last_upsell_call_time > 2000){
3163      rental_ids = getAllRentalIDsFromCart();
3164      if(rental_ids.length>0 && jQuery("#cartPopover").attr("class") == "cartIn"){
3165        var times = getAvailTimes();
3166        last_upsell_call = Date.now();
3167        getUpsellsCall(times[0],times[1],times[2],rental_ids,updateCartUpsell);
3168      }
3169      else{
3170        jQuery("#cart-carousel-container").hide();
3171      }
3172    }
3173
3174    /* IO-24060 */
3175    simpleCart.items().forEach(function (item, index) {
3176      let expression = '^' + removed_item.get('rentalid') + '(?:[_:]\\d+)*';
3177      if(item.get("rentalid").match(expression)){
3178        item.remove();
3179      }
3180    });
3181
3182
3183    checkAvailCartTimeslots();
3184    checkRestrictedDeliveries();
3185    if(simpleCart.items().length==0){
3186      jQuery(".simpleCart_checkout").hide()
3187    }else{
3188      jQuery(".simpleCart_checkout").show();
3189    }
3190
3191    if(jQuery("#ioInfoHeader").length && simpleCart.items().length == 0){
3192      jQuery("#io-step-3").removeClass("io-step-active");
3193      jQuery("#io-step-2").addClass("io-step-active");
3194      jQuery("#io-step-2").removeClass("io-step-done")
3195    }
3196  }
3197  function cart_afterLoad(){
3198    var items_removed = false;
3199    simpleCart.items().forEach(function(item){
3200      if(item.get("pagename") != io_pagename){
3201        item.remove()
3202        items_removed = true;
3203      }
3204    })
3205    if(items_removed){
3206      alert("Some items in the cart are from a different location and have been removed.");
3207    }
3208  }
3209  /*</editor-fold>*/
3210
3211  /*<editor-fold defaultstate="collapsed" desc="Date/Time Object/String Conversion Functions">*/
3212  function getFormatteddate(date_obj){
3213    if(dateFormat.substring(0,1)=='d'){
3214      let month = date_obj.getMonth() + 1;
3215      formatteddate = date_obj.getDate()+'/'+month+'/'+date_obj.getFullYear();
3216    }else{
3217      let month = date_obj.getMonth() + 1;
3218      formatteddate = month+'/'+date_obj.getDate()+'/'+date_obj.getFullYear();
3219    }
3220    return formatteddate;
3221  }
3222
3223  function getFormattedtime(date_obj){
3224    var hour24 = false;
3225    var ampm = 'am';
3226    var starttime = jQuery('[name=timeStart]').val();
3227    if(starttime.length>0 && starttime.indexOf('m')==-1) hour24 = true;
3228    if(hour24){ //24 hour return
3229      return date_obj.getHours()+':'+pad(date_obj.getMinutes(),2);
3230    }else{ //12 hour return
3231      var hour = date_obj.getHours();
3232      if(hour==12) ampm='pm';
3233      if(hour==0) hour=12;
3234      if(hour>12){
3235        hour-=12;
3236        ampm='pm';
3237      }
3238      return hour+':'+pad(date_obj.getMinutes(),2)+' '+ampm;
3239    }
3240  }
3241
3242  function buildDateobjectstring(date,dateformat,time){
3243    var ampm = 'am';
3244    var hour24 = false;
3245    if(typeof date == "undefined") return;
3246    if(typeof dateformat == "undefined") return;
3247    var start_arr = date.split('/');
3248    if(dateformat.substring(0,1)=='d'){
3249      date = start_arr[2]+'/'+pad(start_arr[1],2)+'/'+pad(start_arr[0],2);
3250    }else{
3251      date = start_arr[2]+'/'+pad(start_arr[0],2)+'/'+pad(start_arr[1],2);
3252    }
3253    if(time.length>0 && time.indexOf('m')==-1) hour24 = true;
3254    if(hour24){
3255      try{
3256        var time_arr = time.split(':');
3257        var hour = parseInt(time_arr[0]);
3258        var min = pad(time_arr[1], 2);
3259        time = hour + ':' + min + ':00';
3260      }catch(err){
3261        time = "";
3262      }
3263    }else {
3264      try {
3265        time = time.replace('am', "").replace(' ', "");
3266        if (time.indexOf('pm') != -1) ampm = 'pm';
3267        time = time.replace('pm', "").replace(' ', "");
3268        var time_arr = time.split(':');
3269        var hour = parseInt(time_arr[0]);
3270        var min = pad(time_arr[1], 2);
3271        if (ampm == 'pm') {
3272          if (hour < 12) hour += 12;
3273        } else if (ampm == 'am' && hour == 12) {
3274          hour -= 12;
3275        }
3276        hour = pad(hour, 2);
3277        time = hour + ':' + min + ':00';
3278      } catch (err) {
3279        time = "";
3280      }
3281    }
3282    return date+' '+time;
3283  }
3284
3285  function pad(num, size) {
3286    var s = num+"";
3287    while (s.length < size) s = "0" + s;
3288    return s;
3289  }
3290  function convertDateStringtoDateObject(date_str, time_str=null){
3291    if(date_str){
3292      split_date_str = date_str.split("/");
3293      /* Parse start and end time. */
3294      if(time_str){
3295        /* Check and see if we are in 12 hour format, if so convert it to 24 hour format. */
3296        split_time_str = convert12HourTo24Hour(time_str);
3297      }else{
3298        /* If we do not have a time, then default to zeros */
3299        split_time_str = [0, 0];
3300      }
3301      /* Create date object based off our set date format. */
3302      date_obj = buildDateObj(split_date_str, split_time_str);
3303      return date_obj;
3304    }else{
3305      return new Date();
3306    }
3307  }
3308
3309  function buildDateObj(split_date_str, split_time_str){
3310    if (dateFormat == "d/m/yy"){
3311      return new Date(split_date_str[2], (+split_date_str[1] - 1).toString(), split_date_str[0],
3312              split_time_str[0], split_time_str[1]);
3313    }else{
3314      return new Date(split_date_str[2], (+split_date_str[0] - 1).toString(), split_date_str[1],
3315              split_time_str[0], split_time_str[1]);
3316    }
3317  }
3318
3319  function convert12HourTo24Hour(time_str){
3320    /* This function returns an array containing hours and minutes of provided string in 24 hour format. */
3321    /* This is primarily used for creating JS Date objects */
3322    split_time = time_str.split(":");
3323
3324    /* We are in 12 hour format if there is an "m" attached to minutes portion. */
3325    if(split_time[1].toLowerCase().search("m") != -1) {
3326      let separated_minutes = split_time[1].split(" ");
3327      if(separated_minutes.length==1){
3328        split_time[1] = split_time[1].replace("am"," am");
3329        split_time[1] = split_time[1].replace("pm"," pm");
3330        separated_minutes = split_time[1].split(" ");
3331      }
3332      let minutes = separated_minutes[0];
3333      let modifier = separated_minutes[1];
3334      split_time[1] = minutes;
3335
3336      /* First assume that if the hours are 12, then its midnight. */
3337      if(split_time[0] == "12"){
3338        split_time[0] = "00";
3339      }
3340      /* Second if there is a "p" in the modifier, then add twelve to the hours. */
3341      if(typeof modifier != "undefined"){
3342        if(modifier.toLowerCase().search("p") != -1){
3343          split_time[0] = (parseInt(split_time[0], 10) + 12);
3344        }
3345      }
3346    }
3347    return split_time;
3348  }
3349  /*</editor-fold>*/
3350
3351  /*<editor-fold defaultstate="collapsed" desc="Cart Show and Hide">*/
3352  function cartShow() {
3353    jQuery("#cartPopover").show();
3354    jQuery("#cartPopover").removeClass("cartOut");
3355    jQuery("#cartPopover").addClass("cartIn");
3356    jQuery(".cartInfo,.ioCart,.ioCart_link").addClass("open");
3357    if (/Mobi|Android/i.test(navigator.userAgent)) {
3358      document.body.style.overflow = "hidden";
3359    }
3360    /* jQuery(this).one("click", cartHide); */
3361    jQuery(".cartInfo").unbind("click").one("click", function(event){
3362      event.stopPropagation();
3363      event.stopImmediatePropagation();
3364      cartHide();
3365    });
3366    jQuery(".ioCart, .ioCart_link").unbind("click").one("click", function(event){
3367      event.stopPropagation();
3368      event.stopImmediatePropagation();
3369      cartHide();
3370    });
3371    jQuery(".cartIcon").removeClass("fa-shopping-cart").addClass("fa-close");
3372    if(simpleCart.items().length==0){
3373      jQuery(".simpleCart_checkout").hide()
3374    }else{
3375      jQuery(".simpleCart_checkout").show();
3376    }
3377
3378    checkAvailCartOnly();
3379
3380    last_upsell_call_time = Date.now() - last_upsell_call;
3381    if(in_cart_upsell && last_upsell_call_time > 2000){
3382      rental_ids = getAllRentalIDsFromCart();
3383      if(rental_ids.length>0 && jQuery("#cartPopover").attr("class") == "cartIn"){
3384        var times = getAvailTimes();
3385        last_upsell_call = Date.now();
3386        getUpsellsCall(times[0],times[1],times[2],rental_ids,updateCartUpsell);
3387      }
3388      else{
3389        jQuery("#cart-carousel-container").hide();
3390      }
3391    }
3392  }
3393
3394  function cartHide() {
3395    jQuery("#cartPopover").removeClass("cartIn");
3396    jQuery("#cartPopover").addClass("cartOut");
3397    if (/Mobi|Android/i.test(navigator.userAgent)) {
3398      document.body.style.overflow = "auto";
3399    }
3400    /* jQuery("#cartPopover").hide(); */
3401    jQuery(".cartInfo,.ioCart, .ioCart_link").removeClass("open");
3402    /* jQuery(this).one("click", cartShow); */
3403    jQuery(".cartInfo").unbind("click").one("click", function(event){
3404      event.stopPropagation();
3405      event.stopImmediatePropagation();
3406      cartShow();
3407    });
3408    jQuery(".ioCart, .ioCart_link").unbind("click").one("click", function(event){
3409      event.stopPropagation();
3410      event.stopImmediatePropagation();
3411      cartShow();
3412    });
3413    jQuery(".cartIcon").removeClass("fa-close").addClass("fa-shopping-cart");
3414  }
3415  /*
3416    function set_date_cookie(){
3417        if(this.id.indexOf("start_") !== -1){
3418            setCookie("dateStart", this.value, 14);
3419        } else if(this.id.indexOf("end_") !== -1){
3420            setCookie("dateEnd", this.value, 14);
3421        }
3422    }
3423    */
3424  jQuery(document).ready(function () {setTimeout(simpleCart.init, 3);});
3425  /*</editor-fold>*/
3426
3427  /*<editor-fold defaultstate="collapsed" desc="Check Avail All Call">*/
3428  function checkAvailAll(){
3429    checkAvailCart();
3430    checkAvailCartTimeslots();
3431    checkAvailFilter();
3432  }
3433  /*</editor-fold>*/
3434
3435  /*<editor-fold defaultstate="collapsed" desc="Check Avail - Page">*/
3436  /* for items on page not in cart */
3437  function checkAvailFilter() {
3438    let rental_names = "";
3439    let rental_ids = "";
3440    let batch_ids = [];
3441    let cart_rental_names = "";
3442    let cart_rental_ids = "";
3443    let item_id = "";
3444    let main_id = "";
3445    jQuery(".item_encoded").each(function(){
3446      rental_names += this.innerText + "|";
3447    });
3448    jQuery(".io_product_infobox .item_rentalid").each(function(){
3449      rental_ids += this.innerText + "|";
3450      item_id = this.innerText;
3451      main_id = this.innerText;
3452    });
3453    let batch_count = 0;
3454    let batch_index = 0;
3455    // If we have rental id string set, then we don't want to include availability checking for fpw items in header
3456    // IO-31498
3457    if(!rental_ids) {
3458      jQuery(".io_item2_list_inner .item_rentalid, .io_item2_listrent .item_rentalid").each(function () {
3459        /*
3460        if(rental_ids.indexOf(this.innerText+"|") == -1){
3461          rental_ids += this.innerText + "|";
3462        }
3463        */
3464        if (batch_count < 9) {
3465          if (!batch_ids.length) batch_ids.push("")
3466          if (!rid_in_batch(this.innerText + "|", batch_ids).length) {
3467            batch_ids[batch_index] += this.innerText + "|";
3468            batch_count++;
3469          }
3470        } else {
3471          if (!rid_in_batch(this.innerText + "|", batch_ids).length) {
3472            batch_ids[batch_index] += this.innerText + "|";
3473            batch_index++;
3474            batch_count = 0;
3475            batch_ids.push("");
3476          }
3477        }
3478      });
3479    }
3480    simpleCart.each(function (item, x) {
3481      var cart_name = item.get("encoded");
3482      if(cart_name==null){
3483        cart_name = encodeURIComponent(item.get("name"));
3484        cart_name = encodeURIComponent(decodeURIComponent(cart_name).replace(/[\u2032\u2019]+/ig,"'"));
3485      }
3486      let quantity = item.get("quantity");
3487      if(item.get("inputtype") == "Map"){
3488        quantity = 1
3489      }
3490      cart_rental_names += cart_name + "-" + quantity + "|";
3491      var cart_id = item.get("rentalid");
3492      cart_rental_ids += cart_id + "-" + quantity + "|";
3493    });
3494    /* #14494 IO-13779 */
3495    let delivery_methods_arr = [];
3496    var delivery_prices = [];
3497    if(io_delivery_prices){
3498      if(Object.keys(io_delivery_prices["override"]).includes(item_id)){
3499        delivery_prices = io_delivery_prices["override"][item_id]
3500      }else{
3501        if(!item_is_in_overrride_group(main_id)){
3502          delivery_prices = io_delivery_prices["default"]
3503        }
3504      }
3505      for(item in io_delivery_methods){
3506        if(delivery_prices.includes(io_delivery_methods[item]["id"])){
3507          delivery_methods_arr.push(item);
3508        }
3509      }
3510    }
3511
3512    let custom_prices_arr = [];
3513    if(io_custom_prices){
3514      if(Object.keys(io_custom_prices["override"]).includes(item_id.replace(":", '_'))){
3515        custom_prices_arr = io_custom_prices["override"][item_id.replace(":", '_')]
3516      }else{
3517        if(!item_is_in_overrride_group(main_id)){
3518          custom_prices_arr = io_custom_prices["default"]
3519        }
3520      }
3521    }
3522
3523    /* IO-13548 */
3524    if(io_accessory_price == "on"){
3525      let times = getAvailTimes();
3526      let acc_rental_id_str = getAccIDforPrice();
3527      let return_id = 0;
3528      if(acc_rental_id_str != ""){
3529        checkAvailCall(times[0],times[1],times[2],rental_names,acc_rental_id_str,displayAccessoryPrices,0,[],[],return_id,0,null,1,"",1);
3530      }
3531    }
3532
3533    let times = getAvailTimes();
3534    if(rental_names.length>0){
3535      if(use_weekday_weekend && rental_ids && !item_is_in_overrride_group(main_id)){
3536        let return_id = 0;
3537        let week_weekend = "";
3538        if(rental_ids != ""){
3539          return_id = 1;
3540          week_weekend = get_week_weekend_times(times, main_id);
3541          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);
3542          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);
3543        }
3544      }
3545      let return_id = 0;
3546      if(rental_ids != "" || batch_ids.length){
3547        return_id = 1;
3548      }
3549      if(delivery_methods_arr && rental_ids){
3550        delivery_methods_arr.forEach(function(delivery_method){
3551          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);
3552        });
3553      }
3554      if(custom_prices_arr && rental_ids){
3555        custom_prices_arr.forEach(function(custom_price){
3556          let start_date = times[0];
3557          let start_time = times[1];
3558          if(!start_date){
3559            start_date = getFormatteddate(new Date());
3560          }
3561          if(!start_time){
3562            start_time = io_default_start_time;
3563          }
3564          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']);
3565        });
3566      }
3567
3568      if(batch_ids.length){
3569        batch_ids.forEach(function(rids){
3570          return checkAvailCall(times[0],times[1],times[2],"",rids,updatePageAvail,0,cart_rental_ids,cart_rental_names,return_id,1,null,1,"",1);
3571        });
3572      }else{
3573        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);
3574      }
3575    }
3576  }
3577
3578  function item_is_in_overrride_group(item_id){
3579    for(const group_id in io_prices['override_groups']){
3580      for(const search_id in io_prices['override_groups'][group_id]){
3581        if(search_id == item_id){
3582          return true;
3583        }
3584      }
3585    }
3586    return false
3587  }
3588
3589  function get_week_weekend_times(times, rid){
3590    /* Create a copy instead of reference.*/
3591    let temp_times = JSON.parse(JSON.stringify(times));
3592    let start_date = temp_times[0];
3593    if(!start_date){
3594      start_date = getFormatteddate(new Date());
3595      temp_times[0] = start_date;
3596    }
3597    temp_times[1] = io_default_start_time
3598    var newDate1 = convertDateStringtoDateObject(start_date, io_default_start_time);
3599    var newDate2 = convertDateStringtoDateObject(start_date, io_default_end_time);
3600    let time_duration = ((newDate2 - newDate1) / 3600) / 1000;
3601    temp_times[2] = time_duration;
3602    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
3603    let weekday_weekend = {};
3604    weekday_weekend["rid"] = rid;
3605    if(io_weekendDefine == "friday-sunday"){
3606      if(day == 5 || day == 6 || day == 0){
3607        weekday_weekend["weekend"] = JSON.parse(JSON.stringify(temp_times));
3608        temp_times[0] = getNextMonday(temp_times[0]);
3609        weekday_weekend["weekday"] = JSON.parse(JSON.stringify(temp_times));
3610      }else if(day == 1 || day == 2 || day == 3 || day == 4){
3611        weekday_weekend["weekday"] = JSON.parse(JSON.stringify(temp_times));
3612        temp_times[0] = getNextSaturday(temp_times[0]);
3613        weekday_weekend["weekend"] = JSON.parse(JSON.stringify(temp_times));
3614      }
3615    }else if(io_weekendDefine == "saturday-sunday") {
3616      if (day == 6 || day == 0) {
3617        weekday_weekend["weekend"] = JSON.parse(JSON.stringify(temp_times));
3618        temp_times[0] = getNextMonday(temp_times[0]);
3619        weekday_weekend["weekday"] = JSON.parse(JSON.stringify(temp_times));
3620      } else if (day == 1 || day == 2 || day == 3 || day == 4 || day == 5) {
3621        weekday_weekend["weekday"] = JSON.parse(JSON.stringify(temp_times));
3622        temp_times[0] = getNextSaturday(temp_times[0]);
3623        weekday_weekend["weekend"] = JSON.parse(JSON.stringify(temp_times));
3624      }
3625    }else if (io_weekendDefine == "friday-monday"){
3626      if(day == 5 || day == 6 || day == 0 || day == 1){
3627        weekday_weekend["weekend"] = JSON.parse(JSON.stringify(temp_times));
3628        temp_times[0] = getNextTuesday(temp_times[0]);
3629        weekday_weekend["weekday"] = JSON.parse(JSON.stringify(temp_times));
3630      }else if(day == 2 || day == 3 || day == 4){
3631        weekday_weekend["weekday"] = JSON.parse(JSON.stringify(temp_times));
3632        temp_times[0] = getNextSaturday(temp_times[0]);
3633        weekday_weekend["weekend"] = JSON.parse(JSON.stringify(temp_times));
3634      }
3635    }
3636    return weekday_weekend;
3637  }
3638
3639  /*
3640        helper function found here:
3641        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.
3642    */
3643  function getNextMonday(date_str) {
3644    const date_obj = parseDate(date_str, dateFormat);
3645
3646    const nextMonday = new Date(
3647            date_obj.setDate(
3648                    date_obj.getDate() + ((7 - date_obj.getDay() + 1) % 7 || 7),
3649            ),
3650    );
3651
3652    return getFormatteddate(nextMonday);
3653  }
3654
3655    function getNextTuesday(date_str) {
3656      const date_obj = parseDate(date_str, dateFormat);
3657
3658      const nextMonday = new Date(
3659              date_obj.setDate(
3660                      date_obj.getDate() + ((7 - date_obj.getDay() + 2) % 7 || 7),
3661              ),
3662      );
3663
3664      return getFormatteddate(nextMonday);
3665    }
3666
3667  function parseDate(date_str, format) {
3668      var parts = date_str.split(/[/.-]/);
3669      var day, month, year;
3670
3671      if (format === "m/d/yy") {
3672          month = parseInt(parts[0]) - 1;
3673          day = parseInt(parts[1]);
3674          year = parseInt(parts[2]) + (parts[2].length === 2 ? 2000 : 0);
3675      } else if (format === "d/m/yy") {
3676          day = parseInt(parts[0]);
3677          month = parseInt(parts[1]) - 1;
3678          year = parseInt(parts[2]) + (parts[2].length === 2 ? 2000 : 0);
3679      } else if (format === "yy/m/d") {
3680          year = parseInt(parts[0]) + (parts[0].length === 2 ? 2000 : 0);
3681          month = parseInt(parts[1]) - 1;
3682          day = parseInt(parts[2]);
3683      } else {
3684          throw new Error("Unsupported date format");
3685      }
3686
3687      return new Date(year, month, day);
3688  }
3689
3690  /* modified from function above */
3691  function getNextSaturday(date_str) {
3692    const date_obj = parseDate(date_str, dateFormat);
3693
3694    const next_friday = new Date(
3695            date_obj.setDate(
3696                    date_obj.getDate() + ((7 - date_obj.getDay() + 6) % 7 || 7),
3697            ),
3698    );
3699
3700    return getFormatteddate(next_friday);
3701  }
3702
3703  function updatePageAvail(data){
3704    let use_id = data["return_id"]
3705    delete data["return_id"];
3706    if(use_id == 1){
3707      updatePageAvail_itemIDs(data)
3708    }else{
3709      updatePageAvail_itemNames(data);
3710    }
3711  }
3712  function updatePageAvail_weekday(data){
3713    jQuery.each(data, function (rental_id, qty){
3714      if (rental_id == "price") {
3715        var prices = qty;
3716        jQuery.each(prices, function (price_id, amt) {
3717          let cust_price = document.querySelector(".io_product_cust_price_weekday");
3718          if(cust_price==undefined){
3719            var first_price = document.querySelector(".io_product_price_box");
3720            if(first_price != null){
3721              cust_price = first_price.cloneNode(true);
3722              /* clear all classes */
3723              cust_price.className = "";
3724              cust_price.classList.add("io_product_price_box");
3725              cust_price.classList.add("io_product_cust_price_weekday");
3726              cust_price.style.display = "none";
3727              first_price.before(cust_price);
3728            }
3729          }
3730
3731          main_item_id = jQuery(".io_product_infobox .item_rentalid").first().text();
3732          if(main_item_id == price_id && cust_price!=undefined){
3733            if(typeof amt == "string") amt = Number(amt.replace(",",""));
3734            cust_price.querySelector("p:nth-child(1)").innerHTML=simpleCart.toCurrency(amt);
3735            let times = getAvailTimes();
3736            cust_price.querySelector("p:nth-child(2)").innerHTML = io_weekDayText;
3737            if(amt>0){
3738              cust_price.style.display = "grid";
3739            }else{
3740              cust_price.style.display = "none";
3741            }
3742          }
3743        });
3744      }
3745    });
3746  }
3747  function updatePageAvail_delivery_method(data){
3748    var delivery_method = data["delivery_method"]
3749    jQuery.each(data, function (rental_id, qty){
3750      if (rental_id == "price") {
3751        var prices = qty;
3752        jQuery.each(prices, function (price_id, amt) {
3753          let cust_price = document.querySelector(".io_product_cust_price_delivery_method"+io_delivery_methods[delivery_method]["id"]);
3754          let rid = jQuery(".io_product_container .item_rentalid").first().text();
3755          if(cust_price==undefined && !io_delivery_methods[delivery_method]["restricted"].includes(rid)){
3756            var first_price = document.querySelector(".io_product_price_box");
3757            if(first_price != null){
3758              cust_price = first_price.cloneNode(true);
3759              /* clear all classes */
3760              cust_price.className = "";
3761              cust_price.classList.add("io_product_price_box");
3762              cust_price.classList.add("io_product_cust_price_delivery_method"+io_delivery_methods[delivery_method]["id"]);
3763              cust_price.style.display = "none";
3764              first_price.before(cust_price);
3765            }
3766          }
3767
3768          main_item_id = jQuery(".io_product_infobox .item_rentalid").first().text();
3769          if(main_item_id == price_id && cust_price!=undefined){
3770            if(typeof amt == "string") amt = Number(amt.replace(",",""));
3771            cust_price.querySelector("p:nth-child(1)").innerHTML=simpleCart.toCurrency(amt);
3772            let times = getAvailTimes();
3773            cust_price.querySelector("p:nth-child(2)").innerHTML = make_live_price_editable_time(times, delivery_method);
3774            if(amt>0 && event_time_set()){
3775              cust_price.style.display = "grid";
3776            }else{
3777              cust_price.style.display = "none";
3778            }
3779          }
3780        });
3781      }
3782    });
3783  }
3784  function updatePageAvail_custom_price(data, custom_price_name){
3785    let custom_price_class_name = custom_price_name.replace(/[\s:./()!]/g, '_');
3786    jQuery.each(data, function (rental_id, qty){
3787      if (rental_id == "price") {
3788        var prices = qty;
3789        jQuery.each(prices, function (price_id, amt) {
3790          let cust_price = document.querySelector(".io_product_cust_price_"+custom_price_class_name);
3791          let rid = jQuery(".io_product_container .item_rentalid").first().text();
3792          if(cust_price==undefined){
3793            var first_price = document.querySelector(".io_product_price_box");
3794            if(first_price != null){
3795              cust_price = first_price.cloneNode(true);
3796              /* clear all classes */
3797              cust_price.className = "";
3798              cust_price.classList.add("io_product_price_box");
3799              cust_price.classList.add("io_product_cust_price_"+custom_price_class_name);
3800              cust_price.style.display = "none";
3801              first_price.before(cust_price);
3802            }
3803          }
3804
3805          main_item_id = jQuery(".io_product_infobox .item_rentalid").first().text();
3806          if(main_item_id == price_id && cust_price!=undefined){
3807            if(typeof amt == "string") amt = Number(amt.replace(",",""));
3808            cust_price.querySelector("p:nth-child(1)").innerHTML=simpleCart.toCurrency(amt);
3809            cust_price.querySelector("p:nth-child(2)").innerHTML = "for " + custom_price_name;
3810            if(amt>0){
3811              cust_price.style.display = "grid";
3812            }else{
3813              cust_price.style.display = "none";
3814            }
3815          }
3816        });
3817      }
3818    });
3819  }
3820  function updatePageAvail_weekend(data){
3821    jQuery.each(data, function (rental_id, qty){
3822      if (rental_id == "price") {
3823        var prices = qty;
3824        jQuery.each(prices, function (price_id, amt) {
3825          let cust_price = document.querySelector(".io_product_cust_price_weekend");
3826          if(cust_price==undefined){
3827            var first_price = document.querySelector(".io_product_price_box");
3828            if(first_price != null){
3829              cust_price = first_price.cloneNode(true);
3830              /* clear all classes */
3831              cust_price.className = "";
3832              cust_price.classList.add("io_product_price_box");
3833              cust_price.classList.add("io_product_cust_price_weekend");
3834              cust_price.style.display = "none";
3835              first_price.before(cust_price);
3836            }
3837          }
3838
3839          main_item_id = jQuery(".io_product_infobox .item_rentalid").first().text();
3840          if(main_item_id == price_id && cust_price!=undefined){
3841            if(typeof amt == "string") amt = Number(amt.replace(",",""));
3842            cust_price.querySelector("p:nth-child(1)").innerHTML=simpleCart.toCurrency(amt);
3843            let times = getAvailTimes();
3844            cust_price.querySelector("p:nth-child(2)").innerHTML = io_weekEndText;
3845            if(amt>0){
3846              cust_price.style.display = "grid";
3847            }else{
3848              cust_price.style.display = "none";
3849            }
3850          }
3851        });
3852      }
3853    });
3854  }
3855  function updatePageAvail_itemIDs(data){
3856    jQuery.each(data, function (rental_id, qty){
3857      if (rental_id == "price"  && jQuery(".io_product_infobox .item_inputtype").text() != "Map") {
3858        var prices = qty;
3859        jQuery.each(prices, function (price_id, amt) {
3860          let cust_price = document.querySelector(".io_product_cust_price");
3861          if(cust_price==undefined){
3862            var first_price = document.querySelector(".io_product_price_box");
3863            if(first_price != null){
3864              cust_price = first_price.cloneNode(true);
3865              /* clear all classes */
3866              cust_price.className = "";
3867              cust_price.classList.add("io_product_price_box");
3868              cust_price.classList.add("io_product_cust_price");
3869              cust_price.style.display = "none";
3870              first_price.before(cust_price);
3871            }
3872          }
3873          main_item_id = jQuery(".io_product_infobox .item_rentalid").first().text();
3874          if(main_item_id == price_id && cust_price!=undefined){
3875            if(typeof amt == "string") amt = Number(amt.replace(",",""));
3876            cust_price.querySelector("p:nth-child(1)").innerHTML=simpleCart.toCurrency(amt);
3877            let times = getAvailTimes();
3878            cust_price.querySelector("p:nth-child(2)").innerHTML = make_live_price_editable_time(times);
3879            if(amt>0 && (event_time_set() || io_always_display_live_price == "on")){
3880              cust_price.style.display = "grid";
3881            }else{
3882              cust_price.style.display = "none";
3883            }
3884          }
3885        });
3886      }
3887
3888      if(qty<=0 && rental_id != "delivery_method"){
3889        /* cat,all-item,widget */
3890        if(io_checkavail=="warn"){
3891          jQuery(".add_cart_"+rental_id.replace(":", "\\\:")+" .item_add").removeClass("item_add").addClass("item_add_off").trigger("classChange");
3892          jQuery(".unavailable_message_"+rental_id.replace(":", "\\\:")).show();
3893        }
3894        if(io_checkavail=="hide") jQuery(".add_cart_"+rental_id).parent().parent().parent().hide();
3895
3896        /* product page */
3897        if(jQuery(".io_product_container").length && io_checkavail!="off" && jQuery(".io_product_container .item_rentalid").first().text() === rental_id){
3898          jQuery(".add_cart_"+rental_id.replace(":", "\\\:")+" .item_add").first().removeClass("item_add").addClass("item_add_off").trigger("classChange");
3899          jQuery(".io_product_container .unavailable_message").show();
3900        }
3901      }else if(qty>0){
3902        if(io_checkavail=="warn"){
3903          jQuery(".add_cart_"+rental_id.replace(":", "\\\:")+" .item_add_off").removeClass("item_add_off").addClass("item_add").trigger("classChange");
3904          jQuery(".unavailable_message_"+rental_id.replace(":", "\\\:")).hide();
3905        }
3906        if(io_checkavail=="hide") jQuery(".add_cart_"+rental_id).parent().parent().parent().show();
3907
3908        /* product page */
3909        if(jQuery(".io_product_container").length && io_checkavail!="off" && jQuery(".io_product_container .item_rentalid").first().text() === rental_id){
3910          jQuery(".add_cart_"+rental_id.replace(":", "\\\:")+" .item_add_off").removeClass("item_add_off").addClass("item_add").trigger("classChange");
3911          jQuery(".io_product_container .unavailable_message").hide();
3912        }
3913      }
3914    });
3915  }
3916  function updatePageAvail_itemNames(data){
3917    jQuery.each(data, function (rental_name, qty) {
3918      rental_name = rental_name.replace(/[\u2032\u2019]+/ig,"'");
3919      var main_name_temp = "";
3920      if(typeof main_name_orig != "undefined"){
3921        main_name_temp = main_name_orig.replace(/[\u2032\u2019]+/ig,"'");
3922      }
3923      rental_name_esc = rental_name.replace(/'/g, "\\\\'");
3924      if (rental_name == "price") {
3925        var prices = qty;
3926        jQuery.each(prices, function (price_name, amt) {
3927          /* var prices = document.querySelector(".io_product_price_box:not(.io_product_cust_price)"); */
3928          /* if(prices != null) prices.remove(); */
3929          let cust_price = document.querySelector(".io_product_cust_price");
3930          if(cust_price==undefined){
3931            var first_price = document.querySelector(".io_product_price_box");
3932            if(first_price != null){
3933              cust_price = first_price.cloneNode(true);
3934              /* clear all classes */
3935              cust_price.className = "";
3936              cust_price.classList.add("io_product_price_box");
3937              cust_price.classList.add("io_product_cust_price");
3938              cust_price.style.display = "none";
3939              first_price.before(cust_price);
3940            }
3941          }
3942          try{
3943            var main_name = decodeURIComponent(jQuery(".io_product_container .item_encoded").first().html().replace(/[+]/gi, "%20"));
3944          }catch(e){main_name=""}
3945          var i = main_name.lastIndexOf(":");
3946          let acc_name = "";
3947          let rental_name = "";
3948          var i = main_name.lastIndexOf(":");
3949          if(i>0){
3950            rental_name = main_name.substring(0, i);
3951            acc_name = main_name.substring(i+1);
3952          }
3953          if (acc_name.toUpperCase() == price_name.toUpperCase() && cust_price!=undefined){
3954            var rental_id = document.querySelector(".item_rentalid").innerText;
3955            if(rental_id != null){
3956              rid_arr = rental_id.split(":");
3957              /* ignore the main id for this */
3958              rental_id = rid_arr[rid_arr.length-1];
3959              if(jQuery("#io_acc_overrideprice_"+rental_id).first().text()>0){
3960                amt = prices[acc_name];
3961              }else{
3962                let item_price = Number(prices[rental_name].replace(",",""));
3963                amt = Number(amt.replace(",","")) + item_price;
3964                amt = simpleCart.toCurrency(amt, {symbol:""})
3965              }
3966            }
3967            cust_price.querySelector("p:nth-child(1)").innerText="$"+amt;
3968            if(typeof amt == "string") amt = Number(amt.replace(",",""));
3969            let times = getAvailTimes();
3970            cust_price.querySelector("p:nth-child(2)").innerHTML = make_live_price_editable_time(times);
3971            if(amt>0 && (event_time_set() || io_always_display_live_price == "on")){
3972              cust_price.style.display = "grid";
3973            }else{
3974              cust_price.style.display = "none";
3975            }
3976
3977          }else if(!rental_name && !acc_name && cust_price!=undefined){
3978            amt = prices[main_name];
3979            cust_price.querySelector("p:nth-child(1)").innerText="$"+amt;
3980            if(typeof amt == "string") amt = Number(amt.replace(",",""));
3981            let times = getAvailTimes();
3982            cust_price.querySelector("p:nth-child(2)").innerHTML = make_live_price_editable_time(times);
3983            if(amt>0 && (event_time_set() || io_always_display_live_price == "on")){
3984              cust_price.style.display = "grid";
3985            }else{
3986              cust_price.style.display = "none";
3987            }
3988          }
3989
3990        });
3991      }
3992
3993      if(qty<=0){
3994        /* cat,all-item,widget */
3995        if(io_checkavail=="warn"){
3996          jQuery("div[name='maindiv_"+rental_name_esc+"'] .item_add").removeClass("item_add").addClass("item_add_off").trigger("classChange");
3997          jQuery("div[name='maindiv_"+rental_name_esc+"'] .unavailable_message").show();
3998        }
3999        if(io_checkavail=="hide") jQuery("div[name='maindiv_"+rental_name_esc+"']").hide();
4000
4001        /* product page */
4002        if(jQuery(".io_product_container").length && io_checkavail!="off"){
4003          if(main_name_temp==rental_name){
4004            jQuery(".io_product_container .item_add").first().removeClass("item_add").addClass("item_add_off").trigger("classChange");
4005            jQuery(".io_product_container .unavailable_message").show();
4006          }
4007        }
4008      }else if(qty>0){
4009        /* console.log("good"); */
4010        if(io_checkavail=="warn"){
4011          jQuery("div[name='maindiv_"+rental_name_esc+"'] .item_add_off").removeClass("item_add_off").addClass("item_add").trigger("classChange");
4012          jQuery("div[name='maindiv_"+rental_name_esc+"'] .unavailable_message").hide();
4013        }
4014        if(io_checkavail=="hide") jQuery("div[name='maindiv_"+rental_name_esc+"']").show();
4015
4016        /* product page */
4017        if(jQuery(".io_product_container").length && io_checkavail!="off"){
4018          if(main_name_temp==rental_name){
4019            jQuery(".io_product_container .item_add_off").removeClass("item_add_off").addClass("item_add").trigger("classChange");
4020            jQuery(".io_product_container .unavailable_message").hide();
4021          }
4022        }
4023      }
4024    });
4025  }
4026  function displayAccessoryPrices(data) {
4027      if (data.price) {
4028          let acc_prices = data.price;
4029          for (const [key, value] of Object.entries(acc_prices)) {
4030              let new_key = key;
4031              if ((key.match(/_/g) || []).length > 1) {
4032                  let split_key = key.split("_");
4033                  let second_to_last = split_key[split_key.length - 2];
4034                  let last = split_key[split_key.length - 1];
4035                  new_key = second_to_last + "_" + last;
4036              }
4037              if (io_hide_zero == 1 && value > 0) {
4038                  let id_string = "#io_acc_desc_" + new_key;
4039                  let formatted_price = simpleCart.toCurrency(value);
4040                  if (jQuery("#io_acc_" + new_key + " .io_acc_price").length > 0) {
4041                      jQuery("#io_acc_" + new_key + " .io_acc_price").html(formatted_price);
4042                  } else {
4043                      let price_display = '<span class="io_acc_price"> ' + formatted_price + ' </span>';
4044                      jQuery(id_string).after(price_display);
4045                  }
4046              } else if (io_hide_zero == 0) {
4047                  let id_string = "#io_acc_desc_" + new_key;
4048                  let formatted_price = simpleCart.toCurrency(value);
4049                  if (jQuery("#io_acc_" + new_key + " .io_acc_price").length > 0) {
4050                      jQuery("#io_acc_" + new_key + " .io_acc_price").html(formatted_price);
4051                  } else {
4052                      let price_display = '<span class="io_acc_price"> ' + formatted_price + ' </span>';
4053                      jQuery(id_string).after(price_display);
4054                  }
4055              }
4056          }
4057      }
4058  }
4059  function make_live_price_editable_time(times, delivery_method=null) {
4060    if(!delivery_method) delivery_method = getCookie("io_delivery_method");
4061    let ele_text = "";
4062    if(times[0]) ele_text = "on " + times[0] + " ";
4063    if(times[2] === 0) times[2] = 1;
4064    if(io_hidetimes!="on" && !isNaN(times[2])) ele_text += "for "+times[2]+" hours ";
4065    if(delivery_method) ele_text += "for " + delivery_method + ". ";
4066    ele_text += '<span style="cursor:pointer; color:blue; text-decoration:underline;" onclick=checkAvailDateClick()>edit</span>';
4067    return ele_text;
4068  }
4069  function checkAvailDateClick(){
4070    cartShow();
4071    /* expand the date picker */
4072    setTimeout(calSetDateRange,100);
4073  }
4074  function checkAvailPageOnly(){
4075    checkAvailFilter();
4076    if(addressCookiesSet() && io_distance_charge){
4077      runDeliveryCall(true);
4078    }
4079  }
4080  function getAccIDforPrice(){
4081    let accessory_arr = jQuery(".io_acc_li").toArray();
4082    let acc_rental_id_str = "";
4083    for(let current_accessory = 0; current_accessory < accessory_arr.length; current_accessory++){
4084      let required_tag = jQuery(accessory_arr[current_accessory]).find(".item_required");
4085      if(required_tag.length > 0){
4086        if(required_tag[0].innerText == 0){
4087          acc_rental_id_str += jQuery(accessory_arr[current_accessory]).find(".item_rentalid")[0].innerText +"|";
4088        }
4089      }
4090    }
4091    return acc_rental_id_str;
4092  }
4093  function getUpsellIDforPrice(){
4094    let upsell_arr = jQuery(".page-carousel-rid").toArray();
4095    let upsell_rental_id_str = "";
4096    for(let current_upsell = 0; current_upsell < upsell_arr.length; current_upsell++){
4097      upsell_rental_id_str +=upsell_arr[current_upsell].innerText+"|";
4098    }
4099    return upsell_rental_id_str;
4100  }
4101  function displayUpsellPrices(data){
4102    if(data.price){
4103      let upsell_prices = data.price;
4104      for (const [key, value] of Object.entries(upsell_prices)) {
4105        if(io_hide_zero == 1 && value > 0){
4106          let id_string = "#rid"+ key;
4107          let formatted_price = simpleCart.toCurrency(value);
4108          let price_display ='<span class="page-carousel-price"> '+formatted_price+' </span>';
4109          jQuery(id_string).after(price_display);
4110        }else if(io_hide_zero == 0){
4111          let id_string = "#rid"+ key;
4112          let formatted_price = simpleCart.toCurrency(value);
4113          let price_display ='<span class="page-carousel-price"> '+formatted_price+' </span>';
4114          jQuery(id_string).after(price_display);
4115        }
4116      }
4117      pageFlickityRefresh();
4118    }
4119  }
4120  /*</editor-fold>*/
4121
4122  /*<editor-fold defaultstate="collapsed" desc="Check Avail - Cart">*/
4123  function checkAvailCartOnly(skip_timer=false){
4124    checkAvailCart();
4125    checkAvailCartTimeslots();
4126  }
4127
4128  function checkAvailCartTimeslots(){
4129    let rental_names = "";
4130    let rental_ids = "";
4131    let cart_rental_names = "";
4132    let cart_rental_ids = "";
4133    let times = getAvailTimes();
4134    let start_date = times[0];
4135    let event_duration = times[2];
4136    let end_date = start_date;
4137    var event_start_time = getCookie("io_timeStart");
4138    simpleCart.each(function (item, x) {
4139      var timeslots_html = item.get('timeslots');
4140      if(typeof timeslots_html == "undefined") return;
4141      if(timeslots_html.length == 0) return;
4142      var cart_name = item.get("encoded");
4143      if(cart_name==null) {
4144        cart_name = encodeURIComponent(item.get("name"));
4145        cart_name = encodeURIComponent(decodeURIComponent(cart_name).replace(/[\u2032\u2019]+/ig,"'"));
4146      }
4147      rental_id = item.get("rentalid");
4148
4149      var timeslot_name = getTimeslotName(timeslots_html);
4150      var timeslot_sel_range = jQuery(".item-timeslots [name=\""+timeslot_name+"\"] option:selected").val();
4151      if(typeof timeslot_sel_range != "undefined"){
4152        /* timeslots */
4153        setTimeslotSelected(item, timeslot_name);
4154      }else{
4155        /*  timepickers */
4156        setTimePicker(item, timeslot_name);
4157        let start_timepicker = document.getElementsByName(timeslot_name.replace("io_timepicker_", "start_timeslot_"));
4158        let end_timepicker = document.getElementsByName(timeslot_name.replace("io_timepicker_", "end_timeslot_"));
4159        timeslot_sel_range = start_timepicker[start_timepicker.length-1].value;
4160        timeslot_sel_range += " - " + end_timepicker[end_timepicker.length-1].value;
4161      }
4162
4163      var timeslot_sel_arr = "";
4164      if(typeof timeslot_sel_range != "undefined"){
4165        var [start_time, end_time] = break_timeslot_sel_range(timeslot_sel_range);
4166        if(start_time && end_time){
4167          let newDate1 = convertDateStringtoDateObject(start_date, start_time);
4168          let newDate2 = convertDateStringtoDateObject(end_date, end_time);
4169          let time_duration = ((newDate2 - newDate1) / 3600) / 1000;
4170          let quantity = item.get("quantity");
4171          if(item.get("inputtype") == "Map"){
4172            quantity = 1
4173          }
4174          rental_names += cart_name + "-" + quantity+"|";
4175          rental_ids += rental_id+"-"+quantity+"-"+start_time+"-"+time_duration+"|";
4176          cart_rental_names = rental_names;
4177          cart_rental_ids = rental_ids;
4178        }
4179      }
4180    });
4181    if(rental_ids || rental_names){
4182      checkAvailCall(start_date,event_start_time,event_duration,rental_names,rental_ids,updateCartAvail,1,cart_rental_ids,cart_rental_names,1);
4183    }
4184    return true;
4185  }
4186
4187  function checkAvailCart(){
4188    let rental_names = "";
4189    let rental_ids = "";
4190    let cart_rental_names = "";
4191    let cart_rental_ids = "";
4192    simpleCart.each(function (item, x) {
4193      if(typeof item.get('timeslots') != "undefined"){
4194        if(item.get('timeslots').length > 0){
4195          return;
4196        }
4197      }
4198      var cart_name = item.get("encoded");
4199      if(cart_name==null){
4200        cart_name = encodeURIComponent(item.get("name"));
4201        cart_name = encodeURIComponent(decodeURIComponent(cart_name).replace(/[\u2032\u2019]+/ig,"'"));
4202      }
4203      let quantity = item.get("quantity");
4204      if(item.get("inputtype") == "Map"){
4205        quantity = 1
4206      }
4207      rental_names += cart_name + "-" + quantity + "|";
4208      cart_rental_names += cart_name + "-" + quantity + "|";
4209      var cart_id = item.get("rentalid");
4210      rental_ids += cart_id + "-" + quantity + "|";
4211      cart_rental_ids += cart_id + "-" + quantity + "|";
4212    });
4213    var times = getAvailTimes();
4214    let return_id = 0;
4215    if(rental_ids != ""){
4216      return_id = 1;
4217    }
4218    if(rental_ids != "" || rental_names != ""){
4219      return checkAvailCall(times[0],times[1],times[2],rental_names,rental_ids,updateCartAvail,1,cart_rental_ids,cart_rental_names,return_id);
4220    }
4221    return true;
4222  }
4223  function updateCartAvail(data){
4224    let use_id = data["return_id"]
4225    delete data["return_id"];
4226    if(use_id == 1){
4227      updateCartAvail_itemIDs(data)
4228    }else{
4229      updateCartAvail_itemNames(data);
4230    }
4231    console.log("cart update");
4232    if(addressCookiesSet() && io_distance_charge){
4233      runDeliveryCall(true);
4234    }
4235    /* simpleCart.trigger("update"); */
4236    simpleCart.update();
4237    /* jQuery("#avail").html(output); */
4238  }
4239
4240  function updateCartAvail_itemIDs(data){
4241    jQuery.each(data, function (rental_id, qty){
4242      simpleCart.each(function (item, x) {
4243        if(rental_id == item.get("rentalid")){
4244          if(io_hideQuantityAvail == "off"){
4245            if(qty>=9999 || item.get("inputtype") == "Map" || (item.get("giftcardvalue") && item.get("giftcardvalue").trim())){
4246              item.set("availability", "available");
4247            }else{
4248              item.set("availability", qty + " available");
4249            }
4250          }else if(io_hideQuantityAvail == "on"){
4251            if(qty<=0 || qty < item.get("quantity")){
4252              item.set("availability", "not available");
4253            }else{
4254              item.set("availability", "available");
4255            }
4256          }
4257          var vendorid = item.get("vendorid");
4258          if(vendorid && vendorid.trim()){
4259            item.set("availability", "availability must be verified");
4260          }
4261        }
4262        if (rental_id == "price") {
4263          var prices = qty;
4264          jQuery.each(prices, function (price_name, amt) {
4265            if(price_name == item.get("rentalid")){
4266              if (typeof amt == "string" || amt instanceof String){
4267                if(amt != "TBD"){
4268                  if(typeof amt == "string") amt = Number(amt.replace(",",""));
4269                }
4270              }
4271              item.set("price", amt);
4272            }
4273          });
4274        }
4275      });
4276    });
4277  }
4278
4279  function updateCartAvail_itemNames(data){
4280    jQuery.each(data, function (rental_name, qty) {
4281      rental_name = rental_name.replace(/[\u2032\u2019]+/ig,"'");
4282      simpleCart.each(function (item, x) {
4283        try{
4284          var cart_name = decodeURIComponent(item.get("encoded").replace(/[+]/gi, "%20"));
4285        }catch(e){cart_name=null}
4286        if(cart_name==null) cart_name = item.get("name")
4287        cart_name = cart_name.replace(/[\u2032\u2019]+/ig,"'");
4288        var i = cart_name.lastIndexOf(":");
4289        if(i>0 && cart_name.toUpperCase() != rental_name.toUpperCase() && rental_name!="price"){cart_name = cart_name.substring(i+1)}
4290        if (cart_name.toUpperCase() == rental_name.toUpperCase()) {
4291          if(qty>9999){
4292            item.set("availability", "available");
4293          }else{
4294            item.set("availability", qty + " available");
4295          }
4296        }
4297        if (rental_name == "price") {
4298          var prices = qty;
4299          jQuery.each(prices, function (price_name, amt) {
4300            price_name = price_name.replace(/[\u2032\u2019]+/ig,"'");
4301            let acc_name = "";
4302            let rental_name = "";
4303            var i = cart_name.lastIndexOf(":");
4304            if(i>0){
4305              rental_name = cart_name.substring(0, i);
4306              acc_name = cart_name.substring(i+1);
4307            }
4308            if (acc_name === price_name) {
4309              var rental_id = item.get("rentalid");
4310              if(rental_id != null){
4311                rid_arr = rental_id.split(":");
4312                /* ignore the main id for this */
4313                rental_id = rid_arr[rid_arr.length-1];
4314                if(jQuery("#io_acc_overrideprice_"+rental_id).first().text()>0){
4315                  amt = prices[acc_name];
4316                }else{
4317                  let item_price = Number(prices[rental_name].replace(",",""));
4318                  amt = Number(amt.replace(",","")) + item_price;
4319                  item.set("price", amt);
4320                  return;
4321                }
4322              }
4323              if(amt==null){
4324                amt = "0";
4325              }
4326              /* returned price is per unit */
4327              if(typeof amt == "string") amt = Number(amt.replace(",",""));
4328              item.set("price", amt);
4329            }else if(!rental_name && !acc_name){
4330              amt = Number(prices[cart_name].replace(",",""));
4331              item.set("price", amt);
4332            }
4333          });
4334        }
4335      });
4336    });
4337  }
4338  /*</editor-fold>*/
4339
4340  /*<editor-fold defaultstate="collapsed" desc="Upsell Carousels">*/
4341  function updateCartUpsell(data){
4342    let cart_carousel = jQuery(".cart-carousel");
4343    viewport = jQuery(".cart-carousel .flickity-viewport");
4344    if(viewport.length > 0){
4345      cart_carousel.flickity("destroy");
4346    }
4347    cart_carousel.empty();
4348    data.forEach(function(upsell){
4349      cell = createCartCarouselCell(upsell["image"], upsell["name"], upsell["page"]);
4350      cart_carousel.append(cell);
4351    });
4352    makeCarousel(cart_carousel);
4353    jQuery("#cart-carousel-container").show();
4354    setTimeout(cartFlickityRefresh, 500);
4355  }
4356
4357  function cartFlickityRefresh(){
4358    jQuery(".cart-carousel").flickity("resize");
4359  }
4360
4361  //IO-14031
4362  function isMobile()
4363  {
4364  // Modern detection
4365    if (navigator.userAgentData && navigator.userAgentData.mobile !== undefined) {
4366      return navigator.userAgentData.mobile;
4367    }
4368
4369  // Fallback for older browsers
4370    return /Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent) ||
4371           ('ontouchstart' in window && navigator.maxTouchPoints > 0);
4372  }
4373
4374  function makeCarousel(cart_carousel)
4375  {
4376    cart_carousel.flickity({
4377      wrapAround: true,
4378      draggable: isMobile(),
4379      cellAlign: 'left',
4380      //autoPlay: 3000,
4381      groupCells: true,
4382      resize: true
4383    });
4384    cart_carousel_set = true;
4385  }
4386
4387  function createCartCarouselCell(image, name, page){
4388    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>';
4389    return cell;
4390  }
4391  /*</editor-fold>*/
4392
4393  /*<editor-fold defaultstate="collapsed" desc="Ajax Calls">*/
4394  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) {
4395        /*
4396        IO-21459 If we have no duration set (event not set in cart), and we are doing the call for the page live
4397        price, and we have the setting on where we want to display this price even if the event date is not set:
4398
4399        We set the time_duration to 1 hour. This defaults the start date to January 1, 1970 with duration of
4400        1 hour in the lead meaning it will be available and we have the one hour price.
4401        */
4402    if((isNaN(time_duration) || time_duration===0) && price_only==1 && io_always_display_live_price == "on"){
4403      time_duration = 1;
4404      if(!start_date){
4405        start_date = getFormatteddate(new Date());
4406      }
4407      if(!start_time){
4408        start_time = getFormattedtime(new Date());
4409      }
4410    }else if((isNaN(time_duration) || time_duration===0) && price_only==0 && io_hidetimes === "on"){
4411      /* 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. */
4412      time_duration = 1;
4413    }else if(isNaN(time_duration) || time_duration===0){
4414      return;
4415    }
4416    url = "https://rental.software/quotes/check_availability_v2.php?callback=?";
4417    if(window.location.href.indexOf("localhost") > -1){
4418      //url = "http://localhost/bugs/quotes/check_availability_v2.php?callback=?";
4419      url = "http://localhost/io/bugs/quotes/check_availability_v2.php?callback=?";
4420      //url = "http://localhost/jbug/trunk/quotes/check_availability_v2.php?callback=?";
4421    }
4422    if(!delivery_method) delivery_method = getCookie("io_delivery_method");
4423    let address_data = {
4424      "address": getCookie("io_address"),
4425      "state": getCookie("io_state"),
4426      "city": getCookie("io_city"),
4427      "zip": getCookie("io_zip")
4428    };
4429    if(!ioHasMarketingConsent()){
4430      address_data = {"address":"", "state":"", "city":"", "zip":""};
4431    }
4432    url +=
4433            "&name=" + encodeURIComponent("Brincabrincas El Pariente") +
4434            "&startdate=" + start_date +
4435            "&starttime=" + start_time +
4436            "&duration=" + time_duration +
4437            "&street=" + encodeURIComponent(address_data["address"]) +
4438            "&city=" + encodeURIComponent(address_data["city"]) +
4439            "&state=" + encodeURIComponent(address_data["state"]) +
4440            "&zip=" + encodeURIComponent(address_data["zip"]) +
4441            "&single_cart=" + singleCart +
4442            "&usecushion=1" +
4443            "&include_price=1" +
4444            "&showlocations=0" +
4445            "&rental_names=" + rental_names +
4446            "&rental_ids=" + rental_ids +
4447            "&cart_rental_names=" + cart_rental_names +
4448            "&cart_rental_ids=" + cart_rental_ids +
4449            "&return_id=" + return_id +
4450            "&delivery_method=" + delivery_method +
4451            "&temp=" + temp +
4452            "&skip_hidden_lead="+ skip_hidden_lead;
4453      if (custom_price_name)
4454      {
4455          ioCartLoaderIncrement();
4456          jQuery.getJSON(url, function (data)
4457          {
4458              try
4459              {
4460                  returnFunc(data, custom_price_name);
4461              }
4462              finally
4463              {
4464                  ioCartLoaderDecrement();
4465              }
4466          });
4467      }
4468      else
4469      {
4470          ioCartLoaderIncrement();
4471          jQuery.getJSON(url, function (data)
4472          {
4473              try
4474              {
4475                  returnFunc(data);
4476              }
4477              finally
4478              {
4479                  ioCartLoaderDecrement();
4480              }
4481          });
4482      }
4483  }
4484
4485  function getUpsellsCall(start_date,start_time,time_duration,rental_ids,returnFunc) {
4486    if(rental_ids.replace(/[|]/g,"").length==0){return;}
4487    url = "https://rental.software/quotes/in_cart_upsell.php?callback=?";
4488    if(window.location.href.indexOf("localhost") > -1){
4489      //url = "http://localhost/bugs/quotes/in_cart_upsell.php?callback=?"
4490      url = "http://localhost/io/bugs/quotes/in_cart_upsell.php?callback=?"
4491    }
4492    url +=
4493            "&name=" + encodeURIComponent("Brincabrincas El Pariente") +
4494            "&startdate=" + start_date +
4495            "&starttime=" + start_time +
4496            "&duration=" + time_duration +
4497            "&usecushion=1" +
4498            "&include_price=1" +
4499            "&showlocations=0" +
4500            "&rental_ids=" + rental_ids;
4501    //IO-25557
4502    if(window.location.href.indexOf("dev.rental.software") > -1)//if it is a dev site, we need to send
4503    {
4504      let pattern = /(https:\/\/dev\.rental\.software\/[^\/]+\/)/;
4505      let matches = window.location.href.match(pattern);
4506      matches && matches.length > 0 ? url += "&site=" + matches[0]:0;
4507    }
4508    else
4509    {
4510      url += "&site=" + window.location.host;
4511    }
4512    jQuery.getJSON(url, returnFunc);
4513  }
4514  /*</editor-fold>*/
4515
4516  /*<editor-fold defaultstate="collapsed" desc="Customer Geolocation Functions">*/
4517  function setLocationInLocalStorage(city)
4518  {
4519      try
4520      {
4521          const location_data =
4522          {
4523              city: city,
4524              timestamp: Date.now()
4525          };
4526          localStorage.setItem(storage_key, JSON.stringify(location_data));
4527          return true;
4528      }
4529      catch (e)
4530      {
4531          console.warn('Failed to save location to localStorage:', e);
4532          return false;
4533      }
4534  }
4535
4536  function getLocationFromLocalStorage()
4537  {
4538      try
4539      {
4540          const location_data = localStorage.getItem(storage_key);
4541          if (location_data)
4542          {
4543              return JSON.parse(location_data);
4544          }
4545
4546      }
4547      catch (e)
4548      {
4549          console.warn('Failed to retrieve location from localStorage:', e);
4550      }
4551      return null;
4552  }
4553
4554  function displayLocation(city)
4555  {
4556      const location_element = jQuery('.io_geo_city');
4557      const container_element = jQuery('#io_customer_geolocation');
4558
4559      if (location_element.length && container_element.length)
4560      {
4561          location_element.text(`${city}`);
4562          container_element.show();
4563          return true;
4564      }
4565      return false;
4566  }
4567
4568  function getCityFromIO(returnFunc)
4569  {
4570    var url = "https://rental.software/include/geolocation_handler.php?callback=?";
4571    if(window.location.href.indexOf("localhost") > -1)
4572    {
4573      url = "http://localhost//features//include/geolocation_handler.php?callback=?";
4574    }
4575    url +=
4576        "&name=" + encodeURIComponent("Brincabrincas El Pariente") +
4577        "&ip=" + encodeURIComponent(io_customer_ip);
4578
4579    jQuery.getJSON(url, returnFunc);
4580  }
4581
4582  function initializeGeolocation()
4583  {
4584      try
4585      {
4586      // Check local storage first
4587          const cached_location = getLocationFromLocalStorage();
4588          if (cached_location && cached_location.city)
4589          {
4590              if (displayLocation(cached_location.city))
4591              {
4592                  return;
4593              }
4594          }
4595
4596          // If no cached location, call the handler to get location
4597          getCityFromIO(function(location_data)
4598          {
4599              if (location_data && location_data.city && !location_data.error)
4600              {
4601                  // Display and store the location
4602                  if (displayLocation(location_data.city))
4603                  {
4604                      setLocationInLocalStorage(location_data.city);
4605                  }
4606              }
4607              else
4608              {
4609                  console.warn('Failed to get location:', location_data ? location_data.error : 'Unknown error');
4610              }
4611          });
4612      } 
4613      catch (error)
4614      {
4615          console.error('Geolocation initialization failed:', error);
4616      }
4617  }
4618  /*</editor-fold>*/
4619
4620  /*<editor-fold defaultstate="collapsed" desc="Loading Animation Helpers">*/
4621
4622  /**
4623  * Toggles the visibility of the cart loading overlay.
4624  *
4625  * @param {boolean} show - A boolean value to determine whether to show or hide the overlay.
4626  *                         If true, the overlay becomes visible; if false, it is hidden.
4627  * @return {void} This function does not return a value.
4628  */
4629  function ioCartShowOverlay(show)
4630  {
4631      try
4632      {
4633          var overlay = document.getElementById('ioCartLoadingOverlay');
4634          if (!overlay) return;
4635          if (show)
4636          {
4637              overlay.style.display = 'flex';
4638              overlay.setAttribute('aria-hidden', 'false');
4639          }
4640          else
4641          {
4642              overlay.style.display = 'none';
4643              overlay.setAttribute('aria-hidden', 'true');
4644          }
4645      }
4646      catch (e)
4647      {}
4648  }
4649
4650  /**
4651   * Activates the cart loader by setting the loading state to active, initializing the loading count,
4652   * and displaying the overlay. Includes a fallback to deactivate the loader if no response is received
4653   * within a specified timeout period.
4654   *
4655   * @return {void} This method does not return a value.
4656   */
4657  function ioCartLoaderActivate()
4658  {
4659      io_cart_loading_active = true;
4660      io_cart_loading_count = 0;
4661      ioCartShowOverlay(true);
4662
4663      //fallback in case the availability call doesn't come back
4664      if (io_cart_loading_fallback_timer) clearTimeout(io_cart_loading_fallback_timer);
4665      io_cart_loading_fallback_timer = setTimeout(function () {
4666          if (io_cart_loading_active) {
4667              io_cart_loading_active = false;
4668              io_cart_loading_count = 0;
4669              ioCartShowOverlay(false);
4670          }
4671      }, 15000);
4672  }
4673
4674  /**
4675   * Increments the count of active cart loading operations and ensures the cart overlay is displayed.
4676   *
4677   * This method increases the `io_cart_loading_count` if the `io_cart_loading_active` flag is set to true.
4678   * It also calls the `ioCartShowOverlay` function with a true value to show the overlay.
4679   *
4680   * @return {void} This function does not return any value.
4681   */
4682  function ioCartLoaderIncrement()
4683  {
4684      if (io_cart_loading_active)
4685      {
4686          io_cart_loading_count++;
4687          ioCartShowOverlay(true);
4688      }
4689  }
4690
4691  /**
4692   * Decrements the `io_cart_loading_count` if `io_cart_loading_active` is true.
4693   * If the count reaches zero, it deactivates the loader, removes the overlay,
4694   * and clears the fallback timer
4695   */
4696  function ioCartLoaderDecrement()
4697  {
4698      if (io_cart_loading_active)
4699      {
4700          io_cart_loading_count = Math.max(0, io_cart_loading_count - 1);
4701
4702          if (io_cart_loading_count === 0)
4703          {
4704              io_cart_loading_active = false;
4705              ioCartShowOverlay(false);
4706
4707              if (io_cart_loading_fallback_timer)
4708              {
4709                  clearTimeout(io_cart_loading_fallback_timer);
4710                  io_cart_loading_fallback_timer = null;
4711              }
4712          }
4713      }
4714  }
4715
4716  /*</editor-fold>*/</script>
4716 <div class="address_entry elementor-widget-text-editor"><table><tr><td> <label for="address" id="io_cdl_address_label" style="display: table-cell"> Street Address </label></td><td> <input id="io_cd_address" style="display: table-cell" name="address" type="text"></input></td></tr><tr><td> <label for="city" id="io_cdl_city_label" style="display: table-cell"> City </label></td><td> <input id="io_cd_city" style="display: table-cell" name="city" type="text"></input></td></tr><tr id="us-state-select"><td> <label for="state" id="io_cdl_state_label" style="display: table-cell"> State </label></td><td> <select name="state" id="io_cd_state" style="display: table-cell" class="input-mini"><option value=""></option><option value="AK">AK</option><option value="AL">AL</option><option value="AR">AR</option><option value="AZ">AZ</option><option value="CA">CA</option><option value="CO">CO</option><option value="CT">CT</option><option value="DC">DC</option><option value="DE">DE</option><option value="FL">FL</option><option value="GA">GA</option><option value="HI">HI</option><option value="IA">IA</option><option value="ID">ID</option><option value="IL">IL</option><option value="IN">IN</option><option value="KS">KS</option><option value="KY">KY</option><option value="LA">LA</option><option value="MA">MA</option><option value="MD">MD</option><option value="ME">ME</option><option value="MI">MI</option><option value="MN">MN</option><option value="MO">MO</option><option value="MS">MS</option><option value="MT">MT</option><option value="NC">NC</option><option value="ND">ND</option><option value="NE">NE</option><option value="NH">NH</option><option value="NJ">NJ</option><option value="NM">NM</option><option value="NV">NV</option><option value="NY">NY</option><option value="OH">OH</option><option value="OK">OK</option><option value="OR">OR</option><option value="PA">PA</option><option value="RI">RI</option><option value="SC">SC</option><option value="SD">SD</option><option value="TN">TN</option><option value="TX">TX</option><option value="UT">UT</option><option value="VA">VA</option><option value="VT">VT</option><option value="WA">WA</option><option value="WI">WI</option><option value="WV">WV</option><option value="WY">WY</option> </select></td></tr><tr><td> <label for="zip" id="io_cdl_zip_label" style="display: table-cell"> Zip Code </label></td><td> <input id="io_cd_zip" style="display: table-cell" name="zip" type="text"></input></td></tr></table> <a class="elementor-button elementor-size-sm io_button"
4717 id="address_entry_submit"
4718 href="javascript:;"> Save Address </a><div id="delivery_charge_info_box"><hr><h3 id="info_box_header"></h3><p id="info_box_information"></p> <a href="javascript:;" onClick="closeAddressEntry()" class="delivery_info_continue elementor-button elementor-size-sm io_button">Continue Shopping</a></div></div> 
4718<script>/* for checking delivery */
4719  function runDeliveryCall(cart_only = false){
4720    let address_fields = jQuery("[id^='io_cd_']");
4721    let address_data = {
4722      "address": getCookie("io_address"),
4723      "state": getCookie("io_state"),
4724      "city": getCookie("io_city"),
4725      "zip": getCookie("io_zip")
4726    };
4727
4728    let times = getAvailTimes();
4729
4730    let start_date = times[0];
4731    let end_date = start_date;
4732    let start_time = times[1];
4733    let duration = times[2];
4734
4735    let rental_ids = "";
4736    simpleCart.each(function (item, x) {
4737      if(typeof item.get('timeslots') != "undefined"){
4738        if(item.get('timeslots').length > 0){
4739        var timeslots_html = item.get('timeslots');
4740        var rental_id = item.get('rentalid');
4741        if(typeof timeslots_html == "undefined") return;
4742        if(timeslots_html.length == 0) return;
4743
4744        var timeslot_name = getTimeslotName(timeslots_html);
4745        var timeslot_sel_range = jQuery(".item-timeslots [name=\""+timeslot_name+"\"] option:selected").val();
4746        if(typeof timeslot_sel_range != "undefined"){
4747          /* timeslots */
4748          setTimeslotSelected(item, timeslot_name);
4749        }else{
4750          /*  timepickers */
4751          setTimePicker(item, timeslot_name);//todo?
4752          let start_timepicker = document.getElementsByName(timeslot_name.replace("io_timepicker_", "start_timeslot_"));
4753          let end_timepicker = document.getElementsByName(timeslot_name.replace("io_timepicker_", "end_timeslot_"));
4754          timeslot_sel_range = start_timepicker[start_timepicker.length-1].value;
4755          timeslot_sel_range += " - " + end_timepicker[end_timepicker.length-1].value;
4756        }
4757
4758        var timeslot_sel_arr = "";
4759        if(typeof timeslot_sel_range != "undefined"){
4760          timeslot_sel_arr = timeslot_sel_range.split(" - ");
4761          var timeslot_start_time = timeslot_sel_arr[0].replace("am"," am").replace("pm"," pm").replace("  "," ");
4762          var timeslot_end_time = timeslot_sel_arr[1].replace("am"," am").replace("pm"," pm").replace("  "," ");
4763          if(timeslot_start_time && timeslot_end_time){
4764            let newDate1 = convertDateStringtoDateObject(start_date, timeslot_start_time);
4765            let newDate2 = convertDateStringtoDateObject(end_date, timeslot_end_time);
4766            let timeslot_duration = ((newDate2 - newDate1) / 3600) / 1000;
4767            rental_ids += rental_id+"-"+item.get("quantity")+"-"+timeslot_start_time+"-"+timeslot_duration+"|";
4768          }
4769        }
4770      }
4771    }
4772  else{
4773    var cart_id = item.get("rentalid");
4774    rental_ids += cart_id + "-" + item.get("quantity") + "|";
4775  }
4776  });
4777
4778  address_fields.each(function() {
4779    let field = this.id.split("_")[2];
4780    value = this.value;
4781    if(!value && !address_data[field]){
4782      jQuery(this).addClass("invalid_address_field")
4783    }
4784    else if(value){
4785      jQuery(this).removeClass("invalid_address_field")
4786      address_data[field] = this.value;
4787    }
4788  });
4789  if(jQuery(".invalid_address_field").length > 0){
4790    return;
4791  }
4792    let delivery_method = ""
4793    if(io_default_delivery_method)
4794    {
4795      delivery_method = io_default_delivery_method;
4796    }
4797    else if(getCookie("io_delivery_method"))
4798    {
4799      delivery_method = getCookie("io_delivery_method");
4800    }
4801
4802
4803  setCookie("io_address", address_data["address"], 14);
4804  setCookie("io_city", address_data["city"], 14);
4805  setCookie("io_state", address_data["state"], 14);
4806  setCookie("io_zip", address_data["zip"], 14);
4807
4808  cart_total = simpleCart.total();
4809  if(cart_total === "TBD") cart_total = 0;
4810  url = "https://rental.software/quotes/get_delivery_info.php?callback=?";
4811  if(window.location.href.indexOf("localhost") > -1){
4812    //url = "http://localhost/bugs/quotes/get_delivery_info.php?callback=?";
4813    url = "http://localhost/io/bugs/quotes/get_delivery_info.php?callback=?";
4814  }
4815  url +=
4816          "&name=" + encodeURIComponent("Brincabrincas El Pariente") +
4817          "&rental_ids=" + rental_ids +
4818          "&street=" + encodeURIComponent(address_data["address"]) +
4819          "&city=" + encodeURIComponent(address_data["city"]) +
4820          "&state=" + encodeURIComponent(address_data["state"]) +
4821          "&zip=" + encodeURIComponent(address_data["zip"]) +
4822          "&startdate=" + start_date +
4823          "&starttime=" + start_time +
4824          "&duration=" + duration +
4825          "&delivery_method=" + encodeURIComponent(delivery_method) +
4826          "&total=" + cart_total +
4827          "&cart_only=" + cart_only;
4828  jQuery.getJSON(url, function(data){
4829    if(data["delivery_restrict"] === 1){
4830      data["charge"] = 0;
4831    }
4832    handleDeliveryInfo(data, cart_only);
4833  });
4834  }
4835
4836  function handleDeliveryInfo(data, cart_only = false){
4837    jQuery("#deliverSubtotalContainer").show();
4838    jQuery("#checkDeliveryMessage").hide();
4839    let info_box = jQuery("#delivery_charge_info_box");
4840    if(data["delivery_restrict"] == 1){
4841      jQuery("#info_box_header").text("Sorry...");
4842      jQuery("#info_box_information").text(data["error"])
4843      setDeliverySubtotal(data["charge"], true)
4844    }
4845    else{
4846      setDeliverySubtotal(data["charge"])
4847      jQuery("#info_box_header").text("Success!");
4848      if(data["charge"] > 0){
4849        jQuery("#info_box_information").html("We are able to deliver to your location with a " + simpleCart.toCurrency(data["charge"]) +" fee!");
4850      }
4851      else{
4852        jQuery("#info_box_information").html("We are able to deliver to your location with no charge!");
4853      }
4854    }
4855    if(simpleCart.items().length == 0 && cart_only){
4856      jQuery("#info_box_header").text("Items Required.");
4857      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!")
4858    }
4859    info_box.show();
4860    jQuery.fancybox.update(jQuery(".address_entry"));
4861  }
4862  function showAddressEntry(cart_only=false){
4863    cartHide();
4864    jQuery(".invalid_address_field").removeClass("invalid_address_field")
4865    jQuery("#delivery_charge_info_box").hide();
4866    jQuery("#io_cd_address").val(getCookie("io_address"));
4867    jQuery("#io_cd_state").val(getCookie("io_state"));
4868    jQuery("#io_cd_city").val(getCookie("io_city"));
4869    jQuery("#io_cd_zip").val(getCookie("io_zip"));
4870    if(!cart_only){
4871      jQuery("#address_entry_submit").on("click", null, function(){ runDeliveryCall(); });
4872    } else{
4873      jQuery("#address_entry_submit").on("click", null, function(){ runDeliveryCall(cart_only); });
4874    }
4875    jQuery.fancybox.open(jQuery(".address_entry"));
4876  }
4877
4878  function closeAddressEntry(){
4879    jQuery.fancybox.close();
4880  }
4881
4882  function setDeliverySubtotal(amount, unavailable=false){
4883    if(unavailable){
4884      jQuery("#deliverySubtotal").html("Unavailable");
4885    } else{
4886      jQuery("#deliverySubtotal").html(simpleCart.toCurrency(amount));
4887    }
4888  }
4889
4890  function addressCookiesSet(){
4891    if(getCookie("address") && getCookie("state") && getCookie("city") && getCookie("zip")){
4892      return true;
4893    } else{
4894      return false
4895    }
4896  }</script>
vendor: 1 bytes, line 4896
4896
4897<script>let map;
4898  let geocoder;
4899  let item_id_map;
4900  let drawingManager;
4901  let drawingListener;
4902
4903  let polygons = new Array();
4904
4905  let polyline_markers = new Array();
4906  let polylines = new Array();
4907  let previous_marker;
4908  current_polyline = undefined;
4909  let previous_map_height = "";
4910
4911  function initMap() {
4912    map = new google.maps.Map(document.getElementById("map_container"), {
4913      center: { lat: -34.397, lng: 150.644 },
4914      zoom: 8,
4915      mapTypeId: "hybrid",
4916      disableDefaultUI: true,
4917      tilt: 0
4918    });
4919    drawingManager = new google.maps.drawing.DrawingManager({
4920      drawingControl: true,
4921      drawingControlOptions: {
4922        position: google.maps.ControlPosition.TOP_CENTER,
4923        drawingModes: [
4924          google.maps.drawing.OverlayType.POLYGON,
4925        ],
4926      }
4927    });
4928
4929    geocoder = new google.maps.Geocoder();
4930  }
4931
4932  function io_geocode(){
4933    let prefix = "#io_mc_"
4934    let request = ""
4935    let address_value = "";
4936    if(jQuery(prefix+"address").length) {
4937      address_value = jQuery(prefix+"address").val();
4938      if(address_value) setCookie("address", jQuery("#io_mc_address").val(), 14);
4939    }
4940    let city_value = "";
4941    if(jQuery(prefix+"city").length){
4942      city_value = jQuery(prefix+"city").val();
4943      if(city_value) setCookie("city", jQuery("#io_mc_city").val(), 14);
4944    }
4945    let state_value = "";
4946    if(jQuery(prefix+"state").length){
4947      state_value = jQuery(prefix+"state").val();
4948      if(state_value) setCookie("state", jQuery("#io_mc_state").val(), 14);
4949    }
4950    let zip_value = "";
4951    if(jQuery(prefix+"zip").length){
4952      zip_value = jQuery(prefix+"zip").val();
4953      if(zip_value) setCookie("zip", jQuery("#io_mc_zip").val(), 14);
4954    }
4955
4956    request = address_value + " " + city_value + " " + state_value + " " + zip_value;
4957    if(request){
4958      geocoder.geocode({address:request}).then((result) => {
4959        const { results } = result;
4960        map.setCenter(results[0].geometry.location);
4961        map.setZoom(24);
4962        return results;
4963      });
4964
4965    }
4966
4967    if(!addressProvided()) {
4968      jQuery("#io_map_address_entry").attr("open", "open");
4969    }else{
4970      jQuery("#io_map_address_entry").removeAttr("open");
4971    }
4972  }
4973
4974  function openMap(element){
4975    cartHide()
4976    io_map_clear()
4977    let unit = "meters"
4978    if(country === "US") unit = "feet"
4979    polygons = new Array();
4980    polyline_marker_sets = new Array();
4981    polylines = new Array();
4982    previous_marker = undefined;
4983    current_polyline = undefined;
4984
4985    jQuery("#io_mc_address").val(getCookie("address"));
4986    jQuery("#io_mc_state").val(getCookie("state"));
4987    jQuery("#io_mc_city").val(getCookie("city"));
4988    jQuery("#io_mc_zip").val(getCookie("zip"));
4989    io_geocode();
4990
4991    google.maps.event.removeListener(drawingListener);
4992
4993    if(element.id == "calcPriceOpenMap"){
4994      item_id_map = jQuery(".io_product_infobox .item_rentalid").text();
4995      if(jQuery(".io_product_infobox .item_qtytype").text() == "Area"){
4996        setMapTools_Area(unit, true)
4997      }else if(jQuery(".io_product_infobox .item_qtytype").text() == "Perimeter"){
4998        setMapTools_Perimeter(unit, true)
4999      }
5000    }
5001    else{
5002      item_id_map = jQuery(element).parent().parent().find(".item-rentalid").text();
5003      if(jQuery(element).parent().parent().find(".item-qtytype").text() == "Area"){
5004        setMapTools_Area(unit)
5005      }else if(jQuery(element).parent().parent().find(".item-qtytype").text() == "Perimeter"){
5006        setMapTools_Perimeter(unit)
5007      }
5008    }
5009  }
5010
5011  function addressProvided(){
5012    if(jQuery("#io_mc_address").val() && jQuery("#io_mc_state").val() &&
5013            jQuery("#io_mc_city").val() && jQuery("#io_mc_zip").val() ){
5014      return true;
5015    }
5016    return false;
5017  }
5018
5019  function setMapTools_Area(unit, item_page=false){
5020    jQuery.fancybox.open(jQuery(".map_fancybox"));
5021    drawingManager.setOptions({
5022      drawingControlOptions: {
5023        drawingModes: [google.maps.drawing.OverlayType.POLYGON]
5024      },
5025      drawingMode: google.maps.drawing.OverlayType.POLYGON,
5026      polygonOptions: {
5027        fillColor: "#0191fc",
5028        strokeColor: "#0113fc"
5029      },
5030    });
5031    let units = "meters"
5032    if(country === "US") units = "feet"
5033
5034    jQuery("#io_measurement_input_label").text("Approximate area in "+units+": ");
5035    jQuery("#io_map_manual_input").off("click");
5036    jQuery("#io_map_manual_input").on("click", function(){manual_calc_price("Area", item_page)});
5037    jQuery("#io_perimeter_options_container").hide();
5038    jQuery("#io_map_new_line_container").hide();
5039    jQuery("#io_map_instructions").html("Use the map below to take measurements by clicking on each corner of the area y
5039ou 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>")
5040
5041    drawingListener = google.maps.event.addListener(drawingManager, "polygoncomplete", function(polygon) {
5042      polygons.push(polygon);
5043      let convert_feet = 1;
5044      if(country === "US") convert_feet = 10.764;
5045      let approx_area = 0;
5046      polygons.forEach(function(polygon) {
5047        approx_area += google.maps.geometry.spherical.computeArea(polygon.getPath()) * convert_feet;
5048      });
5049      calcprice_approx_area(Math.round(approx_area));
5050    });
5051    drawingManager.setMap(map);
5052  }
5053
5054  function setMapTools_Perimeter(unit, item_page=false){
5055    jQuery.fancybox.open(jQuery(".map_fancybox"));
5056    drawingManager.setOptions({
5057      drawingControlOptions: {
5058        drawingModes: [google.maps.drawing.OverlayType.MARKER]
5059      },
5060      drawingMode: google.maps.drawing.OverlayType.MARKER
5061    });
5062    let height = jQuery("#perimeter_height").val();
5063    let units = "";
5064    if(height){
5065      units = "sq meters"
5066      if(country === "US") units = "sq feet"
5067      jQuery("#io_measurement_input_label").text("Approximate surface area in "+units+": ");
5068      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>")
5069
5070    }else{
5071      units = "meters"
5072      if(country === "US") units = "feet"
5073      jQuery("#io_measurement_input_label").text("Approximate perimeter in "+units+": ");
5074      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>")
5075
5076    }
5077
5078    jQuery("#io_map_manual_input").off("click");
5079    jQuery("#io_map_manual_input").bind("click", function(){manual_calc_price("Perimeter", item_page)});
5080    jQuery("#perimeter_height").bind("change", function(){change_perimeter_instructions()});
5081    jQuery("#io_perimeter_options_container").show();
5082    jQuery("#io_map_clear_container").show();
5083    jQuery("#io_map_new_line_container").show();
5084
5085    current_polyline = new google.maps.Polyline({
5086      map: map,
5087      path: [],
5088      strokeColor: "#0113fc",
5089      strokeOpacity: 1.0,
5090      strokeWeight: 2
5091    })
5092    drawingListener = google.maps.event.addListener(drawingManager, "markercomplete", function(marker) {
5093      polyline_markers.push(marker)
5094      marker.setVisible(false);
5095      current_polyline.getPath().push(marker.getPosition())
5096      if(previous_marker){
5097        let convert_feet = 1;
5098        if(country === "US") convert_feet = 3.281;
5099        let approx_perimeter = 0;
5100        polylines.forEach(function(polyline) {
5101          if(convert_feet > 1) convert_feet = 10.764
5102          approx_perimeter += google.maps.geometry.spherical.computeArea(polyline.getPath()) * convert_feet;
5103        });
5104        approx_perimeter += google.maps.geometry.spherical.computeLength(current_polyline.getPath()) * convert_feet;
5105        calcprice_approx_perimeter(Math.round(approx_perimeter));
5106      }
5107      previous_marker = marker;
5108    });
5109
5110    jQuery("#perimeter_height_contianer").show();
5111
5112    drawingManager.setMap(map);
5113  }
5114
5115  function change_perimeter_instructions(){
5116    let height = jQuery("#perimeter_height").val();
5117    if(height){
5118      units = "sq meters"
5119      if(country === "US") units = "sq feet"
5120      jQuery("#io_measurement_input_label").text("Approximate surface area in "+units+": ");
5121      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>")
5122    }else {
5123      units = "meters"
5124      if(country === "US") units = "feet"
5125      jQuery("#io_measurement_input_label").text("Approximate perimeter in "+units+": ");
5126      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>")
5127    }
5128  }
5129
5130  function manual_calc_price(method, item_page){
5131    let approx_measurement = parseInt(jQuery("#io_measurement_input").val());
5132    let units = "";
5133    if(approx_measurement){
5134      if(method == "Area"){
5135        units = "sq meters"
5136        if(country === "US") units = "sq feet"
5137      }else if(method == "Perimeter"){
5138        let height = jQuery("#perimeter_height").val();
5139        if(height){
5140          units = "sq meters"
5141          if(country === "US") units = "sq feet"
5142        }else{
5143          units = "meters"
5144          if(country === "US") units = "feet"
5145        }
5146      }
5147      simpleCart.items().forEach(function (item, index){
5148        if(item.get("rentalid") === item_id_map){
5149          item.set("units", units);
5150          item.set("quantity", approx_measurement);
5151        }
5152      });
5153
5154      simpleCart.update();
5155
5156      if(item_page || jQuery(".io_product_infobox .item_rentalid").text() == item_id_map) set_price_on_item_page(units, approx_measurement);
5157      if(!item_page) cartShow();
5158    }
5159    jQuery.fancybox.close();
5160  }
5161
5162  function calcprice_approx_area(approx_area){
5163    jQuery("#io_measurement_input").val(approx_area);
5164  }
5165
5166  function calcprice_approx_perimeter(approx_perimeter){
5167    let height = jQuery("#perimeter_height").val();
5168    if(height && height > 0) approx_perimeter *= parseInt(height);
5169
5170    jQuery("#io_measurement_input").val(approx_perimeter);
5171  }
5172
5173  function set_price_on_item_page(units, measurement){
5174    let measurement_price = document.querySelector(".io_product_measurement_price");
5175    if(measurement_price==undefined){
5176      var first_price = document.querySelector(".io_product_price_box");
5177      if(first_price != null){
5178        measurement_price = first_price.cloneNode(true);
5179        /* clear all classes */
5180        measurement_price.className = "";
5181        measurement_price.classList.add("io_product_price_box");
5182        measurement_price.classList.add("io_product_measurement_price");
5183        measurement_price.style.display = "grid";
5184        /* Make a hidden data span for when adding to cart */
5185        raw_measurement = document.createElement("span");
5186        raw_measurement.classList.add("io_measure_price_raw_measurement");
5187        raw_measurement.style.display = "none";
5188        raw_measurement.textContent = measurement;
5189        measurement_price.appendChild(raw_measurement);
5190        first_price.before(measurement_price);
5191      }
5192    }
5193    var price_1h = Number(jQuery(".io_product_price_1h_"+jQuery(".io_product_infobox .item_rentalid").text()).text().replace(/[^0-9.-]+/g,""));
5194    measurement_price.querySelector("p:nth-child(1)").innerHTML = simpleCart.toCurrency(price_1h*measurement);
5195    measurement_price.querySelector("p:nth-child(2)").innerHTML = "For approximately "+measurement+" "+units;
5196  }
5197
5198  function io_map_clear() {
5199    if(drawingManager.getDrawingMode() == "polygon"){
5200      drawingManager.setDrawingMode("polygon");
5201    }
5202
5203    if(polygons) polygons.forEach(function(polygon) {
5204      polygon.setMap(null);
5205    });
5206    if(current_polyline) current_polyline.setMap(null);
5207    if(polylines) polylines.forEach(function(polyline) {
5208      polyline.setMap(null);
5209    });
5210    if(polyline_markers) polyline_markers.forEach(function(marker) {
5211      marker.setMap(null);
5212    });
5213
5214    current_polyline = new google.maps.Polyline({
5215      map: map,
5216      path: [],
5217      strokeColor: "#0113fc",
5218      strokeOpacity: 1.0,
5219      strokeWeight: 2
5220    });
5221    polygons = new Array();
5222    polylines = new Array();
5223    polyline_markers = new Array();
5224    previous_marker = undefined;
5225  }
5226
5227  function io_map_new_line() {
5228    polylines.push(new google.maps.Polyline({
5229              map: map,
5230              path: current_polyline.getPath(),
5231              strokeColor: "#0113fc",
5232              strokeOpacity: 1.0,
5233              strokeWeight: 2
5234            })
5235    );
5236    previous_marker = undefined;
5237    current_polyline.setMap(null);
5238    current_polyline = new google.maps.Polyline({
5239      map: map,
5240      path: [],
5241      strokeColor: "#0113fc",
5242      strokeOpacity: 1.0,
5243      strokeWeight: 2
5244    });
5245  }
5246
5247  function show_more_instruct_click(show_more_button) {
5248    if(show_more_button.textContent == "(more)") {
5249      show_more_button.textContent = "(hide)";
5250      jQuery("#io_map_additional_instructions").show();
5251    }else if(show_more_button.textContent == "(hide)") {
5252      show_more_button.textContent = "(more)";
5253      jQuery("#io_map_additional_instructions").hide();
5254    }
5255  }
5256
5257  function perimeter_height_changed(){
5258    let current_map_height = jQuery("#perimeter_height").val();
5259    if(current_map_height && current_map_height > 0){
5260      if(jQuery("#io_measurement_input").val() && !previous_map_height){
5261        let measurement = jQuery("#io_measurement_input").val();
5262        jQuery("#io_measurement_input").val(measurement * current_map_height);
5263      }else if(jQuery("#io_measurement_input").val() && previous_map_height){
5264        let measurement = jQuery("#io_measurement_input").val();
5265        if(previous_map_height > 0){
5266          measurement = measurement / previous_map_height;
5267        }
5268        jQuery("#io_measurement_input").val(measurement * current_map_height);
5269      }
5270    }else if (!current_map_height || current_map_height == 0){
5271      if(jQuery("#io_measurement_input").val() && previous_map_height){
5272        let measurement = jQuery("#io_measurement_input").val();
5273        if(previous_map_height > 0){
5274          measurement = measurement / previous_map_height;
5275        }
5276        jQuery("#io_measurement_input").val(measurement);
5277      }
5278    }
5279    previous_map_height = current_map_height;
5280  }
5281
5282  window.initMap = initMap;</script>
5282 <div class="map_fancybox"><div class="elementor-widget-text-editor"><div> <details id="io_map_address_entry"> <summary style = "cursor:pointer">Enter Address Information (edit)</summary><table style="margin-left: 10px"><tr><td> <label for="address" id="io_mcl_address_label" style="display: table-cell"> Street Address </label></td><td> <input id="io_mc_address" style="display: table-cell" name="address" type="text"></input></td></tr><tr><td> <label for="city" id="io_mcl_city_label" style="display: table-cell"> City </label></td><td> <input id="io_mc_city" style="display: table-cell" name="city" type="text"></input></td></tr><tr id="io_mc_us-state-select"><td> <label for="state" id="io_mcl_state_label" style="display: table-cell"> State </label></td><td> <select name="state" id="io_mc_state" style="display: table-cell" class="input-mini"><option value=""></option><option value="AK">AK</option><option value="AL">AL</option><option value="AR">AR</option><option value="AZ">AZ</option><option value="CA">CA</option><option value="CO">CO</option><option value="CT">CT</option><option value="DC">DC</option><option value="DE">DE</option><option value="FL">FL</option><option value="GA">GA</option><option value="HI">HI</option><option value="IA">IA</option><option value="ID">ID</option><option value="IL">IL</option><option value="IN">IN</option><option value="KS">KS</option><option value="KY">KY</option><option value="LA">LA</option><option value="MA">MA</option><option value="MD">MD</option><option value="ME">ME</option><option value="MI">MI</option><option value="MN">MN</option><option value="MO">MO</option><option value="MS">MS</option><option value="MT">MT</option><option value="NC">NC</option><option value="ND">ND</option><option value="NE">NE</option><option value="NH">NH</option><option value="NJ">NJ</option><option value="NM">NM</option><option value="NV">NV</option><option value="NY">NY</option><option value="OH">OH</option><option value="OK">OK</option><option value="OR">OR</option><option value="PA">PA</option><option value="RI">RI</option><option value="SC">SC</option><option value="SD">SD</option><option value="TN">TN</option><option value="TX">TX</option><option value="UT">UT</option><option value="VA">VA</option><option value="VT">VT</option><option value="WA">WA</option><option value="WI">WI</option><option value="WV">WV</option><option value="WY">WY</option> </select></td></tr><tr><td> <label for="zip" id="io_mcl_zip_label" style="display: table-cell"> Zip Code </label></td><td> <input id="io_mc_zip" style="display: table-cell" name="zip" type="text"></input></td></tr></table> <a class="elementor-button elementor-size-sm io_button"
5283 id="map_geocode_submit"
5284 onClick="io_geocode()"
5285 href="javascript:;"> Locate </a> </details><div id="perimeter_height_contianer"><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> <label> Height of structure: </label> <input type="number" id="perimeter_height" onChange="perimeter_height_changed()"/></div><div><p id="io_map_instructions"></p></div><div id="io_measurement_input_container"> <label id="io_measurement_input_label"> </label> <input type="number" id="io_measurement_input"/> <a class="elementor-button elementor-size-sm io_button"
5286 id="io_map_manual_input"
5287 href="javascript:;"> Done </a></div><div style="display: inline-flex"><div id="io_map_clear_container"> <a class="elementor-button elementor-size-sm io_button"
5288 id="io_map_clear_btn"
5289 onClick="io_map_clear()"
5290 href="javascript:;"> Clear </a></div><div id="io_map_new_line_container" style="margin-left:5px"> <a class="elementor-button elementor-size-sm io_button"
5291 id="io_map_new_line_btn"
5292 onClick="io_map_new_line()"
5293 href="javascript:;"> Add New Line </a></div></div></div></div> <br><div id="map_container"> 
5293<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDEuvvqefKaUABPvydm00SV8Fr8tQeGVcw&libraries=drawing&callback=initMap" defer></script>
5293 </div></div>  
5293<script>jQuery(".io_testimonials, #io_testimonials").each(function(){
5294           io_get_reviews(this);
5295        })
5296        setTimeout(function(){
5297            jQuery(".io_testimonials .w3-ul li p").each(function(){
5298                const container = jQuery(this).parent()
5299                const element = jQuery(this);
5300
5301                if (element[0].scrollHeight > container[0].clientHeight) {
5302
5303                    jQuery(this).parent().parent().append(create_read_more());
5304                }
5305            });
5306        }, 500);
5307
5308        function create_read_more(){
5309            let html = "<p class=\"io_review_readmore\" onClick=\"review_readmore_clicked(this)\">read more</p>"
5310            return html;
5311        }
5312
5313        function review_readmore_clicked(element){
5314            let review_li = jQuery(element).parent().find("li:eq(3)");
5315            new_height = jQuery(review_li).find("p").height() + 16;
5316            jQuery(review_li).height(new_height);
5317            jQuery(element).hide();
5318        }
5319
5320        function io_get_reviews(element){
5321        let io_un = "BrincabrincasElPariente";
5322	  let io_loc = "0";
5323	  let io_url1 = 'https://rental.software/testimonials_iframe.php?user=';
5324	  if (location.hostname === "localhost"){
5325	      io_url1 = 'http://localhost/io/bugs/testimonials_iframe.php?user=';
5326          //io_url1 = 'http://localhost/jbug/trunk/testimonials_iframe.php?user=';
5327        }
5328	  let io_url2 = '&location_id=';
5329	  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';
5330	  let io_url_c = io_url1 + io_un + io_url2 + io_loc + io_url3;
5331	  fetch(io_url_c, {
5332		method: 'get'
5333	}).then(
5334	  function(response){
5335		 return response.json();
5336		}
5337	).then(function(data) {
5338
5339
5340
5341	//let element = document.getElementById("io_testimonials");
5342	//DOM-built on purpose: literal markup in this inline script lands in the raw page
5343	//source and SEO crawlers read it as page content (IO-37932).
5344	element.textContent = "";
5345	let review_cnt=0;
5346	let rating_sum = 0;
5347	data.forEach((user) => {
5348				const { name, review, rating, time } = user;
5349				rating_sum += Number(rating);
5350				review_cnt++;
5351				let review_div = document.createElement("div");
5352				let review_list = document.createElement("ul");
5353				review_list.className = "w3-ul";
5354				let name_li = document.createElement("li");
5355				name_li.textContent = name;
5356				let rating_li = document.createElement("li");
5357				rating_li.textContent = rating + " ";
5358				let date_li = document.createElement("li");
5359				date_li.textContent = time;
5360				let review_li = document.createElement("li");
5361				let review_p = document.createElement("p");
5362				review_p.textContent = review;
5363				review_li.appendChild(review_p);
5364				let img_star = Math.round(parseFloat(rating));
5365				let star_img = document.createElement("img");
5366				star_img.className = "review_img";
5367				star_img.src = "https://rental.software/images/" + img_star + "star.png";
5368				rating_li.appendChild(star_img);
5369				review_list.appendChild(name_li);
5370				review_list.appendChild(rating_li);
5371				review_list.appendChild(date_li);
5372				review_list.appendChild(review_li);
5373				review_div.appendChild(review_list);
5374				element.appendChild(review_div);
5375	});
5376	let avg = (parseFloat(rating_sum)/parseFloat(review_cnt)).toFixed(1);
5377	let avg_img = Math.round(avg);
5378	let head = document.createElement("div");
5379	let head_h2 = document.createElement("h2");
5380	head_h2.textContent = "Avg Rating: " + avg;
5381	let head_img = document.createElement("img");
5382	head_img.className = "review_avg_img";
5383	head_img.src = "https://rental.software/images/" + avg_img + "star.png";
5384	head.appendChild(head_h2);
5385	head.appendChild(head_img);
5386	element.prepend(head);
5387	}).catch(function(err) {
5388		console.log(err);
5389	});
5390}</script>
5390 <style type="text/css">.searchio-live-search-results {
5391						opacity: 0;
5392						transition: opacity .25s ease-in-out;
5393						-moz-transition: opacity .25s ease-in-out;
5394						-webkit-transition: opacity .25s ease-in-out;
5395						height: 0;
5396						overflow: hidden;
5397						z-index: 9999995; /* Exceed searchIO Modal Search Form overlay. */
5398						position: absolute;
5399						display: none;
5400					}
5401
5402					.searchio-live-search-results-showing {
5403						display: block;
5404						opacity: 1;
5405						height: auto;
5406						overflow: auto;
5407					}
5408
5409					.searchio-live-search-no-results {
5410						padding: 3em 2em 0;
5411						text-align: center;
5412					}
5413
5414					.searchio-live-search-no-min-chars:after {
5415						content: "Continue typing";
5416						display: block;
5417						text-align: center;
5418						padding: 2em 2em 0;
5419					}</style> 
5419<script>var _searchIO_LIVE_AJAX_SEARCH_BLOCKS = true;
5420			var _searchIO_LIVE_AJAX_SEARCH_ENGINE = 'default';
5421			var _searchIO_LIVE_AJAX_SEARCH_CONFIG = 'default';</script>
5421 
5421<script>( () => {
5422					const lazyloadRunObserver = () => {
5423						const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` );
5424						const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => {
5425							entries.forEach( ( entry ) => {
5426								if ( entry.isIntersecting ) {
5427									let lazyloadBackground = entry.target;
5428									if( lazyloadBackground ) {
5429										lazyloadBackground.classList.add( 'e-lazyloaded' );
5430									}
5431									lazyloadBackgroundObserver.unobserve( entry.target );
5432								}
5433							});
5434						}, { rootMargin: '200px 0px 200px 0px' } );
5435						lazyloadBackgrounds.forEach( ( lazyloadBackground ) => {
5436							lazyloadBackgroundObserver.observe( lazyloadBackground );
5437						} );
5438					};
5439					const events = [
5440						'DOMContentLoaded',
5441						'elementor/lazyload/observe',
5442					];
5443					events.forEach( ( event ) => {
5444						document.addEventListener( event, lazyloadRunObserver );
5445					} );
5446				} )();</script>
5446 
5446<script id="jquery-ui-core-js-before">jQuery.uiBackCompat = true;
5447//# sourceURL=jquery-ui-core-js-before</script>
5447 
5447<script id="jquery-ui-datepicker-js-after">jQuery(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});});
5448//# sourceURL=jquery-ui-datepicker-js-after</script>
5448 
5448<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>
5448 
5448<script id="elementor-frontend-js-before">var 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.4","is_static":false,"experimentalFeatures":{"additional_custom_breakpoints":true,"container":true,"theme_builder_v2":true,"nested-elements":true,"import-export-customization":true,"e_pro_atomic_form":true,"e_pro_collection_loop":true},"urls":{"assets":"https:\/\/brincabrincaselpariente.net\/wp-content\/plugins\/elementor\/assets\/","ajaxurl":"https:\/\/brincabrincaselpariente.net\/wp-admin\/admin-ajax.php","uploadUrl":"https:\/\/brincabrincaselpariente.net\/wp-content\/uploads"},"nonces":{"floatingButtonsClickTracking":"475ad5c1ab","atomicFormsSendForm":"4b3fef8af9"},"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":109,"title":"Brincabrincas%20El%20Pariente%20Phoenix%20AZ%20-%20Party%20Rental%20and%20Bounce%20House%20Rental","excerpt":"","featuredImage":false}};
5449//# sourceURL=elementor-frontend-js-before</script>
5449 
5449<script id="swp-live-search-client-js-extra">var searchio_live_search_params = [];
5450searchio_live_search_params = {"ajaxurl":"https:\/\/brincabrincaselpariente.net\/wp-admin\/admin-ajax.php","origin_id":109,"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"};;
5451//# sourceURL=swp-live-search-client-js-extra</script>
vendor: 131 bytes, line 5451
5451 <script id="elementor-recaptcha_v3-api-js" src="https://www.google.com/recaptcha/api.js?render=explicit&#038;ver=4.3.1"></script> 
5451<script id="wp-hooks-js" src="https://brincabrincaselpariente.net/wp-includes/js/dist/hooks.min.js?ver=f0f188028580e8dc1255"></script>
5451 
5451<script id="wp-i18n-js" src="https://brincabrincaselpariente.net/wp-includes/js/dist/i18n.min.js?ver=1dfe7db3940c23ea9216"></script>
5451 
5451<script id="wp-i18n-js-after">wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
5452//# sourceURL=wp-i18n-js-after</script>
5452 
5452<script id="elementor-pro-frontend-js-before">var ElementorProFrontendConfig = {"ajaxurl":"https:\/\/brincabrincaselpariente.net\/wp-admin\/admin-ajax.php","nonce":"f793261ede","urls":{"assets":"https:\/\/brincabrincaselpariente.net\/wp-content\/plugins\/elementor-pro\/assets\/","rest":"https:\/\/brincabrincaselpariente.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:\/\/brincabrincaselpariente.net\/wp-content\/plugins\/elementor-pro\/modules\/lottie\/assets\/animations\/default.json"}};
5453//# sourceURL=elementor-pro-frontend-js-before</script>
5453 
5453<script defer src="https://brincabrincaselpariente.net/wp-content/cache/autoptimize/js/autoptimize_85df37c808b3be0329c29509757bcd13.js"></script>
5453</body></html>
5454<!-- Cached by WP-Optimize (gzip) - https://teamupdraft.com/wp-optimize/ - Last modified: October 8, 2026 11:34 pm (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.