Unhandled Error!

Error writing to the cache file

Document /modules/core/classes/core_filecache.php
Document type PHP document
Line 54
Exception class Phpr_SystemException

Code Highlight

 
			$key = $this->fix_key($key);
			$dest_path = $this->dir_path.'/'.$key;
 
			$fp = @fopen($dest_path, 'w');
			if (!$fp)
				throw new Phpr_SystemException('Error writing to the cache file');
 
			try
			{
				if (flock($fp, LOCK_EX | LOCK_NB))
				{
					@fwrite($fp, $value);
# Call Stack Code Document Line
15 Core_FileCache->set_value('nthsv3-partial_shop-product5_2021_c7b34cc386f238d3c1a7dce5a24bf828b9decc20', ' <!-- view=shop:product5_2021 --> <section class="product-genie-z60fe-hire"> <div class="row"> <div class="three mobile-four columns prod-img" style="text-align: center;"> <div class="product-images"> <div class="main"> <img src="/uploaded/thumbnails/Genie_z60fe_Hire_4462_400x400.jpg" title="Genie Z-60 FE 20m Hybrid Articulating Boom Lift Hire" alt="A Genie Z-60 FE 20m Hybrid Articulating Boom Lift on a white background." width="400px" height="400px" /> </div> <div class="thumbs"> <ul> <li> <a href="/uploaded/thumbnails/Genie_z60fe_Hire_4462_400x400.jpg" title="Genie Z-60 FE 20m Hybrid Articulating Boom Lift" width="200px" height="200px" > <img src="/uploaded/thumbnails/Genie_z60fe_Hire_4462_80x80.jpg" title="Genie Z-60 FE 20m Hybrid Articulating Boom Lift" alt="A Genie Z-60 FE 20m Hybrid Articulating Boom Lift on a white background." link rel="preload" as="image" width="80px" height="80px"> </a> </li> <li> <a href="/uploaded/thumbnails/genie_z60fe_boomlift_hire_4463_400x400.jpg" title="Genie Z-60 FE 20m Hybrid Articulating Boom Lift" width="200px" height="200px" > <img src="/uploaded/thumbnails/genie_z60fe_boomlift_hire_4463_80x80.jpg" title="Genie Z-60 FE 20m Hybrid Articulating Boom Lift" alt="A Genie Z-60 FE 20m Hybrid Articulating Boom Lift on a white background." link rel="preload" as="image" width="80px" height="80px"> </a> </li> </ul> </div> </div> </div> <div class="four mobile-four columns middle"> <div class="meta"> <h1 style="font-weight: 900"><em>Genie Z-60 FE 20m Hybrid Articulating Boom Lift Hire</em></h1> <div class="bullets"> <ul> <li>20m Maximum Working Height</li> <li>18m Maximum Platform Height</li> <li>11m Horizontal Outreach</li> <li>All-Round Guardrail &amp; Locking Gate</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul> <ul> <li><span style="font-weight: 700; color: #b40026;">Save 30&#37;</span> on Average UK Price </li> <li>Hire for <span style="font-weight: 700; color: #002B41;">DIY</span> or <span style="font-weight: 700; color: #002B41;">Trade</span></li> </ul> </div> <hr> <p style="font-size: 1.2em;"> </p> <p style='font-size: 1.2em;'><i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>Low Cost</span> Delivery: Nationwide</p> <p style="font-size: 1.2em;"> <i class='fas fa-chart-line fa-fw' style='padding-right: 1em'></i>&nbsp; 5 hired in the last 24 hours </p> <p style="font-size: 1.2em;"> <i class='fas fa-shield fa-fw' style='padding-right: 1em'></i>&nbsp; <a title="Insurance Available" href="#" data-gtm="I: Insurance Available (P)" data-reveal-id="insurance_modal" data-closeonbackgroundclick="false" style="color: #000; border-bottom: 1px #000 dashed;">Insurance Available</a> </p> <p style="font-size: 1.2em;"> <i class='fas fa-money-bill-transfer fa-fw' style='padding-right: 1em'></i>&nbsp; <a title="Deposit Required" href="#" data-gtm="I: Deposit Required (P)" data-reveal-id="deposit_modal" data-closeonbackgroundclick="false" style="color: #000; border-bottom: 1px #000 dashed;">Deposit Required</a> </p> <p style="font-size: 1.2em;"> <i class='fas fa-id-card fa-fw' style='padding-right: 1em'></i>&nbsp; <a title="Online ID Verification Required" href="#" data-gtm="I: Online ID Required (P)" data-reveal-id="id_modal" data-closeonbackgroundclick="false" style="color: #000; border-bottom: 1px #000 dashed;">Online ID Verification Required</a> </p> <p style="font-size: 1.2em; cursor: pointer" aria-label="Open pop-up: Why hire from National Tool Hire?" class="jsOpenPopUp"> <i class='fa-solid fa-circle-question' style='padding-right: 7px'></i> <span data-gtm="I: Why Hire From NTH (P)" style="color: #000; border-bottom: 1px #000 dashed;">Why Hire from National Tool Hire?</span> </p> </div> </div> <div class="five mobile-four columns"> <div class="product-description"> <form enctype="multipart/form-data" class="custom" action="/product/genie-z60fe-hire" method="post"> <input type="hidden" name="ls_session_key" value="lsk693ebe77239890.04505172"/> <!--<div class="twelve columns call-free-cta"><a href="tel:08008089600">Need Help? <span>Call 0800 808 9600</span></a></div>--> <div class="meta"> <div class="row"> <div class="twelve mobile-four columns hide-for-medium-up" style="margin: 1em 0"> <a href="/how-it-works/" data-gtm="B: DIY & Trade (P)" title="DIY & Trade: genie-z60fe-hire"><img src="/themes/nthsv3/resources/images/NTH-banner-DIY.jpg" alt="DIY & Trade" width="100%" height="100%" loading="lazy" title="DIY & Trade: Genie Z-60 FE 20m Hybrid Articulating Boom Lift" /></a> </div> </div> </div> <div style="border: 1px solid #404040; display: none; background: #b0e3f4;" id="same-day-hire-extended"> <a href='/same-day-tool-hire/' data-gtm="B: Same-Day Hire (P)" class='same-day-loading'> <img src="/img/NTH-sameday-click-collect.webp" alt="Same Day Hire click and collect" title="Same Day Hire click and collect" loading='eager' width="439" height="56" /> </a> <p style="font-size:1.5em; padding-top: 0.3em; text-align: center;"><strong>Order in the next:</strong> <span id="same-day-countdown"></span></p> </div> <div style="border: 1px solid #404040; display: none; background: #b0e3f4;" id="same-day-hire"> <a href='/same-day-tool-hire/' data-gtm="B: Same-Day Hire (P)" class='same-day-loading'> <img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'> </a> <p style="font-size:1.5em; padding-top: 0.3em; text-align: center;"><strong>Order in the next:</strong> <span id="same-day-countdown-hire"></span> </p> </div> <script> function showSameDayBanner() { const date = new Date(); let bookingDelay = 1; //let bookingDelay = 0; if (bookingDelay <= 0) { let sameDayCutoff = new Date(date.getFullYear(),date.getMonth(),date.getDate(),11,00); let extendedSameDayCutoff = new Date(date.getFullYear(),date.getMonth(),date.getDate(),14,00); if(date >= sameDayCutoff && date < extendedSameDayCutoff) { console.log('same-day-hire-extended'); document.getElementById('same-day-hire-extended').style.display = 'block'; let span = document.getElementById('same-day-countdown'); let seconds = (extendedSameDayCutoff - date) / 1000; console.log(seconds); span.textContent = sameDayCountDownTime(seconds); setInterval(() => { seconds--; span.textContent = sameDayCountDownTime(seconds); }, 1000) } else if (date < sameDayCutoff) { console.log('same-day-hire'); document.getElementById('same-day-hire').style.display = 'block'; let span = document.getElementById('same-day-countdown-hire'); let seconds = (sameDayCutoff - date) / 1000; console.log(seconds); span.textContent = sameDayCountDownTime(seconds); setInterval(() => { seconds--; span.textContent = sameDayCountDownTime(seconds); }, 1000) } } } function sameDayCountDownTime(t) { let hours = Math.floor(t/3600); let minutes = Math.floor((t % 3600)/60); let seconds = Math.floor(t % 60); let h = hours ? (hours === 1 ? '1hr' : hours + 'hrs') : ''; let m = minutes ? (minutes === 1 ? '1min' : minutes + 'mins') : ''; let s = seconds ? (seconds === 1 ? '1sec' : seconds + 'secs') : '' return [h, m, s].filter(e => e).join(' ') } showSameDayBanner(); </script> <div class="addtocart" style="background-color: #E6E6E6; margin-top: 20px;"> <!-- view:price_calculator6 --> <div class="twelve mobile-four columns pricetable" style="background-color: #fff;"> <div class="three mobile-two columns pricecol"> <span class="prodhireperiodheader">24 HOURS</span><br/><span class="prodpricecalc-sale">£702.93</span><br/> <span class="productpricecalc">£494.80</span> </div> <div class="three mobile-two columns pricecol"> <span class="prodhireperiodheader">48 HOURS</span><br/><span class="prodpricecalc-sale">£730.32</span><br/> <span class="productpricecalc">£514.08</span> </div> <div class="three mobile-two columns pricecol"> <span class="prodhireperiodheader">FRI - MON</span><br/><span class="prodpricecalc-sale">£803.35</span><br/> <span class="productpricecalc">£565.49</span> </div> <div class="three mobile-two columns pricecol"> <span class="prodhireperiodheader">WEEKLY</span><br/><span class="prodpricecalc-sale">£912.90</span><br/> <span class="productpricecalc">£642.60</span> </div> </div> <div class="twelve mobile-four columns extrainfobox2" style="margin-bottom: 0;"> <a href="#" title="Book &amp; Pay Online" data-reveal-id="booking_modal" data-closeOnBackgroundClick="false" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;" ><i class="fa fa-lg fa-calendar"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="row" style="margin: 2em 0; padding: 1em 0;"> <div class="one mobile-one hide-for-small columns"> </div> <div class="two mobile-one columns"> <img src="/themes/nthsv3/resources/images/VISA.png" alt="Visa" title="Visa" loading="lazy" width="100%" height="100%"> </div> <div class="two mobile-one columns"> <img src="/themes/nthsv3/resources/images/MC.png" alt="Mastercard" title="Mastercard" width="100%" height="100%"> </div> <div class="two mobile-one columns"> <img src="/themes/nthsv3/resources/images/Apple.png" alt="Apple Pay" title="Apple Pay" loading="lazy" width="100%" height="100%"> </div> <div class="two mobile-one columns"> <img src="/themes/nthsv3/resources/images/G-pay.png" alt="Google Pay" title="Google Pay" loading="lazy" width="100%" height="100%"> </div> <div class="two mobile-one hide-for-small columns"> <img src="/themes/nthsv3/resources/images/PP.png" alt="PayPal" title="PayPal" loading="lazy" width="100%" height="100%";> </div> <div class="one mobile-one hide-for-small columns"> </div> </div> </div> <div class="pay-in-3 twelve mobile-four columns" style="text-align: center;"> <p>Please note: All consumables are <b>non-refundable</b>. These are purchased items, not hired</p> <div class="paypal"><i class="fa-brands fa-paypal fa-bounce" style="color: #003087; padding-left: 0.5em; width: 1.5em; --fa-animation-iteration-count: 5;--fa-animation-timing: ease-in-out;"></i> <a title="PayPal Pay in 3 Available" href="#" data-reveal-id="paypal_modal" data-closeonbackgroundclick="false" style="color: #000; border-bottom: 1px #000 solid;">PayPal 'Pay in 3' Available (0% interest)</a></div> </div> </div> </div> <div class="twelve mobile-four columns" style="margin-top: 2em;"> <div class="cd-tabs cd-tabs--vertical js-cd-tabs" style="width: 100%"> <nav class="cd-tabs__navigation"> <ul class="cd-tabs__list"> <li class="cd-tabs__list_li"> <a href="#tab-1" class="cd-tabs__item cd-tabs__item--selected" data-gtm="T: Description"> <span class="tab">Description</span> </a> </li> <li class="cd-tabs__list_li"> <a href="#tab-2" class="cd-tabs__item" data-gtm="T: Spec / Detail"> <span class="tab hide-for-small">Specification</span> <span class="tab show-for-small">Detail</span> </a> </li> <li class="cd-tabs__list_li"> <a href="#tab-3" class="cd-tabs__item" data-gtm="T: Related"> <span class="tab hide-for-small">Related Products</span> <span class="tab show-for-small">Related</span> </a> </li> </ul> </nav> <ul class="cd-tabs__panels"> <li id="tab-1" class="cd-tabs__panel cd-tabs__panel--selected text-component"> <h2>20m Genie Z-60 FE&nbsp;Hire</h2> <h3>Hybrid Boom Lift</h3> <p><span data-preserver-spaces="true">The Genie Z-60 FE hybrid boom lift is an&nbsp;<span>environment-friendly solution for increased efficiency and low cost of operation. In electric mode, it offers a full work day of emissions-free run time on a single battery charge. In hybrid mode, it offers one week of run time with a single 64-litre tank of diesel.</span></span></p> <p><span data-preserver-spaces="true">This boom lift gives users a maximum platform height of 18.16-metres. It offers a maximum working height of 20.16-metres, a horizontal reach of 11.15-metres, and a lifting capacity of 227kg. The platform allows for&nbsp;<span>160&deg; rotation for improved accuracy and access at height.</span> The Z-60 FE is v<span>ersatile and easy to operate, and it is ideal for indoor and outdoor jobs of all types.</span></span></p> <p><span data-preserver-spaces="true">The G<span>enie Fast Mast&trade; boom system allows operators to descend to collect tools and materials then return to work at height in a quick and efficient time.</span></span></p> <div style="display: flex; flex-wrap: wrap"> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Safety-Footwear.webp" type="image/webp"> <img src="/img/product-icons/NTH-Safety-Footwear.png" loading="lazy" title="Boots" alt="Safety Footwear" width="60" height="60"> </picture> </div> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Hybrid.webp" type="image/webp"> <img src="/img/product-icons/NTH-Hybrid.png" loading="lazy" title="Fuel Type - Hybrid" alt="Hybrid" width="60" height="60"> </picture> </div> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Head-Protection.webp" type="image/webp"> <img src="/img/product-icons/NTH-Head-Protection.png" loading="lazy" title="Hard Hat" alt="Head Protection" width="60" height="60"> </picture> </div> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Safety-Harness.webp" type="image/webp"> <img src="/img/product-icons/NTH-Safety-Harness.png" loading="lazy" title="Harness" alt="Safety Harness" width="60" height="60"> </picture> </div> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Training-Required.webp" type="image/webp"> <img src="/img/product-icons/NTH-Training-Required.png" loading="lazy" title="Training" alt="Training Required" width="60" height="60"> </picture> </div> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Large-Van-or-Truck.webp" type="image/webp"> <img src="/img/product-icons/NTH-Large-Van-or-Truck.png" loading="lazy" title="Transport - Truck" alt="Large Van or Truck" width="60" height="60"> </picture> </div> </div> </li> <li id="tab-2" class="cd-tabs__panel text-component"> <div class="product-short-specs"> <div> <table border="1"> <tbody> <tr> <td>Working Height</td> <td>20.16m</td> </tr> <tr> <td>Platform Height</td> <td>18.16m</td> </tr> <tr> <td>Horizontal Outreach</td> <td>11.15m</td> </tr> <tr> <td>Lift Capacity</td> <td>227kg</td> </tr> <tr> <td>Platform Size</td> <td>1.83m x 0.76m</td> </tr> <tr> <td>Stowed Length</td> <td>8.15m</td> </tr> <tr> <td>Stowed Height</td> <td>3m</td> </tr> <tr> <td>Width</td> <td>2.62m</td> </tr> <tr> <td>Platform Rotation</td> <td>160&deg;</td> </tr> <tr> <td>Turntable Rotation</td> <td>355&deg; continuous</td> </tr> <tr> <td>Fuel Tank</td> <td>64L</td> </tr> </tbody> </table> </div> </div> <p><strong>Please note:</strong> This product description and specification is based on the model most widely stocked across our network of partner stores. Alternative brands of equivalent specification may be supplied based on location and availability.</p> <div class="write-review"> <a href="#" data-reveal-id="write-review" data-closeOnBackgroundClick="false">Write Review</a> </div> </li> <li id="tab-3" class="cd-tabs__panel text-component"> <p> <!--<section class="related-products bottom block"> <div class="row">--> <!-- view:shop:product_list_diy_trade_21_2_row --> <!-- --> <div style="margin-bottom: 2em;" class="product-list-item"> <div class="" style="display: inline-block; border: 1px solid #002B41; background: #002B41; color: #fff; padding: 0.5em 0.5em 0.2em 0.5em; font-size: 1.6em; text-transform: uppercase; font-weight: bold">Most Popular</div> <div class="twelve columns" style="border: 0.4em solid #002B41 !important; height: 100%; margin-bottom: 2em; padding:1.5em 1.5em 0; min-height: 280px;"> <div class="three mobile-four columns"> <div class="images"> <a href="/product/nifty-hr12n-hire/" data-gtm="Product Image (C)"> <img class="primary" loading="eager" style="display: block; margin-left: auto; margin-right: auto;" src="/uploaded/thumbnails/Niftylift_HR12N_Hire_4858_400x400.jpg" title="Niftylift HR12N 12.2m Hybrid Boom Lift Hire " alt="Niftylift HR12N 12.2m Hybrid Boom Lift Hire " data-gtm="Product Image (C)" width="100%" height="100%" /> </a> </div> </div> <div class="five mobile-four columns"> <div class="desc"> <h2 style="font-size: 1.9em; margin-bottom: 1px; margin-top: 0;"> <a href="/product/nifty-hr12n-hire/" data-gtm="Product Name (C)" style="color: #404040; ">Niftylift HR12N 12.2m Hybrid Boom Lift</a> </h2> <p class="context">Ideal For Indoor & Outdoor Reach</p> <!-- --> <div class="catbul"><ul> <li>Compact Footprint</li> <li>Energy Efficient</li> <li>Articulating Boom</li> <li>Power Driven Wheels</li> <li>All-Round Guardrail &amp; Locking Gate</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul></div> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> </div> </div> <div class="four mobile-four columns"> <div class="product-mobile"> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> <div class="catbul"><ul> <li>Compact Footprint</li> <li>Energy Efficient</li> <li>Articulating Boom</li> <li>Power Driven Wheels</li> <li>All-Round Guardrail &amp; Locking Gate</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul></div> </div> <div class="row desc"> <div class="twelve mobile-four columns product-price-wrap"> <span class="price">from </span><span class="price"> £389.46 </span> </div> </div> <div class="twelve mobile-four columns ticks"> <p style="font-size: 1.1em; margin: 1em 0;">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;DIY &amp; Trade<br class="hide-for-small"/> &nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;<span style="color: #c8102e">Save 28&#37;</span><br/> <span class="hide-for-small">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;Best Availability</span> </p> </div> <div class="row"> <!--<div class="twelve mobile-four columns"> <a href="/product/nifty-hr12n-hire/?booking_modal_show=1" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/nifty-hr12n-hire/" data-gtm="Button: Book & Pay Online (C)" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/nifty-hr12n-hire/" data-gtm="Button: Product Detail (C)" title="More Information" class="button expand quotebutton-alt">Product Detail</a> </div>--> <div class="twelve mobile-four columns"> <a href="/product/nifty-hr12n-hire/" data-gtm="Button: Details & Booking (C)" title="Details &amp; Booking" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;"><i class="fas fa-calendar-alt"></i>&nbsp;&nbsp; Details &nbsp;&amp;&nbsp; Booking</a> </div> </div> <div class="row"> <div class="twelve columns" style="text-align: center; padding-top: 1em; color: #808080;"> <p class='product-list-free-delivery'> <i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>Low Cost</span> National Delivery </p> </div> </div> </div> </div> </div> <div style="margin-bottom: 2em;" class="product-list-item"> <div class="twelve columns" style=" height: 100%; margin-bottom: 2em; padding:1.5em 1.5em 0; min-height: 280px;"> <div class="three mobile-four columns"> <div class="images"> <a href="/product/niftylift-hr15n-boom-lift-hire/" data-gtm="Product Image (C)"> <img class="primary" loading="eager" style="display: block; margin-left: auto; margin-right: auto;" src="/uploaded/thumbnails/Niftylift_HR15N_Hire_4860_400x400.jpg" title="Niftylift HR15N 15.5m Hybrid Articulated Boom Lift Hire " alt="Niftylift HR15N 15.5m Hybrid Articulated Boom Lift Hire " data-gtm="Product Image (C)" width="100%" height="100%" /> </a> </div> </div> <div class="five mobile-four columns"> <div class="desc"> <h2 style="font-size: 1.9em; margin-bottom: 1px; margin-top: 0;"> <a href="/product/niftylift-hr15n-boom-lift-hire/" data-gtm="Product Name (C)" style="color: #404040; ">Niftylift HR15N 15.5m Hybrid Articulated Boom Lift</a> </h2> <p class="context">Ideal For Indoor & Outdoor Reach</p> <!-- --> <div class="catbul"><ul> <li>13.50m Maximum Platform Height</li> <li>15.50m Maximum Working Height</li> <li>9.70m Horizontal Reach</li> <li>180&deg; Platform Rotation</li> <li>1.5m Narrow Chassis</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul></div> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> </div> </div> <div class="four mobile-four columns"> <div class="product-mobile"> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> <div class="catbul"><ul> <li>13.50m Maximum Platform Height</li> <li>15.50m Maximum Working Height</li> <li>9.70m Horizontal Reach</li> <li>180&deg; Platform Rotation</li> <li>1.5m Narrow Chassis</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul></div> </div> <div class="row desc"> <div class="twelve mobile-four columns product-price-wrap"> <span class="price">from </span><span class="price"> £451.04 </span> </div> </div> <div class="twelve mobile-four columns ticks"> <p style="font-size: 1.1em; margin: 1em 0;">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;DIY &amp; Trade<br class="hide-for-small"/> &nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;<span style="color: #c8102e">Save 27&#37;</span><br/> <span class="hide-for-small">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;Best Availability</span> </p> </div> <div class="row"> <!--<div class="twelve mobile-four columns"> <a href="/product/niftylift-hr15n-boom-lift-hire/?booking_modal_show=1" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/niftylift-hr15n-boom-lift-hire/" data-gtm="Button: Book & Pay Online (C)" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/niftylift-hr15n-boom-lift-hire/" data-gtm="Button: Product Detail (C)" title="More Information" class="button expand quotebutton-alt">Product Detail</a> </div>--> <div class="twelve mobile-four columns"> <a href="/product/niftylift-hr15n-boom-lift-hire/" data-gtm="Button: Details & Booking (C)" title="Details &amp; Booking" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;"><i class="fas fa-calendar-alt"></i>&nbsp;&nbsp; Details &nbsp;&amp;&nbsp; Booking</a> </div> </div> <div class="row"> <div class="twelve columns" style="text-align: center; padding-top: 1em; color: #808080;"> <p class='product-list-free-delivery'> <i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>Low Cost</span> National Delivery </p> </div> </div> </div> </div> </div> <div style="margin-bottom: 2em;" class="product-list-item"> <div class="twelve columns" style=" height: 100%; margin-bottom: 2em; padding:1.5em 1.5em 0; min-height: 280px;"> <div class="three mobile-four columns"> <div class="images"> <a href="/product/nifty-hr124x4-hybrid-cherry-picker-hire/" data-gtm="Product Image (C)"> <img class="primary" loading="eager" style="display: block; margin-left: auto; margin-right: auto;" src="/uploaded/thumbnails/niftylift_hr12_4x4_hire_4451_400x400.jpg" title="Niftylift HR12 4x4 12.2m Hybrid Boom Lift Hire " alt="Niftylift HR12 4x4 12.2m Hybrid Boom Lift Hire " data-gtm="Product Image (C)" width="100%" height="100%" /> </a> </div> </div> <div class="five mobile-four columns"> <div class="desc"> <h2 style="font-size: 1.9em; margin-bottom: 1px; margin-top: 0;"> <a href="/product/nifty-hr124x4-hybrid-cherry-picker-hire/" data-gtm="Product Name (C)" style="color: #404040; ">Niftylift HR12 4x4 12.2m Hybrid Boom Lift</a> </h2> <p class="context">Ideal For Indoor Applications</p> <!-- --> <div class="catbul"><ul> <li>Rough Terrain Tyres&nbsp;</li> <li>Compact Footprint</li> <li>Energy Efficient</li> <li>Articulating Boom</li> <li>All-Round Guardrail &amp; Locking Gate</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul></div> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> </div> </div> <div class="four mobile-four columns"> <div class="product-mobile"> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> <div class="catbul"><ul> <li>Rough Terrain Tyres&nbsp;</li> <li>Compact Footprint</li> <li>Energy Efficient</li> <li>Articulating Boom</li> <li>All-Round Guardrail &amp; Locking Gate</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul></div> </div> <div class="row desc"> <div class="twelve mobile-four columns product-price-wrap"> <span class="price">from </span><span class="price"> £470.28 </span> </div> </div> <div class="twelve mobile-four columns ticks"> <p style="font-size: 1.1em; margin: 1em 0;">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;DIY &amp; Trade<br class="hide-for-small"/> &nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;<span style="color: #c8102e">Save 24&#37;</span><br/> <span class="hide-for-small">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;Best Availability</span> </p> </div> <div class="row"> <!--<div class="twelve mobile-four columns"> <a href="/product/nifty-hr124x4-hybrid-cherry-picker-hire/?booking_modal_show=1" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/nifty-hr124x4-hybrid-cherry-picker-hire/" data-gtm="Button: Book & Pay Online (C)" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/nifty-hr124x4-hybrid-cherry-picker-hire/" data-gtm="Button: Product Detail (C)" title="More Information" class="button expand quotebutton-alt">Product Detail</a> </div>--> <div class="twelve mobile-four columns"> <a href="/product/nifty-hr124x4-hybrid-cherry-picker-hire/" data-gtm="Button: Details & Booking (C)" title="Details &amp; Booking" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;"><i class="fas fa-calendar-alt"></i>&nbsp;&nbsp; Details &nbsp;&amp;&nbsp; Booking</a> </div> </div> <div class="row"> <div class="twelve columns" style="text-align: center; padding-top: 1em; color: #808080;"> <p class='product-list-free-delivery'> <i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>Low Cost</span> National Delivery </p> </div> </div> </div> </div> </div> <!-- start promo --> <div style="margin-bottom: 2em;" class="hide-for-small category-promo"> <div class="twelve columns" style="height: 100%; background-color: #fff; margin-bottom: 3em; padding:1.5em 1.5em 0;"> <!--<div class="row" style="padding: 1em 0;"> <div class="three hide-for-small columns" style="text-align: center;"> <img src="/themes/nthsv3/resources/images/rated_excellent2.png" loading="lazy" alt="Tool Hire: Rated Excellent" style="float: left; width: 220px;" height="100%" /> </div> <div class="three mobile-four columns"> <div class="stars"> <img src="/themes/nthsv3/resources/images/stars-5.svg" loading="lazy" alt="Tool Hire: Rated Excellent" width="50%" height="50%"> </div> <div class="minireview"> <h3 style="font-size: 1.2em; font-weight: 900; margin-bottom: 0; text-align: left;">Hassle-Free</h3> <p style="margin-bottom: 0;">Was really simple and quick to make changes to my hire arrangement using the online chat.</p> <p style="color: #707070;">Emma</p> </div> </div> <div class="three mobile-four columns"> <div class="stars"> <img src="/themes/nthsv3/resources/images/stars-5.svg" loading="lazy" alt="Tool Hire: Rated Excellent" width="50%" height="50%"> </div> <div class="minireview"> <h3 style="font-size: 1.2em; font-weight: 900; margin-bottom: 0; text-align: left;">Fantastic Service!</h3> <p style="margin-bottom: 0;">Hired with free delivery, collected on agreed day. Friendly and helpful online chat team.</p> <p style="color: #707070;">KMS</p> </div> </div> <div class="three mobile-four columns"> <div class="stars"> <img src="/themes/nthsv3/resources/images/stars-5.svg" loading="lazy" alt="Tool Hire: Rated Excellent" width="50%" height="50%"> </div> <div class="minireview"> <h3 style="font-size: 1.2em; font-weight: 900; margin-bottom: 0; text-align: left;">Excellent</h3> <p style="margin-bottom: 0;">Excellent trouble-free service. Delivered on time and the equipment was clean and well maintained.</p> <p style="color: #707070;">Steve</p> </div> </div> </div>--> <!--<!-- <div style="padding-bottom: 1em;" class="trustpilot-widget" data-locale="en-GB" data-template-id="53aa8912dec7e10d38f59f36" data-businessunit-id="4daec07200006400050f92eb" data-style-height="140px" data-style-width="100%" data-theme="light" data-stars="4,5" data-review-languages="en"> <a href="/reviewed-and-trusted/">Trustpilot</a> </div> -->--> </div> </div> <!-- end promo --> <div style="margin-bottom: 2em;" class="product-list-item"> <div class="twelve columns" style=" height: 100%; margin-bottom: 2em; padding:1.5em 1.5em 0; min-height: 280px;"> <div class="three mobile-four columns"> <div class="images"> <a href="/product/niftylift-hr15-4x4-boom-lift-hire/" data-gtm="Product Image (C)"> <img class="primary" loading="eager" style="display: block; margin-left: auto; margin-right: auto;" src="/uploaded/thumbnails/Niftylift_HR15_4x4_4541_400x400.jpg" title="Niftylift HR15 4x4 15.7m Hybrid Articulated Boom Lift Hire " alt="Niftylift HR15 4x4 15.7m Hybrid Articulated Boom Lift Hire " data-gtm="Product Image (C)" width="100%" height="100%" /> </a> </div> </div> <div class="five mobile-four columns"> <div class="desc"> <h2 style="font-size: 1.9em; margin-bottom: 1px; margin-top: 0;"> <a href="/product/niftylift-hr15-4x4-boom-lift-hire/" data-gtm="Product Name (C)" style="color: #404040; ">Niftylift HR15 4x4 15.7m Hybrid Articulated Boom Lift</a> </h2> <p class="context"></p> <!-- --> <div class="catbul"><ul> <li>13.70m Maximum Platform Height</li> <li>15.70m Maximum Working Height</li> <li>9.40m Horizontal Reach</li> <li>180&deg; Platform Rotation</li> <li>4-Wheel-Drive</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul></div> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> </div> </div> <div class="four mobile-four columns"> <div class="product-mobile"> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> <div class="catbul"><ul> <li>13.70m Maximum Platform Height</li> <li>15.70m Maximum Working Height</li> <li>9.40m Horizontal Reach</li> <li>180&deg; Platform Rotation</li> <li>4-Wheel-Drive</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul></div> </div> <div class="row desc"> <div class="twelve mobile-four columns product-price-wrap"> <span class="price">from </span><span class="price"> £481.82 </span> </div> </div> <div class="twelve mobile-four columns ticks"> <p style="font-size: 1.1em; margin: 1em 0;">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;DIY &amp; Trade<br class="hide-for-small"/> &nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;<span style="color: #c8102e">Save 23&#37;</span><br/> <span class="hide-for-small">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;Best Availability</span> </p> </div> <div class="row"> <!--<div class="twelve mobile-four columns"> <a href="/product/niftylift-hr15-4x4-boom-lift-hire/?booking_modal_show=1" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/niftylift-hr15-4x4-boom-lift-hire/" data-gtm="Button: Book & Pay Online (C)" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/niftylift-hr15-4x4-boom-lift-hire/" data-gtm="Button: Product Detail (C)" title="More Information" class="button expand quotebutton-alt">Product Detail</a> </div>--> <div class="twelve mobile-four columns"> <a href="/product/niftylift-hr15-4x4-boom-lift-hire/" data-gtm="Button: Details & Booking (C)" title="Details &amp; Booking" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;"><i class="fas fa-calendar-alt"></i>&nbsp;&nbsp; Details &nbsp;&amp;&nbsp; Booking</a> </div> </div> <div class="row"> <div class="twelve columns" style="text-align: center; padding-top: 1em; color: #808080;"> <p class='product-list-free-delivery'> <i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>Low Cost</span> National Delivery </p> </div> </div> </div> </div> </div> <script type='application/ld+json'>{"@context":"http://www.schema.org","name":"Products","@type":"ItemList","itemListElement":[{"@type":"ListItem","position":1,"url":"https://www.nationaltoolhireshops.co.uk/product/nifty-hr12n-hire/"},{"@type":"ListItem","position":2,"url":"https://www.nationaltoolhireshops.co.uk/product/niftylift-hr15n-boom-lift-hire/"},{"@type":"ListItem","position":3,"url":"https://www.nationaltoolhireshops.co.uk/product/nifty-hr124x4-hybrid-cherry-picker-hire/"},{"@type":"ListItem","position":4,"url":"https://www.nationaltoolhireshops.co.uk/product/niftylift-hr15-4x4-boom-lift-hire/"}],"numberOfItems": "4"}</script> <!-- --> <!--</div> </section>--> </p> </li> </ul> </div> <script src="/themes/nthsv3/resources/javascripts/foundation/util.js"></script> <script src="/themes/nthsv3/resources/javascripts/foundation/main.js"></script> </div> </div> </div> </form> <div id="booking_modal" ajax-id="693ebe7734ca2" data-reveal class="" data-overlay="false"> <link rel="stylesheet" type="text/css" href="https://booking.nationaltoolhireshops.co.uk/themes/nationaltoolhire/uk/css/bookingV2.css" /> <link rel="stylesheet" type="text/css" href="https://booking.nationaltoolhireshops.co.uk/themes/sites/nths/css/bookingV2.css" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="stylesheet" href="https://booking.nationaltoolhireshops.co.uk/themes/nationaltoolhire/uk/css/bootstrap-isolated-4-6-1.css"> <link rel="stylesheet" href="//code.jquery.com/ui/1.13.1/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/ui/1.13.1/jquery-ui.min.js" integrity=sha384-tc3TMXCcTCib89yECEQXI4e6DhhlwNrqzYpvyeSqBD2vB/KugQH7o3p+/UtKuS5L crossorigin="anonymous"></script> <form id="bookingBox"> <div class="booking-close"><a href="javascript:void(0)" class="closebtn">&times;</a></div> <div class="booking-info"> <div class="booking-calendar-box"> <div class="booking-tabs"> <div class="booking-tabs-wrap"> <input type="hidden" id="datepicker_booking_start" name="start_date"> <input type="hidden" id="datepicker_booking_end" name="end_date"> <button type="button" data-tab-id="datepicker_booking_start" class="active"> Booking Start Date </button> <button type="button" disabled data-tab-id="datepicker_booking_end"> Booking End Date </button> </div> </div> <div class="booking-calendar"></div> </div> <div class="booking-container bootstrap-isolation-4-6-1"> <input type="hidden" name="edit_item_id" value=""> <div id="booking_summary" class="row booking-stage-2 flex-nowrap"> <div class="col-md-9 col-sm-9"> <span id="booking_num_days" class="h4"></span> </div> <div class="col-md-3 col-sm-3 text-right"> <span class="h4 price-display-variable "></span> </div> </div> <div class="row"> <div class="col-12"> <div id="saturday_sameday_alert" class="my-3 alert alert-success d-none">Saturday Same-Day Hire is only available as Click &amp; Collect. If you require delivery/collection by us, please select Friday as the start date and Saturday as the end date (for no extra cost).</div> <div id="extended_sameday_alert" class="my-3 alert alert-success d-none"> Same-Day Hire is only available as Click &amp; Collect today. If you require delivery/collection by us, please select a different start date. </div> <div class="row"> <div class="col-md-12 form-group py-1 mt-3"> <label for="booking_quantity">Quantity</label> <div class="form-quantity"> <input type="number" class="form-control" step="1" min="1" value="1" name="booking_quantity" id="booking_quantity"> <div class="form-quantity-nav"> <div class="form-quantity-btn quantity-minus disabled">-</div> <div class="form-quantity-btn quantity-plus">+</div> </div> </div> </div> </div> </div> </div> <hr> <div class="row booking-stage-2"> <div class="col-12"> <section> <div class="h5 mt-2 mb-2">Accessories</div> <div class="row mb-2"> <div class="col-12"> <label class="checkbox label-inline disabled"> <input type="checkbox" checked disabled data-name="Insurance" data-cost="56.1" name="extras[6086]" data-is-hired="1"> Insurance <span class="price-display-variable pull-right" data-for="extras[]"> &nbsp;(£56.10 / week) </span> </label> </div> </div> </section> <hr> <section class="extras-section"> <div class="h5 mt-2 mb-3">Extras</div> <div class="row mb-3"> <div class="col-sm-9 col-lg-9 col-md-8 extra-description"> <label for="extras[5600]" class="mb-2 d-md-none">Super Grip Gloves - Large&nbsp; <b>(£3.06)</b> </label> <div class="form-quantity d-block"> <input type="number" class="form-control" min="0" step="1" value="0" name="extras[5600]" id="extras[5600]" data-cost="3.06" data-is-hired="" data-name="Super Grip Gloves - Large"> <div class="form-quantity-nav"> <div class="form-quantity-btn quantity-minus disabled">-</div> <div class="form-quantity-btn quantity-plus">+</div> </div> </div> <label for="extras[5600]" class="pl-2 d-none d-md-block">Super Grip Gloves - Large&nbsp; <b>(£3.06)</b> </label> </div> <div class="col-md-4 col-lg-3 col-sm-3"> <div class="price-display-variable text-right font-weight-bold" style="font-size: 1em;" data-for="extras[5600]">£0.00</div> </div> </div> <div class="row mb-3"> <div class="col-sm-9 col-lg-9 col-md-8 extra-description"> <label for="extras[5601]" class="mb-2 d-md-none">Super Grip Gloves - Extra Large&nbsp; <b>(£3.06)</b> </label> <div class="form-quantity d-block"> <input type="number" class="form-control" min="0" step="1" value="0" name="extras[5601]" id="extras[5601]" data-cost="3.06" data-is-hired="" data-name="Super Grip Gloves - Extra Large"> <div class="form-quantity-nav"> <div class="form-quantity-btn quantity-minus disabled">-</div> <div class="form-quantity-btn quantity-plus">+</div> </div> </div> <label for="extras[5601]" class="pl-2 d-none d-md-block">Super Grip Gloves - Extra Large&nbsp; <b>(£3.06)</b> </label> </div> <div class="col-md-4 col-lg-3 col-sm-3"> <div class="price-display-variable text-right font-weight-bold" style="font-size: 1em;" data-for="extras[5601]">£0.00</div> </div> </div> <div class="row mb-3"> <div class="col-sm-9 col-lg-9 col-md-8 extra-description"> <label for="extras[6272]" class="mb-2 d-md-none">Hard Hat&nbsp; <b>(£8.16)</b> </label> <div class="form-quantity d-block"> <input type="number" class="form-control" min="0" step="1" value="0" name="extras[6272]" id="extras[6272]" data-cost="8.16" data-is-hired="" data-name="Hard Hat"> <div class="form-quantity-nav"> <div class="form-quantity-btn quantity-minus disabled">-</div> <div class="form-quantity-btn quantity-plus">+</div> </div> </div> <label for="extras[6272]" class="pl-2 d-none d-md-block">Hard Hat&nbsp; <b>(£8.16)</b> </label> </div> <div class="col-md-4 col-lg-3 col-sm-3"> <div class="price-display-variable text-right font-weight-bold" style="font-size: 1em;" data-for="extras[6272]">£0.00</div> </div> </div> <div class="row mb-3"> <div class="col-sm-9 col-lg-9 col-md-8 extra-description"> <label for="extras[6273]" class="mb-2 d-md-none">Hi-Vis&nbsp; <b>(£7.14)</b> </label> <div class="form-quantity d-block"> <input type="number" class="form-control" min="0" step="1" value="0" name="extras[6273]" id="extras[6273]" data-cost="7.14" data-is-hired="" data-name="Hi-Vis"> <div class="form-quantity-nav"> <div class="form-quantity-btn quantity-minus disabled">-</div> <div class="form-quantity-btn quantity-plus">+</div> </div> </div> <label for="extras[6273]" class="pl-2 d-none d-md-block">Hi-Vis&nbsp; <b>(£7.14)</b> </label> </div> <div class="col-md-4 col-lg-3 col-sm-3"> <div class="price-display-variable text-right font-weight-bold" style="font-size: 1em;" data-for="extras[6273]">£0.00</div> </div> </div> </section> </div> </div> <hr class="booking-stage-2"> <div class="row booking-stage-2 mt-2"> <div class="col-6 form-group"> <div class="h4 mt-1 mb-1">Total</div> </div> <div class="col-6 text-right"> <span id="booking_total" class="price-display-variable h4 mb-3"></span> </div> </div> <div id="booking_errors" class="d-none alert alert-danger text-center my-3"> It looks like some of the fields are invalid. Please check them and try again. </div> <button type="submit" title="Book Hire" class="btn btn-info py-3 btn-book"><i class="fa fa-lg fa-calendar"></i>&nbsp; Book Hire</button> </div> </div> </form> <div id="overlay-bookingBox"></div> <script type="text/javascript"> (function () { //# sourceURL=bookingForm.js // This section should be constants, but for backwards compatibility we have to use var var IS_EMBEDDED = true; var $MODAL = IS_EMBEDDED ? $('#booking_modal') : $('#bookingBox').parent(); var VALID_START_DATES = ["2025-12-15","2025-12-16","2025-12-17","2025-12-18","2025-12-19","2025-12-20","2025-12-22","2025-12-23","2025-12-24","2025-12-27","2025-12-29","2025-12-30","2025-12-31","2026-01-02","2026-01-03","2026-01-05","2026-01-06","2026-01-07","2026-01-08","2026-01-09","2026-01-10","2026-01-12","2026-01-13","2026-01-14","2026-01-15","2026-01-16","2026-01-17","2026-01-19","2026-01-20","2026-01-21","2026-01-22","2026-01-23","2026-01-24","2026-01-26","2026-01-27","2026-01-28","2026-01-29","2026-01-30","2026-01-31","2026-02-02","2026-02-03","2026-02-04","2026-02-05","2026-02-06","2026-02-07","2026-02-09","2026-02-10","2026-02-11","2026-02-12","2026-02-13","2026-02-14","2026-02-16","2026-02-17","2026-02-18","2026-02-19","2026-02-20","2026-02-21","2026-02-23","2026-02-24","2026-02-25","2026-02-26","2026-02-27","2026-02-28","2026-03-02","2026-03-03","2026-03-04","2026-03-05","2026-03-06","2026-03-07","2026-03-09","2026-03-10","2026-03-11","2026-03-12","2026-03-13","2026-03-14","2026-03-16","2026-03-17","2026-03-18","2026-03-19","2026-03-20","2026-03-21","2026-03-23","2026-03-24","2026-03-25","2026-03-27","2026-03-28","2026-03-30","2026-03-31","2026-04-01","2026-04-02","2026-04-03","2026-04-04","2026-04-06","2026-04-07","2026-04-08","2026-04-09","2026-04-10","2026-04-11","2026-04-13","2026-04-14","2026-04-15","2026-04-16","2026-04-17","2026-04-18","2026-04-20","2026-04-21","2026-04-22","2026-04-23","2026-04-24","2026-04-25","2026-04-27","2026-04-28","2026-04-29","2026-04-30","2026-05-01","2026-05-02","2026-05-04","2026-05-05","2026-05-06","2026-05-07","2026-05-08","2026-05-09","2026-05-11","2026-05-12","2026-05-13","2026-05-14","2026-05-15","2026-05-16","2026-05-18","2026-05-19","2026-05-20","2026-05-21","2026-05-22","2026-05-23","2026-05-25","2026-05-26","2026-05-27","2026-05-28","2026-05-29","2026-05-30","2026-06-01","2026-06-02","2026-06-03","2026-06-04","2026-06-05","2026-06-06","2026-06-08","2026-06-09","2026-06-10","2026-06-11","2026-06-12","2026-06-13","2026-06-15","2026-06-16","2026-06-17","2026-06-18","2026-06-19","2026-06-20","2026-06-22","2026-06-23","2026-06-24","2026-06-25","2026-06-26","2026-06-27","2026-06-29","2026-06-30","2026-07-01","2026-07-02","2026-07-03","2026-07-04","2026-07-06","2026-07-07","2026-07-08","2026-07-09","2026-07-10","2026-07-11","2026-07-13","2026-07-14","2026-07-15","2026-07-16","2026-07-17","2026-07-18","2026-07-20","2026-07-21","2026-07-22","2026-07-23","2026-07-24","2026-07-25","2026-07-27","2026-07-28","2026-07-29","2026-07-30","2026-07-31","2026-08-01","2026-08-03","2026-08-04","2026-08-05","2026-08-06","2026-08-07","2026-08-08","2026-08-10","2026-08-11","2026-08-12","2026-08-13","2026-08-14","2026-08-15","2026-08-17","2026-08-18","2026-08-19","2026-08-20","2026-08-21","2026-08-22","2026-08-24","2026-08-25","2026-08-26","2026-08-27","2026-08-28","2026-08-29","2026-08-31","2026-09-01","2026-09-02","2026-09-03","2026-09-04","2026-09-05","2026-09-07","2026-09-08","2026-09-09","2026-09-10","2026-09-11","2026-09-12","2026-09-14","2026-09-15","2026-09-16","2026-09-17","2026-09-18","2026-09-19","2026-09-21","2026-09-22","2026-09-23","2026-09-24","2026-09-25","2026-09-26","2026-09-28","2026-09-29","2026-09-30","2026-10-01","2026-10-02","2026-10-03","2026-10-05","2026-10-06","2026-10-07","2026-10-08","2026-10-09","2026-10-10","2026-10-12","2026-10-13","2026-10-14","2026-10-15","2026-10-16","2026-10-17","2026-10-19","2026-10-20","2026-10-21","2026-10-22","2026-10-23","2026-10-24","2026-10-26","2026-10-27","2026-10-28","2026-10-29","2026-10-30","2026-10-31","2026-11-02","2026-11-03","2026-11-04","2026-11-05","2026-11-06","2026-11-07","2026-11-09","2026-11-10","2026-11-11","2026-11-12","2026-11-13","2026-11-14","2026-11-16","2026-11-17","2026-11-18","2026-11-19","2026-11-20","2026-11-21","2026-11-23","2026-11-24","2026-11-25","2026-11-26","2026-11-27","2026-11-28","2026-11-30","2026-12-01","2026-12-02","2026-12-03","2026-12-04","2026-12-05","2026-12-07","2026-12-08","2026-12-09","2026-12-10","2026-12-11","2026-12-12","2026-12-14"]; var DATEPICKER_DEFAULTS = { dateFormat: 'dd-mm-yy', format: 'g:i A', minDate: '15-12-2025' || -0, firstDay: 1, }; var DELIVERY_CUTOFF = '11:00'; var CURRENCY = '£' || '£'; /* When we search for the minimum end date, it starts on the start date i.e same-day return If that isn't possible, we try the next day, then the next, and so on This is the maximum number of days we should look ahead by before showing an error If it's exceeded, it's probably because dateCosts isn't being populated so there aren't any valid booking dates */ var MAXIMUM_END_DATE_ADJUSTMENT = 14; var ROOT_URL = "https://booking.nationaltoolhireshops.co.uk"; var DEFAULT_ERROR_MSG = $('#booking_errors').text(); var dateCosts; var product = { 'name': "Genie Z-60 FE 20m Hybrid Articulating Boom Lift", 'sku': "Genie Z-60 FE", 'prod_code': "6352" }; var $pickerStart = $('#datepicker_booking_start', $MODAL); var $pickerEnd = $('#datepicker_booking_end', $MODAL); var $bookingSummary = $('#booking_summary', $MODAL); var $bookingCost = $('#booking_summary .price-display-variable', $MODAL); var $numDays = $('#booking_num_days', $MODAL); var $qty = $('input[name="booking_quantity"], select[name="booking_quantity"]', $MODAL); var $bookingTotal = $('#booking_total.price-display-variable', $MODAL); var $priceSubTotals = $('.price-display-variable', $MODAL).not($bookingTotal); var $form = $('#bookingBox', $MODAL); var $overlay = $('#overlay-bookingBox', $MODAL); window.booking = { form: $form, product: product, redirectDelay: 250 } $MODAL.on('open.zf.reveal reveal:open', openBookingBox); $overlay.add('#booking_modal .closebtn').on('click', closeBookingBox); if((new URLSearchParams(window.location.search)).get('booking_modal_show') == 1) { $(document).ready(openBookingBox); } $pickerStart.datepicker($.extend({ beforeShowDay: isValidStartDate, numberOfMonths: [2,1], }, DATEPICKER_DEFAULTS)) .on('change', function () { updateDateCosts(function () { $('.booking-tabs button[data-tab-id="datepicker_booking_end"]').removeAttr('disabled') .addClass('active').siblings().removeClass('active'); $('#booking_end', $MODAL).removeClass('disabled'); $pickerEnd.datepicker('setDate', null).datepicker('show'); $pickerEnd.find('.ui-datepicker-days-cell-over').trigger('mouseenter') let validDates = Object.keys(dateCosts); if(validDates.length === 1) { let dateObj = $.datepicker.parseDate('yy-mm-dd', validDates[0]); $pickerEnd.datepicker('setDate', dateObj).trigger('change'); updateBookingOverview(); } }); }); $pickerEnd.datepicker($.extend({ beforeShowDay: isValidEndDate, numberOfMonths: [2,1] }, DATEPICKER_DEFAULTS)) .on('change', function () { validateBookingDates(); $('#bookingBox').addClass('show-booking-container'); if (window.matchMedia("(max-width: 767px)").matches) { $('#bookingBox').animate({ scrollTop: $('#booking_summary').offset().top }, 'slow'); } }); $('.ui-datepicker-div-in-menu').removeClass('ui-datepicker-div-in-menu'); $('#ui-datepicker-div').on('mouseenter', 'td', highlightBookingDates); $('.booking-tabs button[ data-tab-id="datepicker_booking_start"]').on('click', function() { $(this).siblings().removeClass( 'active' ); $(this).addClass( 'active' ); $pickerStart.datepicker('show'); }); $('.booking-tabs button[ data-tab-id="datepicker_booking_end"]').on('click', function() { $(this).siblings().removeClass( 'active' ); $(this).addClass( 'active' ); $pickerEnd.datepicker('show'); }); $('.form-quantity').each(function() { let $spinner = $(this); let $input = $spinner.find('input[type="number"]'); let $btnPlus = $spinner.find('.quantity-plus'); let $btnMinus = $spinner.find('.quantity-minus'); let min = +($input.attr('min') || 0); let max = +($input.attr('max') || 999); $spinner.on('click', '.quantity-plus, .quantity-minus', function(e) { let val = parseFloat($input.val()); if(e.currentTarget.classList.contains('quantity-plus')) { val++; } else { val--; } val = Math.min(Math.max(val, min), max); val === min ? $btnMinus.addClass('disabled') : $btnMinus.removeClass('disabled'); val === max ? $btnPlus.addClass('disabled') : $btnPlus.removeClass('disabled'); $input.val(val); updateDateCosts(); }); }); $qty.on('input', updateBookingOverview); $('input[type="number"][data-cost]', $MODAL).on('input', function() { updateExtrasCosts(); updateBookingOverview(); }); $form.on('submit', function(e) { e.preventDefault(); var $this = $(this); $this.addClass('ajax-form-loading'); var url = new URL(ROOT_URL); url.pathname = '/booking'; url.searchParams.append('edit_item_url', window.location.href.split('?')[0]); var editItemId = $('input[name="edit_item_id"]').val(); if(editItemId) { url.searchParams.append('edit_item_id', editItemId); } url.searchParams.append('prod_code', product.prod_code); url.searchParams.append('sku', product.sku); $.ajax({ type: $this.attr('method'), url: url, method: 'POST', data: $this.serialize(), xhrFields: { withCredentials: true }, success: function(response) { $this.removeClass('ajax-form-loading'); var $errorDisplay = $('#booking_errors'); $errorDisplay.addClass('d-none'); if(response.success) { $form.trigger('booking:basket-add', [getSelectedItems()]); } if(!response.success) { $errorDisplay.removeClass('d-none'); let error = response.errors ? response.errors.join('<br>') : DEFAULT_ERROR_MSG; $errorDisplay.text(error); } if(response.redirect) { setTimeout(function() { window.location.href = ROOT_URL + response.redirect; }, booking.redirectDelay) } } }); }); function getSelectedItems() { let items = [{ 'item_id': product.sku, 'item_name': product.name, 'price': product.bookedCost, 'quantity': +$qty.val() }] $('input[name^="extras"]').each(function(i, elem) { let qty = elem.type === 'checkbox' ? 1 : +elem.value; if(qty <= 0 || isNaN(qty)) return; let price = +elem.getAttribute('data-cost') * qty; if(elem.getAttribute('data-is-hired')) { price *= Math.ceil(getBookingDaysLength()/7); } items.push({ 'item_id': '', 'item_name': elem.getAttribute('data-name'), 'price': price, 'quantity': qty }); }); return items; } function openBookingBox() { $('#bookingBox').addClass('show'); $overlay.show(); // Only initialise the datepicker once if(!$('.ui-datepicker-div-in-menu').length) { $('#bookingBox .booking-calendar').append($('#ui-datepicker-div').addClass('ui-datepicker-div-in-menu')); $pickerStart.datepicker('show'); } } function closeBookingBox() { $overlay.hide(); $('#bookingBox').removeClass('show'); $('html, body').removeClass('is-reveal-open'); } function validateBookingDates() { if($pickerStart.attr('disabled') || $pickerEnd.attr('disabled')) { return false; } var startDate = $pickerStart.datepicker('getDate'); var endDate = $pickerEnd.datepicker('getDate'); var minimumEndDate = startDate; var daysAdjusted = 0; while(!isValidEndDate(minimumEndDate)[0] && daysAdjusted <= MAXIMUM_END_DATE_ADJUSTMENT) { minimumEndDate = new Date(minimumEndDate.getTime() + (24 * 60 * 60 * 1000)); daysAdjusted++; } if(startDate === null) { return; } $pickerEnd.datepicker('option', 'minDate', minimumEndDate); if(endDate === null) { return; } if(!isValidEndDate(endDate)[0] || !isValidEndDate(minimumEndDate)[0]) { // Validation has pushed the end date out of scope, reset it so the user can pick again $pickerEnd.datepicker('setDate', null); } $pickerEnd.datepicker('option', 'minDate', minimumEndDate); updateBookingOverview(); } /** * Per jQuery datepicker documentation: * A function that takes a date as a parameter and must return an array with: * [0]: true/false indicating whether or not this date is selectable * [1]: a CSS class name to add to the date's cell or "" for the default presentation * [2]: an optional popup tooltip for this date * The function is called for each day in the datepicker before it is displayed. */ function isValidEndDate(date) { var dateString = $.datepicker.formatDate('yy-mm-dd', date); var selectable = !!(dateCosts[dateString] && dateCosts[dateString]['cost']); var classes = ''; var startDate = $pickerStart.datepicker('getDate'); var endDate = $pickerEnd.datepicker('getDate'); if(date.toString() === startDate.toString()) { classes += ' datepicker-start-date'; } else if(date > startDate && date < endDate) { classes += ' datepicker-date-range'; } return [ selectable, classes, null ]; } /** * Validator for jQuery datepicker * @param date The date to be tested * @returns array [ * boolean , * string, * null * ] * */ function isValidStartDate(date) { var dateString = $.datepicker.formatDate('yy-mm-dd', date); // IE doesn't support array.includes() var selectable = VALID_START_DATES.indexOf(dateString) !== -1; return [ selectable, "", null ]; } function updateDateCosts(cb) { var data = { 'start_date': $.datepicker.formatDate(DATEPICKER_DEFAULTS.dateFormat, $pickerStart.datepicker('getDate')), 'booking_quantity': $qty.val(), 'json': true }; var editItemId = $('input[name="edit_item_id"]').val(); if(editItemId) { data['edit_item_id'] = editItemId } else { data['prod_code'] = product.prod_code; data['sku'] = product.sku } $.ajax({ url: ROOT_URL + '/booking/', datatype: 'jsonp', data: data, xhrFields: { withCredentials: true }, success: function(data) { if(typeof data === 'string') { data = JSON.parse(data); } if(data.success === true && data.costs) { for(var date in data.costs) { if(data.costs[date].cost > 0) { dateCosts = data.costs } } } if(!dateCosts) { showBookingError(); $pickerStart.attr('disabled', true); $pickerEnd.attr('disabled', true); } validateBookingDates(); if(cb && typeof cb === 'function') { cb(); } } }); } function showBookingError(text) { text = text || "Sorry, an unknown problem has been encountered. Please refresh the page and try again. If the problem persists, please contact us."; $('#booking_errors').text(text).removeClass('d-none'); } function getBookingDaysLength() { var startDate = $pickerStart.datepicker('getDate'); var endDate = $pickerEnd.datepicker('getDate'); if(!startDate || !endDate) { return null; } return Math.round((+endDate - +startDate) / 86400000); } function updateExtrasCosts() { $('input[data-cost]').each(function(i, elem) { var $elem = $(elem); var $priceDisplay = $('.price-display-variable[data-for="'+$elem.attr('name')+'"]'); var price = $elem.data('cost')*$elem.val(); if($elem.data('is-hired')) { price *= Math.ceil(getBookingDaysLength()/7); } $priceDisplay.text(CURRENCY + price.toFixed(2)); }); } function updateBookingOverview() { const $extendedSamedayAlert = $('#extended_sameday_alert'); const now = new Date(); var $saturdayAlert = $('#saturday_sameday_alert'); $extendedSamedayAlert.addClass('d-none'); $saturdayAlert.addClass('d-none'); updateExtrasCosts(); var days = getBookingDaysLength(); if(days === null) { $bookingSummary.addClass('d-none'); $bookingCost.text(CURRENCY + '0.00'); $numDays.text(''); return; } var startDate = $pickerStart.datepicker('getDate'); var endDate = $pickerEnd.datepicker('getDate'); var endDateString = $.datepicker.formatDate('yy-mm-dd', endDate); var cost = dateCosts[endDateString].cost*$qty.val(); const isSameDay = $.datepicker.formatDate('y-m-d', now) === $.datepicker.formatDate('y-m-d', startDate); product.bookedCost = +cost.toFixed(2); $bookingCost.text(CURRENCY + cost.toFixed(2)); // Just for display purposes days++; if(isSameDay && now.toLocaleTimeString('en-GB') >= DELIVERY_CUTOFF) { $extendedSamedayAlert.removeClass('d-none'); } if(days === 0) { days = '< 1 day'; if(startDate.getDay() === 6) { $saturdayAlert.removeClass('d-none'); } } else if(days === 1) { days += ' day'; } else { days += ' days'; } $numDays.html($qty.val() + 'x ' + product.name); $bookingTotal.text(CURRENCY + getTotalCost().toFixed(2)); $('.booking-stage-2', $MODAL).removeClass('d-none'); } function getTotalCost() { var cost = 0; for(var i=0; i<$priceSubTotals.length; i++) { var subTotal = +$($priceSubTotals[i]).text().replace(CURRENCY, ''); if(!isNaN(subTotal)) { cost += subTotal; } } $('input[type="checkbox"][data-cost]').each(function(i, elem) { let subtotal = +elem.getAttribute('data-cost'); if(elem.getAttribute('data-is-hired')) { subtotal *= Math.ceil(getBookingDaysLength()/7); } cost += subtotal; }); return cost; } function highlightBookingDates() { var $td = $(this); var $wrapper = $td.parents('#ui-datepicker-div'); var highlightClass = 'datepicker-date-range'; // Only highlight a trail of dates if this is the picker for booking_end_date and there isn't a date already selected if($('.booking-tabs button.active').attr('data-tab-id') !== $pickerEnd.attr('id') || $pickerEnd.datepicker('getDate')) { return; } $wrapper.find('.'+highlightClass).removeClass(highlightClass); $td.parent().prevAll().find('td:not(.ui-datepicker-current-day)').addClass(highlightClass); $td.prevAll().filter('td:not(.ui-datepicker-current-day)').addClass(highlightClass); let $start = $wrapper.find('.datepicker-start-date'); $start.prevAll().removeClass(highlightClass); $start.parent().prevAll().find('td').removeClass(highlightClass); } $('.extras-tooltip').on('click', function() { $(this).tooltip({ items: ".extras-tooltip", content: function () { return $(this).prop('title'); } }); $(this).tooltip("open"); }); $('.extras-tooltip').on('mouseout', function() { $(this).tooltip("destroy"); }); })(); </script> </div> <style> .reveal-modal #postcode_lookup_form { border: none; padding: 0; } .reveal-modal #postcode_lookup_form .form-group { padding: 1em 0; } </style> <div class="reveal-modal" id="postcode_modal" data-reveal> <div class="row"> <div class="twelve columns" style="padding:2em";> <style> #postcode_lookup_form { padding: 20px; border: 1px solid lightgray; max-width: 600px; margin-top: 5px; text-align: center; } #postcode_lookup_form #depot_address { width: 100%; position: relative; } #postcode_lookup_form table { position: relative; } #depot_address.admin-view::before { content: 'Admin view'; position: absolute; left: 0; top: -15px; font-size: 11px; background: #dadada; padding: 2px; } </style> <form id="postcode_lookup_form" action="/include_postcode_lookup/" method="get" class="container"> <div class="form-group"> <label>Postcode:</label> <input type="hidden" name="sku" value="Genie Z-60 FE"> <input class="input-sm" type="text" name="postcode" placeholder="Enter your postcode" required> <button type="submit">Find nearby stores</button> </div> <div class="form-group hide"> <table class="twelve"> <tbody id="depot_address" class=""></tbody> </table> </div> </form> <script> (function() { var $form = $('#postcode_lookup_form'); var $addresses = $('#depot_address'); var readOnly = !!"1"; var adminView = !!""; $form.on('submit', function(e) { e.preventDefault(); var $this = $(this); $.ajax({ type: $this.attr('method') || 'post', url: $this.attr('action') || '', data: $this.serialize(), complete: handleFormSubmit }); }); function handleFormSubmit(response) { var depots = JSON.parse(response.responseText); if(!depots) { return; } if(readOnly) { $addresses.find('tr').remove(); $addresses.parents('.hide').removeClass('hide'); for(var i=0; i<depots.length; i++) { var html = '<tr><td class="text-center">'; if(adminView) { html += depots[i].supplierName + ', ' + depots[i].address } else { html += depots[i].name + ', ' + depots[i].postcode.split(' ')[0]; } if(depots[i].distance && depots[i].distanceUnits) { if(depots[i].distance > 1) { depots[i].distance = Math.round(depots[i].distance); } html += ' - (' + depots[i].distance + ' ' + depots[i].distanceUnits + ' away)' } html += '</td></tr>'; $addresses.append(html); } } else { $addresses.find(':not([value=""])').remove(); $addresses.parents('.hide').removeClass('hide'); for(var i=0; i<depots.length; i++) { var html = '<option value="' + depots[i].id + '">' + depots[i].name + ', ' + depots[i].postcode; if(depots[i].distance && depots[i].distanceUnits) { if(depots[i].distance > 1) { depots[i].distance = Math.round(depots[i].distance); } html += ' - (' + depots[i].distance + ' ' + depots[i].distanceUnits + ' away)' } html += '</option>'; $addresses.append(html); $addresses.trigger('change'); } } } })(); </script> </div> </div> </div> </section> <div id="write-review" class="c-review-form reveal-modal" style="display: none"> <h3 class="t2">Write a review for "Genie Z-60 FE 20m Hybrid Articulating Boom Lift"</h3> <form enctype="multipart/form-data" class="custom" action="/product/genie-z60fe-hire" method="post"> <input type="hidden" name="ls_session_key" value="lsk693ebe77370781.44769889"/> <label for="rating">Rating</label> <select name="rating" id="rating" style="font-size: 1em; margin-bottom: 1em; height: 2em;"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> <label for="review_author_name">Your name</label> <input id="review_author_name" name="review_author_name" type="text" /> <label for="review_author_email">Email</label> <input id="review_author_email" type="text" name="review_author_email" /> <label for="review_title">Title</label> <input id="review_title" name="review_title" type="text" /> <label for="review_text">Review</label> <textarea rows="5" id="review_text" name="review_text" /></textarea> <button type="submit" class="btn button" style="background-color: #00b67A;" onclick="return $(this).getForm().sendRequest('shop:on_addProductReview', { extraFields: { no_flash: true, }, onSuccess: function() { $('#write-review').trigger('reveal:close'); document.location.reload(true); } })">Submit review</button> </form> <a class="close-reveal-modal">&#215;</a> </div> <script type="application/ld+json"> { "@context": "http://schema.org/", "@type": "Product", "name": "Genie Z-60 FE 20m Hybrid Articulating Boom Lift", "image": "https://www.nationaltoolhireshops.co.uk/uploaded/thumbnails/Genie_z60fe_Hire_4462_400x400.jpg", "description": "The Genie Z-60 FE hybrid boom lift offers an electric mode, offering a full day on a single charge & hybrid mode offering one week of run time on a single tank.", "mpn": "Genie Z-60 FE", "model": "Genie Z-60 FE", "sku": "GenieZ-60FE", "manufacturer": "National Tool Hire", "brand": { "@type": "Brand", "name": "National Tool Hire" }, "offers": { "@type": "Offer", "itemCondition": "http://schema.org/NewCondition", "availability": "http://schema.org/InStock", "price": "90", "priceCurrency": "GBP", "priceValidUntil": "2025-12-21", "url": "https://www.nationaltoolhireshops.co.uk/product/genie-z60fe-hire/", "shippingDetails": { "shippingDestination": { "@type": "DefinedRegion", "addressCountry": "GB" }, "shippingRate": { "@type": "MonetaryAmount", "value": 0.00, "currency": "GBP" }, "deliveryTime": { "@type": "ShippingDeliveryTime", "businessDays": { "@type": "OpeningHoursSpecification", "dayOfWeek": [ "https://schema.org/Monday", "https://schema.org/Tuesday", "https://schema.org/Wednesday", "https://schema.org/Thursday", "https://schema.org/Friday", "https://schema.org/Saturday" ] }, "cutoffTime": "11:30:00Z", "handlingTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 2, "unitCode": "d" }, "transitTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "d" } } }, "seller": { "@type": "Organization", "name": "National Tool Hire" }, "hasMerchantReturnPolicy": { "@type": "MerchantReturnPolicy", "applicableCountry": "GB", "returnPolicyCategory": "https://schema.org/MerchantReturnUnlimitedWindow", "merchantReturnDays": 365, "returnMethod": "ReturnByMail", "returnFees": "FreeReturn" } } } </script> ', 86400) /modules/core/classes/core_cachebase.php 262
14 Core_CacheBase->set('nthsv3-partial_shop-product5_2021_c7b34cc386f238d3c1a7dce5a24bf828b9decc20', ' <!-- view=shop:product5_2021 --> <section class="product-genie-z60fe-hire"> <div class="row"> <div class="three mobile-four columns prod-img" style="text-align: center;"> <div class="product-images"> <div class="main"> <img src="/uploaded/thumbnails/Genie_z60fe_Hire_4462_400x400.jpg" title="Genie Z-60 FE 20m Hybrid Articulating Boom Lift Hire" alt="A Genie Z-60 FE 20m Hybrid Articulating Boom Lift on a white background." width="400px" height="400px" /> </div> <div class="thumbs"> <ul> <li> <a href="/uploaded/thumbnails/Genie_z60fe_Hire_4462_400x400.jpg" title="Genie Z-60 FE 20m Hybrid Articulating Boom Lift" width="200px" height="200px" > <img src="/uploaded/thumbnails/Genie_z60fe_Hire_4462_80x80.jpg" title="Genie Z-60 FE 20m Hybrid Articulating Boom Lift" alt="A Genie Z-60 FE 20m Hybrid Articulating Boom Lift on a white background." link rel="preload" as="image" width="80px" height="80px"> </a> </li> <li> <a href="/uploaded/thumbnails/genie_z60fe_boomlift_hire_4463_400x400.jpg" title="Genie Z-60 FE 20m Hybrid Articulating Boom Lift" width="200px" height="200px" > <img src="/uploaded/thumbnails/genie_z60fe_boomlift_hire_4463_80x80.jpg" title="Genie Z-60 FE 20m Hybrid Articulating Boom Lift" alt="A Genie Z-60 FE 20m Hybrid Articulating Boom Lift on a white background." link rel="preload" as="image" width="80px" height="80px"> </a> </li> </ul> </div> </div> </div> <div class="four mobile-four columns middle"> <div class="meta"> <h1 style="font-weight: 900"><em>Genie Z-60 FE 20m Hybrid Articulating Boom Lift Hire</em></h1> <div class="bullets"> <ul> <li>20m Maximum Working Height</li> <li>18m Maximum Platform Height</li> <li>11m Horizontal Outreach</li> <li>All-Round Guardrail &amp; Locking Gate</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul> <ul> <li><span style="font-weight: 700; color: #b40026;">Save 30&#37;</span> on Average UK Price </li> <li>Hire for <span style="font-weight: 700; color: #002B41;">DIY</span> or <span style="font-weight: 700; color: #002B41;">Trade</span></li> </ul> </div> <hr> <p style="font-size: 1.2em;"> </p> <p style='font-size: 1.2em;'><i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>Low Cost</span> Delivery: Nationwide</p> <p style="font-size: 1.2em;"> <i class='fas fa-chart-line fa-fw' style='padding-right: 1em'></i>&nbsp; 5 hired in the last 24 hours </p> <p style="font-size: 1.2em;"> <i class='fas fa-shield fa-fw' style='padding-right: 1em'></i>&nbsp; <a title="Insurance Available" href="#" data-gtm="I: Insurance Available (P)" data-reveal-id="insurance_modal" data-closeonbackgroundclick="false" style="color: #000; border-bottom: 1px #000 dashed;">Insurance Available</a> </p> <p style="font-size: 1.2em;"> <i class='fas fa-money-bill-transfer fa-fw' style='padding-right: 1em'></i>&nbsp; <a title="Deposit Required" href="#" data-gtm="I: Deposit Required (P)" data-reveal-id="deposit_modal" data-closeonbackgroundclick="false" style="color: #000; border-bottom: 1px #000 dashed;">Deposit Required</a> </p> <p style="font-size: 1.2em;"> <i class='fas fa-id-card fa-fw' style='padding-right: 1em'></i>&nbsp; <a title="Online ID Verification Required" href="#" data-gtm="I: Online ID Required (P)" data-reveal-id="id_modal" data-closeonbackgroundclick="false" style="color: #000; border-bottom: 1px #000 dashed;">Online ID Verification Required</a> </p> <p style="font-size: 1.2em; cursor: pointer" aria-label="Open pop-up: Why hire from National Tool Hire?" class="jsOpenPopUp"> <i class='fa-solid fa-circle-question' style='padding-right: 7px'></i> <span data-gtm="I: Why Hire From NTH (P)" style="color: #000; border-bottom: 1px #000 dashed;">Why Hire from National Tool Hire?</span> </p> </div> </div> <div class="five mobile-four columns"> <div class="product-description"> <form enctype="multipart/form-data" class="custom" action="/product/genie-z60fe-hire" method="post"> <input type="hidden" name="ls_session_key" value="lsk693ebe77239890.04505172"/> <!--<div class="twelve columns call-free-cta"><a href="tel:08008089600">Need Help? <span>Call 0800 808 9600</span></a></div>--> <div class="meta"> <div class="row"> <div class="twelve mobile-four columns hide-for-medium-up" style="margin: 1em 0"> <a href="/how-it-works/" data-gtm="B: DIY & Trade (P)" title="DIY & Trade: genie-z60fe-hire"><img src="/themes/nthsv3/resources/images/NTH-banner-DIY.jpg" alt="DIY & Trade" width="100%" height="100%" loading="lazy" title="DIY & Trade: Genie Z-60 FE 20m Hybrid Articulating Boom Lift" /></a> </div> </div> </div> <div style="border: 1px solid #404040; display: none; background: #b0e3f4;" id="same-day-hire-extended"> <a href='/same-day-tool-hire/' data-gtm="B: Same-Day Hire (P)" class='same-day-loading'> <img src="/img/NTH-sameday-click-collect.webp" alt="Same Day Hire click and collect" title="Same Day Hire click and collect" loading='eager' width="439" height="56" /> </a> <p style="font-size:1.5em; padding-top: 0.3em; text-align: center;"><strong>Order in the next:</strong> <span id="same-day-countdown"></span></p> </div> <div style="border: 1px solid #404040; display: none; background: #b0e3f4;" id="same-day-hire"> <a href='/same-day-tool-hire/' data-gtm="B: Same-Day Hire (P)" class='same-day-loading'> <img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'> </a> <p style="font-size:1.5em; padding-top: 0.3em; text-align: center;"><strong>Order in the next:</strong> <span id="same-day-countdown-hire"></span> </p> </div> <script> function showSameDayBanner() { const date = new Date(); let bookingDelay = 1; //let bookingDelay = 0; if (bookingDelay <= 0) { let sameDayCutoff = new Date(date.getFullYear(),date.getMonth(),date.getDate(),11,00); let extendedSameDayCutoff = new Date(date.getFullYear(),date.getMonth(),date.getDate(),14,00); if(date >= sameDayCutoff && date < extendedSameDayCutoff) { console.log('same-day-hire-extended'); document.getElementById('same-day-hire-extended').style.display = 'block'; let span = document.getElementById('same-day-countdown'); let seconds = (extendedSameDayCutoff - date) / 1000; console.log(seconds); span.textContent = sameDayCountDownTime(seconds); setInterval(() => { seconds--; span.textContent = sameDayCountDownTime(seconds); }, 1000) } else if (date < sameDayCutoff) { console.log('same-day-hire'); document.getElementById('same-day-hire').style.display = 'block'; let span = document.getElementById('same-day-countdown-hire'); let seconds = (sameDayCutoff - date) / 1000; console.log(seconds); span.textContent = sameDayCountDownTime(seconds); setInterval(() => { seconds--; span.textContent = sameDayCountDownTime(seconds); }, 1000) } } } function sameDayCountDownTime(t) { let hours = Math.floor(t/3600); let minutes = Math.floor((t % 3600)/60); let seconds = Math.floor(t % 60); let h = hours ? (hours === 1 ? '1hr' : hours + 'hrs') : ''; let m = minutes ? (minutes === 1 ? '1min' : minutes + 'mins') : ''; let s = seconds ? (seconds === 1 ? '1sec' : seconds + 'secs') : '' return [h, m, s].filter(e => e).join(' ') } showSameDayBanner(); </script> <div class="addtocart" style="background-color: #E6E6E6; margin-top: 20px;"> <!-- view:price_calculator6 --> <div class="twelve mobile-four columns pricetable" style="background-color: #fff;"> <div class="three mobile-two columns pricecol"> <span class="prodhireperiodheader">24 HOURS</span><br/><span class="prodpricecalc-sale">£702.93</span><br/> <span class="productpricecalc">£494.80</span> </div> <div class="three mobile-two columns pricecol"> <span class="prodhireperiodheader">48 HOURS</span><br/><span class="prodpricecalc-sale">£730.32</span><br/> <span class="productpricecalc">£514.08</span> </div> <div class="three mobile-two columns pricecol"> <span class="prodhireperiodheader">FRI - MON</span><br/><span class="prodpricecalc-sale">£803.35</span><br/> <span class="productpricecalc">£565.49</span> </div> <div class="three mobile-two columns pricecol"> <span class="prodhireperiodheader">WEEKLY</span><br/><span class="prodpricecalc-sale">£912.90</span><br/> <span class="productpricecalc">£642.60</span> </div> </div> <div class="twelve mobile-four columns extrainfobox2" style="margin-bottom: 0;"> <a href="#" title="Book &amp; Pay Online" data-reveal-id="booking_modal" data-closeOnBackgroundClick="false" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;" ><i class="fa fa-lg fa-calendar"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="row" style="margin: 2em 0; padding: 1em 0;"> <div class="one mobile-one hide-for-small columns"> </div> <div class="two mobile-one columns"> <img src="/themes/nthsv3/resources/images/VISA.png" alt="Visa" title="Visa" loading="lazy" width="100%" height="100%"> </div> <div class="two mobile-one columns"> <img src="/themes/nthsv3/resources/images/MC.png" alt="Mastercard" title="Mastercard" width="100%" height="100%"> </div> <div class="two mobile-one columns"> <img src="/themes/nthsv3/resources/images/Apple.png" alt="Apple Pay" title="Apple Pay" loading="lazy" width="100%" height="100%"> </div> <div class="two mobile-one columns"> <img src="/themes/nthsv3/resources/images/G-pay.png" alt="Google Pay" title="Google Pay" loading="lazy" width="100%" height="100%"> </div> <div class="two mobile-one hide-for-small columns"> <img src="/themes/nthsv3/resources/images/PP.png" alt="PayPal" title="PayPal" loading="lazy" width="100%" height="100%";> </div> <div class="one mobile-one hide-for-small columns"> </div> </div> </div> <div class="pay-in-3 twelve mobile-four columns" style="text-align: center;"> <p>Please note: All consumables are <b>non-refundable</b>. These are purchased items, not hired</p> <div class="paypal"><i class="fa-brands fa-paypal fa-bounce" style="color: #003087; padding-left: 0.5em; width: 1.5em; --fa-animation-iteration-count: 5;--fa-animation-timing: ease-in-out;"></i> <a title="PayPal Pay in 3 Available" href="#" data-reveal-id="paypal_modal" data-closeonbackgroundclick="false" style="color: #000; border-bottom: 1px #000 solid;">PayPal 'Pay in 3' Available (0% interest)</a></div> </div> </div> </div> <div class="twelve mobile-four columns" style="margin-top: 2em;"> <div class="cd-tabs cd-tabs--vertical js-cd-tabs" style="width: 100%"> <nav class="cd-tabs__navigation"> <ul class="cd-tabs__list"> <li class="cd-tabs__list_li"> <a href="#tab-1" class="cd-tabs__item cd-tabs__item--selected" data-gtm="T: Description"> <span class="tab">Description</span> </a> </li> <li class="cd-tabs__list_li"> <a href="#tab-2" class="cd-tabs__item" data-gtm="T: Spec / Detail"> <span class="tab hide-for-small">Specification</span> <span class="tab show-for-small">Detail</span> </a> </li> <li class="cd-tabs__list_li"> <a href="#tab-3" class="cd-tabs__item" data-gtm="T: Related"> <span class="tab hide-for-small">Related Products</span> <span class="tab show-for-small">Related</span> </a> </li> </ul> </nav> <ul class="cd-tabs__panels"> <li id="tab-1" class="cd-tabs__panel cd-tabs__panel--selected text-component"> <h2>20m Genie Z-60 FE&nbsp;Hire</h2> <h3>Hybrid Boom Lift</h3> <p><span data-preserver-spaces="true">The Genie Z-60 FE hybrid boom lift is an&nbsp;<span>environment-friendly solution for increased efficiency and low cost of operation. In electric mode, it offers a full work day of emissions-free run time on a single battery charge. In hybrid mode, it offers one week of run time with a single 64-litre tank of diesel.</span></span></p> <p><span data-preserver-spaces="true">This boom lift gives users a maximum platform height of 18.16-metres. It offers a maximum working height of 20.16-metres, a horizontal reach of 11.15-metres, and a lifting capacity of 227kg. The platform allows for&nbsp;<span>160&deg; rotation for improved accuracy and access at height.</span> The Z-60 FE is v<span>ersatile and easy to operate, and it is ideal for indoor and outdoor jobs of all types.</span></span></p> <p><span data-preserver-spaces="true">The G<span>enie Fast Mast&trade; boom system allows operators to descend to collect tools and materials then return to work at height in a quick and efficient time.</span></span></p> <div style="display: flex; flex-wrap: wrap"> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Safety-Footwear.webp" type="image/webp"> <img src="/img/product-icons/NTH-Safety-Footwear.png" loading="lazy" title="Boots" alt="Safety Footwear" width="60" height="60"> </picture> </div> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Hybrid.webp" type="image/webp"> <img src="/img/product-icons/NTH-Hybrid.png" loading="lazy" title="Fuel Type - Hybrid" alt="Hybrid" width="60" height="60"> </picture> </div> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Head-Protection.webp" type="image/webp"> <img src="/img/product-icons/NTH-Head-Protection.png" loading="lazy" title="Hard Hat" alt="Head Protection" width="60" height="60"> </picture> </div> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Safety-Harness.webp" type="image/webp"> <img src="/img/product-icons/NTH-Safety-Harness.png" loading="lazy" title="Harness" alt="Safety Harness" width="60" height="60"> </picture> </div> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Training-Required.webp" type="image/webp"> <img src="/img/product-icons/NTH-Training-Required.png" loading="lazy" title="Training" alt="Training Required" width="60" height="60"> </picture> </div> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Large-Van-or-Truck.webp" type="image/webp"> <img src="/img/product-icons/NTH-Large-Van-or-Truck.png" loading="lazy" title="Transport - Truck" alt="Large Van or Truck" width="60" height="60"> </picture> </div> </div> </li> <li id="tab-2" class="cd-tabs__panel text-component"> <div class="product-short-specs"> <div> <table border="1"> <tbody> <tr> <td>Working Height</td> <td>20.16m</td> </tr> <tr> <td>Platform Height</td> <td>18.16m</td> </tr> <tr> <td>Horizontal Outreach</td> <td>11.15m</td> </tr> <tr> <td>Lift Capacity</td> <td>227kg</td> </tr> <tr> <td>Platform Size</td> <td>1.83m x 0.76m</td> </tr> <tr> <td>Stowed Length</td> <td>8.15m</td> </tr> <tr> <td>Stowed Height</td> <td>3m</td> </tr> <tr> <td>Width</td> <td>2.62m</td> </tr> <tr> <td>Platform Rotation</td> <td>160&deg;</td> </tr> <tr> <td>Turntable Rotation</td> <td>355&deg; continuous</td> </tr> <tr> <td>Fuel Tank</td> <td>64L</td> </tr> </tbody> </table> </div> </div> <p><strong>Please note:</strong> This product description and specification is based on the model most widely stocked across our network of partner stores. Alternative brands of equivalent specification may be supplied based on location and availability.</p> <div class="write-review"> <a href="#" data-reveal-id="write-review" data-closeOnBackgroundClick="false">Write Review</a> </div> </li> <li id="tab-3" class="cd-tabs__panel text-component"> <p> <!--<section class="related-products bottom block"> <div class="row">--> <!-- view:shop:product_list_diy_trade_21_2_row --> <!-- --> <div style="margin-bottom: 2em;" class="product-list-item"> <div class="" style="display: inline-block; border: 1px solid #002B41; background: #002B41; color: #fff; padding: 0.5em 0.5em 0.2em 0.5em; font-size: 1.6em; text-transform: uppercase; font-weight: bold">Most Popular</div> <div class="twelve columns" style="border: 0.4em solid #002B41 !important; height: 100%; margin-bottom: 2em; padding:1.5em 1.5em 0; min-height: 280px;"> <div class="three mobile-four columns"> <div class="images"> <a href="/product/nifty-hr12n-hire/" data-gtm="Product Image (C)"> <img class="primary" loading="eager" style="display: block; margin-left: auto; margin-right: auto;" src="/uploaded/thumbnails/Niftylift_HR12N_Hire_4858_400x400.jpg" title="Niftylift HR12N 12.2m Hybrid Boom Lift Hire " alt="Niftylift HR12N 12.2m Hybrid Boom Lift Hire " data-gtm="Product Image (C)" width="100%" height="100%" /> </a> </div> </div> <div class="five mobile-four columns"> <div class="desc"> <h2 style="font-size: 1.9em; margin-bottom: 1px; margin-top: 0;"> <a href="/product/nifty-hr12n-hire/" data-gtm="Product Name (C)" style="color: #404040; ">Niftylift HR12N 12.2m Hybrid Boom Lift</a> </h2> <p class="context">Ideal For Indoor & Outdoor Reach</p> <!-- --> <div class="catbul"><ul> <li>Compact Footprint</li> <li>Energy Efficient</li> <li>Articulating Boom</li> <li>Power Driven Wheels</li> <li>All-Round Guardrail &amp; Locking Gate</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul></div> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> </div> </div> <div class="four mobile-four columns"> <div class="product-mobile"> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> <div class="catbul"><ul> <li>Compact Footprint</li> <li>Energy Efficient</li> <li>Articulating Boom</li> <li>Power Driven Wheels</li> <li>All-Round Guardrail &amp; Locking Gate</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul></div> </div> <div class="row desc"> <div class="twelve mobile-four columns product-price-wrap"> <span class="price">from </span><span class="price"> £389.46 </span> </div> </div> <div class="twelve mobile-four columns ticks"> <p style="font-size: 1.1em; margin: 1em 0;">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;DIY &amp; Trade<br class="hide-for-small"/> &nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;<span style="color: #c8102e">Save 28&#37;</span><br/> <span class="hide-for-small">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;Best Availability</span> </p> </div> <div class="row"> <!--<div class="twelve mobile-four columns"> <a href="/product/nifty-hr12n-hire/?booking_modal_show=1" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/nifty-hr12n-hire/" data-gtm="Button: Book & Pay Online (C)" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/nifty-hr12n-hire/" data-gtm="Button: Product Detail (C)" title="More Information" class="button expand quotebutton-alt">Product Detail</a> </div>--> <div class="twelve mobile-four columns"> <a href="/product/nifty-hr12n-hire/" data-gtm="Button: Details & Booking (C)" title="Details &amp; Booking" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;"><i class="fas fa-calendar-alt"></i>&nbsp;&nbsp; Details &nbsp;&amp;&nbsp; Booking</a> </div> </div> <div class="row"> <div class="twelve columns" style="text-align: center; padding-top: 1em; color: #808080;"> <p class='product-list-free-delivery'> <i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>Low Cost</span> National Delivery </p> </div> </div> </div> </div> </div> <div style="margin-bottom: 2em;" class="product-list-item"> <div class="twelve columns" style=" height: 100%; margin-bottom: 2em; padding:1.5em 1.5em 0; min-height: 280px;"> <div class="three mobile-four columns"> <div class="images"> <a href="/product/niftylift-hr15n-boom-lift-hire/" data-gtm="Product Image (C)"> <img class="primary" loading="eager" style="display: block; margin-left: auto; margin-right: auto;" src="/uploaded/thumbnails/Niftylift_HR15N_Hire_4860_400x400.jpg" title="Niftylift HR15N 15.5m Hybrid Articulated Boom Lift Hire " alt="Niftylift HR15N 15.5m Hybrid Articulated Boom Lift Hire " data-gtm="Product Image (C)" width="100%" height="100%" /> </a> </div> </div> <div class="five mobile-four columns"> <div class="desc"> <h2 style="font-size: 1.9em; margin-bottom: 1px; margin-top: 0;"> <a href="/product/niftylift-hr15n-boom-lift-hire/" data-gtm="Product Name (C)" style="color: #404040; ">Niftylift HR15N 15.5m Hybrid Articulated Boom Lift</a> </h2> <p class="context">Ideal For Indoor & Outdoor Reach</p> <!-- --> <div class="catbul"><ul> <li>13.50m Maximum Platform Height</li> <li>15.50m Maximum Working Height</li> <li>9.70m Horizontal Reach</li> <li>180&deg; Platform Rotation</li> <li>1.5m Narrow Chassis</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul></div> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> </div> </div> <div class="four mobile-four columns"> <div class="product-mobile"> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> <div class="catbul"><ul> <li>13.50m Maximum Platform Height</li> <li>15.50m Maximum Working Height</li> <li>9.70m Horizontal Reach</li> <li>180&deg; Platform Rotation</li> <li>1.5m Narrow Chassis</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul></div> </div> <div class="row desc"> <div class="twelve mobile-four columns product-price-wrap"> <span class="price">from </span><span class="price"> £451.04 </span> </div> </div> <div class="twelve mobile-four columns ticks"> <p style="font-size: 1.1em; margin: 1em 0;">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;DIY &amp; Trade<br class="hide-for-small"/> &nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;<span style="color: #c8102e">Save 27&#37;</span><br/> <span class="hide-for-small">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;Best Availability</span> </p> </div> <div class="row"> <!--<div class="twelve mobile-four columns"> <a href="/product/niftylift-hr15n-boom-lift-hire/?booking_modal_show=1" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/niftylift-hr15n-boom-lift-hire/" data-gtm="Button: Book & Pay Online (C)" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/niftylift-hr15n-boom-lift-hire/" data-gtm="Button: Product Detail (C)" title="More Information" class="button expand quotebutton-alt">Product Detail</a> </div>--> <div class="twelve mobile-four columns"> <a href="/product/niftylift-hr15n-boom-lift-hire/" data-gtm="Button: Details & Booking (C)" title="Details &amp; Booking" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;"><i class="fas fa-calendar-alt"></i>&nbsp;&nbsp; Details &nbsp;&amp;&nbsp; Booking</a> </div> </div> <div class="row"> <div class="twelve columns" style="text-align: center; padding-top: 1em; color: #808080;"> <p class='product-list-free-delivery'> <i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>Low Cost</span> National Delivery </p> </div> </div> </div> </div> </div> <div style="margin-bottom: 2em;" class="product-list-item"> <div class="twelve columns" style=" height: 100%; margin-bottom: 2em; padding:1.5em 1.5em 0; min-height: 280px;"> <div class="three mobile-four columns"> <div class="images"> <a href="/product/nifty-hr124x4-hybrid-cherry-picker-hire/" data-gtm="Product Image (C)"> <img class="primary" loading="eager" style="display: block; margin-left: auto; margin-right: auto;" src="/uploaded/thumbnails/niftylift_hr12_4x4_hire_4451_400x400.jpg" title="Niftylift HR12 4x4 12.2m Hybrid Boom Lift Hire " alt="Niftylift HR12 4x4 12.2m Hybrid Boom Lift Hire " data-gtm="Product Image (C)" width="100%" height="100%" /> </a> </div> </div> <div class="five mobile-four columns"> <div class="desc"> <h2 style="font-size: 1.9em; margin-bottom: 1px; margin-top: 0;"> <a href="/product/nifty-hr124x4-hybrid-cherry-picker-hire/" data-gtm="Product Name (C)" style="color: #404040; ">Niftylift HR12 4x4 12.2m Hybrid Boom Lift</a> </h2> <p class="context">Ideal For Indoor Applications</p> <!-- --> <div class="catbul"><ul> <li>Rough Terrain Tyres&nbsp;</li> <li>Compact Footprint</li> <li>Energy Efficient</li> <li>Articulating Boom</li> <li>All-Round Guardrail &amp; Locking Gate</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul></div> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> </div> </div> <div class="four mobile-four columns"> <div class="product-mobile"> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> <div class="catbul"><ul> <li>Rough Terrain Tyres&nbsp;</li> <li>Compact Footprint</li> <li>Energy Efficient</li> <li>Articulating Boom</li> <li>All-Round Guardrail &amp; Locking Gate</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul></div> </div> <div class="row desc"> <div class="twelve mobile-four columns product-price-wrap"> <span class="price">from </span><span class="price"> £470.28 </span> </div> </div> <div class="twelve mobile-four columns ticks"> <p style="font-size: 1.1em; margin: 1em 0;">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;DIY &amp; Trade<br class="hide-for-small"/> &nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;<span style="color: #c8102e">Save 24&#37;</span><br/> <span class="hide-for-small">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;Best Availability</span> </p> </div> <div class="row"> <!--<div class="twelve mobile-four columns"> <a href="/product/nifty-hr124x4-hybrid-cherry-picker-hire/?booking_modal_show=1" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/nifty-hr124x4-hybrid-cherry-picker-hire/" data-gtm="Button: Book & Pay Online (C)" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/nifty-hr124x4-hybrid-cherry-picker-hire/" data-gtm="Button: Product Detail (C)" title="More Information" class="button expand quotebutton-alt">Product Detail</a> </div>--> <div class="twelve mobile-four columns"> <a href="/product/nifty-hr124x4-hybrid-cherry-picker-hire/" data-gtm="Button: Details & Booking (C)" title="Details &amp; Booking" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;"><i class="fas fa-calendar-alt"></i>&nbsp;&nbsp; Details &nbsp;&amp;&nbsp; Booking</a> </div> </div> <div class="row"> <div class="twelve columns" style="text-align: center; padding-top: 1em; color: #808080;"> <p class='product-list-free-delivery'> <i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>Low Cost</span> National Delivery </p> </div> </div> </div> </div> </div> <!-- start promo --> <div style="margin-bottom: 2em;" class="hide-for-small category-promo"> <div class="twelve columns" style="height: 100%; background-color: #fff; margin-bottom: 3em; padding:1.5em 1.5em 0;"> <!--<div class="row" style="padding: 1em 0;"> <div class="three hide-for-small columns" style="text-align: center;"> <img src="/themes/nthsv3/resources/images/rated_excellent2.png" loading="lazy" alt="Tool Hire: Rated Excellent" style="float: left; width: 220px;" height="100%" /> </div> <div class="three mobile-four columns"> <div class="stars"> <img src="/themes/nthsv3/resources/images/stars-5.svg" loading="lazy" alt="Tool Hire: Rated Excellent" width="50%" height="50%"> </div> <div class="minireview"> <h3 style="font-size: 1.2em; font-weight: 900; margin-bottom: 0; text-align: left;">Hassle-Free</h3> <p style="margin-bottom: 0;">Was really simple and quick to make changes to my hire arrangement using the online chat.</p> <p style="color: #707070;">Emma</p> </div> </div> <div class="three mobile-four columns"> <div class="stars"> <img src="/themes/nthsv3/resources/images/stars-5.svg" loading="lazy" alt="Tool Hire: Rated Excellent" width="50%" height="50%"> </div> <div class="minireview"> <h3 style="font-size: 1.2em; font-weight: 900; margin-bottom: 0; text-align: left;">Fantastic Service!</h3> <p style="margin-bottom: 0;">Hired with free delivery, collected on agreed day. Friendly and helpful online chat team.</p> <p style="color: #707070;">KMS</p> </div> </div> <div class="three mobile-four columns"> <div class="stars"> <img src="/themes/nthsv3/resources/images/stars-5.svg" loading="lazy" alt="Tool Hire: Rated Excellent" width="50%" height="50%"> </div> <div class="minireview"> <h3 style="font-size: 1.2em; font-weight: 900; margin-bottom: 0; text-align: left;">Excellent</h3> <p style="margin-bottom: 0;">Excellent trouble-free service. Delivered on time and the equipment was clean and well maintained.</p> <p style="color: #707070;">Steve</p> </div> </div> </div>--> <!--<!-- <div style="padding-bottom: 1em;" class="trustpilot-widget" data-locale="en-GB" data-template-id="53aa8912dec7e10d38f59f36" data-businessunit-id="4daec07200006400050f92eb" data-style-height="140px" data-style-width="100%" data-theme="light" data-stars="4,5" data-review-languages="en"> <a href="/reviewed-and-trusted/">Trustpilot</a> </div> -->--> </div> </div> <!-- end promo --> <div style="margin-bottom: 2em;" class="product-list-item"> <div class="twelve columns" style=" height: 100%; margin-bottom: 2em; padding:1.5em 1.5em 0; min-height: 280px;"> <div class="three mobile-four columns"> <div class="images"> <a href="/product/niftylift-hr15-4x4-boom-lift-hire/" data-gtm="Product Image (C)"> <img class="primary" loading="eager" style="display: block; margin-left: auto; margin-right: auto;" src="/uploaded/thumbnails/Niftylift_HR15_4x4_4541_400x400.jpg" title="Niftylift HR15 4x4 15.7m Hybrid Articulated Boom Lift Hire " alt="Niftylift HR15 4x4 15.7m Hybrid Articulated Boom Lift Hire " data-gtm="Product Image (C)" width="100%" height="100%" /> </a> </div> </div> <div class="five mobile-four columns"> <div class="desc"> <h2 style="font-size: 1.9em; margin-bottom: 1px; margin-top: 0;"> <a href="/product/niftylift-hr15-4x4-boom-lift-hire/" data-gtm="Product Name (C)" style="color: #404040; ">Niftylift HR15 4x4 15.7m Hybrid Articulated Boom Lift</a> </h2> <p class="context"></p> <!-- --> <div class="catbul"><ul> <li>13.70m Maximum Platform Height</li> <li>15.70m Maximum Working Height</li> <li>9.40m Horizontal Reach</li> <li>180&deg; Platform Rotation</li> <li>4-Wheel-Drive</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul></div> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> </div> </div> <div class="four mobile-four columns"> <div class="product-mobile"> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='1' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> <div class="catbul"><ul> <li>13.70m Maximum Platform Height</li> <li>15.70m Maximum Working Height</li> <li>9.40m Horizontal Reach</li> <li>180&deg; Platform Rotation</li> <li>4-Wheel-Drive</li> <li><a title="White Diesel Only" href="#" data-reveal-id="white_diesel_modal" data-closeonbackgroundclick="false">White Diesel Only</a></li> </ul></div> </div> <div class="row desc"> <div class="twelve mobile-four columns product-price-wrap"> <span class="price">from </span><span class="price"> £481.82 </span> </div> </div> <div class="twelve mobile-four columns ticks"> <p style="font-size: 1.1em; margin: 1em 0;">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;DIY &amp; Trade<br class="hide-for-small"/> &nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;<span style="color: #c8102e">Save 23&#37;</span><br/> <span class="hide-for-small">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;Best Availability</span> </p> </div> <div class="row"> <!--<div class="twelve mobile-four columns"> <a href="/product/niftylift-hr15-4x4-boom-lift-hire/?booking_modal_show=1" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/niftylift-hr15-4x4-boom-lift-hire/" data-gtm="Button: Book & Pay Online (C)" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/niftylift-hr15-4x4-boom-lift-hire/" data-gtm="Button: Product Detail (C)" title="More Information" class="button expand quotebutton-alt">Product Detail</a> </div>--> <div class="twelve mobile-four columns"> <a href="/product/niftylift-hr15-4x4-boom-lift-hire/" data-gtm="Button: Details & Booking (C)" title="Details &amp; Booking" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;"><i class="fas fa-calendar-alt"></i>&nbsp;&nbsp; Details &nbsp;&amp;&nbsp; Booking</a> </div> </div> <div class="row"> <div class="twelve columns" style="text-align: center; padding-top: 1em; color: #808080;"> <p class='product-list-free-delivery'> <i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>Low Cost</span> National Delivery </p> </div> </div> </div> </div> </div> <script type='application/ld+json'>{"@context":"http://www.schema.org","name":"Products","@type":"ItemList","itemListElement":[{"@type":"ListItem","position":1,"url":"https://www.nationaltoolhireshops.co.uk/product/nifty-hr12n-hire/"},{"@type":"ListItem","position":2,"url":"https://www.nationaltoolhireshops.co.uk/product/niftylift-hr15n-boom-lift-hire/"},{"@type":"ListItem","position":3,"url":"https://www.nationaltoolhireshops.co.uk/product/nifty-hr124x4-hybrid-cherry-picker-hire/"},{"@type":"ListItem","position":4,"url":"https://www.nationaltoolhireshops.co.uk/product/niftylift-hr15-4x4-boom-lift-hire/"}],"numberOfItems": "4"}</script> <!-- --> <!--</div> </section>--> </p> </li> </ul> </div> <script src="/themes/nthsv3/resources/javascripts/foundation/util.js"></script> <script src="/themes/nthsv3/resources/javascripts/foundation/main.js"></script> </div> </div> </div> </form> <div id="booking_modal" ajax-id="693ebe7734ca2" data-reveal class="" data-overlay="false"> <link rel="stylesheet" type="text/css" href="https://booking.nationaltoolhireshops.co.uk/themes/nationaltoolhire/uk/css/bookingV2.css" /> <link rel="stylesheet" type="text/css" href="https://booking.nationaltoolhireshops.co.uk/themes/sites/nths/css/bookingV2.css" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="stylesheet" href="https://booking.nationaltoolhireshops.co.uk/themes/nationaltoolhire/uk/css/bootstrap-isolated-4-6-1.css"> <link rel="stylesheet" href="//code.jquery.com/ui/1.13.1/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/ui/1.13.1/jquery-ui.min.js" integrity=sha384-tc3TMXCcTCib89yECEQXI4e6DhhlwNrqzYpvyeSqBD2vB/KugQH7o3p+/UtKuS5L crossorigin="anonymous"></script> <form id="bookingBox"> <div class="booking-close"><a href="javascript:void(0)" class="closebtn">&times;</a></div> <div class="booking-info"> <div class="booking-calendar-box"> <div class="booking-tabs"> <div class="booking-tabs-wrap"> <input type="hidden" id="datepicker_booking_start" name="start_date"> <input type="hidden" id="datepicker_booking_end" name="end_date"> <button type="button" data-tab-id="datepicker_booking_start" class="active"> Booking Start Date </button> <button type="button" disabled data-tab-id="datepicker_booking_end"> Booking End Date </button> </div> </div> <div class="booking-calendar"></div> </div> <div class="booking-container bootstrap-isolation-4-6-1"> <input type="hidden" name="edit_item_id" value=""> <div id="booking_summary" class="row booking-stage-2 flex-nowrap"> <div class="col-md-9 col-sm-9"> <span id="booking_num_days" class="h4"></span> </div> <div class="col-md-3 col-sm-3 text-right"> <span class="h4 price-display-variable "></span> </div> </div> <div class="row"> <div class="col-12"> <div id="saturday_sameday_alert" class="my-3 alert alert-success d-none">Saturday Same-Day Hire is only available as Click &amp; Collect. If you require delivery/collection by us, please select Friday as the start date and Saturday as the end date (for no extra cost).</div> <div id="extended_sameday_alert" class="my-3 alert alert-success d-none"> Same-Day Hire is only available as Click &amp; Collect today. If you require delivery/collection by us, please select a different start date. </div> <div class="row"> <div class="col-md-12 form-group py-1 mt-3"> <label for="booking_quantity">Quantity</label> <div class="form-quantity"> <input type="number" class="form-control" step="1" min="1" value="1" name="booking_quantity" id="booking_quantity"> <div class="form-quantity-nav"> <div class="form-quantity-btn quantity-minus disabled">-</div> <div class="form-quantity-btn quantity-plus">+</div> </div> </div> </div> </div> </div> </div> <hr> <div class="row booking-stage-2"> <div class="col-12"> <section> <div class="h5 mt-2 mb-2">Accessories</div> <div class="row mb-2"> <div class="col-12"> <label class="checkbox label-inline disabled"> <input type="checkbox" checked disabled data-name="Insurance" data-cost="56.1" name="extras[6086]" data-is-hired="1"> Insurance <span class="price-display-variable pull-right" data-for="extras[]"> &nbsp;(£56.10 / week) </span> </label> </div> </div> </section> <hr> <section class="extras-section"> <div class="h5 mt-2 mb-3">Extras</div> <div class="row mb-3"> <div class="col-sm-9 col-lg-9 col-md-8 extra-description"> <label for="extras[5600]" class="mb-2 d-md-none">Super Grip Gloves - Large&nbsp; <b>(£3.06)</b> </label> <div class="form-quantity d-block"> <input type="number" class="form-control" min="0" step="1" value="0" name="extras[5600]" id="extras[5600]" data-cost="3.06" data-is-hired="" data-name="Super Grip Gloves - Large"> <div class="form-quantity-nav"> <div class="form-quantity-btn quantity-minus disabled">-</div> <div class="form-quantity-btn quantity-plus">+</div> </div> </div> <label for="extras[5600]" class="pl-2 d-none d-md-block">Super Grip Gloves - Large&nbsp; <b>(£3.06)</b> </label> </div> <div class="col-md-4 col-lg-3 col-sm-3"> <div class="price-display-variable text-right font-weight-bold" style="font-size: 1em;" data-for="extras[5600]">£0.00</div> </div> </div> <div class="row mb-3"> <div class="col-sm-9 col-lg-9 col-md-8 extra-description"> <label for="extras[5601]" class="mb-2 d-md-none">Super Grip Gloves - Extra Large&nbsp; <b>(£3.06)</b> </label> <div class="form-quantity d-block"> <input type="number" class="form-control" min="0" step="1" value="0" name="extras[5601]" id="extras[5601]" data-cost="3.06" data-is-hired="" data-name="Super Grip Gloves - Extra Large"> <div class="form-quantity-nav"> <div class="form-quantity-btn quantity-minus disabled">-</div> <div class="form-quantity-btn quantity-plus">+</div> </div> </div> <label for="extras[5601]" class="pl-2 d-none d-md-block">Super Grip Gloves - Extra Large&nbsp; <b>(£3.06)</b> </label> </div> <div class="col-md-4 col-lg-3 col-sm-3"> <div class="price-display-variable text-right font-weight-bold" style="font-size: 1em;" data-for="extras[5601]">£0.00</div> </div> </div> <div class="row mb-3"> <div class="col-sm-9 col-lg-9 col-md-8 extra-description"> <label for="extras[6272]" class="mb-2 d-md-none">Hard Hat&nbsp; <b>(£8.16)</b> </label> <div class="form-quantity d-block"> <input type="number" class="form-control" min="0" step="1" value="0" name="extras[6272]" id="extras[6272]" data-cost="8.16" data-is-hired="" data-name="Hard Hat"> <div class="form-quantity-nav"> <div class="form-quantity-btn quantity-minus disabled">-</div> <div class="form-quantity-btn quantity-plus">+</div> </div> </div> <label for="extras[6272]" class="pl-2 d-none d-md-block">Hard Hat&nbsp; <b>(£8.16)</b> </label> </div> <div class="col-md-4 col-lg-3 col-sm-3"> <div class="price-display-variable text-right font-weight-bold" style="font-size: 1em;" data-for="extras[6272]">£0.00</div> </div> </div> <div class="row mb-3"> <div class="col-sm-9 col-lg-9 col-md-8 extra-description"> <label for="extras[6273]" class="mb-2 d-md-none">Hi-Vis&nbsp; <b>(£7.14)</b> </label> <div class="form-quantity d-block"> <input type="number" class="form-control" min="0" step="1" value="0" name="extras[6273]" id="extras[6273]" data-cost="7.14" data-is-hired="" data-name="Hi-Vis"> <div class="form-quantity-nav"> <div class="form-quantity-btn quantity-minus disabled">-</div> <div class="form-quantity-btn quantity-plus">+</div> </div> </div> <label for="extras[6273]" class="pl-2 d-none d-md-block">Hi-Vis&nbsp; <b>(£7.14)</b> </label> </div> <div class="col-md-4 col-lg-3 col-sm-3"> <div class="price-display-variable text-right font-weight-bold" style="font-size: 1em;" data-for="extras[6273]">£0.00</div> </div> </div> </section> </div> </div> <hr class="booking-stage-2"> <div class="row booking-stage-2 mt-2"> <div class="col-6 form-group"> <div class="h4 mt-1 mb-1">Total</div> </div> <div class="col-6 text-right"> <span id="booking_total" class="price-display-variable h4 mb-3"></span> </div> </div> <div id="booking_errors" class="d-none alert alert-danger text-center my-3"> It looks like some of the fields are invalid. Please check them and try again. </div> <button type="submit" title="Book Hire" class="btn btn-info py-3 btn-book"><i class="fa fa-lg fa-calendar"></i>&nbsp; Book Hire</button> </div> </div> </form> <div id="overlay-bookingBox"></div> <script type="text/javascript"> (function () { //# sourceURL=bookingForm.js // This section should be constants, but for backwards compatibility we have to use var var IS_EMBEDDED = true; var $MODAL = IS_EMBEDDED ? $('#booking_modal') : $('#bookingBox').parent(); var VALID_START_DATES = ["2025-12-15","2025-12-16","2025-12-17","2025-12-18","2025-12-19","2025-12-20","2025-12-22","2025-12-23","2025-12-24","2025-12-27","2025-12-29","2025-12-30","2025-12-31","2026-01-02","2026-01-03","2026-01-05","2026-01-06","2026-01-07","2026-01-08","2026-01-09","2026-01-10","2026-01-12","2026-01-13","2026-01-14","2026-01-15","2026-01-16","2026-01-17","2026-01-19","2026-01-20","2026-01-21","2026-01-22","2026-01-23","2026-01-24","2026-01-26","2026-01-27","2026-01-28","2026-01-29","2026-01-30","2026-01-31","2026-02-02","2026-02-03","2026-02-04","2026-02-05","2026-02-06","2026-02-07","2026-02-09","2026-02-10","2026-02-11","2026-02-12","2026-02-13","2026-02-14","2026-02-16","2026-02-17","2026-02-18","2026-02-19","2026-02-20","2026-02-21","2026-02-23","2026-02-24","2026-02-25","2026-02-26","2026-02-27","2026-02-28","2026-03-02","2026-03-03","2026-03-04","2026-03-05","2026-03-06","2026-03-07","2026-03-09","2026-03-10","2026-03-11","2026-03-12","2026-03-13","2026-03-14","2026-03-16","2026-03-17","2026-03-18","2026-03-19","2026-03-20","2026-03-21","2026-03-23","2026-03-24","2026-03-25","2026-03-27","2026-03-28","2026-03-30","2026-03-31","2026-04-01","2026-04-02","2026-04-03","2026-04-04","2026-04-06","2026-04-07","2026-04-08","2026-04-09","2026-04-10","2026-04-11","2026-04-13","2026-04-14","2026-04-15","2026-04-16","2026-04-17","2026-04-18","2026-04-20","2026-04-21","2026-04-22","2026-04-23","2026-04-24","2026-04-25","2026-04-27","2026-04-28","2026-04-29","2026-04-30","2026-05-01","2026-05-02","2026-05-04","2026-05-05","2026-05-06","2026-05-07","2026-05-08","2026-05-09","2026-05-11","2026-05-12","2026-05-13","2026-05-14","2026-05-15","2026-05-16","2026-05-18","2026-05-19","2026-05-20","2026-05-21","2026-05-22","2026-05-23","2026-05-25","2026-05-26","2026-05-27","2026-05-28","2026-05-29","2026-05-30","2026-06-01","2026-06-02","2026-06-03","2026-06-04","2026-06-05","2026-06-06","2026-06-08","2026-06-09","2026-06-10","2026-06-11","2026-06-12","2026-06-13","2026-06-15","2026-06-16","2026-06-17","2026-06-18","2026-06-19","2026-06-20","2026-06-22","2026-06-23","2026-06-24","2026-06-25","2026-06-26","2026-06-27","2026-06-29","2026-06-30","2026-07-01","2026-07-02","2026-07-03","2026-07-04","2026-07-06","2026-07-07","2026-07-08","2026-07-09","2026-07-10","2026-07-11","2026-07-13","2026-07-14","2026-07-15","2026-07-16","2026-07-17","2026-07-18","2026-07-20","2026-07-21","2026-07-22","2026-07-23","2026-07-24","2026-07-25","2026-07-27","2026-07-28","2026-07-29","2026-07-30","2026-07-31","2026-08-01","2026-08-03","2026-08-04","2026-08-05","2026-08-06","2026-08-07","2026-08-08","2026-08-10","2026-08-11","2026-08-12","2026-08-13","2026-08-14","2026-08-15","2026-08-17","2026-08-18","2026-08-19","2026-08-20","2026-08-21","2026-08-22","2026-08-24","2026-08-25","2026-08-26","2026-08-27","2026-08-28","2026-08-29","2026-08-31","2026-09-01","2026-09-02","2026-09-03","2026-09-04","2026-09-05","2026-09-07","2026-09-08","2026-09-09","2026-09-10","2026-09-11","2026-09-12","2026-09-14","2026-09-15","2026-09-16","2026-09-17","2026-09-18","2026-09-19","2026-09-21","2026-09-22","2026-09-23","2026-09-24","2026-09-25","2026-09-26","2026-09-28","2026-09-29","2026-09-30","2026-10-01","2026-10-02","2026-10-03","2026-10-05","2026-10-06","2026-10-07","2026-10-08","2026-10-09","2026-10-10","2026-10-12","2026-10-13","2026-10-14","2026-10-15","2026-10-16","2026-10-17","2026-10-19","2026-10-20","2026-10-21","2026-10-22","2026-10-23","2026-10-24","2026-10-26","2026-10-27","2026-10-28","2026-10-29","2026-10-30","2026-10-31","2026-11-02","2026-11-03","2026-11-04","2026-11-05","2026-11-06","2026-11-07","2026-11-09","2026-11-10","2026-11-11","2026-11-12","2026-11-13","2026-11-14","2026-11-16","2026-11-17","2026-11-18","2026-11-19","2026-11-20","2026-11-21","2026-11-23","2026-11-24","2026-11-25","2026-11-26","2026-11-27","2026-11-28","2026-11-30","2026-12-01","2026-12-02","2026-12-03","2026-12-04","2026-12-05","2026-12-07","2026-12-08","2026-12-09","2026-12-10","2026-12-11","2026-12-12","2026-12-14"]; var DATEPICKER_DEFAULTS = { dateFormat: 'dd-mm-yy', format: 'g:i A', minDate: '15-12-2025' || -0, firstDay: 1, }; var DELIVERY_CUTOFF = '11:00'; var CURRENCY = '£' || '£'; /* When we search for the minimum end date, it starts on the start date i.e same-day return If that isn't possible, we try the next day, then the next, and so on This is the maximum number of days we should look ahead by before showing an error If it's exceeded, it's probably because dateCosts isn't being populated so there aren't any valid booking dates */ var MAXIMUM_END_DATE_ADJUSTMENT = 14; var ROOT_URL = "https://booking.nationaltoolhireshops.co.uk"; var DEFAULT_ERROR_MSG = $('#booking_errors').text(); var dateCosts; var product = { 'name': "Genie Z-60 FE 20m Hybrid Articulating Boom Lift", 'sku': "Genie Z-60 FE", 'prod_code': "6352" }; var $pickerStart = $('#datepicker_booking_start', $MODAL); var $pickerEnd = $('#datepicker_booking_end', $MODAL); var $bookingSummary = $('#booking_summary', $MODAL); var $bookingCost = $('#booking_summary .price-display-variable', $MODAL); var $numDays = $('#booking_num_days', $MODAL); var $qty = $('input[name="booking_quantity"], select[name="booking_quantity"]', $MODAL); var $bookingTotal = $('#booking_total.price-display-variable', $MODAL); var $priceSubTotals = $('.price-display-variable', $MODAL).not($bookingTotal); var $form = $('#bookingBox', $MODAL); var $overlay = $('#overlay-bookingBox', $MODAL); window.booking = { form: $form, product: product, redirectDelay: 250 } $MODAL.on('open.zf.reveal reveal:open', openBookingBox); $overlay.add('#booking_modal .closebtn').on('click', closeBookingBox); if((new URLSearchParams(window.location.search)).get('booking_modal_show') == 1) { $(document).ready(openBookingBox); } $pickerStart.datepicker($.extend({ beforeShowDay: isValidStartDate, numberOfMonths: [2,1], }, DATEPICKER_DEFAULTS)) .on('change', function () { updateDateCosts(function () { $('.booking-tabs button[data-tab-id="datepicker_booking_end"]').removeAttr('disabled') .addClass('active').siblings().removeClass('active'); $('#booking_end', $MODAL).removeClass('disabled'); $pickerEnd.datepicker('setDate', null).datepicker('show'); $pickerEnd.find('.ui-datepicker-days-cell-over').trigger('mouseenter') let validDates = Object.keys(dateCosts); if(validDates.length === 1) { let dateObj = $.datepicker.parseDate('yy-mm-dd', validDates[0]); $pickerEnd.datepicker('setDate', dateObj).trigger('change'); updateBookingOverview(); } }); }); $pickerEnd.datepicker($.extend({ beforeShowDay: isValidEndDate, numberOfMonths: [2,1] }, DATEPICKER_DEFAULTS)) .on('change', function () { validateBookingDates(); $('#bookingBox').addClass('show-booking-container'); if (window.matchMedia("(max-width: 767px)").matches) { $('#bookingBox').animate({ scrollTop: $('#booking_summary').offset().top }, 'slow'); } }); $('.ui-datepicker-div-in-menu').removeClass('ui-datepicker-div-in-menu'); $('#ui-datepicker-div').on('mouseenter', 'td', highlightBookingDates); $('.booking-tabs button[ data-tab-id="datepicker_booking_start"]').on('click', function() { $(this).siblings().removeClass( 'active' ); $(this).addClass( 'active' ); $pickerStart.datepicker('show'); }); $('.booking-tabs button[ data-tab-id="datepicker_booking_end"]').on('click', function() { $(this).siblings().removeClass( 'active' ); $(this).addClass( 'active' ); $pickerEnd.datepicker('show'); }); $('.form-quantity').each(function() { let $spinner = $(this); let $input = $spinner.find('input[type="number"]'); let $btnPlus = $spinner.find('.quantity-plus'); let $btnMinus = $spinner.find('.quantity-minus'); let min = +($input.attr('min') || 0); let max = +($input.attr('max') || 999); $spinner.on('click', '.quantity-plus, .quantity-minus', function(e) { let val = parseFloat($input.val()); if(e.currentTarget.classList.contains('quantity-plus')) { val++; } else { val--; } val = Math.min(Math.max(val, min), max); val === min ? $btnMinus.addClass('disabled') : $btnMinus.removeClass('disabled'); val === max ? $btnPlus.addClass('disabled') : $btnPlus.removeClass('disabled'); $input.val(val); updateDateCosts(); }); }); $qty.on('input', updateBookingOverview); $('input[type="number"][data-cost]', $MODAL).on('input', function() { updateExtrasCosts(); updateBookingOverview(); }); $form.on('submit', function(e) { e.preventDefault(); var $this = $(this); $this.addClass('ajax-form-loading'); var url = new URL(ROOT_URL); url.pathname = '/booking'; url.searchParams.append('edit_item_url', window.location.href.split('?')[0]); var editItemId = $('input[name="edit_item_id"]').val(); if(editItemId) { url.searchParams.append('edit_item_id', editItemId); } url.searchParams.append('prod_code', product.prod_code); url.searchParams.append('sku', product.sku); $.ajax({ type: $this.attr('method'), url: url, method: 'POST', data: $this.serialize(), xhrFields: { withCredentials: true }, success: function(response) { $this.removeClass('ajax-form-loading'); var $errorDisplay = $('#booking_errors'); $errorDisplay.addClass('d-none'); if(response.success) { $form.trigger('booking:basket-add', [getSelectedItems()]); } if(!response.success) { $errorDisplay.removeClass('d-none'); let error = response.errors ? response.errors.join('<br>') : DEFAULT_ERROR_MSG; $errorDisplay.text(error); } if(response.redirect) { setTimeout(function() { window.location.href = ROOT_URL + response.redirect; }, booking.redirectDelay) } } }); }); function getSelectedItems() { let items = [{ 'item_id': product.sku, 'item_name': product.name, 'price': product.bookedCost, 'quantity': +$qty.val() }] $('input[name^="extras"]').each(function(i, elem) { let qty = elem.type === 'checkbox' ? 1 : +elem.value; if(qty <= 0 || isNaN(qty)) return; let price = +elem.getAttribute('data-cost') * qty; if(elem.getAttribute('data-is-hired')) { price *= Math.ceil(getBookingDaysLength()/7); } items.push({ 'item_id': '', 'item_name': elem.getAttribute('data-name'), 'price': price, 'quantity': qty }); }); return items; } function openBookingBox() { $('#bookingBox').addClass('show'); $overlay.show(); // Only initialise the datepicker once if(!$('.ui-datepicker-div-in-menu').length) { $('#bookingBox .booking-calendar').append($('#ui-datepicker-div').addClass('ui-datepicker-div-in-menu')); $pickerStart.datepicker('show'); } } function closeBookingBox() { $overlay.hide(); $('#bookingBox').removeClass('show'); $('html, body').removeClass('is-reveal-open'); } function validateBookingDates() { if($pickerStart.attr('disabled') || $pickerEnd.attr('disabled')) { return false; } var startDate = $pickerStart.datepicker('getDate'); var endDate = $pickerEnd.datepicker('getDate'); var minimumEndDate = startDate; var daysAdjusted = 0; while(!isValidEndDate(minimumEndDate)[0] && daysAdjusted <= MAXIMUM_END_DATE_ADJUSTMENT) { minimumEndDate = new Date(minimumEndDate.getTime() + (24 * 60 * 60 * 1000)); daysAdjusted++; } if(startDate === null) { return; } $pickerEnd.datepicker('option', 'minDate', minimumEndDate); if(endDate === null) { return; } if(!isValidEndDate(endDate)[0] || !isValidEndDate(minimumEndDate)[0]) { // Validation has pushed the end date out of scope, reset it so the user can pick again $pickerEnd.datepicker('setDate', null); } $pickerEnd.datepicker('option', 'minDate', minimumEndDate); updateBookingOverview(); } /** * Per jQuery datepicker documentation: * A function that takes a date as a parameter and must return an array with: * [0]: true/false indicating whether or not this date is selectable * [1]: a CSS class name to add to the date's cell or "" for the default presentation * [2]: an optional popup tooltip for this date * The function is called for each day in the datepicker before it is displayed. */ function isValidEndDate(date) { var dateString = $.datepicker.formatDate('yy-mm-dd', date); var selectable = !!(dateCosts[dateString] && dateCosts[dateString]['cost']); var classes = ''; var startDate = $pickerStart.datepicker('getDate'); var endDate = $pickerEnd.datepicker('getDate'); if(date.toString() === startDate.toString()) { classes += ' datepicker-start-date'; } else if(date > startDate && date < endDate) { classes += ' datepicker-date-range'; } return [ selectable, classes, null ]; } /** * Validator for jQuery datepicker * @param date The date to be tested * @returns array [ * boolean , * string, * null * ] * */ function isValidStartDate(date) { var dateString = $.datepicker.formatDate('yy-mm-dd', date); // IE doesn't support array.includes() var selectable = VALID_START_DATES.indexOf(dateString) !== -1; return [ selectable, "", null ]; } function updateDateCosts(cb) { var data = { 'start_date': $.datepicker.formatDate(DATEPICKER_DEFAULTS.dateFormat, $pickerStart.datepicker('getDate')), 'booking_quantity': $qty.val(), 'json': true }; var editItemId = $('input[name="edit_item_id"]').val(); if(editItemId) { data['edit_item_id'] = editItemId } else { data['prod_code'] = product.prod_code; data['sku'] = product.sku } $.ajax({ url: ROOT_URL + '/booking/', datatype: 'jsonp', data: data, xhrFields: { withCredentials: true }, success: function(data) { if(typeof data === 'string') { data = JSON.parse(data); } if(data.success === true && data.costs) { for(var date in data.costs) { if(data.costs[date].cost > 0) { dateCosts = data.costs } } } if(!dateCosts) { showBookingError(); $pickerStart.attr('disabled', true); $pickerEnd.attr('disabled', true); } validateBookingDates(); if(cb && typeof cb === 'function') { cb(); } } }); } function showBookingError(text) { text = text || "Sorry, an unknown problem has been encountered. Please refresh the page and try again. If the problem persists, please contact us."; $('#booking_errors').text(text).removeClass('d-none'); } function getBookingDaysLength() { var startDate = $pickerStart.datepicker('getDate'); var endDate = $pickerEnd.datepicker('getDate'); if(!startDate || !endDate) { return null; } return Math.round((+endDate - +startDate) / 86400000); } function updateExtrasCosts() { $('input[data-cost]').each(function(i, elem) { var $elem = $(elem); var $priceDisplay = $('.price-display-variable[data-for="'+$elem.attr('name')+'"]'); var price = $elem.data('cost')*$elem.val(); if($elem.data('is-hired')) { price *= Math.ceil(getBookingDaysLength()/7); } $priceDisplay.text(CURRENCY + price.toFixed(2)); }); } function updateBookingOverview() { const $extendedSamedayAlert = $('#extended_sameday_alert'); const now = new Date(); var $saturdayAlert = $('#saturday_sameday_alert'); $extendedSamedayAlert.addClass('d-none'); $saturdayAlert.addClass('d-none'); updateExtrasCosts(); var days = getBookingDaysLength(); if(days === null) { $bookingSummary.addClass('d-none'); $bookingCost.text(CURRENCY + '0.00'); $numDays.text(''); return; } var startDate = $pickerStart.datepicker('getDate'); var endDate = $pickerEnd.datepicker('getDate'); var endDateString = $.datepicker.formatDate('yy-mm-dd', endDate); var cost = dateCosts[endDateString].cost*$qty.val(); const isSameDay = $.datepicker.formatDate('y-m-d', now) === $.datepicker.formatDate('y-m-d', startDate); product.bookedCost = +cost.toFixed(2); $bookingCost.text(CURRENCY + cost.toFixed(2)); // Just for display purposes days++; if(isSameDay && now.toLocaleTimeString('en-GB') >= DELIVERY_CUTOFF) { $extendedSamedayAlert.removeClass('d-none'); } if(days === 0) { days = '< 1 day'; if(startDate.getDay() === 6) { $saturdayAlert.removeClass('d-none'); } } else if(days === 1) { days += ' day'; } else { days += ' days'; } $numDays.html($qty.val() + 'x ' + product.name); $bookingTotal.text(CURRENCY + getTotalCost().toFixed(2)); $('.booking-stage-2', $MODAL).removeClass('d-none'); } function getTotalCost() { var cost = 0; for(var i=0; i<$priceSubTotals.length; i++) { var subTotal = +$($priceSubTotals[i]).text().replace(CURRENCY, ''); if(!isNaN(subTotal)) { cost += subTotal; } } $('input[type="checkbox"][data-cost]').each(function(i, elem) { let subtotal = +elem.getAttribute('data-cost'); if(elem.getAttribute('data-is-hired')) { subtotal *= Math.ceil(getBookingDaysLength()/7); } cost += subtotal; }); return cost; } function highlightBookingDates() { var $td = $(this); var $wrapper = $td.parents('#ui-datepicker-div'); var highlightClass = 'datepicker-date-range'; // Only highlight a trail of dates if this is the picker for booking_end_date and there isn't a date already selected if($('.booking-tabs button.active').attr('data-tab-id') !== $pickerEnd.attr('id') || $pickerEnd.datepicker('getDate')) { return; } $wrapper.find('.'+highlightClass).removeClass(highlightClass); $td.parent().prevAll().find('td:not(.ui-datepicker-current-day)').addClass(highlightClass); $td.prevAll().filter('td:not(.ui-datepicker-current-day)').addClass(highlightClass); let $start = $wrapper.find('.datepicker-start-date'); $start.prevAll().removeClass(highlightClass); $start.parent().prevAll().find('td').removeClass(highlightClass); } $('.extras-tooltip').on('click', function() { $(this).tooltip({ items: ".extras-tooltip", content: function () { return $(this).prop('title'); } }); $(this).tooltip("open"); }); $('.extras-tooltip').on('mouseout', function() { $(this).tooltip("destroy"); }); })(); </script> </div> <style> .reveal-modal #postcode_lookup_form { border: none; padding: 0; } .reveal-modal #postcode_lookup_form .form-group { padding: 1em 0; } </style> <div class="reveal-modal" id="postcode_modal" data-reveal> <div class="row"> <div class="twelve columns" style="padding:2em";> <style> #postcode_lookup_form { padding: 20px; border: 1px solid lightgray; max-width: 600px; margin-top: 5px; text-align: center; } #postcode_lookup_form #depot_address { width: 100%; position: relative; } #postcode_lookup_form table { position: relative; } #depot_address.admin-view::before { content: 'Admin view'; position: absolute; left: 0; top: -15px; font-size: 11px; background: #dadada; padding: 2px; } </style> <form id="postcode_lookup_form" action="/include_postcode_lookup/" method="get" class="container"> <div class="form-group"> <label>Postcode:</label> <input type="hidden" name="sku" value="Genie Z-60 FE"> <input class="input-sm" type="text" name="postcode" placeholder="Enter your postcode" required> <button type="submit">Find nearby stores</button> </div> <div class="form-group hide"> <table class="twelve"> <tbody id="depot_address" class=""></tbody> </table> </div> </form> <script> (function() { var $form = $('#postcode_lookup_form'); var $addresses = $('#depot_address'); var readOnly = !!"1"; var adminView = !!""; $form.on('submit', function(e) { e.preventDefault(); var $this = $(this); $.ajax({ type: $this.attr('method') || 'post', url: $this.attr('action') || '', data: $this.serialize(), complete: handleFormSubmit }); }); function handleFormSubmit(response) { var depots = JSON.parse(response.responseText); if(!depots) { return; } if(readOnly) { $addresses.find('tr').remove(); $addresses.parents('.hide').removeClass('hide'); for(var i=0; i<depots.length; i++) { var html = '<tr><td class="text-center">'; if(adminView) { html += depots[i].supplierName + ', ' + depots[i].address } else { html += depots[i].name + ', ' + depots[i].postcode.split(' ')[0]; } if(depots[i].distance && depots[i].distanceUnits) { if(depots[i].distance > 1) { depots[i].distance = Math.round(depots[i].distance); } html += ' - (' + depots[i].distance + ' ' + depots[i].distanceUnits + ' away)' } html += '</td></tr>'; $addresses.append(html); } } else { $addresses.find(':not([value=""])').remove(); $addresses.parents('.hide').removeClass('hide'); for(var i=0; i<depots.length; i++) { var html = '<option value="' + depots[i].id + '">' + depots[i].name + ', ' + depots[i].postcode; if(depots[i].distance && depots[i].distanceUnits) { if(depots[i].distance > 1) { depots[i].distance = Math.round(depots[i].distance); } html += ' - (' + depots[i].distance + ' ' + depots[i].distanceUnits + ' away)' } html += '</option>'; $addresses.append(html); $addresses.trigger('change'); } } } })(); </script> </div> </div> </div> </section> <div id="write-review" class="c-review-form reveal-modal" style="display: none"> <h3 class="t2">Write a review for "Genie Z-60 FE 20m Hybrid Articulating Boom Lift"</h3> <form enctype="multipart/form-data" class="custom" action="/product/genie-z60fe-hire" method="post"> <input type="hidden" name="ls_session_key" value="lsk693ebe77370781.44769889"/> <label for="rating">Rating</label> <select name="rating" id="rating" style="font-size: 1em; margin-bottom: 1em; height: 2em;"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> <label for="review_author_name">Your name</label> <input id="review_author_name" name="review_author_name" type="text" /> <label for="review_author_email">Email</label> <input id="review_author_email" type="text" name="review_author_email" /> <label for="review_title">Title</label> <input id="review_title" name="review_title" type="text" /> <label for="review_text">Review</label> <textarea rows="5" id="review_text" name="review_text" /></textarea> <button type="submit" class="btn button" style="background-color: #00b67A;" onclick="return $(this).getForm().sendRequest('shop:on_addProductReview', { extraFields: { no_flash: true, }, onSuccess: function() { $('#write-review').trigger('reveal:close'); document.location.reload(true); } })">Submit review</button> </form> <a class="close-reveal-modal">&#215;</a> </div> <script type="application/ld+json"> { "@context": "http://schema.org/", "@type": "Product", "name": "Genie Z-60 FE 20m Hybrid Articulating Boom Lift", "image": "https://www.nationaltoolhireshops.co.uk/uploaded/thumbnails/Genie_z60fe_Hire_4462_400x400.jpg", "description": "The Genie Z-60 FE hybrid boom lift offers an electric mode, offering a full day on a single charge & hybrid mode offering one week of run time on a single tank.", "mpn": "Genie Z-60 FE", "model": "Genie Z-60 FE", "sku": "GenieZ-60FE", "manufacturer": "National Tool Hire", "brand": { "@type": "Brand", "name": "National Tool Hire" }, "offers": { "@type": "Offer", "itemCondition": "http://schema.org/NewCondition", "availability": "http://schema.org/InStock", "price": "90", "priceCurrency": "GBP", "priceValidUntil": "2025-12-21", "url": "https://www.nationaltoolhireshops.co.uk/product/genie-z60fe-hire/", "shippingDetails": { "shippingDestination": { "@type": "DefinedRegion", "addressCountry": "GB" }, "shippingRate": { "@type": "MonetaryAmount", "value": 0.00, "currency": "GBP" }, "deliveryTime": { "@type": "ShippingDeliveryTime", "businessDays": { "@type": "OpeningHoursSpecification", "dayOfWeek": [ "https://schema.org/Monday", "https://schema.org/Tuesday", "https://schema.org/Wednesday", "https://schema.org/Thursday", "https://schema.org/Friday", "https://schema.org/Saturday" ] }, "cutoffTime": "11:30:00Z", "handlingTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 2, "unitCode": "d" }, "transitTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "d" } } }, "seller": { "@type": "Organization", "name": "National Tool Hire" }, "hasMerchantReturnPolicy": { "@type": "MerchantReturnPolicy", "applicableCountry": "GB", "returnPolicyCategory": "https://schema.org/MerchantReturnUnlimitedWindow", "merchantReturnDays": 365, "returnMethod": "ReturnByMail", "returnFees": "FreeReturn" } } } </script> ', 86400) /modules/cms/classes/cms_controller.php 1031
13 Cms_Controller->render_partial('shop:product5_2021', array(1) [product => object(Shop_Product)], array(4) [cache => '1', cache_vary_by => array(1), cache_versions => array(1), cache_ttl => '86400']) /modules/cms/classes/cms_controller.php(383) : eval()'d code 95
12 eval(()) /modules/cms/classes/cms_controller.php 383
11 Cms_Controller->evalWithException('?><div class="row"> <div class="twelve columns"> <div class="cat-breadcrumbs pt4" itemscope itemtype="https://schema.org/BreadcrumbList"> <span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><a href="/" itemprop="item"><span itemprop="name">Home</span></a><meta itemprop="position" content="1" /></span> <?php $pos = 2; if ($primaryBreadcrumbs = ShopPrimaryCategory::getPrimaryBreadcrumbs($product)) : ?> <? $i=1; foreach ($primaryBreadcrumbs as $breadcrumb): ?> <span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> &gt; <a href="<?= rtrim($breadcrumb->page_url('/category'), '/') ?>/" data-gtm="Breadcrumb (P)" itemprop="item"><span itemprop="name"><?= $breadcrumb->name ?></span></a><meta itemprop="position" content="<?php echo $pos; ?>" /> <?php if ($i < count($primaryBreadcrumbs)): ?> <span class="breadcrumb-hover"> <span> <?php if ($breadcrumb->list_children('front_end_sort_order')->count): ?> <div class="breadcrumb-category"> <?php foreach ($breadcrumb->list_children('front_end_sort_order') as $subcategory): ?> <? if(!empty($subcategory->x_catfalse)): ?> <a href="<?= $subcategory->x_catfalse ?>" title="<?= h($subcategory->name) ?>" data-gtm="Breadcrumb Pop (P)"><?= h($subcategory->name) ?></a> <? else: ?> <a href="<?= $subcategory->page_url('category') ?>/" title="<?= h($subcategory->name) ?>" data-gtm="Breadcrumb Pop (P)"><?= h($subcategory->name) ?></a> <? endif ?> <?php endforeach; ?> </div> <?php endif; ?> </span> </span> <?php else: ?> <?php if ($breadcrumb->eval_num_of_products()): ?> <span class="breadcrumb-hover"> <span> <div class="breadcrumb-category"> <p style="margin-bottom: 9px;"><strong>Top Products</strong></p> <?php $products = $breadcrumb->list_products(array('sorting'=>array('price desc')))->limit(3)->find_all(); ?> <?php foreach ($products as $breadcrumbProduct): ?> <a href="<?php echo $breadcrumbProduct->page_url('product'); ?>/" data-gtm="Breadcrumb Pop (P)"><?php echo $breadcrumbProduct->name; ?></a> <?php endforeach; ?> <a href="<?= $breadcrumb->page_url('category') ?>/">View All</a> </div> </span> </span> <?php endif; ?> <?php endif; ?> </span> <? $i++; $pos++; endforeach ?> <?php endif; ?> <span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">&nbsp;>&nbsp;<span itemprop="name"><?php echo $product->name; ?></span><meta itemprop="position" content="<?php echo $pos; ?>" /></span> </div> </div> </div> <section class="content"> <? if( $product->x_bookpay == 200): ?> <section id="product" class="product top block" style="margin:15px;"> <?php $this->render_partial('shop:product3', array( 'product' => $product ), array( 'cache'=>true, 'cache_vary_by'=>array('url'), 'cache_versions'=>array('catalog'), 'cache_ttl'=>86400 )); ?> </section> <? elseif( $product->x_bookpay == 201): ?> <section id="product" class="product top block" style="margin:15px;"> <?php $this->render_partial('shop:product4', array( 'product' => $product ), array( 'cache'=>true, 'cache_vary_by'=>array('url'), 'cache_versions'=>array('catalog'), 'cache_ttl'=>86400 )); ?> </section> <? elseif( $product->x_bookpay == 202): ?> <section id="product" class="product top block" style="margin:15px;"> <?php $this->render_partial('shop:product5_2021', array( 'product' => $product ), array( 'cache'=>true, 'cache_vary_by'=>array('url'), 'cache_versions'=>array('catalog'), 'cache_ttl'=>86400 )); ?> </section> <? elseif( $product->x_bookpay == 123): ?> <section id="product" class="product top block" style="margin:15px;"> <?php $this->render_partial('shop:product_training', array( 'product' => $product ), array( 'cache'=>true, 'cache_vary_by'=>array('url'), 'cache_versions'=>array('catalog'), 'cache_ttl'=>86400 )); ?> </section> <? else: ?> <section id="product" class="product top block" style="margin:15px;"> <?php $this->render_partial('shop:product2', array( 'product' => $product ), array( 'cache'=>true, 'cache_vary_by'=>array('url'), 'cache_versions'=>array('catalog'), 'cache_ttl'=>86400 )); ?> </section> <?php endif; ?> </section> </div> </section> <?= $this->render_partial('white_diesel_modal') ?> <?= $this->render_partial('insurance_modal') ?> <?= $this->render_partial('deposit_modal') ?> <?= $this->render_partial('id_modal') ?> <?= $this->render_partial('paypal_modal') ?> <script> window.booking.form.on('booking:basket-add', function(e, items) { dataLayer.push({ 'event' : 'add_to_cart', 'ecommerce' : { 'items': items } }); }); //dataLayer = []; dataLayer.push({ 'event' : 'view_item', 'ecommerce' : { 'items': [{ 'item_id': '<?php echo $product->sku; ?>', 'item_name': '<?php echo $product->name ?>', 'price': '<?php if($product->om('is_on_sale')): ?><?php echo $product->om('sale_price'); ?><?php else: ?><?php echo $product->om('price') ?><?php endif; ?>' }] } }); </script>', 'CMS page', 'Genie Z-60 FE 20m Hybrid Articulating Boom Lift') /modules/cms/classes/cms_controller.php 608
10 Cms_Controller->eval_page_content(()) /modules/cms/classes/cms_controller.php 198
9 Cms_Controller->open(object(Cms_Page), array(1) [0 => 'genie-z60fe-hire']) /controllers/application.php 72
8 Application->On404(())
7 call_user_func_array(array(2) [0 => object(Application), 1 => 'On404'], array(0)) /phproad/modules/phpr/classes/phpr_controller.php 170
6 Phpr_Controller->executeAction('On404', array(0)) /phproad/modules/phpr/classes/phpr_controller.php 84
5 Phpr_Controller->_run('On404', array(0)) /phproad/modules/phpr/classes/phpr_response.php 64
4 Phpr_Response->open404(()) /phproad/modules/phpr/classes/phpr_response.php 37
3 Phpr_Response->open('/product/genie-z60fe-hire') /phproad/system/phproad.php 31
2 include('/var/www/vhosts/nationaltoolhireshops.co.uk/httpdocs/phproad/system/phproad.php') /boot.php 114
1 require_once('/var/www/vhosts/nationaltoolhireshops.co.uk/httpdocs/boot.php') /index.php 3