{"id":1311,"date":"2020-04-02T14:25:07","date_gmt":"2020-04-02T14:25:07","guid":{"rendered":"https:\/\/dev.rental.software\/newweb668\/?page_id=1311"},"modified":"2026-03-27T21:43:29","modified_gmt":"2026-03-27T21:43:29","slug":"rentals","status":"publish","type":"page","link":"https:\/\/dev.rental.software\/newweb668\/rentals\/","title":{"rendered":"Inventory"},"content":{"rendered":"\r\n<!-- Start Shortcoder content --><!-- Cart -->\r\n<div class=\"cartInfo\" style=\"display:none\">\r\n    <i class=\"cartIcon fas fa-shopping-cart\"><\/i><!--no linebreak bc elementor--> <span class=\"simpleCart_quantity\"><\/span> items\r\n<\/div>\r\n\r\n<div class=\"pageDateRangeWrapper elementor-widget-button\">\r\n    <div class=\"elementor-button elementor-animation-grow\" onclick=\"checkAvailDateClick()\" style=\"display:block\">\r\n        <div class=\"ioDateRangeHeader\">Set Event Date<\/div>\r\n        <div id=\"pageDateRange\" class=\"ioDateRange\"><\/div>\r\n    <\/div>\r\n<\/div>\r\n<div class=\"io_category_wrapper elementor-widget-heading\">\r\n    <h1 class=\"catNameIO elementor-heading-title elementor-size-default\">Inventory<span class=\"io_forrent io_forrent_Inventory\"> for Rent<\/span><\/h1>\r\n<\/div>\r\n\r\n<!-- Add View Toggle Buttons -->\r\n<div class=\"io_view_toggle_container\" style=\"display:none;\">\r\n    <div class=\"io_view_toggle_buttons\">\r\n        <button class=\"io_view_toggle_btn active\" data-view=\"tile\" title=\"Tile View\">\r\n            <i class=\"fas fa-th-large\"><\/i>\r\n        <\/button>\r\n        <button class=\"io_view_toggle_btn\" data-view=\"list\" title=\"List View\">\r\n            <i class=\"fas fa-list\"><\/i>\r\n        <\/button>\r\n    <\/div>\r\n<\/div>\r\n<div class=\"category_id\" style=\"display: none\">Inventory<\/div>\r\n<div class=\"cat_div_wrapper\"><div class=\"io_cat_description io_cat_description_Inventory elementor-widget-text-editor catDescriptionIO\"><\/div><\/div>\r\n<div class=\"io_catdiv2\"><\/div>\r\n<div class=\"io_landingpages io_landingpages_Inventory elementor-widget-text-editor\"><!-- Start Shortcoder content -->Professional delivery to <span class=\\\"io_city_list\\\">Lufkin TX<\/span> and surrounding areas. Please submit a quote or contact us to be sure we service your area.<!-- End Shortcoder content --><\/div>\r\n<div class=\"io_cat_longdescription io_cat_longdescription_Inventory elementor-widget-text-editor\"><\/div>\r\n<script>\r\n    function CategoryGallery(rental_id, rental_name, images_arr){\r\n        var rid = rental_id;\r\n        var rentalName = rental_name;\r\n\r\n        \/\/ Normalize images_arr: it may arrive as a JSON string, an object, or be undefined\r\n        try {\r\n            if (typeof images_arr === 'string' && images_arr.length) {\r\n                images_arr = JSON.parse(images_arr);\r\n            }\r\n        } catch (e) {\r\n            images_arr = {};\r\n        }\r\n        if (!images_arr) images_arr = {};\r\n\r\n        \/\/ Where to append anchors and thumbs\r\n        var $bigAfter = jQuery('#io_img_big2_' + rid);\r\n        var $thumbAfter = jQuery('#io_img_thumb1_' + rid);\r\n\r\n        if ($bigAfter.length && $thumbAfter.length) {\r\n            var relVal = $bigAfter.attr('rel') || 'img_group noopener';\r\n\r\n            \/\/ Helper to validate a URL-like value (non-empty and not literal placeholders)\r\n            var isValid = function (u) {\r\n                if (!u) return false;\r\n                var s = String(u).trim();\r\n                if (!s) return false;\r\n                if (s.indexOf('%%') !== -1) return false; \/\/ ignore unreplaced placeholders\r\n                if (s === '0' || s.toLowerCase() === 'null' || s.toLowerCase() === 'undefined') return false;\r\n                return true;\r\n            };\r\n\r\n            var addedThumbs = 0;\r\n\r\n            \/\/ Iterate image map and append missing big anchors and thumbs\r\n            for (var key in images_arr) {\r\n                if (!images_arr.hasOwnProperty(key)) continue;\r\n                var imgObj = images_arr[key] || {};\r\n                var href = imgObj[\"rentalimage_imagelocbig\"] || imgObj[\"imagelocbig\"] || imgObj[\"big\"];\r\n                var src  = imgObj[\"rentalimage_imageloc\"]    || imgObj[\"imageloc\"]    || imgObj[\"thumb\"];\r\n\r\n                \/\/ Compute index consistent with existing templates\r\n                var n = parseInt(key, 10);\r\n                if (isNaN(n)) {\r\n                    \/\/ Try to derive from position by incrementing a counter if keys are not numeric\r\n                    n = 1;\r\n                }\r\n                \/\/ Category templates already include big1, big2, and thumb1; gallery adds 2+ when missing\r\n                var bigIndex = n + 1;   \/\/ matches io_cart_shortcode.html pattern\r\n                var thumbIndex = n + 1; \/\/ thumb id series aligns with big series in newer code\r\n\r\n                \/\/ Add big anchor if valid and not already present\r\n                if (isValid(href)) {\r\n                    var bigId = '#io_img_big' + bigIndex + '_' + rid;\r\n                    if (jQuery(bigId).length === 0) {\r\n                        var $a = jQuery('<a\/>', {\r\n                            rel: relVal,\r\n                            href: href,\r\n                            id: 'io_img_big' + bigIndex + '_' + rid\r\n                        });\r\n                        $bigAfter.after($a);\r\n                        $bigAfter = $a; \/\/ maintain insertion point\r\n                    }\r\n                }\r\n\r\n                \/\/ Add thumbnail if valid and not already present\r\n                if (isValid(src)) {\r\n                    var thumbId = '#io_img_thumb' + thumbIndex + '_' + rid;\r\n                    if (jQuery(thumbId).length === 0) {\r\n                        var $img = jQuery('<img\/>', {\r\n                            'class': 'io_image_thumb skip-lazy',\r\n                            title: rentalName,\r\n                            src: src,\r\n                            alt: rentalName,\r\n                            id: 'io_img_thumb' + thumbIndex + '_' + rid\r\n                        }).on('mouseover', function () {\r\n                            if (typeof updateMainPic === 'function') {\r\n                                updateMainPic(this);\r\n                            }\r\n                        });\r\n                        $thumbAfter.after($img);\r\n                        $thumbAfter = $img; \/\/ maintain insertion point\r\n                        addedThumbs++;\r\n                    }\r\n                }\r\n            }\r\n\r\n            \/\/ Reveal the thumbnail box if we added any extra thumbnails\r\n            if (addedThumbs > 0) {\r\n                jQuery('#io_img_thumb1_' + rid).closest('.io_image_thumbbox').show();\r\n            }\r\n        }\r\n    }\r\n\r\n    \/\/ Function to generate list view content on demand (global scope)\r\n    generateListViewContent = function() {\r\n        console.log('[IO List View] Generating list view content dynamically');\r\n        \r\n        jQuery('.io_item2_list').each(function() {\r\n            var $item = jQuery(this);\r\n            \r\n            \/\/ Skip if already generated\r\n            if ($item.find('.io_list_view_content').length > 0) {\r\n                return;\r\n            }\r\n            \r\n            \/\/ Extract rental_id from the item\r\n            var rentalId = $item.find('.item_rentalid').text().trim();\r\n            if (!rentalId) {\r\n                console.warn('[IO List View] No rental_id found for item, skipping');\r\n                return;\r\n            }\r\n            \r\n            \/\/ Read data from dynamically named global variables\r\n            \/\/ var description = String(window['data_description_' + rentalId] || \"\").replace(\/[\\r\\n]+\/g, \"\").trim();\r\n            var indoorOutdoor = String(window.io_category_data[rentalId][\"indoor_outdoor\"] || \"\").replace(\/[\\r\\n]+\/g, \"\").trim();\r\n            var staff = String(window.io_category_data[rentalId][\"staff\"] || \"\").replace(\/[\\r\\n]+\/g, \"\").trim();\r\n            var electric = String(window.io_category_data[rentalId][\"electric\"] || \"\").replace(\/[\\r\\n]+\/g, \"\").trim();\r\n            var dimensions = String(window.io_category_data[rentalId][\"dimensions\"] || \"\").replace(\/[\\r\\n]+\/g, \"\").trim();\r\n            \r\n            \/\/ Helper function to strip HTML tags from text\r\n            var stripHtml = function(html) {\r\n                var tmp = document.createElement(\"DIV\");\r\n                tmp.innerHTML = html;\r\n                return (tmp.textContent || tmp.innerText || \"\").trim();\r\n            };\r\n            \r\n            \/\/ Helper function to escape HTML to prevent XSS\r\n            var escapeHtml = function(text) {\r\n                var map = {\r\n                    '&': '&amp;',\r\n                    '<': '&lt;',\r\n                    '>': '&gt;',\r\n                    '\"': '&quot;',\r\n                    \"'\": '&#039;'\r\n                };\r\n                return text.replace(\/[&<>\"']\/g, function(m) { return map[m]; });\r\n            };\r\n            \r\n            \/\/ Strip HTML tags from description\r\n            \/\/ description = stripHtml(description);\r\n            \r\n            \/\/ Build the HTML structure with escaped content\r\n            var html = '<div class=\"io_list_view_content\">';\r\n            \/\/ html += '<div class=\"io_item_description_line\">' + escapeHtml(description) + '<\/div>';\r\n            html += '<div class=\"io_item_details_labeled\">';\r\n            \r\n            \/\/ Setup field - only add if valid\r\n            if (indoorOutdoor && indoorOutdoor !== '0' && indoorOutdoor.length > 0) {\r\n                html += '<div class=\"io_detail_item io_detail_setup\">';\r\n                html += '<span class=\"io_detail_label\">Setup:<\/span>';\r\n                html += '<span class=\"io_detail_value\">' + escapeHtml(indoorOutdoor) + '<\/span>';\r\n                html += '<\/div>';\r\n            }\r\n            \r\n            \/\/ Operators field - only add if valid\r\n            var operatorsText = staff ? staff + ' Adult Supervision Required' : \"\";\r\n            if (operatorsText &&\r\n                operatorsText !== '0 Adult Supervision Required' && \r\n                operatorsText !== 'Adult Supervision Required' &&\r\n                operatorsText !== '0') {\r\n                html += '<div class=\"io_detail_item io_detail_operators\">';\r\n                html += '<span class=\"io_detail_label\">Operators:<\/span>';\r\n                html += '<span class=\"io_detail_value\">' + escapeHtml(operatorsText) + '<\/span>';\r\n                html += '<\/div>';\r\n            }\r\n            \r\n            \/\/ Power field - only add if valid\r\n            var powerText = electric ? electric + ' Outlets' : \"\";\r\n            if (powerText &&\r\n                powerText !== '0 Outlets' && \r\n                powerText !== '0.00 Outlets' && \r\n                powerText !== 'Outlets' &&\r\n                powerText !== '0') {\r\n                html += '<div class=\"io_detail_item io_detail_power\">';\r\n                html += '<span class=\"io_detail_label\">Power:<\/span>';\r\n                html += '<span class=\"io_detail_value\">' + escapeHtml(powerText) + '<\/span>';\r\n                html += '<\/div>';\r\n            }\r\n            \r\n            \/\/ Size field - only add if valid\r\n            if (dimensions && dimensions !== '0' && dimensions.length > 0) {\r\n                html += '<div class=\"io_detail_item io_detail_size\">';\r\n                html += '<span class=\"io_detail_label\">Size:<\/span>';\r\n                html += '<span class=\"io_detail_value\">' + escapeHtml(dimensions) + '<\/span>';\r\n                html += '<\/div>';\r\n            }\r\n            \r\n            html += '<\/div>'; \/\/ close io_item_details_labeled\r\n            html += '<\/div>'; \/\/ close io_list_view_content\r\n            \r\n            \/\/ Insert before the buttons container\r\n            $item.find('.io_buttons_container').before(html);\r\n        });\r\n    }\r\n\r\n    jQuery(document).ready(function($) {\r\n\r\n    jQuery(\".io_item2_list\").each(function(){\r\n        var rentalId = jQuery(this).find('.item_rentalid').text().trim();\r\n        if (io_categoryVariantImages == 'on'){\r\n            CategoryGallery(rentalId, window.io_category_data[rentalId]['rental_name'], window.io_category_data[rentalId][\"images_arr\"]);\r\n        }\r\n    });\r\n\r\n\r\n    console.log('[IO View Toggle] Document ready, initializing view toggle functionality');\r\n    \r\n    \/\/ Check if category_id has a numeric value to identify actual category pages\r\n    \/\/ This must happen before any view state is applied\r\n    var categoryId = $('.category_id').text().trim();\r\n    var hasNumericCategoryId = categoryId && !isNaN(categoryId) && categoryId.length > 0;\r\n    \r\n    if (!hasNumericCategoryId) {\r\n        console.log('[IO View Toggle] No valid numeric category ID found, this is not a category page - skipping initialization');\r\n        return;\r\n    }\r\n    \r\n    console.log('[IO View Toggle] Category page detected with categoryId:', categoryId);\r\n    $('body').addClass('io-has-category-id');\r\n    \r\n    \/\/ Show the toggle buttons on category pages\r\n    $('.io_view_toggle_container').show();\r\n    console.log('[IO View Toggle] Toggle buttons displayed for category page');\r\n    \r\n    \/\/ Track if view toggle has been initialized\r\n    var isInitialized = false;\r\n    \r\n    \/\/ Initialize view toggle functionality\r\n    function initViewToggle(force) {\r\n        \/\/ Skip if already initialized unless forced\r\n        if (isInitialized && !force) {\r\n            console.log('[IO View Toggle] Already initialized, skipping');\r\n            return;\r\n        }\r\n        \r\n        console.log('[IO View Toggle] Initializing view toggle functionality');\r\n        \r\n        \/\/ Check if toggle buttons exist\r\n        if ($('.io_view_toggle_btn').length === 0) {\r\n            console.warn('[IO View Toggle] Toggle buttons not found in DOM');\r\n            return;\r\n        }\r\n        console.log('[IO View Toggle] Found', $('.io_view_toggle_btn').length, 'toggle buttons');\r\n        \r\n        \/\/ Check if category container exists\r\n        if ($('.io_catdiv2').length === 0) {\r\n            console.warn('[IO View Toggle] Category container (.io_catdiv2) not found');\r\n            return;\r\n        }\r\n        console.log('[IO View Toggle] Found', $('.io_catdiv2').length, 'category containers');\r\n        \r\n        \/\/ Get saved view preference from localStorage\r\n        var savedView = localStorage.getItem('io_category_view') || 'tile';\r\n        console.log('[IO View Toggle] Retrieved saved view preference:', savedView);\r\n        \r\n        \/\/ Set initial view\r\n        $('.io_catdiv2').removeClass('tile-view list-view').addClass(savedView + '-view');\r\n        console.log('[IO View Toggle] Applied initial view class:', savedView + '-view');\r\n        \r\n        \/\/ Update button states\r\n        $('.io_view_toggle_btn').removeClass('active');\r\n        $('.io_view_toggle_btn[data-view=\"' + savedView + '\"]').addClass('active');\r\n        console.log('[IO View Toggle] Updated button states, active button:', savedView);\r\n        \r\n        \/\/ Generate list view content if initial view is list\r\n        if (savedView === 'list') {\r\n            if (typeof generateListViewContent === 'function') {\r\n                generateListViewContent();\r\n            } else {\r\n                console.warn('[IO View Toggle] generateListViewContent function not available yet');\r\n            }\r\n        }\r\n        \r\n        \/\/ Log current items count\r\n        var itemCount = $('.io_item2_list').length;\r\n        console.log('[IO View Toggle] Found', itemCount, 'items in category');\r\n        \r\n        \/\/ Handle toggle button clicks using native JavaScript for better compatibility\r\n        \/\/ Remove any existing event listeners first\r\n        $('.io_view_toggle_btn').off('click.viewToggle');\r\n        \r\n        \/\/ Use native JavaScript addEventListener for more reliable event handling\r\n        var buttons = document.querySelectorAll('.io_view_toggle_btn');\r\n        console.log('[IO View Toggle] Attaching event listeners to', buttons.length, 'buttons using native JS');\r\n        \r\n        buttons.forEach(function(button) {\r\n            \/\/ Remove any existing listener\r\n            var newButton = button.cloneNode(true);\r\n            button.parentNode.replaceChild(newButton, button);\r\n            \r\n            \/\/ Add fresh event listener\r\n            newButton.addEventListener('click', function(e) {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n                \r\n                var view = this.getAttribute('data-view');\r\n                console.log('[IO View Toggle] Button clicked (native listener), switching to view:', view);\r\n                \r\n                \/\/ Generate list view content if switching to list view\r\n                if (view === 'list') {\r\n                    if (typeof generateListViewContent === 'function') {\r\n                        generateListViewContent();\r\n                    } else {\r\n                        console.warn('[IO View Toggle] generateListViewContent function not available');\r\n                    }\r\n                }\r\n                \r\n                \/\/ Update button states\r\n                document.querySelectorAll('.io_view_toggle_btn').forEach(function(btn) {\r\n                    btn.classList.remove('active');\r\n                });\r\n                this.classList.add('active');\r\n                console.log('[IO View Toggle] Updated button active states');\r\n                \r\n                \/\/ Update grid view\r\n                var catdiv = document.querySelector('.io_catdiv2');\r\n                if (catdiv) {\r\n                    catdiv.classList.remove('tile-view', 'list-view');\r\n                    catdiv.classList.add(view + '-view');\r\n                    console.log('[IO View Toggle] Applied view class:', view + '-view');\r\n                }\r\n                \r\n                \/\/ Save preference\r\n                localStorage.setItem('io_category_view', view);\r\n                console.log('[IO View Toggle] Saved view preference to localStorage:', view);\r\n                \r\n                \/\/ Debug: Log current layout state\r\n                setTimeout(function() {\r\n                    if (catdiv) {\r\n                        var containerClasses = catdiv.className;\r\n                        var visibleItems = document.querySelectorAll('.io_item2_list:not([style*=\"display: none\"])').length;\r\n                        console.log('[IO View Toggle] Layout updated - Container classes:', containerClasses);\r\n                        console.log('[IO View Toggle] Visible items after view change:', visibleItems);\r\n                        \r\n                        \/\/ Check if list view content is properly shown\/hidden\r\n                        if (view === 'list') {\r\n                            var visibleListContent = document.querySelectorAll('.io_list_view_content:not([style*=\"display: none\"])').length;\r\n                            console.log('[IO View Toggle] Visible list content elements:', visibleListContent);\r\n                        }\r\n                    }\r\n                }, 100);\r\n            }, true); \/\/ Use capture phase\r\n            \r\n            console.log('[IO View Toggle] Event listener attached to button:', newButton.getAttribute('data-view'));\r\n        });\r\n        \r\n        console.log('[IO View Toggle] Event handlers attached successfully');\r\n        \r\n        \/\/ Mark as initialized\r\n        isInitialized = true;\r\n    }\r\n    \r\n    \/\/ Initialize when page loads\r\n    console.log('[IO View Toggle] Starting initial setup');\r\n    initViewToggle();\r\n    \r\n    \/\/ Also initialize after dynamic content loads (if applicable)\r\n    $(document).on('io_content_loaded', function() {\r\n        console.log('[IO View Toggle] Dynamic content loaded event detected, reinitializing');\r\n        initViewToggle();\r\n    });\r\n    \r\n    \/\/ Debug: Monitor for DOM changes that might affect our functionality\r\n    if (typeof MutationObserver !== 'undefined') {\r\n        var mutationTimeout;\r\n        var lastItemCount = $('.io_item2_list').length;\r\n        \r\n        var observer = new MutationObserver(function(mutations) {\r\n            \/\/ Debounce: clear existing timeout and set a new one\r\n            clearTimeout(mutationTimeout);\r\n            \r\n            mutationTimeout = setTimeout(function() {\r\n                var currentItemCount = $('.io_item2_list').length;\r\n                \r\n                \/\/ Only trigger if we have new items that weren't there before\r\n                if (currentItemCount > lastItemCount) {\r\n                    console.log('[IO View Toggle] New items detected in DOM (' + lastItemCount + ' -> ' + currentItemCount + ')');\r\n                    lastItemCount = currentItemCount;\r\n                    \r\n                    \/\/ If already initialized, just generate list view content for new items if in list view\r\n                    if (isInitialized) {\r\n                        var currentView = localStorage.getItem('io_category_view') || 'tile';\r\n                        if (currentView === 'list') {\r\n                            console.log('[IO View Toggle] Generating list view content for new items');\r\n                            if (typeof generateListViewContent === 'function') {\r\n                                generateListViewContent();\r\n                            } else {\r\n                                console.warn('[IO View Toggle] generateListViewContent function not available');\r\n                            }\r\n                        }\r\n                    } else {\r\n                        \/\/ Not initialized yet, so initialize\r\n                        console.log('[IO View Toggle] Initializing due to new items');\r\n                        initViewToggle();\r\n                    }\r\n                }\r\n            }, 250); \/\/ 250ms debounce\r\n        });\r\n        \r\n        observer.observe(document.body, {\r\n            childList: true,\r\n            subtree: true\r\n        });\r\n        console.log('[IO View Toggle] DOM mutation observer started');\r\n    }\r\n    \r\n    \/\/ Debug: Log window resize events that might affect responsive layout\r\n    $(window).on('resize.viewToggle', function() {\r\n        var windowWidth = $(window).width();\r\n        var currentView = $('.io_catdiv2').hasClass('list-view') ? 'list' : 'tile';\r\n        console.log('[IO View Toggle] Window resized to:', windowWidth, 'px, current view:', currentView);\r\n    });\r\n    \r\n    console.log('[IO View Toggle] Initialization complete');\r\n});\r\n<\/script><!-- End Shortcoder content -->\n<!-- Start Shortcoder content --><div class=\"io_item2_listcat elementor-widget-heading\">\r\n  <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/bounce-house-rentals\/\">\r\n    <div class=\"cat_div\">\r\n      <div class=\"btn btn-primary view-product-button\">View Products<\/div>\r\n      <img decoding=\"async\" class=\"cat_img\" src=\"https:\/\/dev.rental.software\/newweb668\/wp-content\/uploads\/2025\/06\/Untitled20design-5_1736820017_big.png\" alt=\"Bounce House Rentals\" title=\"Bounce House Rentals\" \/>\r\n    <\/div>\r\n  <\/a>\r\n  <div class=\"cat_div_inner\">\r\n    <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/bounce-house-rentals\/\">\r\n      <p class=\"rentNameIO elementor-heading-title\">Bounce House Rentals<\/p>\r\n      <div class=\"catDescriptionIO catDescriptionIO_small elementor-widget-text-editor\"><span style=\"color: rgb(255, 255, 255);\">Inflatable bounce houses are great for letting some energy flow out. You can also purchase combo bouncers that include a slide or basketball hoop constructed inside, as well as a bounce zone. We specialize in bounce houses rentals and are glad to cater to the needs of your event.<\/span><\/div>\r\n    <\/a>\r\n  <\/div>\r\n<\/div><!-- End Shortcoder content -->\n<!-- Start Shortcoder content --><div class=\"io_item2_listcat elementor-widget-heading\">\r\n  <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/obstacle-course-rentals\/\">\r\n    <div class=\"cat_div\">\r\n      <div class=\"btn btn-primary view-product-button\">View Products<\/div>\r\n      <img decoding=\"async\" class=\"cat_img\" src=\"https:\/\/dev.rental.software\/newweb668\/wp-content\/uploads\/2025\/06\/IMG_1300_1727734472_big.jpeg\" alt=\"Obstacle Course Rentals\" title=\"Obstacle Course Rentals\" \/>\r\n    <\/div>\r\n  <\/a>\r\n  <div class=\"cat_div_inner\">\r\n    <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/obstacle-course-rentals\/\">\r\n      <p class=\"rentNameIO elementor-heading-title\">Obstacle Course Rentals<\/p>\r\n      <div class=\"catDescriptionIO catDescriptionIO_small elementor-widget-text-editor\"><span style=\"color: rgb(255, 255, 255);\">Obstacle Courses: Energetic playgrounds of inflatable fun, where participants race through tunnels, climb walls, and navigate challenges, testing their agility and speed. Perfect for parties or events looking to ignite some friendly competition.<\/span><\/div>\r\n    <\/a>\r\n  <\/div>\r\n<\/div><!-- End Shortcoder content -->\n<!-- Start Shortcoder content --><div class=\"io_item2_listcat elementor-widget-heading\">\r\n  <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/water-slide-rentals\/\">\r\n    <div class=\"cat_div\">\r\n      <div class=\"btn btn-primary view-product-button\">View Products<\/div>\r\n      <img decoding=\"async\" class=\"cat_img\" src=\"https:\/\/dev.rental.software\/newweb668\/wp-content\/uploads\/2025\/06\/HeroKiddo15FTOceanSharkCommercialGradeWaterSlidewithPoo.png\" alt=\"Water Slide Rentals\" title=\"Water Slide Rentals\" \/>\r\n    <\/div>\r\n  <\/a>\r\n  <div class=\"cat_div_inner\">\r\n    <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/water-slide-rentals\/\">\r\n      <p class=\"rentNameIO elementor-heading-title\">Water Slide Rentals<\/p>\r\n      <div class=\"catDescriptionIO catDescriptionIO_small elementor-widget-text-editor\"><span style=\"color: rgb(255, 255, 255);\">Water slides and water rides are a great option to cool off on an extremely hot summer day! Get wet and have fun with these fun rental water slides as well as water bounce houses.<\/span><\/div>\r\n    <\/a>\r\n  <\/div>\r\n<\/div><!-- End Shortcoder content -->\n<!-- Start Shortcoder content --><div class=\"io_item2_listcat elementor-widget-heading\">\r\n  <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/slides-combo-rentals\/\">\r\n    <div class=\"cat_div\">\r\n      <div class=\"btn btn-primary view-product-button\">View Products<\/div>\r\n      <img decoding=\"async\" class=\"cat_img\" src=\"https:\/\/dev.rental.software\/newweb668\/wp-content\/uploads\/2025\/06\/purple20slide_1727380661_big.png\" alt=\"Slides & Combo Rentals\" title=\"Slides & Combo Rentals\" \/>\r\n    <\/div>\r\n  <\/a>\r\n  <div class=\"cat_div_inner\">\r\n    <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/slides-combo-rentals\/\">\r\n      <p class=\"rentNameIO elementor-heading-title\">Slides & Combo Rentals<\/p>\r\n      <div class=\"catDescriptionIO catDescriptionIO_small elementor-widget-text-editor\"><span style=\"color: rgb(255, 255, 255);\">Inflatable bounce house combos are great for getting energy out. A few of these combo bouncers come with thing like a basketball hoop or slide that is built in with a bounce space! We specialize in bounce house rentals and would be delighted to help you with your party needs.<\/span><\/div>\r\n    <\/a>\r\n  <\/div>\r\n<\/div><!-- End Shortcoder content -->\n<!-- Start Shortcoder content --><div class=\"io_item2_listcat elementor-widget-heading\">\r\n  <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/new-inventory\/\">\r\n    <div class=\"cat_div\">\r\n      <div class=\"btn btn-primary view-product-button\">View Products<\/div>\r\n      <img decoding=\"async\" class=\"cat_img\" src=\"https:\/\/dev.rental.software\/newweb668\/wp-content\/uploads\/2025\/06\/New20Inventory_1746582518_big.png\" alt=\"New Inventory\" title=\"New Inventory\" \/>\r\n    <\/div>\r\n  <\/a>\r\n  <div class=\"cat_div_inner\">\r\n    <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/new-inventory\/\">\r\n      <p class=\"rentNameIO elementor-heading-title\">New Inventory<\/p>\r\n      <div class=\"catDescriptionIO catDescriptionIO_small elementor-widget-text-editor\"><\/p>\n<p data-end=\"167\" data-start=\"113\"><strong data-end=\"162\" data-start=\"113\"><span style=\"color: rgb(255, 255, 255);\">Discover What&rsquo;s New at Complete Celebrations!<\/span><\/strong><span style=\"color: rgb(255, 255, 255);\"> \ud83c\udf89<\/span><\/p>\n<p data-end=\"500\" data-start=\"169\"><span style=\"color: rgb(255, 255, 255);\">Check out our <strong data-end=\"212\" data-start=\"183\">latest inflatable rentals<\/strong> now available in <strong data-end=\"240\" data-start=\"230\">Lufkin<\/strong>, <strong data-end=\"257\" data-start=\"242\">Nacogdoches<\/strong>, and surrounding East Texas areas! From <strong data-end=\"315\" data-start=\"298\">bounce houses<\/strong> and <strong data-end=\"336\" data-start=\"320\">water slides<\/strong> to exciting new <strong data-end=\"373\" data-start=\"353\">obstacle courses<\/strong> and themed units, our <strong data-end=\"413\" data-start=\"396\">new inventory<\/strong> is perfect for birthday parties, school events, church gatherings, and backyard fun.<\/span><\/p>\n<p data-end=\"702\" data-start=\"502\"><span style=\"color: rgb(255, 255, 255);\">Every inflatable is cleaned, inspected, and ready to deliver safe, unforgettable entertainment for your next event. Be the first to book our newest additions and make your celebration one to remember!<\/span><\/p>\n<p data-end=\"771\" data-start=\"704\"><span style=\"color: rgb(255, 255, 255);\">\ud83d\udc49 Browse our newest units below and reserve your favorite today!<\/span><\/p>\n<p><\/div>\r\n    <\/a>\r\n  <\/div>\r\n<\/div><!-- End Shortcoder content -->\n<!-- Start Shortcoder content --><div class=\"io_item2_listcat elementor-widget-heading\">\r\n  <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/tents\/\">\r\n    <div class=\"cat_div\">\r\n      <div class=\"btn btn-primary view-product-button\">View Products<\/div>\r\n      <img decoding=\"async\" class=\"cat_img\" src=\"https:\/\/dev.rental.software\/newweb668\/wp-content\/uploads\/2025\/08\/tent_1755721198_big.png\" alt=\"Tents\" title=\"Tents\" \/>\r\n    <\/div>\r\n  <\/a>\r\n  <div class=\"cat_div_inner\">\r\n    <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/tents\/\">\r\n      <p class=\"rentNameIO elementor-heading-title\">Tents<\/p>\r\n      <div class=\"catDescriptionIO catDescriptionIO_small elementor-widget-text-editor\">Rental tents provide instant covered space for outdoor events, protecting guests, food, and gear from sun or rain. Available in diverse sizes, they turn lawns and parking lots into comfortable, usable event areas.<\/div>\r\n    <\/a>\r\n  <\/div>\r\n<\/div><!-- End Shortcoder content -->\n<!-- Start Shortcoder content --><div class=\"io_item2_listcat elementor-widget-heading\">\r\n  <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/tables-and-chairs\/\">\r\n    <div class=\"cat_div\">\r\n      <div class=\"btn btn-primary view-product-button\">View Products<\/div>\r\n      <img decoding=\"async\" class=\"cat_img\" src=\"https:\/\/dev.rental.software\/newweb668\/wp-content\/uploads\/2025\/08\/tables20and20chairs_1755721355_big.jpg\" alt=\"Tables and Chairs\" title=\"Tables and Chairs\" \/>\r\n    <\/div>\r\n  <\/a>\r\n  <div class=\"cat_div_inner\">\r\n    <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/tables-and-chairs\/\">\r\n      <p class=\"rentNameIO elementor-heading-title\">Tables and Chairs<\/p>\r\n      <div class=\"catDescriptionIO catDescriptionIO_small elementor-widget-text-editor\">Sturdy folding tables and comfortable chairs for rent&mdash;perfect for seating guests at parties, meetings, or outdoor events. They give you reliable surfaces and seating without the cost or storage headache of buying furniture.<\/div>\r\n    <\/a>\r\n  <\/div>\r\n<\/div><!-- End Shortcoder content -->\n<!-- Start Shortcoder content --><div class=\"io_item2_listcat elementor-widget-heading\">\r\n  <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/inflatable-games\/\">\r\n    <div class=\"cat_div\">\r\n      <div class=\"btn btn-primary view-product-button\">View Products<\/div>\r\n      <img decoding=\"async\" class=\"cat_img\" src=\"https:\/\/dev.rental.software\/newweb668\/wp-content\/uploads\/2025\/08\/3_1756155088_big.png\" alt=\"Inflatable Games\" title=\"Inflatable Games\" \/>\r\n    <\/div>\r\n  <\/a>\r\n  <div class=\"cat_div_inner\">\r\n    <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/inflatable-games\/\">\r\n      <p class=\"rentNameIO elementor-heading-title\">Inflatable Games<\/p>\r\n      <div class=\"catDescriptionIO catDescriptionIO_small elementor-widget-text-editor\"><\/p>\n<p style=\"font-family: Tahoma, Geneva, sans-serif;\"><\/p>\n<p><\/div>\r\n    <\/a>\r\n  <\/div>\r\n<\/div><!-- End Shortcoder content -->\n<!-- Start Shortcoder content --><div class=\"io_item2_listcat elementor-widget-heading\">\r\n  <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/complete-the-celebration-party-add-ons\/\">\r\n    <div class=\"cat_div\">\r\n      <div class=\"btn btn-primary view-product-button\">View Products<\/div>\r\n      <img decoding=\"async\" class=\"cat_img\" src=\"https:\/\/dev.rental.software\/newweb668\/wp-content\/uploads\/2026\/01\/40d8cc14-1c4e-446b-9c32-015a79112e96_1767994158_big.png\" alt=\"Complete the Celebration - Party Add Ons\" title=\"Complete the Celebration - Party Add Ons\" \/>\r\n    <\/div>\r\n  <\/a>\r\n  <div class=\"cat_div_inner\">\r\n    <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/complete-the-celebration-party-add-ons\/\">\r\n      <p class=\"rentNameIO elementor-heading-title\">Complete the Celebration - Party Add Ons<\/p>\r\n      <div class=\"catDescriptionIO catDescriptionIO_small elementor-widget-text-editor\">Give your event everything it needs with this Complete the Celebration add-on package, bundled with popular party extras to enhance guest comfort and fun. Perfect for streamlining setup and adding the finishing touches that make a celebration feel polished and memorable.<\/div>\r\n    <\/a>\r\n  <\/div>\r\n<\/div><!-- End Shortcoder content -->\n<!-- Start Shortcoder content --><div class=\"io_item2_listcat elementor-widget-heading\">\r\n  <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/foam-parties\/\">\r\n    <div class=\"cat_div\">\r\n      <div class=\"btn btn-primary view-product-button\">View Products<\/div>\r\n      <img decoding=\"async\" class=\"cat_img\" src=\"https:\/\/dev.rental.software\/newweb668\/wp-content\/uploads\/2026\/01\/DE26C665-015F-4CD4-A456-C2C78E2A8D1E_1769118764_big.jpeg\" alt=\"Foam Parties\" title=\"Foam Parties\" \/>\r\n    <\/div>\r\n  <\/a>\r\n  <div class=\"cat_div_inner\">\r\n    <a href=\"https:\/\/dev.rental.software\/newweb668\/rentals\/foam-parties\/\">\r\n      <p class=\"rentNameIO elementor-heading-title\">Foam Parties<\/p>\r\n      <div class=\"catDescriptionIO catDescriptionIO_small elementor-widget-text-editor\">Turn any event into a sudsy, high-energy party by renting a foam party setup that generates thick, safe bubbles for dancing and play; perfect for kids\u2019 birthdays, school events, or summer gatherings where guests can splash, slide, and laugh in a frothy, supervised environment.<\/div>\r\n    <\/a>\r\n  <\/div>\r\n<\/div><!-- End Shortcoder content -->\n\r\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"io_meta_description":"","footnotes":""},"class_list":["post-1311","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/dev.rental.software\/newweb668\/wp-json\/wp\/v2\/pages\/1311","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dev.rental.software\/newweb668\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dev.rental.software\/newweb668\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dev.rental.software\/newweb668\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dev.rental.software\/newweb668\/wp-json\/wp\/v2\/comments?post=1311"}],"version-history":[{"count":8,"href":"https:\/\/dev.rental.software\/newweb668\/wp-json\/wp\/v2\/pages\/1311\/revisions"}],"predecessor-version":[{"id":6232,"href":"https:\/\/dev.rental.software\/newweb668\/wp-json\/wp\/v2\/pages\/1311\/revisions\/6232"}],"wp:attachment":[{"href":"https:\/\/dev.rental.software\/newweb668\/wp-json\/wp\/v2\/media?parent=1311"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}