Amazing Obstacle course RENTALS in Cantonment, FL | (850) 529-0932 (2023)

Home » Inventory » Obstacle Courses

Delivering Clean & Sanitized Obstacle Course Rentals to Cantonment!

Set Event Date

Obstacle Courses are tons of fun in winter or summer!!!

Professional delivery to Pensacola, FL, Cantonment, FL, Pace, FL, Robertsdale, AL, Milton, FL, Ensley, FL, Ferry Pass, FL, Bellview, FL, Molino, FL, McDavid, FL and surrounding areas. Please submit a quote or contact us to be sure we service your area.

Our Obstacle Courses can be either wet or dry for fun all year long!!! Climb under and over, slide down, shoot basketball in the bounce house area and then slide down into a pool!!!

View Product 64′ Obstacle Course from $450.00item unavailable (change date) View Product Extreme Construction Zone Obstacle Course Wet/Dry from $350.00item unavailable (change date) View Product 32′ Obstacle Course from $250.00item unavailable (change date)

Why Choose gulf Coast obstacle courses?

At Gulf Coast Water Slides & Bounce Houses we rent bounce houses, water slides, obstacle courses, and party rental equipment. We rent obstacle course rentals in Cantonment, FL, and surrounding cities. We are fully licensed and insured. All of our inflatable obstacle course rentals are cleaned and sanitized between each rental. We are committed to making sure that your children are playing in a clean, well-maintained, and safe inflatable bouncer. All our inflatable rentals are 100% lead-free, you may not think about the safety of your inflatable rental but we do. Safety is not an option but a REQUIREMENT. The safety of your children is our #1 concern. So why rent your obstacle course rentals from us:

Our Party Rental Equipment & Bounce House Rentals

Gulf Coast Water Slides & Bounce Houses are the leader in providing Cantonment, Florida with the largest selection of bounce house rentals with slides. Everyone knows what a bounce house is but a lot of people don’t know what a combo slide bounce house is. A combo unit or combo slide bounce house is exactly what it sounds like, an inflatable slide attached to a bounce house. This is the best of both worlds all wrapped up in one great inflatable rental. These inflatable rentals are the most popular rental for kids’ birthday parties because you can use them wet when it is hot outside or dry in the cooler months. But did you know Gulf Coast Water Slides & Bounce Houses is more than just a bounce house company? That’s right we offer obstacle course rentals, water slide bounce house combos, obstacle course rentals, and party equipment rentals like generators. Check out our inventory below.

  • Water Slide Rentals in Cantonment FL – Water slides are the best inflatable rentals on those hot summer Florida days! Great for all ages so get out there and have some fun!

  • Combo Slide Bounce House Rentals in Cantonment FL – A bounce house and inflatable slide in one fun inflatable! Can’t you already hear the giggles and laughter?

  • Obstacle Course Rentals in Cantonment FL – An inflatable challenge for all ages. There are tunnels, logs, pop-ups, and slides all wrapped into one incredible inflatable rental.

  • Equipment Rentals in Cantonment FL – Power and issue? Not anymore with our Generator Rentals.

Gulf Coast Water Slides & Bounce Houses Delivery Area!

Gulf Coast Water Slides & Bounce House Delivers to Cantonment, Florida, and surrounding cities like Pensacola, FL, Pace, FL, Buelah, FL, Molino, FL, and many more. If you don’t see your city listed it is not a problem. Call the office and talk with one of our friendly event specialists to see if we can deliver your next obstacle course rentals to your city!

Contact Gulf Coast Water Slides & Bounce Houses Now To Reserve Your Next obstacle course! 850-529-0932

Our Service Area

We Proudly offer clean, on time delivery to the following areas:

  • Cantonment
  • Pensacola
  • Pace
  • Buelah
  • Molino

Is your event outside of our listed area? Contact Us below as we frequently deliver to events farther out and sometimes special accommodations can be made.

NOTE: Extra fees may vary depending on how far youare outside our service area

Contact Us

Have questions? We have answers! Can’t find what you’re looking for or curious about one of our products? Don’t hesitate to give us a call or use our contact form to reach out to us anytime!

  • (850) 610-3727
  • gulfcoastwsbh@gmail.com
  • 3865 Hwy 297A Cantonment, FL 32533
  • Blog

Copyright ©2020Gulf Coast Water Slides and Bounce Houses LLC Cantonment FLAll Rights Reserved | Rental Software Powered ByInflatableOffice

Days


Start

End




Apply

Cancel

Change Date

Some items are not available for the selected delivery method.

Subtotal (estimate):

Check Delivery

Delivery Fee (Change Address):

Continue Shopping Checkout

"); let sel = jQuery(""); sel.append("

") jQuery("[id^=io_acc_shortname_"+main_rental_id+"]").each(function(){ sel.append("

") if(this.id.split("_").length > 4){ let split_id = this.id.split("_"); let option_rental_id = split_id[split_id.length - 1]; let sel2 = jQuery(""); sel2.append("

") jQuery("[id^=io_acc_shortname_"+option_rental_id+"_]").each(function(){ sel2.append("

") }); sel_div.append(sel2); } }); sel_div.prepend(sel); jQuery(".io_product_acc_pkg").replaceWith(sel_div); } } if(io_brand == "PW"){ jQuery(".io_product_price_box").attr("style", "display: none !important;"); jQuery(".io_product_price_sqfoot").attr("style", "display: grid !important;"); } setTimeout(simpleCart.init, 100); }); /*end of on-ready*/ /**/ /*

