PageSourceSearch

https://subscription.outlookindia.com/newoffer/website-offers.php

html outlookindia.com collected 2026-09-24 06:56:13 UTC 71,951 bytes, 1,331 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    <title>Outlook Magazine Subscription Outlook India | Business | Money | Traveller | Hindi</title>
7	<meta id="description" name="description" content="Subscribe to Outlook Group Magazines Online. Outlook, Traveller, Money, Business and Hindi." />	
8	<meta id="keywords" name="keywords" content="current affairs magazine of India,Indian news magazine,news magazine,current affairs magazine,Indian current affairs magazine,India's most exciting news weekly,English news magazine,latest news on business,analysis,politics news,business, sports,cricke,movies" />
9	<!-- Favicon --> 
10	<link rel="shortcut icon" href="https://fea.assettype.com/outlook/outlook-india/assets/favicon.ico" type="image/x-icon">
11	<link rel="apple-touch-icon" href="https://fea.assettype.com/outlook/outlook-india/assets/apple-touch-icon.png">
12	<link rel="icon" type="image/png" href="https://fea.assettype.com/outlook/outlook-india/assets/favicon.ico">
13	<!-- Title of the webpage -->
14    <title>Outlook Magazine Subscription</title>
15	<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
16	<link rel="icon" type="image/png" href="favicon.ico">
17	
17<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4" type="92621a6c86b993c0b25608ec-text/javascript"></script>
17
18	
19	<!-- Load Tailwind CSS -->
20    <!--script src="https://cdn.tailwindcss.com"></script-->
21    
21<script type="92621a6c86b993c0b25608ec-text/javascript">
22        tailwind.config = {
23            theme: {
24                extend: {
25                    colors: {
26                        'primary-red': '#d60810',  
27                        'primary-dark': '#b8060e',
28                        'bg-light': '#f7f7f7',
29                        'selection-bg': '#fef2f2', 
30						'header-dark': '#1f2937',
31                    },
32                    fontFamily: {
33                        sans: ['Inter', 'sans-serif'],
34                    },
35                    animation: {
36                        'pulse-slow': 'pulse 4s cubic-bezier(0.4, 0, 0.6, 1) infinite',
37                    }
38                }
39            }
40        }
41    </script>
41
42	
42<script type="92621a6c86b993c0b25608ec-text/javascript">
43    (function(c,l,a,r,i,t,y){
44        c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
45        t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
46        y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
47    })(window, document, "clarity", "script", "utktqgt66q");
48	</script>
48
49    <!-- Use Inter Font -->
50    <link href="https://fonts.googleapis.com/css2?family=Inter:[email protected]&display=swap" rel="stylesheet">
51	
51<script type="92621a6c86b993c0b25608ec-text/javascript">
vendor: 440 bytes, lines 51-64
51
52		!function(f,b,e,v,n,t,s)
53		{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
54		n.callMethod.apply(n,arguments):n.queue.push(arguments)};
55		if(!f._fbq)f._fbq=n;
56		n.push=n;n.loaded=!0;n.version='2.0';
57		n.queue=[];
58		t=b.createElement(e);t.async=!0;
59		t.src=v;
60		s=b.getElementsByTagName(e)[0];
61		s.parentNode.insertBefore(t,s)}
62		(window, document,'script','https://connect.facebook.net/en_US/fbevents.js');
63
64		fbq('init', '
641019930838075477
vendor: 35 bytes, lines 64-66
64');
65		fbq('track', 'PageView');
66	
66</script>
66
67	<noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=1019930838075477&ev=PageView&noscript=1"/></noscript>
68	
68<script type="92621a6c86b993c0b25608ec-text/javascript">
69		/*fbq('track', 'Purchase', {
70			content_category: 'domestic',
71			content_type: 'magazines',
72			domain: 'outlookindia.com'
73		});*/
74		 
75	</script>
75
76    <style>
77       .grid-container{overflow-x:auto;border-radius:.75rem;box-shadow:0 10px 15px -3px rgb(0 0 0 / .1),0 4px 6px -4px rgb(0 0 0 / .1);background-color:#fff;border:1px solid #e5e7eb}.pricing-grid{display:grid;grid-template-columns:minmax(140px,1fr) repeat(5,minmax(120px,1fr));width:max-content;min-width:100%;gap:1px}.grid-header,.grid-cell{padding:1rem .5rem;text-align:center;display:flex;align-items:center;justify-content:center;border-bottom:1px solid #e5e7eb}.grid-cell:nth-child(6n+2),.grid-cell:nth-child(6n+3),.grid-cell:nth-child(6n+4),.grid-cell:nth-child(6n+5),.grid-cell:nth-child(6n+6){background-color:#fff}.grid-header-row{position:sticky;top:0;background-color:#fff;color:#fff;font-weight:700}.grid-header.term-column{background-color:#374151;border-right:1px solid #4b5563}.term-column{position:sticky;left:0;z-index:20;background-color:#f3f4f6;font-weight:600;border-right:1px solid #e5e7eb;justify-content:flex-start;padding-left:1rem;text-align:left;}@media 
78	   (max-width:1200px){.grid-header,.grid-cell{padding:.8rem .4rem;font-size:.85rem}.price-new{font-size:1.1rem}}
79	   @media (max-width:992px){.pricing-grid{grid-template-columns:minmax(130px,1fr) repeat(5,minmax(110px,1fr))}.grid-header,.grid-cell{min-height:75px;padding:.7rem .3rem;font-size:.8rem}.price-new{font-size:1rem}} 
80	   @media (max-width:768px){.grid-header,.grid-cell{padding:.75rem .4rem;font-size:.8rem;min-height:80px}}
81	   @media (max-width:600px){ .pricing-grid{grid-template-columns: minmax(106px, auto) repeat(5, minmax(116px,auto)); width:fit-content; }.price-new{font-size:1rem;} }  
82	   .select-option{position:relative;cursor:pointer;min-height:100%;display:flex;align-items:stretch;min-height:100%}.select-option input[type="checkbox"]{position:absolute;opacity:0;width:100%;height:100%;cursor:pointer;z-index:20}.select-label{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%;padding:.5rem;transition:all 0.2s;border:2px solid #fff0;border-radius:.375rem}.select-option input[type="checkbox"]:checked+.select-label{border-color:#d60810;background-color:#fef2f2;font-weight:600;color:#d60810;box-shadow:0 0 0 3px rgb(214 8 16 / .1)}.price-old{color:#9ca3af;text-decoration:line-through;font-size:.75rem}.price-new{font-size:1.125rem;font-weight:800;color:#1f2937}
83	</style>
84	
84<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js" type="92621a6c86b993c0b25608ec-text/javascript"></script>
84
85	
85<script language=javascript type="92621a6c86b993c0b25608ec-text/javascript">
86	$(document).ready(function(){
87		$('.number-only').on("keydown", function (e) {
88			return e.which !== 32;
89		});
90		$('.number-only').keyup(function(e) {
91			if(this.value!='-')
92				while(isNaN(this.value))
93					this.value = this.value.split('').reverse().join('').replace(/[\D]/i,'')
94							.split('').reverse().join('');
95
96
97		})
98		.on("cut copy paste",function(e){
99			/* e.preventDefault();*/
100		});
101	});
102	function DoSubmit()
103	{
104		if(flag==false){alert("Please choose atleast one term (5 / 3 / 1 years)");return false;}
105		return true;
106	}
107	</script>
107
108	<!-- Google tag (gtag.js) -->
vendor: 66 bytes, lines 108-109
108
109	<script async src="https://www.googletagmanager.com/gtag/js?id=
109G-322WCNE2BL
vendor: 62 bytes, lines 109-110
109" type="92621a6c86b993c0b25608ec-text/javascript"></script>
110	
110<script type="92621a6c86b993c0b25608ec-text/javascript">
111	  
vendor: 140 bytes, lines 111-114
111window.dataLayer = window.dataLayer || [];
112	  function gtag(){dataLayer.push(arguments);}
113	  gtag('js', new Date()); 
114	  gtag('config', '
114G-322WCNE2BL
vendor: 6 bytes, lines 114-115
114');
115	
115</script>
115
116	<!-- Google Tag Manager -->
117	
117<script type="92621a6c86b993c0b25608ec-text/javascript">
vendor: 335 bytes, lines 117-121
117(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
118	new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
119	j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
120	'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
121	})(window,document,'script','dataLayer','
121GTM-WWFB26FS
vendor: 3 bytes, line 121
121');
121</script>
121
122	 </script>
122
123</head>
124
125<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 125-126
125
126<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
126GTM-WWFB26FS
vendor: 84 bytes, line 126
126" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
127<!-- End Google Tag Manager (noscript) -->
128
129<body class="bg-bg-light font-sans text-gray-800">
130	<!-- NEW HEADER SECTION (Title Only) -->
131    
132	<header class="bg-gradient-to-r from-gray-900 via-gray-800 to-gray-900 shadow-2xl border-b border-yellow-500/30">
133		<div class="container mx-auto px-4 py-4 md:py-6 max-w-7xl text-center relative">
134			<div class="absolute inset-0 bg-yellow-500/5 blur-3xl"></div>
135			<h1 class="relative text-xl md:text-3xl lg:text-4xl font-extrabold tracking-wider text-white 
136					   drop-shadow-[0_0_15px_rgba(234,179,8,0.3)]">
137				EXCLUSIVE SUBSCRIPTION OFFER
138			</h1>
139		</div>
140	</header>
141
142    <!-- NEW LOGO SECTION (Logo Only) -->
143    <div class="bg-white py-4 shadow-md mb-8">
144        <div class="container mx-auto px-4 text-center max-w-7xl">
145            <img src="https://kj2.outlookindia.com/easyqr/img/outlook-group.jpg" alt="Outlook Logo" class="w-32 md:w-48 h-auto mx-auto" />
146        </div>
147    </div>
148
149    <div class="container mx-auto px-4 mt-8">
150
151				<!-- Eye-Catching Banner (Fully Responsive and Rounded) -->
152 		<div class="max-w-7xlxx mx-auto mb-12 bg-white rounded-xl shadow-xl 1-4 md:p-8"> 
153            <!-- Added cursor-pointer and onclick to trigger the zoom modal -->
vendor: 150 bytes, lines 153-154
153
154            <script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="92621a6c86b993c0b25608ec-|49"></script>
154<img 
155                src="https://img-2.outlookindia.com/outlookindia/banners/2026/09/08/september-26.png"  
156				id="outlookSubsBannerImage"
157                alt="Outlook Special Subscription Offer Banner" 
158                class="w-full h-auto object-cover rounded-xl shadow-2xl transition duration-500 ease-in-out transform hover:scale-[1.005] cursor-pointer"
159                onerror="this.onerror=null; this.src='https://placehold.co/1200x300/d60810/ffffff?text=OUTLOOK+SPECIAL+OFFER'; this.alt='Placeholder Banner';" />
160        </div>
161		
162		<!-- Zoom Button for Mobile Only -->
163        <div class="text-center mb-12 md:hidden">
164		<button type="button" onclick="if (!window.__cfRLUnblockHandlers) return false; toggleBannerZoom();" class="bg-gradient-to-r from-red-600 to-red-700 hover:from-red-700 hover:to-red-800 text-white text-base font-semibold py-2.5 px-8 rounded-full shadow-lg hover:shadow-xl transform hover:scale-105 transition-all duration-300 ease-in-out flex items-center justify-center mx-auto gap-2 border border-red-500/20" data-cf-modified-92621a6c86b993c0b25608ec-="">
165				<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
166					<circle cx="11" cy="11" r="8"></circle>
167					<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
168					<line x1="11" y1="8" x2="11" y2="14"></line>
169					<line x1="8" y1="11" x2="14" y2="11"></line>
170				</svg>
171				Zoom to View Offer Details
172			</button>
173		</div>
174				
175        <form name="online" action="https://subscription.outlookindia.com/processorder-new-kj.php" method="post" onsubmit="if (!window.__cfRLUnblockHandlers) return false; return fnValAndSubmit();" data-cf-modified-92621a6c86b993c0b25608ec-="">
176            <!-- Hidden inputs from original source -->
177            <input type="hidden" name="sess" value="20140714121041449107046" />
178            <input type="hidden" name="renew" value="0" />
179            <input type="hidden" name="magazine_code" value="1" />
180            <input type="hidden" name="amt" value="" id="hidden-amt" />
181            <input type="hidden" name="dura" value="" id="dura" />
182            <input type="hidden" name="gift" value="" id="hidden-gift" />
183            <input type="hidden" name="ggift" value="" id="ggift" />
184            <input type="hidden" name="inco" value="0" />
185            <input type="hidden" name="mag" id="mag" value="OL-TEO-Readers" />
186            <input type="hidden" name="mag_select" value="OH_3_1199_1800&lt;br&gt;" id="hidden-mag-select" />
187            <input type="hidden" name="selectionlist" value="" id="hidden-selectionlist" />
188            <input type="hidden" name="printoffline" value="false" />
189            <input type="hidden" name="ref" value="" />
190			<input type="hidden" name="source2" value="website" />
191
192            <!-- Pricing Section (Horizontal Scrollable Grid for Mobile) -->
193            <div class="mb-12">
194                <h3 class="text-2xl font-bold mb-4 text-center text-[#d60810]">Choose Your Subscription Plan</h3>
195				<p class="text-center text-sm text-gray-500 mt-4 mb-4 lg:hidden">
196                    <strong>&larr; Scroll horizontally to view all magazine options &rarr; </strong>
197                </p> 
198                <div class="grid-container">
199                    <div class="pricing-grid">
200                        
201                        <!-- Header Row (Sticky Top) -->
202                        <div class="grid-header term-column grid-header-row border-t-0" style="height:90px;">Term</div>
203						<div class="grid-header grid-header-row"><img src="https://img-2.outlookindia.com/outlookindia/banners/2025/11/10/150/OLI1.jpg" alt="OUTLOOK INDIA" /></div>
204                        <div class="grid-header grid-header-row"><img src="https://img-2.outlookindia.com/outlookindia/banners/2025/11/10/150/OLB3.jpg" alt="OUTLOOK BUSINESS" /></div>
205                        <div class="grid-header grid-header-row"><img src="https://img-2.outlookindia.com/outlookindia/banners/2025/11/10/150/OLM1.jpg" alt="OUTLOOK MONEY" /></div>
206                        <div class="grid-header grid-header-row"><img src="https://img-2.outlookindia.com/outlookindia/banners/2025/11/10/150/OLT3.jpg" alt="OUTLOOK TRAVELLER" /></div>
207                        <div class="grid-header grid-header-row"><img src="https://img-2.outlookindia.com/outlookindia/banners/2025/11/10/150/OLH3.jpg" alt="OUTLOOK HINDI" /></div>
208
209                        <!-- Data Row: 1 YEAR Print -->
210                        <div class="grid-cell term-column">1 YEAR Print</div>
211                        <div class="grid-cell select-option">
212                            <input type="checkbox" id="C_1_1" name="C_1_1" value="OL_1_Magazine_1899_2600_0_P" onclick="if (!window.__cfRLUnblockHandlers) return false; Checkbox_Toggle(1,1,0);" data-cf-modified-92621a6c86b993c0b25608ec-="" />
213                            <label for="C_1_1" class="select-label">
214                                <div class="font-bold">26 Issues</div>
215                                <div class="text-xs line-through text-gray-500 price-old">Rs. 2600</div>
216                                <div class="price-new">Rs. 1899</div>
217                            </label>
218                        </div>
219                        <div class="grid-cell select-option">
220                            <input type="checkbox" id="C_1_4" name="C_1_4" value="OB_1_Magazine_999_1200_0_P" onclick="if (!window.__cfRLUnblockHandlers) return false; Checkbox_Toggle(1,4,10);" data-cf-modified-92621a6c86b993c0b25608ec-="" />
221                            <label for="C_1_4" class="select-label">
222                                <div class="font-bold">12 Issues</div>
223                                <div class="text-xs line-through text-gray-500 price-old">Rs. 1200</div>
224                                <div class="price-new">Rs. 999</div>
225                            </label>
226                        </div>
227                        <div class="grid-cell select-option">
228                            <input type="checkbox" id="C_1_3" name="C_1_3" value="II_1_Magazine_849_960_0_P" onclick="if (!window.__cfRLUnblockHandlers) return false; Checkbox_Toggle(1,3,0);" data-cf-modified-92621a6c86b993c0b25608ec-="" />
229                            <label for="C_1_3" class="select-label">
230                                <div class="font-bold">12 Issues</div>
231                                <div class="text-xs line-through text-gray-500 price-old">
231Rs. 960</div>
232                                <div class="price-new">Rs. 849</div>
233                            </label>
234                        </div>
235                        <div class="grid-cell select-option">
236                            <input type="checkbox" id="C_1_2" name="C_1_2" value="OLT_1_Magazine_750_900_0_P" onclick="if (!window.__cfRLUnblockHandlers) return false; Checkbox_Toggle(1,2,0);" data-cf-modified-92621a6c86b993c0b25608ec-="" />
237                            <label for="C_1_2" class="select-label">
238                                <div class="font-bold">6 Issues</div>
239                                <div class="text-xs line-through text-gray-500 price-old">Rs. 900</div>
240                                <div class="price-new">Rs. 750</div>
241                            </label>
242                        </div>
243                        <div class="grid-cell select-option">
244                            <input type="checkbox" id="C_1_5" name="C_1_5" value="OH_1_Magazine_549_600_0_P" onclick="if (!window.__cfRLUnblockHandlers) return false; Checkbox_Toggle(1,5,0);" data-cf-modified-92621a6c86b993c0b25608ec-="" />
245                            <label for="C_1_5" class="select-label">
246                                <div class="font-bold">12 Issues</div>
247                                <div class="text-xs line-through text-gray-500 price-old">Rs. 600</div>
248                                <div class="price-new">Rs. 549</div>
249                            </label>
250                        </div>
251
252                        <!-- Data Row: 2 YEARS Print -->
253                        <div class="grid-cell term-column">2 YEARS Print</div>
254                        <div class="grid-cell select-option">
255                            <input type="checkbox" id="C_2_1" name="C_2_1" value="OL_2_Magazine_3599_5200_0_P" onclick="if (!window.__cfRLUnblockHandlers) return false; Checkbox_Toggle(2,1,0);" data-cf-modified-92621a6c86b993c0b25608ec-="" />
256                            <label for="C_2_1" class="select-label">
257                                <div class="font-bold">52 Issues</div>
258                                <div class="text-xs line-through text-gray-500 price-old">Rs. 5200</div>
259                                <div class="price-new">Rs. 3599</div>
260                            </label>
261                        </div>
262                        <div class="grid-cell select-option">
263                            <input type="checkbox" id="C_2_4" name="C_2_4" value="OB_2_Magazine_1999_2400_0_P" onclick="if (!window.__cfRLUnblockHandlers) return false; Checkbox_Toggle(2,4,20);" data-cf-modified-92621a6c86b993c0b25608ec-="" />
264                            <label for="C_2_4" class="select-label">
265                                <div class="font-bold">24 Issues</div>
266                                <div class="text-xs line-through text-gray-500 price-old">Rs. 2400</div>
267                                <div class="price-new">Rs. 1999</div>
268                            </label>
269                        </div>
270                        <div class="grid-cell select-option">
271                            <input type="checkbox" id="C_2_3" name="C_2_3" value="II_2_Magazine_1699_1920_0_P" onclick="if (!window.__cfRLUnblockHandlers) return false; Checkbox_Toggle(2,3,0);" data-cf-modified-92621a6c86b993c0b25608ec-="" />
272                            <label for="C_2_3" class="select-label">
273                                <div class="font-bold">24 Issues</div>
274                                <div class="text-xs line-through text-gray-500 price-old">Rs. 1920</div>
275                                <div class="price-new">Rs. 1699</div>
276                            </label>
277                        </div>
278                        <div class="grid-cell select-option">
279                            <input type="checkbox" id="C_2_2" name="C_2_2" value="OLT_2_Magazine_1500_1800_0_P" onclick="if (!window.__cfRLUnblockHandlers) return false; Checkbox_Toggle(2,2,0);" data-cf-modified-92621a6c86b993c0b25608ec-="" />
280                            <label for="C_2_2" class="select-label">
281                                <div class="font-bold">12 Issues</div>
282                                <div class="text-xs line-through text-gray-500 price-old">Rs. 1800</div>
283                                <div class="price-new">Rs. 1500</div>
284                            </label>
285                        </div>
286                        <div class="grid-cell select-option">
287                            <input type="checkbox" id="C_2_5" name="C_2_5" value="OH_2_Magazine_1099_1200_0_P" onclick="if (!window.__cfRLUnblockHandlers) return false; Checkbox_Toggle(2,5,0);" data-cf-modified-92621a6c86b993c0b25608ec-="" />  
288                            <label for="C_2_5" class="select-label">
289                                <div class="font-bold">24 Issues</div>
290                                <div class="text-xs line-through text-gray-500 price-old">Rs. 1200</div>
291                                <div class="price-new">Rs. 1099</div>
292                            </label>
293                        </div>
294
295                        <!-- Data Row: 3 YEARS Print --> 
296                        <div class="grid-cell term-column">3 YEARS Print</div>
297                        <div class="grid-cell select-option">
298                            <input type="checkbox" id="C_3_1" name="C_3_1" value="OL_3_Magazine_5199_7800_0_P" onclick="if (!window.__cfRLUnblockHandlers) return false; Checkbox_Toggle(3,1,0);" data-cf-modified-92621a6c86b993c0b25608ec-="" />
299                            <label for="C_3_1" class="select-label">
300                                <div class="font-bold">78 Issues</div>
301                                <div class="text-xs line-through text-gray-500 price-old">Rs. 7800</div>
302                                <div class="price-new">Rs. 5199</div>
303                            </label>
304                        </div>
305                        <div class="grid-cell select-option">
306                            <input type="checkbox" id="C_3_4" name="C_3_4" value="OB_3_Magazine_2799_3600_0_P" onclick="if (!window.__cfRLUnblockHandlers) return false; Checkbox_Toggle(3,4,30);" data-cf-modified-92621a6c86b993c0b25608ec-="" />
307                            <label for="C_3_4" class="select-label">
308                                <div class="font-bold">36 Issues</div>
309                                <div class="text-xs line-through text-gray-500 price-old">Rs. 3600</div>
310                                <div class="price-new">
310Rs. 2799</div>
311                            </label>
312                        </div>
313                        <div class="grid-cell select-option">
314                            <input type="checkbox" id="C_3_3" name="C_3_3" value="II_3_Magazine_2299_2880_0_P" onclick="if (!window.__cfRLUnblockHandlers) return false; Checkbox_Toggle(3,3,0);" data-cf-modified-92621a6c86b993c0b25608ec-="" />
315                            <label for="C_3_3" class="select-label">
316                                <div class="font-bold">36 Issues</div>
317                                <div class="text-xs line-through text-gray-500 price-old">Rs. 2880</div>
318                                <div class="price-new">Rs. 2299</div>
319                            </label>
320                        </div>
321                        <div class="grid-cell select-option">
322                            <input type="checkbox" id="C_3_2" name="C_3_2" value="OLT_3_Magazine_2250_2700_0_P" onclick="if (!window.__cfRLUnblockHandlers) return false; Checkbox_Toggle(3,2,0);" data-cf-modified-92621a6c86b993c0b25608ec-="" />
323                            <label for="C_3_2" class="select-label">
324                                <div class="font-bold">18 Issues</div>
325                                <div class="text-xs line-through text-gray-500 price-old">Rs. 2700</div>
326                                <div class="price-new">Rs. 2250</div>
327                            </label>
328                        </div>
329                        <div class="grid-cell select-option">
330                            <input type="checkbox" id="C_3_5" name="C_3_5" value="OH_3_Magazine_1499_1800_0_P" onclick="if (!window.__cfRLUnblockHandlers) return false; Checkbox_Toggle(3,5,0);" data-cf-modified-92621a6c86b993c0b25608ec-="" /> 
331                            <label for="C_3_5" class="select-label">
332                                <div class="font-bold">36 Issues</div>
333                                <div class="text-xs line-through text-gray-500 price-old">Rs. 1800</div>
334                                <div class="price-new">Rs. 1499</div>
335                            </label>
336                        </div>
337						
338												<!-- Data Row: 6 MONTH Print -->
339						<div class="grid-cell term-column">Exclusive 6 month Offer</div>
340						<div class="grid-cell select-option">
341							<input type="checkbox" id="C_4_1" name="C_4_1" value="OL_4_Magazine_949_1300_0_P" onclick="if (!window.__cfRLUnblockHandlers) return false; Checkbox_Toggle(4,1);" data-cf-modified-92621a6c86b993c0b25608ec-="" />
342							<label for="C_4_1" class="select-label">
343								<div class="font-bold">13 Issues</div>
344								<div class="text-xs line-through text-gray-500 price-old">Rs. 1300</div>
345								<div class="price-new">Rs. 949</div>
346							</label>
347						</div>
348						<div class="grid-cell select-option"><label for="C_4_2" class="select-label"><div class="text-xs text-gray-500">N/A</div></label></div>	
349						<div class="grid-cell select-option"><label for="C_4_3" class="select-label"><div class="text-xs text-gray-500">N/A</div></label></label></div>	
350						<div class="grid-cell select-option"><label for="C_4_4" class="select-label"><div class="text-xs text-gray-500">N/A</div></label></label></div>	
351						<div class="grid-cell select-option"><label for="C_4_5" class="select-label"><div class="text-xs text-gray-500">N/A</div></label></label></div>
352						<!-- // Data Row: 6 MONTH Print -->
353						
354                    </div>
355                </div>
356                <!-- Scrollable hint for mobile -->
357                <!--p class="text-center text-sm text-gray-500 mt-4 lg:hidden">
358                    <strong>&larr; Scroll horizontally to view all magazine options &rarr; </strong>
359                </p-->
360            </div>
361
362            <!-- My Deals Section (Fully Responsive) -->
363            <div class="bg-white rounded-xl shadow-xl p-6 md:p-8 mb-12 border-l-4 border-primary-red">
364                <h3 class="text-2xl font-bold mb-6 text-[#d60810]">Your Deal Summary</h3>
365                <div class="space-y-4">
366                    <div class="flex justify-between items-center border-b border-[#e5e7eb] pb-2">
367                        <span class="font-medium text-gray-600">My Selection:</span>
368                        <span id="myselectiontext" class="font-semibold text-right">No plans selected</span>
369                    </div>
370                    <div class="flex justify-between items-center border-b  border-[#e5e7eb] pb-2">
371                        <span class="font-medium text-gray-600">Subscription Cost:</span>
372                        <span id="subscost" class="font-semibold text-right">Rs. 0</span>
373                    </div>
374                    <div class="flex justify-between items-center border-b border-[#e5e7eb] pb-2">
375                        <span class="font-medium text-gray-600">You Pay:</span>
376                        <span id="mycosttext" class="text-2xl font-extrabold text-[#d60810] text-right">Rs. 0</span>
377                    </div>
378                    <div class="flex justify-between items-center border-b border-[#e5e7eb]  pb-2">
379                        <span class="font-medium text-gray-600">You Save:</span>
380                        <span id="mysavingtext" class="font-semibold text-green-600 text-right">Rs. 0</span>
381                    </div>
382                    <div class="flex justify-between items-center pt-2">
383                        <span class="font-bold text-lg text-[#d60810]">Member only benefits:</span>
384                        <span id="myfreegifttext" class="font-medium text-right text-gray-700">None</span>
385                    </div>  
386                </div>
387            </div>
388
389            <!-- Order Details (Fully Responsive Form) -->
390            <div class="bg-white rounded-xl shadow-xl p-6 md:p-8 mb-12">
391                <h3 class="text-2xl font-bold mb-6 text-center text-[#d60810]">Order Details (Your Mailing Information)</h3>
392                <!-- Grid layout for desktop, single column stack for mobile -->
393                <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
394                    
395                    <!-- Name & Hidden Last Name -->
396                    <div>
397                        <label for="fname" class="block text-sm font-medium text-gray-700 mb-1">Full Name <span class="text-[#d60810]">*</span></label>
398                        <input type="text" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-primary-red focus:border-primary-red transition duration-150" id="fname" name="fname"  placeholder="Enter full name here..." maxlength="250" required />
399                        <input type="hidden" id="lname" name="lname" /> 
400                    </div>
401                    
402                    <!-- E-mail -->
403                    <div>
404                        <label for="email" class="block text-sm font-medium text-gray-700 mb-1">E-mail Address <span class="text-[#d60810]">*</span></label>
405                        <input type="email" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-primary-red focus:border-primary-red transition duration-150" id="email" name="email"  placeholder="[email protected]" maxlength="150" required />
406                    </div>
407					
408					<!-- Date of Birth -->
409					<div>
410						<label for="dob" class="block text-sm font-medium text-gray-700 mb-1">
411							Date of Birth <span class="text-[#d60810]">*</span>
412						</label> 
413						<input
414							type="date"
415							id="dob"
416							name="dob"
417							class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-primary-red focus:border-primary-red"
418							max="2016-09-24"
419							min="1950-01-01"
420							required >
421					</div>
422					<div></div>
423                    
424                    
425					
426                    <!-- Address -->
427                    <div class="md:col-span-2">
428                        <label for="address1" class="block text-sm font-medium text-gray-700 mb-1">Mailing Address <span class="text-[#d60810]">*</span></label>
429                        <input type="text" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-primary-red focus:border-primary-red transition duration-150" id="address1" name="address1" maxlength="250" placeholder="Enter address here..." required />
430                    </div>
431                    
432                    <!-- Pin Code & City -->
433                    <div>
434                        <label for="pin" class="block text-sm font-medium text-gray-700 mb-1">ZIP / PIN Code<span class="text-[#d60810]">*</span></label>
435                        <input type="text" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-primary-red focus:border-primary-red transition duration-150 number-only" id="pin" name="pin" maxlength="15" required />
436                    </div>
437                    <div>
438                        <label for="city" class="block text-sm font-medium text-gray-700 mb-1">City <span class="text-[#d60810]">*</span></label>
439                        <input type="text" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-primary-red focus:border-primary-red transition duration-150" id="city" name="city" maxlength="50" required />
440                    </div>
441
442                    <!-- State & Country -->
443                    <div>
444                        <label for="state" class="block text-sm font-medium text-gray-700 mb-1">
444State <span class="text-[#d60810]">*</span></label>
445                        <select id="state" name="state" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-primary-red focus:border-primary-red" required>
446                            <option value="" selected>Select State</option>
447                            <option value="ANDAMAN AND NICOBAR IS">Andaman and Nicobar Islands</option>
448							<option value="ANDHRA PRADESH">Andhra Pradesh</option>
449							<option value="ARUNACHAL PRADESH">Arunachal Pradesh</option>
450							<option value="ASSAM">Assam</option>
451							<option value="BIHAR">Bihar</option>
452							<option value="CHANDIGARH">Chandigarh</option>
453							<option value="CHHATTISGARH">Chhattisgarh</option>
454							<option value="DADRA AND NAGAR HAVELI">Dadra and Nagar Haveli</option>
455							<option value="DAMAN AND DIU">Daman and Diu</option>
456							<option value="DELHI">Delhi</option>
457							<option value="GOA">Goa</option>
458							<option value="GUJARAT">Gujarat</option>
459							<option value="HARYANA">Haryana</option>
460							<option value="HIMACHAL PRADESH">Himachal Pradesh</option>
461							<option value="JAMMU AND KASHMIR">Jammu and Kashmir</option>
462							<option value="JHARKHAND">Jharkhand</option>
463							<option value="KARNATAKA">Karnataka</option>
464							<option value="KERALA">Kerala</option>
465							<option value="LAKSHADWEEP">Lakshadweep</option>
466							<option value="MADHYA PRADESH">Madhya Pradesh</option>
467							<option value="MAHARASHTRA">Maharashtra</option>
468							<option value="MANIPUR">Manipur</option>
469							<option value="MEGHALAYA">Meghalaya</option>
470							<option value="MIZORAM">Mizoram</option>
471							<option value="NAGALAND">Nagaland</option>
472							<option value="ODISHA">Odisha</option>
473							<option value="PUDUCHERRY">Puducherry</option>
474							<option value="PUNJAB">Punjab</option>
475							<option value="RAJASTHAN">Rajasthan</option>
476							<option value="SIKKIM">Sikkim</option>
477							<option value="TAMIL NADU">Tamil Nadu</option>
478							<option value="TELANGANA">Telangana</option>
479							<option value="TRIPURA">Tripura</option>
480							<option value="UTTARAKHAND">Uttarakhand</option>
481							<option value="UTTAR PRADESH">Uttar Pradesh</option>
482							<option value="WEST BENGAL">West Bengal</option>
483                        </select>
484                    </div>
485                    <div>
486                        <label for="country" class="block text-sm font-medium text-gray-700 mb-1">Country <span class="text-[#d60810]">*</span></label>
487                        <input type="text" class="w-full px-4 py-2 border border-gray-300 rounded-lg bg-gray-100 text-gray-500" id="country" name="country" value="India" readonly />
488                    </div>
489
490                    <!-- Phone & Sex -->
491                    <div>
492                        <label for="phoneoff" class="block text-sm font-medium text-gray-700 mb-1">Phone/Mobile <span class="text-[#d60810]">*</span></label>
493                        <input type="tel" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-primary-red focus:border-primary-red transition duration-150 number-only" id="phoneoff" name="phoneoff" maxlength="12" required />
494                    </div>
495                    <div>
496                        <label class="block text-sm font-medium text-gray-700 mb-2">Sex <span class="text-[#d60810]">*</span></label>
497                        <div class="flex space-x-6">
498                            <label class="inline-flex items-center">
499                                <input class="form-radio h-5 w-5 text-[#d60810] border-gray-300 focus:ring-primary-red" type="radio" name="sex" id="male" value="M" checked />
500                                <span class="ml-2">Male</span>
501                            </label>
502                            <label class="inline-flex items-center">
503                                <input class="form-radio h-5 w-5 text-[#d60810] border-gray-300 focus:ring-primary-red" type="radio" name="sex" id="female" value="F" />
504                                <span class="ml-2">Female</span>
505                            </label>
506                        </div>
507                    </div>
508
509                    <!-- Occupation, Designation, Organisation -->
510                    <div>
511                        <label for="occupa" class="block text-sm font-medium text-gray-700 mb-1">Field of work <span class="text-[#d60810]">*</span></label>
512                        <select
513							id="occupa"
514							name="occupa"
515							class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-primary-red focus:border-primary-red transition duration-150"
516							required>
517							<option value="">-- Select --</option>
518							<option value="Sales">Sales</option>
519							<option value="Marketing">Marketing</option>
520							<option value="Finance">Finance</option>
521							<option value="Human Resources">Human Resources</option>
522							<option value="IT &amp; Engineering">IT &amp; Engineering</option>
523							<option value="Operations">Operations</option>
524							<option value="Legal &amp; Consulting">Legal &amp; Consulting</option>
525							<option value="Education">Education</option>
526							<option value="Entrepreneur">Entrepreneur</option>
527							<option value="Medical Professional">Medical Professional</option>
528							<option value="Others">Others</option>
529						</select>
530                    </div>
531                    <div>
532                        <label for="desig" class="block text-sm font-medium text-gray-700 mb-1">Level of seniority <span class="text-[#d60810]">*</span></label>
533                        <select
534							id="desig"
535							name="desig"
536							class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-primary-red focus:border-primary-red transition duration-150"
537							required>
538							<option value="">-- Select --</option>
539							<option value="Entrepreneur">Entrepreneur</option>
540							<option value="Senior Leadership">Senior Leadership</option>
541							<option value="Middle Management">Middle Management</option>
542							<option value="Entry Level">Entry Level</option>
543							<option value="Others">Others</option>
544						</select>
545                    </div>
546                    <div>
547                        <label for="org" class="block text-sm font-medium text-gray-700 mb-1">Organisation</label>
548                        <input type="text" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-primary-red focus:border-primary-red transition duration-150" id="org" name="org" maxlength="28" pattern="[A-Za-z0-9 ]+" title="Only letters, numbers and spaces are allowed (Maximum 28 characters)." oninput="if (!window.__cfRLUnblockHandlers) return false; this.value=this.value.replace(/[^A-Za-z0-9 ]/g,'');" data-cf-modified-92621a6c86b993c0b25608ec-="" />
549                    </div>
550                </div>
551            </div>
552			
553			<div id="messageBox" class="mt-4"></div> 
554
555            <!-- Payment Options -->
556            <div class="bg-white rounded-xl shadow-xl p-6 md:p-8 mb-12">
557                <h3 class="text-2xl font-bold mb-6 text-center text-[#d60810]">Payment Options</h3>
558                <div class="flex flex-col sm:flex-row justify-center gap-6 sm:gap-12">
559                    <label class="inline-flex items-center text-lg font-medium">
560                        <input class="h-5 w-5 text-[#d60810] border-gray-300 focus:ring-primary-red" type="radio" name="paymentchoice" id="ccavenue" value="CCAVENUE" checked />
561                        <span class="ml-3">CCAVENUE</span>
562                    </label>
563                    <label class="inline-flex items-center text-lg font-medium">
564                        <input class="h-5 w-5 text-[#d60810] border-gray-300 focus:ring-primary-red" type="radio" name="paymentchoice" id="paytm" value="PAYTM" />
565                        <span class="ml-3">PAYTM</span>
566                    </label>
567					
568					<label class="inline-flex items-center text-lg font-medium">
569                        <input class="h-5 w-5 text-[#d60810] border-gray-300 focus:ring-primary-red" type="radio" name="paymentchoice" id="phonepe" value="PHONEPE" />
570                        <span class="ml-3">PHONEPE</span>
571                    </label>
572                </div>
573            </div>
574
575            <!-- Submit Button -->
576            <div class="text-center my-10">
577                <!-- Error message box (replaces alert/confirm) -->
578                <div id="selection-error" class="hidden bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded-lg mb-4 mx-auto max-w-sm" role="alert">
579                    <strong class="font-bold">Oops!</strong>
580                    <span class="block sm:inline">Please select at least one subscription plan.</span>
581                </div>  
582				
583				<button type="submit" class="w-full md:w-auto bg-[#d60810] hover:bg-[#b8060e] text-white text-xl font-bold py-3 px-12 rounded-lg shadow-lg transform hover:scale-[1.02] transition duration-300" onclick="if (!window.__cfRLUnblockHandlers) return false; return fnValAndSubmit();" data-cf-modified-92621a6c86b993c0b25608ec-="">
584					Proceed to Payment &rarr;
585				</button> 
586            </div>
587            
588            <!-- Additional Links -->
589            <div class="text-center mt-8 mb-12 text-[#e5e7eb] space-y-2">
590                <p class="font-medium">
591                    <a href="https://subscription.outlookindia.com/newoffer/international_subs.html?source=1&vouchercode=WFHE146744" target="_blank" rel="noopener noreferrer" class="text-[#d60810] hover:text-primary-dark transition duration-150 underline">
592                        For print delivery of Magazine outside India click here.
593                    </a>
594                </p>
595                <p class="text-sm">
596                    <a href="JavaScript:;" onclick="if (!window.__cfRLUnblockHandlers) return false; window.open('terms-and-conditions.html', 'terms', 'width=800,height=600');" class="text-gray-500 hover:text-[#d60810] transition duration-150 underline" data-cf-modified-92621a6c86b993c0b25608ec-="">Terms & conditions</a> | <a href="https://www.outlookindia.com/privacy-policy" target="_blank" class="text-gray-500 hover:text-[#d60810] transition duration-150 underline">Privacy Policy</a> | <a href="https://www.outlookindia.com/contact-us" target="_blank"  class="text-gray-500 hover:text-[#d60810] transition duration-150 underline">Contact us</a>
597                </p>
598            </div>
599        </form>
600
601    </div> <!-- /container -->
602	
603	<!-- Banner Zoom Modal (Hidden by default) -->
604    <div id="bannerModal" class="fixed inset-0 z-50 hidden bg-black bg-opacity-90 flex items-center justify-center p-4 transition-opacity duration-300" onclick="if (!window.__cfRLUnblockHandlers) return false; toggleBannerZoom()" data-cf-modified-92621a6c86b993c0b25608ec-="">
605        <div class="relative w-full max-w-7xl max-h-full">
606            <!-- Close Button -->
607            <button class="absolute -top-15 right-0 md:-right-10 text-white text-l font-light p-2 z-50 hover:text-[#d60810] focus:outline-none" style="top:-3rem;" onclick="if (!window.__cfRLUnblockHandlers) return false; event.stopPropagation(); toggleBannerZoom();" data-cf-modified-92621a6c86b993c0b25608ec-="">
608                &times; CLOSE
609            </button>
610            <!-- Image will be loaded here -->
611            <img id="modalImage" src="" alt="Zoomed Subscription Offer" class="rounded-lg shadow-2xl max-w-full max-h-[90vh] mx-auto cursor-pointer object-contain" onclick="if (!window.__cfRLUnblockHandlers) return false; event.stopPropagation();" data-cf-modified-92621a6c86b993c0b25608ec-="">
612        </div>
613    </div>
614
615    <!-- JavaScript Placeholder Functions (Carried over from source and updated for custom UI error) -->
616    
616<script type="92621a6c86b993c0b25608ec-text/javascript"> 
617		/**
618         * Toggles the visibility of the banner zoom modal.
619         */
620        function toggleBannerZoom() {
621            const modal = document.getElementById('bannerModal');
622            const modalImage = document.getElementById('modalImage');
623            // Select the main banner image
624            const bannerImage = document.getElementById('outlookSubsBannerImage'); 
625
626            if (modal.classList.contains('hidden')) {
627                // Show Modal: Copy the source of the main banner image
628                modalImage.src = bannerImage.src;
629                modal.classList.remove('hidden');
630                document.body.style.overflow = 'hidden'; // Prevent background scrolling
631            } else {
632                // Hide Modal
633                modal.classList.add('hidden');
634                document.body.style.overflow = ''; // Restore background scrolling
635                modalImage.src = ''; // Clear image source for cleanup
636            }
637        }
638	
639		/**
640		 * Calculates the Magazine Gift value based on the two defined conditions.
641		 * The function determines the maximum possible gift amount.
642		 * @param {NodeListOf<HTMLInputElement>} checkedBoxes - List of selected checkboxes.
643		 * @param {number} totalPay - The total amount the user will pay.
644		 * @returns {number} The maximum calculated magazine gift value.
645		 */
646		function calculateMagazineGiftOld(checkedBoxes, totalPay) 
647		{
648			
649			// --- Condition 1: Outlook India ONLY (Column 1) ---
650			let giftC1 = 0;
651			const isOnlyOutlookColumn = checkedBoxes.length > 0 && Array.from(checkedBoxes).every(box => {
652				// Check if the magazine column index (the third part of the ID: C_Y_M) is '1' (Outlook).
653				const idParts = box.id.split('_');
654				return idParts.length === 3 && parseInt(idParts[2]) === 1;
655			});
656
657			// Apply C1 logic only if exactly ONE Outlook plan is selected
658			if (isOnlyOutlookColumn && checkedBoxes.length === 1) { 
659				const singleCost = totalPay;
660				if (singleCost === 6899) {
661					giftC1 = 750;
662				} else if (singleCost === 4799) {
663					giftC1 = 500;
664				} else if (singleCost === 2499) {
665					giftC1 = 250;
666				}
667			}
668
669			// --- Condition 2: Any Buy (Total Cost Threshold) ---
670			let giftC2 = 0;
671			if (totalPay >= 9999) {
672				giftC2 = 1000;
673			} else if (totalPay >= 7499) {
674				giftC2 = 750;
675			} else if (totalPay >= 4999) {
676				giftC2 = 500;
677			}
678
679			// Return the highest gift value from either condition
680			return Math.max(giftC1, giftC2);
681		}
682		
683		function calculateMagazineGift(checkedBoxes, totalPay) 
684		{
685			let threeYearGift = 0, giftFromOutlookIndia = 0; // Fixed minimum gift from C_x_1 selection, if any.
686			let giftFromTotalPay = 0;     // Gift based on total payment threshold.
687			
688			if(document.getElementById('C_3_1')?.checked) {
689				threeYearGift += 500;
690			}
691			for (let i = 2; i < 5; i++) {
692				if(document.getElementById('C_3_'+i)?.checked) {
693					threeYearGift += 250;
694				}
695			}
696			if(document.getElementById('C_3_5')?.checked) {
697				threeYearGift += 150;
698			}
699			if(document.getElementById('C_1_1')?.checked) { threeYearGift += 150; }
700			if(document.getElementById('C_2_1')?.checked) { threeYearGift += 300; } 
701			
702			console.log("THREEYEARGIFT: " + threeYearGift); 
703
704			// --- 1. Determine fixed minimum gift based on C_x_1 selections (Outlook India column) ---
705			
706			// Check if C_3_1 (3 Years) is selected (highest fixed gift)
707			if (document.getElementById('C_3_1')?.checked) {
708				giftFromOutlookIndia = 500;
709			} 
710			// Check if C_2_1 (2 Years) is selected (mid-level fixed gift)
711			else if (document.getElementById('C_2_1')?.checked) {
712				giftFromOutlookIndia = 300;
713			}
714			// Check if C_1_1 (1 Year) is selected (lowest fixed gift)
715			else if (document.getElementById('C_1_1')?.checked) {
716				giftFromOutlookIndia = 150;
717			}
718			// Note: Because of the 'else if' structure, only the highest selected C_x_1 value applies.
719
720			// --- 2. Condition: Any Buy (Total Cost Threshold) ---
721			if (totalPay >= 9999) {
722				giftFromTotalPay = 1000;
723			} else if (totalPay >= 7499) {
724				giftFromTotalPay = 750;
725			} else if (totalPay >= 4999) {
726				giftFromTotalPay = 500;
727			} //else if (totalPay >= 2499) {
728			//	giftFromTotalPay = 250;
729			//}
730
731			// --- 3. Return the highest gift value ---
732			// The final gift is the maximum of the fixed minimum (if applicable) and the threshold gift.
733			return Math.max(giftFromOutlookIndia, giftFromTotalPay, threeYearGift);
734		}
735
736        /**
737         * Parses checkbox selections, updates summary, and updates hidden fields.
738		 Any 1 from -> C_1_1, C_2_1, C_3_1 
739		 Any 1 from -> C_1_2, C_2_2, C_3_2
740		 Any 1 from -> C_1_3, C_2_3, C_3_3
741		 Any 1 from -> C_1_4, C_2_4, C_3_4
742		 Any 1 from -> C_1_5, C_2_5, C_3_5
743         */
744		 // Global variables for tracking state and gift definitions
745		let selectedPlans = []; // Stores the value of all checked checkboxes
746		const GIFT_MAP = {
747			"0": "None",
748			"10": "Premium Business E-book",
749			"20": "Travel Accessory Voucher",
750			"30": "High-Quality Backpack",
751		};
752		const MESSAGE_BOX_ID = 'messageBox'; // ID for a div to display validation messages
753
754		// Ensure this function is called once on page load to initialize the summary
755		window.onload = function() {
756			updateSummary();
757			// Insert a message box element near the submit button for feedback
758			const submitButton = document.querySelector('button[type="submit"]');
759			if (submitButton) {
760				const messageBox = document.createElement('div');
761				messageBox.id = MESSAGE_BOX_ID;
762				messageBox.className = 'mt-4';
763				submitButton.parentNode.insertBefore(messageBox, submitButton);
764			}
765		};
766
767
768		/**
769		 * Ensures only one term is selected per magazine column (C_d_m: d=duration, m=magazine)
770		 * and updates the summary.
771		 * @param {number} duration - The term duration (1, 2, or 3).
772		 * @param {number} magazineId - The magazine column ID (1 to 5).
773		 */
774		function Checkbox_Toggle(duration, magazineId) {
775			const currentCheckboxId = `C_${duration}_${magazineId}`;
776			const currentCheckbox = document.getElementById(currentCheckboxId);
777
778			// 1. Store the intended state of the current checkbox
779			// This is necessary because we need to uncheck everything else in the column
780			// and then potentially re-check the one that was just clicked.
781			const isCheckedAfterClick = currentCheckbox.checked;
782
783			// 2. Exclusive selection logic for the current magazine column
784			// Iterate through all possible durations (1, 2, 3) for this magazine column
785			for (let d = 1; d <= 4; d++) {
786				const checkboxId = `C_${d}_${magazineId}`;
787				const checkbox = document.getElementById(checkboxId);
788				if (checkbox) {
789					checkbox.checked = false; // Uncheck all in the column
790				}
791			}
792			
793			// 3. Re-check the current box if the user intended to select it
794			if (isCheckedAfterClick) {
795				currentCheckbox.checked = true;
796			}
797
798			// 4. Update the hidden fields and summary based on all current selections
799			updateSummary();
800		}
801
802		/**
803		 * Calculates and updates the total cost, savings, and selected plans in the summary section.
804		 */
805		function updateSummary() {
806			selectedPlans = [];
807			let totalCost = 0;
808			let totalMSRP = 0;
809			let maxGiftId = 0;
810			let selectionListText = [];
811			let selectionListTextToDb = [];
812			let magazinegift = '';
813			
814			let calculatedGift = 0; 
815			//let magazineGiftText = document.getElementById('gift');
816			let magazineGiftText = document.getElementById('myfreegifttext');
817			let checkedBoxes = document.querySelectorAll('input[type="checkbox"]:checked');
818
819			// Map magazine code to readable name
820			const magMap = {
821				'OL': 'Outlook India', 
822				'OLT': 'Outlook Traveller', 
823				'II': 'Outlook Money', 
824				'OB': 'Outlook Business', 
825				'OH': 'Outlook Hindi'
826			};
827
828			// Iterate through all 15 possible checkboxes
829			for (let m = 1; m <= 5; m++) { // Magazines (1 to 5)
830				for (let d = 1; d <= 4; d++) { // Durations (1 to 3)
831					const checkbox = document.getElementById(`C_${d}_${m}`);
832					
833					if (checkbox && checkbox.checked) {
834						const value = checkbox.value; // e.g., OL_1_Magazine_2499_3600_0_P
835						selectedPlans.push(value);
836
837						// Split value to extract details: [0]Code, [1]Duration, [2]Type, [3]Price, [4]MSRP, [5]GiftCode, [6]DeliveryType 
838						const parts = value.split('_');
839						const price = parseInt(parts[3], 10);
840						const msrp = parseInt(parts[4], 10);
841						const gift = parseInt(parts[5], 10);
842						const magCode = parts[0];
843						//const durationText = `${d} Year`;//${d > 1 ? 'S' : ''}`;
844						if (d === 4) {
845							durationText = '6 Month';
846						} else {
847							durationText = `${d} Year`;
848						}
849
850						const magName = magMap[magCode] || 'Magazine';
851
852						totalCost += price;
853						totalMSRP += msrp;
854						
855						maxGiftId = Math.max(maxGiftId, gift);
856
857						selectionListText.push(`${magName} (${durationText})`);
858						//selectionListTextToDb.push(`${magName} Magazine (Print ${durationText}) at Rs. ${price}`);
859						selectionListTextToDb.push(`${magName} - ${durationText} - Print at Rs. ${price}`); //Outlook India Magazine (Print 1 Year) at Rs. 2599
860						
861						// --- CALCULATE GIFT ---
862						calculatedGift = calculateMagazineGift(checkedBoxes, totalCost);
863					}
864				}
865			}
866			//magazineGiftText.innerText = `${calculatedGift}
866 Rs. ${calculatedGift.toLocaleString('en-IN')}`;
867			
868			/*if(parseInt(totalCost)>=9999)
869			{
870				magazinegift="Additional benefit: Amazon Shopping Voucher worth Rs. 1000";
871				//document.online.gift.value="YES"+"+"+magazinegift; 
872				document.getElementById('myfreegifttext').innerHTML=magazinegift;
873			}
874			else if(parseInt(totalCost)>=7499 && parseInt(totalCost) < 9999)
875			{
876				magazinegift="Additional benefit: Amazon Shopping Voucher worth Rs. 500";
877				//document.online.gift.value="YES"+"+"+magazinegift; 
878				document.getElementById('myfreegifttext').innerHTML=magazinegift;
879			}
880			else if(parseInt(totalCost)>=4999 && parseInt(totalCost) < 7499)
881			{
882				magazinegift="Additional benefit: Amazon Shopping Voucher worth Rs. 250";
883				//document.online.gift.value="YES"+"+"+magazinegift; 
884				document.getElementById('myfreegifttext').innerHTML=magazinegift;
885			}
886			else
887			{ 
888				document.online.gift.value=magazinegift; document.getElementById('myfreegifttext').innerHTML='None';
889			}*/
890			if(parseInt(calculatedGift)>0){
891				magazineGiftText.innerText = `Amazon Shopping Voucher worth Rs. ${calculatedGift.toLocaleString('en-IN')}`;
892				magazinegift = `Amazon Shopping Voucher worth Rs. ${calculatedGift.toLocaleString('en-IN')}`;
893			}else{
894				magazineGiftText.innerText = `none`; 
895			}
896
897			// Calculate savings
898			const savings = totalMSRP - totalCost;
899			// Get the description for the highest gift ID
900			const giftDescription = GIFT_MAP[maxGiftId.toString()] || GIFT_MAP["0"];
901
902			// Update Display Fields (Summary Section)
903			document.getElementById('myselectiontext').innerText = selectionListText.length > 0 ? selectionListText.join(' + ') : 'No plans selected';
904			document.getElementById('subscost').innerText = `Rs. ${totalMSRP.toLocaleString('en-IN')}`;
905			document.getElementById('mycosttext').innerText = `Rs. ${totalCost.toLocaleString('en-IN')}`;
906			document.getElementById('mysavingtext').innerText = `Rs. ${savings.toLocaleString('en-IN')}`;
907			//document.getElementById('myfreegifttext').innerText = giftDescription;
908
909			// Update Hidden Form Fields for submission
910			document.getElementById('hidden-gift').value = magazinegift; 
911			document.getElementById('hidden-amt').value = totalCost;  
912			
913			document.getElementById('hidden-selectionlist').value = selectionListTextToDb.join('<br>'); // selectedPlans.join('|'); 
914			// Outlook Traveller Magazine (Print 1 Year) at Rs. 725
915			
916			
917			document.getElementById('hidden-mag-select').value = selectedPlans.join('<br>');
918			document.getElementById('dura').value = '1Yr'
919			//document.getElementById('hidden-gift').value = maxGiftId;  
920			
921			// Clear any previous messages
922			const messageBox = document.getElementById(MESSAGE_BOX_ID);
923			if (messageBox) messageBox.innerHTML = '';
924		}
925
926		/**
927		 * Handles form validation before submission.
928		 * Checks if at least one plan has been selected.
929		 * @returns {boolean} - true if validation passes, false otherwise.
930		 */
931		function fnValAndSubmit_old() {
932			updateSummary(); // Ensure the selectedPlans array is up-to-date
933			let isValid = true;
934			
935			
936			if (selectedPlans.length === 0) {
937				showMessage('Please select at least one subscription plan to proceed with the order.', 'error');
938				return false;
939			}
940			
941			// Minimal form field validation (adjust based on your actual form fields)
942			const fname = document.getElementById('fname')?.value?.trim();
943			const email = document.getElementById('email')?.value?.trim(); 
944			const dob = document.getElementById('dob');
945			
946			//const day1 = document.getElementById('day1')?.value?.trim(); 
947			//const month1 = document.getElementById('month1')?.value?.trim(); 
948			//const year1 = document.getElementById('year1')?.value?.trim(); 
949			const address1 = document.getElementById('address1')?.value?.trim(); 
950			const pin = document.getElementById('pin')?.value?.trim(); 
951			const city = document.getElementById('city')?.value?.trim(); 
952			const state = document.getElementById('state')?.value?.trim(); 
953			const phoneoff = document.getElementById('phoneoff')?.value?.trim(); 
954			const occupa = document.getElementById('occupa')?.value?.trim(); 
955			const desig = document.getElementById('desig')?.value?.trim(); 
956			
957			// day1,month1,year1,address1,pin,city,state,country,phoneoff,sex,occupa,desig,org
958			
959			if (!fname ) {showMessage('Please ensure your Full Name is filled.', 'error');return false;} 
960            const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
961            if (!email || !emailRegex.test(email)) { 
962                showMessage('Please ensure your E-mail Address are filled.', 'error');return false; 
963            } 
964			//if (!day1 ) {showMessage('Please select your Day of Date of Birth.', 'error');return false;}
965			//if (!month1 ) {showMessage('Please select month.', 'error');return false;}
966			//if (!year1 ) {showMessage('Please select year.', 'error');return false;}
967			
968			if (!dob.value) { showMessage('Please select your Date of Birth.', 'error');return false; }
969			if (!address1  ) {showMessage('Please ensure your Address  is filled.', 'error');return false;}
970			if (!pin  ) {showMessage('Please ensure your ZIP / PIN Code is filled.', 'error');return false;}
971			if (!city  ) {showMessage('Please ensure your City is filled.', 'error');return false;}
972			if (!state  ) {showMessage('Please ensure your State is filled.', 'error');return false;}
973			if (!phoneoff  ) {showMessage('Please ensure your Phone/Mobile is filled.', 'error');return false;}
974			if (!occupa  ) {showMessage('Please enter your field of work.', 'error');return false;}
975			if (!desig  ) {showMessage('Please enter your level of seniority', 'error');return false;}
976
977			// Validation successful
978			showMessage('Validation successful. Proceeding to payment gateway...', 'success');
979			return true; 
980		}
981		
982		function fnValAndSubmit() {
983			updateSummary(); // Ensure the selectedPlans array is up-to-date
984			let isValid = true;
985			
986			// Check if at least one subscription plan is selected
987			if (selectedPlans.length === 0) {
988				showMessage('Please select at least one subscription plan to proceed with the order.', 'error');
989				return false;
990			}
991			
992			// =============================================
993			// DATE OF BIRTH VALIDATION (iOS Compatible)
994			// =============================================
995			const dobInput = document.getElementById('dob');
996			const dobValue = dobInput?.value?.trim();
997			
998			// Check if DOB is filled
999			if (!dobValue) {
1000				showMessage('Please select your Date of Birth.', 'error');
1001				dobInput.focus();
1002				return false;
1003			}
1004			
1005			// Validate the date
1006			const selectedDate = new Date(dobValue);
1007			const today = new Date();
1008			
1009			// Check if date is valid
1010			if (isNaN(selectedDate.getTime())) {
1011				showMessage('Please enter a valid Date of Birth.', 'error');
1012				dobInput.value = ''; // Clear invalid date
1013				dobInput.focus();
1014				return false;
1015			}
1016			
1017			// Calculate age
1018			let age = today.getFullYear() - selectedDate.getFullYear();
1019			const monthDiff = today.getMonth() - selectedDate.getMonth();
1020			const dayDiff = today.getDate() - selectedDate.getDate();
1021			
1022			// Adjust age if birthday hasn't occurred yet this year
1023			if (monthDiff < 0 || (monthDiff === 0 && dayDiff < 0)) {
1024				age--;
1025			}
1026			
1027			// Check age restrictions (Must be between 10 and 100 years old)
1028			if (age < 10) {
1029				showMessage('You must be at least 10 years old to subscribe.', 'error');
1030				dobInput.value = ''; // Clear invalid date
1031				dobInput.focus();
1032				return false;
1033			} else if (age > 100) {
1034				showMessage('Please enter a valid Date of Birth (Maximum 100 years).', 'error');
1035				dobInput.value = ''; // Clear invalid date
1036				dobInput.focus();
1037				return false;
1038			}
1039			
1040			// =============================================
1041			// FORM FIELD VALIDATIONS
1042			// =============================================
1043			const fname = document.getElementById('fname')?.value?.trim();
1044			const email = document.getElementById('email')?.value?.trim();
1045			const address1 = document.getElementById('address1')?.value?.trim();
1046			const pin = document.getElementById('pin')?.value?.trim();
1047			const city = document.getElementById('city')?.value?.trim();
1048			const state = document.getElementById('state')?.value?.trim();
1049			const phoneoff = document.getElementById('phoneoff')?.value?.trim();
1050			const occupa = document.getElementById('occupa')?.value?.trim();
1051			const desig = document.getElementById('desig')?.value?.trim();
1052			
1053			// Validate Full Name
1054			if (!fname) {
1055				showMessage('Please ensure your Full Name is filled.', 'error');
1056				document.getElementById('fname').focus();
1057				return false;
1058			}
1059			
1060			// Validate Email
1061			const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
1062			if (!email || !emailRegex.test(email)) {
1063				showMessage('Please enter a valid E-mail Address.', 'error');
1064				document.getElementById('email').focus();
1065				return false;
1066			}
1067			
1068			// Validate Address
1069			if (!address1) {
1070				showMessage('Please ensure your Mailing Address is filled.', 'error');
1071				document.getElementById('address1').focus();
1072				return false;
1073			}
1074			
1075			// Validate PIN Code
1076			if (!pin || pin.length < 4) {
1077				showMessage('Please ensure your ZIP / PIN Code is filled (minimum 4 digits).', 'error');
1078				document.getElementById('pin').focus();
1079				return false;
1080			}
1081			
1082			// Validate City
1083			if (!city) {
1084				showMessage('Please ensure your City is filled.', 'error');
1085				document.getElementById('city').focus();
1086				return false;
1087			}
1088			
1089			// Validate State
1090			if (!state) {
1091				showMessage('Please ensure your State is selected.', 'error');
1092				document.getElementById('state').focus();
1093				return false;
1094			}
1095			
1096			// Validate Phone/Mobile
1097			if (!phoneoff || phoneoff.length < 10) {
1098				showMessage('Please ensure your Phone/Mobile number is filled (minimum 10 digits).', 'error');
1099				document.getElementById('phoneoff').focus();
1100				return false;
1101			}
1102			
1103			// Validate Occupation
1104			if (!occupa) {
1105				showMessage('Please select your Field of Work.', 'error');
1106				document.getElementById('occupa').focus();
1107				return false;
1108			}
1109			
1110			// Validate Designation
1111			if (!desig) {
1112				showMessage('Please select your Level of Seniority.', 'error');
1113				document.getElementById('desig').focus();
1114				return false;
1115			}
1116			
1117			// =============================================
1118			// ADDITIONAL iOS DOB FIX - Real-time validation
1119			// =============================================
1120			// Add event listeners for DOB validation on change and blur
1121			if (dobInput) {
1122				// Remove any existing listeners to avoid duplicates
1123				dobInput.removeEventListener('change', validateDobOnChange);
1124				dobInput.removeEventListener('blur', validateDobOnBlur);
1125				
1126				// Add new listeners
1127				dobInput.addEventListener('change', validateDobOnChange);
1128				dobInput.addEventListener('blur', validateDobOnBlur);
1129				
1130				// Also validate on touchstart for iOS
1131				dobInput.addEventListener('touchstart', function(e) {
1132					// If the date input is empty, set a default date to ensure picker opens
1133					if (!this.value) {
1134						const defaultDate = new Date();
1135						defaultDate.setFullYear(defaultDate.getFullYear() - 10);
1136						const year = defaultDate.getFullYear();
1137						const month = String(defaultDate.getMonth() + 1).padStart(2, '0');
1138						const day = String(defaultDate.getDate()).padStart(2, '0');
1139						this.value = `${year}-${month}-${day}`;
1140					}
1141				});
1142			}
1143			
1144			// Validation successful
1145			showMessage('Validation successful. Proceeding to payment gateway...', 'success');
1146			return true;
1147		}
1148
1149		// =============================================
1150		// DOB VALIDATION HELPER FUNCTIONS
1151		// =============================================
1152
1153		/**
1154		 * Validates Date of Birth on change event (works on iOS)
1155		 */
1156		function validateDobOnChange() {
1157			const dobInput = document.getElementById('dob');
1158			const dobValue = dobInput?.value?.trim();
1159			
1160			if (!dobValue) {
1161				// Don't show error immediately on change if empty
1162				return;
1163			}
1164			
1165			const selectedDate = new Date(dobValue);
1166			const today = new Date();
1167			
1168			if (isNaN(selectedDate.getTime())) {
1169				showMessage('Please enter a valid Date of Birth.', 'error');
1170				dobInput.value = '';
1171				dobInput.focus();
1172				return;
1173			}
1174			
1175			let age = today.getFullYear() - selectedDate.getFullYear();
1176			const monthDiff = today.getMonth() - selectedDate.getMonth();
1177			const dayDiff = today.getDate() - selectedDate.getDate();
1178			
1179			if (monthDiff < 0 || (monthDiff === 0 && dayDiff < 0)) {
1180				age--;
1181			}
1182			
1183			if (age < 10) {
1184				showMessage('You must be at least 10 years old to subscribe.', 'error');
1185				dobInput.value = '';
1186				dobInput.focus();
1187			} else if (age > 100) {
1188				showMessage('Please enter a valid Date of Birth (Maximum 100 years).', 'error');
1189				dobInput.value = '';
1190				dobInput.focus();
1191			} else {
1192				// Valid date - clear any error messages
1193				const messageBox = document.getElementById(MESSAGE_BOX_ID);
1194				if (messageBox) {
1195					messageBox.innerHTML = '';
1196					messageBox.className = 'mt-4';
1197				}
1198			}
1199		}
1200
1201		/**
1202		 * Validates Date of Birth on blur event
1203		 */
1204		function validateDobOnBlur() {
1205			const dobInput = document.getElementById('dob');
1206			const dobValue = dobInput?.value?.trim();
1207			
1208			if (!dobValue) {
1209				return;
1210			}
1211			
1212			const selectedDate = new Date(dobValue);
1213			const today = new Date();
1214			
1215			if (isNaN(selectedDate.getTime())) {
1216				showMessage('Please enter a valid Date of Birth.', 'error');
1217				dobInput.value = '';
1218				dobInput.focus();
1219				return;
1220			}
1221			
1222			let age = today.getFullYear() - selectedDate.getFullYear();
1223			const monthDiff = today.getMonth() - selectedDate.getMonth();
1224			const dayDiff = today.getDate() - selectedDate.getDate();
1225			
1226			if (monthDiff < 0 || (monthDiff === 0 && dayDiff < 0)) {
1227				age--;
1228			}
1229			
1230			if (age < 10) {
1231				showMessage('You must be at least 10 years old to subscribe.', 'error');
1232				dobInput.value = '';
1233				dobInput.focus();
1234			} else if (age > 100) {
1235				showMessage('Please enter a valid Date of Birth (Maximum 100 years).', 'error');
1236				dobInput.value = '';
1237				dobInput.focus();
1238			}
1239		}
1240
1241		// =============================================
1242		// INITIALIZE DOB VALIDATION ON PAGE LOAD
1243		// =============================================
1244		document.addEventListener('DOMContentLoaded', function() {
1245			// Set min/max attributes for DOB (desktop browsers)
1246			const dobInput = document.getElementById('dob');
1247			if (dobInput) {
1248				const today = new Date();
1249				
1250				// Max date: 10 years ago
1251				const maxDate = new Date(today);
1252				maxDate.setFullYear(today.getFullYear() - 10);
1253				
1254				// Min date: 100 years ago
1255				const minDate = new Date(today);
1256				minDate.setFullYear(today.getFullYear() - 100);
1257				
1258				// Format dates for input
1259				function formatDate(date) {
1260					const year = date.getFullYear();
1261					const month = String(date.getMonth() + 1).padStart(2, '0');
1262					const day = String(date.getDate()).padStart(2, '0');
1263					return `${year}-${month}-${day}`;
1264				}
1265				
1266				dobInput.setAttribute('max', formatDate(maxDate));
1267				dobInput.setAttribute('min', formatDate(minDate));
1268				
1269				// Remove any existing event listeners
1270				dobInput.removeEventListener('change', validateDobOnChange);
1271				dobInput.removeEventListener('blur', validateDobOnBlur);
1272				
1273				// Add event listeners for real-time validation
1274				dobInput.addEventListener('change', validateDobOnChange);
1275				dobInput.addEventListener('blur', validateDobOnBlur);
1276				
1277				// iOS fix: Add touchstart handler
1278				dobInput.addEventListener('touchstart', function(e) {
1279					// This helps iOS show the native date picker
1280					// The min/max are already set, but iOS might ignore them
1281					if (!this.value) {
1282						// Set a default value within range if empty
1283						const defaultDate = new Date();
1284						defaultDate.setFullYear(defaultDate.getFullYear() - 30);
1285						const year = defaultDate.getFullYear();
1286						const month = String(defaultDate.getMonth() + 1).padStart(2, '0');
1287						const day = String(defaultDate.getDate()).padStart(2, '0');
1288						this.value = `${year}-${month}-${day}`;
1289					}
1290				});
1291			}
1292		});
1293
1294		/**
1295		 * Utility function to display a temporary message to the user (instead of alert).
1296		 * @param {string} message - The message to display.
1297		 * @param {string} type - 'error' or 'success' for styling.
1298		 */
1299		function showMessage(message, type) {
1300			const messageBox = document.getElementById(MESSAGE_BOX_ID);
1301			if (messageBox) {
1302				// Clear previous classes
1303				messageBox.className = 'p-3 mb-4 rounded-lg font-medium text-center transition-opacity duration-300';
1304				
1305				if (type === 'error') {
1306					messageBox.classList.add('bg-red-100', 'text-red-700', 'border', 'border-red-400', 'opacity-100');
1307				} else if (type === 'success') {
1308					 messageBox.classList.add('bg-green-100', 'text-green-700', 'border', 'border-green-400', 'opacity-100');
1309				} else {
1310					 messageBox.classList.add('bg-blue-100', 'text-blue-700', 'border', 'border-blue-400', 'opacity-100');
1311				}
1312
1313				messageBox.innerText = message;
1314				
1315				// Clear the message after a few seconds
1316				setTimeout(() => {
1317					messageBox.classList.remove('opacity-100');
1318					messageBox.classList.add('opacity-0');
1319					setTimeout(() => {
1320						messageBox.innerHTML = '';
1321						messageBox.className = 'mt-4'; // Reset to initial class
1322					}, 300); // Wait for fade out
1323				}, 5000);
1324			} else {
1325				console.warn(`[${type.toUpperCase()}]: ${message}`);
1326			}
1327		} 
1328
1329    </script>
vendor: 144 bytes, lines 1329-1330
1329
1330<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="92621a6c86b993c0b25608ec-|49" defer></script>
1330<script>window.__CF$cv$params={r:'a3ffe34d6db1109c',t:'MTc5MDIzMjk3Mg==',u:'01a0d233505d74e681fa2cc4935e0d45',ut:'.i4gT9AFouuta6EXVP22.CMDlyQ7LbIB6ncc0llZJNw-1790232973-1.2.1.1-kVWi56GffSkS.Ml_xtdwoGZqH1GL2h.OaiN82_IjBas9zTnodyq.eOIYeTphh6tXpzfnsFGCZG.NNJJ51nRZhl4KBJ_uOMiv5FooX4j_wrA',i:60};(function(){if(!document.body)return;var s=document.createElement('script');s.src='/cdn-cgi/challenge-platform/scripts/precursor/main.js';document.head.appendChild(s);})();</script>
1330</body>
1331</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.