PageSourceSearch

https://bookings.cantref.com/book/product/gift-voucher/559

html cantref.com collected 2026-09-29 02:38:49 UTC 66,021 bytes, 1,253 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
3<head>
4		<link rel="canonical" href="https:///book/product/gift-voucher/559" />
5	
6		<!-- Google Tag Manager -->
7	
7<script>
vendor: 341 bytes, lines 7-12
7
8		(function(w,d,s,l,i){ w[l]=w[l]||[];w[l].push({ 'gtm.start':
9		new Date().getTime(),event:'gtm.js' });var f=d.getElementsByTagName(s)[0],
10		j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
11		'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
12		})(window,document,'script','dataLayer','
12GTM-NC7DX9L
vendor: 5 bytes, lines 12-13
12');
13	
13</script>
13
14	<!-- End Google Tag Manager -->	<!-- Facebook Pixel Code -->
15	
15<script>
vendor: 421 bytes, lines 15-24
15
16		!function(f,b,e,v,n,t,s)
17		{ if(f.fbq)return;n=f.fbq=function(){ n.callMethod?
18		n.callMethod.apply(n,arguments):n.queue.push(arguments) };
19		if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
20		n.queue=[];t=b.createElement(e);t.async=!0;
21		t.src=v;s=b.getElementsByTagName(e)[0];
22		s.parentNode.insertBefore(t,s) }(window, document,'script',
23		'https://connect.facebook.net/en_US/fbevents.js');
24		fbq('init', '
24812489879998827
vendor: 33 bytes, lines 24-26
24');
25		fbq('track', 'PageView');
26	
26</script>
26
27	<noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=812489879998827&ev=PageView&noscript=1"/></noscript>
28	<!-- End Facebook Pixel Code -->	<!-- MS Clarity -->
29	
29<script type="text/javascript">
30		(function(c,l,a,r,i,t,y){
31			c[a]=c[a]||function(){ (c[a].q=c[a].q||[]).push(arguments) };
32			t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
33			y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
34		})(window, document, "clarity", "script", "vjs9pqjznd");
35		waitForClarity(function() {
36			window.clarity('consentv2',{
37				ad_storage: "granted", 
38				analytics_storage: "granted" 
39			});
40		});
41		function waitForClarity(callback){
42			if(typeof clarity !== 'undefined'){
43				callback()
44			} else {
45				setTimeout(function () {
46					waitForClarity(callback)
47				}, 100)
48			}
49		};
50	</script>
50
51	<!-- End MS Clarity -->	<title>Gift Voucher</title>
52	<meta charset="utf-8">
53	<meta name="description" content="">
54	<meta name="keywords" content="">
55	<meta property="og:locale" content="en_GB" />
56	<meta property="og:type" content="website" />
57	<meta property="og:title" content="Gift Voucher" />
58	<meta property="og:description" content="" />
59	<meta property="og:url" content="https:///book/product/gift-voucher/559" />
60	<meta property="og:site_name" content="" />	<meta property="og:image" content="" />
61	<meta name="twitter:card" content="summary" />
62	<meta name="twitter:description" content="" />
63	<meta name="twitter:title" content="Gift Voucher" />
64	<meta name="twitter:site" content="" />	<meta name="twitter:creator" content="" />	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5">
65	<link rel="canonical" href="https:///book/product/gift-voucher/559" />
66	<!-- Favicon -->
67	<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon.png">
68	<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon/favicon-32x32.png">
69	<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon/favicon-16x16.png">
70	<link rel="manifest" href="/assets/favicon/site.webmanifest">
71	<link rel="mask-icon" href="/assets/favicon/safari-pinned-tab.svg" color="#5bbad5">
72	<link rel="shortcut icon" href="/assets/favicon/favicon.ico">
73	<meta name="msapplication-TileColor" content="#ffd422">
74	<meta name="msapplication-config" content="/assets/favicon/browserconfig.xml">
75	<meta name="theme-color" content="#ffffff">
76	<link href="/common/assets/bootstrap-4.6.2/css/bootstrap.min.css" rel="stylesheet" ><link href="/common/assets/fonts/fontawesome-pro-6.5.2-web/css/all.min.css" rel="stylesheet" media="none" onload="if(media!='all')media='all'">
77	<link  href="/assets/css/style.css?cc=1722873678" rel="stylesheet" type="text/css"  media="none" onload="if(media!='all')media='all'"/>
78	<noscript>
79		<link  href="/assets/css/style.css?cc=1722873678" rel="stylesheet" type="text/css"/>
80		<link href="/common/assets/fonts/fontawesome-pro-6.5.2-web/css/all.min.css" rel="stylesheet" type="text/css"/>
81	</noscript>
82	<!-- JS -->
83		
83<script src="/common/assets/js/jquery-3.7.1.min.js"></script>
83
84	<!-- popper -->
85	
85<script src="/common/assets/bootstrap-4.6.2/js/popper.min.js"></script>
85
86	<!-- Bootstrap-->
87	
87<script src="/common/assets/bootstrap-4.6.2/js/bootstrap.min.js"></script>
87
88	
88<script type="application/ld+json">
89	{ "@context":"http://schema.org",
90	"@type":"Organization",
91	"legalName":"",
92	"url":"",
93	"logo":"",
94	"contactPoint":[{
95		"@type":"ContactPoint",
96		"telephone":"",
97		"contactType":"customer service"
98	}]
99	}
100</script>
100	<link type="text/css" rel="stylesheet" href="/shop/includes/css_include.css?v=136" />
101	
102        
102<script nonce="OeCjAV4mDlBIq5bEdm2iD5irzyBDtE/Bdtl7KNXATjA=">
103var WS_USER = "cantref";
104var BASE_CURRENCY = "GBP";
105var CURRENCY_STRING = "&pound;";
106var language = "";
107//console.log("Including /common/assets/js/common.tpl");
108</script>
108 
109
110
111<script src="/common/assets/js/common.js?v=1783678918" nonce="OeCjAV4mDlBIq5bEdm2iD5irzyBDtE/Bdtl7KNXATjA=" ></script>
vendor: 1 bytes, line 111
111
112<script nonce="OeCjAV4mDlBIq5bEdm2iD5irzyBDtE/Bdtl7KNXATjA=">
113var WS_USER = "cantref";
114var devmode = 0;
115var currency = "&pound;";
116var USE_V2_JOURNEY = 0;
117var userId = "";
118var FB_event_id = "6abb24b91d1ca3.97995989";
119var ismobile = "";
120var displaySessionAlreadyStartedWarning = 0;
121var showActivityPricingBreakdown = 0;
122var todaysDate = '2026-09-29';
123var usePricingTypeColors = 0;
124var showSpacesFree  = 0; // Display spaces available on timeslots
125var showPricingTypes = 0; // Display pricing types under timeslots
126var displayVerifyMembershipDetails = 0;
127var accessCardNoPlusOneError = "Your access card is not eligible for an essential companion ticket. Please contact Nimbus Disability to reassess your requirements, or to check eligibility.";
128var isVouchersOnlyCategory = 0;
129</script>
129
130
131<script src="/shop/includes/js_include.js?v=1789729035" nonce="OeCjAV4mDlBIq5bEdm2iD5irzyBDtE/Bdtl7KNXATjA=" ></script>
131</head>
132<body id="productWrap">
133	<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 133-134
133
134<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
134GTM-NC7DX9L
vendor: 83 bytes, line 134
134" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
135<!-- End Google Tag Manager (noscript) --><a href="#content" class="sr-only">Skip to content</a>
136<!-- wrapper -->
137<div id="wrapper" class="h-100 d-flex flex-column">
138	<div id="header">
139		
140		<div id="headerWrapper">
141			<div id="topBar">
142				<ul class="nav w-100 justify-content-end">
143					<li class="nav-item d-none d-md-block mr-5">
144						<a class="nav-link pr-2" href="/booking/select-voucher-type">Redeem vouchers</a>
145					</li>
146					<li class="nav-item ">
147						<a class="nav-link px-2" href="/shop/basket"><i class="fa-regular fa-basket-shopping"></i></a>
148					</li>
149					<li class="nav-item ">
150						<a class="nav-link pl-3 pr-2 pr-md-3 pl-md-2" href="/user/my_account"><i class="fa-regular fa-circle-user"></i></a>
151					</li>
152					
153				</ul>
154			</div>
155			<nav class="navbar navbar-expand-lg">
156												<a href="https://www.cantref.com" class="btn btn-primary"><span class="d-none d-md-inline-block">Return to</span> homepage</a>
157
158				<a href="/booking/select-voucher-type" class="btn btn-primary d-md-none">Redeem</a>
159			</nav>
160			
161		</div>
162		<a id="headerLogo" class="" href="https://www.cantref.com">
163			<img src="/assets/images/logo.webp" height="58px" width="auto" alt="FuseMetrix Group Logo">
164		</a>
165	</div>					<!-- Dev/templates/shop/product.tpl -->
166	
167					<div id="content" class="container py-5" style="position: relative;" >
168             			<div class="row">
169				<div class="col-12 col-md-5 col-lg-5 border-right border-light">
170					
171						<div id="carouselExampleIndicators" >
172							<div class="carousel-inner">
173								<div class="carousel-item active">
174									<img src="https://cantref.fusemetrix.com/common/inc_imageget.php?icc=0&sp=true&id=559&code=3a0772&crop=408x408&defaulturl=https://cantref.fusemetrix.com/bespoke/no_image.jpg" class="d-block w-100" alt="Gift Voucher">
175								</div>
176															</div>
177													</div>
178					
179				</div>
180				<div class="col-12 col-md-7 col-lg-7">
181					<h1 class="pt-2">Gift Voucher</h1>
182					
183																																					<form action="/booking/activity.php" id="form_559" method="get">
184														
185							<input type="hidden" name="locationId" id="locationId_559" value="1" />
186							
187																																											<!--<input type="hidden" name="fullProductName" value="Gift Voucher">-->
188							
189							<input type="hidden" name="productId" value="559" />
190							<input type="hidden" name="hx" value="4c45807616125d8f9e513490f35d92e8" />
191															<input type="hidden" name="locationId" value="1" />
192														
193							<!--<input type="hidden" name="pricingtype" id="pricingtype_559" value="0" />-->
194															<input type="hidden" name="addGiftvoucher" value="1" />
195														
196																					
197														
198															<input type="hidden" name="addGiftvoucher" value="1" />
199                                <input type="hidden" name="giftVoucherProductId" value="559" />
200								                                    <div class="form-group row mb-3 justify-content-between align-items-center">
201                                        <div class="col-form-label col-6 col-sm-5">Value</div>
202                                        <div class="col-6 col-sm-7">
203                                            <select class="form-control my-1" id="giftVoucherSelector" name="value">
204                                                                                                                                                        <option value="10.00">&pound;10.00</option>
205                                                                                                                                                        <option value="25.00">&pound;25.00</option>
206                                                                                                                                                        <option value="50.00">&pound;50.00</option>
207                                                                                                                                                        <option value="100.00">&pound;100.00</option>
208                                                                                                                                                        <option value="Custom">Custom</option>
209                                                                                            </select>
210                                            <div id="giftVoucherCustomWrapper" class="d-none" >
211                                                <div class="input-group mb-3 w-100">
212                                                    <div class="input-group-prepend">
213                                                        <span class="input-group-text">&pound;</span>
214                                                    </div>
215                                                    <input type="text" class="form-control" name="customvalue" id="giftVoucherCustomField" placeholder="0" min="0">
216                                                </div>
217                                            </div>
218                                        </div>
219                                    </div>
220																
221																																				<input type="hidden" name="voucherPostageSelector" value="0" />
222										<input type="hidden" name="voucherPostage" value="-1.00"/>
223																		<button type="submit" class="btn btn-primary w-100">Buy voucher</button>
224																					</form>
225									</div>
226			</div>
227			<button class="btn btn-secondary btn-back mt-3" onclick="history.back()">Back</button>
228		</div>
229		
230		
231	<div id="footer" class="mt-auto">
232	<div class="footerLogo text-center"><img src="/assets/images/logo.webp" height="58px" width="auto" alt="Cantref Adventure Farm Logo"></div>
233	<div id="footerWrapper" class="pb-3">
234		<div class="container py-4">
235			<div class="row">
236
237			</div>
238			<div class="border-top border-bottom py-4 my-4 text-center">
239				<a href="https://www.fusemetrix.com" target="_blank" class="">Powered by <img class="fmxlogo" src="/common/fmx-logos/logo-fmx-group-white.svg" height="30px" width="auto" alt="FuseMetrix Group logo"></a>
240			</div>
241			<div class="row align-items-end">
242				<div class="col-12 col-lg-8 footerCopy text-center text-lg-left order-2 order-lg-1">
243					&copy; Copyright 2026 Cantref Adventure Farm | Upper Cantref Farm, Cantref, Brecon, Powys LD3 8LR
244				</div>
245				<div class="col-12 col-lg-4 order-1 order-lg-2">
246					<div id="socialIcons" class="d-flex align-items-center justify-content-center justify-content-lg-end mb-4 mb-lg-0">
247						<a href="https://www.facebook.com/Cantref/" class="ml-2 ml-lg-0"><i class="fa-brands fa-facebook-f"></i></a>
248						<a href="https://www.youtube.com/user/CantrefFarmcant" class="ml-2"><i class="fa-brands fa-youtube"></i></a>
249						<a href="https://www.tiktok.com/place/Cantref-Adventure-Farm-21568295483131158" class="ml-2"><i class="fa-brands fa-tiktok"></i></a>
250						<a href="https://www.instagram.com/cantref_adventure_farm/" class="ml-2"><i class="fa-brands fa-instagram"></i></a>
251						<a href="https://x.com/cantref" class="ml-2"><i class="fa-brands fa-twitter"></i></a>
252					</div>
253				</div>
254			</div>
255		</div>
256	</div>
257</div>
258
259	<!-- footer includes file dev/common/footer-includes.php -->
260
261    
262    
262<script nonce="OeCjAV4mDlBIq5bEdm2iD5irzyBDtE/Bdtl7KNXATjA=">    
263        let popups = []
264
265        function Popup(id, members, page) {
266            this.id         = id
267            this.members    = members
268            this.page       = page
269        }
270        //grab vars from template for checks
271        var scriptName = '/shop/product.php'
272        var isMember   = ''
273
274
275        const validPopup = (members, page) => {
276            let allow = true
277      
278            switch(page) {
279                case 'home':
280                    (scriptName == '/index.php' || scriptName == '/shop/category.php') ? null : allow = false
281                    break;
282                case 'my-account':
283                    scriptName == '/user/my_account.php' ? null : allow = false
284                    break;
285            }
286
287            if(parseInt(members)){
288                parseInt(isMember) ? null : allow = false
289            }
290            return allow;
291        }
292    </script>
292
293                                                    
294    
294<script nonce="OeCjAV4mDlBIq5bEdm2iD5irzyBDtE/Bdtl7KNXATjA=">
295    console.log(popups)
296
297    $('document').ready(() => {
298        //loop through the popups arr and try to fire them
299        for(let i = 0; i < popups.length; i++) {
300            let popupCookie = getCookie("popuploaded"+popups[i].id);
301            if(popupCookie == ''){
302                //check page and member conditions
303                if(validPopup(popups[i].members, popups[i].page)) {
304                    $('#sitePopup'+popups[i].id).modal('show')
305                }
306            }
307        }
308    })
309    function setCookie(cname, cvalue, exdays) {
310        var d = new Date();
311        d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
312        var expires = "expires="+d.toUTCString();
313        document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
314    }
315
316    function getCookie(cname) {
317        var name = cname + "=";
318        var ca = document.cookie.split(';');
319        for(var i = 0; i < ca.length; i++) {
320            var c = ca[i];
321            while (c.charAt(0) == ' ') {
322            c = c.substring(1);
323            }
324            if (c.indexOf(name) == 0) {
325            return c.substring(name.length, c.length);
326            }
327        }
328        return "";
329    }
330    </script>
330
331
332    
332<script nonce="OeCjAV4mDlBIq5bEdm2iD5irzyBDtE/Bdtl7KNXATjA=">
333    function genAlertMsg(title, msg, e = {}){
334        e.target ? e.preventDefault() : null;
335        
336        $('#genAlertModalTitle').html(title);
337        $('#genAlertModalBody').html(msg);
338        $('#genAlertModal').modal('show')
339    }
340</script>
340
341
342<div style='z-index: 1000000' id='genAlertModal' class="modal" tabindex="-1">
343  <div class="modal-dialog">
344    <div class="modal-content">
345      <div class="modal-header">
346        <h5 id='genAlertModalTitle' class="modal-title">Error</h5>
347        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
348          <span aria-hidden="true">&times;</span>
349        </button>
350      </div>
351      <div class="modal-body">
352        <p id='genAlertModalBody'></p>
353      </div>
354      <div class="modal-footer">
355        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
356      </div>
357    </div>
358  </div>
359</div>
360    <style>
361    #basketUpdateAlert {
362        position: fixed;
363        top: 0;
364        z-index: 99999;
365        right: 0;
366        top: 65px;
367        min-width: 350px;
368        background-color: #fff;
369        display: none;
370    }
371    #basketUpdateAlert p {
372        padding-bottom: 4px;
373        margin-bottom: 0px;
374    }
375</style>
376
377<section id='basketUpdateAlert' class='shadow p-3'>
378    <div class='d-flex align-items-center justify-content-between mb-2'>
379        <strong class='pl-3'>Added to Cart</strong>
380        <div data-action="basketUpdateAlertToggle" class="text-right font-weight-bold">&times;</div>
381    </div>
382    <div class='mx-auto d-flex'>
383        <div style='max-width: 100px'>
384            <img id='basketUpdateProductImage' src="" alt="placeholder image">
385        </div>
386        <div class='pl-3'>
387            <p id='basketUpdateProductName'></p>
388            <p id='basketUpdateProductPrice'></p>
389            <p>Qty: <span id='basketUpdateProductQty'></span></p>
390        </div>
391    </div>
392    <div class='mt-2'>
393        <a href="/shop/basket" class='btn basketAlert-btn btn-primary w-100'>Checkout</a>
394    </div>
395</section>
396
397<script nonce="OeCjAV4mDlBIq5bEdm2iD5irzyBDtE/Bdtl7KNXATjA=">
398    $(document).on('click', '[data-action="basketUpdateAlertToggle"]', function (e) {
399        e.preventDefault();
400        $('#basketUpdateAlert').fadeOut()
401    });
402
403</script>
403
404
405
406	
407			
408<!-- DEV/shop/includes/footer.php -->
409<div class="modal fade" id="voucherRedeemModalCenter" tabindex="-1" role="dialog" aria-labelledby="voucherRedeemModalTitle" aria-hidden="true">
410    <div class="modal-dialog modal-dialog-centered" role="document">
411        <div class="modal-content">
412            <div class="modal-header">
413                <h3 class="modal-title" id="voucherRedeemModalTitle">Voucher accepted</h3>
414                <button type="button" class="close" data-dismiss="modal" data-bs-dismiss="modal" aria-label="Close">
415                    <span aria-hidden="true">&times;</span>
416                </button>
417            </div>
418            <div class="modal-body">
419                Simply book one of our activities and the cost will be deducted in your basket
420            </div>
421            <div class="modal-footer">
422                <button type="button" class="btn btn-secondary" data-dismiss="modal" data-bs-dismiss="modal">Let's go</button>
423            </div>
424        </div>
425    </div>
426</div>
427
428<style>
429#divCustomerPhotoContainer {
430	width: 200px;
431	height: 200px;
432	border: 1px solid #a4a4a485;
433	border-radius:200px;
434	overflow: hidden;
435	display: flex;
436	justify-content: center;
437	align-items: center;
438    background: #efefef;
439}
440
441.modal-user-profile-picture[src="/common/assets/images/user-profile.png"] {
442  object-fit: contain;
443  width: 62%;
444  height: 62%;
445  filter: brightness(100);
446}
447
448</style>
449
450<div class="modal fade" id="modalCustomerPhoto" tabindex="-1" role="dialog" aria-hidden="true">
451	<div class="modal-dialog modal-dialog-centered" role="document">
452		<div class="modal-content">
453			<div class="modal-header">
454				<h5 class="modal-title">Customer Photo</h5>
455				<button type="button" class="close btn-close" data-dismiss="modal" data-bs-dismiss="modal" aria-label="Close"><span aria-hidden="true" class="visually-hidden">&times;</span></button>
456			</div>
457			<div class="modal-body">
458				<p>You can retake your photo as many times as you like, when you're happy with you photo press save. <span class="text-danger">Once your photo has been saved, if you need to change this please contact us.</span></p>
459				<div class="d-flex justify-content-center mb-3">
460					<div id="divCustomerPhotoContainer">
461						<img class="modal-user-profile-picture" src="/common/assets/images/user-profile.png" alt="User Photo"/>
462					</div>
463					<div id="divMyCamera"></div>
464					<input type="hidden" id="photoUserId">
465					<input type="hidden" id="photoUserKey">
466					<input type="hidden" id="photoOrderId">
467				</div>
468				
469									<div class="mx-3 mx-sm-5" id="divPhotoOptions">
470                <button type="button" class="btn btn-primary w-100" id="btnOpenCamera" data-action="openCamera">Take Photo</button>
471						<p class="text-center my-1">Or</p>
472						<button type="button" class="btn btn-primary w-100" id="btnUploadPhoto" data-action="uploadPhoto">Upload photo</button>
473					</div>
474					<div class="mx-3 mx-sm-5" id="divPhotoButtons">
475						<button type="button" class="btn btn-primary w-100 mb-2" id="btnTakePhoto" data-action="takePhoto">Capture</button>
476						<button type="button" class="btn btn-primary w-100 mb-2" id="btnRetakePhoto" data-action="resetPhoto">Retake</button>
477						<button type="button" class="btn btn-success w-100" id="btnSavePhoto" data-action="savePhoto">Save</button>
478					</div>
479								
480				<div class="alert alert-danger mb-2" role="alert" id="divUploadPhotoError"></div>
481				<div class="mx-2" id="divUploadPhoto">
482					<div class="input-group">
483						<div class="custom-file">
484							<input type="file" class="custom-file-input form-control" id="uploadCustomerPhoto" accept="image/*">
485							<label class="custom-file-label input-group-text  visually-hidden" for="uploadCustomerPhoto" aria-describedby="btnUploadCustomerPhoto">Choose file</label>
486						</div>
487						<div class="input-group-append ml-auto ms-auto">
488							<button type="button" class="btn btn-primary ml-3 ms-3" id="bt
488nUploadCustomerPhoto" data-action="savePhotoUploaded">Save</span>
489						</div>
490					</div>
491                    <small>Maximum upload file size: 2 MB</small>
492				</div>
493			</div>
494			<div class="modal-footer">
495				<button type="button" class="btn btn-secondary mr-auto me-auto" data-dismiss="modal" data-bs-dismiss="modal">Close</button>
496			</div>
497		</div>
498	</div>
499</div>
500
501<div class="modal fade" id="modalUserPhoto" tabindex="-1" role="dialog" aria-hidden="true">
502    <div class="modal-dialog modal-dialog-centered" role="document">
503        <div class="modal-content">
504            <div class="modal-header">
505                <h5 class="modal-title">Customer photo</h5>
506                <button type="button" class="close btn-close" data-dismiss="modal" data-bs-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
507            </div>
508            <div class="modal-body">
509                <p class="">You can retake your photo as many times as you like, when you're happy with you photo press save. <span class="text-danger">Once your photo has been saved, if you need to change this please contact us.</span></p>
510                <div class="d-flex justify-content-center  position-relative">
511                    <div id="divUserPhoto" class="position-absolute" style="width: 100%; height: 100%;top: 0;left: 0;display: flex;flex-direction: column;justify-content: center;align-items: center;">
512                        <img id="userPhotoPlaceholder" src="/common/assets/images/user-profile.png" style="object-fit: contain; width: 200px;height: 200px;" alt="User profile placeholder image">
513                        
514                    </div>
515                    <div id="divUserCamera"></div>
516                    
517                    <input type="hidden" id="photoUserKey">
518                </div>
519                <div class="text-center">
520                    <label for="upload" id="btnSelectUserPhoto" style="display:none" class="uploadButton btn btn-secondary mt-3">Select photo</label>
521                    <input type="file" name="upload" id="upload" class="d-none" onchange="loadUserPhoto(event)">
522                </div>
523            </div>
524            <div class="modal-footer justify-content-between">
525                <button type="button" class="btn btn-secondary" data-dismiss="modal" data-bs-dismiss="modal">Close</button>
526                <button type="button" class="btn btn-primary" id="btnTakeUserPhoto" data-action="takeUserPhoto">Take photo</button>
527                <button type="button" class="btn btn-primary" id="btnUploadUserPhoto" data-action="uploadUserPhoto" style="display:none" >Upload photo</button>
528                <button type="button" class="btn btn-primary" id="btnResetUserPhoto" onclick="resetUserPhoto();">Retake</button>
529                <button type="button" class="btn btn-success" id="btnSaveUserPhoto" onclick="saveUserPhoto();">Save</button>
530            </div>
531        </div>
532    </div>
533</div>
534
535<div class="modal fade" id="modalImage" tabindex="-1" role="dialog" aria-hidden="true">
536    <div class="modal-dialog modal-dialog-centered">
537        <div class="modal-content">
538            <div class="modal-body" id="divModalImage"></div>
539        </div>
540    </div>
541</div>
542
543<div class="modal fade" id="modalMemberBookNow" tabindex="-1" role="dialog" aria-hidden="true">
544    <div class="modal-dialog modal-lg modal-dialog-centered" role="document">
545        <div class="modal-content">
546            <form id="frmMemberBookNow" action="/booking/buildSessionGroup.php" method="post">
547                <input type="hidden" name="makeBooking" value="1">
548                <input type="hidden" name="userId" id="userId" value="">
549                <input type="hidden" name="categoryId" id="categoryId" value="0">
550                <input type="hidden" name="locationId" id="locationId" value="1">
551                <div class="modal-header">
552                    <h5 class="modal-title">Book Now</h5>
553                    <button type="button" class="close btn-close" data-dismiss="modal" data-bs-dismiss="modal" aria-label="Close"><span class="visually-hidden" aria-hidden="true">&times;</span></button>
554                </div>
555                <div class="modal-body" id="divSingleProducts">
556                    <h3>Members</h3>
557                    <p id="extraDescription"></p>
558                    <p>Please select which member will be attending</p>
559                    <div id="divMemberProducts" class="mb-3"></div>
560                    <div id="divAdditionalProducts"></div>
561                </div>
562                <div class="modal-footer">
563                    <button type="submit" class="btn btn-primary" id="btnBookNow">Book now</button>
564                </div>
565            </form>
566        </div>
567    </div>
568</div>
569
570<div class="modal fade" id="modalAddFriendsMembership" tabindex="-1" role="dialog" aria-hidden="true">
571    <div class="modal-dialog modal-dialog-centered" role="document">
572        <div class="modal-content">
573            <form id="frmAddFriendsMembership" method="post">
574                <input type="submit" style="display:none;"  value="submit"/>
575                <input type="hidden" name="linkMembership" value="1">
576                <input type="hidden" name="categoryId" value="0">
577                <input type="hidden" name="mainMembershipId" value="">
578                <input type="hidden" name="linkMembershipId" id="linkMembershipId">
579                <input type="hidden" name="addFriendSurname" id="linkMembershipSurname">
580               
581                <div class="modal-header">
582                    <h5 class="modal-title" id="modalAddFriendsMembershipTitle">Add a friend's membership</h5>
583                    <button type="button" class="close btn-close" data-dismiss="modal" data-bs-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
584                </div>
585                <div class="modal-body">
586                    <div class="form-row">
587                        <div class="form-group col-md-6">
588                            <label for="addFriendCardNumber">Your friend's card number</label>
589                            <input type="text" class="form-control" id="addFriendCardNumber" required>
590                        </div>
591                        <div class="form-group col-md-6">
592                            <label for="addFriendSurname">Your friend's surname</label>
593                            <input type="text" class="form-control" id="addFriendSurname" required>
594                        </div>
595                    </div>
596                    <div id="divAddFriendsMembership"></div>
597                </div>
598                <div class="modal-footer">
599                    <button type="button" class="btn btn-primary" onclick="searchFriendMemberships();">Search</button>
600                    <button type="submit" class="btn btn-success" style="display:none;" id="btnAddFriendsMembership">Add</button>
601                </div>
602            </form>
603        </div>
604    </div>
605</div>
606
607<div class="modal fade" id="modalBuyVoucher" tabindex="-1" role="dialog" aria-hidden="true">
608    <div class="modal-dialog modal-dialog-centered" role="document">
609        <input type="hidden" id="buyVoucherLocationId">
610        <input type="hidden" id="buyVoucherProductId">
611        <div class="modal-content">
612            <div class="modal-header">
613                <h5 class="modal-title mb-0">Buy voucher <span class="modalProductName"></span></h5>
614            </div>
615            <div class="modal-body p-0" id="divBuyVoucher">
616                <div class="p-3">
617                    <!-- productPrice is dynamic, it is in \Dev\shop\includes\js_include.php -->
618                    <div id="buyVoucherQtyWrap" class="form-group row mb-0">
619                        <label for="buyVoucherQty" class="col-sm-6 col-form-label font-weight-bold"><div class="d-table h-100"><div class="d-table-cell h-100 align-middle"><span id="productPrice"><span class="sr-only">product price</span></span></div></div></label>
620                        <div class="col-sm-6">
621                            <div class="input-group">
622                                <div class="input-group-prepend">
623                                    <button type="button" class="btn btn-primary qtyIncrement" data-add="-1">-</button>
624                                </div>
625                                <input type="text" class="form-control text-center border" id="buyVoucherQty" placeholder="0" value="0">
626                                <div class="input-group-append">
627                                    <button type="button" class="btn btn-primary qtyIncrement" data-add="1">+</button>
628                                </div>
629                            </div>
630                        </div>
631                    </div>
632                    <div class="form-group row mt-3" id="voucherTypeWrap">
633                        <label for="voucherType" class="col-sm-2 col-form-label font-weight-bold">Type</label>
634                        <div class="col-sm-10" id="divVoucherPricingTypes"></div>
635                    </div>
636                </div>
637                <div id="buyVoucherOptions" style="display:none;" class="border-top">
638                    <div class="row no-gutters">
639                        <div class="col-6 text-center border-right p-3">
640                            <input onclick="$('#buyVoucherPostedOptions').hide();" type="radio" name="type" value="digital" id="vouchertypeDigital" checked><label for="vouchertypeDigital" class="pl-1 cursor-pointer m-0">Digital (Free)</label>
641                        </div>
642                        <div class="col-6 text-center p-3">
643                            <input onclick="$('#buyVoucherPostedOptions').show();" type="radio" name="type" value="posted" id="vouchertypePosted"><label for="vouchertypePosted" class="pl-1 cursor-pointer m-0">Posted</label>
644                        </div>
645                        <div id="buyVoucherPostedOptionsContainer" class="col-12">
646                            <div id="buyVoucherPostedOptions" class="col-12 border-top" style="display:none;">
647                                <input type="hidden" id="voucherExtraId" name="voucherExtraId" value="
6470">
648                                <div style="width:100%; max-width:100%; overflow-x:auto;" class="p-3">
649                                    <div id="buyVoucherPostedProducts"></div>
650                                </div>
651                            </div>
652                        </div>
653                    </div>
654                </div>
655            </div>
656            <div class="modal-footer justify-content-between">
657                <button type="button" class="btn btn-secondary btn-noarrow" data-dismiss="modal" data-bs-dismiss="modal">Close</button>
658                <button type="button" class="btn btn-primary" style="display:none;" id="btnAddVoucher" onclick="addVoucher();">Add to basket</button>
659            </div>
660        </div>
661    </div>
662</div>
663
664<div class="modal fade" id="modalBuyMembershipVoucher" tabindex="-1" role="dialog" aria-hidden="true">
665    <div class="modal-dialog modal-dialog-centered" role="document">
666        <div class="modal-content">
667            <form class="m-0" id="frmBuyMembershipVoucher" method="post">
668                <input type="hidden" name="buyMembershipVoucher" value="1">
669                <input type="hidden" name="locationId" id="buyMembershipVoucherLocationId">
670                <input type="hidden" name="productId" id="buyMembershipVoucherProductId">
671                <input type="hidden" id="buyMembershipVoucherMaximumUsers">
672                <input type="hidden" id="buyMembershipVoucherOption">
673                <div class="modal-header">
674                    <h5 class="modal-title">Buy membership voucher</h5>
675                    <button type="button" class="close btn-close" data-dismiss="modal" data-bs-dismiss="modal" aria-label="Close"><span aria-hidden="true"class="visually-hidden">&times;</span></button>
676                </div>
677                <div class="modal-body" id="divBuyMembershipVoucher">
678                    <div class="alert alert-danger text-center" role="alert" id="divBuyMembershipVoucherError" style="display:none;"></div>
679                    <p class="card-text">We just need a few details about how many people it's for.</p>
680                    <div class="row mb-1 align-items-center" id="divBuyMembershipVoucherAdults">
681                        <label for="buyMembershipVoucherAdults" class="col-sm-4 font-weight-bold" style="line-height:1em;" id="lblBuyMembershipVoucherAdults"><span class="sr-only">membership voucher adults</span></label>
682                        <div class="col-sm-8">
683                            <div class="input-group">
684                                <div class="input-group-prepend">
685                                    <button type="button" class="btn btn-primary qtyIncrement" data-type="adults" data-add="-1">-</button>
686                                </div>
687                                <input type="text" class="form-control text-center border" name="adults" id="buyMembershipVoucherAdults" placeholder="0" value="">
688                                <div class="input-group-append">
689                                    <button type="button" class="btn btn-primary qtyIncrement" data-type="adults" data-add="1">+</button>
690                                </div>
691                            </div>
692                        </div>
693                    </div>
694                    <div class="row mb-1 align-items-center" id="divBuyMembershipVoucherChildren">
695                        <label for="buyMembershipVoucherChildren" class="col-sm-4 font-weight-bold" style="line-height:1em;" id="lblBuyMembershipVoucherChildren"><span class="sr-only">membership voucher children</span></label>
696                        <div class="col-sm-8">
697                            <div class="input-group">
698                                <div class="input-group-prepend">
699                                    <button type="button" class="btn btn-primary qtyIncrement" data-type="children" data-add="-1">-</button>
700                                </div>
701                                <input type="text" class="form-control text-center border" name="children" id="buyMembershipVoucherChildren" placeholder="0" value="">
702                                <div class="input-group-append">
703                                    <button type="button" class="btn btn-primary qtyIncrement" data-type="children" data-add="1">+</button>
704                                </div>
705                            </div>
706                        </div>
707                    </div>
708                    <div class="row mb-1 align-items-center" id="divBuyMembershipVoucherSeniors" style="display:none;">
709                        <label for="buyMembershipVoucherSeniors" class="col-sm-4 font-weight-bold" style="line-height:1em;" id="lblBuyMembershipVoucherSeniors"><span class="sr-only">membership voucher seniors</span></label>
710                        <div class="col-sm-8">
711                            <div class="input-group">
712                                <div class="input-group-prepend">
713                                    <button type="button" class="btn btn-primary qtyIncrement" data-type="seniors" data-add="-1">-</button>
714                                </div>
715                                <input type="text" class="form-control text-center border" name="seniors" id="buyMembershipVoucherSeniors" placeholder="0" value="">
716                                <div class="input-group-append">
717                                    <button type="button" class="btn btn-primary qtyIncrement" data-type="seniors" data-add="1">+</button>
718                                </div>
719                            </div>
720                        </div>
721                    </div>
722                    <div class="row mb-1 align-items-center" id="divBuyMembershipVoucherStudents" style="display:none;">
723                        <label for="buyMembershipVoucherStudents" class="col-sm-4 font-weight-bold" style="line-height:1em;" id="lblBuyMembershipVoucherStudents"><span class="sr-only">membership voucher students</span></label>
724                        <div class="col-sm-8">
725                            <div class="input-group">
726                                <div class="input-group-prepend">
727                                    <button type="button" class="btn btn-primary qtyIncrement" data-type="students" data-add="-1">-</button>
728                                </div>
729                                <input type="text" class="form-control text-center border" name="students" id="buyMembershipVoucherStudents" placeholder="0" value="">
730                                <div class="input-group-append">
731                                    <button type="button" class="btn btn-primary qtyIncrement" data-type="students" data-add="1">+</button>
732                                </div>
733                            </div>
734                        </div>
735                    </div>
736                    <div class="row mb-1 align-items-center" id="divBuyMembershipVoucherDisabled" style="display:none;">
737                        <label for="buyMembershipVoucherDisabled" class="col-sm-4 font-weight-bold" style="line-height:1em;" id="lblBuyMembershipVoucherDisabled"><span class="sr-only">membership voucher disabled</span></label>
738                        <div class="col-sm-8">
739                            <div class="input-group">
740                                <div class="input-group-prepend">
741                                    <button type="button" class="btn btn-primary qtyIncrement" data-type="disabled" data-add="-1">-</button>
742                                </div>
743                                <input type="text" class="form-control text-center border" name="disabled" id="buyMembershipVoucherDisabled" placeholder="0" value="">
744                                <div class="input-group-append">
745                                    <button type="button" class="btn btn-primary qtyIncrement" data-type="disabled" data-add="1">+</button>
746                                </div>
747                            </div>
748                        </div>
749                    </div>
750                    <div class="row mb-1 align-items-center" id="divBuyMembershipVoucherCarers" style="display:none;">
751                        <label for="buyMembershipVoucherCarers" class="col-sm-4 font-weight-bold" style="line-height:1em;" id="lblBuyMembershipVoucherCarers"><span class="sr-only">membership voucher carers</span></label>
752                        <div class="col-sm-8">
753                            <div class="input-group">
754                                <div class="input-group-prepend">
755                                    <button type="button" class="btn btn-primary qtyIncrement" data-type="carers" data-add="-1">-</button>
756                                </div>
757                                <input type="text" class="form-control text-center border" name="carers" id="buyMembershipVoucherCarers" placeholder="0" value="">
758                                <div class="input-group-append">
759                                    <button type="button" class="btn btn-primary qtyIncrement" data-type="carers" data-add="1">+</button>
760                                </div>
761                            </div>
762                        </div>
763                    </div>
764                    <div class="row mb-1 align-items-center" id="divBuyMembershipVoucherChildminders" style="display:none;">
765                        <label for="buyMembershipVoucherChildminders" class="col-sm-4 font-weight-bold" style="line-height:1em;" id="lblBuyMembershipVoucherChildminders"><span class="sr-only">membership voucher childminders</span></label>
766                        <div class="col-sm-8">
767                            <div class="input-group">
768                                <div class="input-group-prepend">
769                                    <button type="button" class="btn btn-primary qtyIncrement" data-type="childminders" data-add="-1">-</button>
770                                </div>
771                                <input type="text" class="form-control text-center border" name="childminders" id="buyMembershipVoucherChildminders" placeholder="0" value="">
772                                <div class="input-group-append">
773                                    <button type="button" class="btn btn-primary qtyIncrement" data-type="childminders" data-add="1">+</button>
774                                </div>
775                            </div>
776                        </div>
777                    </div>
778                    
779                </div>
780                <div class="modal-footer justify-content-between">
781                    <button type="button" class="btn btn-secondary" data-dismiss="modal" data-bs-dismiss="modal">Cancel</button>
782                    <button type="button" class="btn btn-primary" style="display:none;
782" id="btnAddMembershipVoucher" onclick="addMembershipVoucher();">Add to basket</button>
783                </div> 
784            </form>
785        </div>
786    </div>
787</div>
788
789<div class="modal fade" id="modalBuyVoucherSuccess" tabindex="-1" role="dialog" aria-hidden="true">
790    <div class="modal-dialog modal-dialog-centered" role="document">
791        <div class="modal-content">
792            <div class="modal-header">
793                <h5 class="modal-title mx-auto">Success</h5>
794            </div>
795			            <div class="modal-body text-center py-4">
796                Voucher added to your basket
797            </div>
798			            <div class="modal-footer justify-content-between">
799                <button type="button" class="btn btn-secondary btn-noarrow" data-dismiss="modal" data-bs-dismiss="modal">Continue shopping</button>
800                <a href="/shop/basket" class="btn btn-primary" id="modalSuccessCTAButton">Checkout</a>
801            </div>
802        </div>
803    </div>
804</div>
805
806<div class="modal fade" id="modalAvailableProductsSummary" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" aria-hidden="true">
807    <div class="modal-dialog modal-dialog-centered" role="document">
808        <div class="modal-content">
809            <form id="frmModalAvailableProducts" action="/booking/activityGrouped.php" method="get">
810                <input type="hidden" name="addAllToBasket" value="1">
811                <div class="modal-header">
812                    <h3 class="modal-title" id="exampleModalLongTitle">Booking summary</h3>
813                    <button type="button" class="close btn-close" data-dismiss="modal" data-bs-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
814                </div>
815                <div class="modal-body">
816                    <div class="row">
817                        <div class="col-12">
818                            <p class="text-center" id="timeRem">You have <span id="minsRem">05</span>:<span id="secsRem">00</span> to complete your booking</p>
819                        </div>
820                    </div>
821                    <div class="row">
822                        <div class="col-12">
823                            <strong>Activities:</strong><br>
824                            <div id="availSummaryActivities"></div>
825                        </div>
826                    </div>
827                    <div class="row mt-2">
828                        <div class="col-6">
829                            <div class="row">
830                                <div class="col-12 col-md-6 font-weight-bold">Date:</div>
831                                <div class="col-12 col-md-6 text-md-right" id="availSummaryDate"></div>
832                            </div>
833                        </div>
834                        <div class="col-6">
835                            <div class="row">
836                                <div class="col-12 col-md-6 font-weight-bold">Time:</div>
837                                <div class="col-12 col-md-6 text-md-right" id="availSummaryTime"></div>
838                            </div>
839                        </div>
840                                            </div>
841                    <hr />
842                    <div class="row justify-content-md-end mt-2">
843                        <div class="col-6">
844                            <div class="row">
845                                <div class="col-12 col-md-6 font-weight-bold">Total:</div>
846                                <div class="col-12 col-md-6 text-md-right">
847                                    <span id="availSummaryTotalPrice"></span>
848                                </div>
849                            </div>
850                        </div>
851                    </div>
852                </div>
853                <div class="modal-footer justify-content-between">
854                    <a class="btn btn-secondary text-white" data-dismiss="modal" data-bs-dismiss="modal">Change Date/Time</a>
855                    <a href="#" onclick="$('#frmModalAvailableProducts').submit(); return false;" class="btn btn-primary allow-navigation">Book now</a>
856                </div>
857            </form>
858        </div>
859    </div>
860</div>
861
862<!-- Modal -->
863<div class="modal fade" id="addtobasketmodal" tabindex="-1" role="dialog" aria-labelledby="AddToBasketModalTitle" aria-hidden="true" data-keyboard="false" data-backdrop="static">
864    <div class="modal-dialog modal-dialog-centered" role="document">
865        <div class="modal-content">
866            <div class="modal-header">
867                <h3 class="modal-title" id="AddToBasketModalTitle">Your basket has been updated.</h3>
868            </div>
869            <div class="modal-body">
870                <div class="row">
871                    <div class="col-4">
872                        <img src="" alt="" id="addToBasketImage" />
873                    </div>
874                    <div class="col-8">
875                        <span id="addToBasketName">Product</span> has been added to your basket.
876                    </div>
877                </div>
878            </div>
879            <div class="modal-footer justify-content-between">
880                <button type="button" class="btn btn-secondary" data-dismiss="modal" data-bs-dismiss="modal">Continue shopping</button>
881                <a class="btn btn-primary" href="/shop/basket">Checkout</a>
882            </div>
883        </div>
884    </div>
885</div>
886
887
888<div class="modal fade" id="buyCashGiftVoucherModal" tabindex="-1" role="dialog" aria-labelledby="buyCGVoucherModalTitle" aria-hidden="true">
889	<div class="modal-dialog modal-dialog-centered" role="document">
890		<div class="modal-content">
891			<div class="modal-header">
892				<h4 class="modal-title" id="buyCGVoucherModalTitle">Let's customise your voucher!</h4>
893				<button type="button" class="close" data-dismiss="modal" data-bs-dismiss="modal" aria-label="Close">
894					<span aria-hidden="true">&times;</span>
895				</button>
896			</div>
897			<div class="modal-body">
898				<input type="hidden" class="form-control" id="modal-voucher-product-id">
899				<div id="modalGiftVoucherToWrapper" class="form-group">
900					<label for="modal-voucher-to" class="col-form-label">To: <span class="text-danger">*</span></label>
901					<input type="text" class="form-control required" id="modal-voucher-to">
902					<small class="invalid-feedback">This field is mandatory.</small>
903				</div>
904				<div id="modalGiftVoucherFromWrapper" class="form-group">
905					<label for="modal-voucher-from" class="col-form-label">From:  <span class="text-danger">*</span></label>
906					<textarea class="form-control" id="modal-voucher-from"></textarea>
907					<small class="invalid-feedback">This field is mandatory.</small>
908				</div>
909				<div id="modalGiftVoucherMessageWrapper" class="form-group">
910					<label for="modal-voucher-message" class="col-form-label">Message:  <span class="text-danger">*</span></label>
911					<textarea class="form-control" id="modal-voucher-message"></textarea>
912				</div>
913			</div>
914			<div class="modal-footer justify-content-between">
915				<button type="button" class="btn btn-secondary" data-dismiss="modal" data-bs-dimiss="modal">Close</button>
916				<button type="button" class="btn btn-primary" onclick="buyGiftVoucher()" id="buyCashGiftVoucherButton">Buy voucher</button>
917			</div>
918		</div>
919	</div>
920</div>
921
922<div class="modal fade" id="modalEssentialCompanionTicket" tabindex="-1" role="dialog" aria-hidden="true">
923	<div class="modal-dialog modal-dialog-centered" role="document">
924		<div class="modal-content">
925			<div class="modal-header">
926				<h5 class="modal-title">Essential Companion Ticket</h5>
927			</div>
928			<div class="modal-body">
929                
930                    <p class="card-text">We're proud to join the Access Card scheme and continue our mission of creating unforgettable days out for everyone. From standing and queuing assistance to urgent toilet access, the Access Card allows us to make reasonable adjustments to meet your needs.<p>
931                    <p class="card-text">If you have any questions or would like more details about the Access Card or our free registration option, please have a look at the Accessibility page on our website.</p>
932                    <a href="/shop/essential-companion" target="_blank" class="btn btn-primary mb-3">Accessibility</a>
933                    <p class="card-text">Please enter your Access Card details below in order for us to grant you an Essential Companion ticket for Access Cards with a +1 or +2 symbol.</p>
934                
935				<form class="m-0" id="frmModalAccessCard">
936                    <input type="submit" style="display:none;" value="submit"/>
937                    <input type="hidden" id="essentialCompanionCategoryId">
938                    <div class="alert alert-danger text-center" style="display:none;" id="divModalAccessCardError" role="alert"></div>
939                    <div class="alert alert-warning text-center" style="display:none;" id="divModalAccessCardWarning" role="alert"></div>
940                    <div class="alert alert-success text-center" style="display:none;" id="divModalAccessCardSuccess" role="alert">
941                        Thank you, your Access Card has been accepted and you are entitled to an Essential Companion ticket for Access Cards with a +1 or +2 symbol.
942                    </div>
943                    <div class="form-group">
944                        <label class="mb-1" for="modalAccessCardFirstName">First Name</label>
945                        <input type="text" class="form-control" name="modalAccessCardFirstName" id="modalAccessCardFirstName" required>
946                    </div>
947                    <div class="form-group">
948                        <label class="mb-1" for="modalAccessCardLastName">Last Name</label>
949                        <input type="text" class="form-control" name="modalAccessCardLastName" id="modalAccessCardLastName" required>
950                    </div>
951                    <div class="form-group">
952                        <label class="mb-1" for="modalAccessCardID">Access Card ID</label>
953                        <input type="number" class="form-control" name="modalAccessCardID" id="modalAccessCardID" required>
954                    </div>
955                </form>
956			</div>
957			<div class="modal-footer justify-content-between">
958				<button type="button" class="btn btn-secondary" data-dismiss="modal" data-bs-dismiss="modal">Close</button>
959                <button type="button" class="btn btn-primary" id="btnCheckModalAccessCard" data-action="checkModalAccessCard">Submit</button>
960                <button type="button" class="btn btn-primary" id="btnAddAnotherAccessCard" data-action="addAccessCard" data-addinganother="true" data-categoryid="">Add Another Card</button>
961			</div>
962		</div>
963	</div>
964</div>
965
966<div class="modal fade" id="modalMembershipUpgrades" tabindex="-1" role="dialog" aria-hidden="true">
967	<div class="modal-dialog modal-lg modal-dialog-centered" role="document">
968		<div class="modal-content">
969			<div class="modal-header">
970				<h5 class="modal-title">Available Membership Upgrades</h5>
971				<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
972			</div>
973			<div class="modal-body">
974                <div class="row justify-content-start justify-content-md-center">
975                                    </div>
976			</div>
977            <div class="modal-footer">
978                <button type="button" class="btn btn-secondary" data-dismiss="modal" data-bs-dismiss="modal">Close</button>
979            </div>
980		</div>
981	</div>
982</div>
983
984<div class="modal fade" id="modalVerifyMembershipDetails" tabindex="-1" role="dialog" aria-hidden="true">
985	<div class="modal-dialog modal-dialog-centered" role="document">
986		<div class="modal-content">
987			<div class="modal-header">
988				<h5 class="modal-title">Verify Membership Details</h5>
989				<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
990			</div>
991			<div class="modal-body" id="divVerifyMembershipDetails">
992                <p class="card-text">Please verify your membership information below for membership <b></b>.</p>
993                <form class="m-0" id="frmModalVerifyMembershipDetails">
994                    <input type="submit" style="display:none;" value="submit"/>
995                    <input type="hidden" id="verifyMembershipCardNumber" value="">
996                    <div class="alert alert-danger text-center" style="display:none;" id="divModalVerifyMembershipError" role="alert"></div>
997                    <div class="form-group">
998                        <label class="mb-0" for="verifyMembershipFirstName">First Name</label>
999                        <input type="text" class="form-control" id="verifyMembershipFirstName" required>
1000                    </div>
1001                    <div class="form-group">
1002                        <label class="mb-0" for="verifyMembershipLastName">Last Name</label>
1003                        <input type="text" class="form-control" id="verifyMembershipLastName" required>
1004                    </div>
1005                    <div class="form-group">
1006                        <label class="mb-0" for="verifyMembershipEmailAddress">Email Address</label>
1007                        <input type="email" class="form-control" id="verifyMembershipEmailAddress" required>
1008                    </div>
1009                </form>
1010			</div>
1011            <div class="modal-footer justify-content-between">
1012                <button type="button" class="btn btn-secondary" data-dismiss="modal" data-bs-dismiss="modal">Close</button>
1013                <button type="button" class="btn btn-primary" id="btnVerifyMembershipDetails" onclick="verifyMembershipDetails(); return false;">Submit</button>
1014                <button type="button" class="btn btn-primary" id="btnUpdateBasketUsingMembership" onclick="updateBasketUsingMembership(); return false;">Submit</button>
1015            </div>
1016		</div>
1017	</div>
1018</div>
1019
1020<div class="modal fade" id="modalCharityDonation" tabindex="-1" role="dialog" aria-hidden="true">
1021	<div class="modal-dialog modal-dialog-centered" role="document">
1022		<div class="modal-content">
1023			<div class="modal-header">
1024				<h5 class="modal-title"><span class="sr-only">charity product</span></h5>
1025			</div>
1026			<div class="modal-body">
1027                                                                
1028                                
1029                                
1030                			</div>
1031			<div class="modal-footer justify-content-between">
1032				<button type="button" class="btn btn-secondary" data-dismiss="modal" data-bs-dismiss="modal">Close</button>
1033			</div>
1034		</div>
1035	</div>
1036</div>
1037
1038<script nonce="OeCjAV4mDlBIq5bEdm2iD5irzyBDtE/Bdtl7KNXATjA=">
1039    window.dataLayer = window.dataLayer || [];
1040</script>
1040
1041 
1042    
1042<script nonce="OeCjAV4mDlBIq5bEdm2iD5irzyBDtE/Bdtl7KNXATjA=">
1043        dataLayer.push({ ecommerce: null });  // Clear the previous ecommerce object.
1044        dataLayer.push({
1045            event: "view_item",
1046            ecommerce: {
1047                currency: "GBP",
1048                value: 0,
1049                items: [
1050                    {
1051                    item_id: "gift_voucher",
1052                    item_name: "Gift Voucher",
1053                    affiliation: "Cantref",
1054                    coupon: "",
1055                    discount: 0,
1056                    index: 1,
1057                    item_brand: "Product",
1058                    item_category: "",
1059                    item_category2: "",
1060                    item_category3: "",
1061                    item_category4: "",
1062                    item_category5: "",
1063                    item_list_id: "",
1064                    item_list_name: "Products",
1065                    item_variant: "",
1066                    item_location: "Cantref",
1067                    location_id: "",
1068                    price: 0,
1069                    quantity: 1,
1070                    },
1071                ]
1072            }
1073        });
1074    </script>
1074
1075    		
1076	<!-- Notify modal -->
1077	<div class="modal fade" id="notifyModal" tabindex="-1" aria-labelledby="notifyModalLabel" aria-hidden="true">
1078		<div class="modal-dialog modal-dialog-centered">
1079			<div class="modal-content">
1080				<div class="modal-header">
1081					<h5 class="modal-title" id="notifyModalLabel">...</h5>
1082				</div>
1083				<div class="modal-body">
1084					...
1085				</div>
1086				<div class="modal-footer d-flex justify-content-between">
1087					<button type="button" class="btn btn-secondary" data-dismiss="modal" data-bs-dismiss="modal">Continue Shopping</button>
1088					<a href="/shop/basket" class="btn btn-primary">Checkout</a>
1089				</div>
1090			</div>
1091		</div>
1092	</div>
1093            
1093<script nonce="OeCjAV4mDlBIq5bEdm2iD5irzyBDtE/Bdtl7KNXATjA=">
1094            $(document).ready(function() {
1095                $('#voucherValueSelector').on('change', function() {
1096                    console.log($(this).val());
1097
1098                    if ($(this).val() == "Custom") {
1099                        $('#voucherValueField').fadeIn();
1100                        $('#voucherValueFieldWrapper').fadeIn();
1101                        $('#voucherValueField').val("");
1102                        $('#voucherValueField').focus();
1103                    } else {
1104                        $('#voucherValueField').fadeOut();
1105                        $('#voucherValueFieldWrapper').fadeOut();
1106                        $('#voucherValueField').val($(this).val());
1107                    }
1108                });
1109            });
1110        </script>
1110
1111        
1111<script nonce="OeCjAV4mDlBIq5bEdm2iD5irzyBDtE/Bdtl7KNXATjA=">
1112    $(document).ready(function() {
1113        $('.optionsSelector').change(function() {
1114            // bea assigning the selected suboption's id to the hidden field.
1115			id = $(this).val();
1116			item 	=  $(this).find(':selected');
1117         
1118			$('#productId').val(id);
1119
1120			minQty = 1;
1121			maxQty = 10;
1122
1123			if (parseInt($(this).find(':selected').attr('data-minqty')) > 0){
1124				minQty = parseInt($(this).find(':selected').attr('data-minqty'));
1125			}
1126			if (parseInt($(this).find(':selected').attr('data-maxqty')) > 0){
1127				maxQty = parseInt($(this).find(':selected').attr('data-maxqty'));
1128			}
1129
1130			html = "";
1131			for(var i = minQty; i <= maxQty; i++){
1132				html += "<option value="+i+">"+i+"</option>";
1133			} 
1134            
1135			$("#qty_559").html(html);
1136        });
1137
1138
1139    });
1140    function addProductToBasket(productid, qty, prodname) {
1141        var subOptionProductId = $('#productId').val();
1142        if(subOptionProductId && subOptionProductId > 0) {
1143            productid = subOptionProductId
1144        }
1145        $('#submitSelection').html("Loading...");
1146        
1147        if (!qty) qty = 1;
1148        $.ajax({
1149            url: '/shop/ajax.php',
1150            type: 'POST',
1151            async: false,
1152            dataType: 'json',
1153            data: {
1154                'addProductToBasketNew': 1,
1155                'productid': productid,
1156                'qty': qty,
1157                'ajax': 1
1158            },
1159            complete: function(data) {},
1160            success: function(newBasket, status) {
1161                if (status == 'success') {
1162                    $('#headerBasketCount').html(newBasket.count);
1163                    $('#submitSelection').html('Add to basket');
1164                    let confirmHTML = '<div class="row">';
1165                    confirmHTML += '<div class="col">';
1166                    confirmHTML += qty + 'x ' + prodname + ' have been added to your basket</div>';
1167                    confirmHTML += '</div>';
1168                    confirmHTML += '</div>';
1169
1170                    $('#notifyModal .modal-title').html('Success!');
1171                    $('#notifyModal .modal-body').html(confirmHTML);
1172                    $('#notifyModal').modal('show');
1173                } else {
1174                    $('#submitSelection').html('Add to basket');
1175                    $('#notifyModal .modal-title').html('Error!');
1176                    $('#notifyModal .modal-body').html('Error adding product to the basket.');
1177                    $('#notifyModal').modal('show');
1178                }
1179            },
1180            error: function(jqXHR, textStatus, errorThrown) {
1181                $('#submitSelection').html('Add to basket');
1182                $('#notifyModal .modal-title').html('Error!');
1183                $('#notifyModal .modal-body').html('Error adding product to the basket.');
1184                $('#notifyModal').modal('show');
1185            },
1186        });
1187    }
1188    function updateLocation(productId) {
1189        locationId = $("#location_" + productId + " :selected").val();
1190        locationName = $("#location_" + productId + " :selected").text();
1191        minQty = $("#location_" + productId + " :selected").data("minqty");
1192        maxQty = $("#location_" + productId + " :selected").data("maxqty");
1193        minPrice = $("#location_" + productId + " :selected").data("minprice");
1194        maxPrice = $("#location_" + productId + " :selected").data("maxprice");
1195
1196        $("#productData_" + productId).attr("data-locationid", locationId).attr("data-locationname", locationName).attr("data-minqty", minQty).attr("data-maxqty", maxQty).attr("data-minprice", minPrice).attr(
1197            "data-maxprice", maxPrice);
1198
1199        $(".locationId_" + productId).text(locationId);
1200        $(".locationName_" + productId).text(locationName);
1201        $(".minQty_" + productId).text(minQty);
1202        $(".maxQty_" + productId).text(maxQty);
1203        $(".minPrice_" + productId).html(showprice(minPrice));
1204        $(".maxPrice_" + productId).html(showprice(maxPrice));
1205        $(".price_" + productId).html(showprice(minPrice));
1206
1207        recalcPrice(productId);
1208    }
1209
1210    function recalcPrice(productId) {
1211        qty = $("#qty_" + productId + " :selected").val();
1212
1213        price = parseFloat('');
1214        totalPrice = qty * price;
1215
1216        //$(".qty_" + productId).text(qty);
1217        $("#totalPrice_" + productId).html(showprice(totalPrice));
1218
1219		
1220        $("#productTotal").html(showprice(totalPrice));
1221    }	
1222
1223    function buyCashGiftVoucher () {
1224        const productid = $("#modal-voucher-product-id").val();
1225        const to = $("#modal-voucher-to").val();
1226        const from  = $("#modal-voucher-from").val();
1227        $('#buyCashGiftVoucherModal .modal-body .form-control.required').each(function() {
1228            if ($(this).val() == "") {
1229                $(this).addClass("is-invalid");
1230            } else {
1231                $(this).removeClass("is-invalid");
1232            }
1233        });
1234        const toFieldEmpty = to == "";
1235        const fromFieldEmpty = from == "";
1236        if (toFieldEmpty) {
1237            return false;
1238        }
1239        const message = $("#modal-voucher-message").val();
1240        console.log(productid)
1241        $("#voucherTo_"+productid).val(to);
1242        $("#voucherFrom_"+productid).val(from);
1243        $("#voucherMessage_"+productid).val(message);
1244        $("#form_"+productid).submit();
1245    }
1246    //Update modal form and button id once modal is opened
1247    $('#buyCashGiftVoucherModal').on('show.bs.modal', function (event) {
1248        const button = $(event.relatedTarget)
1249        $("#modal-voucher-product-id").val(button.data('productid'));
1250    })
1251    </script>
1251
1252</body>
1253</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.