["<!-- Facebook Pixel Code -->\n    <script>\n        function getFBCookie(cname) {\n            let name = cname + \"=\";\n            let decodedCookie = decodeURIComponent(document.cookie);\n            let ca = decodedCookie.split(';');\n            for(let i = 0; i <ca.length; i++) {\n                let c = ca[i];\n                while (c.charAt(0) == ' ') {\n                    c = c.substring(1);\n                }\n                if (c.indexOf(name) == 0) {\n                    return c.substring(name.length, c.length);\n                }\n            }\n            return \"\";\n        }\n\n        function getUrlParameter(param) {\n            const urlParams = new URLSearchParams(window.location.search);\n            return urlParams.get(param);\n        }\n\n                \n        !function(f, b, e, v, n, t, s) {\n          if (f.fbq) return;\n          n = f.fbq = function() {\n            n.callMethod ?\n              n.callMethod.apply(n, arguments) : n.queue.push(arguments);\n          };\n          if (!f._fbq) f._fbq = n;\n          n.push = n;\n          n.loaded = !0;\n          n.version = \"2.0\";\n          n.queue = [];\n          t = b.createElement(e);\n          t.async = !0;\n          t.src = v;\n          s = b.getElementsByTagName(e)[0];\n          s.parentNode.insertBefore(t, s);\n        }(window, document, \"script\",\n            \"https://connect.facebook.net/en_US/fbevents.js\");\n\n        fbq(\"init\", '964963288819489');\n        let eventTime = Date.now();\n        let fbp = getFBCookie('_fbp');\n        let fbc = getFBCookie('_fbc');\n\n                        let txId = getUrlParameter('form_submission_id') ?? eventTime;\n\n                    let event = getUrlParameter('form_submission_id') ? 'Lead' : 'PageView';\n        \n                     eventID = `page.${event}.tx_${txId}`;\n        \n                    let post = {\n              domain: 'artfullearning.be',\n              conversion_type: 'PageView',\n              url: window.location.href,\n              event_id: eventID,\n              event_time: eventTime,\n            };\n\n            if (getUrlParameter(\"pagese\")) {\n              post.email = getUrlParameter(\"pagese\");\n            }\n\n            if (getUrlParameter(\"pagesf\")) {\n              post.first_name = getUrlParameter(\"pagesf\");\n            }\n\n            if (getUrlParameter(\"pagesl\")) {\n              post.last_name = getUrlParameter(\"pagesl\");\n            }\n\n            if (fbp !== \"\") {\n              post.fbp = fbp;\n            }\n\n            if (fbc !== \"\") {\n              post.fbc = fbc;\n            }\n\n            const url = 'https://artfullearning.be/client/facebook-conversion/events';\n            let xhr = new XMLHttpRequest();\n            xhr.open(\"POST\", url, true);\n            xhr.setRequestHeader(\"Content-type\", \"application/json; charset=UTF-8\");\n            xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n            xhr.send(JSON.stringify(post));\n        \n        if (event) {\n            let fbData = {  };\n\n            if (fbp !== \"\") {\n                fbData.fbp = fbp;\n            }\n\n            if (fbc !== \"\") {\n                fbData.fbc = fbc;\n            }\n\n            \n            fbq(\"track\", 'PageView', fbData, { eventID: eventID });\n        }\n\n    </script>\n    <!-- End Facebook Pixel Code -->\n",{"name":"fb","location":"head","consentType":"statistical","content":"<!-- Facebook Pixel Code -->\n    <script>\n        function getFBCookie(cname) {\n            let name = cname + \"=\";\n            let decodedCookie = decodeURIComponent(document.cookie);\n            let ca = decodedCookie.split(';');\n            for(let i = 0; i <ca.length; i++) {\n                let c = ca[i];\n                while (c.charAt(0) == ' ') {\n                    c = c.substring(1);\n                }\n                if (c.indexOf(name) == 0) {\n                    return c.substring(name.length, c.length);\n                }\n            }\n            return \"\";\n        }\n\n        function getUrlParameter(param) {\n            const urlParams = new URLSearchParams(window.location.search);\n            return urlParams.get(param);\n        }\n\n                \n        !function(f, b, e, v, n, t, s) {\n          if (f.fbq) return;\n          n = f.fbq = function() {\n            n.callMethod ?\n              n.callMethod.apply(n, arguments) : n.queue.push(arguments);\n          };\n          if (!f._fbq) f._fbq = n;\n          n.push = n;\n          n.loaded = !0;\n          n.version = \"2.0\";\n          n.queue = [];\n          t = b.createElement(e);\n          t.async = !0;\n          t.src = v;\n          s = b.getElementsByTagName(e)[0];\n          s.parentNode.insertBefore(t, s);\n        }(window, document, \"script\",\n            \"https://connect.facebook.net/en_US/fbevents.js\");\n\n        fbq(\"init\", '964963288819489');\n        let eventTime = Date.now();\n        let fbp = getFBCookie('_fbp');\n        let fbc = getFBCookie('_fbc');\n\n                        let txId = getUrlParameter('form_submission_id') ?? eventTime;\n\n                    let event = getUrlParameter('form_submission_id') ? 'Lead' : 'PageView';\n        \n                     eventID = `page.${event}.tx_${txId}`;\n        \n                    let post = {\n              domain: 'artfullearning.be',\n              conversion_type: 'PageView',\n              url: window.location.href,\n              event_id: eventID,\n              event_time: eventTime,\n            };\n\n            if (getUrlParameter(\"pagese\")) {\n              post.email = getUrlParameter(\"pagese\");\n            }\n\n            if (getUrlParameter(\"pagesf\")) {\n              post.first_name = getUrlParameter(\"pagesf\");\n            }\n\n            if (getUrlParameter(\"pagesl\")) {\n              post.last_name = getUrlParameter(\"pagesl\");\n            }\n\n            if (fbp !== \"\") {\n              post.fbp = fbp;\n            }\n\n            if (fbc !== \"\") {\n              post.fbc = fbc;\n            }\n\n            const url = 'https://artfullearning.be/client/facebook-conversion/events';\n            let xhr = new XMLHttpRequest();\n            xhr.open(\"POST\", url, true);\n            xhr.setRequestHeader(\"Content-type\", \"application/json; charset=UTF-8\");\n            xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n            xhr.send(JSON.stringify(post));\n        \n        if (event) {\n            let fbData = {  };\n\n            if (fbp !== \"\") {\n                fbData.fbp = fbp;\n            }\n\n            if (fbc !== \"\") {\n                fbData.fbc = fbc;\n            }\n\n            \n            fbq(\"track\", 'PageView', fbData, { eventID: eventID });\n        }\n\n    </script>\n    <!-- End Facebook Pixel Code -->\n","attributes":null}]