1<!doctype html> 2<html lang="fr"> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> 7 <meta name="author" content="Piscine Boulogne Billancourt" /> 8 <meta name="description" content="" /> 9 <link href="/css/slick.css" media="screen" rel="stylesheet" type="text/css" /> 10 <link href="/css/toastr.min.css" media="screen" rel="stylesheet" type="text/css" /> 11 <link href="/css/styles.css" media="screen" rel="stylesheet" type="text/css" /> 12 <link href="/css/styles-complementary.css" media="screen" rel="stylesheet" type="text/css" /> 13 <link href="/css/new_mi.css" media="screen" rel="stylesheet" type="text/css" /> 14 <link href="/css/new_activites.css" media="screen" rel="stylesheet" type="text/css" /> 15 <link href="/css/new_tarifs.css" media="screen" rel="stylesheet" type="text/css" /> 16 <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/[email protected]/slick/slick.css"> 17 <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/[email protected]/slick/slick-theme.css"> 18 <link rel='stylesheet' href='https://cdn-uicons.flaticon.com/2.6.0/uicons-brands/css/uicons-brands.css'> 19 <link rel='stylesheet' href='https://cdn-uicons.flaticon.com/2.6.0/uicons-regular-rounded/css/uicons-regular-rounded.css'> 20 <link rel='stylesheet' href='https://cdn-uicons.flaticon.com/2.6.0/uicons-regular-straight/css/uicons-regular-straight.css'> 21 <link rel='stylesheet' href='https://cdn-uicons.flaticon.com/3.0.0/uicons-solid-straight/css/uicons-solid-straight.css'> 22 <link rel="icon" href="https://moncentreaquatique.com/logos/1205421031.svg" /> 23 <link href='/css/espace-perso.css' media='screen' rel='stylesheet' type='text/css' /> 24 25 <!-- GTM dataLayer init --> 26
26<script>window.dataLayer = window.dataLayer || [];</script>
26 27 28 <!-- GTM Container (code centre) --> 29 <!-- Google Tag Manager -->
30<script>
vendor: 331 bytes, lines 30-34
30(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 31new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 32j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 33'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 34})(window,document,'script','dataLayer','
34GTM-TDVR5ZS4
vendor: 3 bytes, line 34
34');
34</script>
34 35<!-- End Google Tag Manager --> 36<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 36-37
36 37<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
37GTM-TDVR5ZS4
vendor: 85 bytes, lines 37-38
37" 38height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
39<!-- End Google Tag Manager (noscript) --> 40 <meta property='og:locale' content='fr_FR' /> 41 <meta property='og:type' content='article' /> 42 <meta property='og:title' content="" /> 43 <meta property='og:description' content="" /> 44 <meta property='og:url' content='http://piscineboulognebillancourt.com/espace-perso/connexion' /> 45 <meta property='og:site_name' content='Piscine Boulogne Billancourt' /> 46 <meta property='og:image' content='https://moncentreaquatique.com/logos/1205421031.svg' /> 47 <meta property='og:image:secure_url' content='https://moncentreaquatique.com/logos/1205421031.svg' /> 48 <meta name='twitter:card' content='summary_large_image' /> 49 <meta name='twitter:description' content='' /> 50 <meta name='twitter:title' content='' /> 51 <meta name='twitter:image' content='https://moncentreaquatique.com/logos/1205421031.svg' /> 52 53 <style> 54 :root { 55 --RECREA_COLOR_PRIMARY: #083b4b; 56 --RECREA_COLOR_SECONDARY: #6dc1ee; 57 } 58 </style> 59 60
60<script src="/js/filtre_type_activite.js" defer></script>
60 61 62 </head> 63 <body> 64 <div id='container'> 65 <div id='content'> 66 67 <style type="text/css"> 68 body .contentsquare-content.color-true .plus{ 69 background: linear-gradient(0deg, rgba(8,59,75,1) 0%, rgba(8,59,75,0.75) 75%, transparent 100%); 70 } 71 body .contentsquare-content.color2-true .plus{ 72 background: linear-gradient(0deg, rgba(109,193,238,1) 0%, rgba(109,193,238,0.75) 75%, transparent 100%); 73 } 74 body #menu .menu-content nav a.btn-custom-color span:hover { 75 /* color:#ff1a1a !important; */ 76 background: #ffffff !important; 77 } 78</style> 79<div id="container-menu"> 80 <section id="overmenu"> 81 <div class="content"> 82 <div class="marquee_container"> 83 <a href='/horaires.html' class="marquee_link"> 84 <p class='marquee_content'><strong>Aquatique</strong> : <span style='color:#ffffff;'>07:00 - 08:45 et 11:30 - 21:00</span> | <strong>Fitness</strong> : <span style='color:#ffffff;'>07:00 - 21:00</span> | <strong>Bien-être</strong> : <span style='color:#ffffff;'>10:00 - 21:00</span> | <strong>Snack</strong> : <span style='color:#ffffff;'>11:30 - 19:00</span></p> 85 </a> 86 </div> 87 </div> 88 89 <div class="connexion_inscription"> 90 <a class="se_connecter" href="/espace-perso/connexion">Se connecter</a> 91 <a class="s_inscrire" href="/espace-perso/devenir-membre">S'inscrire</a> 92 </div> 93 </section> 94 <section id="menu"> 95 <div class="menu-content"> 96 <a href="/" id="logo-site"> 97 <img src="https://moncentreaquatique.com/logos/1205421031.svg" alt="Piscine Boulogne Billancourt" title="Piscine Boulogne Billancourt" /> 98 </a> 99 <div class="left-content"> 100 <a href="/cheques-cadeaux" class="button btn-cheque"><span>Plaisir d'offrir</span></a></li> 101 <div id="hamburger"> 102 <span></span> 103 <span></span> 104 <span></span> 105 <span></span> 106 </div> 107 </div> 108 <nav id="nav-menu"> 109 <ul id="list-menu"> 110 111 <li class="menu-dropdown"><div class='dropdown__header nav-title'><a href='/espaces.html' class='disabled-link_menu'>Le centre</a><i class="fi fi-ss-angle-small-down"></i></div><div class="dropdown"><ul class='dropdown__content'><li><a href="/espace-568-aquatique.html">aquatique</a></li><li><a href="/espace-570-bien-etre.html">bien-être</a></li><li><a href="/espace-617-exterieur.html">extérieur</a></li><li><a href="/espace-569-forme.html">forme</a></li></ul></div></li><li class="menu-dropdown"><div class='dropdown__header nav-title'><a href='/offres.html' class='disabled-link_menu'>Nos offres</a><i class="fi fi-ss-angle-small-down"></i></div><div class="dropdown"><ul class='dropdown__content'><li><a href="/offre-1213614-offre-stage-de-natation-aquatique.html">Offre - Stage de natation aquatique</a></li><li><a href="/offre-1213454-offre-pro-et-cse.html">OFFRE - PRO et CSE</a></li><li><a href="/offre-630-offre-anniversaire.html">OFFRE - ANNIVERSAIRE</a></li></ul></div></li><li class='nav-title'><a href='/activites.html'>Activités</a></li><li class='nav-title'><a href='/actus.html'>Actus</a></li><li class="menu-dropdown"><div class='dropdown__header nav-title'><a href='/infos-pratiques.html'>Infos Pratiques</a><i class="fi fi-ss-angle-small-down"></i></div><div class="dropdown"><ul class='dropdown__content'><li><a href='/horaires.html'>Horaires</a></li><li><a href='/tarifs.html'>Abonnements & Tarifs</a></li><li><a href='/partenaires.html'>Nos Partenaires</a></li> <li><a href="/module-inscriptions/reserver/?planning">Plannings</a></li> 112 <li><a href='/contact.html'>Accès & Contact</a></li><li><a href="/infos-pratiques.html">Règles</a></li> 113 </ul></div></li><li class='nav-title'><a href="https://www.billetweb.fr/pack-decouverte4" class="btn btn-orange btn-custom-color" target="_blank"><span style="background: #ff1a1a; border: 2px solid #ff1a1a" onMouseOver="this.style.color='#ff1a1a'" onMouseOut="this.style.color='#ffffff'">Billetterie</span></a></li><li id='btn_resa' class='nav-title'><a href="/module-inscriptions/" target="_self" class="btn-orange"><span>Réserver</span></a></li><li id='btn_cheque' class='nav-title'><a href="/cheques-cadeaux" class="btn-orange"><span>Chèques Cadeaux</span></a></li><li class='nav-title icons-rs'><a href="https://fr-fr.facebook.com/piscineboulognebillancourt"><i class='fi fi-brands-facebook'></i></a><a href="https://www.instagram.com/piscineboulogne92100/"><i class='fi fi-brands-instagram'></i></a></li> 114 <!-- <li><a href="cheques-cadeaux">Chèques Cadeaux</a></li> --> 115 <!-- 116 <li><a href="club.html">
116Club</a></li> 117 <li><a href="pro.html">Pro</a></li> 118 --> 119 <!-- <li><a href="" class="btn-orange"><span>Acheter</span></a></li> --> 120 </ul> 121 </nav> 122 </div> 123 </section> 124</div> 125 126<section id="tabbar"> 127 <!-- NEW TABBAR --> 128 <nav id="mobile_tabbar"> 129 <ul class="tabs"> 130 <li class="tab tab_01"> 131 <a href="/horaires.html"> 132 <svg class="tab_icons"><use href="/css/images/icons/icons.svg#icon_horaire"></svg> 133 <p>Horaires</p> 134 </a> 135 </li> 136 <li class="tab tab_02"> 137 <a href="/tarifs.html"> 138 <svg class="tab_icons"><use href="/css/images/icons/icons.svg#icon_tarif"></svg> 139 <p>Tarifs</p> 140 </a> 141 </li> 142 <li class="tab tab_03"> 143 <a href="/module-inscriptions/"> 144 <div class="tab_side tab_side_left"></div> 145 <div class="tab_main"> 146 <svg id="a" xmlns="http://www.w3.org/2000/svg" width="64" height="48" viewBox="0 0 64 48"> 147 <path d="M64,0v48H0V0h.3c1.9,0,3.4,1.3,3.9,3v1h0c2,13.6,13.6,24,27.7,24s25.8-10.4,27.7-24h0v-1c.4-1.7,2-3,3.9-3h.5Z" /> 148 </svg> 149 <span class="button_resa"> 150 <svg class="tab_icons"><use href="/css/images/icons/icons.svg#icon_plus"></svg> 151 </span> 152 <p>Réserver</p> 153 </div> 154 <div class="tab_side tab_side_right"></div> 155 </a> 156 </li> 157 <li class="tab tab_04"> 158 <a href="/activites.html"> 159 <svg class="tab_icons"><use href="/css/images/icons/icons.svg#icon_sparkles"></svg> 160 <p>Activités</p> 161 </a> 162 </li> 163 <li class="tab tab_05 active"> 164 <a href="/espace-perso"> 165 <svg class="tab_icons active"><use href="/css/images/icons/icons.svg#icon_user"></svg> 166 <p>Compte</p> 167 </a> 168 </li> 169 </ul> 170 </nav> 171</section> 172
173<script type="text/javascript" async> 174 const dropdownItems = document.querySelectorAll('.menu-dropdown'); 175 176 if (dropdownItems) { 177 dropdownItems.forEach((dropdown) => { 178 dropdown.addEventListener('click', (e) => toggleDropdown(e)); 179 }); 180 } 181 182 const toggleDropdown = (e) => { 183 let target = e.currentTarget; 184 185 if (!target.classList.contains('open')) { 186 dropdownItems.forEach((item) => { 187 item.classList.remove('open'); 188 }); 189 target.classList.add('open'); 190 } else { 191 target.classList.remove('open'); 192 } 193 }; 194 195 let marqueeContainer = document.querySelector(".marquee_container"); 196 let marqueeContent = document.querySelector(".marquee_content"); 197 198 let timeToFill; 199 let contentText; 200 201 if(marqueeContent){ 202 timeToFill = Math.floor(window.innerWidth / marqueeContent.offsetWidth); 203 contentText = marqueeContent.innerHTML; 204 } 205 206 for (let i = 0; i < timeToFill; i++) { 207 marqueeContent.innerHTML += contentText; 208 } 209 marqueeContainer.innerHTML += marqueeContainer.innerHTML; 210 211 Array.from(marqueeContainer.children).forEach((child) => { 212 let duration = child.getBoundingClientRect().width / 100; 213 child.style.animationDuration = `${duration}s`; 214 }); 215 216 // document.querySelector(".scroll2").style.animationDelay = `${animDuration / 2}s`; 217 // foreach (scroll as scroll) { 218 // scroll.style.animationDuration = `${scroll.getBoundingClientRect().width / 100}s`; 219 // } 220 221</script>
221<main id='inscription_container'> 222<section id='inscription' class='connexion_espace_perso'> 223<div id='div_visuel'> 224<a class='back_home' href="/"><svg class='icon_chevron' ><use href='/css/images/icons/icons.svg#icon_chevron'/></svg>Retour au site</a> 225<div> 226<h3>Vous n'avez pas encore de compte ?</h3> 227<a class='button' href='/espace-perso/devenir-membre'>Inscrivez-vous</a> 228</div> 229</div> 230<div id='div_formulaire'> 231<a id='logo-site' href='/'> <img src='https://moncentreaquatique.com/logos/1205421031.svg' alt='Piscine Boulogne Billancourt' title='Piscine Boulogne Billancourt' /></a> 232<h3>Vous avez déjà un compte ? <br> Connectez-vous !</h3> 233<form id='formConnexion' class='connexion_form' method='post' action='/espace-perso/connexion/'> 234<input type='hidden' name='from_module_resa' value=''> 235<input type='hidden' name='periode' value='0'> 236<input type='hidden' name='creneau' value='0'> 237<div class='connexion_input connexion_input_mail'> 238<label for='email' class='label'>Adresse mail</label> 239<input required type='email' id='email' name='email' placeholder="Saisissez votre adresse mail " autocomplete='email' oninput='enableSubmit(this)' > 240</div> 241<div class='connexion_input connexion_input_mdp'> 242<label for='password' class='label password'>Mot de passe 243<div class='mdp_oublie' onclick="open_popup_pwd_lost();">Mot de passe oublié ?</div> </label> 244<div class='password_input'> 245<input required type='password' id='password' name='password' placeholder="Rentrez votre mot de passe" autocomplete='current-password' onfocus='capslock_alert(event)' onfocusout='document.getElementById('capslock_alert').style.visibility = 'hidden'' oninput='enableSubmit(this)' > 246<div class='preview_icon' onclick='togglePassword()'> 247<svg class='icon_oeil' ><use href='/css/images/icons/icons.svg#icon_oeil'></svg> 248<svg class='icon_oeil_barre' style='display:none;'><use href='/css/images/icons/icons.svg#icon_oeil_barre'></svg> 249</div> 250</div> 251<div id='capslock_alert'>La touche Ver Maj est active.</div> 252</div> 253<div class='connexion_input connexion_remember_me'> 254<label class='ep-toggle' for='remember_me'> 255<input type='checkbox' id='remember_me' name='remember_me' value='1'> 256<span class='ep-toggle__switch'></span> 257<span class='ep-toggle__label'>Se souvenir de moi (30j)</span> 258</label> 259</div> 260</form> 261<div class='valider_resa'> 262<input disabled id='btn_submit_connexion' class='btn_submit' form='formConnexion' type='submit' onclick='DisableMultiClic(this.id)' value='Connexion' > 263<div class='div_inscription_popup'> 264Vous n'avez pas de compte ? <a href='/espace-perso/devenir-membre/'>Je m'inscris</a> 265</div> 266</div> 267</div> 268</section> 269</main>
270<script> 271 272 // Cache pour stocker les boutons submit associés aux formulaires 273 const formButtonCache = new Map(); 274 275 // Debounce timers pour chaque formulaire 276 const debounceTimers = new Map(); 277 278 function enableSubmit(input = null, skipDebounce = false) { 279 let form; 280 281 if (input instanceof HTMLElement) { 282 form = input.closest('form'); 283 } else { 284 // Si pas d'input fourni, gérer tous les formulaires 285 document.querySelectorAll('form').forEach(form => enableSubmit(form, true)); 286 return; 287 } 288 289 if (!form) return; // Sécurité supplémentaire 290 291 // Debouncing intelligent : uniquement pour les événements input, pas au chargement 292 if (!skipDebounce && input instanceof HTMLElement) { 293 const formId = form.id || form.getAttribute('name') || 'form_' + Array.from(document.querySelectorAll('form')).indexOf(form); 294 295 // Annuler le timer précédent pour ce formulaire 296 if (debounceTimers.has(formId)) { 297 clearTimeout(debounceTimers.get(formId)); 298 } 299 300 // Créer un nouveau timer 301 const timerId = setTimeout(() => { 302 enableSubmit(form, true); 303 debounceTimers.delete(formId); 304 }, 50); 305 306 debounceTimers.set(formId, timerId); 307 return; 308 } 309 310 const inputs = form.querySelectorAll('[required]'); 311 312 // Utiliser le cache pour le bouton ou le chercher et le mettre en cache 313 let btn = formButtonCache.get(form); 314 if (!btn) { 315 btn = document.querySelector(`input[type="submit"][form="${form.id}"], button[type="submit"][form="${form.id}"]`); 316 if (btn) { 317 formButtonCache.set(form, btn); 318 } 319 } 320 321 if (!btn) return; 322 323 let isValid = true; 324 const radioGroups = new Map(); 325 326 inputs.forEach(input => { 327 const val = input.value.trim(); 328 329 switch (input.type) { 330 case 'checkbox': 331 if (!input.checked) isValid = false; 332 break; 333 334 case 'radio': 335 if (!radioGroups.has(input.name)) radioGroups.set(input.name, false); 336 if (input.checked) radioGroups.set(input.name, true); 337 break; 338 339 case 'select-one': 340 if (!val || val === '') isValid = false; 341 break; 342 343 case 'number': 344 if (input.classList.contains('input_number') && !/^\d+$/.test(val)) isValid = false; 345 break; 346 347 default: 348 if (val === "") isValid = false; 349 break; 350 } 351 }); 352 353 for (let [group, checked] of radioGroups.entries()) { 354 if (!checked) { 355 isValid = false; 356 break; 357 } 358 } 359 360 btn.disabled = !isValid; 361 } 362 363 document.addEventListener('DOMContentLoaded', () => { 364 // Validation initiale complète pour détecter les valeurs par défaut (select, radio checked, etc.) 365 enableSubmit(); 366 367 // Scan pour l'auto-remplissage du navigateur 368 const scanAutoFill = setTimeout(() => { 369 enableSubmit(); 370 }, 600) 371 }); 372 373function capslock_alert(event) { 374 let input = document.getElementById("password"); 375 let text = document.getElementById("capslock_alert"); 376 377 input.addEventListener("keydown", function(event) { 378 if (event.getModifierState("CapsLock")) { 379 text.style.display = "block"; 380 } else { 381 text.style.display = "none"; 382 } 383 }); 384 385 input.addEventListener("focusout", function(event) { 386 text.style.display = "none"; 387 }); 388} 389 390function togglePassword() { 391 const passwordField = document.querySelector('#password'); 392 const eyeShow = document.querySelector('.icon_oeil'); 393 const eyeHide = document.querySelector('.icon_oeil_barre'); 394 395 if (passwordField.type === 'password') { 396 passwordField.type = 'text'; 397 eyeShow.style.display = "none"; 398 eyeHide.style.display = "block"; 399 } else { 400 passwordField.type = 'password'; 401 eyeHide.style.display = "none"; 402 eyeShow.style.display = "block"; 403 } 404} 405 406function getXmlHttpRequestObject() 407{ 408 if(window.XMLHttpRequest) 409 { 410 return new XMLHttpRequest(); 411 } 412 else if(window.ActiveXObject) 413 { 414 return new ActiveXObject("Microsoft.XMLHTTP"); 415 } 416 else 417 { 418 return null; 419 } 420} 421 422var ajax = getXmlHttpRequestObject(); 423 424function hide_popup() 425{ 426 setTimeout(function() 427 { 428 document.getElementById('mask_popup').style.display = "none"; 429 document.getElementById('popup').style.display = "none"; 430 document.getElementById('popup').innerHTML = ""; 431 }, 100); 432} 433 434function open_popup_pwd_lost() 435{ 436 document.getElementById('mask_popup').style.display = "flex"; 437 document.getElementById('popup').style.display = "flex"; 438 if( ajax.readyState==4 || ajax.readyState==0 ) 439 { 440 ajax.open( "GET", "/espace-perso/connexion/?action=popup_pwd_lost", true ); 441 ajax.onreadystatechange = function() 442 { 443 if( ajax.readyState==4 || ajax.readyState==0 ) 444 { 445 document.getElementById('popup').innerHTML = ajax.responseText; 446 } 447 } 448 ajax.send(null); 449 } 450} 451 452</script>
452 453<div id='mask_popup' onclick='hide_popup();'></div> 454<div id='popup'></div> 455</div> 456<footer> 457 <div id="footer"> 458 <div class="footer_padding"></div> 459 <div id="newsletter"> 460 <div class="badge"> 461 <i class="fi fi-rr-envelope"></i> 462 </div> 463 <div class="text_content"> 464 <h2>Inscrivez-vous à notre newsletter</h2> 465 <p>Recevez toutes nos informations directement dans votre boite mail et ne manquez plus aucune actualité !</p> 466 </div> 467 <form method="post" action="#footer" id="formNewsletter"> 468 <div class="newsletter_inputs"> 469 <input type="hidden" name="recaptcha_response" id="recaptchaResponse"> 470 <input type="text" name="inscription_brevo" value="" class="inputs" placeholder="Entrez votre email.."/> 471 <input type="submit" value="S'inscrire" class="btn_submit"/> 472 </div> 473 <p class="mention"><i class="fi fi-rs-shield-check"></i> En vous inscrivant, vous acceptez notre <a href="/protection-des-donnees-personnelles.html"> politique de confidentialité.</a></p> 474 </form> 475
475<script> 476 (function(){ 477 var fN = document.getElementById('formNewsletter'); 478 if(!fN) return; 479 // reCAPTCHA : token frais genere au moment de la soumission (evite les 480 // rejets 'expired'/'dupe' lies au token global pre-genere par footerinc). 481 fN.addEventListener('submit', function(e){ 482 if( fN.dataset.recaptchaFresh === '1' ){ fN.dataset.recaptchaFresh=''; return; } 483 if( typeof grecaptcha === 'undefined' ) return; 484 e.preventDefault(); 485 if( fN.dataset.recaptchaPending === '1' ) return; 486 fN.dataset.recaptchaPending='1'; 487 var submitter = e.submitter || null; 488 var go = function(){ 489 fN.dataset.recaptchaFresh='1'; 490 fN.dataset.recaptchaPending=''; 491 if(fN.requestSubmit) fN.requestSubmit(submitter||undefined); else fN.submit(); 492 }; 493 grecaptcha.ready(function(){ 494 grecaptcha.execute('6LfreFQrAAAAABkcHTeLIj2kQD3YbQMkSTG7xrtP',{action:'submit'}) 495 .then(function(token){ var i=fN.querySelector('#recaptchaResponse'); if(i) i.value=token; go(); }) 496 .catch(go); 497 }); 498 }); 499 })(); 500 </script>
500 501 </div> 502 <div class="content"> 503 <section> 504 <span class="h5"> 505 Piscine Boulogne Billancourt</span> 506 <p> 507 165 Rue du Vieux Pont de Sèvres,<br /> 508 92100 Boulogne-Billancourt </p> 509 </section> 510 <section> 511 <span class="h5">Pages</span> 512 <ul> 513 <li><a href='/espaces.html' class='disabled-link_menu'>Le centre</a></li><li><a href='/activites.html'>Activités</a></li><li><a href='/infos-pratiques.html'>Infos Pratiques</a></li><li><a href="/module-inscriptions/" target="_self">Réserver</a></li> 514 <!-- <li><a href="/cheques-cadeaux.html">Chèques Cadeaux</a></li> --> 515 516 <li><a href="/actus.html">Actus</a></li> 517 518 <li><a href="/partenaires.html">Nos Partenaires</a></li> 519 520 <!-- 521 <li><a href="/club.html">Club</a></li> 522 <li><a href="/pro.html">Pro</a></li> 523 --> 524 <li><a href="/cheques-cadeaux">Chèques Cadeaux</a></li> 525 <!-- <li><a href="">Acheter</a></li> --> 526 </ul> 527 </section> 528 <section> 529 <span class="h5">Informations</span> 530 <ul> 531 <!-- <li><a href="/faq.html">FAQ</a></li> --> 532 <li><a href="/horaires.html">Horaires</a></li> 533 <li><a href="/tarifs.html">Tarifs et abonnements</a></li> 534 <li><a href="/module-inscriptions/reserver/?planning">Plannings</a></li> 535 <li><a href="/contact.html">Contact</a></li> 536 </ul> 537 <span class="h5">Avis clients</span> 538 <div id="stars-container"> 539 <div class="stars"> 540 <div class="star full"></div> 541 <div class="star full"></div> 542 <div class="star full"></div> 543 <div class="star full"></div> 544 <div class="star "></div> 545 </div> 546 <span class="note">4/5 sur 2289 avis Google</span> 547 </div> 548 </section> 549 <section> 550 <span class="h5">Nous contacter</span> 551 <ul> 552 <li><a href="tel:01 46 08 09 09"><i class="icon-telephone"></i> 01 46 08 09 09</a></li> 553 <li><a href="mailto:[email protected]"><i class="icon-email"></i> <span id="centreemail">[email protected]</span></a></li> 554 <li>Retrouvez-nous sur<a href="https://fr-fr.facebook.com/piscineboulognebillancourt"><i class='fi fi-brands-facebook' style='margin-left:10px;margin-right:0;'></i></a><a href="https://www.instagram.com/piscineboulogne92100/"><i class='fi fi-brands-instagram' style='margin-left:10px;margin-right:0;'></i></a></li> </ul> 555 </section> 556 <section id="logos-footer"> 557 <figure> 558 <a href='https://recrea.fr' target="_blank"><img src="https://moncentreaquatique.com/logos/RECREA-blanc.png" alt="Logo Récréa" title="Logo Récréa" /></a> 559 </figure> 560 <figure class="collectivite"> 561 <img src="https://moncentreaquatique.com/logos/1442654927.png" /> 562 </figure> 563 </section> 564 </div> 565 </div> 566 <div id="subfooter"> 567 <div class="content"> 568 <div class="inline"> 569 570 <nav> 571 <div class="inline">©piscineboulognebillancourt.com 2025</div><span> | </span><a href="/mentions-legales.html">CGU & mentions légales</a><span> | </span><a href="/protection-des-donnees-personnelles.html">Protection des données personnelles</a><span> | </span><a href="javascript:openAxeptioCookies()">Gestion des cookies</a> 572 <p class="recaptcha-disclaimer"> 573 Ce site est protégé par reCAPTCHA et la <a href="https://policies.google.com/privacy" target="_blank">politique de confidentialité</a> et les <a href="https://policies.google.com/terms" target="_blank">conditions d'utilisation</a> de Google s'appliquent. 574 </p> 575 <span> | </span> 576 <a href="https://moncentreaquatique.com/pdf_cgv/603851617.pdf" target="_blank">Conditions générales de ventes</a> 577 </nav> 578 579 </div> 580 </div> 581 </div> 582</footer> 583
584<script type="application/ld+json"> 585{ 586 "@context": "https://schema.org", 587 "@type": "PublicSwimmingPool", 588 "name": "Piscine Boulogne-Billancourt", 589 "image": "https://moncentreaquatique.com/logos/1205421031.svg", 590 "@id": "", 591 "url": "http://piscineboulognebillancourt.com", 592 "telephone": "01 46 08 09 09", 593 "priceRange": "€", 594 "address": { 595 "@type": "PostalAddress", 596 "streetAddress": "165 Rue du Vieux Pont de Sèvres,", 597 "addressLocality": "Boulogne-Billancourt", 598 "postalCode": "92100", 599 "addressCountry": "FR" 600 }, 601 "aggregateRating": { 602 "@type": "AggregateRating", 603 "ratingValue": "4", 604 "bestRating": "5", 605 "worstRating": "1", 606 "ratingCount": "2289" 607 }, 608 "geo": { 609 "@type": "GeoCoordinates", 610 "latitude": "48.83051600", 611 "longitude": "2.24083000" 612 } 613} 614</script>
614 615
616<script> 617// pour modifier dynamiquement le texte SOLDE ACTUEL SEMAINE EN COURS 618function updateLabelFromSelect(sel) { 619 if (!sel) return; 620 621 // cible du label (défaut: "label-solde") 622 var labelId = sel.dataset.labelTarget || 'label-solde'; 623 var label = document.getElementById(labelId); 624 if (!label) return; 625 626 var opt = sel.options[sel.selectedIndex]; 627 if (!opt) return; 628 629 // offset prioritaire via data-week-offset 630 var offset = parseInt(opt.dataset.weekOffset || '0', 10); 631 632 // fallback si pas de data-week-offset (extrait "(semaine +N)" du texte) 633 if (isNaN(offset)) { 634 var m = (opt.textContent || '').match(/\(semaine\s*([+-]?\d+|en cours)\)/i); 635 if (m) { 636 offset = (m[1].toLowerCase() === 'en cours') ? 0 : parseInt(m[1], 10); 637 } else { 638 offset = 0; 639 } 640 } 641 642 var text = 'Solde actuel '; 643 if (offset === 0) { 644 text += 'semaine en cours :'; 645 } else if (offset > 0) { 646 text += 'de la semaine :'; 647 } else { 648 text += 'Semaine ' + offset + ' :'; 649 } 650 651 label.textContent = text; 652} 653 654function onPeriodeChange(sel, aboId) { 655 updateLabelFromSelect(sel); 656 var periodeId = parseInt(sel.value, 10) || 0; 657 658 var url = new URL(window.location.href); 659 url.searchParams.set('periode_id_' + String(aboId), String(periodeId)); 660 661 // secours: ajoute aussi ?scroll_to=abo-123 (utile si un redirect serveur intervient) 662 url.searchParams.set('scroll_to', 'abo-' + String(aboId)); 663 664 // ancre hash (visible si pas de redirect) 665 url.hash = '#abo-' + String(aboId); 666 667 window.location.assign(url.toString()); 668} 669</script>
669 670
671<script type="text/javascript" src="/js/min/jquery-3.5.1.min.js"></script>
vendor: 1 bytes, line 671
671
672<script type="text/javascript" src="/js/min/slick.min.js"></script>
vendor: 1 bytes, line 672
672
673<script type="text/javascript" src="/js/min/toastr.min.js"></script>
vendor: 1 bytes, line 673
673
674<script type="text/javascript" src="/js/min/scripts.min.js"></script>
vendor: 1 bytes, line 674
674
675<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
vendor: 1 bytes, line 675
675
676<script src="https://code.jquery.com/jquery-migrate-3.5.2.js"></script>
vendor: 1 bytes, line 676
676
677<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/[email protected]/slick/slick.min.js"></script>
vendor: 1 bytes, line 677
677
678<script type="text/javascript" src="/js/tarifs.js"></script>
vendor: 1 bytes, line 678
678
679<script type="text/javascript" src="/js/offres.js"></script>
679 680 681<!-- reCAPTCHA v3 -->
vendor: 61 bytes, lines 681-682
681 682<script src="https://www.google.com/recaptcha/api.js?render=
6826LfreFQrAAAAABkcHTeLIj2kQD3YbQMkSTG7xrtP
vendor: 12 bytes, line 682
682"></script>
683<script> 684 grecaptcha.ready(function() { 685 var recaptchaSiteKey = '6LfreFQrAAAAABkcHTeLIj2kQD3YbQMkSTG7xrtP'; 686 687 function fillRecaptchaTokens(token) { 688 var inputs = document.querySelectorAll('#recaptchaResponse, .recaptcha-token'); 689 inputs.forEach(function(input) { 690 input.value = token; 691 }); 692 } 693 694 // Générer un token initial 695 grecaptcha.execute(recaptchaSiteKey, {action: 'submit'}).then(fillRecaptchaTokens); 696 697 // Rafraîchir le token toutes les 90 secondes (le token expire au bout de ~2 min) 698 setInterval(function() { 699 grecaptcha.execute(recaptchaSiteKey, {action: 'submit'}).then(fillRecaptchaTokens); 700 }, 90000); 701 }); 702</script>
702 703 </div> 704 <!-- GTM dataLayer: page_view + user_data + session tracking events --> 705
705<script> 706 window.dataLayer = window.dataLayer || []; 707 dataLayer.push({ 708 event: "page_view", 709 page_type: 'other' }); 710 711 712 713 </script>
713 714 715 </body> 716</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.