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<br>" 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>← Scroll horizontally to view all magazine options → </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>← Scroll horizontally to view all magazine options → </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 & Engineering">IT & Engineering</option> 523 <option value="Operations">Operations</option> 524 <option value="Legal & Consulting">Legal & 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 → 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 × 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.