PageSourceSearch

https://www.barnaclinic.com/media/js/ihavecookies_1750157634.js

js barnaclinic.com collected 2026-10-03 22:17:34 UTC 23,487 bytes, 527 lines download raw bytes

1/*!
2 * ihavecookies - jQuery plugin for displaying cookie/privacy message
3 * v0.3.2
4 *
5 * Copyright (c) 2018 Ketan Mistry (https://iamketan.com.au)
6 * Licensed under the MIT license:
7 * http://www.opensource.org/licenses/mit-license.php
8 *
9 */
10if (!Object.assign) {
11    Object.defineProperty(Object, 'assign', {
12        enumerable: false,
13        configurable: true,
14        writable: true,
15        value: function (target) {
16            'use strict';
17            if (target === undefined || target === null) {
18                throw new TypeError('Cannot convert first argument to object');
19            }
20
21            var to = Object(target);
22            for (var i = 1; i < arguments.length; i++) {
23                var nextSource = arguments[i];
24                if (nextSource === undefined || nextSource === null) {
25                    continue;
26                }
27                nextSource = Object(nextSource);
28
29                var keysArray = Object.keys(Object(nextSource));
30                for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {
31                    var nextKey = keysArray[nextIndex];
32                    var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
33                    if (desc !== undefined && desc.enumerable) {
34                        to[nextKey] = nextSource[nextKey];
35                    }
36                }
37            }
38            return to;
39        }
40    });
41}
42(function ($) {
43
44    /*
45    |--------------------------------------------------------------------------
46    | Cookie Message
47    |--------------------------------------------------------------------------
48    |
49    | Displays the cookie message on first visit or 30 days after their
50    | last visit.
51    |
52    | @param event - 'reinit' to reopen the cookie message
53    |
54    */
55    $.fn.ihavecookies = function (options, event) {
56
57        var $element = $(this);
58
59        // Set defaults
60        var settings = $.extend({
61            cookieTypes: [
62                {
63                    type: 'Site Preferences',
64                    value: 'preferences',
65                    description: 'These are cookies that are related to your site preferences, e.g. remembering your username, site colours, etc.'
66                },
67                {
68                    type: 'Analytics',
69                    value: 'analytics',
70                    description: 'Cookies related to site visits, browser types, etc.'
71                },
72                {
73                    type: 'Marketing',
74                    value: 'marketing',
75                    description: 'Cookies related to marketing, e.g. newsletters, social media, etc'
76                }
77            ],
78            title: 'Cookies & Privacy',
79            message: 'Cookies enable you to use shopping carts and to personalize your experience on our sites, tell us which parts of our websites people have visited, help us measure the effectiveness of ads and web searches, and give us insights into user behavior so we can improve our communications and products.',
80            link: '/privacy-policy',
81            delay: 2000,
82            expires: 30,
83            moreInfoLabel: 'More information',
84            acceptBtnLabel: 'Accept Cookies',
85            rejectBtnLabel: 'Reject Cookies',
86            advancedBtnLabel: 'Customise Cookies',
87            cookieTypesTitle: 'Select cookies to accept',
88            fixedCookieTypeLabel: 'Session',
89            fixedCookieTypeDesc: 'These are cookies that are essential for the website to work correctly.',
90            onAccept: function () { },
91            uncheckBoxes: false
92        }, options);
93
94        var myCookie = getCookie('cookieControlv2');
95        var myCookiePrefs = getCookie('cookieControlPrefsv2');
96
97
98        if (!myCookie || !myCookiePrefs || event == 'reinit') {
99			reInitCookies();
100            //delete Cookies
101            deleteCookies(["cookieControlv2"]);
102
103            // Set cookie
104            dropCookie(true, settings.expires);
105
106            // Remove all instances of the cookie message so it's not duplicated
107            $('#gdpr-cookie-message').remove();
108
109            // Set the 'necessary' cookie type checkbox which can not be unchecked
110            var cookieTypes = '<li>
110<input type="checkbox" name="gdpr[]" value="necessary" checked="checked" disabled="disabled"> <label title="' + settings.fixedCookieTypeDesc + '">' + settings.fixedCookieTypeLabel + '</label></li>';
111
112            // Generate list of cookie type checkboxes
113            preferences = JSON.parse(myCookiePrefs);
114            $.each(settings.cookieTypes, function (index, field) {
115                if (field.type !== '' && field.value !== '') {
116                    var cookieTypeDescription = '';
117                    if (field.description !== false) {
118                        cookieTypeDescription = ' title="' + field.description + '"';
119                    }
120                    cookieTypes += '<li><input type="checkbox" id="gdpr-cookietype-' + field.value + '" name="gdpr[]" value="' + field.value + '" data-auto="on"> <label for="gdpr-cookietype-' + field.value + '"' + cookieTypeDescription + '>' + field.type + '</label></li>';
121                }
122            });
123
124            // Display cookie message on page
125            var cookieMessage = '<div id="gdpr-cookie-message" class="horizontal"><div class="flow wrap"><div class="text"><h4>' + settings.title + '</h4><p>' + settings.message + ' <!-- a href="' + settings.link + '">' + settings.moreInfoLabel + '</a --><div id="gdpr-cookie-types" style="display:none;"><h5>' + settings.cookieTypesTitle + '</h5><ul>' + cookieTypes + '</ul></div></div><div class="gdpr-actions"><button id="gdpr-cookie-accept" type="button">' + settings.acceptBtnLabel + '</button><button id="gdpr-cookie-reject" type="button">' + settings.rejectBtnLabel + '</button><button id="gdpr-cookie-advanced" type="button">' + settings.advancedBtnLabel + '</button></div></div></div>';
126            setTimeout(function () {
127                $($element).append(cookieMessage);
128                $('#gdpr-cookie-message').hide().fadeIn('slow', function () {
129                    // If reinit'ing, open the advanced section of message
130                    // and re-check all previously selected options.
131                    if (event == 'reinit') {
132                        $('#gdpr-cookie-advanced').trigger('click');
133                        $.each(preferences, function (index, field) {
134                            $('input#gdpr-cookietype-' + field).prop('checked', true);
135                        });
136                    }
137                });
138            }, settings.delay);
139
140            // When accept button is clicked drop cookie
141            $('body').on('click', '#gdpr-cookie-accept', function () {
142
143                // Set cookie
144                dropCookie(true, settings.expires);
145
146                // If 'data-auto' is set to ON, tick all checkboxes because
147                // the user hasn't clicked the customise cookies button
148                $('input[name="gdpr[]"][data-auto="on"]').prop('checked', true);
149
150                // Save users cookie preferences (in a cookie!)
151                var prefs = [];
152                $.each($('input[name="gdpr[]"]').serializeArray(), function (i, field) {
153                    prefs.push(field.value);
154                });
155                setCookie('cookieControlPrefsv2', encodeURIComponent(JSON.stringify(prefs)), 365);
156
157                // Run callback function
158                //settings.onAccept.call(this);
159				 // Run callback function only if not previously triggered
160				 if (!settings.alreadyAccepted) {
161					settings.onAccept.call(this);
162					settings.alreadyAccepted = true; // Set a flag to prevent multiple calls
163				}
164            });
165
166            // Toggle reject cookie
167            $('body').on('click', '#gdpr-cookie-reject', function () {
168				reInitCookies();
169
170                //delete Cookies
171                deleteCookies(["cookieControlv2"]);
172
173                // Set cookie
174                dropCookie(true, settings.expires);
175
176                // Save users cookie preferences (in a cookie!)
177                var prefs = [];
178
179                setCookie('cookieControlPrefsv2', encodeURIComponent(JSON.stringify(prefs)), 365);
180
181
182				// Run callback function only if not previously triggered
183				if (!settings.alreadyAccepted) {
184					settings.onAccept.call(this);
185					settings.alreadyAccepted = true; // Set a flag to prevent multiple calls
186				}
187
188
189            });
190
191            // Toggle advanced cookie options
192            $('body').on('click', '#gdpr-cookie-advanced', function () {
193                // Uncheck all checkboxes except for the disabled 'necessary'
194                // one and set 'data-auto' to OFF for all. The user can now
195                // select the cookies they want to accept.
196                $('#gdpr-cookie-accept').html(settings.acceptBtnLabel2);
197                $('input[name="gdpr[]"]:not(:disabled)').attr('data-auto', 'off').prop('checked', false);
198                $('#gdpr-cookie-types').slideDown('fast', function () {
199                    $('#gdpr-cookie-advanced').prop('disabled', true);
200                });
201            });
202
203        } else {
204            var cookieVal = true;
205            if (myCookie == 'false') {
206                cookieVal = false;
207            }
208            dropCookie(cookieVal, settings.expires);
209        }
210
211        // Uncheck any checkboxes on page load
212        if (settings.uncheckBoxes === true) {
213            $('input[type="checkbox"].ihavecookies').prop('checked', false);
214        }
215
216    };
217
218    // Method to get cookie value
219    $.fn.ihavecookies.cookie = function () {
220        var preferences = getCookie('cookieControlPrefsv2');
221        return JSON.parse(preferences);
222    };
223
224    // Method to check if user cookie preference exists
225    $.fn.ihavecookies.preference = function (cookieTypeValue) {
226        var control = getCookie('cookieControlv2');
227        var preferences = getCookie('cookieControlPrefsv2');
228        preferences = JSON.parse(preferences);
229        if (control === false) {
230            return false;
231        }
232        if (preferences === false || preferences.indexOf(cookieTypeValue) === -1) {
233            return false;
234        }
235        return true;
236    };
237
238
239
240    /*
241    |--------------------------------------------------------------------------
242    | Drop Cookie
243    |--------------------------------------------------------------------------
244    |
245    | Function to drop the cookie with a boolean value of true.
246    |
247    */
248    var dropCookie = function (value, expiryDays) {
249        setCookie('cookieControlv2', value, expiryDays);
250        $('#gdpr-cookie-message').fadeOut('fast', function () {
251            $(this).remove();
252        });
253    };
254
255
256    /*
257    |--------------------------------------------------------------------------
258    | Set Cookie
259    |--------------------------------------------------------------------------
260    |
261    | Sets cookie with 'name' and value of 'value' for 'expiry_days'.
262    |
263    */
264    var setCookie = function (name, value, expiry_days) {
265        var d = new Date();
266        d.setTime(d.getTime() + (expiry_days * 24 * 60 * 60 * 1000));
267        var expires = "expires=" + d.toUTCString();
268        document.cookie = name + "=" + value + ";" + expires + ";path=/";
269        return getCookie(name);
270    };
271
272    /*
273    |--------------------------------------------------------------------------
274    | Get Cookie
275    |--------------------------------------------------------------------------
276    |
277    | Gets cookie called 'name'.
278    |
279    */
280    var getCookie = function (name) {
281        var cookie_name = name + "=";
282        var decodedCookie = decodeURIComponent(document.cookie);
283        var ca = decodedCookie.split(';');
284        for (var i = 0; i < ca.length; i++) {
285            var c = ca[i];
286            while (c.charAt(0) == ' ') {
287                c = c.substring(1);
288            }
289            if (c.indexOf(cookie_name) === 0) {
290                return c.substring(cookie_name.length, c.length);
291            }
292        }
293        return false;
294    };
295
296}(jQuery));
297
298
299
300var lang = $("html").attr("lang");
301var cookiesLangs = {
302    ca: {
303        title: 'Aquest lloc web utilitza cookies',
304        message: 'Utilitzem cookies pròpies i de tercers per millorar l\'experiència d\'usuari, analitzar el trànsit, la vostra navegació al web i personalitzar el contingut. Podeu “Acceptar totes les cookies”, “Configurar les cookies” que voleu acceptar o bé “Rebutjar-les totes” (excepte les cookies tècniques que són necessàries). Consulteu la nostra <a href="cookies_link">política de cookies</a> per obtenir més informació.',
305        link: '/ca/politica-de-cookies/',
306        acceptBtnLabel: 'Accepta totes les cookies',
307        rejectBtnLabel: 'Rebutjar-les totes',
308        acceptBtnLabel2: 'Accepta les cookies',
309        advancedBtnLabel: 'Configurar les cookies',
310        moreInfoLabel: 'Més informació',
311        cookieTypesTitle: 'Selecciona les galetes que vols acceptar',
312        fixedCookieTypeLabel: 'Necessàries',
313        fixedCookieTypeDesc: 'Aquestes galetes són essencials perqu
313è la web funcioni correctament.'
314    },
315    es: {
316        title: 'Este sitio web utiliza cookies',
317        message: 'Utilizamos cookies propias y de terceros para mejorar la experiencia del usuario, analizar el tráfico, su navegación en el sitio web y personalizar el contenido. Puede "Aceptar todas las cookies", "Configurar las cookies" que desea aceptar o "Rechazar todas" (excepto las cookies técnicas que son necesarias). Consulte nuestra <a href="cookies_link">política de cookies</a> para obtener más información.',
318        link: '/es/politica-de-cookies/',
319        acceptBtnLabel: 'Aceptar todas las cookies',
320        rejectBtnLabel: 'Rechazar todas',
321        acceptBtnLabel2: 'Aceptar las cookies',
322        advancedBtnLabel: 'Configurar las cookies',
323        moreInfoLabel: 'Más información',
324        cookieTypesTitle: 'Selecciona las cookies que quieres aceptar',
325        fixedCookieTypeLabel: 'Necesarias',
326        fixedCookieTypeDesc: 'Estas cookies són esenciales para que la web funcione correctamente.'
327    },
328    en: {
329        title: 'This website uses cookies',
330        message: 'We use our own and third-party cookies to improve the user experience, analyze traffic, your navigation on the website, and personalize content. You can "Accept all cookies," "Configure the cookies" you want to accept, or "Reject all" (except technical cookies which are necessary). Please refer to our <a href="cookies_link">cookie policy</a> for more information.',
331        link: '/en/politica-de-cookies/',
332        acceptBtnLabel: 'Accept all cookies',
333        rejectBtnLabel: 'Reject all',
334        acceptBtnLabel2: 'Accept cookies',
335        advancedBtnLabel: 'Configure cookies',
336        moreInfoLabel: 'More information',
337        cookieTypesTitle: 'Select the cookies you want to accept',
338        fixedCookieTypeLabel: 'Necessary',
339        fixedCookieTypeDesc: 'These cookies are essential for the website to function properly.'
340    },
341    fr: {
342        title: 'Ce site web utilise des cookies',
343        message: 'Nous utilisons nos propres cookies et des cookies tiers pour améliorer l\'expérience utilisateur, analyser le trafic, votre navigation sur le site web et personnaliser le contenu. Vous pouvez "Accepter tous les cookies", "Configurer les cookies" que vous souhaitez accepter, ou "Rejeter tous" (à l\'exception des cookies techniques qui sont nécessaires). Veuillez consulter notre <a href="cookies_link">politique de cookies</a> pour plus d\'informations.',
344        link: '/fr/politica-de-cookies/',
345        acceptBtnLabel: 'Accepter tous les cookies',
346        rejectBtnLabel: 'Rejeter tous',
347        acceptBtnLabel2: 'Accepter les cookies',
348        advancedBtnLabel: 'Configurer les cookies',
349        moreInfoLabel: 'Plus d\'informations',
350        cookieTypesTitle: 'Sélectionnez les cookies que vous souhaitez accepter',
351        fixedCookieTypeLabel: 'Nécessaires',
352        fixedCookieTypeDesc: 'Ces cookies sont essentiels pour le bon fonctionnement du site web.'
353    },
354}
355var cookiesLangsMarketing = {
356    ca: {
357        message: 'Utilitzem cookies pròpies i de tercers per millorar l’experiència d’usuari, analitzar el trànsit, la vostra navegació al web i personalitzar el contingut. Podeu “Acceptar totes les cookies”, “Configurar les cookies” que voleu acceptar o bé “Rebutjar-les totes” (excepte les cookies tècniques que són necessàries). Consulteu la nostra <a href="cookies_link">política de cookies</a> per obtenir més informació.',
358    },
359    es: {
360        message: 'Utilizamos cookies propias y de terceros para mejorar la experiencia del usuario, analizar el tráfico, su navegación en el sitio web y personalizar el contenido. Puede "Aceptar todas las cookies", "Configurar las cookies" que desea aceptar o "Rechazar todas" (excepto las cookies técnicas que son necesarias). Consulte <a href="cookies_link">nuestra política de cookies</a> para obtener más información.',
361    },
362    en: {
363        message: 'We use our own and third-party cookies to improve the user experience, analyze traffic, your navigation on the website, and personalize content. You can "Accept all cookies," "Configure the cookies" you want to accept, or "Reject all" (except technical cookies which are necessary). Please refer to our <a href="cookies_link">cookie policy</a> for more information.',
364    },
365    fr: {
366        message: 'Nous utilisons nos propres cookies et des cookies tiers pour améliorer l\'expérience utilisateur, analyser le trafic, votre navigation sur le site web et personnaliser le contenu. Vous pouvez "Accepter tous les cookies", "Configurer les cookies" que vous souhaitez accepter, ou "Rejeter tous" (à l\'exception des cookies techniques qui sont nécessaires). Veuillez consulter notre <a href="cookies_link">politique de cookies</a> pour plus d\'informations.',
367    }
368}
369var cookiesTypes = {
370    ca: {
371        preferences: {
372            type: 'Personalització',
373            value: 'preferences',
374            description: 'Es tracta de cookies relacionades amb les preferències del vostre lloc, per ex. recordant l\'idioma, nom d\'usuari, etc.'
375        },
376        analytics: {
377            type: 'Anàlisi',
378            value: 'analytics',
379            description: 'Cookies relacionades amb visites al lloc, tipus de navegadors, etc.'
380        },
381        marketing: {
382            type: 'Màrqueting',
383            value: 'marketing',
384            description: 'Cookies relacionades amb el màrqueting, p. ex. butlletins, xarxes socials, etc.'
385        }
386    },
387    es: {
388        preferences: {
389            type: 'Personalización',
390            value: 'preferences',
391            description: 'Estas son cookies que están relacionadas con las preferencias de su sitio, por ej. recordando el idioma, nombre de usuario, etc.'
392        },
393        analytics: {
394            type: 'Análisis',
395            value: 'analytics',
396            description: 'Cookies relacionadas con visitas al sitio, tipos de navegador, etc.'
397        },
398        marketing: {
399            type: 'Marketing',
400            value: 'marketing',
401            description: 'Cookies relacionadas con el marketing, p. Ej. boletines, redes sociales, etc.'
402        }
403    },
404    en: {
405        preferences: {
406            type: 'Personalization',
407            value: 'preferences',
408            description: 'These are cookies that are related to your site preferences, e.g. remembering language, username, etc.'
409        },
410        analytics: {
411            type: 'Analysis',
412            value: 'analytics',
413            description: 'Cookies related to site visits, browser types, etc.'
414        },
415        marketing: {
416            type: 'Marketing',
417            value: 'marketing',
418            description: 'Cookies related to marketing, e.g. newsletters, social media, etc.'
419        }
420    },
421    fr: {
422        preferences: {
423            type: 'Personnalisation',
424            value: 'préférences',
425            description: 'Il s\'agit de cookies liés à vos préférences sur le site, par exemple, la mémorisation de la langue, du nom d\'utilisateur, etc.'
426        },
427        analytics: {
428            type: 'Analyse',
429            value: 'analytiques',
430            description: 'Cookies liés aux visites sur le site, aux types de navigateurs, etc.'
431        },
432        marketing: {
433            type: 'Marketing',
434            value: 'marketing',
435            description: 'Cookies liés au marketing, par exemple, newsletters, réseaux sociaux, etc.'
436        }
437    }
438}
439
440function cookiesActivate(activarConsent = true) {
441	var shouldApplyConsent = false;
442    if ($.fn.ihavecookies.preference('preferences') === true) {
443        var date = new Date(new Date().setFullYear(new Date().getFullYear() + 1));
444        document.cookie = "lang=" + lang + "; expires=" + date.toGMTString() + "; path=/";
445		cookiesPersonalization();
446		shouldApplyConsent = true;
447    }
448    if ($.fn.ihavecookies.preference('analytics') === true && typeof cookiesAnalytics === "function") {
449        cookiesAnalytics();
450		shouldApplyConsent = true;
451    }
452    if ($.fn.ihavecookies.preference('marketing') === true && typeof cookiesMarketing === "function") {
453        cookiesMarketing();
454		shouldApplyConsent = true;
455    }
456
457	if (activarConsent || shouldApplyConsent) {
458        applyConsent();
459    }
460
461
462}
463function reInitCookies() {
464
465		updateConsent('ad_user_data', 'denied');
466		updateConsent('ad_personalization', 'denied');
467		updateConsent('ad_storage', 'denied');
468  		updateConsent('analytics_storage', 'denied');
469
470
471
472
473
474}
475
476function deleteCookies(names) {
477
478    // Obté totes les cookies de la plana
479    var allCookies = document.cookie.split(';');
480    for (var i = 0; i < allCookies.length; i++) {
481        var cookie = allCookies[i];
482        var cookieName = cookie.split('=')[0].trim();
483
484        // Esborrar les cookies menys la passada
485        if (names.some(function (name) { return cookieName.indexOf(name) === -1; }) && cookieName != "PHPSESSID") {
486
487            // Establecer la cookie para que expire inmediatamente
488            document.cookie = cookieName + '=; max-age=0; expires=-1; path=/;';
489            document.cookie = cookieName + '=; max-age=0; expires=-1; path=/;domain=' + getDomainName(window.location.hostname);
490            document.cookie = cookieName + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;domain=localhost';
491        }
492    }
493}
494
495function getDomainName(hostName) {
496    return '.' + hostName.substring(hostName.lastIndexOf(".", hostName.lastIndexOf(".") - 1) + 1);
497}
498
499
500var options = Object.assign(cookiesLangs[lang], {
501    cookieTypes: [
502        cookiesTypes[lang]['preferences']
503    ],
504    delay: 300,
505    expires: 90,
506    onAccept: function () {
507        cookiesActivate(true);
508    },
509    uncheckBoxes: true,
510});
511
512if (typeof cookiesAnalytics === "function") {
513    options.cookieTypes.push(cookiesTypes[lang]['analytics']);
514}
515if (typeof cookiesMarketing === "function") {
516    options.cookieTypes.push(cookiesTypes[lang]['marketing']);
517    options = Object.assign(options, cookiesLangsMarketing[lang]);
518}
519options.message = options.message.replace('cookies_link', options.link);
520$(document).ready(function () {
521    $('body').ihavecookies(options);
522    cookiesActivate(false);
523    $('.ihavecookies_change').click(function (event) {
524        event.preventDefault();
525        $('body').ihavecookies(options, 'reinit');
526    });
527});

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.