'; return cell; } /**/ /**/ 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) { /* IO-21459 If we have no duration set (event not set in cart), and we are doing the call for the page live price, and we have the setting on where we want to display this price even if the event date is not set: We set the time_duration to 1 hour. This defaults the start date to January 1, 1970 with duration of 1 hour in the lead meaning it will be available and we have the one hour price. */ if((isNaN(time_duration) || time_duration===0) && price_only==1 && io_always_display_live_price == "on"){ time_duration = 1; if(!start_date){ start_date = getFormatteddate(new Date()); } if(!start_time){ start_time = getFormattedtime(new Date()); } }else if((isNaN(time_duration) || time_duration===0) && price_only==0 && io_hidetimes === "on"){ /* 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. */ time_duration = 1; }else if(isNaN(time_duration) || time_duration===0){ return; } url = "https://rental.software/quotes/check_availability_v2.php?callback=?"; if(window.location.href.indexOf("localhost") > -1){ //url = "http://localhost/bugs/quotes/check_availability_v2.php?callback=?"; url = "http://localhost/io/bugs/quotes/check_availability_v2.php?callback=?"; //url = "http://localhost/jbug/trunk/quotes/check_availability_v2.php?callback=?"; } if(!delivery_method) delivery_method = getCookie("io_delivery_method"); let address_data = { "address": getCookie("io_address"), "state": getCookie("io_state"), "city": getCookie("io_city"), "zip": getCookie("io_zip") }; if(!ioHasMarketingConsent()){ address_data = {"address":"", "state":"", "city":"", "zip":""}; } url += "&name=" + encodeURIComponent("Jump Around VA") + "&startdate=" + start_date + "&starttime=" + start_time + "&duration=" + time_duration + "&street=" + encodeURIComponent(address_data["address"]) + "&city=" + encodeURIComponent(address_data["city"]) + "&state=" + encodeURIComponent(address_data["state"]) + "&zip=" + encodeURIComponent(address_data["zip"]) + "&single_cart=" + singleCart + "&usecushion=1" + "&include_price=1" + "&showlocations=0" + "&rental_names=" + rental_names + "&rental_ids=" + rental_ids + "&cart_rental_names=" + cart_rental_names + "&cart_rental_ids=" + cart_rental_ids + "&return_id=" + return_id + "&delivery_method=" + delivery_method + "&temp=" + temp + "&skip_hidden_lead="+ skip_hidden_lead; if (custom_price_name) { ioCartLoaderIncrement(); jQuery.getJSON(url, function (data) { try { returnFunc(data, custom_price_name); } finally { ioCartLoaderDecrement(); } }); } else { ioCartLoaderIncrement(); jQuery.getJSON(url, function (data) { try { returnFunc(data); } finally { ioCartLoaderDecrement(); } }); } } function getUpsellsCall(start_date,start_time,time_duration,rental_ids,returnFunc) { if(rental_ids.replace(/[|]/g,"").length==0){return;} url = "https://rental.software/quotes/in_cart_upsell.php?callback=?"; if(window.location.href.indexOf("localhost") > -1){ //url = "http://localhost/bugs/quotes/in_cart_upsell.php?callback=?" url = "http://localhost/io/bugs/quotes/in_cart_upsell.php?callback=?" } url += "&name=" + encodeURIComponent("Jump Around VA") + "&startdate=" + start_date + "&starttime=" + start_time + "&duration=" + time_duration + "&usecushion=1" + "&include_price=1" + "&showlocations=0" + "&rental_ids=" + rental_ids; //IO-25557 if(window.location.href.indexOf("dev.rental.software") > -1)//if it is a dev site, we need to send { let pattern = /(https:\/\/dev\.rental\.software\/[^\/]+\/)/; let matches = window.location.href.match(pattern); matches && matches.length > 0 ? url += "&site=" + matches[0]:0; } else { url += "&site=" + window.location.host; } jQuery.getJSON(url, returnFunc); } /**/ /**/ function setLocationInLocalStorage(city) { try { const location_data = { city: city, timestamp: Date.now() }; localStorage.setItem(storage_key, JSON.stringify(location_data)); return true; } catch (e) { console.warn('Failed to save location to localStorage:', e); return false; } } function getLocationFromLocalStorage() { try { const location_data = localStorage.getItem(storage_key); if (location_data) { return JSON.parse(location_data); } } catch (e) { console.warn('Failed to retrieve location from localStorage:', e); } return null; } function displayLocation(city) { const location_element = jQuery('.io_geo_city'); const container_element = jQuery('#io_customer_geolocation'); if (location_element.length && container_element.length) { location_element.text(`${city}`); container_element.show(); return true; } return false; } function getCityFromIO(returnFunc) { var url = "https://rental.software/include/geolocation_handler.php?callback=?"; if(window.location.href.indexOf("localhost") > -1) { url = "http://localhost//features//include/geolocation_handler.php?callback=?"; } url += "&name=" + encodeURIComponent("Jump Around VA") + "&ip=" + encodeURIComponent(io_customer_ip); jQuery.getJSON(url, returnFunc); } function initializeGeolocation() { try { // Check local storage first const cached_location = getLocationFromLocalStorage(); if (cached_location && cached_location.city) { if (displayLocation(cached_location.city)) { return; } } // If no cached location, call the handler to get location getCityFromIO(function(location_data) { if (location_data && location_data.city && !location_data.error) { // Display and store the location if (displayLocation(location_data.city)) { setLocationInLocalStorage(location_data.city); } } else { console.warn('Failed to get location:', location_data ? location_data.error : 'Unknown error'); } }); } catch (error) { console.error('Geolocation initialization failed:', error); } } /**/ /**/ /** * Toggles the visibility of the cart loading overlay. * * @param {boolean} show - A boolean value to determine whether to show or hide the overlay. * If true, the overlay becomes visible; if false, it is hidden. * @return {void} This function does not return a value. */ function ioCartShowOverlay(show) { try { var overlay = document.getElementById('ioCartLoadingOverlay'); if (!overlay) return; if (show) { overlay.style.display = 'flex'; overlay.setAttribute('aria-hidden', 'false'); } else { overlay.style.display = 'none'; overlay.setAttribute('aria-hidden', 'true'); } } catch (e) {} } /** * Activates the cart loader by setting the loading state to active, initializing the loading count, * and displaying the overlay. Includes a fallback to deactivate the loader if no response is received * within a specified timeout period. * * @return {void} This method does not return a value. */ function ioCartLoaderActivate() { io_cart_loading_active = true; io_cart_loading_count = 0; ioCartShowOverlay(true); //fallback in case the availability call doesn't come back if (io_cart_loading_fallback_timer) clearTimeout(io_cart_loading_fallback_timer); io_cart_loading_fallback_timer = setTimeout(function () { if (io_cart_loading_active) { io_cart_loading_active = false; io_cart_loading_count = 0; ioCartShowOverlay(false); } }, 15000); } /** * Increments the count of active cart loading operations and ensures the cart overlay is displayed. * * This method increases the `io_cart_loading_count` if the `io_cart_loading_active` flag is set to true. * It also calls the `ioCartShowOverlay` function with a true value to show the overlay. * * @return {void} This function does not return any value. */ function ioCartLoaderIncrement() { if (io_cart_loading_active) { io_cart_loading_count++; ioCartShowOverlay(true); } } /** * Decrements the `io_cart_loading_count` if `io_cart_loading_active` is true. * If the count reaches zero, it deactivates the loader, removes the overlay, * and clears the fallback timer */ function ioCartLoaderDecrement() { if (io_cart_loading_active) { io_cart_loading_count = Math.max(0, io_cart_loading_count - 1); if (io_cart_loading_count === 0) { io_cart_loading_active = false; ioCartShowOverlay(false); if (io_cart_loading_fallback_timer) { clearTimeout(io_cart_loading_fallback_timer); io_cart_loading_fallback_timer = null; } } } } /**/});
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. Please note if you enter a value here after taking measurements, you will need to take measurements again.