PageSourceSearch

https://eder.info/need-help

html eder.info collected 2026-09-24 13:50:48 UTC 383,679 bytes, 3,998 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3
4<head>
5<!-- ============================================================
6     COPYWRITER BY SEO FEBRYPARKER
7============================================================ -->
8	<title>Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor</title>
9	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
10	<meta http-equiv="X-UA-Compatible" content="IE=edge">
11	<meta charset="utf-8">
12	<meta name="viewport" content="width=device-width, initial-scale=1">
13	<meta name="description" content="Rill HONDATOTO menjadi simpul global permainan digital dengan khazanah ratusan slot lintas provider, antarmuka adaptif, serta pilihan hiburan bandar toto yang terus diperbarui.">
14	<meta name="robots" content="index, follow, nosnippet">
15	<meta property="og:url" content="https://www.eder.info/">
16	<meta property="og:title" content="Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor">
17	<meta property="og:description" content="Rill HONDATOTO menjadi simpul global permainan digital dengan khazanah ratusan slot lintas provider, antarmuka adaptif, serta pilihan hiburan bandar toto yang terus diperbarui.">
18	<meta property="og:site_name" content="HONDATOTO">
19	<meta property="og:image" content="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125">
20	<link rel="shortcut icon" type="image/x-icon" media="all" href="https://veldrive.com/dPH2zzXU/FAVICON%209999/hondatoto-favicon.avif?updatedAt=1777017834099" />
21	<link rel="canonical" href="https://www.eder.info/" />
22	<link rel="amphtml" href="https://ronaakar.hondapamixe.surf" />
23	<link rel="alternate" media="only screen and (max-width: 640px)" href="https://www.eder.info/" />
24    <link rel="alternate" href="https://ronaakar.hondapamixe.surf">
25    <link rel="alternate" href="https://ronaakar.hondapamixe.surf" hreflang="id">
26    <link rel="alternate" href="https://ronaakar.hondapamixe.surf" hreflang="en">
27    <link rel="alternate" href="https://ronaakar.hondapamixe.surf" hreflang="en">
28    <link rel="alternate" href="https://ronaakar.hondapamixe.surf" hreflang="x-default">
29    <link rel="alternate" hreflang="id-ID" href="https://ronaakar.hondapamixe.surf" />
30    <link rel="alternate" hreflang="en-US" href="https://ronaakar.hondapamixe.surf" />
31    <link rel="alternate" hreflang="en-SG" href="https://ronaakar.hondapamixe.surf" />
32	<!-- GOOGLE CODE VERIFICATION-->
33	
34	
34<script type="application/ld+json">
35			{
36  "@context" : "http://schema.org",
37  "@type" : "Product",
38  "brand" : "HONDATOTO",
39  "description" : "Rill HONDATOTO menjadi simpul global permainan digital dengan khazanah ratusan slot lintas provider, antarmuka adaptif, serta pilihan hiburan bandar toto yang terus diperbarui.",
40  "image" : "https://veldrive.com/dPH2zzXU/FAVICON%209999/hondatoto-favicon.avif?updatedAt=1777017834099",
41  "name" : "Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor",
42  "category" : "/doors-joinery/windows/upvc-windows",
43  "offers" : {
44    "@type" : "Offer",
45    "availability" : "https://schema.org/InStock",
46    "price" : "419.92",
47    "priceCurrency" : "GBP",
48    "url" : "https://www.eder.info/"
49  },
50  "sku" : "HONDATOTO-slot-online",
51  "gtin13" : "situs slot online"
52}
53</script>
53
54	
54<script type="application/ld+json">
55			{
56  "@context" : "http://schema.org",
57  "@type" : "Organization",
58  "address" : "STARK Building Materials UK Limited Trading as Jewson </br>Merchant House, Binley Business Park, Harry Weston Road, Coventry, CV3 2TT",
59  "url" : "https://www.eder.info/",
60  "name" : "HONDATOTO",
61  "telephone" : "02476 608235",
62  "logo" : "https://veldrive.com/dPH2zzXU/LOGO%209999/HONDATOTO%20LOGO.png?updatedAt=1777110527387",
63  "email" : "[email protected]"
64}
65</script>
65
66	
66<script type="application/ld+json">
67{
68  "@context": "https://schema.org",
69  "@type": "BreadcrumbList",
70  "itemListElement": [
71    {
72      "@type": "ListItem",
73      "position": 1,
74      "name": "HONDATOTO",
75      "item": "https://tecnologicaccs.com/"
76    },
77    {
78      "@type": "ListItem",
79      "position": 2,
80      "name": "Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor",
81      "item": "https://www.eder.info/"
82    }
83  ]
84}
85</script>
85
86	<!-- ============================================================
87     SCHEMA TESTIMONI: 4 REVIEW
88============================================================ -->
89<script type="application/ld+json">
90{
91  "@context": "https://schema.org",
92  "@type": "Product",
93  "name": "Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor",
94  "description": "Rill HONDATOTO menjadi simpul global permainan digital dengan khazanah ratusan slot lintas provider, antarmuka adaptif, serta pilihan hiburan bandar toto yang terus diperbarui.",
95  "brand": {
96    "@type": "Brand",
97    "name": "HONDATOTO"
98  },
99  "aggregateRating": {
100    "@type": "AggregateRating",
101    "ratingValue": "4.9",
102    "reviewCount": "4",
103    "bestRating": "5",
104    "worstRating": "1"
105  },
106  "review": [
107    {
108      "@type": "Review",
109      "author": {
110        "@type": "Person",
111        "name": "Damar Wiratama"
112      },
113      "reviewRating": {
114        "@type": "Rating",
115        "ratingValue": "5",
116        "bestRating": "5"
117      },
118      "reviewBody": "Rill HONDATOTO terasa seperti katalog global yang benar-benar luas. Saya bisa melihat TOTO SLOT dari banyak provider dalam satu alur, dan susunannya tidak membuat saya tersesat. Pembagian kategori sangat membantu ketika ingin membandingkan permainan lama dan rilisan baru."
119    },
120    {
121      "@type": "Review",
122      "author": {
123        "@type": "Person",
124        "name": "Citra Lestari"
125      },
126      "reviewRating": {
127        "@type": "Rating",
128        "ratingValue": "5",
129        "bestRating": "5"
130      },
131      "reviewBody": "Saya menikmati cara HONDATOTO menggabungkan permainan dari berbagai gaya tanpa membuat halaman terasa campur aduk. Pilihan TOTO SLOT cukup beragam, tetapi tetap ada struktur yang membuat proses pencarian terasa cepat dan masuk akal."
132    },
133    {
134      "@type": "Review",
135      "author": {
136        "@type": "Person",
137        "name": "Aditya Baskara"
138      },
139      "reviewRating": {
140        "@type": "Rating",
141        "ratingValue": "4.8",
142        "bestRating": "5"
143      },
144      "reviewBody": "Buat saya, kekuatan HONDATOTO ada pada konsistensi antarmukanya. Meski TOTO SLOT datang dari provider berbeda, cara menemukan informasi tetap sama. Itu membuat katalog besar terasa jauh lebih ringan untuk dijelajahi."
145    },
146    {
147      "@type": "Review",
148      "author": {
149        "@type": "Person",
150        "name": "Laras Ayuningtyas"
151      },
152      "reviewRating": {
153        "@type": "Rating",
154        "ratingValue": "4.9",
155        "bestRating": "5"
156      },
157      "reviewBody": "Saya suka halaman Rill HONDATOTO karena tidak hanya mengejar permainan baru. TOTO SLOT dengan format yang lebih klasik tetap punya tempat, berdampingan dengan mekanika modern. Hasilnya katalog terasa lengkap dan tidak cepat membosankan."
158    }
159  ]
160}
161</script>
161
162	
162<script type="application/ld+json">
163{
164  "@context": "https://schema.org",
165  "@type": "FAQPage",
166  "mainEntity": [
167    {
168      "@type": "Question",
169      "name": "Apa yang dimaksud pusat globalisasi permainan pada Rill HONDATOTO?",
170      "acceptedAnswer": {
171        "@type": "Answer",
172        "text": "Pusat globalisasi pada Rill HONDATOTO merujuk pada penggabungan banyak gaya permainan dan provider dalam satu ekosistem katalog. TOTO SLOT dari beragam pendekatan desain ditempatkan berdampingan sehingga pengguna dapat melihat perkembangan format permainan secara lebih luas. HONDATOTO berperan sebagai simpul yang menyatukan variasi tersebut dalam navigasi yang tetap konsisten."
173      }
174    },
175    {
176      "@type": "Question",
177      "name": "Bagaimana HONDATOTO mengelola ratusan permainan agar tetap mudah dicari?",
178      "acceptedAnswer": {
179        "@type": "Answer",
180        "text": "HONDATOTO memakai pengelompokan berdasarkan provider, karakter fitur, dan corak permainan supaya ratusan TOTO SLOT tidak tersaji sebagai daftar panjang tanpa arah. Struktur ini memudahkan pengguna menyaring pilihan dari kategori luas menuju permainan yang lebih spesifik. HONDATOTO menjaga pola navigasi tetap seragam agar pengguna tidak perlu mempelajari ulang cara memakai setiap bagian."
181      }
182    },
183    {
184      "@type": "Question",
185      "name": "Apakah katalog global HONDATOTO hanya berisi permainan terbaru?",
186      "acceptedAnswer": {
187        "@type": "Answer",
188        "text": "Tidak. HONDATOTO dapat memadukan TOTO SLOT yang sudah dikenal dengan rilisan yang lebih baru selama masih relevan dalam katalog. Kombinasi tersebut memberi ruang bagi pengguna yang menyukai format klasik maupun mekanika modern. HONDATOTO menempatkan pembaruan sebagai pelengkap keluasan katalog, bukan alasan untuk menghapus seluruh pilihan lama secara serampangan."
189      }
190    },
191    {
192      "@type": "Question",
193      "name": "Mengapa antarmuka adaptif penting untuk Rill HONDATOTO?",
194      "acceptedAnswer": {
195        "@type": "Answer",
196        "text": "Antarmuka adaptif membantu katalog HONDATOTO tetap terbaca pada berbagai ukuran layar, terutama ketika jumlah TOTO SLOT sangat banyak. Pengguna membutuhkan struktur yang cepat dikenali tanpa terlalu banyak perpindahan elemen. Dengan tampilan yang responsif, HONDATOTO mempertahankan ritme penelusuran dan membuat perpindahan antarprovider terasa lebih mulus."
197      }
198    },
199    {
200      "@type": "Question",
201      "name": "Bagaimana identitas HONDATOTO dipertahankan di tengah banyak provider?",
202      "acceptedAnswer": {
203        "@type": "Answer",
204        "text": "HONDATOTO menjaga identitas melalui tata navigasi, gaya penyajian, dan pola informasi yang konsisten meskipun TOTO SLOT berasal dari provider berbeda. Pengguna tetap berada dalam kerangka HONDATOTO saat menelusuri katalog. Konsistensi ini membuat halaman global tidak terasa tercerai-berai dan membantu brand tetap mudah dikenali di setiap tahap eksplorasi."
205      }
206    }
207  ]
208}
209</script>
209
210	<link rel="preconnect" href="https://use.typekit.net" crossorigin />
211	<link rel="preload" as="style" href="https://luncurlocal.balcony.care/kpkgacor.css" />
212	<link rel="stylesheet" href="https://luncurlocal.balcony.care/kpkgacor.css" media="print" onload="this.media='all'" />
213	<noscript> <link rel="stylesheet" href="https://luncurlocal.balcony.care/kpkgacor.css" /> </noscript>
214	<link rel="stylesheet" type="text/css" media="all" href="https://myteam.would-choose.quest/core.css" />
215	<link rel="preload" type="text/css" media="all" href="https://myteam.would-choose.quest/site.css" as="style" onload="this.onload=null;this.rel='stylesheet'" /> <noscript>
216    <link rel="stylesheet" type="text/css" media="all" href="https://myteam.would-choose.quest/site.css" /> </noscript>
217	<link rel="stylesheet" type="text/css" media="print" href="https://myteam.would-choose.quest/print.css" />
218	
218<script>
219		// Picture element HTML5 shiv
220		document.createElement("picture");
221	</script>
221
222	<meta name="viewport" content="width=device-width, initial-scale=1">
223	<style>
224		.header-alt__middle {
225			background: #640000;
226		}
227
228		.header-alt__quick-bar-link {
229			display: -webkit-flex;
230			display: flex;
231			-webkit-align-items: center;
232			align-items: center;
233			color: #ffffff;
234			font-size: .875rem;
235			font-weight: 700;
236			line-height: 1em;
237			text-decoration: none;
238		}
239
240		@media (min-width: 992px) {
241			.header-alt__top-bar {
242				display: block;
243				background: #640000;
244				color: #fff;
245				padding: 5px 0;
246				border: 0;
247				box-shadow: none;
248				transition: none;
249			}
250		}
251
252		.footer__inner {
253			background: #640000;
254			padding: 50px 0 72px;
255		}
256
257		.n-columns-2 {
258			width: 100vw;
259			display: grid;
260			grid-template-columns: repeat(2, 1fr);
261			font-weight: 700;
262			font-family: 'Poppins', sans-serif;
263		}
264
265		.n-columns-2 a {
266			text-align: center;
267			text-transform: uppercase;
268			letter-spacing: 1px;
269			transition: all 0.3s ease;
270			border-radius: 10px;
271			padding: 10px 10px;
272			margin: 5px;
273			box-shadow: 0 4px 12px rgba(0, 0, 0, 0.35);
274			text-decoration: none;
275		}
276
277		/* ===== LOGIN – BIRU NEON ===== */
278		.login {
279			color: #e9faff !important;
280			background: linear-gradient(135deg,
281					#330000 0%,
282					#ff0000 50%,
283					#210000 100%);
284			border: 2px solid #ff0000;
285			box-shadow:
286				0 0 10px rgba(255, 0, 0, 0.8),
287				inset 0 0 8px rgba(255, 0, 0, 0.5);
288		}
289
290		.login:hover {
291			transform: scale(1.06);
292			background: linear-gradient(135deg,
293					#cc0000 0%,
294					#ff3737 50%,
295					#9e0000 100%);
296			box-shadow:
297				0 0 22px rgb(255, 0, 0),
298				0 0 40px rgba(255, 81, 0, 0.9);
299		}
300
301		/* ===== DAFTAR – BIRU NEON ===== */
302		.register {
303			color: #e9faff !important;
304			background: linear-gradient(135deg,
305					#043300 0%,
306					#0eaa00 50%,
307					#012100 100%);
308			border: 2px solid #2bff00;
309			box-shadow:
310				0 0 10px rgba(21, 255, 0, 0.85),
311				inset 0 0 8px rgba(0, 255, 13, 0.55);
312		}
313
314		.register:hover {
315			transform: scale(1.06);
316			background: linear-gradient(135deg,
317					#33ff00 0%,
318					#00ca0a 50%,
319					#00920f 100%);
320			box-shadow:
321				0 0 10px rgba(21, 255, 0, 0.85),
322				inset 0 0 8px rgba(0, 255, 13, 0.55);
323		}
324	</style>
325
326	<style id="slot777-generator-style">
327		.slot777-wrapper{display:flex;justify-content:center;align-items:center;margin:20px 0 10px;width:100%}
328		.slot777-machine{position:relative;width:100%;max-width:430px;padding:22px 18px 20px;border-radius:24px;overflow:hidden;background:radial-gradient(circle at 50% 0,rgba(255,95,95,.32),transparent 32%),linear-gradient(145deg,#210000,#730000 48%,#250000);border:2px solid #ff4a4a;box-shadow:0 0 18px rgba(255,0,0,.7),0 0 45px rgba(255,30,30,.45),inset 0 0 28px rgba(255,255,255,.08);font-family:Arial,sans-serif;text-align:center}
329		.slot777-machine:before{content:"";position:absolute;top:-140%;left:-40%;width:55%;height:360%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transform:rotate(24deg);animation:slot777Shine 3.4s linear infinite;pointer-events:none}
330		.slot777-machine.is-spinning{animation:slot777Shake .12s linear infinite}
331		.slot777-machine.is-win{animation:slot777Win .55s ease-in-out 3}
332		.slot777-badge{position:absolute;z-index:3;top:11px;right:12px;padding:6px 10px;border-radius:999px;background:linear-gradient(#e0aaff,#3c096c);color:#10002b;font-size:11px;font-weight:900;letter-spacing:1px;box-shadow:0 0 14px #9d4edd}
333		.slot777-title{position:relative;z-index:2;margin:4px 38px 6px;color:#fff;font-size:27px;line-height:1.1;font-weight:1000;letter-spacing:1.2px;text-shadow:0 0 6px #fff,0 0 14px #ff4343,0 0 25px #f00}
334		.slot777-subtitle{position:relative;z-index:2;margin-bottom:14px;color:#ffd7d7;font-size:12px;font-weight:800;letter-spacing:.7px}
335		.slot777-reels{position:relative;z-index:2;display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:13px;margin:0 auto 13px;border-radius:18px;background:linear-gradient(#170000,#480000);border:2px solid #ff6565;box-shadow:inset 0 0 22px #000,0 0 18px rgba(255,0,0,.45)}
336		.slot777-reel{height:92px;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:13px;background:linear-gradient(180deg,#f3e8ff,#fff,#cdb4ff);border:3px solid #7b2cbf;box-shadow:inset 0 0 16px rgba(93,0,0,.35),0 0 10px rgba(157, 78, 221, .55);font-size:49px;font-weight:1000;color:#d50000;text-shadow:0 2px 0 #fff,0 0 8px #5a189a;user-select:none}
337		.slot777-reel.spinning .slot777-symbol{animation:slot777Reel .13s linear infinite}
338		.slot777-symbol{display:block;line-height:1}
339		.slot777-status{position:relative;z-index:2;min-height:48px;display:flex;align-items:center;justify-content:center;gap:7px;flex-wrap:wrap;margin-bottom:13px;padding:10px 12px;border-radius:13px;background:rgba(30,0,0,.66);
339border:1px solid rgba(255,110,110,.55);color:#fff;font-size:12px;font-weight:800}
340		.slot777-status strong{color:#c77dff;text-shadow:0 0 8px #7b2cbf}.slot777-dot{width:10px;height:10px;border-radius:50%;background:#50ff72;box-shadow:0 0 10px #50ff72;animation:slot777Blink 1s infinite}
341		.slot777-spin{position:relative;z-index:2;width:100%;border:0;border-radius:15px;padding:15px 13px;cursor:pointer;background:linear-gradient(180deg,#ff4b43,#c00000);color:#fff;font-size:17px;font-weight:1000;letter-spacing:.8px;text-transform:uppercase;box-shadow:0 0 18px rgba(255,0,0,.8),inset 0 0 10px rgba(255,255,255,.22);transition:transform .15s,filter .15s}
342		.slot777-spin:hover{transform:translateY(-2px);filter:brightness(1.15)}.slot777-spin:active{transform:scale(.97)}.slot777-spin:disabled{cursor:not-allowed;filter:grayscale(.35);opacity:.75}
343		.slot777-provider-list{position:relative;z-index:2;display:flex;flex-wrap:wrap;justify-content:center;gap:6px;margin-top:12px}.slot777-provider-list span{padding:6px 9px;border-radius:999px;border:1px solid #ff5a52;background:#5c0000;color:#fff;font-size:10px;font-weight:800}
344		.slot777-flash{position:absolute;z-index:4;inset:0;pointer-events:none;opacity:0;background:rgba(255,255,255,.88)}.slot777-machine.flash .slot777-flash{animation:slot777Flash .25s ease-out}
345		.lightning{position:absolute;z-index:3;font-size:27px;color:#e0aaff;text-shadow:0 0 8px #fff,0 0 18px #9d4edd,0 0 30px #ff2b2b;animation:slot777Lightning .75s infinite alternate}.l1{top:18px;left:14px}.l2{top:48%;right:10px}.l3{bottom:18px;left:12px}
346		@keyframes slot777Reel{0%{transform:translateY(-42px);filter:blur(2px)}100%{transform:translateY(42px);filter:blur(2px)}}
347		@keyframes slot777Shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-2px)}75%{transform:translateX(2px)}}
348		@keyframes slot777Win{0%,100%{box-shadow:0 0 18px #f00,0 0 45px rgba(255,0,0,.45)}50%{box-shadow:0 0 25px #fff,0 0 70px #7b2cbf}}
349		@keyframes slot777Flash{0%{opacity:.9}100%{opacity:0}}@keyframes slot777Blink{50%{opacity:.35}}@keyframes slot777Shine{0%{left:-45%}100%{left:135%}}@keyframes slot777Lightning{0%{opacity:.25;filter:brightness(.8)}100%{opacity:1;filter:brightness(2)}}
350		@media(max-width:576px){.slot777-machine{padding:20px 12px}.slot777-title{font-size:22px}.slot777-reel{height:78px;font-size:41px}.slot777-spin{font-size:14px}.slot777-provider-list span{font-size:9px}}
351
352		/* ===== EFEK KEJUTAN KETIKA HASIL KEMBAR ===== */
353		.slot777-shock{position:absolute;z-index:20;inset:0;display:flex;align-items:center;justify-content:center;padding:18px;background:radial-gradient(circle at 50% 44%,rgba(255,255,255,.98) 0 2%,rgba(123, 44, 191, .95) 3% 7%,rgba(255,0,0,.92) 18%,rgba(25,0,0,.98) 68%);opacity:0;visibility:hidden;pointer-events:none;transform:scale(.15) rotate(-10deg);filter:brightness(2);transition:opacity .08s linear;overflow:hidden}
354		.slot777-shock.show{visibility:visible;opacity:1;pointer-events:auto;animation:slot777ShockBurst 2.65s cubic-bezier(.17,.89,.32,1.25) forwards}
355		.slot777-shock:before,.slot777-shock:after{content:"";position:absolute;inset:-35%;background:repeating-conic-gradient(from 0deg,transparent 0 8deg,rgba(224, 170, 255, .95) 9deg 11deg,transparent 12deg 20deg);animation:slot777ShockRotate .24s linear infinite;mix-blend-mode:screen}
356		.slot777-shock:after{animation-direction:reverse;animation-duration:.16s;transform:scale(.75)}
357		.slot777-shock-face{position:absolute;top:16%;left:50%;width:150px;height:115px;transform:translateX(-50%);border-radius:48% 48% 42% 42%;background:radial-gradient(ellipse at 32% 42%,#fff 0 5%,#9d4edd 6% 12%,#230000 13% 18%,transparent 19%),radial-gradient(ellipse at 68% 42%,#fff 0 5%,#9d4edd 6% 12%,#230000 13% 18%,transparent 19%),radial-gradient(ellipse at 50% 72%,#050000 0 15%,#ff0000 16% 22%,transparent 23%),linear-gradient(#3a0000,#090000);border:3px solid #7b2cbf;box-shadow:0 0 18px #fff,0 0 42px #7b2cbf,0 0 70px #f00;animation:slot777FaceJolt .09s linear infinite}
358		.slot777-shock-content{position:relative;z-index:2;margin-top:118px;padding:14px 12px;border-radius:14px;background:rgba(20,0,0,.83);border:2px solid #e0aaff;
358box-shadow:0 0 15px #fff,0 0 35px #9d4edd,0 0 65px #f00;color:#fff;font-size:19px;font-weight:1000;line-height:1.28;letter-spacing:.45px;text-align:center;text-transform:uppercase;text-shadow:0 0 5px #fff,0 0 12px #7b2cbf,2px 2px 0 #8d0000;animation:slot777TextPunch .18s steps(2,end) infinite}
359		.slot777-shock-small{display:block;margin-top:7px;color:#e0aaff;font-size:10px;letter-spacing:1.3px}
360		.slot777-machine.shock-active{animation:slot777MachinePanic .075s linear infinite!important;overflow:visible}
361		.slot777-machine.shock-active .lightning{font-size:42px;animation:slot777LightningPanic .09s linear infinite}
362		@keyframes slot777ShockBurst{0%{transform:scale(.08) rotate(-14deg);filter:brightness(4)}8%{transform:scale(1.24) rotate(5deg);filter:brightness(2.6)}15%{transform:scale(.94) rotate(-3deg);filter:brightness(1.25)}22%,82%{transform:scale(1) rotate(0);filter:brightness(1)}92%{opacity:1;transform:scale(1.08)}100%{opacity:0;visibility:hidden;transform:scale(1.5);filter:brightness(3)}}
363		@keyframes slot777ShockRotate{to{transform:rotate(360deg)}}
364		@keyframes slot777FaceJolt{0%,100%{transform:translateX(-50%) translate(0,0) rotate(-1deg)}25%{transform:translateX(-50%) translate(-4px,2px) rotate(2deg)}50%{transform:translateX(-50%) translate(4px,-2px) rotate(-2deg)}75%{transform:translateX(-50%) translate(-2px,-3px) rotate(1deg)}}
365		@keyframes slot777TextPunch{0%{transform:scale(1) rotate(-.6deg)}100%{transform:scale(1.035) rotate(.6deg)}}
366		@keyframes slot777MachinePanic{0%,100%{transform:translate(0,0) rotate(0)}25%{transform:translate(-5px,2px) rotate(-1deg)}50%{transform:translate(4px,-3px) rotate(1deg)}75%{transform:translate(-2px,-4px) rotate(0)}}
367		@keyframes slot777LightningPanic{0%{opacity:.15;filter:brightness(.5);transform:scale(.8) rotate(-8deg)}100%{opacity:1;filter:brightness(3);transform:scale(1.35) rotate(8deg)}}
368		@media(max-width:576px){.slot777-shock-face{width:125px;height:98px}.slot777-shock-content{margin-top:100px;font-size:15px;padding:12px 9px}}
369	</style>
370
371</head>
372
373<!-- ============================================================
374     BAGIAN BODY: KONTEN UTAMA HALAMAN
375============================================================ -->
376<body
377	class="page-productDetails pageType-ProductPage template-pages-product-productLayout2Page  smartedit-page-uid-productDetails smartedit-page-uuid-eyJpdGVtSWQiOiJwcm9kdWN0RGV0YWlscyIsImNhdGFsb2dJZCI6Impld3NvbkNvbnRlbnRDYXRhbG9nIiwiY2F0YWxvZ1ZlcnNpb24iOiJPbmxpbmUifQ== smartedit-catalog-version-uuid-jewsonContentCatalog/Online  language-en">
378	<!-- ============================================================
379     HEADER DAN NAVIGASI
380============================================================ -->
381<header class="header-alt js-header header-alt--sticky js-sticky-header" data-tracking-block="header">
382		<section class="header-alt__top-bar d-none d-lg-block">
383			<div class="container">
384				<div class="row">
385					<div class="col-12">
386						<div class="d-lg-flex justify-content-center">
387							<div class="yCmsComponent header-alt__top-bar-link ">
388								<a href="https://www.eder.info/" title="Our services"><span
389										class="header-alt__top-bar-link-icon glyph glyph--build-filled glyph--light"></span><span
390										class="header-alt__top-bar-link-text">Our services</span></a>
391							</div>
392							<div class="yCmsComponent header-alt__top-bar-link ">
393								<a href="https://www.eder.info/" title="Project Estimator"><span
394										class="header-alt__top-bar-link-icon glyph glyph--calculator glyph--light"></span><span
395										class="header-alt__top-bar-link-text">Project Estimator</span></a>
396							</div>
397							<div class="yCmsComponent header-alt__top-bar-link ">
398								<a href="https://www.eder.info/" title="Need help?"><span
399										class="header-alt__top-bar-link-icon glyph glyph--headset glyph--light"></span><span
400										class="header-alt__top-bar-link-text">Need help?</span></a>
401							</div>
402						</div>
403						<div class="toggle-alt">
404							<form id="command" action="/_s/vat" method="post"><label for="toggle-alt_vat"
405									class="toggle-alt__label" tabindex="0">
406									<input type="checkbox" class="toggle-alt__input js-submit-on-toggle"
407										id="toggle-alt_vat" name="showVatPrices" value="false" checked>
408									<div class="toggle-alt__ui">
409										<span class="toggle-alt__vat">
409VAT</span>
410										<span class="toggle-alt__ex">EX</span>
411										<div class="toggle-alt__track">
412											<span class="toggle-alt__handler"></span>
413										</div>
414										<span class="toggle-alt__inc">INC</span>
415									</div>
416								</label>
417								<div class="form-group form-group--cta hide">
418									<button type="submit" class="btn btn-primary">Toggle</button>
419								</div>
420								<div>
421									<input type="hidden" name="CSRFToken"
422										value="5ec27316-420b-4a0e-9757-26a66a9a1e6f" />
423								</div>
424							</form>
425						</div>
426					</div>
427				</div>
428			</div>
429		</section>
430		<section class="header-alt__middle">
431			<div class="container">
432				<div class="row">
433					<div class="col-12">
434
435						<div class="header-alt__components">
436							<div class="d-flex justify-content-between align-items-center">
437
438								<div class="header-alt__logo order-1" data-tracking-position="logo">
439									<a href="https://www.eder.info/" class="d-block mr-lg-1">
440										<img class="header-alt__logo-img"
441											src="https://veldrive.com/dPH2zzXU/LOGO%209999/HONDATOTO%20LOGO.png?updatedAt=1777110527387"
442											alt="HONDATOTO" title="Slot Online" />
443									</a>
444								</div>
445
446								<div class="header-alt__search order-2" data-tracking-position="search">
447									<div class="search">
448										<div class="form-group form-group--search m-0">
449											<div class="sr-only">
450												<label for="siteSearchMirror" class="sr-only">Search</label>
451											</div>
452											<div class="form-group__element">
453												<input type="text" role="search" class="form-control js-trigger-search"
454													id="siteSearchMirror" name="text" value="">
455											</div>
456											<div class="search__form-cta form-group form-group--cta">
457												<button type="submit"
458													class="btn btn-search glyph glyph--search">Search</button>
459											</div>
460										</div>
461									</div>
462								</div>
463								<div class="header-alt__widgets order-3 d-lg-flex">
464									<div class="header-alt__quick-bar d-flex order-lg-4">
465										<div class="header-alt__quick-bar-icon d-none d-lg-block">
466											<a href="https://www.eder.info/"
467												class="header-alt__quick-bar-link js-toggle-panel"
468												data-panel-id="location-picker-location"
469												data-modal-selection="Enter your postcode">
470												<span
471													class="header-alt__quick-bar-link-icon glyph glyph--location-marker"></span>
472												<span class="d-none d-lg-block header-alt__quick-bar-location-name">
473													My location</span>
474											</a>
475										</div>
476
477										<div class="header-alt__quick-bar-icon d-none d-lg-block">
478											<a href="https://www.eder.info/"
479												class="header-alt__quick-bar-link js-toggle-panel"
480												data-panel-id="location-picker-branch"
481												data-modal-selection="Enter your postcode">
482												<span class="header-alt__quick-bar-link-icon glyph glyph--store"></span>
483												<span class="d-none d-lg-block header-alt__quick-bar-location-name">
484													Find a branch</span>
485											</a>
486										</div>
487
488										<div inert class="offsite-panel offsite-panel--full js-ld-wrapper"
489											data-panel-id="location-picker-location"
490											data-panel-name="location picker location" data-drawer-type="location">
491											<div class="offsite-panel__content">
492												<div class="offsite-panel__toolbar">
493													<div class="offsite-panel__close js-toggle-panel">
494														<button
495															class="offsite-panel__close-icon glyph glyph--cross glyph--light glyph--small"></button>
496														<span>Close</span>
497													</div>
498												</div>
499
500												<div class="offsite-panel__body">
501													<div class="js-branch-form ">
502														<h2>Set your location</h2>
503														<p>Get local prices and products that are more readily available
504															in your area.</p>
505
506														<form id="modal-location-form" name="sessionLocationForm"
507															novalidate="true" data-form-id="sessionLocationForm"
508															class="js-form-validate" action="/_s/location"
509															method="post">
510															<div
511																class="form-group form-group--search-group form-group__postcode">
512																<div class="form-group__label" class="sr-only">
513																	<label for="locationQuery-location">
514																	</label>
515																</div>
516																<div class="d-flex">
517																	<div class="form-group__validation mr-0">
518																		<div class="form-group__element">
519																			<input id="locationQuery-location"
520																				name="postcode" required="true"
521																				class="form-control" type="text"
522																				placeholder="Postcode"
523																				data-validation-for="postcode" />
524																		</div>
525																	</div>
526																	<input type="hidden" name="geolocationPostcode"
527																		value="false" />
528																	<button type="button"
529																		class="btn btn-tertiary btn--branch-search-location w-auto m-0 ml-2 glyph glyph--current-location js-geolocate"
530																		data-interaction="Use my location">
531																		<span class="sr-only">
532																			Use my location</span>
533																	</button>
534																</div>
535															</div>
536
537															<div class="form-group form-group__fulfilment">
538																<fieldset>
539																	<legend class="form-group__fulfilment-legend">
540																		I want: (optional)</legend>
541																	<div class="d-flex flex-wrap">
542																		<div class="radio mr-2">
543																			<input type="radio"
544																				class="radio__input sr-only"
545																				id="drawer-location-delivery"
546																				name="delivery" value="true" checked
547																				data-validation-for="radioGroup"
548																				required>
549																			<label class="radio__label"
550																				for="drawer-location-delivery">
551																				Delivery</label>
552																		</div>
553																		<div class="radio">
554																			<input type="radio"
555																				class="radio__input sr-only"
556																				id="drawer-location-collection"
557																				name="delivery" value="false"
558																				data-validation-for="radioGroup"
559																				required>
560																			<label class="radio__label"
561																				for="drawer-location-collection">
562																				Click & Collect</label>
563																		</div>
564																	</div>
565																</fieldset>
566															</div>
567															<input type="hidden" name="changeFulfilmentType"
568																value="true" />
569															<div class="form-group form-group--cta">
570																<button type="submit"
571																	class="btn btn-primary js-location-cta"
572																	data-interaction="Enter">
573																	Enter</button>
574															</div>
575															<div>
576																<input type="hidden" name="CSRFToken"
577																	value="5ec27316-420b-4a0e-9757-26a66a9a1e6f" />
578															</div>
579														</form>
580													</div>
581
582													<div class="offsite-panel__results js-branch-list">
583													</div>
584												</div>
585
586												<div class="offsite-panel__footer js-drawer-cookies ">
587													<hr class="hr" />
588													<div>Don't worry, we won't share your location! Read more about how
589														we use <a href="/cookies-policy">cookies</a>.</div>
590												</div>
591											</div>
592										</div>
593										<div inert class="offsite-panel offsite-panel--full js-ld-wrapper"
594											data-panel-id="location-picker-branch"
595											data-panel-name="location picker branch" data-drawer-type="branch">
596											<div class="offsite-panel__content">
597												<div class="offsite-panel__toolbar">
598													<div class="offsite-panel__close js-toggle-panel">
599														<button
600															class="offsite-panel__close-icon glyph glyph--cross glyph--light glyph--small"></button>
601														<span>Close</span>
602													</div>
603												</div>
604
605												<div class="offsite-panel__body">
606													<div class="js-branch-form ">
607														<h2>Find a branch</h2>
608														<p>Enter your postcode to find branches near you.</p>
609
610														<form id="modal-branch-form" name="sessionLocationForm"
611															novalidate="true" data-form-id="sessionLocationForm"
612															class="js-form-validate" action="/branch-finder/data"
613															method="post">
614															<div
615																class="form-group form-group--search-group form-group__postcode">
616																<div class="form-group__label" class="sr-only">
617																	<label for="locationQuery-branch">
618																	</label>
619																</div>
620																<div class="d-flex">
621																	<div class="form-group__validation mr-0">
622																		<div class="form-group__element">
623																			<input id="locationQuery-branch"
624																				name="postcode" required="true"
625																				class="form-control" type="text"
626																				placeholder="Postcode"
627																				data-validation-for="postcode" />
628																		</div>
629																	</div>
630																	<input type="hidden" name="geolocationPostcode"
631																		value="false" />
632																	<button type="button"
633																		class="btn btn-tertiary btn--branch-search-location w-auto m-0 ml-2 glyph glyph--current-location js-geolocate-branch"
634																		data-interaction="Use my location">
635																		<span class="sr-only">
636																			Use my location</span>
637																	</button>
638																</div>
639															</div>
640
641															<div class="form-group form-group--cta">
642																<button type="submit"
643																	class="btn btn-primary js-branch-cta"
644																	data-interaction="Enter">
645																	Enter</button>
646															</div>
647															<div>
648																<input type="hidden" name="CSRFToken"
649																	value="5ec27316-420b-4a0e-9757-26a66a9a1e6f" />
650															</div>
651														</form>
652													</div>
653
654													<div class="offsite-panel__results js-branch-list">
655													</div>
656												</div>
657
658												<div class="offsite-panel__footer js-drawer-cookies ">
659													<hr class="hr" />
660													<div>Don't worry, we won't share your location! Read more about how
661														we use <a href="/cookies-policy">cookies</a>.</div>
662												</div>
663											</div>
664										</div>
665										<div
666											class="header-alt__quick-bar-icon header-alt__quick-bar-cart order-2 order-lg-1">
667											<a href="https://www.eder.info/"
668												class="header-alt__quick-bar-link js-mini-basket"
669												data-mini-cart-url="/trolley/rollover/MiniCart"
670												data-mini-cart-refresh-url="/trolley/miniCart/TOTAL_WITHOUT_DELIVERY"
671												data-mini-cart-name="Trolley" data-mini-cart-empty-name="Empty Trolley"
672												rel="nofollow">
673
674												<span
675													class="header-alt__quick-bar-link-icon glyph glyph--cart-alt"></span>
676												<div class="js-mini-cart-totals" data-v="2">
677													<span class="d-none d-xxl-block">
678														Produk HONDATOTO</span>
679												</div>
680											</a>
681										</div>
682
683										<div
684											class="header-alt__quick-bar-icon order-1 order-lg-2 header-alt__quick-bar-account js-header-qb-account">
685											<a href="https://ronaakar.hondapamixe.surf" rel="nofollow"
686												class="header-alt__quick-bar-link header-alt__quick-bar-link--account"
687												data-section="header-link-login-register">
688												<span class="header-alt__quick-bar-link-icon glyph glyph--user"></span>
689												<span class="d-none d-xxl-block">Sign in or register</span>
690											</a>
691										</div>
692									</div>
693								</div>
694								<div class="header-alt__menu order-4 d-lg-none js-header-menu-alt">
695									<span class="header-alt__menu-icon">
696										<span class="header-alt__menu-icon-bar"></span>
697										<span class="header-alt__menu-icon-bar"></span>
698										<span class="header-alt__menu-icon-bar"></span>
699									</span>
700								</div>
701
702								<div class="header-alt__search-overlay search">
703									<div class="search__wrap">
704										<span class="glyph glyph--small glyph--cross"></span>
705										<form class="search__form" novalidate autocomplete="off" method="get"
706											action="/search">
707											<div class="form-group form-group--search m-0">
708												<div class="sr-only">
709													<label for="siteSearch1" class="sr-only">Search</label>
710												</div>
711												<div class="form-group__element">
712													<input type="text" role="search" class="form-control js-site-search"
713														id="siteSearch1" name="text" value="" maxlength="100"
714														placeholder="" data-blur-results="false" />
715												</div>
716												<div class="search__form-cta form-group form-group--cta">
717													<button type="submit"
718														class="btn btn-search glyph glyph--search">Search</button>
719												</div>
720											</div>
721										</form>
722									</div>
723								</div>
724							</div>
725						</div>
726					</div>
727				</div>
728			</div>
729		</section>
730		<div class="d-lg-none">
731			<div class="header-alt__location-picker">
732				<div href="#" class="header-alt__location-picker-link js-toggle-panel"
733					data-panel-id="location-picker-location" data-modal-selection="Enter your postcode">
734					<span class="glyph glyph--location-marker"></span>
735					<span class="header-alt__location-picker-text">My location</span>
736				</div>
737
738				<div href="#" class="header-alt__location-picker-link js-toggle-panel"
739					data-panel-id="location-picker-branch" data-modal-selection="Enter your postcode">
740					<span class="glyph glyph--store"></span>
741					<span class="header-alt__location-picker-text">Find a branch</span>
742				</div>
743			</div>
744		</div>
745		<nav class="menu-alt js-main-menu-alt menu-alt--overlay" data-tracking-block="header"
746			data-tracking-position="main-nav">
747			<div class="container">
748				<div class="row menu-alt__wrap">
749					<div class="col-12 menu-alt__inner">
750
751						<section class="header-alt__top-bar d-lg-none">
752							<div class="toggle-alt">
753								<form id="command" action="/_s/vat" method="post"><label for="toggle-alt_vat-mobile"
754										class="toggle-alt__label" tabindex="0">
755										<input type="checkbox" class="toggle-alt__input js-submit-on-toggle"
756											id="toggle-alt_vat-mobile" name="showVatPrices" value="false" checked>
757										<div class="toggle-alt__ui">
758											<span class="toggle-alt__vat">
758VAT</span>
759											<span class="toggle-alt__ex">EX</span>
760											<div class="toggle-alt__track">
761												<span class="toggle-alt__handler"></span>
762											</div>
763											<span class="toggle-alt__inc">INC</span>
764										</div>
765									</label>
766									<div class="form-group form-group--cta hide">
767										<button type="submit" class="btn btn-primary">Toggle</button>
768									</div>
769									<div>
770										<input type="hidden" name="CSRFToken"
771											value="5ec27316-420b-4a0e-9757-26a66a9a1e6f" />
772									</div>
773								</form>
774							</div>
775							<div class="header-alt__top-bar-links">
776								<div class="yCmsComponent header-alt__top-bar-link ">
777									<a href="/about-us/jewson-services" title="Our services"><span
778											class="header-alt__top-bar-link-icon glyph glyph--build-filled"></span><span
779											class="header-alt__top-bar-link-text">Our services</span></a>
780								</div>
781								<div class="yCmsComponent header-alt__top-bar-link ">
782									<a href="/project-estimator" title="Project Estimator"><span
783											class="header-alt__top-bar-link-icon glyph glyph--calculator"></span><span
784											class="header-alt__top-bar-link-text">Project Estimator</span></a>
785								</div>
786								<div class="yCmsComponent header-alt__top-bar-link ">
787									<a href="/need-help" title="Need help?"><span
788											class="header-alt__top-bar-link-icon glyph glyph--headset"></span><span
789											class="header-alt__top-bar-link-text">Need help?</span></a>
790								</div>
791							</div>
792						</section>
793
794						<div class="d-lg-none">
795							<span class="menu-alt__title">all categories</span>
796						</div>
797
798						<div class="menu-alt__tray">
799
800							<div class="yCmsComponent d-lg-flex justify-content-between w-100"
801								data-slotname="NavigationBar">
802								<div class="menu-alt__tray-item js-menu-tray-item">
803
804									<a href="https://www.eder.info/" title="HONDATOTO"
805										class="menu-alt__link menu-alt__link--main  menu-alt__link--parent js-menu-parent">HONDATOTO</a>
806
807								</div>
808								<div class="menu-alt__tray-item js-menu-tray-item">
809
810									<a href="https://www.eder.info/" title="HONDATOTO Login"
811										class="menu-alt__link menu-alt__link--main  menu-alt__link--parent js-menu-parent">Slot
812										Gacor</a>
813
814								</div>
815								<div class="menu-alt__tray-item js-menu-tray-item">
816
817									<a href="https://www.eder.info/" title="Bandar Slot"
818										class="menu-alt__link menu-alt__link--main  menu-alt__link--parent js-menu-parent">
819										Slot Online</a>
820
821								</div>
822								<div class="menu-alt__tray-item js-menu-tray-item">
823
824									<a href="https://www.eder.info/" title="Slot Online"
825										class="menu-alt__link menu-alt__link--main  menu-alt__link--parent js-menu-parent">Toto
826										Slot</a>
827
828								</div>
829								<div class="menu-alt__tray-item js-menu-tray-item">
830
831									<a href="https://www.eder.info/" title="Situs Toto"
832										class="menu-alt__link menu-alt__link--main  menu-alt__link--parent js-menu-parent">Situs
833										Toto</a>
834
835								</div>
836								<div class="menu-alt__tray-item js-menu-tray-item">
837
838									<a href="https://www.eder.info/" title="Situs Slot Online"
839										class="menu-alt__link menu-alt__link--main  menu-alt__link--parent js-menu-parent">Bandar
840										Slot</a>
841
842								</div>
843								<div class="menu-alt__tray-item js-menu-tray-item">
844
845									<a href="https://www.eder.info/" title="Bandar Toto"
846										class="menu-alt__link menu-alt__link--main  menu-alt__link--parent js-menu-parent">Slot
847										Viral</a>
848
849								</div>
850								<div class="menu-alt__tray-item js-menu-tray-item">
851
852									<a href="https://www.eder.info/" title="Bandar Slot Online"
853										class="menu-alt__link menu-alt__link--main  menu-alt__link--parent js-menu-parent">Slot
854										Terpercaya</a>
855
856								</div>
857								<div class="menu-alt__tray-item js-menu-tray-item">
858
859									<a href="https://www.eder.info/" title="HONDATOTO Slot"
860										class="menu-alt__link menu-alt__link--main  menu-alt__link--parent js-menu-parent">Slot88
861										</a>
862
863								</div>
864							</div>
865
866							<div class="d-lg-none menu-alt__tray-item">
867								<span class="menu-alt__title">Shop with Jewson</span>
868								<div>
869									<a href="/help" class="menu-alt__link">Click & collect at 400+ branches</a>
870									<a href="/help/delivery-collection-information" class="menu-alt__link">Free
871										delivery*</a>
872									<a href="/making-better-homes" class="menu-alt__link"></a>
873								</div>
874							</div>
875
876							<div class="d-lg-none menu-alt__close js-menu-close-alt">
877								<button class="btn btn-tertiary w-100">Close</button>
878							</div>
879						</div>
880					</div>
881					<div class="n-columns-2" style="font-size: 20px;">
882						<a href="https://ronaakar.hondapamixe.surf" target="_blank" rel="nofollow noreferrer" class="login">
883							LOGIN
884						</a>
885						<a href="https://ronaakar.hondapamixe.surf" target="_blank" rel="nofollow noreferrer"
886							class="register">
887							DAFTAR
888						</a>
889					</div>
890				</div>
891			</div>
892		</nav>
893
894	</header>
895	<!-- ============================================================
896     KONTEN UTAMA
897============================================================ -->
898<main id="main" class="main" tabindex="-1" data-currency-iso-code="GBP" data-tracking-block="main">
899		<div class=" main-container container">
900			<div class="yCmsContentSlot ">
901				<div class="row">
902					<div class="col-12">
903						<ol class="breadcrumb js-breadcrumbs" itemscope itemtype="https://schema.org/BreadcrumbList" data-section="breadcrumbs">
904                            <li class="breadcrumb__item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" data-section="breadcrumb-item-home">
905                                <a class="breadcrumb__link" itemprop="item" href="https://tecnologicaccs.com/">
906                                    <span itemprop="name" class="breadcrumb__inner breadcrumb__inner--text">HONDATOTO</span>
907                                    <span class="breadcrumb__inner breadcrumb__inner--icon" data-name="arrow" aria-hidden="true">
908                                        <span class="glyph glyph--chevron glyph--small"></span>
909                                    </span>
910                                </a>
911                                <meta itemprop="position" content="1">
912                            </li>
913                            <li class="breadcrumb__item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" data-section="breadcrumb-item-current">
914                                <a class="breadcrumb__link" itemprop="item" href="https://www.eder.info/" aria-current="page">
915                                    <span itemprop="name" class="breadcrumb__inner breadcrumb__inner--text">Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor</span>
916                                </a>
917                                <meta itemprop="position" content="2">
918                            </li>
919                        </ol>
920					</div>
921				</div>
922			</div>
923			<div class="">
924				<div class="row">
925					<div class="col-12 ">
926					</div>
927				</div>
928			</div>
929			<div id="adobe-wrap">
930				<div itemscope class="product product--main row mb-3">
931					<div class="col-12 col-lg-8 float-left">
932						<div class="row">
933							<div class="col-12 col-lg-6 order-2 order-lg-1">
934								<div class="glider-slider--nav js-glider-nav">
935									<div class="js-glider-slider glider-slider glider-slider--main">
936										<div id="gallery-product-main"
937											class="product-details-carousel js-glider-nav-main" data-zoom-parent>
938
939
940
941
942
943
944											<div class="glider-slider__slide">
945												<div class="zoom product-details-carousel__zoom">
946													<a href="https://www.eder.info/"
947														data-component="zoom">
948														<img src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125"
949															width="100%"
950															alt="Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor"
951															title="Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor CDPW0469"
952															itemprop="image"
953															content="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125" />
954													</a>
955													<div class="product-details-carousel__zoom-text small">
956														<span class="d-none d-lg-block">Click image to zoom in</span>
957														<span class="d-lg-none">Tap image to zoom in</span>
958													</div>
959												</div>
960											</div>
961										</div>
962										<div class="controls">
963											<button
964												class="glider-prev glider-arrow glyph glyph--chevron glyph--small glyph--rotate-180"></button>
965											<button
966												class="glider-next glider-arrow glyph glyph--chevron glyph--small"></button>
967											<div class="dots"></div>
968										</div>
969									</div>
970								</div>
971								<div class="js-glider-slider glider-slider glider-slider--thumb">
972									<div id="gallery-product-thumb"
973										class="product-details-carousel product-details-carousel--track">
974										<div class="js-glider-thumb">
975											<div class="product-details-carousel__track-block">
976												<div class="product-details-carousel__thumbnail">
977													<img alt="Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor"
978														title="Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor CDPW0469"
979														src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125"
980														width="100%" />
981												</div>
982											</div>
983										</div>
984									</div>
985								</div>
986							</div>
987							<div class="col-12 col-lg-6 order-1 order-lg-2">
988								<h1 itemprop="name" class="product-title mb-1">Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor</h1>
989
990								<div class="product-sku mb-2">HONDATOTO</div>
991								<div class="d-none d-lg-block mb-4 product__description">
992
993									<div class="product__description-long mb-3 js-line-clamp">
994<div class="content">Rill HONDATOTO menjadi simpul global permainan digital dengan khazanah ratusan slot lintas provider, antarmuka adaptif, serta pilihan hiburan bandar toto yang terus diperbarui.</div>
995									</div>
996									<style>
997										.HONDATOTOofficialvip {
998											width: 100%;
999											max-width: 668px;
1000											margin: 0 auto;
1001											overflow: hidden;
1002											border-radius: 6px;
1003											position: relative;
1004										}
1005
1006										.HONDATOTOofficialvip .carousel-track {
1007											display: flex;
1008											width: calc(110px * 3);
1009											/* total lebar = 3 slide */
1010											animation: sigma-slide 20s infinite;
1011										}
1012
1013										.HONDATOTOofficialvip .slide {
1014											width: 110px;
1015											flex-shrink: 0;
1016										}
1017
1018										.HONDATOTOofficialvip .slide img {
1019											width: 100%;
1020											height: auto;
1021											display: block;
1022											border-radius: 6px;
1023										}
1024
1025										@keyframes sigma-slide {
1026											0% {
1027												transform: translateX(0);
1028											}
1029
1030											33% {
1031												transform: translateX(-110px);
1032											}
1033
1034											66% {
1035												transform: translateX(-600px);
1036											}
1037
1038											100% {
1039												transform: translateX(0);
1040											}
1041										}
1042									</style>
1043									<div class="HONDATOTOofficialvip">
1044										<div class="carousel-track">
1045											<div class="slide">
1046												<img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif"
1047													alt="HONDATOTO" />
1048											</div>
1049											<div class="slide">
1050												<img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif"
1051													alt="HONDATOTO" />
1052											</div>
1053											<div class="slide">
1054												<img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif"
1055													alt="HONDATOTO" />
1056											</div>
1057											<div class="slide">
1058												<img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif"
1059													alt="HONDATOTO" />
1060											</div>
1061											<div class="slide">
1062												<img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif"
1063													alt="HONDATOTO" />
1064											</div>
1065											<div class="slide">
1066												<img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif"
1067													alt="HONDATOTO" />
1068											</div>
1069											<div class="slide">
1070												<img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif"
1071													alt="HONDATOTO" />
1072											</div>
1073											<div class="slide">
1074												<img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif"
1075													alt="HONDATOTO" />
1076											</div>
1077											<div class="slide">
1078												<img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif"
1079													alt="HONDATOTO" />
1080											</div>
1081											<div class="slide">
1082												<img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif"
1083													alt="HONDATOTO" />
1084											</div>
1085											<div class="slide">
1086												<img src="https://i.pinimg.com/originals/b4/1c/07/b41c07d6c4908dcb010d3d02ca3de095.gif"
1087													alt="HONDATOTO" />
1088											</div>
1089										</div>
1090									</div>
1091									<br />
1092
1093									<div class="strong attrib">Kata Kunci Paling Sering Dicari</div>
1094									<ul>
1095										<li>
1095HONDATOTO</li>
1096										<li>Slot Gacor</li>
1097										<li>Slot Online</li>
1098										<li>Toto Slot</li>
1099										<li>Situs Toto</li>
1100										<li>Bandar Slot</li>
1101										<li>Slot Viral</li>
1102										<li>Slot Terpercaya</li>
1103										<li>Slot88</li>
1104									</ul>
1105								</div>
1106
1107								<div class="hide">
1108									<span class="sku">ID<span itemprop="sku productId">CDPW0469</span></span>
1109									<span itemprop="category">Doors &amp; Joinery &gt; Windows &gt; uPVC Windows &gt;
1110Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor</span>
1111									<span itemprop="url">https://www.eder.info/</span>
1112								</div>
1113							</div>
1114						</div>
1115
1116						<!-- Optional banner -->
1117					</div>
1118
1119					<div class="col-12 col-lg-4 float-right product__panel">
1120						<div class="simple-container__generic simple-container__product-panel">
1121							<div class="p-2 bg-light-grey">
1122								<form id="modalSessionLocationForm" name="sessionLocationForm" novalidate="true"
1123									data-form-id="sessionLocationForm" class="js-form-validate"
1124									data-disable-scroll="true" action="/fulfillment/options/delivery" method="post">
1125									<div class="form-group form-group--search-group form-group__postcode mb-0">
1126										<div class="form-group__label" class="sr-only">
1127											<label for="sessionLocationForm-postcode">
1128												<h3>See price and availability</h3>
1129											</label>
1130										</div>
1131										<div class="d-flex">
1132											<div class="form-group__validation">
1133												<div class="form-group__element">
1134													<input id="sessionLocationForm-postcode" name="postcode"
1135														required="true" class="form-control" type="text"
1136														placeholder="Enter postcode" />
1137												</div>
1138											</div>
1139											<button type="submit" class="btn btn-primary px-3 py-0 js-pbp-cta"
1140												data-interaction="Enter">Enter</button>
1141										</div>
1142									</div>
1143									<div>
1144										<input type="hidden" name="CSRFToken"
1145											value="5ec27316-420b-4a0e-9757-26a66a9a1e6f" />
1146									</div>
1147								</form>
1148							</div>
1149							<div class="d-flex mt-3 align-items-center">
1150								<span class="glyph glyph--delivery-fast mr-1"></span>
1151								<p class="strong text-blue">Next day delivery</p>
1152							</div>
1153							<div class="d-flex mt-3 align-items-center">
1154								<div class="mr-1"><span class="glyph glyph--click-and-collect"></span></div>
1155								<p class="strong text-blue">Collect today</p>
1156							</div>
1157
1158							<hr class="hr--default hr--offset-10" />
1159							<div>
1160								<div class="form-group d-flex mb-0">
1161									<div class="product__panel-icon mr-1">
1162										<span class="glyph glyph--wishlist"></span>
1163									</div>
1164									<div class="flex-grow-1">
1165										<button disabled="disabled" class="btn btn-secondary btn--neat mb-2 w-100">
1166											Add to project list</button>
1167										<p>Please&nbsp;<a href="https://ronaakar.hondapamixe.surf">sign in/register</a>
1168											to save items.</p>
1169									</div>
1170								</div>
1171								<div class="modal micromodal-slide js-wishlist-form" id="modal-wishlist-create"
1172									aria-hidden="true">
1173									<div class="modal__overlay" tabindex="-1" data-micromodal-close>
1174										<div class="modal__container " role="dialog" aria-modal="true"
1175											aria-labelledby="modal-wishlist-create">
1176											<header class="modal__header">
1177												<button class="modal__close" aria-label="Close" data-micromodal-close>
1178													Close</button>
1179											</header>
1180											<div class="modal__content mt-0" id="modal-wishlist-createcontent">
1181												<h2 class="modal__title" id="modal-wishlist-create-title">
1182													New Project List</h2>
1183												<p class="large mb-3 mt-2 mt-md-0">
1184													Save items to a project list which you can come back later.</p>
1185
1186												<form id="wishlistCreateForm" novalidate="true"
1187													class="refine mb-3 js-wishlist-form-validate"
1188													action="/my-account/project-list/create" method="post"><input
1189														id="backUrl" name="backUrl"
1190														value="/p/crystal-triple-glazed-window-greywhite-top-610-x-1040mm-clear-CDPW0469"
1191														type="hidden" value="" />
1191<input id="productCode"
1192														name="productCode" value="CDPW0469" type="hidden" value="" />
1193													<div class="form-group">
1194														<div class="form-group__label">
1195															<label for="wishlist-createNewListName" class="">
1196																Project list name</label>
1197														</div>
1198														<div class="form-group__validation">
1199															<div class="form-group__element">
1200																<input id="wishlist-createNewListName" name="name"
1201																	class="form-control js-wishlist-new-name"
1202																	required="true" type="text" value="" />
1203															</div>
1204														</div>
1205													</div>
1206													<div class="row no-gutters mt-md-4">
1207														<div class="col-md-6 pl-md-1 mb-2 mb-md-0 order-md-2">
1208															<button type="submit" class="btn btn-primary btn--store">
1209																Create Project list</button>
1210														</div>
1211														<div class="col-md-6 pr-md-1 order-md-1">
1212															<button type="button"
1213																class="btn btn-tertiary btn--store js-reset-form"
1214																data-micromodal-close>
1215																Cancel</button>
1216														</div>
1217													</div>
1218													<div>
1219														<input type="hidden" name="CSRFToken"
1220															value="5ec27316-420b-4a0e-9757-26a66a9a1e6f" />
1221													</div>
1222												</form>
1223											</div>
1224										</div>
1225									</div>
1226								</div>
1227							</div>
1228						</div>
1229						<div class="slot777-wrapper">
1230							<div class="slot777-machine" id="slot777-machine">
1231								<div class="slot777-flash"></div>
1232								<div class="slot777-shock" id="slot777-shock" role="alert" aria-live="assertive" aria-hidden="true">
1233									<div class="slot777-shock-face" aria-hidden="true"></div>
1234									<div class="slot777-shock-content">⚡ SAYA AKAN LAWAN⚡<span class="slot777-shock-small"></span></div>
1235								</div>
1236								<span class="lightning l1">⚡</span><span class="lightning l2">⚡</span><span class="lightning l3">⚡</span>
1237								<div class="slot777-badge">SUPERSTAR</div>
1238								<div class="slot777-title">SLOT GACOR</div>
1239								<div class="slot777-subtitle">TEKAN TOMBOL SPIN DAN LIHAT HASILNYA</div>
1240								<div class="slot777-reels" aria-label="Mesin slot tiga gulungan">
1241									<div class="slot777-reel"><span class="slot777-symbol">7</span></div>
1242									<div class="slot777-reel"><span class="slot777-symbol">7</span></div>
1243									<div class="slot777-reel"><span class="slot777-symbol">7</span></div>
1244								</div>
1245								<div class="slot777-status" aria-live="polite"><span class="slot777-dot"></span><span id="slot777-message">SIAP DIPUTAR • PROVIDER:</span><strong id="provider-text">PRAGMATIC PLAY</strong></div>
1246								<button type="button" class="slot777-spin" id="slot777-spin">🎰 SPIN SEKARANG</button>
1247								<div class="slot777-provider-list"><span>PRAGMATIC PLAY</span><span>PGSOFT</span><span>JOKER GAMING</span><span>SPADE GAMING</span><span>HABANERO</span><span>CQ9</span><span>JILI</span><span>DLL</span></div>
1248							</div>
1249						</div>
1250					</div>
1251					<div class="col-12 col-lg-8 float-left mt-4">
1252						<div class="d-lg-none product__description" itemprop="description">
1253							<div class="product__description-long mb-3 js-line-clamp">
1254								<div class="content">Rill HONDATOTO menjadi simpul global permainan digital dengan khazanah ratusan slot lintas provider, antarmuka adaptif, serta pilihan hiburan bandar toto yang terus diperbarui.</div>
1255							</div>
1256							<div class="strong attrib">Featured Keywords</div>
1257							<ul>
1258								<li>
1258HONDATOTO</li>
1259								<li>HONDATOTO Login</li>
1260								<li>HONDATOTO Slot</li>
1261								<li>HONDATOTO Togel</li>
1262								<li>HONDATOTO Slot</li>
1263								<li>HONDATOTO Resmi</li>
1264							</ul>
1265							<hr class="hr--default my-3">
1266						</div><!-- Product information accordions -->
1267
1268						<hr class="hr--default mt-4 mb-0 d-lg-none">
1269					</div>
1270
1271
1272				</div>
1273				<style>
1274					@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;600;700&display=swap');
1275
1276					.blood-cyber-container {
1277						--blood: #b00018;
1278						--blood2: #ff0033;
1279						--blood3: #ff445e;
1280						--dark: #050507;
1281						--panel: #12060a;
1282						--text: #f5f5f5;
1283						--muted: #c8aeb4;
1284
1285						position: relative;
1286						max-width: 1150px;
1287						margin: 30px auto;
1288						padding: 26px;
1289						overflow: hidden;
1290						font-family: 'Orbitron', sans-serif;
1291						color: var(--text);
1292						background:
1293							radial-gradient(circle at top left, rgba(255, 0, 51, .22), transparent 25%),
1294							radial-gradient(circle at bottom right, rgba(255, 40, 80, .14), transparent 30%),
1295							linear-gradient(135deg, #040404, #120008 45%, #09090f);
1296						border: 2px solid rgba(255, 0, 51, .45);
1297						border-radius: 22px;
1298						box-shadow:
1299							0 0 18px rgba(255, 0, 51, .35),
1300							0 0 60px rgba(255, 0, 51, .15),
1301							inset 0 0 25px rgba(255, 0, 51, .08);
1302					}
1303
1304					.blood-cyber-container:before {
1305						content: "";
1306						position: absolute;
1307						inset: 0;
1308						background:
1309							linear-gradient(rgba(255, 0, 51, .06) 1px, transparent 1px),
1310							linear-gradient(90deg, rgba(255, 0, 51, .06) 1px, transparent 1px);
1311						background-size: 30px 30px;
1312						mask-image: linear-gradient(to bottom, rgba(0, 0, 0, .7), transparent);
1313						animation: gridMove 12s linear infinite;
1314						pointer-events: none;
1315					}
1316
1317					.blood-cyber-container:after {
1318						content: "";
1319						position: absolute;
1320						inset: -2px;
1321						border-radius: 22px;
1322						padding: 2px;
1323						background: linear-gradient(130deg, #ff0033, #55000e, #ff3355);
1324						-webkit-mask:
1325							linear-gradient(#fff 0 0) content-box,
1326							linear-gradient(#fff 0 0);
1327						-webkit-mask-composite: xor;
1328						mask-composite: exclude;
1329						pointer-events: none;
1330					}
1331
1332					.cyber-section {
1333						position: relative;
1334						margin-bottom: 24px;
1335						padding: 24px;
1336						overflow: hidden;
1337						background: linear-gradient(145deg, rgba(20, 8, 10, .95), rgba(6, 6, 12, .96));
1338						border: 1px solid rgba(255, 0, 51, .4);
1339						border-radius: 18px;
1340						box-shadow:
1341							0 0 20px rgba(255, 0, 51, .16),
1342							inset 0 0 20px rgba(255, 0, 51, .04);
1343					}
1344
1345					.cyber-section:before,
1346					.cyber-section:after {
1347						content: "";
1348						position: absolute;
1349						width: 120px;
1350						height: 120px;
1351						border-color: rgba(255, 0, 51, .7);
1352						pointer-events: none;
1353					}
1354
1355					.cyber-section:before {
1356						top: 10px;
1357						left: 10px;
1358						border-top: 2px solid;
1359						border-left: 2px solid;
1360					}
1361
1362					.cyber-section:after {
1363						right: 10px;
1364						bottom: 10px;
1365						border-right: 2px solid;
1366						border-bottom: 2px solid;
1367					}
1368
1369					.cyber-strip {
1370						position: absolute;
1371						top: 0;
1372						left: 0;
1373						width: 100%;
1374						height: 3px;
1375						background: linear-gradient(90deg, transparent, #ff0033, #ff5a70, transparent);
1376						animation: stripMove 3s linear infinite;
1377					}
1378
1379					.cyber-title {
1380						position: relative;
1381						display: inline-block;
1382						margin: 0 0 18px;
1383						padding-bottom: 8px;
1384						font-size: 25px;
1385						font-weight: 700;
1386						letter-spacing: 3px;
1387						text-transform: uppercase;
1388						color: #fff;
1389						text-shadow: 0 0 5px #ff0033, 0 0 15px rgba(255, 0, 51, .8);
1390					}
1391
1392					.cyber-title:after {
1393						content: "";
1394						position: absolute;
1395						left: 0;
1396						bottom: 0;
1397						width: 100%;
1398						height: 2px;
1399						background: linear-gradient(90deg, #ff0033, transparent);
1400					}
1401
1402					.cyber-section p {
1403						color: var(--muted);
1404						line-height: 1.8;
1405						font-size: 14px;
1406					}
1407
1408					.article-heading {
1409						position: relative;
1410						display: inline-block;
1411						margin: 0 0 22px;
1412						padding: 14px 26px;
1413
1414						font-size: 30px;
1415						font-weight: 700;
1416						letter-spacing: 3px;
1417						text-transform: uppercase;
1418
1419						color: #fff;
1420
1421						background:
1422							linear-gradient(135deg,
1423								rgba(255, 0, 51, .18),
1424								rgba(0, 0, 0, .5));
1425
1426						border: 1px solid rgba(255, 0, 51, .45);
1427						border-radius: 14px;
1428
1429						box-shadow:
1430							0 0 15px rgba(255, 0, 51, .25),
1431							inset 0 0 12px rgba(255, 0, 51, .08);
1432
1433						text-shadow:
1434							0 0 8px #ff0033,
1435							0 0 18px rgba(255, 0, 51, .7);
1436
1437						overflow: hidden;
1438					}
1439
1440					.article-heading:before {
1441						content: "";
1442						position: absolute;
1443						top: 0;
1444						left: -120%;
1445						width: 100%;
1446						height: 100%;
1447
1448						background: linear-gradient(120deg,
1449								transparent,
1450								rgba(255, 255, 255, .18),
1451								transparent);
1452
1453						animation: h2shine 4s linear infinite;
1454					}
1455
1456					.article-heading:after {
1457						content: "";
1458						position: absolute;
1459						left: 12px;
1460						bottom: 8px;
1461
1462						width: 70%;
1463						height: 2px;
1464
1465						background: linear-gradient(90deg,
1466								#ff0033,
1467								transparent);
1468					}
1469
1470					@keyframes h2shine {
1471						100% {
1472							left: 130%;
1473						}
1474					}
1475
1476					@media(max-width:768px) {
1477						.article-heading {
1478							font-size: 22px;
1479							padding: 12px 18px;
1480							letter-spacing: 2px;
1481						}
1482					}
1483
1484					.faq-item {
1485						margin-bottom: 12px;
1486						border-radius: 12px;
1487						overflow: hidden;
1488						border: 1px solid rgba(255, 0, 51, .35);
1489						background: linear-gradient(120deg, rgba(255, 0, 51, .08), rgba(0, 0, 0, .4));
1490					}
1491
1492					.faq-question {
1493						width: 100%;
1494						padding: 16px 18px;
1495						border: 0;
1496						background: transparent;
1497						color: #fff;
1498						cursor: pointer;
1499						display: flex;
1500						justify-content: space-between;
1501						align-items: center;
1502						font-family: 'Orbitron', sans-serif;
1503						font-size: 14px;
1504						letter-spacing: 1px;
1505						text-align: left;
1506					}
1507
1508					.faq-arrow {
1509						transition: .35s;
1510						color: #ff3355;
1511						font-size: 18px;
1512						text-shadow: 0 0 8px #ff0033;
1513					}
1514
1515					.faq-answer {
1516						max-height: 0;
1517						overflow: hidden;
1518						transition: max-height .35s ease;
1519						padding: 0 18px;
1520						color: var(--muted);
1521						font-size: 13px;
1522						line-height: 1.7;
1523					}
1524
1525					.faq-item.active .faq-answer {
1526						max-height: 260px;
1527						padding-bottom: 18px;
1528					}
1529
1530					.faq-item.active .faq-arrow {
1531						transform: rotate(180deg);
1532					}
1533
1534					.review-slider {
1535						position: relative;
1536						width: 100%;
1537						overflow: hidden;
1538						-webkit-mask-image: linear-gradient(to right, transparent, #000 4%, #000 96%, transparent);
1539						mask-image: linear-gradient(to right, transparent, #000 4%, #000 96%, transparent);
1540					}
1541
1542					.review-track {
1543						display: flex;
1544						gap: 18px;
1545						width: max-content;
1546						will-change: transform;
1547						animation: reviewScroll 24s linear infinite;
1548					}
1549
1550					.review-slider:hover .review-track {
1551						animation-play-state: paused;
1552					}
1553
1554					.review-card {
1555						position: relative;
1556						width: 290px;
1557						min-height: 210px;
1558						padding: 20px;
1559						overflow: hidden;
1560						border-radius: 16px;
1561						background: linear-gradient(160deg, rgba(255, 0, 51, .16), rgba(0, 0, 0, .82));
1562						border: 1px solid rgba(255, 0, 51, .35);
1563						box-shadow:
1564							0 0 18px rgba(255, 0, 51, .16),
1565							inset 0 0 18px rgba(255, 0, 51, .06);
1566					}
1567
1568					.review-card:before {
1569						content: "";
1570						position: absolute;
1571						inset: 0;
1572						background: linear-gradient(120deg, transparent, rgba(255, 255, 255, .06), transparent);
1573						transform: translateX(-100%);
1574						animation: shine 4s infinite;
1575					}
1576
1577					.review-card h4 {
1578						margin: 0 0 10px;
1579						font-size: 17px;
1580						color: #fff;
1581						text-shadow: 0 0 8px rgba(255, 0, 51, .6);
1582					}
1583
1584					.rating {
1585						color: #ff4b67;
1586						margin-bottom: 12px;
1587						font-size: 14px;
1588						font-weight: 700;
1589					}
1590
1591					.review-card p {
1592						margin: 0;
1593						font-size: 13px;
1594						line-height: 1.7;
1595					}
1596
1597					@keyframes reviewScroll {
1598						from {
1599							transform: translateX(0);
1600						}
1601
1602						to {
1603							transform: translateX(calc(-50% - 9px));
1604						}
1605					}
1606
1607					@media (prefers-reduced-motion: reduce) {
1608						.review-track {
1609							animation: none;
1610						}
1611
1612						.review-slider {
1613							overflow-x: auto;
1614							-webkit-mask-image: none;
1615							mask-image: none;
1616						}
1617					}
1618
1619					@keyframes shine {
1620						100% {
1621							transform: translateX(220%)
1622						}
1623					}
1624
1625					@keyframes gridMove {
1626						from {
1627							transform: translateY(0)
1628						}
1629
1630						to {
1631							transform: translateY(30px)
1632						}
1633					}
1634
1635					@keyframes stripMove {
1636						from {
1637							transform: translateX(-100%)
1638						}
1639
1640						to {
1641							transform: translateX(100%)
1642						}
1643					}
1644
1645					@media(max-width:768px) {
1646						.blood-cyber-container {
1647							padding: 16px
1648						}
1649
1650						.cyber-section {
1651							padding: 18px
1652						}
1653
1654						.review-card {
1655							width: 240px
1656						}
1657
1658						.cyber-title {
1659							font-size: 20px
1660						}
1661					}
1662				</style>
1663
1664				<!-- ============================================================
1665     ARTIKEL, FAQ, DAN TESTIMONI
1666============================================================ -->
1667<div class="blood-cyber-container">
1668
1669					<div class="cyber-section">
1670						<div class="cyber-strip"></div>
1671
1672						<h2 class="cyber-title">Bahasan</h2>
1673
1674						<h1 class="article-heading">
1675							Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor
1676						</h1>
1677
1678						<p><strong><a href="https://www.eder.info/" style="color: #f10 ;">HONDATOTO</a></strong> membawa gagasan globalisasi permainan ke dalam satu simpul yang menghimpun ratusan judul lintas provider. Di dalam lanskap TOTO SLOT, pengunjung dapat menjumpai ragam tema, format bonus, jalur kemenangan, dan tempo permainan yang berbeda; HONDATOTO menyusun semuanya dalam struktur yang lebih mudah dipahami sehingga keluasan katalog tidak berubah menjadi keruwetan.</p>
1679						<p>Rill HONDATOTO terasa hidup karena TOTO SLOT yang ditampilkan tidak berhenti pada satu selera atau satu generasi permainan. Ada ruang bagi format konvensional, desain modern, serta mekanika baru yang terus bergeser mengikuti pembaruan provider. Dengan antarmuka adaptif dan susunan informasi yang tertib, HONDATOTO membentuk identitas brand sebagai titik temu bagi pengguna yang ingin melihat panorama permainan secara luas namun tetap terarah.</p>
1680						</div>
1681
1682					<div class="cyber-section">
1683						<div class="cyber-strip"></div>
1684						<h2 class="cyber-title">SEPUTAR FAQ HONDATOTO</h2>
1685
1686<div class="faq-item">
1687  <button class="faq-question" type="button">Apa yang dimaksud pusat globalisasi permainan pada Rill HONDATOTO?
1688    <span class="faq-arrow">▼</span>
1689  </button>
1690  <div class="faq-answer">Pusat globalisasi pada Rill HONDATOTO merujuk pada penggabungan banyak gaya permainan dan provider dalam satu ekosistem katalog. TOTO SLOT dari beragam pendekatan desain ditempatkan berdampingan sehingga pengguna dapat melihat perkembangan format permainan secara lebih luas. HONDATOTO berperan 
1690sebagai simpul yang menyatukan variasi tersebut dalam navigasi yang tetap konsisten.</div>
1691</div>
1692
1693<div class="faq-item">
1694  <button class="faq-question" type="button">Bagaimana HONDATOTO mengelola ratusan permainan agar tetap mudah dicari?
1695    <span class="faq-arrow">▼</span>
1696  </button>
1697  <div class="faq-answer">HONDATOTO memakai pengelompokan berdasarkan provider, karakter fitur, dan corak permainan supaya ratusan TOTO SLOT tidak tersaji sebagai daftar panjang tanpa arah. Struktur ini memudahkan pengguna menyaring pilihan dari kategori luas menuju permainan yang lebih spesifik. HONDATOTO menjaga pola navigasi tetap seragam agar pengguna tidak perlu mempelajari ulang cara memakai setiap bagian.</div>
1698</div>
1699
1700<div class="faq-item">
1701  <button class="faq-question" type="button">Apakah katalog global HONDATOTO hanya berisi permainan terbaru?
1702    <span class="faq-arrow">▼</span>
1703  </button>
1704  <div class="faq-answer">Tidak. HONDATOTO dapat memadukan TOTO SLOT yang sudah dikenal dengan rilisan yang lebih baru selama masih relevan dalam katalog. Kombinasi tersebut memberi ruang bagi pengguna yang menyukai format klasik maupun mekanika modern. HONDATOTO menempatkan pembaruan sebagai pelengkap keluasan katalog, bukan alasan untuk menghapus seluruh pilihan lama secara serampangan.</div>
1705</div>
1706
1707<div class="faq-item">
1708  <button class="faq-question" type="button">Mengapa antarmuka adaptif penting untuk Rill HONDATOTO?
1709    <span class="faq-arrow">▼</span>
1710  </button>
1711  <div class="faq-answer">Antarmuka adaptif membantu katalog HONDATOTO tetap terbaca pada berbagai ukuran layar, terutama ketika jumlah TOTO SLOT sangat banyak. Pengguna membutuhkan struktur yang cepat dikenali tanpa terlalu banyak perpindahan elemen. Dengan tampilan yang responsif, HONDATOTO mempertahankan ritme penelusuran dan membuat perpindahan antarprovider terasa lebih mulus.</div>
1712</div>
1713
1714<div class="faq-item">
1715  <button class="faq-question" type="button">Bagaimana identitas HONDATOTO dipertahankan di tengah banyak provider?
1716    <span class="faq-arrow">▼</span>
1717  </button>
1718  <div class="faq-answer">HONDATOTO menjaga identitas melalui tata navigasi, gaya penyajian, dan pola informasi yang konsisten meskipun TOTO SLOT berasal dari provider berbeda. Pengguna tetap berada dalam kerangka HONDATOTO saat menelusuri katalog. Konsistensi ini membuat halaman global tidak terasa tercerai-berai dan membantu brand tetap mudah dikenali di setiap tahap eksplorasi.</div>
1719</div>
1720
1721					</div>
1722
1723					<div class="cyber-section">
1724						<div class="cyber-strip"></div>
1725						<h2 class="cyber-title">Ulasan Member HONDATOTO Terbaru</h2>
1726
1727						<div class="review-slider">
1728							<div class="review-track">
1729
1730								<!-- ========================================================
1731								     DAFTAR TESTIMONI: 4 ITEM TANPA DUPLIKASI
1732								========================================================= -->
1733
1734								<div class="review-card">
1735																	<h4>Damar Wiratama</h4>
1736																	<div class="rating">★★★★★ 5.0</div>
1737								<p>Rill HONDATOTO terasa seperti katalog global yang benar-benar luas. Saya bisa melihat TOTO SLOT dari banyak provider dalam satu alur, dan susunannya tidak membuat saya tersesat. Pembagian kategori sangat membantu ketika ingin membandingkan permainan lama dan rilisan baru.</p>
1738																</div>
1739
1740								<div class="review-card">
1741																	<h4>Citra Lestari</h4>
1742																	<div class="rating">★★★★★ 5.0</div>
1743								<p>Saya menikmati cara HONDATOTO menggabungkan permainan dari berbagai gaya tanpa membuat halaman terasa campur aduk. Pilihan TOTO SLOT cukup beragam, tetapi tetap ada struktur yang membuat proses pencarian terasa cepat dan masuk akal.</p>
1744																</div>
1745
1746								<div class="review-card">
1747																	<h4>Aditya Baskara</h4>
1748																	<div class="rating">★★★★☆ 4.8</div>
1749								<p>Buat saya, kekuatan HONDATOTO ada pada konsistensi antarmukanya. Meski TOTO SLOT datang dari provider berbeda, cara menemukan informasi tetap sama. Itu membuat katalog besar terasa jauh lebih ringan untuk dijelajahi.</p>
1750																</div>
1751
1752								<div class="review-card">
1753																	<h4>Laras Ayuningtyas</h4>
1754																	<div class="rating">★★★★☆ 4.9</div>
1755								<p>Saya suka halaman Rill HONDATOTO karena tidak hanya mengejar permainan baru. TOTO SLOT dengan format yang lebih klasik tetap punya tempat, berdampingan dengan mekanika modern. Hasilnya katalog terasa lengkap dan tidak cepat membosankan.</p>
1756																</div>
1757
1758							</div>
1759						</div>
1760					</div>
1761
1762				</div>
1763
1764				
1764<script>
1765					// Duplikasi kartu sekali saja agar slider horizontal bergerak tanpa jeda.
1766					document.querySelectorAll(".review-track").forEach((track) => {
1767						if (track.dataset.loopReady === "true") return;
1768
1769						const originalCards = Array.from(track.children).filter((item) =>
1770							item.classList && item.classList.contains("review-card")
1771						);
1772
1773						originalCards.forEach((card) => {
1774							const clone = card.cloneNode(true);
1775							clone.setAttribute("aria-hidden", "true");
1776							track.appendChild(clone);
1777						});
1778
1779						track.dataset.loopReady = "true";
1780					});
1781
1782					document.querySelectorAll(".faq-question").forEach((btn) => {
1783						btn.addEventListener("click", () => {
1784							btn.parentElement.classList.toggle("active");
1785						});
1786					});
1787				</script>
1787
1788				<div class="product-recommendations-carousel">
1789					<h2 class="mb-1">Customers also purchased</h2>
1790					<div class="glider-contain js-add-product" data-component="recommendations">
1791						<div class="align-items-center d-flex">
1792							<div class="glider-arrow">
1793								<button aria-label="Previous" class="glider-prev disabled" aria-disabled="true"><span
1794										class="sr-only">Previous</span></button>
1795							</div>
1796							<div class="glider draggable">
1797
1798
1799
1800
1801
1802
1803
1804
1805								<div class="glider-track" style="width: 2740px;">
1806									<div class="item glider-slide active visible left-2"
1807										data-product-name="20mm Gravel/Shingle Single Trip - Large Bulk Bag"
1808										data-product-id="AGSTB007" data-product-price="112.02" data-product-position="1"
1809										data-gslide="0" style="height: auto; width: 342.5px;">
1810										<div class="product product--carousel">
1811											<a href="https://www.eder.info/"
1812												class="link-header link-header--primary">
1813												<div class="product__thumb">
1814													<picture class="product__image">
1815														<img alt="20mm Gravel/Shingle Single Trip - Large Bulk Bag"
1816															title="20mm Gravel/Shingle Single Trip - Large Bulk Bag"
1817															src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125">
1818													</picture>
1819												</div>
1820												<div class="product__name">HONDATOTO</div>
1821											</a>
1822											<div class="d-flex flex-column flex-grow-1">
1823												<p class="flex-grow-1 small" itemprop="sku">SKU: AGSTB007</p>
1824												<div class="loading-text js-recommendations-price-loading d-none">
1825													<div class="loading-text__text">Loading<span
1826															class="loading-text__ellipsis"></span></div>
1827												</div>
1828												<div class="price-missing__pbp js-recommendations-price-hidden">
1829													<a href="https://www.eder.info/">See
1830														price</a>
1831												</div>
1832												<div class="price price--medium d-none js-recommendations-price">
1833													<div class="price__value">£112.02</div>
1834												</div>
1835												<div class="plp__product-quantity mt-3 d-none js-recommendations-cta">
1836													<div class="product__quantity product__quantity-full js-product-quantity-holder js-add-to-cart-price-available mb-0"
1837														data-product-id="AGSTB007">
1838														<form id="addToCartForm-AGSTB007" novalidate="true"
1839															action="/trolley/add" method="post">
1840															<input type="hidden" name="productCode" value="AGSTB007"
1841																id="productCode-AGSTB007">
1842															<input type="hidden" name="CSRFToken"
1843																value="5ec27316-420b-4a0e-9757-26a66a9a1e6f">
1844															<div class="form-group form-group--minimal mb-0">
1845																<div
1846																	class="form-group product__quantity-block product__quantity-block--plp flex-wrap mb-0">
1847																	<div
1848																		class="js-quantity-modifier product__quantity-inputs mb-1 mr-1">
1849																		<fieldset>
1850																			<legend class="sr-only">Quantity</legend>
1851																			<div class="d-flex">
1852																				<div
1853																					class="product__quantity-input form-group__validation d-inline-block">
1854																					<div class="form-group__element">
1855																						<input id="quantity-AGSTB007"
1856																							name="qty" data-max="9999"
1857																							data-threshold="999"
1858																							value="1"
1859																							class="form-control form-control--quantity js-input-quantity"
1860																							data-min="1"
1861																							aria-label="Quantity input"
1862																							required="true"
1863																							type="number" size="2">
1864																					</div>
1865																				</div>
1866																				<div
1867																					class="product__quantity-inputs-modifiers d-flex flex-column">
1868																					<button
1869																						class="product__quantity-modify product__quantity-modify--plus"
1870																						aria-label="Quantity increase"
1871																						data-mode="increase"></button>
1872																					<button
1873																						class="product__quantity-modify product__quantity-modify--minus"
1874																						aria-label="Quantity decrease"
1875																						data-mode="decrease"
1876																						disabled=""></button>
1877																				</div>
1878																			</div>
1879																		</fieldset>
1880																	</div>
1881																	<div
1882																		class="product__quantity-button product__quantity-button--plp d-flex mb-1">
1883																		<button type="submit"
1884																			class="btn btn-primary btn--plp">
1885																			<span class="btn__text">Add to
1886																				trolley</span>
1887																		</button>
1888																	</div>
1889																</div>
1890															</div>
1891														</form>
1892													</div>
1893												</div>
1894											</div>
1895										</div>
1896									</div>
1897									<div class="item glider-slide left-1 visible"
1898										data-product-name="20mm Gravel/Shingle Handy Bag" data-product-id="AGSML007"
1899										data-product-price="6.06" data-product-position="2" data-gslide="1"
1900										style="height: auto; width: 342.5px;">
1901										<div class="product product--carousel">
1902											<a href="https://www.eder.info/"
1903												class="link-header link-header--primary">
1904												<div class="product__thumb">
1905													<picture class="product__image">
1906														<img alt="Slot Gacor" title="Slot Gacor"
1907															src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125">
1908													</picture>
1909												</div>
1910												<div class="product__name">Slot Gacor</div>
1911											</a>
1912											<div class="d-flex flex-column flex-grow-1">
1913												<p class="flex-grow-1 small" itemprop="sku">SKU: AGSML007</p>
1914												<div class="loading-text js-recommendations-price-loading d-none">
1915													<div class="loading-text__text">Loading<span
1916															class="loading-text__ellipsis"></span></div>
1917												</div>
1918												<div class="price-missing__pbp js-recommendations-price-hidden">
1919													<a href="https://www.eder.info/">See
1920														price</a>
1921												</div>
1922												<div class="price price--medium d-none js-recommendations-price">
1923													<div class="price__value">£6.06</div>
1924												</div>
1925												<div class="plp__product-quantity mt-3 d-none js-recommendations-cta">
1926													<div class="product__quantity product__quantity-full js-product-quantity-holder js-add-to-cart-price-available mb-0"
1927														data-product-id="AGSML007">
1928														<form id="addToCartForm-AGSML007" novalidate="true"
1929															action="/trolley/add" method="post">
1930															<input type="hidden" name="productCode" value="AGSML007"
1931																id="productCode-AGSML007">
1932															<input type="hidden" name="CSRFToken"
1933																value="5ec27316-420b-4a0e-9757-26a66a9a1e6f">
1934															<div class="form-group form-group--minimal mb-0">
1935																<div
1936																	class="form-group product__quantity-block product__quantity-block--plp flex-wrap mb-0">
1937																	<div
1938																		class="js-quantity-modifier product__quantity-inputs mb-1 mr-1">
1939																		<fieldset>
1940																			<legend class="sr-only">Quantity</legend>
1941																			<div class="d-flex">
1942																				<div
1943																					class="product__quantity-input form-group__validation d-inline-block">
1944																					<div class="form-group__element">
1945																						<input id="quantity-AGSML007"
1946																							name="qty" data-max="9999"
1947																							data-threshold="999"
1948																							value="1"
1949																							class="form-control form-control--quantity js-input-quantity"
1950																							data-min="1"
1951																							aria-label="Quantity input"
1952																							required="true"
1953																							type="number" size="2">
1954																					</div>
1955																				</div>
1956																				<div
1957																					class="product__quantity-inputs-modifiers d-flex flex-column">
1958																					<button
1959																						class="product__quantity-modify product__quantity-modify--plus"
1960																						aria-label="Quantity increase"
1961																						data-mode="increase"></button>
1962																					<button
1963																						class="product__quantity-modify product__quantity-modify--minus"
1964																						aria-label="Quantity decrease"
1965																						data-mode="decrease"
1966																						disabled=""></button>
1967																				</div>
1968																			</div>
1969																		</fieldset>
1970																	</div>
1971																	<div
1972																		class="product__quantity-button product__quantity-button--plp d-flex mb-1">
1973																		<button type="submit"
1974																			class="btn btn-primary btn--plp">
1975																			<span class="btn__text">Add to
1976																				trolley</span>
1977																		</button>
1978																	</div>
1979																</div>
1980															</div>
1981														</form>
1982													</div>
1983												</div>
1984											</div>
1985										</div>
1986									</div>
1987									<div class="item glider-slide center visible"
1988										data-product-name="10mm Gravel/Shingle Single Trip - Large Bulk Bag"
1989										data-product-id="AGSTB006" data-product-price="112.02" data-product-position="3"
1990										data-gslide="2" style="height: auto; width: 342.5px;">
1991										<div class="product product--carousel">
1992											<a href="https://www.eder.info/"
1993												class="link-header link-header--primary">
1994												<div class="product__thumb">
1995													<picture class="product__image">
1996														<img alt="Slot Online" title="Slot Online"
1997															src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125">
1998													</picture>
1999												</div>
2000												<div class="product__name">Slot Online</div>
2001											</a>
2002											<div class="d-flex flex-column flex-grow-1">
2003												<p class="flex-grow-1 small" itemprop="sku">SKU: AGSTB006</p>
2004												<div class="loading-text js-recommendations-price-loading d-none">
2005													<div class="loading-text__text">Loading<span
2006															class="loading-text__ellipsis"></span></div>
2007												</div>
2008												<div class="price-missing__pbp js-recommendations-price-hidden">
2009													<a href="https://www.eder.info/">See
2010														price</a>
2011												</div>
2012												<div class="price price--medium d-none js-recommendations-price">
2013													<div class="price__value">£112.02</div>
2014												</div>
2015												<div class="plp__product-quantity mt-3 d-none js-recommendations-cta">
2016													<div class="product__quantity product__quantity-full js-product-quantity-holder js-add-to-cart-price-available mb-0"
2017														data-product-id="AGSTB006">
2018														<form id="addToCartForm-AGSTB006" novalidate="true"
2019															action="/trolley/add" method="post">
2020															<input type="hidden" name="productCode" value="AGSTB006"
2021																id="productCode-AGSTB006">
2022															<input type="hidden" name="CSRFToken"
2023																value="5ec27316-420b-4a0e-9757-26a66a9a1e6f">
2024															<div class="form-group form-group--minimal mb-0">
2025																<div
2026																	class="form-group product__quantity-block product__quantity-block--plp flex-wrap mb-0">
2027																	<div
2028																		class="js-quantity-modifier product__quantity-inputs mb-1 mr-1">
2029																		<fieldset>
2030																			<legend class="sr-only">Quantity</legend>
2031																			<div class="d-flex">
2032																				<div
2033																					class="product__quantity-input form-group__validation d-inline-block">
2034																					<div class="form-group__element">
2035																						<input id="quantity-AGSTB006"
2036																							name="qty" data-max="9999"
2037																							data-threshold="999"
2038																							value="1"
2039																							class="form-control form-control--quantity js-input-quantity"
2040																							data-min="1"
2041																							aria-label="Quantity input"
2042																							required="true"
2043																							type="number" size="2">
2044																					</div>
2045																				</div>
2046																				<div
2047																					class="product__quantity-inputs-modifiers d-flex flex-column">
2048																					<button
2049																						class="product__quantity-modify product__quantity-modify--plus"
2050																						aria-label="Quantity increase"
2051																						data-mode="increase"></button>
2052																					<button
2053																						class="product__quantity-modify product__quantity-modify--minus"
2054																						aria-label="Quantity decrease"
2055																						data-mode="decrease"
2056																						disabled=""></button>
2057																				</div>
2058																			</div>
2059																		</fieldset>
2060																	</div>
2061																	<div
2062																		class="product__quantity-button product__quantity-button--plp d-flex mb-1">
2063																		<button type="submit"
2064																			class="btn btn-primary btn--plp">
2065																			<span class="btn__text">Add to
2066																				trolley</span>
2067																		</button>
2068																	</div>
2069																</div>
2070															</div>
2071														</form>
2072													</div>
2073												</div>
2074											</div>
2075										</div>
2076									</div>
2077									<div class="item glider-slide center"
2078										data-product-name="Jewson Scalpings Single Trip - Large Bulk Bag"
2079										data-product-id="AGSTB017" data-product-price="110.56" data-product-position="4"
2080										data-gslide="3" style="height: auto; width: 342.5px;">
2081										<div class="product product--carousel">
2082											<a href="https://www.eder.info/"
2083												class="link-header link-header--primary">
2084												<div class="product__thumb">
2085													<picture class="product__image">
2086														<img alt="Bandar Slot" title="Bandar Slot"
2087															src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125">
2088													</picture>
2089												</div>
2090												<div class="product__name">Bandar Slot
2091												</div>
2092											</a>
2093											<div class="d-flex flex-column flex-grow-1">
2094												<p class="flex-grow-1 small" itemprop="sku">SKU: AGSTB017</p>
2095												<div class="loading-text js-recommendations-price-loading d-none">
2096													<div class="loading-text__text">Loading<span
2097															class="loading-text__ellipsis"></span></div>
2098												</div>
2099												<div class="price-missing__pbp js-recommendations-price-hidden">
2100													<a href="https://www.eder.info/">See
2101														price</a>
2102												</div>
2103												<div class="price price--medium d-none js-recommendations-price">
2104													<div class="price__value">£110.56</div>
2105												</div>
2106												<div class="plp__product-quantity mt-3 d-none js-recommendations-cta">
2107													<div class="product__quantity product__quantity-full js-product-quantity-holder js-add-to-cart-price-available mb-0"
2108														data-product-id="AGSTB017">
2109														<form id="addToCartForm-AGSTB017" novalidate="true"
2110															action="/trolley/add" method="post">
2111															<input type="hidden" name="productCode" value="AGSTB017"
2112																id="productCode-AGSTB017">
2113															<input type="hidden" name="CSRFToken"
2114																value="5ec27316-420b-4a0e-9757-26a66a9a1e6f">
2115															<div class="form-group form-group--minimal mb-0">
2116																<div
2117																	class="form-group product__quantity-block product__quantity-block--plp flex-wrap mb-0">
2118																	<div
2119																		class="js-quantity-modifier product__quantity-inputs mb-1 mr-1">
2120																		<fieldset>
2121																			<legend class="sr-only">Quantity</legend>
2122																			<div class="d-flex">
2123																				<div
2124																					class="product__quantity-input form-group__validation d-inline-block">
2125																					<div class="form-group__element">
2126																						<input id="quantity-AGSTB017"
2127																							name="qty" data-max="9999"
2128																							data-threshold="999"
2129																							value="1"
2130																							class="form-control form-control--quantity js-input-quantity"
2131																							data-min="1"
2132																							aria-label="Quantity input"
2133																							required="true"
2134																							type="number" size="2">
2135																					</div>
2136																				</div>
2137																				<div
2138																					class="product__quantity-inputs-modifiers d-flex flex-column">
2139																					<button
2140																						class="product__quantity-modify product__quantity-modify--plus"
2141																						aria-label="Quantity increase"
2142																						data-mode="increase"></button>
2143																					<button
2144																						class="product__quantity-modify product__quantity-modify--minus"
2145																						aria-label="Quantity decrease"
2146																						data-mode="decrease"
2147																						disabled=""></button>
2148																				</div>
2149																			</div>
2150																		</fieldset>
2151																	</div>
2152																	<div
2153																		class="product__quantity-button product__quantity-button--plp d-flex mb-1">
2154																		<button type="submit"
2155																			class="btn btn-primary btn--plp">
2156																			<span class="btn__text">Add to
2157																				trolley</span>
2158																		</button>
2159																	</div>
2160																</div>
2161															</div>
2162														</form>
2163													</div>
2164												</div>
2165											</div>
2166										</div>
2167									</div>
2168									<div class="item glider-slide right-1"
2169										data-product-name="Building Sand Single Trip - Large Bulk Bag"
2170										data-product-id="AGSTB001" data-product-price="107.82" data-product-position="5"
2171										data-gslide="4" style="height: auto; width: 342.5px;">
2172										<div class="product product--carousel">
2173											<a href="https://www.eder.info/"
2174												class="link-header link-header--primary">
2175												<div class="product__thumb">
2176													<picture class="product__image">
2177														<img alt="HONDATOTO Resmi" title="HONDATOTO Resmi"
2178															src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125">
2179													</picture>
2180												</div>
2181												<div class="product__name">HONDATOTO Resmi
2182												</div>
2183											</a>
2184											<div class="d-flex flex-column flex-grow-1">
2185												<p class="flex-grow-1 small" itemprop="sku">SKU: AGSTB001</p>
2186												<div class="loading-text js-recommendations-price-loading d-none">
2187													<div class="loading-text__text">Loading<span
2188															class="loading-text__ellipsis"></span></div>
2189												</div>
2190												<div class="price-missing__pbp js-recommendations-price-hidden">
2191													<a href="https://www.eder.info/">See
2192														price</a>
2193												</div>
2194												<div class="price price--medium d-none js-recommendations-price">
2195													<div class="price__value">£107.82</div>
2196												</div>
2197												<div class="plp__product-quantity mt-3 d-none js-recommendations-cta">
2198													<div class="product__quantity product__quantity-full js-product-quantity-holder js-add-to-cart-price-available mb-0"
2199														data-product-id="AGSTB001">
2200														<form id="addToCartForm-AGSTB001" novalidate="true"
2201															action="/trolley/add" method="post">
2202															<input type="hidden" name="productCode" value="AGSTB001"
2203																id="productCode-AGSTB001">
2204															<input type="hidden" name="CSRFToken"
2205																value="5ec27316-420b-4a0e-9757-26a66a9a1e6f">
2206															<div class="form-group form-group--minimal mb-0">
2207																<div
2208																	class="form-group product__quantity-block product__quantity-block--plp flex-wrap mb-0">
2209																	<div
2210																		class="js-quantity-modifier product__quantity-inputs mb-1 mr-1">
2211																		<fieldset>
2212																			<legend class="sr-only">Quantity</legend>
2213																			<div class="d-flex">
2214																				<div
2215																					class="product__quantity-input form-group__validation d-inline-block">
2216																					<div class="form-group__element">
2217																						<input id="quantity-AGSTB001"
2218																							name="qty" data-max="9999"
2219																							data-threshold="999"
2220																							value="1"
2221																							class="form-control form-control--quantity js-input-quantity"
2222																							data-min="1"
2223																							aria-label="Quantity input"
2224																							required="true"
2225																							type="number" size="2">
2226																					</div>
2227																				</div>
2228																				<div
2229																					class="product__quantity-inputs-modifiers d-flex flex-column">
2230																					<button
2231																						class="product__quantity-modify product__quantity-modify--plus"
2232																						aria-label="Quantity increase"
2233																						data-mode="increase"></button>
2234																					<button
2235																						class="product__quantity-modify product__quantity-modify--minus"
2236																						aria-label="Quantity decrease"
2237																						data-mode="decrease"
2238																						disabled=""></button>
2239																				</div>
2240																			</div>
2241																		</fieldset>
2242																	</div>
2243																	<div
2244																		class="product__quantity-button product__quantity-button--plp d-flex mb-1">
2245																		<button type="submit"
2246																			class="btn btn-primary btn--plp">
2247																			<span class="btn__text">Add to
2248																				trolley</span>
2249																		</button>
2250																	</div>
2251																</div>
2252															</div>
2253														</form>
2254													</div>
2255												</div>
2256											</div>
2257										</div>
2258									</div>
2259									<div class="item glider-slide right-2"
2260										data-product-name="MOT Type-1 Sub-Base Handy Bag" data-product-id="AGSML020"
2261										data-product-price="6.86" data-product-position="6" data-gslide="5"
2262										style="height: auto; width: 342.5px;">
2263										<div class="product product--carousel">
2264											<a href="https://www.eder.info/"
2265												class="link-header link-header--primary">
2266												<div class="product__thumb">
2267													<picture class="product__image">
2268														<img alt="HONDATOTO Slot" title="HONDATOTO Slot"
2269															src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125">
2270													</picture>
2271												</div>
2272												<div class="product__name">HONDATOTO Slot</div>
2273											</a>
2274											<div class="d-flex flex-column flex-grow-1">
2275												<p class="flex-grow-1 small" itemprop="sku">SKU: AGSML020</p>
2276												<div class="loading-text js-recommendations-price-loading d-none">
2277													<div class="loading-text__text">Loading<span
2278															class="loading-text__ellipsis"></span></div>
2279												</div>
2280												<div class="price-missing__pbp js-recommendations-price-hidden">
2281													<a href="https://www.eder.info/">See
2282														price</a>
2283												</div>
2284												<div class="price price--medium d-none js-recommendations-price">
2285													<div class="price__value">£6.86</div>
2286												</div>
2287												<div class="plp__product-quantity mt-3 d-none js-recommendations-cta">
2288													<div class="product__quantity product__quantity-full js-product-quantity-holder js-add-to-cart-price-available mb-0"
2289														data-product-id="AGSML020">
2290														<form id="addToCartForm-AGSML020" novalidate="true"
2291															action="/trolley/add" method="post">
2292															<input type="hidden" name="productCode" value="AGSML020"
2293																id="productCode-AGSML020">
2294															<input type="hidden" name="CSRFToken"
2295																value="5ec27316-420b-4a0e-9757-26a66a9a1e6f">
2296															<div class="form-group form-group--minimal mb-0">
2297																<div
2298																	class="form-group product__quantity-block product__quantity-block--plp flex-wrap mb-0">
2299																	<div
2300																		class="js-quantity-modifier product__quantity-inputs mb-1 mr-1">
2301																		<fieldset>
2302																			<legend class="sr-only">Quantity</legend>
2303																			<div class="d-flex">
2304																				<div
2305																					class="product__quantity-input form-group__validation d-inline-block">
2306																					<div class="form-group__element">
2307																						<input id="quantity-AGSML020"
2308																							name="qty" data-max="9999"
2309																							data-threshold="999"
2310																							value="1"
2311																							class="form-control form-control--quantity js-input-quantity"
2312																							data-min="1"
2313																							aria-label="Quantity input"
2314																							required="true"
2315																							type="number" size="2">
2316																					</div>
2317																				</div>
2318																				<div
2319																					class="product__quantity-inputs-modifiers d-flex flex-column">
2320																					<button
2321																						class="product__quantity-modify product__quantity-modify--plus"
2322																						aria-label="Quantity increase"
2323																						data-mode="increase"></button>
2324																					<button
2325																						class="product__quantity-modify product__quantity-modify--minus"
2326																						aria-label="Quantity decrease"
2327																						data-mode="decrease"
2328																						disabled=""></button>
2329																				</div>
2330																			</div>
2331																		</fieldset>
2332																	</div>
2333																	<div
2334																		class="product__quantity-button product__quantity-button--plp d-flex mb-1">
2335																		<button type="submit"
2336																			class="btn btn-primary btn--plp">
2337																			<span class="btn__text">Add to
2338																				trolley</span>
2339																		</button>
2340																	</div>
2341																</div>
2342															</div>
2343														</form>
2344													</div>
2345												</div>
2346											</div>
2347										</div>
2348									</div>
2349									<div class="item glider-slide right-3"
2350										data-product-name="FSC Sawn Carcassing Treated Green 19 x 100 x 1800mm"
2351										data-product-id="SZGFGR18" data-product-price="3.44" data-product-position="7"
2352										data-gslide="6" style="height: auto; width: 342.5px;">
2353										<div class="product product--carousel">
2354											<a href="https://www.eder.info/"
2355												class="link-header link-header--primary">
2356												<div class="product__thumb">
2357													<picture class="product__image">
2358														<img alt="Bandar Slot" title="Bandar Slot"
2359															src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125">
2360													</picture>
2361												</div>
2362												<div class="product__name">Bandar Slot</div>
2363											</a>
2364											<div class="d-flex flex-column flex-grow-1">
2365												<p class="flex-grow-1 small" itemprop="sku">SKU: SZGFGR18</p>
2366												<div class="loading-text js-recommendations-price-loading d-none">
2367													<div class="loading-text__text">Loading<span
2368															class="loading-text__ellipsis"></span></div>
2369												</div>
2370												<div class="price-missing__pbp js-recommendations-price-hidden">
2371													<a href="https://www.eder.info/">See
2372														price</a>
2373												</div>
2374												<div class="price price--medium d-none js-recommendations-price">
2375													<div class="price__value">£3.44</div>
2376												</div>
2377												<div class="plp__product-quantity mt-3 d-none js-recommendations-cta">
2378													<div class="product__quantity product__quantity-full js-product-quantity-holder js-add-to-cart-price-available mb-0"
2379														data-product-id="SZGFGR18">
2380														<form id="addToCartForm-SZGFGR18" novalidate="true"
2381															action="/trolley/add" method="post">
2382															<input type="hidden" name="productCode" value="SZGFGR18"
2383																id="productCode-SZGFGR18">
2384															<input type="hidden" name="CSRFToken"
2385																value="5ec27316-420b-4a0e-9757-26a66a9a1e6f">
2386															<div class="form-group form-group--minimal mb-0">
2387																<div
2388																	class="form-group product__quantity-block product__quantity-block--plp flex-wrap mb-0">
2389																	<div
2390																		class="js-quantity-modifier product__quantity-inputs mb-1 mr-1">
2391																		<fieldset>
2392																			<legend class="sr-only">Quantity</legend>
2393																			<div class="d-flex">
2394																				<div
2395																					class="product__quantity-input form-group__validation d-inline-block">
2396																					<div class="form-group__element">
2397																						<input id="quantity-SZGFGR18"
2398																							name="qty" data-max="9999"
2399																							data-threshold="999"
2400																							value="1"
2401																							class="form-control form-control--quantity js-input-quantity"
2402																							data-min="1"
2403																							aria-label="Quantity input"
2404																							required="true"
2405																							type="number" size="2">
2406																					</div>
2407																				</div>
2408																				<div
2409																					class="product__quantity-inputs-modifiers d-flex flex-column">
2410																					<button
2411																						class="product__quantity-modify product__quantity-modify--plus"
2412																						aria-label="Quantity increase"
2413																						data-mode="increase"></button>
2414																					<button
2415																						class="product__quantity-modify product__quantity-modify--minus"
2416																						aria-label="Quantity decrease"
2417																						data-mode="decrease"
2418																						disabled=""></button>
2419																				</div>
2420																			</div>
2421																		</fieldset>
2422																	</div>
2423																	<div
2424																		class="product__quantity-button product__quantity-button--plp d-flex mb-1">
2425																		<button type="submit"
2426																			class="btn btn-primary btn--plp">
2427																			<span class="btn__text">Add to
2428																				trolley</span>
2429																		</button>
2430																	</div>
2431																</div>
2432															</div>
2433														</form>
2434													</div>
2435												</div>
2436											</div>
2437										</div>
2438									</div>
2439									<div class="item glider-slide right-4"
2440										data-product-name="Grit Sand Single Trip - Large Bulk Bag"
2441										data-product-id="AGSTB015" data-product-price="111.56" data-product-position="8"
2442										data-gslide="7" style="height: auto; width: 342.5px;">
2443										<div class="product product--carousel">
2444											<a href="https://www.eder.info/"
2445												class="link-header link-header--primary">
2446												<div class="product__thumb">
2447													<picture class="product__image">
2448														<img alt="HONDATOTO Utama" title="HONDATOTO Utama"
2449															src="https://veldrive.com/LTWfp312/BANNER-HONDATOTO/Pusat%20Globalisasi%20Bandar%20Toto%20Slot%20Resmi%20Dengan%20Ratusan%20Permainan%20Slot%20Gacor.png?updatedAt=1779457881125">
2450													</picture>
2451												</div>
2452												<div class="product__name">HONDATOTO Utama</div>
2453											</a>
2454											<div class="d-flex flex-column flex-grow-1">
2455												<p class="flex-grow-1 small" itemprop="sku">SKU: AGSTB015</p>
2456												<div class="loading-text js-recommendations-price-loading d-none">
2457													<div class="loading-text__text">Loading<span
2458															class="loading-text__ellipsis"></span></div>
2459												</div>
2460												<div class="price-missing__pbp js-recommendations-price-hidden">
2461													<a href="https://www.eder.info/">See
2462														price</a>
2463												</div>
2464												<div class="price price--medium d-none js-recommendations-price">
2465													<div class="price__value">£111.56</div>
2466												</div>
2467												<div class="plp__product-quantity mt-3 d-none js-recommendations-cta">
2468													<div class="product__quantity product__quantity-full js-product-quantity-holder js-add-to-cart-price-available mb-0"
2469														data-product-id="AGSTB015">
2470														<form id="addToCartForm-AGSTB015" novalidate="true"
2471															action="/trolley/add" method="post">
2472															<input type="hidden" name="productCode" value="AGSTB015"
2473																id="productCode-AGSTB015">
2474															<input type="hidden" name="CSRFToken"
2475																value="5ec27316-420b-4a0e-9757-26a66a9a1e6f">
2476															<div class="form-group form-group--minimal mb-0">
2477																<div
2478																	class="form-group product__quantity-block product__quantity-block--plp flex-wrap mb-0">
2479																	<div
2480																		class="js-quantity-modifier product__quantity-inputs mb-1 mr-1">
2481																		<fieldset>
2482																			<legend class="sr-only">Quantity</legend>
2483																			<div class="d-flex">
2484																				<div
2485																					class="product__quantity-input form-group__validation d-inline-block">
2486																					<div class="form-group__element">
2487																						<input id="quantity-AGSTB015"
2488																							name="qty" data-max="9999"
2489																							data-threshold="999"
2490																							value="1"
2491																							class="form-control form-control--quantity js-input-quantity"
2492																							data-min="1"
2493																							aria-label="Quantity input"
2494																							required="true"
2495																							type="number" size="2">
2496																					</div>
2497																				</div>
2498																				<div
2499																					class="product__quantity-inputs-modifiers d-flex flex-column">
2500																					<button
2501																						class="product__quantity-modify product__quantity-modify--plus"
2502																						aria-label="Quantity increase"
2503																						data-mode="increase"></button>
2504																					<button
2505																						class="product__quantity-modify product__quantity-modify--minus"
2506																						aria-label="Quantity decrease"
2507																						data-mode="decrease"
2508																						disabled=""></button>
2509																				</div>
2510																			</div>
2511																		</fieldset>
2512																	</div>
2513																	<div
2514																		class="product__quantity-button product__quantity-button--plp d-flex mb-1">
2515																		<button type="submit"
2516																			class="btn btn-primary btn--plp">
2517																			<span class="btn__text">Add to
2518																				trolley</span>
2519																		</button>
2520																	</div>
2521																</div>
2522															</div>
2523														</form>
2524													</div>
2525												</div>
2526											</div>
2527										</div>
2528									</div>
2529								</div>
2530							</div>
2531							<div class="glider-arrow">
2532								<button aria-label="Next" class="glider-next" aria-disabled="false"><span
2533										class="sr-only">Next</span></button>
2534							</div>
2535						</div>
2536						<div role="tablist" class="dots glider-dots"><button data-index="0" aria-label="Page 1"
2537								role="tab" class="glider-dot active"></button><button data-index="1" aria-label="Page 2"
2538								role="tab" class="glider-dot "></button></div>
2539					</div>
2540				</div>
2541				<div id="alternativeProductsCompponent">
2542					<div class="yCmsContentSlot js-track-carousel" data-slotname="AlternativeProducts">
2543					</div>
2544				</div>
2545				<div class="yCmsContentSlot js-track-carousel" data-slotname="UpSelling">
2546				</div>
2547				<div class="yCmsContentSlot js-track-carousel" data-slotname="CrossSelling">
2548				</div>
2549				
2549<script type="text/javascript">
2550					var ACC = ACC || {};
2551					ACC.checkStockMessages = {
2552						stockShowFullDetailsLink: 'Full branch details',
2553						selectThisStoreButton: 'Select branch',
2554						nearestStoreMessage1: 'Your nearest',
2555						nearestStoreMessage2: 'HONDATOTOs',
2556						stockClosedMessage: 'Closed',
2557						stockOpenMessage: 'Open',
2558						stockTodayMessage: 'today',
2559						selectDeliveryButton: 'Select delivery',
2560						stockDeliveryToMessage: 'Delivery to',
2561						stockAvailableMessage: 'Available',
2562						stockEmptyMessage: 'Out of stock',
2563						stockEmptyMessageDropship: 'Product unavailable for collection',
2564						stockCollectTomorrowMessage: 'Available to collect tomorrow from',
2565						stockCollectFromMessage: 'Available to collect from',
2566						stockCollectTodayMessage: 'Available to collect today from',
2567						stockCollectTodayAfterOpeningMessage: 'Available to collect tomorrow from',
2568						remoteDeliveryMessage: "(subject to location)",
2569						deliveryUnavailableMessage: 'Out of stock',
2570						deliveryAvailableMessage: 'Available for delivery',
2571						collectionAverageSupplierLeadTimeMessage_1_TO_3_DAYS: 'Available to collect in approximately 1-3 working days',
2572						collectionAverageSupplierLeadTimeMessage_4_TO_7_DAYS: 'Available to collect in approximately 4-7 working days',
2573						collectionAverageSupplierLeadTimeMessage_1_TO_2_WEEKS: 'Available to collect in approximately 1-2 weeks',
2574						collectionAverageSupplierLeadTimeMessage_2_TO_4_WEEKS: 'Available to collect in approximately 2-4 weeks',
2575						collectionAverageSupplierLeadTimeMessage_4_TO_8_WEEKS: 'Available to collect in approximately 4-8 weeks',
2576						collectionAverageSupplierLeadTimeMessage_6_TO_12_WEEKS: 'Available to collect in approximately 6-12 weeks',
2577						collectionAverageSupplierLeadTimeMessage_CONTACT_BRANCH: 'We will contact you to discuss a collection date upon purchase.',
2578						deliveryAverageSupplierLeadTimeMessage_1_TO_3_DAYS: 'Available for delivery in approximately 1-3 working days',
2579						deliveryAverageSupplierLeadTimeMessage_4_TO_7_DAYS: 'Available for delivery in approximately 4-7 working days',
2580						deliveryAverageSupplierLeadTimeMessage_1_TO_2_WEEKS: 'Available for delivery in approximately 1-2 weeks',
2581						deliveryAverageSupplierLeadTimeMessage_2_TO_4_WEEKS: 'Available for delivery in approximately 2-4 weeks',
2582						deliveryAverageSupplierLeadTimeMessage_4_TO_8_WEEKS: 'Available for delivery in approximately 4-8 weeks',
2583						deliveryAverageSupplierLeadTimeMessage_6_TO_12_WEEKS: 'Available for delivery in approximately 6-12 weeks',
2584						deliveryAverageSupplierLeadTimeMessage_CONTACT_BRANCH: 'We will contact you to discuss a delivery date upon purchase.',
2585						supplierChallengeLeadTimeMessage: 'Please see trolley for availability',
2586						hasAlternativeProducts: false,
2587						productAlternativesMessage: 'View alternative products',
2588						alternativeMessageSingle: 'Consider this alternative...',
2589						alternativeMessage2To3: 'Consider these',
2590						alternativeMessage4More: 'Consider this list of',
2591						alternativesMessageSuffix: 'alternatives...',
2592						alternativesMoreDetails: 'More Details',
2593						alternativesViewAll: 'View All',
2594						alternativesMissingThumbnail: '/_ui/responsive/common/images/missing-product-96x96.png',
2595						alternativesContactBranchForPrice: 'Contact branch for price',
2596						increasedLeadTimeMessage: '',
2597						notBlankProductStockCheckFormProductCode: 'Please enter your postcode to proceed',
2598						isB2BUser: false,
2599						showVatPrices: true
2600					}
2601				</script>
2601
2602
2603				<div class="modal micromodal-slide check-stock-modal" id="modal-pdp-stock" aria-hidden="true">
2604					<div class="modal__overlay" tabindex="-1" data-micromodal-close>
2605						<div class="modal__container check-stock-modal__container" role="dialog" aria-modal="true">
2606							<header class="modal__header check-stock-modal__header">
2607								<h3 class="modal__title" id="modal-pdp-stock-title">
2608									Check for your nearest stock</h3>
2609								<button class="modal__close" aria-label="Close" data-micromodal-close>Close</button>
2610							</header>
2611							<div class="modal__content check-stock-modal__content my-2" id="modal-pdp-stockcontent">
2612								<div class="js-stock-check-form check-stock-modal__form">
2613									<div class="row">
2614										<div class="col-md-9">
2615											<form id="pdpStockCheckFormModal" class="form-postcode js-store-search"
2616												action="#" method="post">
2617												<div class="input-group form-group mb-2">
2618													<div class="form-group__validation flex-grow-1">
2619														<div class="form-group__element">
2620															<input type="text" id="storeSearch" class="form-control"
2621																name="locationQuery" placeholder="Postcode"
2622																aria-label="Postcode" />
2623														</div>
2624													</div>
2625													<div class="d-flex">
2626														<span class="input-group-btn flex-grow-1">
2627															<div class="form-group m-0 ml-sm-1 text-center h-100">
2628																<button
2629																	class="btn btn-primary btn--branch-search h-100 js-modal-nearest-stock-modal">
2630																	Search</button>
2631															</div>
2632														</span>
2633														<span class="input-group-btn">
2634															<div class="form-group m-0 ml-1 text-center h-100">
2635																<button
2636																	class="btn btn-tertiary btn--branch-search-location glyph glyph--current-location h-100"
2637																	data-modal-geolocate />
2638																<span class="sr-only">Use my location</span>
2639																</button>
2640															</div>
2641														</span>
2642													</div>
2643												</div>
2644												<div class="input-group">
2645													<div class="form-group checkbox mb-0">
2646														<input id="inStock" data-validation-for="checkbox"
2647															required="false" name="inStock" role="group"
2648															class="checkbox__input sr-only js-checkbox-stock"
2649															type="checkbox" value="inStock"
2650															aria-labelledby="inStockLabel" checked>
2651														<label id="inStockLabel" class="checkbox__label mb-0 strong"
2652															for="inStock">
2653															Show nearest branches with stock</label>
2654													</div>
2655												</div>
2656												<input id="pdpModalCollectionLastPostcode" name="collectionLastPostcode"
2657													type="hidden" value="" /><input id="pdpModalproductCode"
2658													name="productCode" type="hidden" value="CDPW0469" /><input
2659													id="pdpModalCurrentPage" name="currentPage" value="0" type="hidden"
2660													value="" />
2661												<div>
2662													<input type="hidden" name="CSRFToken"
2663														value="5ec27316-420b-4a0e-9757-26a66a9a1e6f" />
2664												</div>
2665											</form>
2666										</div>
2667									</div>
2668								</div>
2669
2670								<div class="js-stock-check-results js-remember-fulfillment check-stock-modal__results">
2671									<div class="js-store-search-error"></div>
2672									<hr class="hr--default" />
2673									<div class="mb-2">
2674										<p class="strong mb-0">Stock is confirmed once you reserve your order</p>
2675										<p class="js-alt-stock-messaging d-none">It is your responsibility when choosing
2676											suitable alternatives for your needs</p>
2677									</div>
2678									<div class="tabs tabs--stretch tabs--pdp" data-tabs>
2679										<ul class="tabs__list" role="tablist">
2680											<li class="tabs__list-item active">
2681												<a class="tabs__link" href="#collection" data-tabs-head
2682													data-pdp-select="collection"><span class="d-none d-md-block">Click
2683														&amp; Collect Branches</span><span
2684														class="d-md-none">Collection</span></a>
2685											</li>
2686											<li class="tabs__list-item">
2687												<a class="tabs__link" href="#delivery" data-tabs-head
2688													data-pdp-select="delivery"><span
2689														class="d-none d-md-block">Delivery</span><span
2690														class="d-md-none">Delivery</span></a>
2691											</li>
2692										</ul>
2693										<div class="tabs__content">
2694											<div data-tabs-content class="tabs__content-panel active" id="collection">
2695												<div class="tabs__content-panel-results"></div>
2696												<div id="loadMoreSection"
2697													class="text-center check-stock-modal__load-more">
2698													<form id="pdpStockCheckFormSection" class="js-store-search"
2699														action="#" method="post"><input type="hidden"
2700															id="loadMoreSectionStoreSearch"
2701															class="form-control form-control--search"
2702															name="locationQuery" />
2703
2704														<div class="text-center px-2">
2705															<button type="submit"
2706																class="btn btn-tertiary mt-1 mb-1 mb-md-0 js-modal-nearest-stock-modal"
2707																id="loadMoreButton">
2708																Load More</button>
2709														</div>
2710
2711														<input type="hidden" id="pdpLoadMoreSectionCurrentPage"
2712															name="currentPage" />
2713														<input type="hidden" id="pdpLoadMoreSectionInStock"
2714															required="false" name="inStock">
2715
2716														<input id="pdpLoadMoreSectionProductCode" name="productC
2716ode"
2717															type="hidden" value="CDPW0469" />
2718														<div>
2719															<input type="hidden" name="CSRFToken"
2720																value="5ec27316-420b-4a0e-9757-26a66a9a1e6f" />
2721														</div>
2722													</form>
2723												</div>
2724											</div>
2725											<div data-tabs-content class="tabs__content-panel" id="delivery">
2726												<div class="tabs__content-panel-results"></div>
2727											</div>
2728										</div>
2729									</div>
2730								</div>
2731							</div>
2732						</div>
2733					</div>
2734				</div>
2735			</div>
2736		</div>
2737
2738		<div id="js-modals-container">
2739
2740		</div>
2741
2742	</main>
2743	<footer class="footer" data-tracking-block="footer">
2744
2745
2746		<div class="footer__inner" data-tracking-position="quick-links">
2747			<div class="container">
2748				<div class="row">
2749					<div class="accordion accordion--xs accordion--all js-accordion col-12">
2750						<div class="row m-0">
2751							<div class="footer__section col-12 col-lg-3">
2752								<div class="accordion-toggle__content mb-0 js-accordion-content">
2753									<span
2754										class="h3 footer__heading footer__heading--accordion accordion-toggle__title js-accordion-toggle">
2755										Helpful links</span>
2756									<div class="accordion-toggle__inner">
2757										<ul class="footer__list">
2758											<li class="yCmsComponent">
2759												<a href="https://www.eder.info/"
2760													title="Branch locator">Branch locator</a>
2761											</li>
2762											<li class="yCmsComponent">
2763												<a href="https://www.eder.info/"
2764													title="Delivery & collection information">Delivery & collection
2765													information</a>
2766											</li>
2767											<li class="yCmsComponent">
2768												<a href="https://www.eder.info/"
2769													title="E-billing & paying your account">E-billing & paying your
2770													account</a>
2771											</li>
2772											<li class="yCmsComponent">
2773												<a href="https://www.eder.info/"
2774													title="Product recall">Product recall</a>
2775											</li>
2776											<li class="yCmsComponent">
2777												<a href="https://www.eder.info/"
2778													title="Promotions">Promotions</a>
2779											</li>
2780											<li class="yCmsComponent">
2781												<a href="https://www.eder.info/"
2782													title="Returns policy">Returns
2783													policy</a>
2784											</li>
2785											<li class="yCmsComponent">
2786												<a href="https://www.eder.info/"
2787													title="Shop by brand">Shop by brand</a>
2788											</li>
2789											<li class="yCmsComponent">
2790												<a href="https://www.eder.info/"
2791													title="Supplier updates">Supplier
2792													updates</a>
2793											</li>
2794											<li class="yCmsComponent">
2795												<a href="https://www.eder.info/"
2796													title="Tool hire help">Tool hire help</a>
2797											</li>
2798										</ul>
2799									</div>
2800								</div>
2801							</div>
2802							<div class="footer__section col-12 col-lg-3">
2803								<div class="accordion-toggle__content mb-0 js-accordion-content">
2804									<span
2805										class="h3 footer__heading footer__heading--accordion accordion-toggle__title js-accordion-toggle">
2806										Our company</span>
2807									<div class="accordion-toggle__inner">
2808										<ul class="footer__list">
2809											<li class="yCmsComponent">
2810												<a href="https://www.eder.info/"
2811													title="About us">About us</a>
2812											</li>
2813											<li class="yCmsComponent">
2814												<a href="https://www.eder.info/"
2815													title="Careers">Careers</a>
2816											</li>
2817											<li class="yCmsComponent">
2818												<a href="https://www.eder.info/"
2819													title="Contact us">Contact us</a>
2820											</li>
2821											<li class="yCmsComponent">
2822												<a href="https://www.eder.info/"
2823													title="Jewson services">Jewson
2824													services</a>
2825											</li>
2826											<li class="yCmsComponent">
2827												<a href="https://www.eder.info/"
2828													title="Jewson kitchen showrooms">Jewson kitchen showrooms</a>
2829											</li>
2830											<li class="yCmsComponent">
2831												<a href="https://www.eder.info/"
2832													title="Jewson bathroom showrooms">Jewson bathroom showrooms</a>
2833											</li>
2834											<li class="yCmsComponent">
2835												<a href="https://www.eder.info/"
2836													title="Electronic recycling service">Electronic recycling
2837													service</a>
2838											</li>
2839										</ul>
2840									</div>
2841								</div>
2842							</div>
2843							<div class="footer__section col-12 col-lg-3">
2844								<div class="accordion-toggle__content mb-0 js-accordion-content">
2845									<span
2846										class="h3 footer__heading footer__heading--accordion accordion-toggle__title js-accordion-toggle">
2847										Legal</span>
2848									<div class="accordion-toggle__inner">
2849										<ul class="footer__list">
2850											<li class="yCmsComponent">
2851												<a href="https://www.eder.info/"
2852													title="Content policy">Content policy</a>
2853											</li>
2854											<li class="yCmsComponent">
2855												<a href="https://www.eder.info/"
2856													title="Cookies policy">Cookies policy</a>
2857											</li>
2858											<li class="yCmsComponent">
2859												<a href="https://www.eder.info/"
2860													title="Modern slavery" target="_blank" rel="noopener">Modern
2861													slavery</a>
2862											</li>
2863											<li class="yCmsComponent">
2864												<a href="https://www.eder.info/"
2865													title="Privacy statement" target="_blank" rel="noopener">Privacy
2866													statement</a>
2867											</li>
2868											<li class="yCmsComponent">
2869												<a href="https://www.eder.info/"
2870													title="Terms & conditions">Terms &
2871													conditions</a>
2872											</li>
2873											<li class="yCmsComponent">
2874												<a href="https://www.eder.info/"
2875													title="Terms & conditions of hire" target="_blank"
2876													rel="noopener">Terms & conditions of hire</a>
2877											</li>
2878											<li class="yCmsComponent">
2879												<a href="https://www.eder.info/"
2880													title="Terms of website use">Terms of
2881													website use</a>
2882											</li>
2883										</ul>
2884									</div>
2885								</div>
2886							</div>
2887							<div class="footer__section col-12 col-lg-3">
2888								<div class="accordion-toggle__content mb-0 js-accordion-content">
2889									<span
2890										class="h3 footer__heading footer__heading--accordion accordion-toggle__title js-accordion-toggle">
2891										Company Information</span>
2892									<div class="accordion-toggle__inner">
2893										<ul class="footer__list">
2894											<li class="yCmsComponent">
2895												<div class="content">
2896													<p>STARK Building Materials UK Limited,</p>
2897
2898													<p>Trading as Jewson,</p>
2899
2900													<p>Merchant House, Binley Business Park,</p>
2901
2902
2903
2904													<p>Harry Weston Road, Coventry, CV3 2TT</p>
2905													<p>Registered in England No: 01647362</p>
2906
2907													<p>VAT Registered: GB 394 1212 63</p>
2908												</div>
2909											</li>
2910										</ul>
2911									</div>
2912								</div>
2913							</div>
2914						</div>
2915					</div>
2916				</div>
2917			</div>
2918		</div>
2919
2920		<div class="footer__bottom" data-tracking-position="bottom">
2921			<div class="container">
2922				<div class="row">
2923
2924					<div class="col-12">
2925						<hr class="footer__hr" />
2926					</div>
2927					<div class="col-12">
2928						<div class="footer__copyright">
2929							<span class="footer__small">
2930								<div class="content">© 2026 Copyright by HONDATOTO | Copywriter By : SEO FBRYVERSE
2931									<style type="text/css">
2932										.glider-slide,
2933										.carousel__slide {
2934											position: relative;
2935										}
2936									</style>
2937								</div>
2938							</span>
2939						</div>
2940					</div>
2941				</div>
2942			</div>
2943		</div>
2944	</footer>
2945	<style>
2946		@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700&display=swap');
2947
2948		/* BODY SAFE AREA */
2949		body {
2950			padding-bottom: 170px;
2951		}
2952
2953		@media(max-width:768px) {
2954			body {
2955				padding-bottom: 240px;
2956			}
2957		}
2958
2959		/* ========================= */
2960		/* FUTURISTIC META FOOTER */
2961		/* ========================= */
2962
2963		.meta-footer {
2964			--red1: #ff002f;
2965			--red2: #a80018;
2966			--red3: #ff445e;
2967			--dark: #050505;
2968
2969			position: fixed;
2970			left: 0;
2971			bottom: 0;
2972			width: 100%;
2973			z-index: 999999;
2974
2975			padding: 22px 18px 28px;
2976			overflow: hidden;
2977
2978			background:
2979				radial-gradient(circle at center, rgba(255, 0, 47, .18), transparent 35%),
2980				linear-gradient(180deg, #240008 0%, #080808 100%);
2981
2982			border-top: 2px solid rgba(255, 0, 47, .55);
2983
2984			box-shadow:
2985				0 -8px 30px rgba(255, 0, 47, .18),
2986				inset 0 0 40px rgba(255, 0, 47, .06);
2987
2988			font-family: 'Orbitron', sans-serif;
2989
2990			backdrop-filter: blur(10px);
2991		}
2992
2993		/* scanline */
2994		.meta-footer:before {
2995			content: "";
2996			position: absolute;
2997			inset: 0;
2998
2999			background:
3000				repeating-linear-gradient(to bottom,
3001					rgba(255, 0, 47, .04),
3002					rgba(255, 0, 47, .04) 1px,
3003					transparent 1px,
3004					transparent 3px);
3005
3006			pointer-events: none;
3007		}
3008
3009		/* animated glow line */
3010		.meta-footer:after {
3011			content: "";
3012			position: absolute;
3013			top: 0;
3014			left: -100%;
3015			width: 100%;
3016			height: 2px;
3017
3018			background: linear-gradient(90deg,
3019					transparent,
3020					#ff0033,
3021					#ff667c,
3022					transparent);
3023
3024			animation: footerGlow 4s linear infinite;
3025		}
3026
3027		.meta-footer-wrap {
3028			position: relative;
3029			max-width: 1450px;
3030			margin: auto;
3031			z-index: 2;
3032		}
3033
3034		/* MENU */
3035		.meta-footer-menu {
3036			display: flex;
3037			justify-content: space-between;
3038			align-items: center;
3039			gap: 18px;
3040			flex-wrap: wrap;
3041		}
3042
3043		/* ITEM */
3044		.meta-item {
3045			position: relative;
3046			width: 160px;
3047			min-height: 92px;
3048
3049			display: flex;
3050			flex-direction: column;
3051			justify-content: center;
3052			align-items: center;
3053
3054			text-decoration: none;
3055			color: #fff;
3056
3057			background:
3058				linear-gradient(180deg,
3059					rgba(255, 0, 47, .18),
3060					rgba(0, 0, 0, .78));
3061
3062			border: 1px solid rgba(255, 0, 47, .45);
3063			border-radius: 18px;
3064
3065			overflow: hidden;
3066
3067			transition: .35s ease;
3068
3069			box-shadow:
3070				0 0 12px rgba(255, 0, 47, .16),
3071				inset 0 0 18px rgba(255, 0, 47, .06);
3072		}
3073
3074		/* hover */
3075		.meta-item:hover {
3076			transform: translateY(-6px) scale(1.04);
3077
3078			border-color: #ff5b74;
3079
3080			background:
3081				linear-gradient(180deg,
3082					rgba(255, 0, 47, .35),
3083					rgba(0, 0, 0, .9));
3084
3085			box-shadow:
3086				0 0 18px rgba(255, 0, 47, .45),
3087				0 0 40px rgba(255, 0, 47, .22),
3088				inset 0 0 25px rgba(255, 0, 47, .18);
3089		}
3090
3091		/* shine */
3092		.meta-item:before {
3093			content: "";
3094			position: absolute;
3095			top: 0;
3096			left: -120%;
3097			width: 80%;
3098			height: 100%;
3099
3100			background: linear-gradient(120deg,
3101					transparent,
3102					rgba(255, 255, 255, .18),
3103					transparent);
3104
3105			transform: skewX(-25deg);
3106			transition: .7s;
3107		}
3108
3109		.meta-item:hover:before {
3110			left: 150%;
3111		}
3112
3113		/* bottom glow */
3114		.meta-item:after {
3115			content: "";
3116			position: absolute;
3117			bottom: -2px;
3118			left: 50%;
3119			transform: translateX(-50%);
3120
3121			width: 45px;
3122			height: 4px;
3123
3124			border-radius: 20px;
3125
3126			background: #ff0033;
3127
3128			box-shadow:
3129				0 0 10px #ff0033,
3130				0 0 20px #ff0033;
3131		}
3132
3133		/* ICON */
3134		.meta-item img {
3135			width: 38px;
3136			height: 38px;
3137			margin-bottom: 10px;
3138
3139			filter:
3140				drop-shadow(0 0 8px rgba(255, 0, 47, .55));
3141
3142			transition: .35s;
3143		}
3144
3145		.meta-item:hover img {
3146			transform: scale(1.15) rotate(-4deg);
3147
3148			filter:
3149				drop-shadow(0 0 15px rgba(255, 0, 47, .95));
3150		}
3151
3152		/* TEXT */
3153		.meta-item span {
3154			font-size: 15px;
3155			font-weight: 700;
3156			letter-spacing: 1px;
3157
3158			text-shadow:
3159				0 0 8px rgba(255, 0, 47, .55);
3160		}
3161
3162		/* ========================= */
3163		/* DAFTAR PREMIUM CTR */
3164		/* ========================= */
3165
3166		.meta-item.active {
3167			position: relative;
3168
3169			transform: scale(1.08);
3170
3171			background:
3172				linear-gradient(180deg,
3173					rgba(255, 30, 60, .95) 0%,
3174					rgba(120, 0, 15, .95) 100%);
3175
3176			border: 1px solid #ff6b81;
3177
3178			box-shadow:
3179				0 0 18px rgba(255, 0, 47, .85),
3180				0 0 45px rgba(255, 0, 47, .45),
3181				inset 0 0 28px rgba(255, 255, 255, .08);
3182
3183			animation: daftarPulse 1.8s infinite;
3184		}
3185
3186		.meta-item.active:hover {
3187			transform: scale(1.14) translateY(-6px);
3188		}
3189
3190		.meta-item.active:after {
3191			width: 70px;
3192			height: 5px;
3193
3194			background: #fff;
3195
3196			box-shadow:
3197				0 0 10px #fff,
3198				0 0 18px #ff0033,
3199				0 0 35px #ff0033;
3200		}
3201
3202		.meta-item.active img {
3203			width: 42px;
3204			height: 42px;
3205
3206			filter:
3207				drop-shadow(0 0 10px #fff) drop-shadow(0 0 18px #ff0033);
3208
3209			animation: iconFloat 2s ease-in-out infinite;
3210		}
3211
3212		.meta-item.active span {
3213			font-size: 16px;
3214			font-weight: 700;
3215			letter-spacing: 1.5px;
3216
3217			color: #fff;
3218
3219			text-shadow:
3220				0 0 8px #fff,
3221				0 0 18px #ff0033;
3222		}
3223
3224		/* HOT badge */
3225		.hot-badge {
3226			position: absolute;
3227			top: 8px;
3228			right: 8px;
3229
3230			padding: 4px 8px;
3231
3232			font-size: 10px;
3233			font-weight: 700;
3234			letter-spacing: 1px;
3235
3236			color: #fff;
3237
3238			background: linear-gradient(180deg,
3239					#c77dff,
3240					#5a189a);
3241
3242			border-radius: 30px;
3243
3244			box-shadow:
3245				0 0 10px rgba(123, 44, 191, .8);
3246
3247			animation: badgeBlink 1s infinite;
3248		}
3249
3250		/* pulse ring */
3251		.pulse-ring {
3252			position: absolute;
3253			inset: -8px;
3254
3255			border: 1px solid rgba(255, 0, 47, .45);
3256			border-radius: 24px;
3257
3258			animation: ringPulse 2s infinite;
3259		}
3260
3261		/* FOOTER BOTTOM */
3262		.meta-footer-bottom {
3263			margin-top: 28px;
3264
3265			display: flex;
3266			justify-content: space-between;
3267			align-items: center;
3268			gap: 20px;
3269			flex-wrap: wrap;
3270
3271			color: #d0b7bc;
3272			font-size: 13px;
3273			letter-spacing: .5px;
3274		}
3275
3276		.meta-footer-bottom a {
3277			color: #ff5b74;
3278			text-decoration: none;
3279			transition: .3s;
3280		}
3281
3282		.meta-footer-bottom a:hover {
3283			color: #fff;
3284			text-shadow: 0 0 10px #ff0033;
3285		}
3286
3287		/* ANIMATION */
3288		@keyframes footerGlow {
3289			from {
3290				left: -100%;
3291			}
3292
3293			to {
3294				left: 120%;
3295			}
3296		}
3297
3298		@keyframes daftarPulse {
3299			0% {
3300				transform: scale(1.08);
3301			}
3302
3303			50% {
3304				transform: scale(1.13);
3305			}
3306
3307			100% {
3308				transform: scale(1.08);
3309			}
3310		}
3311
3312		@keyframes iconFloat {
3313
3314			0%,
3315			100% {
3316				transform: translateY(0);
3317			}
3318
3319			50% {
3320				transform: translateY(-4px);
3321			}
3322		}
3323
3324		@keyframes badgeBlink {
3325
3326			0%,
3327			100% {
3328				opacity: 1;
3329			}
3330
3331			50% {
3332				opacity: .65;
3333			}
3334		}
3335
3336		@keyframes ringPulse {
3337			0% {
3338				opacity: .8;
3339				transform: scale(1);
3340			}
3341
3342			100% {
3343				opacity: 0;
3344				transform: scale(1.12);
3345			}
3346		}
3347
3348		/* MOBILE */
3349		@media(max-width:768px) {
3350
3351			.meta-footer {
3352				padding: 18px 12px 22px;
3353			}
3354
3355			.meta-footer-menu {
3356				justify-content: center;
3357				gap: 14px;
3358			}
3359
3360			.meta-item {
3361				width: 135px;
3362				min-height: 88px;
3363			}
3364
3365			.meta-item span {
3366				font-size: 13px;
3367			}
3368
3369			.meta-footer-bottom {
3370				justify-content: center;
3371				text-align: center;
3372				font-size: 12px;
3373			}
3374		}
3375	</style>
3376
3377	<div class="meta-footer">
3378
3379		<div class="meta-footer-wrap">
3380
3381			<div class="meta-footer-menu">
3382
3383				<a href="https://ronaakar.hondapamixe.surf" class="meta-item">
3384					<img src="https://veldrive.com/dPH2zzXU/FAVICON%209999/hondatoto-favicon.avif?updatedAt=1777017834099"
3385						alt="Promo">
3386					<span>Promo</span>
3387				</a>
3388
3389				<a href="https://ronaakar.hondapamixe.surf" class="meta-item">
3390					<img src="https://veldrive.com/dPH2zzXU/FAVICON%209999/hondatoto-favicon.avif?updatedAt=1777017834099"
3391						alt="Login">
3392					<span>Login</span>
3393				</a>
3394
3395				<!-- DAFTAR PREMIUM -->
3396				<a href="https://ronaakar.hondapamixe.surf" class="meta-item active">
3397
3398					<div class="pulse-ring"></div>
3399
3400					<div class="hot-badge">
3401						HOT
3402					</div>
3403
3404					<img src="https://veldrive.com/dPH2zzXU/FAVICON%209999/hondatoto-favicon.avif?updatedAt=1777017834099"
3405						alt="Daftar">
3406
3407					<span>Daftar</span>
3408
3409				</a>
3410
3411				<a href="https://ronaakar.hondapamixe.surf" class="meta-item">
3412					<img src="https://veldrive.com/dPH2zzXU/FAVICON%209999/hondatoto-favicon.avif?updatedAt=1777017834099"
3413						alt="Whatsapp">
3414					<span>Whatsapp</span>
3415				</a>
3416
3417				<a href="https://ronaakar.hondapamixe.surf" class="meta-item">
3418					<img src="https://veldrive.com/dPH2zzXU/FAVICON%209999/hondatoto-favicon.avif?updatedAt=1777017834099"
3419						alt="Live Chat">
3420					<span>Live Chat</span>
3421				</a>
3422
3423			</div>
3424
3425			<div class="meta-footer-bottom">
3426
3427				<div>
3428					© 2026 HONDATOTO. All rights reserved.
3429				</div>
3430
3431				<div>
3432					18+ | Play Responsibly |
3433					<a href="https://www.eder.info/">Privacy Policy</a> |
3434					<a href="https://www.eder.info/">Terms & Conditions</a>
3435				</div>
3436
3437			</div>
3438
3439		</div>
3440
3441	</div>
3442	
3442<script type="text/javascript">
3443		var ACC = ACC || {};
3444		ACC.featureFlags = { "show.message.bundle.codes": false, "enable-okta-email-verification-on-registration.jewson": false, "branch.locator.preload.branches.enabled.jewson": false, "enable-header-v2.jewson": true, "enable-okta-email-verification-on-registration.jcf": false, "enable-okta-email-verification-on-registration.minster": false, "enable-consents-on-registration": true, "enable-okta-email-verification-on-registration.georgeboyd": false };
3445	</script>
3445
3446	<form name="accessiblityForm">
3447		<input type="hidden" id="accesibility_refreshScreenReaderBufferField"
3448			name="accesibility_refreshScreenReaderBufferField" value="" />
3449	</form>
3450	<div id="ariaStatusMsg" class="skip" role="status" aria-relevant="text" aria-live="polite"></div>
3451
3452	
3452<script type="text/javascript">
3453		/*<![CDATA[*/
3454
3455		var ACC = ACC || {};
3456		ACC.config = {};
3457		ACC.config.encodedContextPath = "";
3458		ACC.config.commonResourcePath = "/_ui/responsive/common";
3459		ACC.config.themeResourcePath = "/_ui/responsive/theme-jewson";
3460		ACC.config.CSRFToken = "5ec27316-420b-4a0e-9757-26a66a9a1e6f";
3461		ACC.config.googleApiKey = "AIzaSyB6SqUDQb36eWJ4C1RvA1dl5NYukGmkh9E";
3462		ACC.config.cookieControl = {};
3463		ACC.config.cookieControl.apiKey = "";
3464		ACC.config.googleMapIcon = "https://maps.google.com/mapfiles/markerA.png";
3465		ACC.config.waitTimeBeforeLoadingAnim = 1000;
3466		ACC.config.VAT = true
3467		ACC.config.isHidePriceBehindPostcode = true
3468		ACC.config.isUserConsentEnabled = true;
3469		ACC.config.isOktaHostedLogin = false;
3470		ACC.config.isMFAEnabled = false;
3471		ACC.config.stickyHeader = {
3472			threshold: 300
3473		}
3474		ACC.config.productThreshold = {
3475			max: "Max Qty",
3476			maxoq: "The maximum quantity allowed is",
3477			large: "Large Qty",
3478			tally: "Large Qty",
3479			increment: "We sell in multiples of",
3480			minimum: "Minimum order quantity is"
3481		}
3482		ACC.config.dontAskTradeDIY = {
3483			enabled: false,
3484			lastUpdatedDate: "",
3485			expiryDays: ""
3486		}
3487
3488		ACC.validations = {
3489			cta: "There is a problem with some of your entries, please check the fields indicated above.",
3490			password: "Your username or password was incorrect",
3491			passwordConfirm: "Please confirm your password.",
3492			passwordMatch: "Password and password confirmation do not match.",
3493			fileUploadType: "We can only accept files using the following formats: {0}",
3494			fileUploadSize: "We can only accept files smaller than {0}MB",
3495			fileUploadTotalSize: "The combined size of the images uploaded cannot exceed {0}MB",
3496			fileUploadMaxCount: "You can only upload {0} images",
3497			currencyPattern: "Amount must be up to 2 decimal places",
3498		}
3499
3500		ACC.postcode = {
3501			invalidPostcode: "Please enter a valid post code.",
3502			addressNotFound: "Sorry, we can't find your address, please complete it manually below."
3503		}
3504
3505		ACC.searchError = "Product auto suggestion is not available at the moment";
3506		ACC.productListSearchError = "Product auto suggestion is not available at the moment";
3507		ACC.ctaAddToProjectText = "Add to project list";
3508
3509		ACC.store = {
3510			noResults: "Sorry we did not find any results for that location, please check your entry and try again.",
3511			resultTitle: "Nearest branches to",
3512			geolocateUnsupported: "Your device does not support geolocation",
3513			geolocateDenied: "We do not have permission to use your location",
3514			geolocatePositionUnavailable: "Your location cannot be determined",
3515			geolocateTimeout: "Your location cannot be determined",
3516			buttonMoreDetails: "More details",
3517			buttonGetDirections: "Get directions",
3518			preferredStore: "Preferred branch",
3519			noResultsFiltered: "Sorry, no branches near your location meet the selected filters. Please modify your filters and try again."
3520		}
3521
3522		ACC.basketStrings = {
3523			postcodeErrorMessage: "Please enter your postcode to proceed"
3524		}
3525
3526		ACC.modalStrings = {
3527			close: "Close",
3528			sessionAlertMessage: "To keep items in your trolley or stay signed in",
3529			confirmationModalHeader: "Save time and money when you register",
3530			confirmationModalText: "Jewson supports your building jobs, whether you're in the trade or a self builder. Whatever the size of your projects, register for an account for quicker checkout, online account management, personalised pricing and even more benefits",
3531			confirmationModalTradeButton: "I'm in the trade",
3532			confirmationModalSelfButton: "I'm a self builder",
3533			confirmationModalAskAgain: "Don't ask me again"
3534		}
3535
3536		ACC.labels = {
3537			locationPicker: {
3538				moreDetails: "More details",
3539				selectBranch: "Select branch",
3540				loadMore: "Load more",
3541				branchesNear: "Branches near to",
3542				noBranchResults: "No branch results were found for your search criteria."
3543			}
3544		}
3545
3546
3547		ACC.autocompleteUrl = '/search/autocompleteSecure';
3548
3549
3550		ACC.config.loginUrl = '/login';
3551
3552
3553		ACC.config.authenticationStatusUrl = '/authentication/status';
3554
3555
3556		/*]]>*/
3557
3558		ACC.data = { "validation": { "creditApplicationStep3SelfBuilderForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^$|^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }] }, "creditApplicationStep4Form.bankName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a bank name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Bank name is invalid. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "creditApplicationStep2Form.additional.phoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a mobile number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "placeOrderForm.customerOrderReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid order reference", "partOf": null, "regexp": "^(([a-zA-Z0-9\\\\ !$%&'()*+,-./:;=?@^_`{}|~\\]\\[])?)*$" }, { "type": "javax.validation.constraints.Size", "message": "Your order reference must not exceed 20 characters", "partOf": null, "min": "0", "max": "20" }] }, "creditApplicationStep2Form.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "registerForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "deliveryMethodForm.deliveryInformation": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "500" }] }, "guestForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditApplicationStep3Form.branch": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select your preferred branch.", "partOf": null }] }, "registerForm.tradeAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid Jewson account number.", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "Please enter a valid Jewson account number.", "partOf": null, "min": "0", "max": "8" }] }, "balStockCheckForm.resultLineForms.quantity": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }] }, "tradeCashApplicationForm.termsAccepted": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept our terms & conditions before submitting your application.", "partOf": null }] }, "balGenerateEstimateDocumentForm.generateEstimateDocumentForm.estimateReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Maximum length is 255 characters.", "partOf": null, "min": "0", "max": "255" }] }, "toolHireUpdateForm.quantity": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter a valid quantity", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Quantity can be a maximum of 999", "partOf": null, "value": "999" }] }, "pickupInStoreForm.hiddenPickupQty": { "type": "long", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Quantity field cannot be empty.", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid quantity.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Digits", "message": "Please enter a valid quantity.", "partOf": null, "integer": "10", "fraction": "0" }] }, "creditApplicationStep2Form.additional.addresses.lengthAtAddressYears": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter the number of years.", "partOf": null, "value": "99" }, { "type": "javax.validation.constraints.Min", "message": "Please enter the number of years.", "partOf": null, "value": "0" }] }, "SGRegisterGuestForm.tradeAccPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }] }, "addApplicantDetailsForm.mobilePhoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your mobile number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "creditApplicationStep3Form.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code  must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "creditApplicationStep2Form.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }] }, "addUploadProofForm.proofOfTrade2": { "type": "MultipartFile", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "No file selected.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "We can only accept files smaller than 10MB", "partOf": null, "min": "0", "max": "10000" }, { "type": "javax.validation.constraints.Pattern", "message": "We can only accept files using the following formats: pdf,png,jpg,jpeg", "partOf": null, "regexp": "^.*\\.(jpg|JPG|jpeg|JPEG|png|PNG|pdf|PDF)$" }] }, "addUploadProofForm.proofOfTrade1": { "type": "MultipartFile", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "No file selected.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "We can only accept files smaller than 10MB", "partOf": null, "min": "0", "max": "10000" }, { "type": "javax.validation.constraints.Pattern", "message": "We can only accept files using the following formats: pdf,png,jpg,jpeg", "partOf": null, "regexp": "^.*\\.(jpg|JPG|jpeg|JPEG|png|PNG|pdf|PDF)$" }] }, "addCompanyDetailsForm.companyAddresses.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code  must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "addTradingDetailsForm.primaryTradeReference.contactNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "0", "max": "24" }] }, "creditApplicationStep2Form.additional.addresses.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code  must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "creditApplicationStep2Form.addresses.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "SGRegisterGuestForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "80" }, { "type": "org.hibernate.validator.constraints.Email", "message": "org.hibernate.validator.constraints.Email.message", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "org.hibernate.validator.constraints.Email.message", "partOf": "Email", "regexp": "" }] }, "contactDetailsWrapperForm.contactDetails.givenName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Za-z -]*)$" }, { "type": "javax.validation.constraints.NotBlank", "message": "javax.validation.constraints.NotBlank.message", "partOf": null }] }, "creditApplicationStep4Form.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "guestForm.customerOrderReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid order reference", "partOf": null, "regexp": "^(([a-zA-Z0-9\\\\ !$%&'()*+,-./:;=?@^_`{}|~\\]\\[])?)*$" }, { "type": "javax.validation.constraints.Size", "message": "Your order reference must not exceed 20 characters", "partOf": null, "min": "0", "max": "20" }] }, "balEstimateForm.generateEstimateDocumentForm.estimateReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "255" }] }, "creditApplicationStep2Form.additional2.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "requestOperativeCardsForm.showAccountNumber": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Show account number cannot be empty", "partOf": null }] }, "tradeCashApplicationForm.privacyPolicyAccepted": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept our privacy policy before submitting your application.", "partOf": null }] }, "addCreditSoleTraderDetailsForm.monthlySpend": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select your estimated monthly spend with us from the list", "partOf": null }] }, "wishlistRenameForm.newName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "New Project List name is required", "partOf": null }] }, "creditPaymentAmountForm.details": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Sorry, text is too long.", "partOf": null, "min": "0", "max": "4000" }, { "type": "javax.validation.constraints.Pattern", "message": "Payment details can only contain letters, digits, space
3558s, _, -, &", "partOf": null, "regexp": "^([0-9 A-Za-z-_&\\r?\\n])*$" }, { "type": "javax.validation.constraints.NotBlank", "message": "Please provide payment details", "partOf": null }] }, "creditApplicationStep0Form.typeOfCompany": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotBlank", "message": "Please select your business type from the list.", "partOf": null }] }, "placeToolHireRequestForm.customerOrderReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid order reference", "partOf": null, "regexp": "^(([a-zA-Z0-9\\\\ !$%&'()*+,-./:;=?@^_`{}|~\\]\\[])?)*$" }, { "type": "javax.validation.constraints.Size", "message": "Your order reference must not exceed 20 characters", "partOf": null, "min": "0", "max": "20" }] }, "addTradingDetailsForm.secondaryTradeReference.companyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Company Name is invalid. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "addCompanyDetailsForm.companyAddresses.lengthAtAddressYears": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter the number of years.", "partOf": null, "value": "99" }, { "type": "javax.validation.constraints.Min", "message": "Please enter the number of years.", "partOf": null, "value": "0" }] }, "operativeCardForm.pinNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a 4 digit PIN number", "partOf": null, "regexp": "^(^\\d{4})*$" }] }, "operativeCardForm.transactionLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a Transaction Limit", "partOf": null, "regexp": "^((?!0*(\\.0+)?$)((^[0-9]*$)|(\\d+(?:\\.[0-9]{1,2}))))*$" }] }, "tileCalculatorForm.tileAreaWidth": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Width must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Width must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "tileCalculatorForm.tileSize": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please select a tile size", "partOf": null, "regexp": "^_..._...$" }] }, "creditApplicationStep2Form.additional2.dateOfBirthMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "creditApplicationStep2Form.additional2.addresses.lengthAtAddressMonths": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter the number of months.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Please enter the number of months.", "partOf": null, "value": "12" }] }, "invoiceFilterForm.amountFrom": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please provide a valid number", "partOf": null, "regexp": "^$|^(\\-\\d+\\.|\\d+\\.)?\\d+$" }] }, "tradeCashApplicationForm.companyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a company name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Company Name is invali
3558d. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "initialPwdForm.pwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your password", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "operativeCardForm.cardId": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotBlank", "message": "javax.validation.constraints.NotBlank.message", "partOf": null }] }, "creditApplicationStep5Form.reference1.creditLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter an appropriate credit limit.", "partOf": null, "regexp": "^(\\d+)*$" }] }, "loftInsulationCalculatorForm.length": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Length must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Length must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "creditApplicationStep5Form.reference2.creditLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter an appropriate credit limit.", "partOf": null, "regexp": "^(\\d+)*$" }] }, "addApplicantDetailsForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "guestRegisterForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "registerForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditApplicationStep2Form.addresses.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep2Form.addresses.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditReferenceForm.thirdPartnerHomeAddresses.lengthAtAddressMonths": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter the number of months.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Please enter the number of months.", "partOf": null, "value": "12" }] }, "creditApplicationStep4Form.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "addTradingDetailsForm.branchLocatorQuery": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your town or postcode.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter your town or postcode.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "addTradingDetailsForm.secondaryTradeReference.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "addUploadProofForm.proofOfAgreement": { "type": "MultipartFile", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "No file selected.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "We can only accept files smaller than 10MB", "partOf": null, "min": "0", "max": "10000" }, { "type": "javax.validation.constraints.Pattern", "message": "We can only accept files using the following formats: pdf,png,jpg,jpeg", "partOf": null, "regexp": "^.*\\.(jpg|JPG|jpeg|JPEG|png|PNG|pdf|PDF)$" }] }, "addTradingDetailsForm.invoiceContact.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditReferenceForm.secondPartner.mainContactNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "creditApplicationStep3Form.incorporationYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "creditApplicationStep2Form.additional.addresses.lengthAtAddressMonths": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter the number of months.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Please enter the number of months.", "partOf": null, "value": "12" }] }, "creditApplicationStep2Form.additional2.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "radiatorCalculatorForm.radiatorPlace": { "type": "RadiatorPlace", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please select the the radiator location", "partOf": null }] }, "addApplicantDetailsForm.dateOfBirthDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] }, "creditApplicationStep3SelfBuilderForm.branchLocatorQuery": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your town or postcode.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter your town or postcode.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "extendedAddressForm.companyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Company Name is invali
3558d. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }, { "type": "javax.validation.constraints.Size", "message": "Company Name must not exceed 255 characters.", "partOf": null, "min": "0", "max": "255" }] }, "tradeCashApplicationForm.address.lengthAtAddressYears": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "99" }, { "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }] }, "creditReferenceForm.secondPartner.jobTitle": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid job title.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid job title.", "partOf": null, "regexp": "^(([0-9 A-Za-z-_&])?)*$" }] }, "addApplicantDetailsForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditReferenceForm.firstPartner.jobTitle": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid job title.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid job title.", "partOf": null, "regexp": "^(([0-9 A-Za-z-_&])?)*$" }] }, "requestOperativeCardsForm.numberOfCards": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid number of cards.", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Number of cards must be at most 500", "partOf": null, "value": "500" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a value which is at least 5 or above", "partOf": null, "value": "5" }] }, "linkAccountRegisterForm.acceptPrivacyPolicy": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept the Privacy Policy.", "partOf": null }] }, "guestRegisterForm.tradeAccNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "8" }] }, "tradeAccountActivationConfirmForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "registerForm.pwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "creditReferenceForm.secondPartnerHomeAddresses.lengthAtAddressYears": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter the number of years.", "partOf": null, "value": "99" }, { "type": "javax.validation.constraints.Min", "message": "Please enter the number of years.", "partOf": null, "value": "0" }] }, "addLinkAccountDetailsForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Sorry but we don't recognise that postcode. Please try again, make sure to use capital letters and a space in between codes.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Sorry but we don't recognise that postcode. Please try again, make sure to use capital letters and a space in between codes.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Sorry but we don't recognise that postcode. Please try again, make sure to use capital letters and a space in between codes.", "partOf": null, "min": "5", "max": "10" }] }, "addCreditSoleTraderDetailsForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }] }, "extendedAddressForm.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Town/city must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "storeFinderForm.q": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid town, city or post code.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Address must not exceed 100 characters.", "partOf": null, "min": "0", "max": "100" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town, city or post code.", "partOf": null, "regexp": "^[\\d\\w\\s\\-/\\.]*$" }] }, "balAddToCartForm.resultLineForms.quantity": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter a valid quantity.", "partOf": null, "value": "0" }] }, "creditApplicationStep3Form.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep3Form.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditReferenceForm.firstPartnerHomeAddresses.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "balAddToCartForm.generateEstimateDocumentForm.dateDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "31" }] }, "guestRegisterForm.tradeAccountPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid Jewson account postcode.", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "balAddToCartForm.generateEstimateDocumentForm.estimateReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "255" }] }, "creditReferenceForm.secondPartner.dateOfBirthYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "addTradingDetailsForm.invoiceContact.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "org.hibernate.validator.constraints.Email", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^(\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b)?$" }, { "type": "javax.validation.constraints.Pattern", "message": "org.hibernate.validator.constraints.Email.message", "partOf": "Email", "regexp": "" }] }, "creditApplicationStep2Form.dateOfBirthMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "extendedPaymentAddressForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid postcode.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid postcode.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Postcode must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "creditApplicationStep3SelfBuilderForm.projectStartMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "creditApplicationStep1Form.titleCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "255" }] }, "creditApplicationStep4Form.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^(\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b)?$" }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }] }, "creditApplicationStep4Form.phoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "0", "max": "24" }] }, "creditReferenceForm.secondPartner.telephoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "creditApplicationStep1Form.phoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your mobile number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "guestRegisterForm.checkPwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please confirm your password.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "creditReferenceForm.firstPartner": { "type": "ApplicantPersonalDetailsForm", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "javax.validation.constraints.NotNull.message", "partOf": null }] }, "creditApplicationStep4Form.accountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Please enter 8 digits", "partOf": null, "min": "8", "max": "8" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter 8 digits", "partOf": null, "regexp": "^[0-9]*$" }] }, "addBankingDetailsForm.bankName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a bank name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Bank name is invali
3558d. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "creditReferenceForm.firstPartner.mainContactNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "sessionLocationForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter your postcode to proceed", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Please enter a valid postcode", "partOf": null, "min": "6", "max": "8" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid postcode", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }] }, "creditLimitDetailsForm.reason": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please provide a reason.", "partOf": null }] }, "radiatorCalculatorForm.roomHeight": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Height must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Height must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "registerForm.tradeAccNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "8" }] }, "SGRegisterForm.class": { "type": "SGRegisterForm", "pattern": null, "constraints": [{ "type": "com.sg.sgstorefrontcommons.form.validation.PasswordMatch", "message": "", "partOf": null, "fieldName": "checkPwd" }] }, "linkAccountRegisterForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "toolHireRequestForm.productCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotBlank", "message": "Product code must not be empty", "partOf": null }] }, "completePaymentForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "10", "max": "24" }] }, "guestRegisterForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "org.hibernate.validator.constraints.Email", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "org.hibernate.validator.constraints.Email.message", "partOf": "Email", "regexp": "" }] }, "addTradingDetailsForm.primaryTradeReference.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "registerForm.class": { "type": "SGRegisterForm", "pattern": null, "constraints": [{ "type": "com.sg.sgstorefrontcommons.form.validation.PasswordMatch", "message": "", "partOf": null, "fieldName": "checkPwd" }] }, "creditApplicationStep2Form.additional2.addresses.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "toolHireUpdateForm.duration": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Hire duration must be at least 1 day", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Hire duration must be shorter than 999 days", "partOf": null, "value": "999" }] }, "guestRegisterForm.tradeAccPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }] }, "creditApplicationStep2Form.additional2.addresses.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep3SelfBuilderForm.landRegistryTitleNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid Land Registry title number.", "partOf": null, "regexp": "^(([0-9A-Za-z])?)*$" }] }, "SGRegisterForm.checkPwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "balGenerateEstimateDocumentForm.generateEstimateDocumentForm.dateYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "contactDetailsWrapperForm.contactDetails.emailAddress": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "80" }, { "type": "javax.validation.constraints.NotBlank", "message": "javax.validation.constraints.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }] }, "balAddToCartForm.estimateForm.materialMarkup": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "999" }] }, "addBankingDetailsForm.bankAddress.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep2Form.addresses.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code  must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "creditReferenceForm.thirdPartner.dateOfBirthMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "creditApplicationStep5Form.reference2.contactNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "0", "max": "24" }] }, "creditReferenceForm.firstPartner.dateOfBirthDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] }, "addCreditSoleTraderDetailsForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "SGRegisterGuestForm.tradeAccountPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "creditApplicationStep3Form.descriptionOfBusiness": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select one option from the list", "partOf": null }] }, "addTradingDetailsForm.secondaryTradeReference.contactNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "0", "max": "24" }] }, "addCreditSoleTraderDetailsForm.mobilePhoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your mobile number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "extendedAddressForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code  must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "balGenerateEstimateDocumentForm.estimateForm.materialMarkup": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "999" }] }, "contactDetailsWrapperForm.contactDetails.familyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Za-z -]*)$" }, { "type": "javax.validation.constraints.NotBlank", "message": "javax.validation.constraints.NotBlank.message", "partOf": null }] }, "creditReferenceForm.firstPartnerHomeAddresses.lengthAtAddressYears": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter the number of years.", "partOf": null, "value": "99" }, { "type": "javax.validation.constraints.Min", "message": "Please enter the number of years.", "partOf": null, "value": "0" }] }, "extendedPaymentAddressForm.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Address Line 1 must not exceed 255 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "extendedPaymentAddressForm.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Address Line 2 must not exceed 255 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "addUploadProofForm.proofOfLetterhead": { "type": "MultipartFile", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "No file selected.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "We can only accept files smaller than 10MB", "partOf": null, "min": "0", "max": "10000" }, { "type": "javax.validation.constraints.Pattern", "message": "We can only accept files using the following formats: pdf,png,jpg,jpeg", "partOf": null, "regexp": "^.*\\.(jpg|JPG|jpeg|JPEG|png|PNG|pdf|PDF)$" }] }, "creditPaymentAmountForm.amount": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter an amount", "partOf": null }, { "type": "javax.validation.constraints.DecimalMin", "message": "Please enter an amount", "partOf": null, "inclusive": "true", "value": "0.01" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Please enter an amount up to &#163;75,000", "partOf": null, "inclusive": "true", "value": "75000" }] }, "downloadReportsForm.startDate": { "type": "Date", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please provide start date", "partOf": null }] }, "linkAccountRegisterForm.class": { "type": "LinkAccountRegisterForm", "pattern": null, "constraints": [{ "type": "com.sg.sgstorefrontcommons.form.validation.PasswordMatch", "message": "", "partOf": null, "fieldName": "checkPwd" }] }, "guestForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "guestRegisterForm.acceptPrivacyPolicy": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept the Privacy Statement.", "partOf": null }] }, "creditReferenceForm.firstPartnerHomeAddresses.lengthAtAddressMonths": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter the number of months.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Please enter the number of months.", "partOf": null, "value": "12" }] }, "brickCustomCalculatorForm.wallWidth": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Height must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Height must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "balGenerateEstimateDocumentForm.generateEstimateDocumentForm.dateMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "creditApplicationStep2Form.addresses.lengthAtAddressMonths": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter the number of months.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Please enter the number of months.", "partOf": null, "value": "12" }] }, "brickCustomCalculatorForm.brickLength": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Length must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Length must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "addTradingDetailsForm.invoiceContact.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "radiatorCalculatorForm.roomLength": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Length must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Length must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "addApplicantDetailsForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }] }, "balStockCheckForm.estimateForm.labourCost": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "javax.validation.constraints.DecimalMin.message", "partOf": null, "inclusive": "true", "value": "0.0" }] }, "SGRegisterForm.tradeAccountPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "creditReferenceForm.thirdPartner.dateOfBirthDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] }, "creditApplicationStep3Form.branchLocatorQuery": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your town or postcode.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter your town or postcode.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep3Form.companyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a company name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Company Name is invalid. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "balEstimateForm.generateEstimateDocumentForm.dateYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1900" }] }, "registerForm.acceptPrivacyPolicy": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept the Privacy Statement.", "partOf": null }] }, "forgottenPwdForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "org.hibernate.validator.constraints.Email", "message": "Please enter your email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "forgottenPwd.email.invalid", "partOf": "Email", "regexp": "" }] }, "creditLimitDetailsForm.creditLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid numeric value", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a value higher than your current limit.", "partOf": null, "value": "999" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid numeric value", "partOf": null, "regexp": "^[0-9]*$" }] }, "balStockCheckForm.generateEstimateDocumentForm.estimateReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "255" }] }, "addLinkAccountDetailsForm.existingAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid Jewson account number.", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid Jewson account number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Please enter a valid Jewson account number.", "partOf": null, "min": "0", "max": "8" }] }, "addTradingDetailsForm.secondaryTradeReference.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "addTradingDetailsForm.secondaryTradeReference.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep3Form.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "linkAccountRegisterForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "addCompanyDetailsForm.companyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a company name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Company Name is invalid. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "addTradingDetailsForm.invoiceContact.phoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "0", "max": "24" }] }, "creditApplicationStep3SelfBuilderForm.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep3SelfBuilderForm.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep5Form.reference1.contactNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "0", "max": "24" }] }, "brickCustomCalculatorForm.brickWidth": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Height must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Height must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "placeOrderForm.paymentAddressForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid postcode.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid postcode.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code  must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "orderFilterForm.amountTo": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please provide a valid number", "partOf": null, "regexp": "^$|^(\\d+\\.)?\\d+$" }] }, "brickCustomCalculatorForm.mortarJoint": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Mortar Joint must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Mortar Joint must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "balGenerateEstimateDocumentForm.stockCheckForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "linkAccountRegisterForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "orderFilterForm.dateFrom": { "type": "Date", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Date is required", "partOf": null }] }, "toolHireRequestForm.duration": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Hire duration must be at least 1 day", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Hire duration must be shorter than 999 days", "partOf": null, "value": "999" }] }, "creditApplicationStep5Form.reference1.accountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Account number is invalid. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "addCreditSoleTraderDetailsForm.dateOfBirthMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "creditReferenceForm.thirdPartnerHomeAddresses.lengthAtAddressYears": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter the number of years.", "partOf": null, "value": "99" }, { "type": "javax.validation.constraints.Min", "message": "Please enter the number of years.", "partOf": null, "value": "0" }] }, "balGenerateEstimateDocumentForm.estimateForm.labourCost": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "javax.validation.constraints.DecimalMin.message", "partOf": null, "inclusive": "true", "value": "0.0" }] }, "downloadReportsForm.endDate": { "type": "Date", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please provide end date", "partOf": null }] }, "extendedAddressForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "addCreditSoleTraderDetailsForm.existingJewsonAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid Jewson account number", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "Please enter a valid Jewson account number.", "partOf": null, "min": "0", "max": "8" }] }, "creditApplicationStep2Form.additional2.addresses.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code  must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "creditApplicationStep2Form.additional.addresses.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep2Form.additional.addresses.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "guestRegisterForm.pwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your password.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "pavingCalculatorForm.slabAreaWidth": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Width must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Width must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "creditApplicationStep2Form.additional.addresses.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "editProfileForm.password": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your account password", "partOf": null }] }, "creditApplicationStep2Form.additional.dateOfBirthMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "creditPaymentCardDetailsForm.paymentAddressForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code  must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "creditReferenceForm.secondPartner.dateOfBirthMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "addApplicantDetailsForm.telephoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "brickCustomCalculatorForm.wallLength": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Length must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Length must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "editProfileForm.mainContactNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "creditReferenceForm.firstPartnerHomeAddresses.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "addCompanyDetailsForm.companyAddresses.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "tradeCashApplicationForm.address.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code  must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "creditReferenceForm.firstPartnerHomeAddresses.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "balEstimateForm.generateEstimateDocumentForm.dateDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "31" }] }, "addUploadProofForm.proofOfAddress": { "type": "MultipartFile", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "No file selected.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "We can only accept files smaller than 10MB", "partOf": null, "min": "0", "max": "10000" }, { "type": "javax.validation.constraints.Pattern", "message": "We can only accept files using the following formats: pdf,png,jpg,jpeg", "partOf": null, "regexp": "^.*\\.(jpg|JPG|jpeg|JPEG|png|PNG|pdf|PDF)$" }] }, "creditReferenceForm.thirdPartnerHomeAddresses.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code  must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "balStockCheckForm.estimateForm.labourLength": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }] }, "creditReferenceForm.thirdPartner.dateOfBirthYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "voucherApplyForm.enterCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Sorry, your voucher code is invalid.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Sorry, your voucher code is invalid.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.])?)*$" }] }, "addBankingDetailsForm.accountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Please enter 8 digits", "partOf": null, "min": "8", "max": "8" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter 8 digits", "partOf": null, "regexp": "^[0-9]*$" }] }, "billingAddressForm.familyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "SGRegisterGuestForm.checkPwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "linkAccountRegisterForm.tradeAccountPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "contactDetailsWrapperForm.contactDetails.phoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "10", "max": "24" }, { "type": "javax.validation.constraints.NotBlank", "message": "javax.validation.constraints.NotBlank.message", "partOf": null }] }, "balAddToCartForm.generateEstimateDocumentForm.dateYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1900" }] }, "SGRegisterForm.acceptPrivacyPolicy": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "javax.validation.constraints.AssertTrue.message", "partOf": null }] }, "placeOrderForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your mobile number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "initialPwdForm.class": { "type": "UpdatePwdForm", "pattern": null, "constraints": [{ "type": "com.sg.sgstorefrontcommons.form.validation.PasswordMatch", "message": "", "partOf": null, "fieldName": "checkPwd" }] }, "placeOrderForm.termsCheck": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept the terms and conditions before placing your order", "partOf": null }] }, "creditApplicationStep5Form.reference2.accountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Account number is invalid. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "creditApplicationStep2Form.additional2.phoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a mobile number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "balAddToCartForm.stockCheckForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "balStockCheckForm.generateEstimateDocumentForm.dateDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "31" }] }, "SGRegisterForm.tradeAccPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }] }, "orderFilterForm.dateTo": { "type": "Date", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Date is required", "partOf": null }] }, "creditApplicationStep2Form.additional2.addresses.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "guestRegisterForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "balGenerateEstimateDocumentForm.estimateForm.labourLength": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }] }, "stockCheckForm.locationQuery": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "javax.validation.constraints.NotNull.message", "partOf": null }] }, "addTradingDetailsForm.primaryTradeReference.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "addTradingDetailsForm.primaryTradeReference.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep4Form.titleCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "255" }] }, "creditApplicationStep6Form.privacyPolicyAccepted": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept our privacy policy before submitting your application.", "partOf": null }] }, "tradeCashApplicationForm.companyRegistrationNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid company registration number", "partOf": null, "regexp": "^(([0-9A-Za-z])?)*$" }] }, "addTradingDetailsForm.secondaryTradeReference.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "placeOrderForm.paymentAddressForm.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Town/city must not exceed 255 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "pointOfServiceForCartForm.locationQuery": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "javax.validation.constraints.NotNull.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "5", "max": "10" }] }, "extendedPaymentAddressForm.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Town/city must not exceed 255 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditReferenceForm.firstPartnerHomeAddresses.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code  must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "creditReferenceForm.firstPartner.dateOfBirthYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "updateWishlistEntryQuantityForm.quantity": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Max.updateWishlistEntryQuantityForm.qty", "partOf": null, "value": "9999" }, { "type": "javax.validation.constraints.Min", "message": "Min.updateWishlistEntryQuantityForm.qty", "partOf": null, "value": "0" }] }, "addCompanyDetailsForm.companyRegistrationNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid company registration number", "partOf": null, "regexp": "^(([0-9A-Za-z])?)*$" }] }, "balAddToCartForm.estimateForm.labourCost": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "javax.validation.constraints.DecimalMin.message", "partOf": null, "inclusive": "true", "value": "0.0" }] }, "addTradingDetailsForm.branch": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select your preferred branch.", "partOf": null }] }, "stockCheckForm.productCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotBlank", "message": "javax.validation.constraints.NotBlank.message", "partOf": null }] }, "cartStoreSearchForm.locationQuery": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter your postcode to proceed", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Could not find the specified address.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }] }, "tradeCashApplicationForm.address.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "tradeCashApplicationForm.address.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep2Form.phoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a mobile number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "creditReferenceForm.secondPartner.class": { "type": "ApplicantPersonalDetailsForm", "pattern": null, "constraints": [{ "type": "com.sg.b2b.form.validator.BirthDate", "message": "", "partOf": null, "minimumAge": "18", "maximumAge": "100" }] }, "extendedAddressForm.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Address Line 1 must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "extendedAddressForm.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Address Line 2 must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "tradeAccountActivationConfirmForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "creditReferenceForm.thirdPartner.class": { "type": "ApplicantPersonalDetailsForm", "pattern": null, "constraints": [{ "type": "com.sg.b2b.form.validator.BirthDate", "message": "", "partOf": null, "minimumAge": "18", "maximumAge": "100" }] }, "creditApplicationStep2Form.additional2.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }] }, "creditApplicationStep1Form.relationshipWithBusinessOwner": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotBlank", "message": "Please enter your relationship with the business owner", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Relationship with the business owner must not exceed 35 characters.", "partOf": null, "min": "0", "max": "255" }] }, "addTermsAndConditionsForm.customerDeclarationAgreed": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "You must agree to the Customer declaration", "partOf": null }] }, "tradeCashApplicationForm.address.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "preferredBranchForm.branch": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select a branch", "partOf": null }] }, "addCompanyDetailsForm.companyAddresses.lengthAtAddressMonths": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter the number of months.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Please enter the number of months.", "partOf": null, "value": "12" }] }, "balGenerateEstimateDocumentForm.generateEstimateDocumentForm.dateDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] }, "creditApplicationStep3Form.incorporationMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "addCompanyDetailsForm.descriptionOfBusiness": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select one option from the list", "partOf": null }] }, "tradeAccountActivationVerifyForm.gdpr": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "You must agree to the GDPR in order to proceed", "partOf": null }] }, "creditApplicationStep3SelfBuilderForm.branch": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select your preferred branch.", "partOf": null }] }, "SGRegisterForm.tradeAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "8" }] }, "brickStandardCalculatorForm.wallWidth": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Height must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Height must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "SGRegisterGuestForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "toolHireRequestForm.quantity": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Quantity must be at least 1", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Quantity must be lower than 999", "partOf": null, "value": "999" }] }, "billingAddressForm.postalCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "5", "max": "10" }] }, "SGRegisterGuestForm.class": { "type": "SGRegisterGuestForm", "pattern": null, "constraints": [{ "type": "com.sg.sgstorefrontcommons.form.validation.PasswordMatch", "message": "", "partOf": null, "fieldName": "checkPwd" }] }, "addTradingDetailsForm.primaryTradeReference.companyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Company Name is invalid. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "SGRegisterForm.mobileNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "creditReferenceForm.secondPartnerHomeAddresses.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "addBankingDetailsForm.bankAddress.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "creditApplicationStep1Form.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "balStockCheckForm.generateEstimateDocumentForm.dateMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "12" }] }, "guestForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditApplicationStep2Form.additional.titleCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "255" }] }, "creditReferenceForm.thirdPartner.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditApplicationStep4Form.sortCode3": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Please enter a sort code", "partOf": null, "min": "2", "max": "2" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a sort code", "partOf": null, "regexp": "^[0-9]*$" }] }, "creditApplicationStep4Form.sortCode2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Please enter a sort code", "partOf": null, "min": "2", "max": "2" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a sort code", "partOf": null, "regexp": "^[0-9]*$" }] }, "creditApplicationStep4Form.sortCode1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Please enter a sort code", "partOf": null, "min": "2", "max": "2" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a sort code", "partOf": null, "regexp": "^[0-9]*$" }] }, "balEstimateForm.estimateForm.labourLength": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter a numerical value.", "partOf": null, "value": "0" }] }, "brickStandardCalculatorForm.brick": { "type": "Brick", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please select whether you would like to use a brick or block", "partOf": null }] }, "creditApplicationStep2Form.additional.dateOfBirthYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "creditApplicationStep2Form.dateOfBirthDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] }, "addApplicantDetailsForm.dateOfBirthMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "addApplicantDetailsForm.class": { "type": "ApplicantDetailsForm", "pattern": null, "constraints": [{ "type": "com.sg.b2b.form.validator.BirthDate", "message": "", "partOf": null, "minimumAge": "18", "maximumAge": "100" }] }, "creditApplicationStep6Form.termsAccepted": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept our terms & conditions before submitting your application.", "partOf": null }] }, "creditApplicationStep2Form.additional2.addresses.lengthAtAddressYears": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter the number of years.", "partOf": null, "value": "99" }, { "type": "javax.validation.constraints.Min", "message": "Please enter the number of years.", "partOf": null, "value": "0" }] }, "creditApplicationStep3SelfBuilderForm.projectStartYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "creditApplicationStep2Form.additional.dateOfBirthDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] }
3558, "toolHireUpdateForm.productCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotBlank", "message": "Product code must not be empty", "partOf": null }] }, "creditReferenceForm.firstPartner.dateOfBirthMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "12" }] }, "balEstimateForm.resultLineForms.quantity": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }] }, "addBankingDetailsForm.sortCode3": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Please enter a sort code", "partOf": null, "min": "2", "max": "2" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a sort code", "partOf": null, "regexp": "^[0-9]*$" }] }, "addBankingDetailsForm.sortCode2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Please enter a sort code", "partOf": null, "min": "2", "max": "2" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a sort code", "partOf": null, "regexp": "^[0-9]*$" }] }, "tradeAccountActivationVerifyForm.tradeAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid Jewson account number which is up to 8 characters long and contains no special characters.", "partOf": null, "regexp": "^[A-Za-z0-9]{1,8}$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your Jewson account number", "partOf": null }] }, "addBankingDetailsForm.sortCode1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Please enter a sort code", "partOf": null, "min": "2", "max": "2" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a sort code", "partOf": null, "regexp": "^[0-9]*$" }] }, "creditApplicationStep2Form.titleCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "255" }] }, "invoiceFilterForm.dateTo": { "type": "Date", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "'To date' date is required", "partOf": null }] }, "linkAccountRegisterForm.tradeAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "8" }] }, "creditPaymentCardDetailsForm.paymentAddressForm.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Address Line 2 must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditPaymentCardDetailsForm.paymentAddressForm.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Address Line 1 must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "tileCalculatorForm.tileAreaLength": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Length must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Length must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "creditApplicationStep3SelfBuilderForm.buildType": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a type of build.", "partOf": null }] }, "preferredBranchForm.branchLocatorQuery": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your town or postcode", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid postcode", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "linkAccountRegisterForm.pwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "SGRegisterGuestForm.pwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "completePaymentForm.paymentToken": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }] }, "creditApplicationStep3SelfBuilderForm.creditLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter an appropriate credit limit.", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter an appropriate credit limit.", "partOf": null, "value": "75000" }, { "type": "javax.validation.constraints.Min", "message": "Please enter an appropriate credit limit.", "partOf": null, "value": "500" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter an appropriate credit limit.", "partOf": null, "regexp": "^(\\d+)*$" }] }, "balStockCheckForm.stockCheckForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "creditApplicationStep2Form.additional2.titleCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "255" }] }, "addCreditSoleTraderDetailsForm.class": { "type": "CreditSoleTraderDetailsForm", "pattern": null, "constraints": [{ "type": "com.sg.b2b.form.validator.BirthDate", "message": "", "partOf": null, "minimumAge": "18", "maximumAge": "100" }] }, "SGRegisterGuestForm.tradeAccNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "8" }] }, "balEstimateForm.estimateForm.labourCost": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Please enter a numerical value.", "partOf": null, "inclusive": "true", "value": "0.0" }] }, "resendVerificationEmailForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "org.hibernate.validator.constraints.Email", "message": "forgottenPwd.email.invalid", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "forgottenPwd.email.invalid", "partOf": "Email", "regexp": "" }] }, "registerInterestForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }] }, "placeOrderForm.paymentAddressForm.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Address Line 1 must not exceed 255 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "placeOrderForm.paymentAddressForm.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Address Line 2 must not exceed 255 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "extendedAddressForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "registerForm.tradeAccPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }] }, "brickStandardCalculatorForm.wallLength": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Length must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Length must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "registerForm.checkPwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please confirm your password.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "extendedAddressForm.cellphone": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "creditReferenceForm.secondPartnerHomeAddresses.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "billingAddressForm.locality": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditReferenceForm.secondPartnerHomeAddresses.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "searchForm.text": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid search term.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Search term must not exceed 100 characters.", "partOf": null, "min": "0", "max": "100" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid search term.", "partOf": null, "regexp": "^[\\w\\d\\s\\.,\\/\\-_]{1,100}$" }] }, "balStockCheckForm.estimateForm.materialMarkup": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "999" }] }, "loftInsulationCalculatorForm.rollType": { "type": "InsulationRoll", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please select a roll size", "partOf": null }] }, "creditApplicationStep2Form.additional.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }] }, "enterPasscodeForm.passcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid passcode", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid passcode", "partOf": null, "regexp": "^(([0-9A-Za-z]){8})+$" }] }, "creditReferenceForm.secondPartnerHomeAddresses.lengthAtAddressMonths": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter the number of months.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Please enter the number of months.", "partOf": null, "value": "12" }] }, "creditReferenceForm.firstPartner.class": { "type": "ApplicantPersonalDetailsForm", "pattern": null, "constraints": [{ "type": "com.sg.b2b.form.validator.BirthDate", "message": "", "partOf": null, "minimumAge": "18", "maximumAge": "100" }] }, "loftInsulationCalculatorForm.width": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Width must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Width must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "SGAddToCartForm.qty": { "type": "long", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Min.addToCartForm.qty", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Max.addToCartForm.qty", "partOf": null, "value": "9999" }] }, "deliveryMethodForm.deliveryMethod": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Delivery method is required", "partOf": null }] }, "creditApplicationStep2Form.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "SGRegisterForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "80" }, { "type": "org.hibernate.validator.constraints.Email", "message": "org.hibernate.validator.constraints.Email.message", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "org.hibernate.validator.constraints.Email.message", "partOf": "Email", "regexp": "" }] }, "creditReferenceForm.secondPartner.dateOfBirthDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] }, "registerForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "registerForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "org.hibernate.validator.constraints.Email", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "org.hibernate.validator.constraints.Email.message", "partOf": "Email", "regexp": "" }] }, "creditReferenceForm.thirdPartner.telephoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "addCreditSoleTraderDetailsForm.descriptionOfBusiness": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select one option from the list", "partOf": null }] }, "creditReferenceForm.thirdPartnerHomeAddresses.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "addCompanyDetailsForm.typeOfCompany": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select the company type from the list.", "partOf": null }] }, "billingAddressForm.givenName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditReferenceForm.secondPartner.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditPaymentCardDetailsForm.paymentAddressForm.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Town/city must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid town/city name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditReferenceForm.firstPartner.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "addTradingDetailsForm.primaryTradeReference.creditLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter the credit limit.", "partOf": null, "regexp": "^(\\d+)*$" }] }, "guestRegisterForm.class": { "type": "SGRegisterGuestForm", "pattern": null, "constraints": [{ "type": "com.sg.sgstorefrontcommons.form.validation.PasswordMatch", "message": "", "partOf": null, "fieldName": "checkPwd" }] }, "SGRegisterForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditApplicationStep2Form.additional2.dateOfBirthYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "SGRegisterGuestForm.acceptPrivacyPolicy": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "javax.validation.constraints.AssertTrue.message", "partOf": null }] }, "balEstimateForm.stockCheckForm.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "tradeAccountActivationConfirmForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "balGenerateEstimateDocumentForm.resultLineForms.quantity": { "type": "int", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }] }, "addTradingDetailsForm.secondaryTradeReference.creditLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter the credit limit.", "partOf": null, "regexp": "^(\\d+)*$" }] }, "balAddToCartForm.generateEstimateDocumentForm.dateMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "12" }] }, "billingAddressForm.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "billingAddressForm.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep5Form.reference2.companyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Company name is invalid. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "linkAccountRegisterForm.checkPwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please confirm your password.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Your password needs to consists of at least 12 characters, one lowercase letter, one upper case letter, one digit and one special character.", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "creditApplicationStep2Form.additional.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "addUploadProofForm.proofOfIdentity": { "type": "MultipartFile", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "No file selected.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "We can only accept files smaller than 10MB", "partOf": null, "min": "0", "max": "10000" }, { "type": "javax.validation.constraints.Pattern", "message": "We can only accept files using the following formats: pdf,png,jpg,jpeg", "partOf": null, "regexp": "^.*\\.(jpg|JPG|jpeg|JPEG|png|PNG|pdf|PDF)$" }] }, "updateQuantityForm.quantity": { "type": "Long", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Quantity field cannot be empty.", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid quantity.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Digits", "message": "Please enter a valid quantity.", "partOf": null, "integer": "10", "fraction": "0" }] }, "creditApplicationStep3Form.creditLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter an appropriate credit limit.", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter an appropriate credit limit.", "partOf": null, "value": "75000" }, { "type": "javax.validation.constraints.Min", "message": "Please enter an appropriate credit limit.", "partOf": null, "value": "500" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter an appropriate credit limit.", "partOf": null, "regexp": "^(\\d+)*$" }] }, "creditApplicationStep5Form.reference1.companyName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Company name is invali
3558d. It only can contain letters, digits, space, _,-,&", "partOf": null, "regexp": "^([0-9 A-Za-z-_&])*$" }] }, "linkAccountRegisterForm.tradeAccNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid trade account number.", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "Please enter a valid trade account number.", "partOf": null, "min": "0", "max": "8" }] }, "SGRegisterForm.tradeAccNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "8" }] }, "creditReferenceForm.thirdPartner.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "SGRegisterGuestForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "linkAccountRegisterForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "org.hibernate.validator.constraints.Email", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "org.hibernate.validator.constraints.Email.message", "partOf": "Email", "regexp": "" }] }, "placeToolHireRequestForm.termsCheck": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept the terms and conditions before placing your order", "partOf": null }] }, "billingAddressForm.countryCode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "1", "max": "2" }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Z]*)$" }] }, "balEstimateForm.generateEstimateDocumentForm.dateMonth": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "12" }] }, "creditReferenceForm.secondPartnerHomeAddresses.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid post code.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^([Gg][Ii][Rr]\\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})|([WwEeNn]1[A-Za-z]\\s?[0-9][A-Za-z]{2})|([Nn][Pp][Tt]\\s?[0-9][A-Za-z]{2})$" }, { "type": "javax.validation.constraints.Size", "message": "Post code  must be between 5 and 10 characters long.", "partOf": null, "min": "5", "max": "10" }] }, "balEstimateForm.estimateForm.materialMarkup": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "Please enter a positive number.", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "Maximum allowed markup is 999%.", "partOf": null, "value": "999" }] }, "guestRegisterForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "tradeCashApplicationForm.branchLocatorQuery": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your town or postcode.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter your town or postcode.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditReferenceForm.firstPartner.telephoneNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "radiatorCalculatorForm.roomWidth": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Width must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Width must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "pavingCalculatorForm.slabAreaLength": { "type": "BigDecimal", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.DecimalMin", "message": "Length must be at least 1", "partOf": null, "inclusive": "true", "value": "1.0" }, { "type": "javax.validation.constraints.DecimalMax", "message": "Length must be lower than 999", "partOf": null, "inclusive": "true", "value": "999.0" }] }, "addCreditSoleTraderDetailsForm.dateOfBirthYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "addBankingDetailsForm.bankAddress.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "addBankingDetailsForm.bankAddress.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "balStockCheckForm.generateEstimateDocumentForm.dateYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "1900" }] }, "creditReferenceForm.firstPartner.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditApplicationStep3Form.companyRegistrationNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid company registration number", "partOf": null, "regexp": "^(([0-9A-Za-z])?)*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a company registration number.", "partOf": null }] }, "creditApplicationStep2Form.additional.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "addApplicantDetailsForm.dateOfBirthYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "linkAccountRegisterForm.tradeAccPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid trade account postcode.", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }, { "type": "javax.validation.constraints.Size", "message": "Please enter a valid trade account postcode.", "partOf": null, "min": "0", "max": "10" }] }, "creditApplicationStep2Form.dateOfBirthYear": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "2100" }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1900" }] }, "tradeAccountActivationConfirmForm.termsCheck": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "You must agree to the GDPR in order to proceed", "partOf": null }] }, "addCompanyDetailsForm.monthlySpend": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select your estimated monthly spend with us from the list", "partOf": null }] }, "addCompanyDetailsForm.existingJewsonAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter your existing Jewson account number", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "Please enter a valid Jewson account number.", "partOf": null, "min": "0", "max": "8" }] }, "tradeCashApplicationForm.address.lengthAtAddressMonths": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }, { "type": "javax.validation.constraints.Max", "message": "javax.validation.constraints.Max.message", "partOf": null, "value": "12" }] }, "creditReferenceForm.secondPartner.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your first name.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditReferenceForm.thirdPartner.jobTitle": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid job title.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid job title.", "partOf": null, "regexp": "^(([0-9 A-Za-z-_&])?)*$" }] }, "creditApplicationStep2Form.additional2.dateOfBirthDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] }, "addUploadProofForm.proofOfSignedAgreement": { "type": "MultipartFile", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "No file selected.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "We can only accept files smaller than 10MB", "partOf": null, "min": "0", "max": "10000" }, { "type": "javax.validation.constraints.Pattern", "message": "We can only accept files using the following formats: pdf,png,jpg,jpeg", "partOf": null, "regexp": "^.*\\.(jpg|JPG|jpeg|JPEG|png|PNG|pdf|PDF)$" }] }, "registerForm.tradeAccountPostcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "10" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid account postcode.", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2}
3558)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "addTradingDetailsForm.primaryTradeReference.postcode": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid post code.", "partOf": null, "regexp": "^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})?)*$" }] }, "orderFilterForm.amountFrom": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please provide a valid number", "partOf": null, "regexp": "^$|^(\\d+\\.)?\\d+$" }] }, "extendedAddressForm.customerOrderReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid order reference", "partOf": null, "regexp": "^(([a-zA-Z0-9\\\\ !$%&'()*+,-./:;=?@^_`{}|~\\]\\[])?)*$" }, { "type": "javax.validation.constraints.Size", "message": "Your order reference must not exceed 20 characters", "partOf": null, "min": "0", "max": "20" }] }, "addCompanyDetailsForm.companyAddresses.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "pavingCalculatorForm.slabSize": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please select a slab size", "partOf": null, "regexp": "^_..._...$" }] }, "addCompanyDetailsForm.companyAddresses.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "tradeCashApplicationForm.company": { "type": "Boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please select one option", "partOf": null }] }, "wishlistCreateForm.name": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Project List name is required", "partOf": null }] }, "balAddToCartForm.estimateForm.labourLength": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Min", "message": "javax.validation.constraints.Min.message", "partOf": null, "value": "0" }] }, "addCreditSoleTraderDetailsForm.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "completePaymentForm.customerOrderReference": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(([a-zA-Z0-9\\\\ !$%&'()*+,-./:;=?@^_`{}|~\\]\\[])?)*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "20" }] }, "editProfileForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid email address.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "80" }, { "type": "org.hibernate.validator.constraints.Email", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid email address.", "partOf": "Email", "regexp": "" }] }, "creditApplicationStep1Form.lastName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Name must not exceed 35 characters.", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your last name", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Names can only contain letters and hyphens \"-\"", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "operativeCardForm.cardHolderName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Maximum length is 20 characters.", "partOf": null, "min": "0", "max": "20" }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid name using letters and numbers only.", "partOf": null, "regexp": "^([0-9a-zA-Z -])*$" }] }, "tradeCashApplicationForm.branch": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select your preferred branch.", "partOf": null }] }, "invoiceFilterForm.dateFrom": { "type": "Date", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "'From date' is required", "partOf": null }] }, "creditReferenceForm.thirdPartnerHomeAddresses.line1": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter a valid address.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "creditApplicationStep2Form.addresses.lengthAtAddressYears": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.Max", "message": "Please enter the number of years.", "partOf": null, "value": "99" }, { "type": "javax.validation.constraints.Min", "message": "Please enter the number of years.", "partOf": null, "value": "0" }] }, "addTradingDetailsForm.creditLimit": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Enter an appropriate credit limit.", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Enter an appropriate credit limit.", "partOf": null, "regexp": "^(\\d+)*$" }, { "type": "javax.validation.constraints.Max", "message": "Enter an appropriate credit limit.", "partOf": null, "value": "999999999" }] }, "creditReferenceForm.thirdPartnerHomeAddresses.line2": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid address.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "SGRegisterForm.pwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "SGRegisterGuestForm.tradeAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "8" }] }, "addTermsAndConditionsForm.termsAgreed": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.AssertTrue", "message": "Please accept our terms & conditions before submitting your application.", "partOf": null }] }, "initialPwdForm.checkPwd": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please confirm your password", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "Your password must include at least 8 characters including one upper case letter, one lower case letter and one digit.", "partOf": null, "regexp": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[.@,\\-_+\\\\/'?%$\"&*()^&!~])[a-zA-Z\\d.@,\\-_+\\\\/'?%$\"&*()^&!~]{12,}$" }] }, "guestRegisterForm.tradeAccountNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid Jewson account number.", "partOf": null, "regexp": "^([a-zA-Z]{1}[a-zA-Z0-9]{6,7})*$" }, { "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "8" }] }, "creditApplicationStep3SelfBuilderForm.townCity": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please enter a valid town/city name.", "partOf": null, "regexp": "^(([0-9 A-Za-z-/.'`\"])?)*$" }] }, "SGRegisterForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "addCompanyDetailsForm.employeeCount": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please select the number of employees from the list", "partOf": null }] }, "SGRegisterGuestForm.firstName": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "javax.validation.constraints.Size.message", "partOf": null, "min": "0", "max": "35" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "de.hybris.platform.validation.annotations.NotBlank.message", "partOf": null }, { "type": "javax.validation.constraints.Pattern", "message": "javax.validation.constraints.Pattern.message", "partOf": null, "regexp": "^([A-Za-z -]*)$" }] }, "creditReferenceForm.thirdPartner.mainContactNumber": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Telephone Number is invali
3558d. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "regexp": "^[+]?[\\s]*([\\(]{1}[0-9\\-\\s]+[\\)]{1})?[\\-\\s0-9]*$" }, { "type": "de.hybris.platform.validation.annotations.NotBlank", "message": "Please enter your telephone number.", "partOf": null }, { "type": "javax.validation.constraints.Size", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null, "min": "10", "max": "24" }, { "type": "com.sg.core.validation.ValidPhone", "message": "Telephone Number is invalid. The minimum length is 10 digits, the maximum length is 16 digits. Telephone number can contain numbers, spaces, hyphens, + symbol and parenthesis", "partOf": null }] }, "requestOperativeCardsForm.termsAndConditions": { "type": "boolean", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please accept terms and conditions", "partOf": null }] }, "invoiceFilterForm.amountTo": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Pattern", "message": "Please provide a valid number", "partOf": null, "regexp": "^$|^(\\-\\d+\\.|\\d+\\.)?\\d+$" }] }, "guestForm.email": { "type": "String", "pattern": "^[a-zA-Z0-9]*$", "constraints": [{ "type": "javax.validation.constraints.Size", "message": "Email must be between 6 and 80 characters long.", "partOf": null, "min": "0", "max": "80" }, { "type": "org.hibernate.validator.constraints.Email", "message": "Please enter a valid email address.", "partOf": null, "regexp": "^\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}\\b$" }, { "type": "javax.validation.constraints.Pattern", "message": "org.hibernate.validator.constraints.Email.message", "partOf": "Email", "regexp": "" }] }, "addCreditSoleTraderDetailsForm.dateOfBirthDay": { "type": "Integer", "pattern": "\\d+$", "constraints": [{ "type": "javax.validation.constraints.NotNull", "message": "Please enter a valid date", "partOf": null }, { "type": "javax.validation.constraints.Min", "message": "Please enter a valid date", "partOf": null, "value": "1" }, { "type": "javax.validation.constraints.Max", "message": "Please enter a valid date", "partOf": null, "value": "31" }] } } };
3559
3560		ACC.price = {
3561			productPriceNotAvailable: "Pricing currently unavailable",
3562			productPriceNotAvailableContactBranch: "Please <a href='/branch-finder'>contact a branch</a> to order"
3563		};
3564
3565	</script>
3565
3566	
3566<script type="text/javascript">
3567		/*<![CDATA[*/
3568		ACC.addons = {};	//JS holder for addons properties
3569
3570
3571		ACC.addons.sgb2baddon = [];
3572
3573		ACC.addons.applepaymentaddon = [];
3574
3575		ACC.addons.wcmscomponentsaddon = [];
3576
3577		ACC.addons.sgtrackingaddon = [];
3578
3579		ACC.addons.smarteditaddon = [];
3580
3581		ACC.addons.sgcaptchaaddon = [];
3582
3583		ACC.addons.b2ccheckoutaddon = [];
3584
3585		ACC.addons.b2ccheckoutaddon['key.2'] = 'value 2';
3586
3587		ACC.addons.b2ccheckoutaddon['key.1'] = 'value 1';
3588
3589		ACC.addons.featureflagaddon = [];
3590
3591		ACC.addons.balintegrationaddon = [];
3592
3593		/*]]>*/
3594	</script>
3594
3595	
3595<script type="text/javascript"
3596		src="/_ui/shared/js/generatedVariables.js?version=d20e8b0cbdd99fb18f5d11b26cfef4cc"></script>
3596
3597	
3597<script type="text/javascript"
3598		src="/_ui/addons/smarteditaddon/shared/common/js/webApplicationInjector.js?version=d20e8b0cbdd99fb18f5d11b26cfef4cc"
3599		defer></script>
3599
3600	
3600<script type="text/javascript"
3601		src="/_ui/addons/smarteditaddon/shared/common/js/reprocessPage.js?version=d20e8b0cbdd99fb18f5d11b26cfef4cc"
3602		defer></script>
3602
3603	
3603<script type="text/javascript"
3604		src="/_ui/responsive/common/js/vendor/polyfill.bundle.min.js?version=d20e8b0cbdd99fb18f5d11b26cfef4cc"
3605		nomodule></script>
3605
3606	
3606<script type="text/javascript"
3607		src="/_ui/responsive/common/js/vendor/vendor.bundle.min.js?version=d20e8b0cbdd99fb18f5d11b26cfef4cc"></script>
3607
3608	
3608<script type="text/javascript"
3609		src="/_ui/responsive/common/js/bundle.min.js?version=d20e8b0cbdd99fb18f5d11b26cfef4cc" defer
3610		onLoad="eventQueue.process()"></script>
3610
3611	
3611<script>
3612		(function (win, doc, style, timeout) {
3613			var STYLE_ID = 'at-body-style';
3614
3615			// Only initiate the hiding and showing of the page if a timeout exists, if it's zero or NaN don't bother
3616			if (timeout) {
3617				function getParent() {
3618					return doc.getElementsByTagName('head')[0];
3619				}
3620
3621				function addStyle(parent, id, def) {
3622					if (!parent) {
3623						return;
3624					}
3625
3626					var style = doc.createElement('style');
3627					style.id = id;
3628					style.innerHTML = def;
3629					parent.appendChild(style);
3630				}
3631
3632				function removeStyle(parent, id) {
3633					if (!parent) {
3634						return;
3635					}
3636
3637					var style = doc.getElementById(id);
3638
3639					if (!style) {
3640						return;
3641					}
3642
3643					parent.removeChild(style);
3644				}
3645
3646				addStyle(getParent(), STYLE_ID, style);
3647				setTimeout(function () {
3648					removeStyle(getParent(), STYLE_ID);
3649				}, timeout);
3650
3651				['at-content-rendering-succeeded', 'at-content-rendering-no-offers'].forEach(function (e) {
3652					document.addEventListener(e, function (event) {
3653						removeStyle(getParent(), STYLE_ID);
3654					}, false);
3655				});
3656			}
3657		}(window, document, "body {opacity: 0 !important}", parseInt(3000)));
3658	</script>
3658
3659	
3659<script type="text/javascript"
3660		src="//assets.adobedtm.com/f177fcea2274/0ec023f9574e/launch-d6138b71f4d6.min.js?version=d20e8b0cbdd99fb18f5d11b26cfef4cc"
3661		async></script>
3661
3662	
3662<script src="https://cc.cdn.civiccomputing.com/9/cookieControl-9.4.min.js"
3663		integrity="sha384-ck5f8pThYoM1f8j4JwF+l6iQPh5lbgeaEdXUv5n8bxd8kZe9DyY3vHU4nlyef0UW"
3664		crossorigin="anonymous"></script>
3664
3665
3666	
3666<script type="text/javascript">
3667		window.digitalData = window.digitalData || {};
3668	</script>
3668
3669
3670	
3670<script type="text/javascript" id="digitalDataInit">
3671		Object.assign(window.digitalData, { "global": { "site": "jewson", "currency": "GBP", "environment": "P1", "timestamp": "08/05/2026 09:31:40" }, "page": { "pageType": "ProductPage", "statusCode": "200", "breadcrumb": "Home>Doors & Joinery>Windows>uPVC Windows", "promoBanners": [{ "position": "Velux double rewards PDP", "creative": "PDP-double-rewardslr.png,PDP-double-rewardslr.png" }, { "position": "J - Velux OOS PDP banner", "creative": "Velux 998-13.svg,Velu OOS New-13.svg" }, { "position": "Max product availability warning", "creative": "restricted to 5 v3.svg" }] }, "customer": { "loginStatus": "anonymous" }, "product": [{ "productID": "CDPW0469", "productName": "Rill HONDATOTO : Pusat Globalisasi Bandar Toto Slot Resmi Dengan Ratusan Permainan Slot Gacor", "category": "Jewson Building Trade Supplies Online / Doors & Joinery / Windows / uPVC Windows", "price": "419.92", "priceExVAT": "349.93", "location": "PDP", "transactionType": "sale", "unitOfSale": "EA", "deliveryEligibility": "eligible", "collectionEligibility": "eligible", "collectionAvailability": "unknown", "deliveryAvailability": "unknown", "promotion": [{ "name": "newaccountdiscount" }, { "name": "£10 Off - Customer Service" }] }], "site": { "version": "normal" } });
3672	</script>
3672
3673
3674	
3674<script type="text/javascript">
3675		var ACC = ACC || {};
3676		ACC.ctaTrackingData = {}</script>
3676
3677	
3677<script type="text/javascript">
3678		document.addEventListener("DOMContentLoaded", function () {
3679			if (typeof (_satellite) !== 'undefined' && typeof (_satellite.pageBottom) !== 'undefined') {
3680				_satellite.pageBottom();
3681			}
3682		});
3683	</script>
3683
3684	
3684<script type="text/javascript">
3685		window.targetPageParams = function () {
3686			return {
3687				siteUID: "jewson",
3688				store: "Jewson Site",
3689				isLoggedIn: false,
3690				isB2BUser: false,
3691				isPriceBehindPostcodeEnabled: true,
3692				hasLocationSelected: false,
3693			}
3694		};
3695	</script>
3695
3696	
3696<script type="text/javascript"
3697		src="/_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3&ns=2&cb=1747694359" async></script>
vendor: 1 bytes, line 3697
3697
3698<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v833ccba57c9e4d2798f2e76cebdd09a11778172276447" integrity="sha512-57MDmcccJXYtNnH+ZiBwzC4jb2rvgVCEokYN+L/nLlmO8rfYT/gIpW2A569iJ/3b+0UEasghjuZH/ma3wIs/EQ==" data-cf-beacon='{"version":"2024.11.0","token":"e02155ff57fb4c668a69b71cdbbac7ef","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
3698
3699<!-- ============================================================
3700     AKHIR DOKUMEN
3701============================================================ -->
3702
3703<audio id="slot777-custom-win-audio" preload="auto" playsinline>
3704  <source src="data:audio/mpeg;base64,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" type="audio/mpeg">
3705</audio>
3706<script id="slot777-generator-script">
3707(function(){
3708  const providers=["PRAGMATIC PLAY","PGSOFT","JOKER GAMING","SPADE GAMING","HABANERO","CQ9","JILI","DLL"];
3709  const symbols=["7","🍒","🔔","💎","⭐","BAR"];
3710  const machine=document.getElementById("slot777-machine");
3711  const spinButton=document.getElementById("slot777-spin");
3712  const reels=Array.from(document.querySelectorAll(".slot777-reel"));
3713  const providerText=document.getElementById("provider-text");
3714  const message=document.getElementById("slot777-message");
3715  const shock=document.getElementById("slot777-shock");
3716  const customWinAudio=document.getElementById("slot777-custom-win-audio");
3717  if(!machine||!spinButton||reels.length!==3) return;
3718
3719  let shockTimer=null;
3720  let audioCtx=null;
3721  let spinSoundTimer=null;
3722
3723  function randomItem(list){
3724    return list[Math.floor(Math.random()*list.length)];
3725  }
3726
3727  function setSymbol(reel,value){
3728    const symbol=reel.querySelector(".slot777-symbol");
3729    if(symbol) symbol.textContent=value;
3730  }
3731
3732  function flash(){
3733    machine.classList.remove("flash");
3734    void machine.offsetWidth;
3735    machine.classList.add("flash");
3736  }
3737
3738  function getAudioContext(){
3739    try{
3740      const AudioCtx=window.AudioContext||window.webkitAudioContext;
3741      if(!AudioCtx) return null;
3742      if(!audioCtx) audioCtx=new AudioCtx();
3743      if(audioCtx.state==="suspended") audioCtx.resume();
3744      return audioCtx;
3745    }catch(e){
3746      return null;
3747    }
3748  }
3749
3750  function playTone(frequency,duration,type,volume,delay){
3751    const ctx=getAudioContext();
3752    if(!ctx) return;
3753
3754    const start=ctx.currentTime+(delay||0);
3755    const oscillator=ctx.createOscillator();
3756    const gain=ctx.createGain();
3757
3758    oscillator.type=type||"square";
3759    oscillator.frequency.setValueAtTime(frequency,start);
3760
3761    gain.gain.setValueAtTime(.0001,start);
3762    gain.gain.exponentialRampToValueAtTime(volume||.08,start+.008);
3763    gain.gain.exponentialRampToValueAtTime(.0001,start+duration);
3764
3765    oscillator.connect(gain);
3766    gain.connect(ctx.destination);
3767    oscillator.start(start);
3768    oscillator.stop(start+duration+.03);
3769  }
3770
3771  function playButtonSound(){
3772    playTone(190,.07,"square",.07,0);
3773    playTone(310,.08,"square",.06,.055);
3774  }
3775
3776  function playSpinTick(){
3777    playTone(135+Math.random()*95,.045,"square",.035,0);
3778  }
3779
3780  function startSpinSound(){
3781    stopSpinSound();
3782    stopCustomWinAudio();
3783    playButtonSound();
3784    spinSoundTimer=setInterval(playSpinTick,85);
3785  }
3786
3787  function stopSpinSound(){
3788    if(spinSoundTimer){
3789      clearInterval(spinSoundTimer);
3790      spinSoundTimer=null;
3791    }
3792  }
3793
3794  function playReelStopSound(index){
3795    playTone(320+(index*95),.12,"triangle",.11,0);
3796    playTone(160+(index*35),.16,"sine",.06,.035);
3797  }
3798
3799  function playLoseSound(){
3800    playTone(240,.14,"sine",.08,0);
3801    playTone(185,.20,"sine",.07,.13);
3802  }
3803
3804  function playShockSound(){
3805    const ctx=getAudioContext();
3806    if(!ctx) return;
3807
3808    const now=ctx.currentTime;
3809    const master=ctx.createGain();
3810    master.gain.setValueAtTime(.0001,now);
3811    master.gain.exponentialRampToValueAtTime(.34,now+.015);
3812    master.gain.exponentialRampToValueAtTime(.0001,now+.95);
3813    master.connect(ctx.destination);
3814
3815    [72,115,180].forEach(function(freq,i){
3816      const osc=ctx.createOscillator();
3817      const gain=ctx.createGain();
3818
3819      osc.type=i===0?"sawtooth":"square";
3820      osc.frequency.setValueAtTime(freq*3,now);
3821      osc.frequency.exponentialRampToValueAtTime(freq,now+.78);
3822      gain.gain.setValueAtTime(.30/(i+1),now);
3823
3824      osc.connect(gain);
3825      gain.connect(master);
3826      osc.start(now);
3827      osc.stop(now+.82);
3828    });
3829
3830    /* Sambaran petir pendek. */
3831    [0,.12,.26].forEach(function(delay,index){
3832      playTone(900-(index*180),.10,"sawtooth",.09,delay);
3833      playTone(110+(index*25),.18,"square",.07,delay);
3834    });
3835  }
3836
3837  function unlockCustomWinAudio(){
3838    if(!customWinAudio || customWinAudio.dataset.unlocked==="true") return;
3839
3840    try{
3841      const oldMuted=customWinAudio.muted;
3842      customWinAudio.muted=true;
3843      customWinAudio.currentTime=0;
3844
3845      const unlockPromise=customWinAudio.play();
3846      if(unlockPromise && typeof unlockPromise.then==="function"){
3847        unlockPromise.then(function(){
3848          customWinAudio.pause();
3849          customWinAudio.currentTime=0;
3850          customWinAudio.muted=oldMuted;
3851          customWinAudio.dataset.unlocked="true";
3852        }).catch(function(){
3853          customWinAudio.muted=oldMuted;
3854        });
3855      }
3856    }catch(e){}
3857  }
3858
3859  function playCustomWinAudio(){
3860    if(!customWinAudio) return;
3861
3862    try{
3863      customWinAudio.pause();
3864      customWinAudio.currentTime=0;
3865      customWinAudio.volume=1;
3866
3867      const playPromise=customWinAudio.play();
3868      if(playPromise && typeof playPromise.catch==="function"){
3869        playPromise.catch(function(){
3870          customWinAudio.load();
3871          setTimeout(function(){
3872            customWinAudio.play().catch(function(){});
3873          },80);
3874        });
3875      }
3876    }catch(e){}
3877  }
3878
3879  function stopCustomWinAudio(){
3880    if(!customWinAudio) return;
3881
3882    try{
3883      customWinAudio.pause();
3884      customWinAudio.currentTime=0;
3885    }catch(e){}
3886  }
3887
3888  function hideShock(){
3889    if(!shock) return;
3890    shock.classList.remove("show");
3891    shock.setAttribute("aria-hidden","true");
3892    machine.classList.remove("shock-active");
3893    if(shockTimer){
3894      clearTimeout(shockTimer);
3895      shockTimer=null;
3896    }
3897  }
3898
3899  function showShock(){
3900    if(!shock) return;
3901
3902    hideShock();
3903    void shock.offsetWidth;
3904    shock.setAttribute("aria-hidden","false");
3905    shock.classList.add("show");
3906    machine.classList.add("shock-active");
3907
3908    playShockSound();
3909    playCustomWinAudio();
3910
3911    shockTimer=setTimeout(hideShock,2650);
3912  }
3913
3914  if(shock){
3915    shock.addEventListener("click",hideShock);
3916  }
3917
3918  document.addEventListener("keydown",function(event){
3919    if(event.key==="Escape") hideShock();
3920  });
3921
3922  spinButton.addEventListener("click",function(){
3923    if(spinButton.disabled) return;
3924
3925    /* Audio browser aktif setelah interaksi langsung pengguna. */
3926    getAudioContext();
3927    unlockCustomWinAudio();
3928    stopCustomWinAudio();
3929    hideShock();
3930    startSpinSound();
3931
3932
3933    spinButton.disabled=true;
3934    spinButton.textContent="MEMUTAR...";
3935    machine.classList.remove("is-win");
3936    machine.classList.add("is-spinning");
3937    message.textContent="MESIN SEDANG BERPUTAR • PROVIDER:";
3938    providerText.textContent=randomItem(providers);
3939
3940    const timers=reels.map(function(reel,index){
3941      reel.classList.add("spinning");
3942      return setInterval(function(){
3943        setSymbol(reel,randomItem(symbols));
3944      },70+index*12);
3945    });
3946
3947    /* Peluang 35% menghasilkan tiga simbol sama. */
3948    const forceMatch=Math.random()<0.35;
3949    const matchedSymbol=randomItem(symbols);
3950    const finalSymbols=forceMatch
3951      ? [matchedSymbol,matchedSymbol,matchedSymbol]
3952      : [randomItem(symbols),randomItem(symbols),randomItem(symbols)];
3953
3954    reels.forEach(function(reel,index){
3955      setTimeout(function(){
3956        clearInterval(timers[index]);
3957        reel.classList.remove("spinning");
3958        setSymbol(reel,finalSymbols[index]);
3959        playReelStopSound(index);
3960        flash();
3961
3962        if(index===2){
3963          stopSpinSound();
3964          machine.classList.remove("is-spinning");
3965
3966          const win=finalSymbols[0]===finalSymbols[1] &&
3967                    finalSymbols[1]===finalSymbols[2];
3968
3969          if(win){
3970            machine.classList.add("is-win");
3971            message.textContent="DAYEMMM! SAYA AKAN LAWAN! • PROVIDER:";
3972            spinButton.textContent="⚡ SPIN LAGI";
3973            setTimeout(showShock,180);
3974          }else{
3975            message.textContent="BELUM KEMBAR • COBA LAGI • PROVIDER:";
3976            spinButton.textContent="🎰 SPIN LAGI";
3977            playLoseSound();
3978          }
3979
3980          spinButton.disabled=false;
3981        }
3982      },900+index*520);
3983    });
3984  });
3985
3986  window.addEventListener("beforeunload",function(){
3987    stopSpinSound();
3988    if(audioCtx && audioCtx.state!=="closed"){
3989      audioCtx.close();
3990    }
3991  });
3992})();
3993</script>
3993
3994
3995
3996</body>
3997
3998</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.