*/ function rid_in_batch(rid, batch_ids){ let result = batch_ids.filter(function(batch){ if(batch.includes(this)) return true; }, rid); return result } function set_cart_time_instructions(){ /* Making it clearer that customers need to set the time in order to see pricing and availability. */ let instructions_container = jQuery(""); let instructions = ""; if(multi_day){ instructions += "Select the event date or date range using the calendar"; }else{ instructions += "Select the event date using the calendar"; } instructions += "."; instructions_container.text(instructions); jQuery("#cartCalendar").append(instructions_container); } function live_pricing_is_on(){ /* Checks to see if live pricing is on. Assumes it is on unless one of the following conditions: The setting Hide Live Price is off. The setting Show Weekend/Weekday Pricing is off. Delivery method pricing is enabled by default. We are on an item page that uses delivery method pricing. */ if(io_hide_live_prices != 1 || io_weekEndPrice != "on" || io_delivery_prices["default"].length != 0 || jQuery(".io_product_infobox .item_rentalid").innerText in io_delivery_prices["override"]){ return false; } return true; } function allow_same_day_select_on_checkout(){ jQuery(".jquery-datepicker").datepicker("option", "minDate", 0); } function show_or_hide_required_info_message(){ if(io_info_required == "on"){ if(!all_info_provided()){ jQuery("#io_all_prices").hide(); jQuery("#item_additonal_info_open_message").show(); }else{ jQuery("#io_all_prices").show(); jQuery("#item_additonal_info_open_message").hide(); } } } function all_info_provided(){ /* This is used for when the "Hide all pricing on page until information is provided" setting is on price settings. */ let all_data_provided = true; let io_required_data = io_info_required_data; for (const [data, value] of Object.entries(io_required_data)) { if(value == 1){ if(!getCookie(data)){ all_data_provided = false } } } if(live_pricing_is_on() && !event_time_set()) { all_data_provided = false; } return all_data_provided; } function event_time_set(){ if(getCookie("timeStart") && getCookie("timeEnd") && getCookie("dateStart") && getCookie("dateEnd")){ return true; } else{ return false } } function show_cart_message(){ message_container = jQuery("#cartCustomMessage"); message_container.html(io_cart_message); message_container.show(); } function deliveryMethodSelected(){ setCookie("io_delivery_method", jQuery(".ioDeliveryMethods option:selected").text(), 14); checkRestrictedDeliveries(); } function adjustPicBoxForHeader(){ /* For some reason its hard to get css with querySelector so we use jQuery to get the picbox. */ pic_box = jQuery(".io_product_picbox"); io_header = document.querySelector(".io_header"); if(pic_box != null && pic_box.css("position") == "sticky"){ if(io_header != null){ header_height = io_header.offsetHeight; pic_box.css("top", (10+header_height).toString()+"px"); } else{ possible_headers = document.querySelectorAll("header,section") possible_headers.forEach((ele) =>{ if(ele.style.top == "0px" && (ele.style.position == "fixed" || ele.style.position == "sticky")){ header = ele; header_height = header.offsetHeight; pic_box.css("top", (10+header_height).toString()+"px"); } }); } } } function cart_times_all_set(){ if(jQuery("#ioCartTimeSelectContainer [name=dateStart]").val() == ""){ return false; } if(io_hidetimes === "off" || io_hidetimes === ""){ if(jQuery("#ioCartTimeSelectContainer [name=timeStart]").val() == ""){ return false; } if(jQuery("#ioCartTimeSelectContainer [name=timeEnd]").val() == ""){ return false; } } return true; } function checkRestrictedDeliveries(){ let items = simpleCart.items() let restrictions_found = false; for(i in items){ let rid = items[i].get("rentalid"); if(typeof jQuery(".ioDeliveryMethods").val() != "undefined"){ if(io_delivery_methods[jQuery(".ioDeliveryMethods").val()]["restricted"].includes(rid)){ jQuery("#deliveryMethodWarning").show(); restrictions_found = true; } } } if(!restrictions_found){ jQuery("#deliveryMethodWarning").hide(); } } function display_cart_warning(item){ let cart_warning_container = jQuery("#cartWarning"); // Check if an event date if not we should tell them to set it. event_times = getAvailTimes(); if(!event_times[0] || !event_times[1]){ cart_warning_container.text("Please set the date and time for your event above."); cart_warning_container.show() return false; } let item_name = item.get("name"); let item_timeslots = item.get("timeslots"); let timeslot_name = getTimeslotName(item_timeslots); let stop_loop = false; if(item_timeslots){ if(jQuery(item_timeslots).nodeName == "SELECT"){ /* NOTE: It should not be possible for timeslots to be empty. But in the event they somehow are, we should have this here. */ /* timeslots */ var timeslot_sel_range = jQuery(".item-timeslots [name=\""+timeslot_name+"\"] option:selected").val(); if(typeof timeslot_sel_range != "undefined"){ var [start_time, end_time] = break_timeslot_sel_range(timeslot_sel_range); } }else{ /* timepickers */ let [start_timepicker, end_timepicker] = get_cart_timepickers(timeslot_name); var start_time = start_timepicker.value; var end_time = end_timepicker.value; } if(!start_time || !end_time){ cart_warning_container.text("Please select a time range for the following item: " + item_name); cart_warning_container.show() stop_loop = true; } } else{ cart_warning_container.text("Some items are not available on this date."); cart_warning_container.show() } return stop_loop } function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); var expires = "expires=" + d.toUTCString(); document.cookie = cname + "=" + cvalue + "; " + expires + ";path=/"; } function getCookie(cname) { var name = cname + "="; var ca = document.cookie.split(";"); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == " ") c = c.substring(1); if (c.indexOf(name) == 0) return c.substring(name.length, c.length); } return ""; } function break_timeslot_sel_range(timeslot_sel_range){ /* Takes a time range given by selected timeslot and gets the start and end time removing meridiem.*/ timeslot_sel_arr = timeslot_sel_range.split(" - "); var start_time = timeslot_sel_arr[0].replace("am"," am").replace("pm"," pm").replace(" "," "); var end_time = timeslot_sel_arr[1].replace("am"," am").replace("pm"," pm").replace(" "," "); return Array(start_time, end_time); } function getAvailTimes(){ /* Commonly used helper function. Accomplishes two things: Returns an array containing start_date, start_time, and event duration. Sets cookies for start and end date, and start and end time. Uses the inputs available in the cart if they are filled out, so dateStart, dateEnd, timeStart, and timeEnd. 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. */ let start_date = jQuery("input[name=dateStart]").val(); let end_date = jQuery("input[name=dateEnd]").val(); if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day"){ let cart_company_timeslot_selected = jQuery(".ioCartCompanyTimeslots option:selected").first().val(); if(cart_company_timeslot_selected){ setCookie("company_timeslot_selected", cart_company_timeslot_selected, 14); cart_company_timeslot_selected = cart_company_timeslot_selected.split("-"); var start_time = cart_company_timeslot_selected[0].trim(); var end_time = cart_company_timeslot_selected[1].trim(); } } else { var start_time = jQuery("input[name=timeStart]").val(); var end_time = jQuery("input[name=timeEnd]").val(); } if (start_date.length == 0) { start_date = getCookie("dateStart"); end_date = getCookie("dateEnd"); start_time = getCookie("timeStart"); end_time = getCookie("timeEnd"); } if(start_time.length == 0){ start_time = start_default; } if(end_time.length == 0){ end_time = end_default; } /* no past dates */ if(start_date.length != 0 && convertDateStringtoDateObject(start_date, start_time) < new Date()){ start_date=""; end_date=""; } /* setCookie("checkDate", start_date, 14); */ setCookie("dateStart", start_date, 14); setCookie("dateEnd", end_date, 14); setCookie("timeStart", start_time, 14); setCookie("timeEnd", end_time, 14); /* If we are using the information gathering tool, we do not want to show this message.*/ if( live_pricing_is_on() && io_info_required == "off" ){ if(!event_time_set() && io_always_display_live_price != "on"){ jQuery("#item_live_price_time_set_message").show(); }else{ jQuery("#item_live_price_time_set_message").hide(); } } var newDate1 = convertDateStringtoDateObject(start_date, start_time); var newDate2 = convertDateStringtoDateObject(end_date, end_time); let time_duration = ((newDate2 - newDate1) / 3600) / 1000; return [start_date,start_time,time_duration]; } function getAllRentalIDsFromCart(){ let rental_ids = ""; jQuery("[id^='cartItem_']").each(function(){ children = this.children for(let i = 0; i < children.length; ++i){ if(children[i].className == "item-rentalid") { rental_ids += children[i].innerText + "|"; break; } } }); return rental_ids } /*

*/ /*

*/ function init_date_timepicker_for_info_header(){ jQuery(".ioInfoDatepicker").datepicker({ changeMonth: true, changeYear: true, dateFormat: dateFormat, rangeSelect: true, numberOfMonths: 1, stepMonths: 1, speed: "fast", showOn: "both", onChangeMonthYear: cal_onChangeMonthYear, buttonText: "Calendar", minDate: 1, firstDay: 0 }); jQuery("#ioHeaderDateStart").datepicker("option", { onSelect: set_info_header_end_date }); if(restrictTimes){ jQuery(".ioInfoTimepicker").timepicker({ startTime: new Date(0, 0, 10, 0, 0, 0), endTime: new Date(0, 0, 0, 20, 0, 0, 0), minTime:restrictTimeStart, maxTime:restrictTimeEnd, /*show24Hours: $show24Hours,*/ timeFormat: timeFormat, separator: ":", className: "elementor-widget-text-editor", step: 15, disableTouchKeyboard: true }); } else{ jQuery(".ioInfoTimepicker").timepicker({ startTime: new Date(0, 0, 10, 0, 0, 0), endTime: new Date(0, 0, 0, 20, 0, 0, 0), /*show24Hours: $show24Hours,*/ timeFormat: timeFormat, separator: ":", className: "elementor-widget-text-editor", step: 15, disableTouchKeyboard: true }); } setTimeout(setUpTimeRestrictions_infoHeaderTimepickers, 500); } function saveInfoHeader(){ let info_header_start_date = jQuery("[id$=ioHeaderDateStart]"); let info_header_end_date = jQuery("[id$=ioHeaderDateEnd]"); let info_header_start_time = jQuery("[id$=ioHeaderTimeStart]"); let info_header_end_time = jQuery("[id$=ioHeaderTimeEnd]"); let info_header_address = jQuery("[id$=ioHeaderAddress]"); let info_header_city = jQuery("[id$=ioHeaderCity]"); let info_header_state = jQuery("[id$=ioHeaderState]"); let info_header_zip = jQuery("[id$=ioHeaderZipCode]"); let info_header_phone = jQuery("[id$=ioHeaderPhone]"); let info_header_email = jQuery("[id$=ioHeaderEmail]"); if(info_header_start_time.val()) setCookie("timeStart", info_header_start_time.val(), 14); if(info_header_end_time.val()) setCookie("timeEnd", info_header_end_time.val(), 14); if(info_header_start_date.val()) setCookie("dateStart", info_header_start_date.val(), 14); if(info_header_end_date.val()) setCookie("dateEnd", info_header_end_date.val(), 14); if(info_header_address.val()) setCookie("address", info_header_address.val(), 14); if(info_header_city.val()) setCookie("city", info_header_city.val(), 14); if(info_header_state.val()) setCookie("state", info_header_state.val(), 14); if(info_header_zip.val()) setCookie("zip", info_header_zip.val(), 14); if(info_header_phone.val()) setCookie("phone", info_header_phone.val(), 14); if(info_header_email.val()) setCookie("email", info_header_email.val(), 14); jQuery(".checkmark").show(); setTimeout(function(){jQuery(".checkmark").hide()}, 1500); /* Set information in the cart. */ calCancel(); /* Stop form from doing anything else for elementor */ // jpa - still allow, turn off actions in form if wanted. to turn off io lead submission use the plugin settings //event.preventDefault(); //event.stopPropagation(); return true; } function set_info_header_values(){ let info_header_start_date = jQuery("[id$=ioHeaderDateStart]"); let info_header_end_date = jQuery("[id$=ioHeaderDateEnd]"); let info_header_start_time = jQuery("[id$=ioHeaderTimeStart]"); let info_header_end_time = jQuery("[id$=ioHeaderTimeEnd]"); let info_header_street = jQuery("[id$=ioHeaderAddress]"); let info_header_city = jQuery("[id$=ioHeaderCity]"); let info_header_state = jQuery("[id$=ioHeaderState]"); let info_header_zip = jQuery("[id$=ioHeaderZipCode]"); let info_header_phone = jQuery("[id$=ioHeaderPhone]"); let info_header_email = jQuery("[id$=ioHeaderEmail]"); if(getCookie("timeStart")) info_header_start_time.val(getCookie("timeStart")); if(getCookie("timeEnd")) info_header_end_time.val(getCookie("timeEnd")); if(getCookie("dateStart")) info_header_start_date.val(getCookie("dateStart")); if(getCookie("dateEnd")) info_header_end_date.val(getCookie("dateEnd")); if(getCookie("address")) info_header_street.val(getCookie("address")); if(getCookie("city")) info_header_city.val(getCookie("city")); if(getCookie("state")) info_header_state.val(getCookie("state")); if(getCookie("zip")) info_header_zip.val(getCookie("zip")); if(getCookie("phone")) info_header_phone.val(getCookie("phone")); if(getCookie("email")) info_header_email.val(getCookie("email")); } function add_classes_and_onClicks(){ /* First set up for dates */ let info_header_start_date = jQuery("#ioHeaderDateStart"); let info_header_end_date = jQuery("#ioHeaderDateEnd"); info_header_start_date.addClass("ioInfoDatepicker"); info_header_end_date.addClass("ioInfoDatepicker"); /* Now Timepickers */ let info_header_start_time = jQuery("#ioHeaderTimeStart"); let info_header_end_time = jQuery("#ioHeaderTimeEnd"); info_header_start_time.addClass("ioInfoTimepicker"); info_header_end_time.addClass("ioInfoTimepicker"); /* Add the onClick to the button */ let button = jQuery("#ioInfoHeaderSubmit"); button.click(saveInfoHeader); button.css("cursor", "pointer"); /* Init datepicker and timepickers */ init_date_timepicker_for_info_header(); /* Lastly set the values if they are set already */ set_info_header_values(); } function remove_set_event_buttton(){ let set_event_button = jQuery(".pageDateRangeWrapper"); if(set_event_button.length > 0) set_event_button.hide(); } function set_info_header_end_date(){ if(!jQuery("#ioHeaderDateEnd").val()){ jQuery("#ioHeaderDateEnd").val(jQuery("#ioHeaderDateStart").val()) } jQuery("#ioHeaderDateEnd").datepicker("option", { minDate: new Date(jQuery("#ioHeaderDateStart").val()) }); } /*

*/ /*

*/ function accDDClicked(event){ this_element = jQuery(this) if(!this_element.prop("selected")){ pid = event.data.pid accLmt = event.data.accLmt all_elements = jQuery("[id^=io_acc_"+pid+"_]") let count = 0; /* Tried using .filter and .length to get the count of selected items but could not make it work. */ for(i = 0; i < all_elements.length; ++i){ if(all_elements[i].selected){ ++count; } } if(accLmt == 0){ this_element.css("border", "5px solid #bbb"); this_element.prop("selected", true); } else if(count >= accLmt){ let selected_value = jQuery("[id^=io_acc_"+pid+"_]").filter(function() { return this["selected"]; }); /* be sure to unselect other slected values if our acc limit has been reached. */ selected_value.prop("selected", false); selected_value.css("border", "1px solid #bbb"); } this_element.css("border", "5px solid #bbb"); this_element.prop("selected", true); } else{ this_element.prop("selected", false); this_element.css("border", "1px solid #bbb"); } } /* when accessory choice is clicked */ function accOnClick(acc_select=null){ /* set name/img back to original main in case they are just clicking on a 1st level size option */ jQuery(".io_product_title.item_name").html(main_name_orig); jQuery(".io_product_container .item_image").first().attr("src",main_img_src); jQuery(".io_product_container .item_image").first().attr("data-src",main_img_src); jQuery(".io_product_container .item_encoded").first().html(main_encoded); jQuery(".io_product_container .io_image_big").first().attr("src",main_img_src); jQuery(".io_product_container .io_image_big").first().attr("data-src",main_img_src); let main_id = jQuery(".io_product_container .item_rentalid").first().text(); let main_id_arr = main_id.split(":") jQuery(".io_product_container .item_rentalid").html(main_id_arr[0]); let clk_id; if(jQuery(acc_select).find(":selected").val()){ clk_id = jQuery(acc_select).find(":selected").val().replace("io_acc_shortname_",""); }else{ clk_id = this.id.replace("io_acc_shortname_",""); } clk_id = clk_id.replace("iothumb_",""); let click_id_arr = clk_id.split("_"); /* let pid = main_id; */ /* if(main_id.split("_").length>1) pid = parseInt(click_id_arr[0]); */ for (let [key, value] of acc_obj_relate) { let id = key; if(acc_obj_relate.get(key)[0]!=undefined){ for (key2 in acc_obj_relate.get(key)) { let id = acc_obj_relate.get(key)[key2]; if(typeof id == "object"){ /* 3rd level */ for (key3 in acc_obj_relate.get(key)[key2]) { let id = acc_obj_relate.get(key)[key2][key3]; if(typeof id != "object"){ displayPackageChoices(clk_id,key2,id,acc_obj_relate.get(key)[key2]); } } }else{ displayPackageChoices(clk_id,key,id,acc_obj_relate.get(key)); } } }else{ displayPackageChoices(clk_id,0,id,acc_obj_relate); } } } /* show/hide accessory levels as needed */ /* clk_id: one they clicked on, pid: parentid, id: iterator, arr: relationship array */ function displayPackageChoices(clk_id,pid,id,arr){ let main_id = jQuery(".io_product_container .item_rentalid").first().text(); let main_arr = main_id.split("_"); if(main_arr.length>1) main_id = parseInt(main_arr[0]); let click_id_arr = clk_id.split("_"); elem = getAccElem(id,pid); if(click_id_arr[0]==pid || click_id_arr[1]==pid || pid==0){ elem.style.display="inline-block"; }else{ elem.style.display="none"; } 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)){ updateMainItem(id,pid); } } /* update it with accessory data for choices */ var main_img_src = jQuery("#single_image").first().attr("href"); var main_name_orig = jQuery(".io_product_title.item_name").html(); var main_encoded = jQuery(".io_product_container .item_encoded").html(); var main_desc = jQuery(".io_product_detailbox .io_product_desc").html(); function updateMainItem(id,pid){ /* update add to cart btn, name, img, desc */ let name = ""; let name_enc = ""; let main_id = jQuery(".io_product_container .item_rentalid").first().text(); let main_arr = main_id.split(":"); if(main_arr.length>1) main_id = main_arr[0]; if(pid!=0){ name += jQuery("#io_acc_itemname_"+pid).html()+":"; name_enc += jQuery("#io_acc_itemname_"+pid).html()+":"; name += jQuery("#io_acc_shortname_"+id).html(); name_enc += jQuery("#io_acc_itemname_"+id).html(); }else{ pid = main_id; name += jQuery("#io_acc_itemname_"+id).html(); name_enc += jQuery("#io_acc_itemname_"+id).html(); } jQuery(".io_product_container .item_encoded").html(encodeURIComponent(name_enc.replace(/[\u2032\u2019]+/ig,"'"))); jQuery(".io_product_container .item_rentalid").html(main_id+":"+pid+"_"+id); jQuery(".io_product_title.item_name").html(name); if(jQuery("#io_acc_desc_"+pid+"_"+id).first().length>0){ jQuery(".io_product_container .io_product_desc").first().html(jQuery("#io_acc_desc_"+pid+"_"+id).first()[0].innerHTML); } /* swap accessory image with main image pic for drop-down type items (linens) */ let img = jQuery("#io_acc_imgbig_"+pid+"_"+id).first().attr("href"); if(img==null) img = jQuery("#iothumb_"+pid+"_"+id).first().attr("src") if(img==null){ }else{ if(img.length==0 && pid==main_id){ /* for 1 level dd items that have no img, use the main img */ img = main_img_src; } jQuery(".io_product_container .io_image_big").first().attr("src",img); jQuery(".io_product_container .io_image_big").first().attr("data-src",img); jQuery(".io_product_container .item_image").first().attr("src",jQuery("#iothumb_"+pid+"_"+id).first().attr("src")); jQuery(".io_product_container .item_image").first().attr("data-src",jQuery("#iothumb_"+pid+"_"+id).first().attr("src")); jQuery("#single_image").first().attr("href",img).show(); } checkAvailFilter(); } /* get either img or text for accessory choices */ function getAccElem(id,pid){ let path =pid+"_"+id; if(pid==0){ path=id; } let elem = null; try{ elem = document.querySelector("#ioAccButtonWrapper_"+path); }catch(e){} if(elem == null){ try{ elem = document.querySelector("#iothumb_"+path); }catch(e){} } if(elem==null){ try{ elem = document.querySelector("#io_product_acc_pkg_sel_"+pid); }catch(e){} if(elem!=null) return elem; }else{ return elem; } if(elem == null){ try{ elem = document.querySelector("#io_acc_shortname_"+path); }catch(e){} }else if(elem.src=="" | elem.getAttribute("data-src")==""){ try{ elem = document.querySelector("#io_acc_shortname_"+path); }catch(e){} }else if(elem.src.substr(-1)=="/"){ try{ elem = document.querySelector("#io_acc_shortname_"+path); }catch(e){} } if(elem==null){ try{ elem = document.querySelector("#io_acc_shortname_"+id); }catch(e){} } return elem; } /* create the accessory choice btn (img/text) */ function makeAccBtn(button_add,pid){ let newButton; if(button_add.nodeName=="IMG"){ newButton = button_add; let id = newButton.id.replace("iothumb_"+pid,""); var wrapper = document.createElement("div"); wrapper.setAttribute("id", "ioAccButtonWrapper_"+pid+id); wrapper.style.display = "inline-block"; wrapper.appendChild(newButton); let acc_name = document.createElement("span"); acc_name.style.overflow = "hidden"; acc_name.style.textOverflow = "ellipsis"; acc_name.style.maxWidth = "80px"; acc_name.style.display = "block"; acc_name.style.whiteSpace = "nowrap"; acc_name.textContent = jQuery("#io_acc_shortname"+id).text(); acc_name.classList.add("accTextName"); acc_name.setAttribute("id", "io_acc_shortname_"+pid+id); wrapper.appendChild(document.createElement("br")); wrapper.appendChild(acc_name); }else{ newButton = button_add.cloneNode(true); let id = newButton.id.replace("io_acc_shortname_",""); newButton.id = "io_acc_shortname_" + pid + "_" + id; } newButton.classList.add("elementor-animation-grow"); newButton.classList.remove("item_image"); newButton.style="cursor:pointer;border: solid 1px grey"; newButton.classList.add("io_access_button"); newButton.style.display = "inline-block"; newButton.style.verticalAlign = "top"; newButton.onclick=accOnClick; if(newButton.nodeName=="IMG"){ newButton.style.minWidth = "80px"; newButton.style.width = "80px"; newButton.style.margin = "2px"; }else{ newButton.style.margin = "0px 2px 0px 2px"; } if(button_add.nodeName=="IMG"){ return wrapper } return newButton; } /* when clicking the thumb swatches under main image (2nd image for an item) */ function updateMainPic(img) { /* calling image */ let thumb_id = img.id; let big_id = thumb_id.replace('thumb', 'big'); /* main image we are updating */ let main_img = document.querySelector(".io_image_big"); let img_big = document.querySelector("#" + big_id); main_img.src = img_big.href; /* document.querySelector("#single_image").href =img_big.href; */ } /*

*/ /*

*/ function calApply() { /* reset timeslots if filtering is on */ filterTimeslotsByDay_itemTimeslots(); simpleCart.update(); if(cart_times_all_set()){ setCookie("dateApplied", "true", 1) checkAvailAll(); calCancel(); } let io_required_data = io_info_required_data; for (const [data, value] of Object.entries(io_required_data)) { if(value == 1){ setCookie(data, jQuery("#io_im_"+data).val(), 14); } } /* Check if information gathering header exists. If it does, update the times on there. */ if(jQuery("#ioInfoHeader").length){ jQuery("#ioHeaderTimeStart").val(jQuery("[name=timeStart]").val()); jQuery("#ioHeaderTimeEnd").val(jQuery("[name=timeEnd]").val()); jQuery("#ioHeaderDateStart").val(jQuery("[name=dateStart]").val()); jQuery("#ioHeaderDateEnd").val(jQuery("[name=dateEnd]").val()); } show_or_hide_required_info_message() /* if(!cartStayOpen) cartHide(); */ } function calCancel() { click_count = 0; jQuery("input[name=dateStart]").val(getCookie("dateStart")); jQuery("input[name=dateEnd]").val(getCookie("dateEnd")); if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day" && getCookie("company_timeslot_selected")){ jQuery(".ioCartCompanyTimeslots").val(getCookie("company_timeslot_selected")); } else{ jQuery("input[name=timeStart]").val(getCookie("timeStart")); jQuery("input[name=timeEnd]").val(getCookie("timeEnd")); } setCalBackground(); jQuery(".ioDateRange").html(smartFormatDateRange()) jQuery("#cartCalendar, #cartTimePicker").hide(); jQuery(".ioDateRange").show(); jQuery(".changeDateLinkWrapper").show(); } /* var cartStayOpen = false; */ function calSetDateRange(stayOpen) { /* if(stayOpen==1){ cartStayOpen = true; }else{ cartStayOpen = false; } */ jQuery(".changeDateLinkWrapper").hide(); jQuery("#cartCalendar, #cartTimePicker").show(); jQuery("#cartDateRange").hide(); } function smartFormatDateRange() { let start_date = jQuery("input[name=dateStart]").val(); let end_date = jQuery("input[name=dateEnd]").val(); if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day"){ let cart_company_timeslot_selected = jQuery(".ioCartCompanyTimeslots option:selected").first().val(); if(cart_company_timeslot_selected){ setCookie("company_timeslot_selected", cart_company_timeslot_selected, 14); cart_company_timeslot_selected = cart_company_timeslot_selected.split("-"); var start_time = cart_company_timeslot_selected[0].trim(); var end_time = cart_company_timeslot_selected[1].trim(); } } else { var start_time = jQuery("input[name=timeStart]").val(); var end_time = jQuery("input[name=timeEnd]").val(); } let text = ""; text = start_date; if(io_hidetimes!="on") text += " " + start_time; if (start_date == end_date) { if(io_hidetimes!="on"){ text += " "; text += end_time; } } else { text += " "; text += end_date; if(io_hidetimes!="on") text += " " + end_time; } /* text += " "; */ return text; } function resetCalButtons() { jQuery("#cartCalendar .ui-datepicker-prev").addClass("fas fa-arrow-left").css("color", pallet_color1); jQuery("#cartCalendar .ui-datepicker-next").addClass("fas fa-arrow-right").css("color", pallet_color1); } function cal_onChangeMonthYear(year, month, obj) { setTimeout(resetCalButtons, 10); setTimeout(setCalBackground, 10); } function cal_onSelect(dateText, obj) { setTimeout(resetCalButtons, 10); let whatday_choice = ""; if(io_cartdayselect === "dropdown_options" && io_multidayquote === "on"){ let choice_obj = jQuery("#whatday"); if(choice_obj){ whatday_choice = choice_obj.val(); } } click_count++; end_timepicker = jQuery("input[name=timeEnd]"); let timeStart = jQuery("input[name=timeStart]").val(); if (timeStart == "") { jQuery("input[name=timeStart]").val(start_default); jQuery("input[name=timeEnd]").val(end_default); } if (click_count == 1 || !multi_day || whatday_choice==="Same Day" || whatday_choice==="Overnight") { jQuery("input[name=dateStart]").val(dateText); jQuery("input[name=dateEnd]").val(dateText) end_timepicker.timepicker("option",{"minTime": jQuery("input[name=timeStart]").val()}); if(EndTimeLessThanStartTime( jQuery("input[name=timeStart]").val(), end_timepicker.val(), jQuery("[name='dateStart']").val(), jQuery("[name='dateEnd']").val() ) ) { end_timepicker.val(""); } if(io_cartAllowSameDay == "on"){ restrictStartTimepickerOnSameDaySelect(dateText, jQuery("input[name=timeStart]"), end_timepicker); } } else if (click_count == 2) { jQuery("input[name=dateEnd]").val(dateText); let start_date_str = jQuery("input[name=dateStart]").val(); let start_date_obj = convertDateStringtoDateObject(start_date_str); let end_date_obj = convertDateStringtoDateObject(dateText); if(end_date_obj < start_date_obj){ jQuery("input[name=dateStart]").val(dateText); if(io_cartAllowSameDay == "on"){ restrictStartTimepickerOnSameDaySelect(dateText, jQuery("input[name=timeStart]"), end_timepicker); } } else{ end_timepicker.timepicker("option",{"minTime": io_restrict_time_start}); } click_count = 0; } else { click_count = 0; } //custom code for suncoast_event if(io_cartdayselect === "dropdown_options" && io_multidayquote === "on"){ endDisplay(); //daysSelect(); } filterTimeslotsByDay_companyTimeslots(); setTimeout(setCalBackground, 10); } function endDisplay(){ //todo: need to figure out if these work and set triggers // trigger enddisplay after date is selected or possibly when dateEnd changes? let choice = jQuery("#whatday").val(); setCookie("io_whatday", choice, 14); let dateStart = jQuery("[name=dateStart]"); let timeStart = jQuery("[name=timeStart]"); let dateEnd = jQuery("[name=dateEnd]"); let timeEnd = jQuery("[name=timeEnd]"); if(choice==='Overnight'){ let startdate = dateStart.val(); let starttime = io_overnightPickupTime; let endcalc_date_obj = new Date(buildDateobjectstring(startdate,dateFormat,starttime)); let duration_hrs = 24; let end_date_obj = new Date(endcalc_date_obj.getTime()+duration_hrs*60*60*1000); if(!isNaN(end_date_obj)){ dateEnd.val(getFormatteddate(end_date_obj)); timeEnd.val(getFormattedtime(end_date_obj)); timeEnd.attr('readonly','readonly'); } }else if(choice==='Multi-Day'){ timeEnd.removeAttr('readonly'); }else{ timeEnd.removeAttr('readonly'); } setTimeout(setCalBackground, 10); } function setCalBackground() { let dateStart_string = jQuery("input[name=dateStart]").val(); let dateEnd_string = jQuery("input[name=dateEnd]").val(); if (dateFormat == "d/m/yy") { let dateStartArray = dateStart_string.split("/"); let dateEndArray = dateEnd_string.split("/"); var dateStart = new Date(dateStartArray[2], Number(dateStartArray[1])-1, dateStartArray[0]); var dateEnd = new Date(dateEndArray[2], Number(dateEndArray[1])-1, dateEndArray[0]); } else { var dateStart = new Date(dateStart_string); var dateEnd = new Date(dateEnd_string); } let sday = dateStart.getDate(); let smonth = dateStart.getMonth(); let syear = dateStart.getFullYear(); let eday = dateEnd.getDate(); let emonth = dateEnd.getMonth(); let eyear = dateEnd.getFullYear(); /* clear any (in case of cancel) */ jQuery(".ui-datepicker-calendar [data-handler=selectDay]").css("background-color","initial"); /* set the selected ones */ jQuery("#cartCalendar [data-month=" + smonth + "][data-year=" + syear + "], #cartCalendar [data-month=" + emonth + "][data-year=" + eyear + "]").each(function (i) { let cday = jQuery(this).find("a").first().text(); let cmonth = jQuery(this).attr("data-month"); let cyear = jQuery(this).attr("data-year"); /* let dateCurrent = new Date(Date.UTC(cyear,cmonth,cday,12)); */ let dateCurrent = new Date(cyear, cmonth, cday); if (click_count == 1 && dateEnd_string.length == 0) dateEnd = dateStart; if (dateCurrent.getTime() == dateStart.getTime() && dateCurrent.getTime() == dateEnd.getTime()) { jQuery(this).css("border-radius", "6px 6px 6px 6px"); } else if (dateCurrent.getTime() == dateStart.getTime()) { jQuery(this).css("border-radius", "6px 0 0 6px"); } else if (dateCurrent.getTime() == dateEnd.getTime()) { jQuery(this).css("border-radius", "0 6px 6px 0"); } if (dateCurrent >= dateStart && dateCurrent <= dateEnd) { jQuery(this).css("background-color", pallet_color1); } }); } /*

*/ /*

*/ /* called from simplecart */ function timeslotChange(){ checkAvailCartTimeslots(); } function filterTimeslotsByDay_companyTimeslots(){ var weekday = new Array(); weekday[0] = "Sunday"; weekday[1] = "Monday"; weekday[2] = "Tuesday"; weekday[3] = "Wednesday"; weekday[4] = "Thursday"; weekday[5] = "Friday"; weekday[6] = "Saturday"; let times = getAvailTimes(); let start_date = times[0]; let day = weekday[new Date(start_date).getDay()]; let selected_option_label = jQuery(".ioCartCompanyTimeslots option:selected").first().text().toLowerCase(); if(optionHasDay(weekday, selected_option_label)){ if(selected_option_label.indexOf(day.toLowerCase()) === -1){ jQuery(".ioCartCompanyTimeslots").val(""); } } if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day"){ jQuery(".ioCartCompanyTimeslots > option").each(function() { if(optionHasDay(weekday, this.text.toLowerCase())){ for(i=0; i 0){ var timeslot_name = getTimeslotName(timeslots_html); if(typeof item.get("timeslots-orig") == "undefined"){ var timeslots_obj = jQuery.parseHTML(timeslots_html); } else{ var timeslots_obj = jQuery.parseHTML(item.get('timeslots-orig')); } jQuery(timeslots_obj).find("option").each(function(){ if(optionHasDay(weekday, this.text.toLowerCase())){ for(i=0; i'+jQuery(timeslots_obj).html()+''); } } }); } function optionHasDay(weekdays, option_label){ for(i=0; i0){ item.set("timeslots",jQuery(".item-timeslots [name=\""+timeslot_name+"\"]")[0].outerHTML); } /* set on quote page */ jQuery(".controls [name=\""+timeslot_name+"\"] option").not(":selected").removeAttr("selected"); jQuery(".controls [name=\""+timeslot_name+"\"] option[value='"+jQuery(".item-timeslots [name=\""+timeslot_name+"\"] option:selected").val()+"']").attr("selected","selected"); } function setTimePicker(item, timepicker_name){ let [start_timepicker, end_timepicker] = get_cart_timepickers(timepicker_name); let start_time = start_timepicker.value; let end_time = end_timepicker.value; if(!start_time){ start_timepicker.style.borderColor = "red"; } else{ start_timepicker.style.borderColor = ""; } if(!end_time){ end_timepicker.style.borderColor = "red"; } else{ end_timepicker.style.borderColor = ""; } let start_timepicker_html = start_timepicker.outerHTML; let end_timepicker_html = end_timepicker.outerHTML; if(document.querySelectorAll(".item-timeslots [name=\""+timepicker_name+"\"]").length>0){ start_timepicker_html = addOrReplaceValueInTimepicker(start_timepicker_html, start_time); end_timepicker_html = addOrReplaceValueInTimepicker(end_timepicker_html, end_time); item.set("timeslots", '

Start: '+start_timepicker_html+' End: '+end_timepicker_html+'

'); } /* set on quote page */ /* For linen type items with timepickers */ let rental_id = item.get("rentalid"); let split_on_colon = rental_id.split(":"); if(split_on_colon.length > 1){ fix_time_name_for_linen_rid(timepicker_name, split_on_colon, start_time, end_time, rental_id) }else{ let quote_page_start_timepicker = document.querySelectorAll(".controls [name=\""+timepicker_name.replace("io_timepicker_", "starttime_")+"\"]")[0]; let quote_page_end_timepicker = document.querySelectorAll(".controls [name=\""+timepicker_name.replace("io_timepicker_", "endtime_")+"\"]")[0]; if(quote_page_start_timepicker != null && quote_page_end_timepicker != null){ quote_page_start_timepicker.value = start_time; quote_page_end_timepicker.value = end_time; } } } function fix_time_name_for_linen_rid(time_name, split_rid, start_time, end_time, rental_id){ for(let x = 0; x < split_rid.length; x++){ temp_timepicker_name = time_name.replace(rental_id, split_rid[x]); let quote_page_start_timepicker = document.querySelectorAll(".controls [name=\""+temp_timepicker_name.replace("io_timepicker_", "starttime_")+"\"]")[0]; let quote_page_end_timepicker = document.querySelectorAll(".controls [name=\""+temp_timepicker_name.replace("io_timepicker_", "endtime_")+"\"]")[0]; if(quote_page_start_timepicker != null && quote_page_end_timepicker != null){ quote_page_start_timepicker.value = start_time; quote_page_end_timepicker.value = end_time; } } } function addOrReplaceValueInTimepicker(timepicker_html, time_value){ if(timepicker_html.includes("value=")){ timepicker_html = [timepicker_html.slice(0, timepicker_html.indexOf("value=")), 'value="'+time_value+'"', timepicker_html.slice(timepicker_html.length-1)].join(""); }else{ /* No value defined. Add it at the end of the outer html. */ let position = timepicker_html.lastIndexOf(">"); timepicker_html = [timepicker_html.slice(0, position), ' value="'+time_value+'"', timepicker_html.slice(position)].join(""); } return timepicker_html } function restrictEndTimepickers(){ setUpTimeRestrictions_cartTimepickers() setUpTimeRestrictions_timeBasedItems() } function setUpTimeRestrictions_timeBasedItems(){ jQuery("input[name^=start_timeslot_]").change(function() { end_timepicker = jQuery("input[name='"+this.name.replace("start", "end")+"']"); end_timepicker = jQuery(end_timepicker[end_timepicker.length - 1]); end_timepicker.timepicker("option",{"minTime": jQuery(this).val()}); if( EndTimeLessThanStartTime( jQuery(this).val(), end_timepicker.val(), "0/0/0", "0/0/0" ) ){ end_timepicker.val(""); } }); } function setUpTimeRestrictions_cartTimepickers(){ jQuery("input[name=timeStart]").change(function() { end_timepicker = jQuery("[name='"+this.name.replace("Start", "End")+"']"); if(jQuery("[name='dateStart']").val() === jQuery("input[name='dateEnd']").val()){ end_timepicker.timepicker("option",{"minTime": jQuery(this).val()}); if(EndTimeLessThanStartTime( jQuery(this).val(), end_timepicker.val(), jQuery("[name='dateStart']").val(), jQuery("[name='dateEnd']").val() ) ) { end_timepicker.val(""); } } }); } function setUpTimeRestrictions_infoHeaderTimepickers(){ jQuery("#ioHeaderTimeStart").change(function() { end_timepicker = jQuery("#ioHeaderTimeEnd"); if(jQuery("#ioHeaderDateStart").val() === jQuery("#ioHeaderDateEnd").val()){ end_timepicker.timepicker("option",{"minTime": jQuery(this).val()}); if(EndTimeLessThanStartTime( jQuery(this).val(), end_timepicker.val(), jQuery("#ioHeaderDateStart").val(), jQuery("#ioHeaderDateEnd").val() ) ) { end_timepicker.val(""); } } }); } /* helper function to see if the value from a start timepicker is less than the string value of an end timepicker. param start_time: string representation of the start time picker. 12hr or 24hr. param end_time: string representation of the end time picker. 12hr or 24hr. 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. 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. */ function EndTimeLessThanStartTime(start_time, end_time, start_date, end_date){ if(!start_time || !end_time) return false; start_time = convert12HourTo24Hour(start_time); end_time = convert12HourTo24Hour(end_time); var split_start_date = start_date.split("/"); var split_end_date = end_date.split("/"); var startDate = buildDateObj(split_start_date, start_time); var endDate = buildDateObj(split_end_date, end_time); if(endDate < startDate){ return true; } else { return false; } } function get_cart_timepickers(timepicker_name){ let start_timepicker = document.getElementsByName(timepicker_name.replace("io_timepicker_", "start_timeslot_")); let end_timepicker = document.getElementsByName(timepicker_name.replace("io_timepicker_", "end_timeslot_")); start_timepicker = start_timepicker[start_timepicker.length-1]; end_timepicker = end_timepicker[end_timepicker.length-1]; return Array(start_timepicker, end_timepicker); } function restrictStartTimepickerOnSameDaySelect(start_date_str, start_timepicker, end_timepicker){ let selected_date_obj = convertDateStringtoDateObject(start_date_str); let current_date_obj = new Date(); if(current_date_obj.getDate() == selected_date_obj.getDate() && current_date_obj.getMonth() == selected_date_obj.getMonth() && current_date_obj.getYear() == selected_date_obj.getYear()){ let next_hour_time_stamp = current_date_obj.setMinutes(60); let next_hour_str = getFormattedtime(new Date(next_hour_time_stamp)) start_timepicker.timepicker("option",{"minTime": next_hour_str}); /* If the time in the input box is less than the time we just restricted too, then clear time inputs */ restricted_time_obj = convertDateStringtoDateObject(start_date_str, next_hour_str); currently_selected_time_obj = convertDateStringtoDateObject(start_date_str, start_timepicker.val()); if(currently_selected_time_obj < restricted_time_obj){ start_timepicker.val(next_hour_str); end_timepicker.val(""); end_timepicker.timepicker("option",{"minTime": next_hour_str}); } }else{ start_timepicker.timepicker("option",{"minTime": restrictTimeStart}); } } /*

*/ /*

*/ function cart_onUpdate() { /* need slight delay so simplecart updates before this runs */ setTimeout(cart_onUpdate2, 500); try{ for(var i=0;i Number(avail) || avail == "not") { /* item.set("availability",""+item.get("availability")+""); */ setTimeout(function () { jQuery("#cartItem_" + item_id + " .item-availability").css("color", "red") }, 10); //jQuery("#cartWarning").show(); stop_loop = display_cart_warning(item); hasUnavail = true; } else { jQuery("#cartItem_" + item_id + " .item-availability").css("color", "inherit"); } var timeslots_html = item.get("timeslots"); if(typeof timeslots_html != "undefined"){ if(timeslots_html.length > 0){ var timeslot_name = getTimeslotName(timeslots_html); setTimeslotSelected(item, timeslot_name); } } if(stop_loop){ return false; } }); if(gift_cards_only){ jQuery("#cartCalendarTimePickerContainer").hide(); }else{ jQuery("#cartCalendarTimePickerContainer").show(); } if(hasUnavail && io_checkavail!="off"){ jQuery(".simpleCart_checkout").removeClass("simpleCart_checkout").addClass("simpleCart_checkout_off").trigger("classChange").click(cartShow); }else if(io_checkavail!="off"){ jQuery(".simpleCart_checkout_off").removeClass("simpleCart_checkout_off").addClass("simpleCart_checkout").trigger("classChange"); } add_cart_buttons = document.querySelectorAll("[class*=add_cart_]"); if(add_cart_buttons){ for(let i = 0; i < add_cart_buttons.length; ++i){ add_cart_buttons[i].innerHTML = add_cart_buttons[i].innerHTML.replace("fa-cart-arrow-down", "fa-shopping-cart"); add_cart_buttons[i].innerHTML = add_cart_buttons[i].innerHTML.replace("Added to Cart", "Add to Cart"); add_cart_buttons[i].style.filter = "brightness(100%)"; simpleCart.each(function (item, x) { if( add_cart_buttons[i].className.includes( item.get("rentalid") ) ){ add_cart_buttons[i].innerHTML = add_cart_buttons[i].innerHTML.replace("fa-shopping-cart", "fa-cart-arrow-down"); add_cart_buttons[i].innerHTML = add_cart_buttons[i].innerHTML.replace("Add to Cart", "Added to Cart"); add_cart_buttons[i].style.filter = "brightness(90%)"; } }); } } /* init time-based items */ if(document.location.href.indexOf("io_quoteform") == -1){ let today = new Date(); let io_dd = today.getDate(); let io_mm = today.getMonth() + 1; let io_yyyy = today.getFullYear(); if(restrictTimes){ jQuery(".item-timeslots .timepicker").each( function() { if(this.name.includes("end")){ start_timepicker = jQuery("input[name='"+this.name.replace("end", "start")+"']"); start_timepicker = jQuery(start_timepicker[start_timepicker.length - 1]); if(start_timepicker.val() != ""){ jQuery(this).timepicker({ startTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + start_default), endTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + end_default), minTime:start_timepicker.val(), maxTime:restrictTimeEnd, timeFormat: timeFormat, separator: ":", className: "elementor-widget-text-editor", step: 15, disableTouchKeyboard: true }); } else { jQuery(this).timepicker({ startTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + start_default), endTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + end_default), minTime:restrictTimeStart, maxTime:restrictTimeEnd, timeFormat: timeFormat, separator: ":", className: "elementor-widget-text-editor", step: 15, disableTouchKeyboard: true }); } } else { jQuery(this).timepicker({ startTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + start_default), endTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + end_default), minTime:restrictTimeStart, maxTime:restrictTimeEnd, timeFormat: timeFormat, separator: ":", className: "elementor-widget-text-editor", step: 15, disableTouchKeyboard: true }); } }); } else{ jQuery(".item-timeslots .timepicker").each( function() { if(this.name.includes("end") != -1){ start_timepicker = jQuery("input[name='"+this.name.replace("end", "start")+"']"); start_timepicker = jQuery(start_timepicker[start_timepicker.length - 1]); if(start_timepicker.val() != ""){ jQuery(this).timepicker({ startTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + start_default), endTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + end_default), minTime:start_timepicker.val(), timeFormat: timeFormat, separator: ":", className: "elementor-widget-text-editor", step: 15, disableTouchKeyboard: true }); } else { jQuery(this).timepicker({ startTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + start_default), endTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + end_default), timeFormat: timeFormat, separator: ":", className: "elementor-widget-text-editor", step: 15, disableTouchKeyboard: true }); } } else{ jQuery(this).timepicker({ startTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + start_default), endTime: new Date(io_mm+"/"+io_dd+"/"+io_yyyy + " " + end_default), timeFormat: timeFormat, separator: ":", className: "elementor-widget-text-editor", step: 15, disableTouchKeyboard: true }); } }); } setUpTimeRestrictions_timeBasedItems(); if(!event_time_set()){ jQuery(".itemRow .item-total").hide(); }else{ jQuery(".itemRow .item-total").show(); } } } function cart_beforeCheckout(data) { data.startdate = jQuery("input[name=dateStart]").val(); data.enddate = jQuery("input[name=dateEnd]").val(); data.io_custguid = getCookie("guid"); if(io_company_timeslots.length != 0 && io_cartdayselect == "single_day"){ let cart_company_timeslot_selected = jQuery(".ioCartCompanyTimeslots option:selected").first().val(); if(cart_company_timeslot_selected){ setCookie("company_timeslot_selected", cart_company_timeslot_selected, 14); cart_company_timeslot_selected = cart_company_timeslot_selected.split("-"); data.starttime = cart_company_timeslot_selected[0]; data.endtime = cart_company_timeslot_selected[1]; } } else { data.starttime = jQuery("input[name=timeStart]").val(); data.endtime = jQuery("input[name=timeEnd]").val(); } } function cart_beforeAdd(item) { var main_id = jQuery(".io_product_container .item_rentalid").first().text(); var item_id = item.get("rentalid"); timeslots = item.get("timeslots"); if(timeslots){ if(timeslots.indexOf("

*/ /*

*/ function getFormatteddate(date_obj){ if(dateFormat.substring(0,1)=='d'){ let month = date_obj.getMonth() + 1; formatteddate = date_obj.getDate()+'/'+month+'/'+date_obj.getFullYear(); }else{ let month = date_obj.getMonth() + 1; formatteddate = month+'/'+date_obj.getDate()+'/'+date_obj.getFullYear(); } return formatteddate; } function getFormattedtime(date_obj){ var hour24 = false; var ampm = 'am'; var starttime = jQuery('[name=timeStart]').val(); if(starttime.length>0 && starttime.indexOf('m')==-1) hour24 = true; if(hour24){ //24 hour return return date_obj.getHours()+':'+pad(date_obj.getMinutes(),2); }else{ //12 hour return var hour = date_obj.getHours(); if(hour==12) ampm='pm'; if(hour==0) hour=12; if(hour>12){ hour-=12; ampm='pm'; } return hour+':'+pad(date_obj.getMinutes(),2)+' '+ampm; } } function buildDateobjectstring(date,dateformat,time){ var ampm = 'am'; if(typeof date == "undefined") return; if(typeof dateformat == "undefined") return; var start_arr = date.split('/'); if(dateformat.substring(0,1)=='d'){ date = start_arr[2]+'/'+pad(start_arr[1],2)+'/'+pad(start_arr[0],2); }else{ date = start_arr[2]+'/'+pad(start_arr[0],2)+'/'+pad(start_arr[1],2); } try { time = time.replace('am', "").replace(' ', ""); if (time.indexOf('pm') != -1) ampm = 'pm'; time = time.replace('pm', "").replace(' ', ""); var time_arr = time.split(':'); var hour = parseInt(time_arr[0]); var min = pad(time_arr[1], 2); if (ampm == 'pm') { if (hour < 12) hour += 12; }else if(ampm=='am' && hour==12){ hour -= 12; } hour = pad(hour, 2); time = hour + ':' + min + ':00'; }catch(err){time = "";} return date+' '+time; } function pad(num, size) { var s = num+""; while (s.length < size) s = "0" + s; return s; } function convertDateStringtoDateObject(date_str, time_str=null){ if(date_str){ split_date_str = date_str.split("/"); /* Parse start and end time. */ if(time_str){ /* Check and see if we are in 12 hour format, if so convert it to 24 hour format. */ split_time_str = convert12HourTo24Hour(time_str); }else{ /* If we do not have a time, then default to zeros */ split_time_str = [0, 0]; } /* Create date object based off our set date format. */ date_obj = buildDateObj(split_date_str, split_time_str); return date_obj; }else{ return new Date(); } } function buildDateObj(split_date_str, split_time_str){ if (dateFormat == "d/m/yy"){ return new Date(split_date_str[2], (+split_date_str[1] - 1).toString(), split_date_str[0], split_time_str[0], split_time_str[1]); }else{ return new Date(split_date_str[2], (+split_date_str[0] - 1).toString(), split_date_str[1], split_time_str[0], split_time_str[1]); } } function convert12HourTo24Hour(time_str){ /* This function returns an array containing hours and minutes of provided string in 24 hour format. */ /* This is primarily used for creating JS Date objects */ split_time = time_str.split(":"); /* We are in 12 hour format if there is an "m" attached to minutes portion. */ if(split_time[1].toLowerCase().search("m") != -1) { let separated_minutes = split_time[1].split(" "); if(separated_minutes.length==1){ split_time[1] = split_time[1].replace("am"," am"); split_time[1] = split_time[1].replace("pm"," pm"); separated_minutes = split_time[1].split(" "); } let minutes = separated_minutes[0]; let modifier = separated_minutes[1]; split_time[1] = minutes; /* First assume that if the hours are 12, then its midnight. */ if(split_time[0] == "12"){ split_time[0] = "00"; } /* Second if there is a "p" in the modifier, then add twelve to the hours. */ if(typeof modifier != "undefined"){ if(modifier.toLowerCase().search("p") != -1){ split_time[0] = (parseInt(split_time[0], 10) + 12); } } } return split_time; } /*

*/ /*

*/ function cartShow() { jQuery("#cartPopover").show(); jQuery("#cartPopover").removeClass("cartOut"); jQuery("#cartPopover").addClass("cartIn"); jQuery(".cartInfo,.ioCart,.ioCart_link").addClass("open"); if (/Mobi|Android/i.test(navigator.userAgent)) { document.body.style.overflow = "hidden"; } /* jQuery(this).one("click", cartHide); */ jQuery(".cartInfo").unbind("click").one("click", function(event){ event.stopPropagation(); event.stopImmediatePropagation(); cartHide(); }); jQuery(".ioCart, .ioCart_link").unbind("click").one("click", function(event){ event.stopPropagation(); event.stopImmediatePropagation(); cartHide(); }); jQuery(".cartIcon").removeClass("fa-shopping-cart").addClass("fa-close"); if(simpleCart.items().length==0){ jQuery(".simpleCart_checkout").hide() }else{ jQuery(".simpleCart_checkout").show(); } checkAvailCartOnly(); last_upsell_call_time = Date.now() - last_upsell_call; if(in_cart_upsell && last_upsell_call_time > 2000){ let rental_ids = ""; /* Check and see the last time we removed an item from the cart. */ last_remove_time = Date.now() - last_remove; if(last_remove_time < 5000){ rental_ids = getAllRentalIDsFromCart(); } else{ /* Get the last element in the cart. This is the last item added. */ last_added = jQuery("[id^='cartItem_']").last(); if(last_added.length){ last_added_children = last_added.children(); for(let i = 0; i < last_added_children.length; ++i){ if(last_added_children[i].className == "item-rentalid") { rental_ids += last_added_children[i].innerText + "|"; } } } } if(rental_ids.length>0 && jQuery("#cartPopover").attr("class") == "cartIn"){ var times = getAvailTimes(); last_upsell_call = Date.now(); getUpsellsCall(times[0],times[1],times[2],rental_ids,updateCartUpsell); } else{ jQuery("#cart-carousel-container").hide(); } } } function cartHide() { jQuery("#cartPopover").removeClass("cartIn"); jQuery("#cartPopover").addClass("cartOut"); if (/Mobi|Android/i.test(navigator.userAgent)) { document.body.style.overflow = "auto"; } /* jQuery("#cartPopover").hide(); */ jQuery(".cartInfo,.ioCart, .ioCart_link").removeClass("open"); /* jQuery(this).one("click", cartShow); */ jQuery(".cartInfo").unbind("click").one("click", function(event){ event.stopPropagation(); event.stopImmediatePropagation(); cartShow(); }); jQuery(".ioCart, .ioCart_link").unbind("click").one("click", function(event){ event.stopPropagation(); event.stopImmediatePropagation(); cartShow(); }); jQuery(".cartIcon").removeClass("fa-close").addClass("fa-shopping-cart"); } /* function set_date_cookie(){ if(this.id.indexOf("start_") !== -1){ setCookie("dateStart", this.value, 14); } else if(this.id.indexOf("end_") !== -1){ setCookie("dateEnd", this.value, 14); } } */ jQuery(document).ready(function () {setTimeout(simpleCart.init, 3);}); /*

*/ /*

*/ function checkAvailAll(){ checkAvailCart(); checkAvailCartTimeslots(); checkAvailFilter(); if(addressCookiesSet() && io_distance_charge){ runDeliveryCall(true); } } /*

*/ /*

*/ /* for items on page not in cart */ function checkAvailFilter() { let rental_names = ""; let rental_ids = ""; let batch_ids = []; let cart_rental_names = ""; let cart_rental_ids = ""; let item_id = ""; let main_id = ""; jQuery(".item_encoded").each(function(){ rental_names += this.innerText + "|"; }); jQuery(".io_product_infobox .item_rentalid").each(function(){ rental_ids += this.innerText + "|"; item_id = this.innerText; main_id = this.innerText; }); let batch_count = 0; let batch_index = 0; jQuery(".page-content .io_item2_list_inner .item_rentalid").each(function(){ /* if(rental_ids.indexOf(this.innerText+"|") == -1){ rental_ids += this.innerText + "|"; } */ if(batch_count < 9){ if(!batch_ids.length) batch_ids.push("") if(!rid_in_batch(this.innerText + "|", batch_ids).length){ batch_ids[batch_index] += this.innerText + "|"; batch_count++; } }else{ if(!rid_in_batch(this.innerText + "|", batch_ids).length){ batch_ids[batch_index] += this.innerText + "|"; batch_index++; batch_count = 0; batch_ids.push(""); } } }); simpleCart.each(function (item, x) { var cart_name = item.get("encoded"); if(cart_name==null){ cart_name = encodeURIComponent(item.get("name")); cart_name = encodeURIComponent(decodeURIComponent(cart_name).replace(/[\u2032\u2019]+/ig,"'")); } let quantity = item.get("quantity"); if(item.get("inputtype") == "Map"){ quantity = 1 } cart_rental_names += cart_name + "-" + quantity + "|"; var cart_id = item.get("rentalid"); cart_rental_ids += cart_id + "-" + quantity + "|"; }); /* #14494 IO-13779 */ let delivery_methods_arr = []; if(io_delivery_prices){ if(Object.keys(io_delivery_prices["override"]).includes(item_id)){ var delivery_prices = io_delivery_prices["override"][item_id] }else{ var delivery_prices = io_delivery_prices["default"] } for(item in io_delivery_methods){ if(delivery_prices.includes(io_delivery_methods[item]["id"])){ delivery_methods_arr.push(item); } } } /* IO-13548 */ if(io_accessory_price == "on"){ let times = getAvailTimes(); let acc_rental_id_str = getAccIDforPrice(); let return_id = 0; if(acc_rental_id_str != ""){ checkAvailCall(times[0],times[1],times[2],rental_names,acc_rental_id_str,displayAccessoryPrices,0,[],[],return_id); } } let times = getAvailTimes(); if(rental_names.length>0){ if(use_weekday_weekend){ let return_id = 0; let week_weekend = ""; if(rental_ids != ""){ return_id = 1; week_weekend = get_week_weekend_times(times, main_id); 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); 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); } } let return_id = 0; if(rental_ids != "" || batch_ids.length){ return_id = 1; } if(delivery_methods_arr && rental_ids != ""){ delivery_methods_arr.forEach(function(delivery_method){ 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); }); } if(batch_ids.length){ batch_ids.forEach(function(rids){ return checkAvailCall(times[0],times[1],times[2],"",rids,updatePageAvail,0,cart_rental_ids,cart_rental_names,return_id,1,null,1); }); }else{ 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); } } } function get_week_weekend_times(times, rid){ /* Create a copy instead of reference.*/ let temp_times = JSON.parse(JSON.stringify(times)); let start_date = temp_times[0]; if(!start_date){ start_date = getFormatteddate(new Date()); temp_times[0] = start_date; } temp_times[1] = io_default_start_time var newDate1 = convertDateStringtoDateObject(start_date, io_default_start_time); var newDate2 = convertDateStringtoDateObject(start_date, io_default_end_time); let time_duration = ((newDate2 - newDate1) / 3600) / 1000; temp_times[2] = time_duration; let day = new Date(start_date).getDay(); let weekday_weekend = {}; weekday_weekend["rid"] = rid; if(io_weekendDefine == "friday-sunday"){ if(day == 5 || day == 6 || day == 0){ weekday_weekend["weekend"] = JSON.parse(JSON.stringify(temp_times)); temp_times[0] = getNextMonday(temp_times[0]); weekday_weekend["weekday"] = JSON.parse(JSON.stringify(temp_times)); }else if(day == 1 || day == 2 || day == 3 || day == 4){ weekday_weekend["weekday"] = JSON.parse(JSON.stringify(temp_times)); temp_times[0] = getNextSaturday(temp_times[0]); weekday_weekend["weekend"] = JSON.parse(JSON.stringify(temp_times)); } }else if(io_weekendDefine == "saturday-sunday"){ if(day == 6 || day == 0){ weekday_weekend["weekend"] = JSON.parse(JSON.stringify(temp_times)); temp_times[0] = getNextMonday(temp_times[0]); weekday_weekend["weekday"] = JSON.parse(JSON.stringify(temp_times)); }else if(day == 1 || day == 2 || day == 3 || day == 4 || day == 5){ weekday_weekend["weekday"] = JSON.parse(JSON.stringify(temp_times)); temp_times[0] = getNextSaturday(temp_times[0]); weekday_weekend["weekend"] = JSON.parse(JSON.stringify(temp_times)); } } return weekday_weekend; } /* helper function found here: 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. */ function getNextMonday(date_str) { const date_obj = new Date(date_str); const nextMonday = new Date( date_obj.setDate( date_obj.getDate() + ((7 - date_obj.getDay() + 1) % 7 || 7), ), ); return getFormatteddate(nextMonday); } /* modified from function above */ function getNextSaturday(date_str) { const date_obj = new Date(date_str); const next_friday = new Date( date_obj.setDate( date_obj.getDate() + ((7 - date_obj.getDay() + 6) % 7 || 7), ), ); return getFormatteddate(next_friday); } function updatePageAvail(data){ let use_id = data["return_id"] delete data["return_id"]; if(use_id == 1){ updatePageAvail_itemIDs(data) }else{ updatePageAvail_itemNames(data); } } function updatePageAvail_weekday(data){ jQuery.each(data, function (rental_id, qty){ if (rental_id == "price") { var prices = qty; jQuery.each(prices, function (price_id, amt) { let cust_price = document.querySelector(".io_product_cust_price_weekday"); if(cust_price==undefined){ var first_price = document.querySelector(".io_product_price_box"); if(first_price != null){ cust_price = first_price.cloneNode(true); /* clear all classes */ cust_price.className = ""; cust_price.classList.add("io_product_price_box"); cust_price.classList.add("io_product_cust_price_weekday"); cust_price.style.display = "none"; first_price.before(cust_price); } } main_item_id = jQuery(".io_product_infobox .item_rentalid").first().text(); if(main_item_id == price_id && cust_price!=undefined){ if(typeof amt == "string") amt = Number(amt.replace(",","")); cust_price.querySelector("p:nth-child(1)").innerHTML=simpleCart.toCurrency(amt); let times = getAvailTimes(); cust_price.querySelector("p:nth-child(2)").innerHTML = io_weekDayText; if(amt>0){ cust_price.style.display = "grid"; }else{ cust_price.style.display = "none"; } } }); } }); } function updatePageAvail_delivery_method(data){ var delivery_method = data["delivery_method"] jQuery.each(data, function (rental_id, qty){ if (rental_id == "price") { var prices = qty; jQuery.each(prices, function (price_id, amt) { let cust_price = document.querySelector(".io_product_cust_price_delivery_method"+io_delivery_methods[delivery_method]["id"]); let rid = jQuery(".io_product_container .item_rentalid").first().text(); if(cust_price==undefined && !io_delivery_methods[delivery_method]["restricted"].includes(rid)){ var first_price = document.querySelector(".io_product_price_box"); if(first_price != null){ cust_price = first_price.cloneNode(true); /* clear all classes */ cust_price.className = ""; cust_price.classList.add("io_product_price_box"); cust_price.classList.add("io_product_cust_price_delivery_method"+io_delivery_methods[delivery_method]["id"]); cust_price.style.display = "none"; first_price.before(cust_price); } } main_item_id = jQuery(".io_product_infobox .item_rentalid").first().text(); if(main_item_id == price_id && cust_price!=undefined){ if(typeof amt == "string") amt = Number(amt.replace(",","")); cust_price.querySelector("p:nth-child(1)").innerHTML=simpleCart.toCurrency(amt); let times = getAvailTimes(); cust_price.querySelector("p:nth-child(2)").innerHTML = make_live_price_editable_time(times, delivery_method); if(amt>0 && event_time_set()){ cust_price.style.display = "grid"; }else{ cust_price.style.display = "none"; } } }); } }); } function updatePageAvail_weekend(data){ jQuery.each(data, function (rental_id, qty){ if (rental_id == "price") { var prices = qty; jQuery.each(prices, function (price_id, amt) { let cust_price = document.querySelector(".io_product_cust_price_weekend"); if(cust_price==undefined){ var first_price = document.querySelector(".io_product_price_box"); if(first_price != null){ cust_price = first_price.cloneNode(true); /* clear all classes */ cust_price.className = ""; cust_price.classList.add("io_product_price_box"); cust_price.classList.add("io_product_cust_price_weekend"); cust_price.style.display = "none"; first_price.before(cust_price); } } main_item_id = jQuery(".io_product_infobox .item_rentalid").first().text(); if(main_item_id == price_id && cust_price!=undefined){ if(typeof amt == "string") amt = Number(amt.replace(",","")); cust_price.querySelector("p:nth-child(1)").innerHTML=simpleCart.toCurrency(amt); let times = getAvailTimes(); cust_price.querySelector("p:nth-child(2)").innerHTML = io_weekEndText; if(amt>0){ cust_price.style.display = "grid"; }else{ cust_price.style.display = "none"; } } }); } }); } function updatePageAvail_itemIDs(data){ jQuery.each(data, function (rental_id, qty){ if (rental_id == "price" && jQuery(".io_product_infobox .item_inputtype").text() != "Map") { var prices = qty; jQuery.each(prices, function (price_id, amt) { let cust_price = document.querySelector(".io_product_cust_price"); if(cust_price==undefined){ var first_price = document.querySelector(".io_product_price_box"); if(first_price != null){ cust_price = first_price.cloneNode(true); /* clear all classes */ cust_price.className = ""; cust_price.classList.add("io_product_price_box"); cust_price.classList.add("io_product_cust_price"); cust_price.style.display = "none"; first_price.before(cust_price); } } main_item_id = jQuery(".io_product_infobox .item_rentalid").first().text(); if(main_item_id == price_id && cust_price!=undefined){ if(typeof amt == "string") amt = Number(amt.replace(",","")); cust_price.querySelector("p:nth-child(1)").innerHTML=simpleCart.toCurrency(amt); let times = getAvailTimes(); cust_price.querySelector("p:nth-child(2)").innerHTML = make_live_price_editable_time(times); if(amt>0 && (event_time_set() || io_always_display_live_price == "on")){ cust_price.style.display = "grid"; }else{ cust_price.style.display = "none"; } } }); } if(qty<=0 && rental_id != "delivery_method"){ /* cat,all-item,widget */ if(io_checkavail=="warn"){ jQuery(".add_cart_"+rental_id.replace(":", "\\\:")+" .item_add").removeClass("item_add").addClass("item_add_off").trigger("classChange"); jQuery(".unavailable_message_"+rental_id.replace(":", "\\\:")).show(); } if(io_checkavail=="hide") jQuery(".add_cart_"+rental_id).parent().parent().hide(); /* product page */ if(jQuery(".io_product_container").length && io_checkavail!="off" && jQuery(".io_product_container .item_rentalid").text() === rental_id){ jQuery(".add_cart_"+rental_id.replace(":", "\\\:")+" .item_add").first().removeClass("item_add").addClass("item_add_off").trigger("classChange"); jQuery(".io_product_container .unavailable_message").show(); } }else if(qty>0){ if(io_checkavail=="warn"){ jQuery(".add_cart_"+rental_id.replace(":", "\\\:")+" .item_add_off").removeClass("item_add_off").addClass("item_add").trigger("classChange"); jQuery(".unavailable_message_"+rental_id.replace(":", "\\\:")).hide(); } if(io_checkavail=="hide") jQuery(".add_cart_"+rental_id).parent().parent().show(); /* product page */ if(jQuery(".io_product_container").length && io_checkavail!="off" && jQuery(".io_product_container .item_rentalid").text() === rental_id){ jQuery(".add_cart_"+rental_id.replace(":", "\\\:")+" .item_add_off").removeClass("item_add_off").addClass("item_add").trigger("classChange"); jQuery(".io_product_container .unavailable_message").hide(); } } }); } function updatePageAvail_itemNames(data){ jQuery.each(data, function (rental_name, qty) { rental_name = rental_name.replace(/[\u2032\u2019]+/ig,"'"); var main_name_temp = ""; if(typeof main_name_orig != "undefined"){ main_name_temp = main_name_orig.replace(/[\u2032\u2019]+/ig,"'"); } rental_name_esc = rental_name.replace(/'/g, "\\\\'"); if (rental_name == "price") { var prices = qty; jQuery.each(prices, function (price_name, amt) { /* var prices = document.querySelector(".io_product_price_box:not(.io_product_cust_price)"); */ /* if(prices != null) prices.remove(); */ let cust_price = document.querySelector(".io_product_cust_price"); if(cust_price==undefined){ var first_price = document.querySelector(".io_product_price_box"); if(first_price != null){ cust_price = first_price.cloneNode(true); /* clear all classes */ cust_price.className = ""; cust_price.classList.add("io_product_price_box"); cust_price.classList.add("io_product_cust_price"); cust_price.style.display = "none"; first_price.before(cust_price); } } try{ var main_name = decodeURIComponent(jQuery(".io_product_container .item_encoded").first().html().replace(/[+]/gi, "%20")); }catch(e){main_name=""} var i = main_name.lastIndexOf(":"); let acc_name = ""; let rental_name = ""; var i = main_name.lastIndexOf(":"); if(i>0){ rental_name = main_name.substring(0, i); acc_name = main_name.substring(i+1); } if (acc_name.toUpperCase() == price_name.toUpperCase() && cust_price!=undefined){ var rental_id = document.querySelector(".item_rentalid").innerText; if(rental_id != null){ rid_arr = rental_id.split(":"); /* ignore the main id for this */ rental_id = rid_arr[rid_arr.length-1]; if(jQuery("#io_acc_overrideprice_"+rental_id).first().text()>0){ amt = prices[acc_name]; }else{ let item_price = Number(prices[rental_name].replace(",","")); amt = Number(amt.replace(",","")) + item_price; amt = simpleCart.toCurrency(amt, {symbol:""}) } } cust_price.querySelector("p:nth-child(1)").innerText="$"+amt; if(typeof amt == "string") amt = Number(amt.replace(",","")); let times = getAvailTimes(); cust_price.querySelector("p:nth-child(2)").innerHTML = make_live_price_editable_time(times); if(amt>0 && (event_time_set() || io_always_display_live_price == "on")){ cust_price.style.display = "grid"; }else{ cust_price.style.display = "none"; } }else if(!rental_name && !acc_name && cust_price!=undefined){ amt = prices[main_name]; cust_price.querySelector("p:nth-child(1)").innerText="$"+amt; if(typeof amt == "string") amt = Number(amt.replace(",","")); let times = getAvailTimes(); cust_price.querySelector("p:nth-child(2)").innerHTML = make_live_price_editable_time(times); if(amt>0 && (event_time_set() || io_always_display_live_price == "on")){ cust_price.style.display = "grid"; }else{ cust_price.style.display = "none"; } } }); } if(qty<=0){ /* cat,all-item,widget */ if(io_checkavail=="warn"){ jQuery("div[name='maindiv_"+rental_name_esc+"'] .item_add").removeClass("item_add").addClass("item_add_off").trigger("classChange"); jQuery("div[name='maindiv_"+rental_name_esc+"'] .unavailable_message").show(); } if(io_checkavail=="hide") jQuery("div[name='maindiv_"+rental_name_esc+"']").hide(); /* product page */ if(jQuery(".io_product_container").length && io_checkavail!="off"){ if(main_name_temp==rental_name){ jQuery(".io_product_container .item_add").first().removeClass("item_add").addClass("item_add_off").trigger("classChange"); jQuery(".io_product_container .unavailable_message").show(); } } }else if(qty>0){ /* console.log("good"); */ if(io_checkavail=="warn"){ jQuery("div[name='maindiv_"+rental_name_esc+"'] .item_add_off").removeClass("item_add_off").addClass("item_add").trigger("classChange"); jQuery("div[name='maindiv_"+rental_name_esc+"'] .unavailable_message").hide(); } if(io_checkavail=="hide") jQuery("div[name='maindiv_"+rental_name_esc+"']").show(); /* product page */ if(jQuery(".io_product_container").length && io_checkavail!="off"){ if(main_name_temp==rental_name){ jQuery(".io_product_container .item_add_off").removeClass("item_add_off").addClass("item_add").trigger("classChange"); jQuery(".io_product_container .unavailable_message").hide(); } } } }); } function displayAccessoryPrices(data){ if(data.price){ let acc_prices = data.price; for (const [key, value] of Object.entries(acc_prices)) { if(io_hide_zero == 1 && value > 0){ let id_string = "#io_acc_desc_" + key; let formatted_price = simpleCart.toCurrency(value); if(jQuery(".io_acc_price").length > 0){ jQuery(".io_acc_price").html(formatted_price); }else{ let price_display =' '+formatted_price+' '; jQuery(id_string).after(price_display); } }else if(io_hide_zero == 0){ let id_string = "#io_acc_desc_" + key; let formatted_price = simpleCart.toCurrency(value); if(jQuery(".io_acc_price").length > 0){ jQuery(".io_acc_price").html(formatted_price); }else{ let price_display =' '+formatted_price+' '; jQuery(id_string).after(price_display); } } } } } function make_live_price_editable_time(times, delivery_method=null) { if(!delivery_method) delivery_method = getCookie("io_delivery_method"); let ele_text = ""; if(times[0]) ele_text = "on " + times[0] + " "; if(times[2] === 0) times[2] = 1; if(io_hidetimes!="on" && !isNaN(times[2])) ele_text += "for "+times[2]+" hours "; if(delivery_method) ele_text += "for " + delivery_method + ". "; ele_text += 'edit'; return ele_text; } function checkAvailDateClick(){ cartShow(); /* expand the date picker */ setTimeout(calSetDateRange,100); } function checkAvailPageOnly(){ checkAvailFilter(); if(addressCookiesSet() && io_distance_charge){ runDeliveryCall(true); } } function getAccIDforPrice(){ let accessory_arr = jQuery(".io_acc_li").toArray(); let acc_rental_id_str = ""; for(let current_accessory = 0; current_accessory < accessory_arr.length; current_accessory++){ let required_tag = jQuery(accessory_arr[current_accessory]).find(".item_required"); if(required_tag.length > 0){ if(required_tag[0].innerText == 0){ acc_rental_id_str += jQuery(accessory_arr[current_accessory]).find(".item_rentalid")[0].innerText +"|"; } } } return acc_rental_id_str; } function getUpsellIDforPrice(){ let upsell_arr = jQuery(".page-carousel-rid").toArray(); let upsell_rental_id_str = ""; for(let current_upsell = 0; current_upsell < upsell_arr.length; current_upsell++){ upsell_rental_id_str +=upsell_arr[current_upsell].innerText+"|"; } return upsell_rental_id_str; } function displayUpsellPrices(data){ if(data.price){ let upsell_prices = data.price; for (const [key, value] of Object.entries(upsell_prices)) { if(io_hide_zero == 1 && value > 0){ let id_string = "#rid"+ key; let formatted_price = simpleCart.toCurrency(value); let price_display =' '+formatted_price+' '; jQuery(id_string).after(price_display); }else if(io_hide_zero == 0){ let id_string = "#rid"+ key; let formatted_price = simpleCart.toCurrency(value); let price_display =' '+formatted_price+' '; jQuery(id_string).after(price_display); } } pageFlickityRefresh(); } } /*

*/ /*

*/ function checkAvailCartOnly(skip_timer=false){ checkAvailCart(); checkAvailCartTimeslots(); if(addressCookiesSet() && io_distance_charge){ runDeliveryCall(true); } } function checkAvailCartTimeslots(){ let rental_names = ""; let rental_ids = ""; let cart_rental_names = ""; let cart_rental_ids = ""; let times = getAvailTimes(); let start_date = times[0]; let event_duration = times[2]; let end_date = start_date; var event_start_time = getCookie("timeStart"); simpleCart.each(function (item, x) { var timeslots_html = item.get('timeslots'); if(typeof timeslots_html == "undefined") return; if(timeslots_html.length == 0) return; var cart_name = item.get("encoded"); if(cart_name==null) { cart_name = encodeURIComponent(item.get("name")); cart_name = encodeURIComponent(decodeURIComponent(cart_name).replace(/[\u2032\u2019]+/ig,"'")); } rental_id = item.get("rentalid"); var timeslot_name = getTimeslotName(timeslots_html); var timeslot_sel_range = jQuery(".item-timeslots [name=\""+timeslot_name+"\"] option:selected").val(); if(typeof timeslot_sel_range != "undefined"){ /* timeslots */ setTimeslotSelected(item, timeslot_name); }else{ /* timepickers */ setTimePicker(item, timeslot_name); let start_timepicker = document.getElementsByName(timeslot_name.replace("io_timepicker_", "start_timeslot_")); let end_timepicker = document.getElementsByName(timeslot_name.replace("io_timepicker_", "end_timeslot_")); timeslot_sel_range = start_timepicker[start_timepicker.length-1].value; timeslot_sel_range += " - " + end_timepicker[end_timepicker.length-1].value; } var timeslot_sel_arr = ""; if(typeof timeslot_sel_range != "undefined"){ var [start_time, end_time] = break_timeslot_sel_range(timeslot_sel_range); if(start_time && end_time){ let newDate1 = convertDateStringtoDateObject(start_date, start_time); let newDate2 = convertDateStringtoDateObject(end_date, end_time); let time_duration = ((newDate2 - newDate1) / 3600) / 1000; let quantity = item.get("quantity"); if(item.get("inputtype") == "Map"){ quantity = 1 } rental_names += cart_name + "-" + quantity+"|"; rental_ids += rental_id+"-"+quantity+"-"+start_time+"-"+time_duration+"|"; cart_rental_names = rental_names; cart_rental_ids = rental_ids; } } }); checkAvailCall(start_date,event_start_time,event_duration,rental_names,rental_ids,updateCartAvail,1,cart_rental_ids,cart_rental_names,1); return true; } function checkAvailCart(){ let rental_names = ""; let rental_ids = ""; let cart_rental_names = ""; let cart_rental_ids = ""; simpleCart.each(function (item, x) { if(typeof item.get('timeslots') != "undefined"){ if(item.get('timeslots').length > 0){ return; } } var cart_name = item.get("encoded"); if(cart_name==null){ cart_name = encodeURIComponent(item.get("name")); cart_name = encodeURIComponent(decodeURIComponent(cart_name).replace(/[\u2032\u2019]+/ig,"'")); } let quantity = item.get("quantity"); if(item.get("inputtype") == "Map"){ quantity = 1 } rental_names += cart_name + "-" + quantity + "|"; cart_rental_names += cart_name + "-" + quantity + "|"; var cart_id = item.get("rentalid"); rental_ids += cart_id + "-" + quantity + "|"; cart_rental_ids += cart_id + "-" + quantity + "|"; }); var times = getAvailTimes(); let return_id = 0; if(rental_ids != ""){ return_id = 1; } return checkAvailCall(times[0],times[1],times[2],rental_names,rental_ids,updateCartAvail,1,cart_rental_ids,cart_rental_names,return_id); } function updateCartAvail(data){ let use_id = data["return_id"] delete data["return_id"]; if(use_id == 1){ updateCartAvail_itemIDs(data) }else{ updateCartAvail_itemNames(data); } console.log("cart update"); /* simpleCart.trigger("update"); */ simpleCart.update(); /* jQuery("#avail").html(output); */ } function updateCartAvail_itemIDs(data){ jQuery.each(data, function (rental_id, qty){ simpleCart.each(function (item, x) { if(rental_id == item.get("rentalid")){ if(io_hideQuantityAvail == "off"){ if(qty>=9999 || item.get("inputtype") == "Map" || item.get("giftcardvalue")){ item.set("availability", "available"); }else{ item.set("availability", qty + " available"); } }else if(io_hideQuantityAvail == "on"){ if(qty<=0){ item.set("availability", "not available"); }else{ item.set("availability", "available"); } } if(item.get("vendorid")){ item.set("availability", "availability must be verified"); } } if (rental_id == "price") { var prices = qty; jQuery.each(prices, function (price_name, amt) { if(price_name == item.get("rentalid")){ if (typeof amt == "string" || amt instanceof String){ if(amt != "TBD"){ if(typeof amt == "string") amt = Number(amt.replace(",","")); } } item.set("price", amt); } }); } }); }); } function updateCartAvail_itemNames(data){ jQuery.each(data, function (rental_name, qty) { rental_name = rental_name.replace(/[\u2032\u2019]+/ig,"'"); simpleCart.each(function (item, x) { try{ var cart_name = decodeURIComponent(item.get("encoded").replace(/[+]/gi, "%20")); }catch(e){cart_name=null} if(cart_name==null) cart_name = item.get("name") cart_name = cart_name.replace(/[\u2032\u2019]+/ig,"'"); var i = cart_name.lastIndexOf(":"); if(i>0 && cart_name.toUpperCase() != rental_name.toUpperCase() && rental_name!="price"){cart_name = cart_name.substring(i+1)} if (cart_name.toUpperCase() == rental_name.toUpperCase()) { if(qty>9999){ item.set("availability", "available"); }else{ item.set("availability", qty + " available"); } } if (rental_name == "price") { var prices = qty; jQuery.each(prices, function (price_name, amt) { price_name = price_name.replace(/[\u2032\u2019]+/ig,"'"); let acc_name = ""; let rental_name = ""; var i = cart_name.lastIndexOf(":"); if(i>0){ rental_name = cart_name.substring(0, i); acc_name = cart_name.substring(i+1); } if (acc_name === price_name) { var rental_id = item.get("rentalid"); if(rental_id != null){ rid_arr = rental_id.split(":"); /* ignore the main id for this */ rental_id = rid_arr[rid_arr.length-1]; if(jQuery("#io_acc_overrideprice_"+rental_id).first().text()>0){ amt = prices[acc_name]; }else{ let item_price = Number(prices[rental_name].replace(",","")); amt = Number(amt.replace(",","")) + item_price; item.set("price", amt); return; } } if(amt==null){ amt = "0"; } /* returned price is per unit */ if(typeof amt == "string") amt = Number(amt.replace(",","")); item.set("price", amt); }else if(!rental_name && !acc_name){ amt = Number(prices[cart_name].replace(",","")); item.set("price", amt); } }); } }); }); } /*

*/ /*

*/ function updateCartUpsell(data){ let cart_carousel = jQuery(".cart-carousel"); viewport = jQuery(".cart-carousel .flickity-viewport"); if(viewport.length > 0){ cart_carousel.flickity("destroy"); } cart_carousel.empty(); data.forEach(function(upsell){ cell = createCartCarouselCell(upsell["image"], upsell["name"], upsell["page"]); cart_carousel.append(cell); }); makeCarousel(cart_carousel); jQuery("#cart-carousel-container").show(); setTimeout(cartFlickityRefresh, 500); } function cartFlickityRefresh(){ jQuery(".cart-carousel").flickity("resize"); } function makeCarousel(cart_carousel){ cart_carousel.flickity({ wrapAround: true, draggable: false, cellAlign: 'left', //autoPlay: 3000, groupCells: true, resize: true }); cart_carousel_set = true; } function createCartCarouselCell(image, name, page){ cell = '
'+name+'
'; 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) { /* 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; }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; } if(rental_names.replace(/[|]/g,"").length==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("address"), "state": getCookie("state"), "city": getCookie("city"), "zip": getCookie("zip") }; url += "&name=" + encodeURIComponent("Gulf Coast WSBH") + "&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; jQuery.getJSON(url, returnFunc); } 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("Gulf Coast WSBH") + "&startdate=" + start_date + "&starttime=" + start_time + "&duration=" + time_duration + "&usecushion=1" + "&include_price=1" + "&showlocations=0" + "&rental_ids=" + rental_ids; jQuery.getJSON(url, returnFunc); } /*

*/

Save Address

Continue Shopping

Enter Address Information (edit)
Locate

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.

Done

Clear

Add New Line


`;});let avg = (parseFloat(rating_sum)/parseFloat(review_cnt)).toFixed(1);let avg_img = Math.round(avg);let head = `

Avg Rating: ${avg}

Amazing Obstacle course RENTALS in Cantonment, FL | (850) 529-0932 (6)

`;element.innerHTML = head + out;return head+out;}).catch(function(err) {console.log(err);});}

Top Articles
Latest Posts
Article information

Author: Van Hayes

Last Updated: 06/14/2023

Views: 6503

Rating: 4.6 / 5 (66 voted)

Reviews: 89% of readers found this page helpful

Author information

Name: Van Hayes

Birthday: 1994-06-07

Address: 2004 Kling Rapid, New Destiny, MT 64658-2367

Phone: +512425013758

Job: National Farming Director

Hobby: Reading, Polo, Genealogy, amateur radio, Scouting, Stand-up comedy, Cryptography

Introduction: My name is Van Hayes, I am a thankful, friendly, smiling, calm, powerful, fine, enthusiastic person who loves writing and wants to share my knowledge and understanding with you.