1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36<!DOCTYPE html> 37<html lang="en"> 38<head> 39 <!-- Meta tags --> 40 <meta charset="utf-8" /> 41 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> 42 <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" /> 43 <meta name="viewport" content="width=device-width" /> 44 <meta property="og:title" content="Advertiser Home Page"> 45 <meta name="description" content=""> 46 <meta name="keywords" content=""> 47 <meta name="version" content="MBX.9.18.25.142"> 48 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 49 <META name="country" content="United States"> 50 <META name="copyright" content="Mediabids.com"> 51 <META name="distribution" content="global"> 52 <META name="document-classification" content="general"> 53 <META name="rating" content="general"> 54 <LINK REL="shortcut icon" HREF="/favicon.ico"> 55 56 <META name="title" content=" Pay-for-Performance Print Advertising. Generate high-converting inbound calls & leads from print ads in local and regional newspapers on a cost-per-lead basis. Newspapers = Trust. "> <META name="keywords" content=" lead generation, direct-response advertising, cost-per-response, inbound calls, pay-per-call, PFP, pay-for-performance print , performance print, PPC print, print affiliate network, affiliate marketing, affiliate advertising, revshare marketing, CPA marketing, cost-per-acquisition, performance marketing, performance media, CPL, cost-per-lead print advertising, pay-per-call print advertising, pay-per-call newspaper advertising, performance newspaper advertising"><META name="description" content="MediaBids is home to the world's largest and most comprehensive performance print advertising program, driving high-converting inbound calls and leads to a wide variety of clients across the US. Pay only for response. Generate high-quality leads on a CPL basis for home services, home improvement products, senior products & services, insurance, pet products, food/gifts + more. "> 57 <title>Advertiser Home Page</title> 58 <link rel=canonical href="https:/www.mediabids.com/-/advertiser/print-advertising/"/> 59 60 61 <meta name="robots" content="index, follow"/> 62 63 64 65 66 67 68 69 70 71 <!--Start of Zopim Live Chat Script--> 72<!-- Start of Zendesk Widget script -->
73<script id="ze-snippet" src="https://static.zdassets.com/ekr/snippet.js?key=97a6dff0-e8fe-4b0f-a34d-00fa236b9e28"> </script>
73 74<!-- End of Zendesk Widget script --> 75 76 77 78 <link rel="icon" href="/favicon.ico"> 79 <link href="/wwwroot/js/tp/halfmoon/halfmoon-variables.min.css" rel="stylesheet" /> 80 <link rel="stylesheet" href="/wwwroot/thirdparty/fontawesome/all.min.css?" type="text/css" /> 81 <link href="/wwwroot/mediabids.css" rel="stylesheet" /> 82 83 <link href="/wwwroot/advertiser.css" rel="stylesheet" /> 84 85 86
86<script type='text/javascript'>function addLoadEvent(func) {var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func;} else { window.onload = function(){if(oldonload){oldonload(); } func();}}} const ATRAJX="ax", ATRGID="gid", ATRTSK="tsk", LNKWGT="https://www.mediabids.com/-/widgets/", TSKBLG="1046";</script>
86 87 88 89 90 91 92 93 94<div style="display: none; position: absolute;left: -500;top: -500;z-index: -7;"> 95 96 97 98 99<!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 99-100
99 100<script async src="https://www.googletagmanager.com/gtag/js?id=
100G-8GDTEFMZB3
vendor: 13 bytes, line 100
100"></script>
101<script> 102
vendor: 136 bytes, lines 102-105
102window.dataLayer = window.dataLayer || []; 103 function gtag(){dataLayer.push(arguments);} 104 gtag('js', new Date()); 105 gtag('config', '
105G-8GDTEFMZB3
vendor: 5 bytes, line 105
105');
106</script>
106 107 108 109 110</div> 111 112
112<script type='text/javascript' src="/wwwroot/js/mediabids.js" defer ></script>
112 113
113<script type='text/javascript' src="/wwwroot/js/tp/halfmoon/halfmoon.min.js" defer></script>
113 114</head> 115 116<body onLoad="refreshblog();" id="body" class="with-custom-webkit-scrollbars with-custom-css-scrollbars with-navbar-bottom nondimmed " > 117<div id="page-overlay" class="overlay" aria-hidden="true"><svg viewBox="0 0 100 100" width="80" height="80" class="d-block opacity-50 mx-auto" aria-label="Loading" role="img"><g id="ring" transform="rotate(0 50 50)"><circle class="spin"cx="50" cy="50" r="46" stroke="#66508d" stroke-width="6" stroke-linecap="round" fill="none" stroke-dasharray="60 260" style="transform-origin: 50% 50%;" /></g><path d="M 28 72 L 28 28 L 38 28 L 50 54 L 62 28 L 72 28 L 72 72 L 64 72 L 64 44 L 52 68 L 48 68 L 36 44 L 36 72 Z" fill="#66508d" /></svg></div> 118<a id="pagetop"></a> 119 120 121 122 <div class="page-wrapper "> 123 <div class="sticky-alerts" id="sticky-alerts"></div> 124 125 126 127 <div class="content-wrapper" id="content"> 128 129 <!-- Content wrapper start --> 130 131 <header> 132 <h1 class="d-none">Advertiser Home Page</h1> 133 <div class="container-fluid" id="header"> 134 <div class="row h-full"> 135 <a href="https://www.mediabids.com/-/publication/print-advertising/" class="col-12 col-md-9 w-half w-md-full h-half h-md-full" id="logo">Mediabids.com, Inc</a>
136 <div class="col-12 col-md-3 align-middle mt-neg-5 text-left" id="greeting"> 137 <span class="ml-15 ml-md-0 mr-10 mr-md-0"><a href="https://www.mediabids.com/-/sign/up/" class="top-link mr-5 mr-md-0">Register Now</a> 138 <!-- 139 <a onclick="halfmoon.toggleModal('global-msg');" data-placement="bottom" data-toggle="tooltip" data-title="You have a Mediabids notification."><i class="fas fa-bell orange"></i></a> 140 --> 141 <br class="d-none d-md-block"/><a href="https://www.mediabids.com/-/sign/in/?fas=true" class="login">Sign in</a></span> 142 143 </div> 144 </div> 145 </div> 146 <div class="container-fluid" id="sub-header"> 147 <div class="row"> 148 <div class="col-9"> 149 150 </div> 151 <div class="col-3 align-middle" > 152 <a href="https://www.mediabids.com/-/publication/print-advertising/?scrub=true">Publications Click Here</a> 153 154 </div> 155 </div> 156 </div> 157 </header> 158 159 <div class="container h-three-quarter" id="content"> 160 <div class="row h-three-quarter" id="mb-body"> 161 <div class="col"> 162 <main> 163 <div class="container-fluid ml-5 ml-md-0 pr-15 mr-md-0"> 164 <div class="row white green-bk mt-10"> 165 <div class="col-4 pl-10 pl-md-20"> 166 <h3 class="text-decoration-none font-normal d-none d-md-block">The Premier Print<br>Advertising Affiliate<br>Network</h3> 167 <h4 class="text-decoration-none font-normal d-block d-md-none">The Premier Print<br>Advertising Affiliate<br>Network</h4> 168 </div> 169 <div class="col-8 font-weight-bold"> 170 <p class="font-size-16 ml-20 ml-md-0 mr-20 mr-md-0"> 171 Drive High-Converting, High-Value Customers from Newspapers<br>& Magazines. Generate inbound calls, leads and sales from print ads. 172 </p> 173 <p class="font-size-16 ml-20 ml-md-0 mr-20 mr-md-0"> 174 Mediabids makes it EASY to place print ads with MINIMAL RISK.<br>If the ads don't generate leads, there's no cost to you. 175 </p> 176 </div> 177 </div> 178 <div class="row"> 179 <div class="col-6 "> 180 <div class="w-full mt-10 p-10 black-border grey-top-border" id="arrow"> 181 <h3 class="pt-0 mt-0 font-normal">How Mediabids' Print<br>Advertising Affiliate Program<br>Works:</h3> 182 <ul class="pl-20"> 183 <li>We distribute pay-per-call/CPA print ads to<br> 184 thousands of newspapers and magazines across the<br> 185 U.S. on behalf of select advertisers.</li> 186 <li>Mediabids handles the details - from ad resizing,<br> 187 performance tracking, publisher payment & more.</li> 188 <li>We've driven millions of new long-term customers<br> 189 to a wide variety of verticals.</li> 190 </ul> 191 <p class="font-weight-bold "> 192 Let us know what types of customers<br> 193 you are trying to reach and we will contact<br> 194 you to discuss our Print Advertising<br> 195 Affiliate Program.</p> 196 <form method="post" name="adRateRequest" action="https://www.mediabids.com/-/advertiser/ad-rates/request/"> 197 <input type="hidden" name="command" value="process"> 198 <input type="hidden" name="init" value="true"> 199 <input type="hidden" name="unRegistered" value="true"> 200 <input type="hidden" name="last_name" value="N/A"> 201 <input type="hidden" name="business_type_id" value="900"> 202 <input type="hidden" name="defaultVal" value="Select..."> 203 <input type="hidden" name="city" value="N/A"> 204 <input type="hidden" name="state_id" value="900"> 205 <input type="hidden" name="typeId" value="300"> 206 <label for="adl_notes" class="required">What type of leads are you interested in generating?</label> <br> <input name="adl_notes" class="form-control" id="adl_notes" required="required" size="57"> 207 208 209 <label for="first_name" class="required">Name:</label> <br> <input name="first_name" class="form-control" id="first_name" required="required" size="57"> 210 211 212 <label for="email" class="required">Email:</label> <br> <input name="email" class="form-control" id="email" required="required" size="57"> 213 214 215 <label for="phone" class="required">Phone:</label><br> <input name="phone" class="form-control" id="phone" required="required" size="57" maxlength="12"> 216 217 218 <label for="biz_name" class="required">Company Name:</label> <br> <input name="biz_name" class="form-control" id="biz_name" required="required" size="57"> 219 220 221 <input class="mt-10 btn btn-primary btn-block" type="submit" value="Submit"> 222 </form> 223 <div> 224 <p class="p-5 font-weight-bold white darkest-grey-bk">
224A few of the clients who have benefitted from the 225 MediaBids Print Advertising Affiliate Program:</p> 226 <img src="/cache/featured-advertisers.png" class="w-full" border="0"/> 227 </div> 228 </div> 229 </div> 230 <div class="col-6"> 231 <div class="m-10"> 232 <div class="white p-10" id="bubbles"> 233 <h3 class="pt-0 mt-0 font-normal">Why Print Advertising?</h3> 234 <h5 class="p-0 m-0 font-normal">PHONE CALLS FROM PRINT ADS HAVE AN AVERAGE CONVERSION RATE OF 40%!*</h5> 235 <p class="p-0 m-0 mb-10"> 236 That FAR EXCEEDS online conversion rates of 1-2%. If you 237 are not placing print ads, you are missing out on high quality 238 new customers.<br/> 239 <div class=""><a class="underline" href="https://www.mediabids.com/-/sign/up/">Create your free account and drive calls from print</a></div> 240 <div class="mt-10"><a class=" underline" href="/-/r/performance-print-and-newspaper-affiliate-marketing-resources">Performance Print & Newspaper Affiliate Marketing Resources</a></div> 241 </p> 242 <img class="w-full" src="/wwwroot/image/redlady.png"> 243 </div> 244 <div class="mt-10 black-border p-10 grey-top-border" id="pstack2"> 245 <h3 class=" font-normal d-none d-md-block">Print Media Strategy/Buying</h3> 246 <h4 class=" font-normal d-block d-md-none">Print Media Strategy/Buying</h4> 247 With access to every print publication<br> 248 in the US and Canada, including both<br> 249 national and hyper-local magazines and<br> 250 newspapers, we will craft a print media<br> 251 strategy that will put your business in<br> 252 front of the right target audience at the<br> 253 best price possible.<br> 254 <a class="underline" href="https://www.mediabids.com/-/sign/up/">Create your free account and<br> 255 start planning</a> 256 </div> 257 <div class="mt-10 white green-bk p-10"> 258 <h3 class=" font-normal d-none d-md-block">Request ad rates from publications</h3> 259 <h4 class=" font-normal d-block d-md-none">Request ad rates from publications</h4> 260 <p class="font-weight-bold "> 261 We have over 9,000 publications of all 262 types in our network. You can receive rates 263 specifically tailored to meet your needs. 264 <a class="underline white-hover" href="https://www.mediabids.com/-/search-publications/">Learn more</a> 265 </p> 266 </div> 267 </div> 268 </div> 269 </div> 270 <div class="row"> 271 <div class="col"> 272 <div class="black-border-2 lt-grey-bk p-20 mt-20"> 273 <div class="standard-bk p-20"> 274 <div class="font-weight-bold font-size-38 green">NEWS</div> 275 <div id="blogentries" > 276 <svg viewBox="0 0 100 100" width="80" height="80" class="d-block opacity-50 mx-auto" aria-label="Loading" role="img"><g id="ring" transform="rotate(0 50 50)"><circle class="spin"cx="50" cy="50" r="46" stroke="#66508d" stroke-width="6" stroke-linecap="round" fill="none" stroke-dasharray="60 260" style="transform-origin: 50% 50%;" /></g><path d="M 28 72 L 28 28 L 38 28 L 50 54 L 62 28 L 72 28 L 72 72 L 64 72 L 64 44 L 52 68 L 48 68 L 36 44 L 36 72 Z" fill="#66508d" /></svg> 277 </div> 278 </div> 279 </div> 280 </div> 281 </div> 282 <div class="">* Based on MediaBids tracking of over 10,000 phone numbers.</div> 283 </div> 284
284<script>const ut = 1;</script>
284 285 286 <a id="exiter" href="#"></a> 287
287<script type='text/javascript' src="/wwwroot/js/exit-interview.js" defer ></script>
287 288 289 </main> 290 <footer class="d-flex justify-content-center ml-5 ml-md-0" id="footer"> 291 <div class=" w-700 d-flex justify-content-around darker-grey-top-border-2"> 292 <div class="pt-10">© 2026 Mediabids Inc. All Rights Reserved.</div> 293 <div class="pt-10"><a href="https://www.mediabids.com/-/m/about-us">About/Contact Us</a> </div> 294 <div class="pt-10"><a href="https://www.mediabids.com/-/m/terms-of-service-advertiser">Terms of Service</a></div> 295 <div class="pt-10"><a href="https://www.mediabids.com/-/m/privacy-policy">Privacy Policy</a></div> 296 </div> 297 </footer> 298 <!-- end content --> 299 </div> 300 <!-- Content wrapper end --> 301 </div> 302 <!-- Page wrapper end --> 303 <div class="modal" id="modal-wrapper" tabindex="-1" role="dialog"> 304 <div class="modal-dialog" role="document"> 305 <div class="modal-content"> 306 <a href="#" id="modal-close" class="close" role="button" aria-label="Close"> 307 <span >×</span> 308 </a> 309 <h5 class="modal-title" id='modal-title'></h5> 310 <p id='modal-content'></p> 311 </div> 312 </div> 313 </div> 314 315 316 317
317<script> 318 function showTrace() { console.log("Trace disabled"); } 319 320 </script>
320 321 <a id="scroll-top" href="#top" xonclick="scrollToTop();" class="d-none position-fixed right-100 right-md-0 mr-md-40 p-20 pt-10 pb-10 mb-20 bottom-0 z-50 brand-bk white"><i class="fas fa-angle-double-up"></i></a> 322 323 324 325 326 327 328 329
330<script> 331window.addEventListener("load", function(){ 332window.cookieconsent.initialise({ 333 "palette": { 334 "popup": { 335 "background": "#f68727", /* value for button border (e.g. #434343, #fff, transparent, red) */ 336 "text": "#ffffff" /* value for button border (e.g. #434343, #fff, transparent, red) */ 337 }, 338 "button": { 339 "background": "#000000", /* value for button background (e.g. #434343, #fff, transparent, red) */ 340 "text": "#ffffff", /* value for button text (e.g. #434343, #fff, transparent, red) */ 341 "border": "#000000" /* value for button border (e.g. #434343, #fff, transparent, red) */ 342 } 343 }, 344 "theme": "edgeless", /* theme values: block, classic, edgeless */ 345 "position": "bottom", /* position values: top, bottom, bottom-left, bottom-right */ 346 "static": false, /* set static to true to change behaviour of position value top only */ 347 "showLink": false, /* set showLink to false if you want to remove the 'Learn more' link */ 348/* "type": "opt-out", keep compliance type parameter commented to show a simple message telling your visitors that you use cookies. Set type to "opt-out" to tell visitors that you use cookies, but give them one button to disable cookies, and another to dismiss the message. 349 or set type to "opt-in" to tell visitors that you wish to use cookies, and give them one button to enable cookies, and another to refuse them. For callback hook code example, please visit: https://cookieconsent.insites.com/documentation/disabling-cookies */ 350 "content": { 351/* "href": "", /* URL for the Learn more link. Use http:// or https:// in your URL */ 352 "message": "We use cookies to ensure the best experience on our website. By using this site, you agree to our updated <a href=\"https://www.mediabids.com/-/m/privacy-policy\" class='cc-link'>Privacy Policy</a> and our <a href=\"https://www.mediabids.com/-/m/terms-of-service-advertiser\" class='cc-link'>Terms of Use</a>.", /* You can add your own Consent My Cookie message here */ 353 "dismiss": "I AGREE" /* You can add your own button text here */ 354 } 355})}); 356</script>
356 357<style> 358.cc-window { 359 opacity: 1; 360 transition: opacity 1s ease 361} 362.cc-window.cc-invisible { 363 opacity: 0 364} 365.cc-animate.cc-revoke { 366 transition: transform 1s ease 367} 368.cc-animate.cc-revoke.cc-top { 369 transform: translateY(-2em) 370} 371.cc-animate.cc-revoke.cc-bottom { 372 transform: translateY(2em) 373} 374.cc-animate.cc-revoke.cc-active.cc-bottom, 375.cc-animate.cc-revoke.cc-active.cc-top, 376.cc-revoke:hover { 377 transform: translateY(0) 378} 379.cc-grower { 380 max-height: 0; 381 overflow: hidden; 382 transition: max-height 1s 383} 384.cc-link, 385.cc-revoke:hover { 386 text-decoration: underline 387} 388.cc-revoke, 389.cc-window { 390 position: fixed; 391 overflow: hidden; 392 box-sizing: border-box; 393 font-family: Helvetica, Calibri, Arial, sans-serif; 394 font-size: 16px; 395 line-height: 1.5em; 396 display: -ms-flexbox; 397 display: flex; 398 -ms-flex-wrap: nowrap; 399 flex-wrap: nowrap; 400 z-index: 9999 401} 402.cc-window.cc-static { 403 position: static 404} 405.cc-window.cc-floating { 406 padding: 2em; 407 max-width: 24em; 408 -ms-flex-direction: column; 409 flex-direction: column 410} 411.cc-window.cc-banner { 412 padding: 1em 1.8em; 413 width: 100%; 414 -ms-flex-direction: row; 415 flex-direction: row 416} w-50 417.cc-revoke { 418 padding: .5em 419} 420.cc-header { 421 font-size: 18px; 422 font-weight: 700 423} 424.cc-btn, 425.cc-close, 426.cc-link, 427.cc-revoke { 428 cursor: pointer 429} 430.cc-link { 431 opacity: .8; 432 display: inline-block; 433 padding: .2em 434} 435.cc-link:hover { 436 opacity: 1 437} 438.cc-link:active, 439.cc-link:visited { 440 color: initial 441} 442.cc-btn { 443 display: block; 444 padding: .4em .8em; 445 font-size: .9em; 446 font-weight: 700; 447 border-width: 2px; 448 border-style: solid; 449 text-align: center; 450 white-space: nowrap 451} 452.cc-banner .cc-btn:last-child { 453 min-width: 140px 454} 455.cc-highlight .cc-btn:first-child { 456 background-color: transparent; 457 border-color: transparent 458} 459.cc-highlight .cc-btn:first-child:focus, w-50 460.cc-highlight .cc-btn:first-child:hover { 461 background-color: transparent; 462 text-decoration: underline 463} 464.cc-close { 465 display: block; 466 position: absolute; 467 top: .5em; 468 right: .5em; 469 font-size: 1.6em; 470 opacity: .9; 471 line-height: .75 472} 473.cc-close:focus, 474.cc-close:hover { 475 opacity: 1 476} 477.cc-revoke.cc-top { 478 top: 0; 479 left: 3em; 480 border-bottom-left-radius: .5em; 481 border-bottom-right-radius: .5em 482} 483.cc-revoke.cc-bottom { 484 bottom: 0; 485 left: 3em; 486 border-top-left-radius: .5em; 487 border-top-right-radius: .5em 488} 489.cc-revoke.cc-left { 490 left: 3em; 491 right: unset 492} 493.cc-revoke.cc-right { 494 right: 3em; 495 left: unset 496} 497.cc-top { 498 top: 1em 499} 500.cc-left { 501 left: 1em 502} 503.cc-right { 504 right: 1em 505} 506.cc-bottom { 507 bottom: 1em 508} 509.cc-floating>.cc-link { 510 margin-bottom: 1em 511} 512.cc-floating .cc-message { 513 display: block; 514 margin-bottom: 1em 515} 516.cc-window.cc-floating .cc-compliance { 517 -ms-flex: 1; 518 flex: 1 519} 520.cc-window.cc-banner { 521 -ms-flex-align: center; 522 align-items: center 523} 524.cc-banner.cc-top { 525 left: 0; 526 right: 0; 527 top: 0 528} 529.cc-banner.cc-bottom { 530 left: 0; 531 right: 0; 532 bottom: 0; 533 z-index: 16000003; 534} 535.cc-banner .cc-message { 536 -ms-flex: 1; 537 flex: 1 538}
539.cc-compliance { 540 display: -ms-flexbox; 541 display: flex; 542 -ms-flex-align: center; 543 align-items: center; 544 -ms-flex-line-pack: justify; 545 align-content: space-between 546} 547.cc-compliance>.cc-btn { 548 -ms-flex: 1; 549 flex: 1 550} 551.cc-btn+.cc-btn { 552 margin-left: .5em 553} 554@media print { 555 .cc-revoke, 556 .cc-window { 557 display: none 558 } 559} 560@media screen and (max-width:900px) { 561 .cc-btn { 562 white-space: normal 563 } 564} 565@media screen and (max-width:414px) and (orientation:portrait), 566screen and (max-width:736px) and (orientation:landscape) { 567 .cc-window.cc-top { 568 top: 0 569 } 570 .cc-window.cc-bottom { 571 bottom: 0 572 } 573 .cc-window.cc-banner, 574 .cc-window.cc-left, 575 .cc-window.cc-right { 576 left: 0; 577 right: 0 578 } 579 .cc-window.cc-banner { 580 -ms-flex-direction: column; 581 flex-direction: column 582 } 583 .cc-window.cc-banner .cc-compliance { 584 -ms-flex: 1; 585 flex: 1 586 } 587 .cc-window.cc-floating { 588 max-width: none 589 } 590 .cc-window .cc-message { 591 margin-bottom: 1em 592 } 593 .cc-window.cc-banner { 594 -ms-flex-align: unset; 595 align-items: unset 596 } 597} 598.cc-floating.cc-theme-classic { 599 padding: 1.2em; 600 border-radius: 5px 601} 602.cc-floating.cc-type-info.cc-theme-classic .cc-compliance { 603 text-align: center; 604 display: inline; 605 -ms-flex: none; 606 flex: none 607} 608.cc-theme-classic .cc-btn { 609 border-radius: 5px 610} 611.cc-theme-classic .cc-btn:last-child { 612 min-width: 140px 613} 614.cc-floating.cc-type-info.cc-theme-classic .cc-btn { 615 display: inline-block 616} 617.cc-theme-edgeless.cc-window { 618 padding: 0 619} 620.cc-floating.cc-theme-edgeless .cc-message { 621 margin: 2em 2em 1.5em 622} 623.cc-banner.cc-theme-edgeless .cc-btn { 624 margin: 0; 625 padding: .8em 1.8em; 626 height: 100% 627} 628.cc-banner.cc-theme-edgeless .cc-message { 629 margin-left: 1em 630} 631.cc-floating.cc-theme-edgeless .cc-btn+.cc-btn { 632 margin-left: 0 633} 634</style>
635<script> 636 ! function(e) { 637 if (!e.hasInitialised) { 638 var t = { 639 escapeRegExp: function(e) { 640 return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") 641 }, 642 hasClass: function(e, t) { 643 var i = " "; 644 return 1 === e.nodeType && (i + e.className + i).replace(/[\n\t]/g, i).indexOf(i + t + i) >= 0 645 }, 646 addClass: function(e, t) { 647 e.className += " " + t 648 }, 649 removeClass: function(e, t) { 650 var i = new RegExp("\\b" + this.escapeRegExp(t) + "\\b"); 651 e.className = e.className.replace(i, "") 652 }, 653 interpolateString: function(e, t) { 654 var i = /{{([a-z][a-z0-9\-_]*)}}/gi; 655 return e.replace(i, function(e) { 656 return t(arguments[1]) || "" 657 }) 658 }, 659 getCookie: function(e) { 660 var t = "; " + document.cookie, 661 i = t.split("; " + e + "="); 662 return 2 != i.length ? void 0 : i.pop().split(";").shift() 663 }, 664 setCookie: function(e, t, i, n, o) { 665 var s = new Date; 666 s.setDate(s.getDate() + (i || 365)); 667 var r = [e + "=" + t, "expires=" + s.toUTCString(), "path=" + (o || "/")]; 668 n && r.push("domain=" + n), document.cookie = r.join(";") 669 }, 670 deepExtend: function(e, t) { 671 for (var i in t) t.hasOwnProperty(i) && (i in e && this.isPlainObject(e[i]) && this.isPlainObject(t[i]) ? this.deepExtend(e[i], t[i]) : e[i] = t[i]); 672 return e 673 }, 674 throttle: function(e, t) { 675 var i = !1; 676 return function() { 677 i || (e.apply(this, arguments), i = !0, setTimeout(function() { 678 i = !1 679 }, t)) 680 } 681 }, 682 hash: function(e) { 683 var t, i, n, o = 0; 684 if (0 === e.length) return o; 685 for (t = 0, n = e.length; t < n; ++t) i = e.charCodeAt(t), o = (o << 5) - o + i, o |= 0; 686 return o 687 }, 688 normaliseHex: function(e) { 689 return "#" == e[0] && (e = e.substr(1)), 3 == e.length && (e = e[0] + e[0] + e[1] + e[1] + e[2] + e[2]), e 690 }, 691 getContrast: function(e) { 692 e = this.normaliseHex(e); 693 var t = parseInt(e.substr(0, 2), 16), 694 i = parseInt(e.substr(2, 2), 16), 695 n = parseInt(e.substr(4, 2), 16), 696 o = (299 * t + 587 * i + 114 * n) / 1e3; 697 return o >= 128 ? "#000" : "#fff" 698 }, 699 getLuminance: function(e) { 700 var t = parseInt(this.normaliseHex(e), 16), 701 i = 38, 702 n = (t >> 16) + i, 703 o = (t >> 8 & 255) + i, 704 s = (255 & t) + i, 705 r = (16777216 + 65536 * (n < 255 ? n < 1 ? 0 : n : 255) + 256 * (o < 255 ? o < 1 ? 0 : o : 255) + (s < 255 ? s < 1 ? 0 : s : 255)).toString(16).slice(1); 706 return "#" + r 707 }, 708 isMobile: function() { 709 return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) 710 }, 711 isPlainObject: function(e) { 712 return "object" == typeof e && null !== e && e.constructor == Object 713 } 714 }; 715 e.status = { 716 deny: "deny", 717 allow: "allow", 718 dismiss: "dismiss" 719 }, e.transitionEnd = function() { 720 var e = document.createElement("div"), 721 t = { 722 t: "transitionend", 723 OT: "oTransitionEnd", 724 msT: "MSTransitionEnd", 725 MozT: "transitionend", 726 WebkitT: "webkitTransitionEnd" 727 }; 728 for (var i in t) 729 if (t.hasOwnProperty(i) && "undefined" != typeof e.style[i + "ransition"]) return t[i]; 730 return "" 731 }(), e.hasTransition = !!e.transitionEnd; 732 var i = Object.keys(e.status).map(t.escapeRegExp); 733 e.customStyles = {}, e.Popup = function() { 734 function n() { 735 this.initialise.apply(this, arguments) 736 } 737 function o(e) { 738 this.openingTimeout = null, t.removeClass(e, "cc-invisible") 739 } 740 function s(t) { 741 t.style.display = "none", t.removeEventListener(e.transitionEnd, this.afterTransition), this.afterTransition = null 742 } 743 function r() { 744 var t = this.options.onInitialise.bind(this); 745 if (!window.navigator.cookieEnabled) return t(e.status.deny), !0; 746 if (window.CookiesOK || window.navigator.CookiesOK) return t(e.status.allow), !0; 747 var i = Object.keys(e.status),
748 n = this.getStatus(), 749 o = i.indexOf(n) >= 0; 750 return o && t(n), o 751 } 752 function a() { 753 var e = this.options.position.split("-"), 754 t = []; 755 return e.forEach(function(e) { 756 t.push("cc-" + e) 757 }), t 758 } 759 function c() { 760 var e = this.options, 761 i = "top" == e.position || "bottom" == e.position ? "banner" : "floating"; 762 t.isMobile() && (i = "floating"); 763 var n = ["cc-" + i, "cc-type-" + e.type, "cc-theme-" + e.theme]; 764 e["static"] && n.push("cc-static"), n.push.apply(n, a.call(this)); 765 p.call(this, this.options.palette); 766 return this.customStyleSelector && n.push(this.customStyleSelector), n 767 } 768 function l() { 769 var e = {}, 770 i = this.options; 771 i.showLink || (i.elements.link = "", i.elements.messagelink = i.elements.message), Object.keys(i.elements).forEach(function(n) { 772 e[n] = t.interpolateString(i.elements[n], function(e) { 773 var t = i.content[e]; 774 return e && "string" == typeof t && t.length ? t : "" 775 }) 776 }); 777 var n = i.compliance[i.type]; 778 n || (n = i.compliance.info), e.compliance = t.interpolateString(n, function(t) { 779 return e[t] 780 }); 781 var o = i.layouts[i.layout]; 782 return o || (o = i.layouts.basic), t.interpolateString(o, function(t) { 783 return e[t] 784 }) 785 } 786 function u(i) { 787 var n = this.options, 788 o = document.createElement("div"), 789 s = n.container && 1 === n.container.nodeType ? n.container : document.body; 790 o.innerHTML = i; 791 var r = o.children[0]; 792 return r.style.display = "none", t.hasClass(r, "cc-window") && e.hasTransition && t.addClass(r, "cc-invisible"), this.onButtonClick = h.bind(this), r.addEventListener("click", this.onButtonClick), n.autoAttach && (s.firstChild ? s.insertBefore(r, s.firstChild) : s.appendChild(r)), r 793 } 794 function h(n) { 795 var o = n.target; 796 if (t.hasClass(o, "cc-btn")) { 797 var s = o.className.match(new RegExp("\\bcc-(" + i.join("|") + ")\\b")), 798 r = s && s[1] || !1; 799 r && (this.setStatus(r), this.close(!0)) 800 } 801 t.hasClass(o, "cc-close") && (this.setStatus(e.status.dismiss), this.close(!0)), t.hasClass(o, "cc-revoke") && this.revokeChoice() 802 } 803 function p(e) { 804 var i = t.hash(JSON.stringify(e)), 805 n = "cc-color-override-" + i, 806 o = t.isPlainObject(e); 807 return this.customStyleSelector = o ? n : null, o && d(i, e, "." + n), o 808 } 809 function d(i, n, o) { 810 if (e.customStyles[i]) return void++e.customStyles[i].references; 811 var s = {}, 812 r = n.popup, 813 a = n.button, 814 c = n.highlight; 815 r && (r.text = r.text ? r.text : t.getContrast(r.background), r.link = r.link ? r.link : r.text, s[o + ".cc-window"] = ["color: " + r.text, "background-color: " + r.background], s[o + ".cc-revoke"] = ["color: " + r.text, "background-color: " + r.background], s[o + " .cc-link," + o + " .cc-link:active," + o + " .cc-link:visited"] = ["color: " + r.link], a && (a.text = a.text ? a.text : t.getContrast(a.background), a.border = a.border ? a.border : "transparent", s[o + " .cc-btn"] = ["color: " + a.text, "border-color: " + a.border, "background-color: " + a.background], "transparent" != a.background && (s[o + " .cc-btn:hover, " + o + " .cc-btn:focus"] = ["background-color: " + v(a.background)]), c ? (c.text = c.text ? c.text : t.getContrast(c.background), c.border = c.border ? c.border : "transparent", s[o + " .cc-highlight .cc-btn:first-child"] = ["color: " + c.text, "border-color: " + c.border, "background-color: " + c.background]) : s[o + " .cc-highlight .cc-btn:first-child"] = ["color: " + r.text])); 816 var l = document.createElement("style"); 817 document.head.appendChild(l), e.customStyles[i] = { 818 references: 1, 819 element: l.sheet 820 }; 821 var u = -1; 822 for (var h in s) s.hasOwnProperty(h) && l.sheet.insertRule(h + "{" + s[h].join(";") + "}", ++u) 823 } 824 function v(e) { 825 return e = t.normaliseHex(e), "000000" == e ? "#222" : t.getLuminance(e) 826 } 827 function f(i) { 828 if (t.isPlainObject(i)) { 829 var n = t.hash(JSON.stringify(i)), 830 o = e.customStyles[n]; 831 if (o && !--o.references) { 832 var s = o.element.ownerNode; 833 s && s.parentNode && s.parentNode.removeChild(s), e.customStyles[n] = null 834 } 835 } 836 } 837 function m(e, t) { 838 for (var i = 0, n = e.length; i < n; ++i) { 839 var o = e[i]; 840 if (o instanceof RegExp && o.test(t) || "string" == typeof o && o.length && o === t) return !0 841 } 842 return !1 843 } 844 function b() { 845 var t = this.setStatus.bind(this), 846 i = this.options.dismissOnTimeout; 847 "number" == typeof i && i >
847= 0 && (this.dismissTimeout = window.setTimeout(function() { 848 t(e.status.dismiss) 849 }, Math.floor(i))); 850 var n = this.options.dismissOnScroll; 851 if ("number" == typeof n && n >= 0) { 852 var o = function(i) { 853 window.pageYOffset > Math.floor(n) && (t(e.status.dismiss), window.removeEventListener("scroll", o), this.onWindowScroll = null) 854 }; 855 this.onWindowScroll = o, window.addEventListener("scroll", o) 856 } 857 } 858 function y() { 859 if ("info" != this.options.type && (this.options.revokable = !0), t.isMobile() && (this.options.animateRevokable = !1), this.options.revokable) { 860 var e = a.call(this); 861 this.options.animateRevokable && e.push("cc-animate"), this.customStyleSelector && e.push(this.customStyleSelector); 862 var i = this.options.revokeBtn.replace("{{classes}}", e.join(" ")); 863 this.revokeBtn = u.call(this, i); 864 var n = this.revokeBtn; 865 if (this.options.animateRevokable) { 866 var o = t.throttle(function(e) { 867 var i = !1, 868 o = 20, 869 s = window.innerHeight - 20; 870 t.hasClass(n, "cc-top") && e.clientY < o && (i = !0), t.hasClass(n, "cc-bottom") && e.clientY > s && (i = !0), i ? t.hasClass(n, "cc-active") || t.addClass(n, "cc-active") : t.hasClass(n, "cc-active") && t.removeClass(n, "cc-active") 871 }, 200); 872 this.onMouseMove = o, window.addEventListener("mousemove", o) 873 } 874 } 875 } 876 var g = { 877 enabled: !0, 878 container: null, 879 cookie: { 880 name: "cookieconsent_status", 881 path: "/", 882 domain: "", 883 expiryDays: 365 884 }, 885 onPopupOpen: function() {}, 886 onPopupClose: function() {}, 887 onInitialise: function(e) {}, 888 onStatusChange: function(e, t) {}, 889 onRevokeChoice: function() {}, 890 content: { 891 header: "Cookies used on the website!", 892 message: "This website uses cookies to ensure you get the best experience on our website.", 893 dismiss: "Got it!", 894 allow: "Allow cookies", 895 deny: "Decline", 896 link: "Learn more",
897 href: "http://cookiesandyou.com", 898 close: "❌" 899 }, 900 elements: { 901 header: '<span class="cc-header">{{header}}</span> ', 902 message: '<span id="cookieconsent:desc" class="cc-message">{{message}}</span>', 903 messagelink: '<span id="cookieconsent:desc" class="cc-message">{{message}} <a aria-label="learn more about cookies" role=button tabindex="0" class="cc-link" href="{{href}}" target="_blank">{{link}}</a></span>', 904 dismiss: '<a aria-label="dismiss cookie message" role=button tabindex="0" class="cc-btn cc-dismiss">{{dismiss}}</a>', 905 allow: '<a aria-label="allow cookies" role=button tabindex="0" class="cc-btn cc-allow">{{allow}}</a>', 906 deny: '<a aria-label="deny cookies" role=button tabindex="0" class="cc-btn cc-deny">{{deny}}</a>', 907 link: '<a aria-label="learn more about cookies" role=button tabindex="0" class="cc-link" href="{{href}}" target="_blank">{{link}}</a>', 908 close: '<span aria-label="dismiss cookie message" role=button tabindex="0" class="cc-close">{{close}}</span>' 909 }, 910 window: '<div role="dialog" aria-live="polite" aria-label="cookieconsent" aria-describedby="cookieconsent:desc" class="cc-window {{classes}}"><!--googleoff: all-->{{children}}<!--googleon: all--></div>', 911 revokeBtn: '<div class="cc-revoke {{classes}}">Cookie Policy</div>', 912 compliance: { 913 info: '<div class="cc-compliance">{{dismiss}}</div>', 914 "opt-in": '<div class="cc-compliance cc-highlight">{{dismiss}}{{allow}}</div>', 915 "opt-out": '<div class="cc-compliance cc-highlight">{{deny}}{{dismiss}}</div>' 916 }, 917 type: "info", 918 layouts: { 919 basic: "{{messagelink}}{{compliance}}", 920 "basic-close": "{{messagelink}}{{compliance}}{{close}}", 921 "basic-header": "{{header}}{{message}}{{link}}{{compliance}}" 922 }, 923 layout: "basic", 924 position: "bottom", 925 theme: "block", 926 "static": !1, 927 palette: null, 928 revokable: !1, 929 animateRevokable: !0, 930 showLink: !0, 931 dismissOnScroll: !1, 932 dismissOnTimeout: !1, 933 autoOpen: !0, 934 autoAttach: !0, 935 whitelistPage: [], 936 blacklistPage: [], 937 overrideHTML: null 938 }; 939 return n.prototype.initialise = function(e) { 940 this.options && this.destroy(), t.deepExtend(this.options = {}, g), t.isPlainObject(e) && t.deepExtend(this.options, e), r.call(this) && (this.options.enabled = !1), m(this.options.blacklistPage, location.pathname) && (this.options.enabled = !1), m(this.options.whitelistPage, location.pathname) && (this.options.enabled = !0); 941 var i = this.options.window.replace("{{classes}}
941", c.call(this).join(" ")).replace("{{children}}", l.call(this)), 942 n = this.options.overrideHTML; 943 if ("string" == typeof n && n.length && (i = n), this.options["static"]) { 944 var o = u.call(this, '<div class="cc-grower">' + i + "</div>"); 945 o.style.display = "", this.element = o.firstChild, this.element.style.display = "none", t.addClass(this.element, "cc-invisible") 946 } else this.element = u.call(this, i); 947 b.call(this), y.call(this), this.options.autoOpen && this.autoOpen() 948 }, n.prototype.destroy = function() { 949 this.onButtonClick && this.element && (this.element.removeEventListener("click", this.onButtonClick), this.onButtonClick = null), this.dismissTimeout && (clearTimeout(this.dismissTimeout), this.dismissTimeout = null), this.onWindowScroll && (window.removeEventListener("scroll", this.onWindowScroll), this.onWindowScroll = null), this.onMouseMove && (window.removeEventListener("mousemove", this.onMouseMove), this.onMouseMove = null), this.element && this.element.parentNode && this.element.parentNode.removeChild(this.element), this.element = null, this.revokeBtn && this.revokeBtn.parentNode && this.revokeBtn.parentNode.removeChild(this.revokeBtn), this.revokeBtn = null, f(this.options.palette), this.options = null 950 }, n.prototype.open = function(t) { 951 if (this.element) return this.isOpen() || (e.hasTransition ? this.fadeIn() : this.element.style.display = "", this.options.revokable && this.toggleRevokeButton(), this.options.onPopupOpen.call(this)), this 952 }, n.prototype.close = function(t) { 953 if (this.element) return this.isOpen() && (e.hasTransition ? this.fadeOut() : this.element.style.display = "none", t && this.options.revokable && this.toggleRevokeButton(!0), this.options.onPopupClose.call(this)), this 954 }, n.prototype.fadeIn = function() { 955 var i = this.element; 956 if (e.hasTransition && i && (this.afterTransition && s.call(this, i), t.hasClass(i, "cc-invisible"))) { 957 if (i.style.display = "", this.options["static"]) { 958 var n = this.element.clientHeight; 959 this.element.parentNode.style.maxHeight = n + "px" 960 } 961 var r = 20; 962 this.openingTimeout = setTimeout(o.bind(this, i), r) 963 } 964 }, n.prototype.fadeOut = function() { 965 var i = this.element; 966 e.hasTransition && i && (this.openingTimeout && (clearTimeout(this.openingTimeout), o.bind(this, i)), t.hasClass(i, "cc-invisible") || (this.options["static"] && (this.element.parentNode.style.maxHeight = ""), this.afterTransition = s.bind(this, i), i.addEventListener(e.transitionEnd, this.afterTransition), t.addClass(i, "cc-invisible"))) 967 }, n.prototype.isOpen = function() { 968 return this.element && "" == this.element.style.display && (!e.hasTransition || !t.hasClass(this.element, "cc-invisible")) 969 }, n.prototype.toggleRevokeButton = function(e) { 970 this.revokeBtn && (this.revokeBtn.style.display = e ? "" : "none") 971 }, n.prototype.revokeChoice = function(e) { 972 this.options.enabled = !0, this.clearStatus(), this.options.onRevokeChoice.call(this), e || this.autoOpen() 973 }, n.prototype.hasAnswered = function(t) { 974 return Object.keys(e.status).indexOf(this.getStatus()) >= 0 975 }, n.prototype.hasConsented = function(t) { 976 var i = this.getStatus(); 977 return i == e.status.allow || i == e.status.dismiss 978 }, n.prototype.autoOpen = function(e) { 979 !this.hasAnswered() && this.options.enabled && this.open() 980 }, n.prototype.setStatus = function(i) { 981 var n = this.options.cookie, 982 o = t.getCookie(n.name), 983 s = Object.keys(e.status).indexOf(o) >= 0; 984 Object.keys(e.status).indexOf(i) >= 0 ? (t.setCookie(n.name, i, n.expiryDays, n.domain, n.path), this.options.onStatusChange.call(this, i, s)) : this.clearStatus() 985 }, n.prototype.getStatus = function() { 986 return t.getCookie(this.options.cookie.name) 987 }, n.prototype.clearStatus = function() { 988 var e = this.options.cookie; 989 t.setCookie(e.name, "", -1, e.domain, e.path) 990 }, n 991 }(), e.Location = function() { 992 function e(e) { 993 t.deepExtend(this.options = {}, s), t.isPlainObject(e) && t.deepExtend(this.options, e), this.currentServiceIndex = -1 994 } 995 function i(e, t, i) { 996 var n, o = document.createElement("script"); 997 o.type = "text/" + (e.type || "javascript"), o.src = e.src || e, o.async = !1, o.onreadystatechange = o.onload = function() { 998 var e = o.readyState; 999 clearTimeout(n), t.done || e && !/loaded|complete/.test(e) || (t.done = !0, t(), o.onreadystatechange = o.onload = null) 1000 }, document.body.appendChild(o), n = setTimeout(function() { 1001 t.done = !0, t(), o.onreadystatechange = o.onload = null 1002 }, i) 1003 } 1004 function n(e, t, i, n, o) { 1005 var s = new(window.XMLHttpRequest || window.ActiveXObject)("MSXML2.XMLHTTP.3.0"); 1006 if (s.open(n ? "POST" : "GET", e, 1), s.setRequestHeader("X-Requested-With", "XMLHttpRequest"), s.setRequestHeader("Content-type", "application/x-www-form-urlencoded"), Array.isArray(o)) 1007 for (var r = 0, a = o.length; r < a; ++r) { 1008 var c = o[r].split(":", 2); 1009 s.setRequestHeader(c[0].replace(/^\s+|\s+$/g, ""), c[1].replace(/^\s+|\s+$/g, "")) 1010 } 1011 "function" == typeof t && (s.onreadystatechange = function() { 1012 s.readyState > 3 && t(s) 1013 }), s.send(n) 1014 } 1015 function o(e) { 1016 return new Error("Error [" + (e.code || "UNKNOWN") + "]: " + e.error) 1017 } 1018 var s = { 1019 timeout: 5e3, 1020 services: ["freegeoip", "ipinfo", "maxmind"], 1021 serviceDefinitions: { 1022 freegeoip: function() { 1023 return { 1024 url: "//freegeoip.net/json/?callback={callback}", 1025 isScript: !0, 1026 callback: function(e, t) { 1027 try { 1028 var i = JSON.parse(t); 1029 return i.error ? o(i) : { 1030 code: i.country_code 1031 } 1032 } catch (n) { 1033 return o({ 1034 error: "Invalid response
1034(" + n + ")" 1035 }) 1036 } 1037 } 1038 } 1039 }, 1040 ipinfo: function() { 1041 return { 1042 url: "//ipinfo.io", 1043 headers: ["Accept: application/json"], 1044 callback: function(e, t) { 1045 try { 1046 var i = JSON.parse(t); 1047 return i.error ? o(i) : { 1048 code: i.country 1049 } 1050 } catch (n) { 1051 return o({ 1052 error: "Invalid response (" + n + ")" 1053 }) 1054 } 1055 } 1056 } 1057 }, 1058 ipinfodb: function(e) { 1059 return { 1060 url: "//api.ipinfodb.com/v3/ip-country/?key={api_key}&format=json&callback={callback}", 1061 isScript: !0, 1062 callback: function(e, t) { 1063 try { 1064 var i = JSON.parse(t); 1065 return "ERROR" == i.statusCode ? o({ 1066 error: i.statusMessage 1067 }) : { 1068 code: i.countryCode 1069 } 1070 } catch (n) { 1071 return o({ 1072 error: "Invalid response (" + n + ")" 1073 }) 1074 } 1075 } 1076 } 1077 }, 1078 maxmind: function() { 1079 return { 1080 url: "//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js", 1081 isScript: !0, 1082 callback: function(e) { 1083 return window.geoip2 ? void geoip2.country(function(t) { 1084 try { 1085 e({ 1086 code: t.country.iso_code 1087 }) 1088 } catch (i) { 1089 e(o(i)) 1090 } 1091 }, function(t) { 1092 e(o(t)) 1093 }) : void e(new Error("Unexpected response format. The downloaded script should have exported `geoip2` to the global scope")) 1094 } 1095 } 1096 } 1097 } 1098 }; 1099 return e.prototype.getNextService = function() { 1100 var e; 1101 do e = this.getServiceByIdx(++this.currentServiceIndex); while (this.currentServiceIndex < this.options.services.length && !e); 1102 return e 1103 }, e.prototype.getServiceByIdx = function(e) { 1104 var i = this.options.services[e]; 1105 if ("function" == typeof i) { 1106 var n = i(); 1107 return n.name && t.deepExtend(n, this.options.serviceDefinitions[n.name](n)), n 1108 } 1109 return "string" == typeof i ? this.options.serviceDefinitions[i]() : t.isPlainObject(i) ? this.options.serviceDefinitions[i.name](i) : null 1110 }, e.prototype.locate = function(e, t) { 1111 var i = this.getNextService(); 1112 return i ? (this.callbackComplete = e, this.callbackError = t, void this.runService(i, this.runNextServiceOnError.bind(this))) : void t(new Error("No services to run")) 1113 }, e.prototype.setupUrl = function(e) { 1114 var t = this.getCurrentServiceOpts(); 1115 return e.url.replace(/\{(.*?)\}/g, function(i, n) { 1116 if ("callback" === n) { 1117 var o = "callback" + Date.now(); 1118 return window[o] = function(t) { 1119 e.__JSONP_DATA = JSON.stringify(t) 1120 }, o 1121 } 1122 if (n in t.interpolateUrl) return t.interpolateUrl[n] 1123 }) 1124 }, e.prototype.runService = function(e, t) { 1125 var o = this; 1126 if (e && e.url && e.callback) { 1127 var s = e.isScript ? i : n, 1128 r = this.setupUrl(e); 1129 s(r, function(i) { 1130 var n = i ? i.responseText : ""; 1131 e.__JSONP_DATA && (n = e.__JSONP_DATA, delete e.__JSONP_DATA), o.runServiceCallback.call(o, t, e, n) 1132 }, this.options.timeout, e.data, e.headers) 1133 } 1134 }, e.prototype.runServiceCallback = function(e, t, i) { 1135 var n = this, 1136 o = function(t) { 1137 s || n.onServiceResult.call(n, e, t) 1138 }, 1139 s = t.callback(o, i); 1140 s && this.onServiceResult.call(this, e, s) 1141 }, e.prototype.onServiceResult = function(e, t) { 1142 t instanceof Error || t && t.error ? e.call(this, t, null) : e.call(this, null, t) 1143 }, e.prototype.runNextServiceOnError = function(e, t) { 1144 if (e) { 1145 this.logError(e); 1146 var i = this.getNextService(); 1147 i ? this.runService(i, this.runNextServiceOnError.bind(this)) : this.completeService.call(this, this.callbackError, new Error("All services failed")) 1148 } else this.completeService.call(this, this.callbackComplete, t) 1149 }, e.prototype.getCurrentServiceOpts = function() { 1150 var e = this.options.services[this.currentServiceIndex]; 1151 return "string" == typeof e ? { 1152 name: e 1153 } : "function" == typeof e ? e() : t.isPlainObject(e) ? e : {} 1154 }, e.prototype.completeService = function(e, t) { 1155 this.currentServiceIndex = -1, e && e(t) 1156 }, e.prototype.logError = function(e) { 1157 var t = this.currentServiceIndex,
1158 i = this.getServiceByIdx(t); 1159 console.error("The service[" + t + "] (" + i.url + ") responded with the following error", e) 1160 }, e 1161 }(), e.Law = function() { 1162 function e(e) { 1163 this.initialise.apply(this, arguments) 1164 } 1165 var i = { 1166 regionalLaw: !0, 1167 hasLaw: ["AT", "BE", "BG", "HR", "CZ", "CY", "DK", "EE", "FI", "FR", "DE", "EL", "HU", "IE", "IT", "LV", "LT", "LU", "MT", "NL", "PL", "PT", "SK", "SI", "ES", "SE", "GB", "UK"], 1168 revokable: ["HR", "CY", "DK", "EE", "FR", "DE", "LV", "LT", "NL", "PT", "ES"], 1169 explicitAction: ["HR", "IT", "ES"] 1170 }; 1171 return e.prototype.initialise = function(e) { 1172 t.deepExtend(this.options = {}, i), t.isPlainObject(e) && t.deepExtend(this.options, e) 1173 }, e.prototype.get = function(e) { 1174 var t = this.options; 1175 return { 1176 hasLaw: t.hasLaw.indexOf(e) >= 0, 1177 revokable: t.revokable.indexOf(e) >= 0, 1178 explicitAction: t.explicitAction.indexOf(e) >= 0 1179 } 1180 }, e.prototype.applyLaw = function(e, t) { 1181 var i = this.get(t); 1182 return i.hasLaw || (e.enabled = !1), this.options.regionalLaw && (i.revokable && (e.revokable = !0), i.explicitAction && (e.dismissOnScroll = !1, e.dismissOnTimeout = !1)), e 1183 }, e 1184 }(), e.initialise = function(t, i, n) { 1185 var o = new e.Law(t.law); 1186 i || (i = function() {}), n || (n = function() {}), e.getCountryCode(t, function(n) { 1187 delete t.law, delete t.location, n.code && (t = o.applyLaw(t, n.code)), i(new e.Popup(t)) 1188 }, function(i) { 1189 delete t.law, delete t.location, n(i, new e.Popup(t)) 1190 }) 1191 }, e.getCountryCode = function(t, i, n) { 1192 if (t.law && t.law.countryCode) return void i({ 1193 code: t.law.countryCode 1194 }); 1195 if (t.location) { 1196 var o = new e.Location(t.location); 1197 return void o.locate(function(e) { 1198 i(e || {}) 1199 }, n) 1200 } 1201 i({}) 1202 }, e.utils = t, e.hasInitialised = !0, window.cookieconsent = e 1203 } 1204 }(window.cookieconsent || {}); 1205</script>
1205 1206 1207</body> 1208</html> 1209
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.