{"webLayers":[{"_id":"66866b6da0d3715c193a54ef","date_filter":{"enabled":true,"from_date":1720108800,"to_date":1720133999},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"smart_trigger":null,"device_target":{"type":"any"},"frequency":"once_per_visit","uses_personalization":true,"data":"","variables_target":null,"page_vars":[]},{"_id":"68c1630bb044d3225eb44a2f","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"url":"https://www.weirdfish.co.uk/refer-a-friend-br","type":"contains"},{"url":"https://www.weirdfish.co.uk/account/loveweirdfish","type":"exact"}],"exclude_pages":null},"smart_trigger":null,"device_target":{"type":"any"},"frequency":"always","uses_personalization":true,"data":"","variables_target":null,"page_vars":[]}],"experiments":[{"_id":"65e19fe8691f50ac30cbc63b","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"url":"https://www.weirdfish.co.uk/basket","type":"exact"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"67851e3528aeee9486906f76","date_filter":{"enabled":true,"from_date":1736985600,"to_date":1737352800},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"new-arrivals","type":"contains"}]},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6787d434e30c669cae85d35a","date_filter":{"enabled":true,"from_date":1736985600,"to_date":1737352800},"trigger":{"include_pages":[{"url":"/sale/","type":"contains"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"67b5b09a9d001dcc163d269e","date_filter":{"enabled":true,"from_date":1739836800,"to_date":1740095999},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"67b6f296e4164ed8c6b52612","date_filter":{"enabled":true,"from_date":1739750400,"to_date":1740095999},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6863fd4aeec7228c259185a0","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"url":"https://www.weirdfish.co.uk/account/loveweirdfish","type":"exact"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"68d52b67608e0550a061c199","date_filter":{"enabled":true,"from_date":1759248000,"to_date":null},"trigger":{"include_pages":[{"url":"basket","type":"contains"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"68e518c084c20092a17268f8","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"url":"basket","type":"contains"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6915a66924b4e0a8ce07ea76","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"url":"/i/","type":"contains"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6936e22ec3124c294019ed75","date_filter":{"enabled":true,"from_date":1765238460,"to_date":1765324799},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6945241cb4e270774a5c88c4","date_filter":{"enabled":true,"from_date":1766016000,"to_date":1766368800},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"694912553a1c498b19165968","date_filter":{"enabled":true,"from_date":1766361600,"to_date":1766793599},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"698de6485f831d99fde436ad","date_filter":{"enabled":false,"from_date":1759248000,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"69a564dbf9b02761527c4dcc","date_filter":{"enabled":true,"from_date":1772409600,"to_date":1773014399},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"69a56d4610741aa6691a86e8","date_filter":{"enabled":true,"from_date":1772409600,"to_date":1773014399},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"69ae979eddfcb12c03128ade","date_filter":{"enabled":true,"from_date":1773014400,"to_date":1773619199},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"https://www.weirdfish.co.uk/","type":"exact"}]},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"69ae982627db91631c77d38f","date_filter":{"enabled":true,"from_date":1773014400,"to_date":1773619199},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"https://www.weirdfish.co.uk/","type":"exact"}]},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"69b7d5d4a6a112d0eb3e005d","date_filter":{"enabled":true,"from_date":1773619200,"to_date":1774223999},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"https://www.weirdfish.co.uk/p/new-arrivals","type":"contains"}]},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"69b962fc4fe49b722a6cdb3e","date_filter":{"enabled":true,"from_date":1774224000,"to_date":1774825199},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"69dcabc049367304f513a70b","date_filter":{"enabled":true,"from_date":1776812400,"to_date":1777244399},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"69eb3e8649b6d07429c0666c","date_filter":{"enabled":true,"from_date":1777244400,"to_date":1777849199},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"69f1cf778fa2abdeffa92516","date_filter":{"enabled":true,"from_date":1777849200,"to_date":1777968000},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6a100fef7824507ed59b6b72","date_filter":{"enabled":true,"from_date":1779058800,"to_date":1779749999},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6a103a667d453382c8585bee","date_filter":{"enabled":true,"from_date":1779750000,"to_date":1780268399},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6a2677f92b3302dfdfb5ad84","date_filter":{"enabled":true,"from_date":1781218800,"to_date":1781477999},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6a26e202743ae650c159d934","date_filter":{"enabled":true,"from_date":1781132400,"to_date":1781218799},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6a393875e387d672210cb6af","date_filter":{"enabled":true,"from_date":1782082800,"to_date":1782450000},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6a3a6a28ec4526f33cf964e2","date_filter":{"enabled":true,"from_date":1782428400,"to_date":1782601199},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6a3e73b0a4efb79b015d0cd9","date_filter":{"enabled":true,"from_date":1782601200,"to_date":1782687599},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6a4b6ba3532639bdce592f41","date_filter":{"enabled":true,"from_date":1783292400,"to_date":1783897199},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6a4f6c60a9ec55ea3058ee73","date_filter":{"enabled":true,"from_date":1783897200,"to_date":1783983599},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6a5743357ecd0b571d24795b","date_filter":{"enabled":true,"from_date":1784070000,"to_date":1784181600},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6a5758ffa752efe20ba06d5d","date_filter":{"enabled":true,"from_date":1784070000,"to_date":1784415599},"trigger":{"include_pages":[{"url":"/i/","type":"contains"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6a68cbe4c8e3c664d39eb566","date_filter":{"enabled":true,"from_date":1785193200,"to_date":1785711599},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6a842a0f2cbbd62f96feddcd","date_filter":{"enabled":true,"from_date":1787612400,"to_date":1787698799},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"/new-arrivals/","type":"contains"}]},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6a8d5539d63e97d7dcb32618","date_filter":{"enabled":true,"from_date":1788217200,"to_date":1788915600},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6a8d6e125f20e95563cd0d0d","date_filter":{"enabled":false,"from_date":null,"to_date":null},"trigger":{"include_pages":[{"url":"my-wishlist","type":"contains"}],"exclude_pages":null},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]},{"_id":"6abcd2cb6b15bde2e75e788e","date_filter":{"enabled":true,"from_date":1790809200,"to_date":null},"trigger":{"include_pages":[{"type":"any"}],"exclude_pages":[{"url":"preference","type":"contains"}]},"trigger_event":{"type":"page_load"},"device_target":{"type":"any"},"frequency":"always","variables_target":null,"page_vars":[]}],"constantManagedTags":[{"uses_overlay":false,"type":"js","parametrized_definition":"// Returns email if it is valid\nexponea.validateEmail = function(email) {\n    email = email.trim().toLowerCase();\n    if (/^\\S+@\\S+\\.\\S+$/.test(email)) {\n        return email;\n    } else {\n        return false;\n    }\n};\n\n// Returns price (number) from string if it is valid\nexponea.parsePrice = function(total_price) {\n\ttotal_price = total_price.toString();\n    if (total_price.match(/.*[,].*[,].*/g)) { // two or more commas\n        return parseFloat(total_price.replace(/([^.0-9])/g, ''));\n    } else if (total_price.match(/.*[,].*[.].*/g)) { // a comma and a dot\n        return parseFloat(total_price.replace(',', '').replace(/([^.0-9])/g, ''));\n    } else { // one comma or less\n        return parseFloat(total_price.replace(',', '.').replace(/([^.0-9])/g, ''));\n    }\n};\n\n// Get parameter value from url by name\nexponea.getParameterByName = function(name, url) {\n    if (!url) {\n      url = window.location.href;\n    }\n    name = name.replace(/[\\[\\]]/g, \"\\\\$\u0026\");\n    var regex = new RegExp(\"[?\u0026]\" + name + \"(=([^\u0026#]*)|\u0026|#|$)\"),\n        results = regex.exec(url);\n    if (!results) return null;\n    if (!results[2]) return '';\n    return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\n};\n\n// Google Tag Manager dataLayer toolkit\nexponea.gtm = {\n\tgetFirstValue: function(key) {\n\t    for (var i = 0; i \u003c dataLayer.length; i++) {\n\t        if (dataLayer[i].hasOwnProperty(key)) {\n\t            return dataLayer[i][key];\n\t        }\n\t    }\n\t    return null;\n\t},\n\tgetValue: function(key) {\n\t    for (var i = dataLayer.length - 1; i \u003e= 0; i--) {\n\t        if (dataLayer[i].hasOwnProperty(key)) {\n\t            return dataLayer[i][key];\n\t        }\n\t    }\n\t    return null;\n\t},\n\tgetByKeyValue: function(key, value) {\n\t    for (var i = dataLayer.length - 1; i \u003e= 0; i--) {\n\t        if (dataLayer[i].hasOwnProperty(key)) {\n\t            if (dataLayer[i][key] === value) {\n\t                return dataLayer[i];\n\t            }\n\t        }\n\t    }\n\t    return null;\n\t}\n};\n\n// Storage toolkit\nexponea.storage = {\n\t// Store to Session Storage\n    save: function(key, obj, storage) {\n    \tif(!storage){\n    \t\tstorage = 'sessionStorage';\n    \t}\n        if (this.check(storage)) {\n        \twindow[storage][key] = JSON.stringify(obj);\n        }\n    },\n    // Load from Session Storage\n    load: function(key, storage) {\n    \tif(!storage){\n    \t\tstorage = 'sessionStorage';\n    \t}\n        if (this.check(storage)) {\n            try {\n        \t\treturn JSON.parse(window[storage][key]);\n            } catch (e) {\n                return {};\n            }\n        } else {\n            return {};\n        }\n    },\n    remove: function(key, storage) {\n    \tif(!storage){\n    \t\tstorage = 'sessionStorage';\n    \t}\n        try {\n\t\t\twindow[storage].removeItem(key);\n        } catch (e) {\n            return {};\n        }\n    },\n    check: function(type) {\n    \tif(!type){\n    \t\ttype = 'sessionStorage';\n    \t}\n        try {\n            var storage = window[type],\n                x = '__storage_test__';\n            storage.setItem(x, x);\n            storage.removeItem(x);\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n};\n\n// Cookie toolkit\nexponea.cookie = {\n\t// Set cookie, optional expiraton argument\n\tset: function(cname, cvalue, exdays) {\n\t\tif(exdays){\n\t\t    var d = new Date();\n\t\t    d.setTime(d.getTime() + (exdays*24*60*60*1000));\n\t\t    var expires = \"expires=\"+ d.toUTCString();\n\t\t    document.cookie = cname + \"=\" + cvalue + \";\" + expires + \";path=/\";\n\t\t}else{\n\t\t    document.cookie = cname + \"=\" + cvalue + \";path=/\";\n\t\t}\n\t},\n\t// Get cookie by name\n\tget: function(cname) {\n\t    var name = cname + \"=\";\n\t    var decodedCookie = decodeURIComponent(document.cookie);\n\t    var ca = decodedCookie.split(';');\n\t    for(var i = 0; i \u003cca.length; i++) {\n\t        var c = ca[i];\n\t        while (c.charAt(0) == ' ') {\n\t            c = c.substring(1);\n\t        }\n\t        if (c.indexOf(name) == 0) {\n\t            return c.substring(name.length, c.length);\n\t        }\n\t    }\n\t    return \"\";\n\t}\n};\n\n// Convert DDMMYYY HHMM to Unix timestamp\nexponea.date2unix = function(dateString, deliminator_date, timeString, deliminator_time){\n\tif(!timeString) timeString = \"12:00\";\n\tif(!deliminator_date) deliminator_date = '/';\n\tif(!deliminator_time) deliminator_time = ':';\n\tvar dateParts = dateString.split(deliminator_date);\n\tvar timeParts = timeString.split(deliminator_time);\n\tif(dateParts.length \u003e 1){\n\t\treturn ((new Date(dateParts[2], dateParts[1] - 1, dateParts[0], timeParts[0], timeParts[1]).getTime()) / 1000).toFixed(0);\n\t}\n\treturn null;\n};","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"5cd9657487094100150f7c2c"},{"uses_overlay":false,"type":"js","parametrized_definition":"// Returns email if it is valid\nexponea.validateEmail = function(email) {\n    email = email.trim().toLowerCase();\n    if (/^\\S+@\\S+\\.\\S+$/.test(email)) {\n        return email;\n    } else {\n        return false;\n    }\n};\n\n// Returns price (number) from string if it is valid\nexponea.parsePrice = function(total_price) {\n\ttotal_price = total_price.toString();\n    if (total_price.match(/.*[,].*[,].*/g)) { // two or more commas\n        return parseFloat(total_price.replace(/([^.0-9])/g, ''));\n    } else if (total_price.match(/.*[,].*[.].*/g)) { // a comma and a dot\n        return parseFloat(total_price.replace(',', '').replace(/([^.0-9])/g, ''));\n    } else { // one comma or less\n        return parseFloat(total_price.replace(',', '.').replace(/([^.0-9])/g, ''));\n    }\n};\n\n// Get parameter value from url by name\nexponea.getParameterByName = function(name, url) {\n    if (!url) {\n      url = window.location.href;\n    }\n    name = name.replace(/[\\[\\]]/g, \"\\\\$\u0026\");\n    var regex = new RegExp(\"[?\u0026]\" + name + \"(=([^\u0026#]*)|\u0026|#|$)\"),\n        results = regex.exec(url);\n    if (!results) return null;\n    if (!results[2]) return '';\n    return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\n};\n\n// Google Tag Manager dataLayer toolkit\nexponea.gtm = {\n\tgetFirstValue: function(key) {\n\t    for (var i = 0; i \u003c dataLayer.length; i++) {\n\t        if (dataLayer[i].hasOwnProperty(key)) {\n\t            return dataLayer[i][key];\n\t        }\n\t    }\n\t    return null;\n\t},\n\tgetValue: function(key) {\n\t    for (var i = dataLayer.length - 1; i \u003e= 0; i--) {\n\t        if (dataLayer[i].hasOwnProperty(key)) {\n\t            return dataLayer[i][key];\n\t        }\n\t    }\n\t    return null;\n\t},\n\tgetByKeyValue: function(key, value) {\n\t    for (var i = dataLayer.length - 1; i \u003e= 0; i--) {\n\t        if (dataLayer[i].hasOwnProperty(key)) {\n\t            if (dataLayer[i][key] === value) {\n\t                return dataLayer[i];\n\t            }\n\t        }\n\t    }\n\t    return null;\n\t},\n\tgetAllByKeyValue: function(key, value) {\n\t\tvar objects = [];\n\t    for (var i = dataLayer.length - 1; i \u003e= 0; i--) {\n\t        if (dataLayer[i].hasOwnProperty(key)) {\n\t            if (dataLayer[i][key] === value) {\n\t                objects.push(dataLayer[i]);\n\t            }\n\t        }\n\t    }\n\t    return objects;\n\t}\n};\n\n// Storage toolkit\nexponea.storage = {\n\t// Store to Session Storage\n    save: function(key, obj, storage) {\n    \tif(!storage){\n    \t\tstorage = 'sessionStorage';\n    \t}\n        if (this.check(storage)) {\n        \twindow[storage][key] = JSON.stringify(obj);\n        }\n    },\n    // Load from Session Storage\n    load: function(key, storage) {\n    \tif(!storage){\n    \t\tstorage = 'sessionStorage';\n    \t}\n        if (this.check(storage)) {\n            try {\n        \t\treturn JSON.parse(window[storage][key]);\n            } catch (e) {\n                return {};\n            }\n        } else {\n            return {};\n        }\n    },\n    remove: function(key, storage) {\n    \tif(!storage){\n    \t\tstorage = 'sessionStorage';\n    \t}\n        try {\n\t\t\twindow[storage].removeItem(key);\n        } catch (e) {\n            return {};\n        }\n    },\n    check: function(type) {\n    \tif(!type){\n    \t\ttype = 'sessionStorage';\n    \t}\n        try {\n            var storage = window[type],\n                x = '__storage_test__';\n            storage.setItem(x, x);\n            storage.removeItem(x);\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n};\n\n// Cookie toolkit\nexponea.cookie = {\n\t// Set cookie, optional expiraton argument\n\tset: function(cname, cvalue, exdays) {\n\t\tif(exdays){\n\t\t    var d = new Date();\n\t\t    d.setTime(d.getTime() + (exdays*24*60*60*1000));\n\t\t    var expires = \"expires=\"+ d.toUTCString();\n\t\t    document.cookie = cname + \"=\" + cvalue + \";\" + expires + \";path=/\";\n\t\t}else{\n\t\t    document.cookie = cname + \"=\" + cvalue + \";path=/\";\n\t\t}\n\t},\n\t// Get cookie by name\n\tget: function(cname) {\n\t    var name = cname + \"=\";\n\t    var decodedCookie = decodeURIComponent(document.cookie);\n\t    var ca = decodedCookie.split(';');\n\t    for(var i = 0; i \u003cca.length; i++) {\n\t        var c = ca[i];\n\t        while (c.charAt(0) == ' ') {\n\t            c = c.substring(1);\n\t        }\n\t        if (c.indexOf(name) == 0) {\n\t            return c.substring(name.length, c.length);\n\t        }\n\t    }\n\t    return \"\";\n\t}\n};\n\n// Convert DDMMYYY HHMM to Unix timestamp\nexponea.date2unix = function(dateString, deliminator_date, timeString, deliminator_time){\n\tif(!timeString) timeString = \"12:00\";\n\tif(!deliminator_date) deliminator_date = '/';\n\tif(!deliminator_time) deliminator_time = ':';\n\tvar dateParts = dateString.split(deliminator_date);\n\tvar timeParts = timeString.split(deliminator_time);\n\tif(dateParts.length \u003e 1){\n\t\treturn ((new Date(dateParts[2], dateParts[1] - 1, dateParts[0], timeParts[0], timeParts[1]).getTime()) / 1000).toFixed(0);\n\t}\n\treturn null;\n};","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"6272aacd89bb0696fdbf8052"},{"uses_overlay":false,"type":"js","parametrized_definition":"/**\r\n * buttonCssSelector: button\r\n * eventName: button_clicked\r\n * buttonName: Click here\r\n */\r\n\r\n$(\".br_raf_button\").click(function (elem) {\r\n    exponea.track(\"Clicked on RAF Button\", {\r\n        button_name: \"RAF Button\"\r\n    });\r\n});","trigger":{"include_pages":[{"url":"/refer-a-friend-br","type":"contains"}],"exclude_pages":null},"_id":"67bde325106980c950fc7809"},{"uses_overlay":false,"type":"js","parametrized_definition":"window.triggerPDP = function () {\r\n  console.log(\"Monetate triggered: PDP WishList Bloomreach TAG\");\r\n\r\n  // PDP WishList\r\n  // -------------------------\r\n  // Styling\r\n  // -------------------------\r\n  if (!document.querySelector(\"#wishlistStyles\")) {\r\n    document.head.insertAdjacentHTML(\r\n      \"beforeend\",\r\n      `\r\n    \u003cstyle id=\"wishlistStyles\"\u003e\r\n      .addToWL {\r\n        width: 100%;\r\n        border: none;\r\n        padding: 2px 5px;\r\n        background: #fff;\r\n        font-size: 18px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap:10px;\r\n        padding-top: 10px;\r\n        padding-bottom: 5px;\r\n      }\r\n\r\n      .wishlist-heart-icon {\r\n        width: 18px;\r\n        height: 18px;\r\n        object-fit: contain;\r\n}\r\n\r\n.wishlist-heart-main {\r\n  position: absolute;\r\n  top: 15px;\r\n  right: 15px;\r\n  z-index: 20;\r\n  width: 42px;\r\n  height: 42px;\r\n  padding: 10px;\r\n  background: #fff;\r\n  border-radius: 50%;\r\n  border: #fff 2px solid;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  cursor: pointer;\r\n  filter: drop-shadow(3px 0 2px rgba(0, 0, 0, 0.05));\r\n  transition: background-color 0.5s ease, border-color 0.5s ease, filter 0.5s ease;\r\n}\r\n\r\n.wishlist-heart-main img {\r\n  width: 22px;\r\n  height: 20px;\r\n  object-fit: contain;\r\n  margin-top:3px !important\r\n}\r\n\r\n.wishlist-heart-main:hover {\r\n  background-color: #d9e3e9;\r\n  border: #BAC8D0 2px solid;\r\n  filter: drop-shadow(0 0 0 rgba(0, 0, 0, 0));\r\n}\r\n\r\n    \u003c/style\u003e\r\n  `\r\n    );\r\n  }\r\n\r\n  // -------------------------\r\n  // Data\r\n  // -------------------------\r\n  const user = window.dataLayer?.[1]?.user;\r\n  const userLoggedIn = user?.status === \"logged-in\";\r\n\r\n  // --------------------------------------------\r\n  // Get Data to pass to Bloomreach \"wishlist_add\"\r\n  // --------------------------------------------\r\n\r\n  const productDetail = window.dataLayer?.find((item) =\u003e item?.ecommerce?.detail?.products?.[0]?.id);\r\n\r\n  const ga4Product = window.dataLayer?.find((item) =\u003e item?.ecommerce?.items?.[0]);\r\n\r\n  const product_code = productDetail?.ecommerce?.detail?.products?.[0]?.id;\r\n\r\n  const category_1 = ga4Product?.ecommerce?.items?.[0]?.item_category;\r\n\r\n  const product_name = ga4Product?.ecommerce?.items?.[0]?.item_name;\r\n\r\n  const product_id = document.getElementById(\"ProductID\")?.value;\r\n\r\n  // --------------------------------------------\r\n  // get product info for local storage\r\n  // --------------------------------------------\r\n  const currentItem = document.querySelector(\"#magicZoomMedia img\");\r\n\r\n  if (!currentItem) {\r\n    console.warn(\"Current product image not found\");\r\n    return;\r\n  }\r\n\r\n  const itemName = currentItem.getAttribute(\"alt\") || \"\";\r\n  const itemLink = window.location.href;\r\n  const priceContainer = document.querySelector(\".pdp-header-price \u003e span.js-product-price.data-ge-price\");\r\n  const originalPrice = priceContainer?.querySelector(\"s\")?.textContent?.trim() || \"\";\r\n  const salePrice = priceContainer?.querySelector(\"span\")?.textContent?.trim() || \"\";\r\n  const currentItemData = {\r\n    image: currentItem.src || \"\",\r\n    title: itemName,\r\n    link: itemLink,\r\n    originalPrice: originalPrice,\r\n    salePrice: salePrice,\r\n  };\r\n\r\n  // -------------------------\r\n  // Create button / edit Add to basket\r\n  // -------------------------\r\n\r\n  // Select Add to Basket CTA and make style amends\r\n  const addToBasket = document.querySelector(\".pdp-add-buttons\");\r\n  addToBasket.classList.remove(\"mb-3\");\r\n  addToBasket.style.flexDirection = \"column\";\r\n\r\n  const heartIconCTA = \"https://brxcdn.com/exp-app-storage/803561c6-2959-11e9-8626-0a580a201a1c/media/original/02205514-9659-11f1-98df-4e4784a89a9d\";\r\n\r\n  const heartIconSaved = \"https://brxcdn.com/exp-app-storage/803561c6-2959-11e9-8626-0a580a201a1c/media/original/b53cffa0-9b16-11f1-8b05-920eed029dd5\";\r\n\r\n  if (!addToBasket) {\r\n    console.warn(\"Wishlist: .pdp-accordion not found.\");\r\n  }\r\n\r\n  // Prevent duplicate wishlist buttons\r\n\r\n  if (addToBasket.querySelector(\".addToWL\")) {\r\n    console.log(\"Wishlist already initialised\");\r\n    return;\r\n  }\r\n\r\n  const addToWL = document.createElement(\"button\");\r\n  addToWL.type = \"button\";\r\n  addToWL.classList.add(\"addToWL\");\r\n\r\n  // -------------------------\r\n  // Heart icon\r\n  // -------------------------\r\n  const heartIcon = document.createElement(\"img\");\r\n  heartIcon.alt = \"Wishlist\";\r\n  heartIcon.classList.add(\"wishlist-heart-icon\");\r\n\r\n  // -------------------------\r\n  // Button text\r\n  // -------------------------\r\n  const buttonText = document.createElement(\"span\");\r\n\r\n  // Add icon + text to button\r\n  addToWL.appendChild(heartIcon);\r\n  addToWL.appendChild(buttonText);\r\n\r\n  // add below Add to Basket CTA\r\n  addToBasket.insertAdjacentElement(\"beforeend\", addToWL);\r\n\r\n  // -------------------------\r\n  // Get wishlist\r\n  // -------------------------\r\n  function getWishlist() {\r\n    try {\r\n      return JSON.parse(localStorage.getItem(\"wishlist\")) || [];\r\n    } catch (error) {\r\n      console.error(\"Wishlist: Could not read wishlist\", error);\r\n      return [];\r\n    }\r\n  }\r\n\r\n  // -------------------------\r\n  // Check if current product\r\n  // already exists\r\n  // -------------------------\r\n  function isInWishlist() {\r\n    const wishlist = getWishlist();\r\n\r\n    return wishlist.some((item) =\u003e item.link === currentItemData.link);\r\n  }\r\n\r\n  // -------------------------\r\n  // Update button state\r\n  // -------------------------\r\n  function updateWishlistButton() {\r\n    if (isInWishlist()) {\r\n      heartIcon.src = heartIconSaved;\r\n      buttonText.textContent = \"SAVED TO WISH LIST\";\r\n    } else {\r\n      heartIcon.src = heartIconCTA;\r\n      buttonText.textContent = \"SAVE TO WISH LIST\";\r\n    }\r\n  }\r\n\r\n  // Set correct state when page loads\r\n  updateWishlistButton();\r\n\r\n  // -------------------------\r\n  // Toggle wishlist\r\n  // -------------------------\r\n  addToWL.addEventListener(\"click\", () =\u003e {\r\n    // Check if item has size options\r\n    const sizeOptions = document.querySelector(\".js-size-options\");\r\n    const selectedSize = document.querySelector('input[name=\"SizePresetOptions\"]:checked');\r\n\r\n    const selectedSizeNumber = selectedSize?.dataset.code;\r\n\r\n    // -------------------------\r\n    // TURN OFF SIZE CHECK CONDITION\r\n    // -------------------------\r\n\r\n    // if (sizeOptions \u0026\u0026 !selectedSize) {\r\n    //   alert(\"Please select a size first\");\r\n    //   return;\r\n    // }\r\n\r\n    // Get current wishlist\r\n    const wishlist = getWishlist();\r\n\r\n    // Check if product already exists\r\n    const existingIndex = wishlist.findIndex((item) =\u003e item.link === currentItemData.link);\r\n\r\n    // --------------------------------------------\r\n    // REMOVE FROM WISHLIST\r\n    // --------------------------------------------\r\n    if (existingIndex !== -1) {\r\n      const removedItem = wishlist[existingIndex];\r\n\r\n      // Remove from local wishlist\r\n      wishlist.splice(existingIndex, 1);\r\n      localStorage.setItem(\"wishlist\", JSON.stringify(wishlist));\r\n\r\n      updateWishlistButton();\r\n\r\n      if (typeof window.updateWishlistHeader === \"function\") {\r\n        window.updateWishlistHeader();\r\n      }\r\n\r\n      console.log(\"Removed from wishlist:\", removedItem);\r\n\r\n      return;\r\n    }\r\n\r\n    // --------------------------------------------\r\n    // ADD TO WISHLIST\r\n    // --------------------------------------------\r\n\r\n    // Remove size selected dont pass the '_'\r\n    //  const size_ID = `${selectedSizeNumber || \"\"}_${product_id}`;\r\n    const size_ID = selectedSizeNumber ? `${selectedSizeNumber}_${product_id}` : product_id;\r\n\r\n    const wishlistItem = {\r\n      ...currentItemData,\r\n      size_ID: size_ID,\r\n    };\r\n\r\n    wishlist.push(wishlistItem);\r\n\r\n    localStorage.setItem(\"wishlist\", JSON.stringify(wishlist));\r\n\r\n    updateWishlistButton();\r\n\r\n    if (typeof window.updateWishlistHeader === \"function\") {\r\n      window.updateWishlistHeader();\r\n    }\r\n\r\n    console.log(\"Added to wishlist:\", wishlistItem);\r\n\r\n    // Sync complete wishlist to Bloomreach\r\n    if (typeof window.syncWishlistToBloomreach === \"function\") {\r\n      window.syncWishlistToBloomreach();\r\n    }\r\n\r\n    // --------------------------------------------\r\n    // Exponea tracking\r\n    // --------------------------------------------\r\n    if (!window.exponea?.track) {\r\n      console.error(\"Wishlist: Exponea is unavailable.\");\r\n      return;\r\n    }\r\n\r\n    if (!product_code || !product_id) {\r\n      console.error(\"Wishlist: Missing product data.\", {\r\n        product_code,\r\n        product_id,\r\n      });\r\n      return;\r\n    }\r\n  });\r\n\r\n  // =====================================================\r\n  // ADD HEART BUTTON TO MAIN IMAGE\r\n  // =====================================================\r\n\r\n  const magicZoomMedia = document.querySelector(\"#magicZoomMedia\");\r\n\r\n  if (magicZoomMedia \u0026\u0026 !magicZoomMedia.querySelector(\".wishlist-heart-main\")) {\r\n    magicZoomMedia.style.position = \"relative\";\r\n\r\n    const mainWishlistButton = document.createElement(\"button\");\r\n    mainWishlistButton.type = \"button\";\r\n    mainWishlistButton.classList.add(\"wishlist-heart-main\");\r\n\r\n    const mainHeartIcon = document.createElement(\"img\");\r\n    mainHeartIcon.alt = \"Wishlist\";\r\n    mainHeartIcon.classList.add(\"wishlist-heart-icon\");\r\n\r\n    mainWishlistButton.appendChild(mainHeartIcon);\r\n    magicZoomMedia.appendChild(mainWishlistButton);\r\n\r\n    function updateMainWishlistHeart() {\r\n      if (isInWishlist()) {\r\n        mainHeartIcon.src = heartIconSaved;\r\n      } else {\r\n        mainHeartIcon.src = heartIconCTA;\r\n      }\r\n    }\r\n\r\n    updateMainWishlistHeart();\r\n\r\n    mainWishlistButton.addEventListener(\"click\", (event) =\u003e {\r\n      event.preventDefault();\r\n      event.stopPropagation();\r\n\r\n      addToWL.click();\r\n\r\n      updateMainWishlistHeart();\r\n    });\r\n  }\r\n\r\n  // =====================================================\r\n  // MAKE AN OUTFIT PRODUCTS WISHLIST\r\n  // =====================================================\r\n\r\n  (function () {\r\n    // --------------------------------------------\r\n    // Get wishlist\r\n    // --------------------------------------------\r\n    function getWishlist() {\r\n      try {\r\n        return JSON.parse(localStorage.getItem(\"wishlist\")) || [];\r\n      } catch (error) {\r\n        console.error(\"Wishlist: Could not read wishlist\", error);\r\n        return [];\r\n      }\r\n    }\r\n\r\n    // --------------------------------------------\r\n    // Get higher resolution image\r\n    // --------------------------------------------\r\n    function getHighResImage(image) {\r\n      if (!image?.src) return \"\";\r\n\r\n      return image.src.replace(/w=\\d+/, \"w=940\");\r\n    }\r\n\r\n    // --------------------------------------------\r\n    // Get carousel\r\n    // --------------------------------------------\r\n    const carousel = document.querySelector(\".js-product-carousel\");\r\n\r\n    if (!carousel) return;\r\n\r\n    // --------------------------------------------\r\n    // Initialise each product\r\n    // --------------------------------------------\r\n\r\n    // Set parent to position relative\r\n    document.querySelectorAll(\".js-product-carousel-item\").forEach((item) =\u003e {\r\n      item.style.position = \"relative\";\r\n    });\r\n\r\n    carousel.querySelectorAll(\".js-product-carousel-item\").forEach((product) =\u003e {\r\n      // --------------------------------------------\r\n      // Elements\r\n      // --------------------------------------------\r\n      const form = product.querySelector(\"form.js-form-quick-add\");\r\n\r\n      if (!form) return;\r\n\r\n      const productLinkElement = product.querySelector(\"a.c-featured-products__item-link\");\r\n\r\n      if (!productLinkElement) return;\r\n\r\n      const productImage = productLinkElement.querySelector(\"img\");\r\n\r\n      // --------------------------------------------\r\n      // Product data\r\n      // --------------------------------------------\r\n      const productID = form.querySelector('input[name=\"ProductID\"]')?.value;\r\n\r\n      const productName = form.dataset.name || \"\";\r\n\r\n      const productLink = productLinkElement.href || \"\";\r\n\r\n      const productImageURL = getHighResImage(productImage);\r\n\r\n      if (productLinkElement.querySelector(\".wishlist-heart_CMS\")) {\r\n        return;\r\n      }\r\n\r\n      // --------------------------------------------\r\n      // Create wishlist button\r\n      // --------------------------------------------\r\n      const wishlistButton = document.createElement(\"button\");\r\n\r\n      wishlistButton.type = \"button\";\r\n\r\n      wishlistButton.classList.add(\"wishlist-heart_CMS\");\r\n\r\n      const heartIcon = document.createElement(\"img\");\r\n\r\n      heartIcon.style.width = \"20px\";\r\n      heartIcon.style.height = \"18px\";\r\n\r\n      heartIcon.alt = \"Wishlist\";\r\n\r\n      wishlistButton.appendChild(heartIcon);\r\n\r\n      // --------------------------------------------\r\n      // Put heart over product image\r\n      // --------------------------------------------\r\n      productLinkElement.appendChild(wishlistButton);\r\n\r\n      // --------------------------------------------\r\n      // Check wishlist\r\n      // --------------------------------------------\r\n      function isInWishlist() {\r\n        const wishlist = getWishlist();\r\n\r\n        return wishlist.some((item) =\u003e item.link === productLink);\r\n      }\r\n\r\n      // --------------------------------------------\r\n      // Update heart\r\n      // --------------------------------------------\r\n      function updateHeart() {\r\n        if (isInWishlist()) {\r\n          heartIcon.src = heartIconSaved;\r\n\r\n          wishlistButton.classList.add(\"is-saved\");\r\n        } else {\r\n          heartIcon.src = heartIconCTA;\r\n\r\n          wishlistButton.classList.remove(\"is-saved\");\r\n        }\r\n      }\r\n\r\n      // Initial state\r\n      updateHeart();\r\n\r\n      // --------------------------------------------\r\n      // Toggle wishlist\r\n      // --------------------------------------------\r\n      wishlistButton.addEventListener(\"click\", (event) =\u003e {\r\n        // Stop the product link opening\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n\r\n        const wishlist = getWishlist();\r\n\r\n        // ------------------------------------------\r\n        // Get selected size\r\n        // ------------------------------------------\r\n        const sizeSelect = form.querySelector(\".js-select-size\");\r\n\r\n        let selectedSize = \"\";\r\n\r\n        if (sizeSelect \u0026\u0026 sizeSelect.value !== \"-1\") {\r\n          selectedSize = sizeSelect.options[sizeSelect.selectedIndex]?.text?.trim() || \"\";\r\n        }\r\n\r\n        // ------------------------------------------\r\n        // Find existing product\r\n        // ------------------------------------------\r\n        const existingIndex = wishlist.findIndex((item) =\u003e item.link === productLink);\r\n\r\n        // ==========================================\r\n        // REMOVE\r\n        // ==========================================\r\n        if (existingIndex !== -1) {\r\n          const removedItem = wishlist[existingIndex];\r\n\r\n          wishlist.splice(existingIndex, 1);\r\n\r\n          localStorage.setItem(\"wishlist\", JSON.stringify(wishlist));\r\n\r\n          updateHeart();\r\n\r\n          // Update header\r\n          if (typeof window.updateWishlistHeader === \"function\") {\r\n            window.updateWishlistHeader();\r\n          }\r\n\r\n          // Sync Bloomreach\r\n          if (typeof window.syncWishlistToBloomreach === \"function\") {\r\n            window.syncWishlistToBloomreach();\r\n          }\r\n\r\n          console.log(\"Removed suggested product:\", removedItem);\r\n\r\n          return;\r\n        }\r\n\r\n        // ==========================================\r\n        // ADD\r\n        // ==========================================\r\n\r\n        const priceContainer = product.querySelector(\".c-featured-products__item-price\");\r\n\r\n        const originalPrice = priceContainer?.querySelector(\"s\")?.textContent?.trim() || \"\";\r\n\r\n        const salePrice =\r\n          priceContainer\r\n            ?.querySelector(\"span\")\r\n            ?.textContent?.replace(/- Save.*$/i, \"\")\r\n            ?.trim() || \"\";\r\n\r\n        const size_ID = `${selectedSize}${productID}`;\r\n\r\n        const wishlistItem = {\r\n          image: productImageURL,\r\n          title: productName,\r\n          link: productLink,\r\n          originalPrice: originalPrice,\r\n          salePrice: salePrice,\r\n          product_id: productID,\r\n          size_ID: size_ID,\r\n        };\r\n\r\n        wishlist.push(wishlistItem);\r\n\r\n        localStorage.setItem(\"wishlist\", JSON.stringify(wishlist));\r\n\r\n        updateHeart();\r\n\r\n        // Update header\r\n        if (typeof window.updateWishlistHeader === \"function\") {\r\n          window.updateWishlistHeader();\r\n        }\r\n\r\n        // Sync Bloomreach\r\n        if (typeof window.syncWishlistToBloomreach === \"function\") {\r\n          window.syncWishlistToBloomreach();\r\n        }\r\n\r\n        console.log(\"Added suggested product:\", wishlistItem);\r\n      });\r\n    });\r\n  })();\r\n};\r\n","trigger":{"include_pages":[{"url":"/i/","type":"contains"}],"exclude_pages":null},"_id":"6a32bb2ce14952d384183126"},{"uses_overlay":false,"type":"js","parametrized_definition":"/**\r\n * buttonCssSelector: button\r\n * eventName: button_clicked\r\n * buttonName: Click here\r\n */\r\n \r\n const categoryInfo = document.querySelector(\"#main-container \u003e div \u003e div.plp-header.mt-sm-nhalf \u003e div \u003e h1\");\r\n \r\n const categoryName = categoryInfo.innerText;\r\n\r\n\r\n\r\n$(\".plp-header-links a\").click(function (elem) {\r\n    exponea.track(\"Clicked on PLP Size Link\", {\r\n        button_name: \"Size Filters\",\r\n        Category: categoryName\r\n        \r\n    });\r\n});","trigger":{"include_pages":[{"url":"/p/","type":"contains"}],"exclude_pages":[{"url":"/i/","type":"contains"}]},"_id":"6a5f917eda496b1dc4ec5a69"},{"uses_overlay":false,"type":"js","parametrized_definition":"// Global triggers for Monetate\r\nwindow.triggerHeader = function () {\r\n  console.log(\"Monetate triggered: Header WishList Bloomreach TAG\");\r\n\r\n  const MAX_WISHLIST_ITEMS = 50;\r\n\r\n  window.updateWishlistHeader = function () {\r\n    // Get wishlist from localStorage\r\n    let wishlist = [];\r\n\r\n    try {\r\n      wishlist = JSON.parse(localStorage.getItem(\"wishlist\") || \"[]\");\r\n    } catch (error) {\r\n      console.error(\"Could not parse wishlist:\", error);\r\n    }\r\n\r\n    const wishlistCount = wishlist.length;\r\n\r\n    if (wishlistCount \u003e MAX_WISHLIST_ITEMS) {\r\n      //  console.log(\"reached max items: \", MAX_WISHLIST_ITEMS, \" \", wishlistCount);\r\n      return;\r\n    }\r\n\r\n    // Prevent wishlist being added\r\n\r\n    let wishlistLink = document.querySelector(\".wishlist-link\");\r\n\r\n    if (!wishlistLink) {\r\n      const signInIconBtn = document.querySelector(\".icon-account\");\r\n\r\n      if (signInIconBtn) {\r\n        const signInListItem = signInIconBtn.closest(\"li\");\r\n\r\n        if (signInListItem) {\r\n          // Create wishlist \u003cli\u003e\r\n          const wishlistListItem = document.createElement(\"li\");\r\n        //  wishlistListItem.classList.add(\"d-none\", \"d-md-flex\");\r\n\r\n          // Create wishlist \u003ca\u003e\r\n          const wishlistLink = document.createElement(\"a\");\r\n\r\n          wishlistLink.href = \"https://www.weirdfish.co.uk/my-wishlist\";\r\n          wishlistLink.className = \"wishlist-link\";\r\n          wishlistLink.setAttribute(\"aria-label\", `Wishlist (${wishlistCount} items)`);\r\n\r\n          // Create heart image\r\n          const heartImage = document.createElement(\"img\");\r\n\r\n          heartImage.src = \"https://brxcdn.com/exp-app-storage/803561c6-2959-11e9-8626-0a580a201a1c/media/original/02205514-9659-11f1-98df-4e4784a89a9d\";\r\n\r\n          heartImage.alt = \"\";\r\n          heartImage.setAttribute(\"aria-hidden\", \"true\");\r\n          heartImage.classList.add(\"heartImage\");\r\n\r\n          // Wishlist text\r\n          const wishlistText = document.createElement(\"span\");\r\n\r\n          wishlistText.className = \"hidden-xs\";\r\n          wishlistText.textContent = \"Wishlist\";\r\n          wishlistText.setAttribute(\"aria-hidden\", \"true\");\r\n\r\n          // Add heart and text\r\n          wishlistLink.appendChild(heartImage);\r\n          wishlistLink.appendChild(wishlistText);\r\n\r\n          // ONLY show counter if there are wishlist items\r\n\r\n          if (wishlistCount \u003e 0) {\r\n            const wishlistCounter = document.createElement(\"span\");\r\n\r\n            wishlistCounter.classList.add(\"wishlist-count\");\r\n            wishlistCounter.textContent = wishlistCount;\r\n\r\n            //  console.log(\"Wishlist counter:\", wishlistCounter);\r\n\r\n            wishlistLink.appendChild(wishlistCounter);\r\n          }\r\n\r\n          // Screen reader text\r\n          const srText = document.createElement(\"span\");\r\n\r\n          srText.className = \"sr-only\";\r\n          srText.textContent = \"Wishlist\";\r\n\r\n          wishlistLink.appendChild(srText);\r\n\r\n          // Add link to \u003cli\u003e\r\n          wishlistListItem.appendChild(wishlistLink);\r\n\r\n          // Insert before sign-in \u003cli\u003e\r\n          signInListItem.insertAdjacentElement(\"beforebegin\", wishlistListItem);\r\n\r\n          //  console.log(\"Wishlist link added before sign in icon\");\r\n        } else {\r\n          console.warn(\"Could not find the \u003cli\u003e containing the account icon\");\r\n        }\r\n      } else {\r\n        console.warn(\"Could not find .icon-account\");\r\n      }\r\n    }\r\n\r\n    // UPDATE EXISTING COUNTER\r\n\r\n    if (wishlistLink) {\r\n      let wishlistCounter = wishlistLink.querySelector(\".wishlist-count\");\r\n\r\n      if (wishlistCount \u003e 0) {\r\n        // Create counter if it doesn't already exist\r\n        if (!wishlistCounter) {\r\n          wishlistCounter = document.createElement(\"span\");\r\n          wishlistCounter.className = \"wishlist-count\";\r\n          wishlistLink.appendChild(wishlistCounter);\r\n        }\r\n\r\n        // Update the number\r\n        wishlistCounter.textContent = wishlistCount;\r\n      } else {\r\n        // Remove counter if wishlist is empty\r\n        if (wishlistCounter) {\r\n          wishlistCounter.remove();\r\n        }\r\n      }\r\n    }\r\n\r\n    // Inject stylesheet\r\n    if (!document.querySelector(\"#wishlist-styles\")) {\r\n      const style = document.createElement(\"style\");\r\n\r\n      style.id = \"wishlist-styles\";\r\n\r\n      style.textContent = `\r\n    .wishlist-link {\r\n  position: relative;\r\n}\r\n\r\n.wishlist-count {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  position: absolute;\r\n  top: -6px;\r\n  right: -3px;\r\n  width: 18px;\r\n  height: 18px;\r\n  background-color: #d8e3e9;\r\n  border-radius: 50%;\r\n  border: none;\r\n  transform: scale(0.9);\r\n  font-size: 11px;\r\n  line-height: 1;\r\n}\r\n\r\n.heartImage {\r\n  height: 28px;\r\n  padding-bottom: 5px;\r\n}\r\n\r\n@media (max-width: 768px) {  \r\n\r\n.heartImage {\r\n  height: 26px;\r\n  padding-bottom: 0px;\r\n}\r\n}\r\n\r\n\r\n/*unhides from mobile menu (testing only) */\r\n.heartImage_mobileMenu {\r\n\tdisplay: flex !important;\r\n    align-items: center;\r\n    margin-top: 10px;\r\n\t\r\n}\r\n\r\n.heartImage_mobileMenu img {\r\n  padding-left: 15px;\r\n  margin-top: 10px;\r\n}\r\n\r\n  `;\r\n\r\n      document.head.appendChild(style);\r\n    }\r\n  }; // close update wishlist func\r\n\r\n  window.updateWishlistHeader();\r\n\r\n  window.syncWishlistToBloomreach = function () {\r\n    const wishlist = JSON.parse(localStorage.getItem(\"wishlist\") || \"[]\");\r\n\r\n    const wishlistIDs = wishlist.map((item) =\u003e item.size_ID).filter(Boolean);\r\n\r\n    //  console.log(\"Syncing wishlist to Bloomreach:\", wishlistIDs);\r\n\r\n    if (!window.exponea?.update) {\r\n      console.error(\"Wishlist: Exponea update unavailable.\");\r\n      return;\r\n    }\r\n\r\n    exponea.update({\r\n      wishList_List: wishlistIDs,\r\n    });\r\n  };\r\n};\r\n","trigger":{"include_pages":[{"type":"any"}],"exclude_pages":null},"_id":"6a7c5d62f396168efe591d27"},{"uses_overlay":false,"type":"js","parametrized_definition":"window.triggerPLP = function () {\r\n  console.log(\"Monetate triggered: PLP WishList Bloomreach TAG\");\r\n  \r\n  \r\n(function () {\r\n  // -------------------------\r\n  // Heart images\r\n  // -------------------------\r\n\r\n  const EMPTY_HEART = \"https://brxcdn.com/exp-app-storage/803561c6-2959-11e9-8626-0a580a201a1c/media/original/043d7210-aaa8-11f1-bc5d-be097e5df4b2\";\r\n\r\n  const SELECTED_HEART = \"https://brxcdn.com/exp-app-storage/803561c6-2959-11e9-8626-0a580a201a1c/media/original/b53cffa0-9b16-11f1-8b05-920eed029dd5\";\r\n\r\n  // -------------------------\r\n  // Initialise PLP hearts\r\n  // -------------------------\r\n\r\n  document.querySelectorAll(\".js-product.plp-product\").forEach((product) =\u003e {\r\n    const imageParent = product.querySelector(\".plp-product-thumb\");\r\n\r\n    if (!imageParent) return;\r\n\r\n    // Prevent duplicates\r\n    if (imageParent.querySelector(\".wishlist-heart_CMS\")) return;\r\n\r\n    // -------------------------\r\n    // Get product data\r\n    // -------------------------\r\n\r\n    const productId = product.dataset.productId || \"\";\r\n\r\n    const productCode = product.dataset.code || \"\";\r\n\r\n    const productTitle = product.dataset.name || \"\";\r\n\r\n    const productPrice = parseFloat(product.dataset.price) || 0;\r\n\r\n    // Product link\r\n    const productLink = imageParent.querySelector(\"a\")?.href || product.querySelector(\"a\")?.href || \"\";\r\n\r\n    // Product image\r\n    const productImage = imageParent.querySelector(\"img\")?.src.replace(/w=\\d+/, \"w=940\") || \"\";\r\n\r\n    if (!productId) {\r\n      console.log(\"Wishlist: No product ID found\", product);\r\n\r\n      return;\r\n    }\r\n\r\n    // -------------------------\r\n    // Create heart button\r\n    // -------------------------\r\n\r\n    const heartButton = document.createElement(\"button\");\r\n\r\n    heartButton.classList.add(\"wishlist-heart_CMS\");\r\n\r\n    heartButton.type = \"button\";\r\n\r\n    // -------------------------\r\n    // Create heart image\r\n    // -------------------------\r\n\r\n    const heartImage = document.createElement(\"img\");\r\n\r\n    heartImage.src = EMPTY_HEART;\r\n\r\n    heartImage.style.width = \"20px\";\r\n    heartImage.style.height = \"18px\";\r\n\r\n    heartButton.appendChild(heartImage);\r\n\r\n    imageParent.style.position = \"relative\";\r\n\r\n    imageParent.appendChild(heartButton);\r\n\r\n    // -------------------------\r\n    // Check localStorage\r\n    // -------------------------\r\n\r\n    const wishlist = JSON.parse(localStorage.getItem(\"wishlist\") || \"[]\");\r\n\r\n    const isInWishlist = wishlist.some((item) =\u003e String(item.id) === String(productId));\r\n\r\n    // -------------------------\r\n    // Set initial heart state\r\n    // -------------------------\r\n\r\n    if (isInWishlist) {\r\n      heartButton.classList.add(\"active\");\r\n\r\n      heartImage.src = SELECTED_HEART;\r\n    }\r\n\r\n    // -------------------------\r\n    // Heart click\r\n    // -------------------------\r\n\r\n    heartButton.addEventListener(\"click\", (event) =\u003e {\r\n      event.preventDefault();\r\n      event.stopPropagation();\r\n\r\n      // Get latest wishlist\r\n      let wishlist = JSON.parse(localStorage.getItem(\"wishlist\") || \"[]\");\r\n\r\n      // Find product\r\n      const existingIndex = wishlist.findIndex((item) =\u003e String(item.id) === String(productId));\r\n\r\n      // -------------------------\r\n      // REMOVE\r\n      // -------------------------\r\n\r\n      if (existingIndex !== -1) {\r\n        wishlist.splice(existingIndex, 1);\r\n\r\n        heartButton.classList.remove(\"active\");\r\n\r\n        heartImage.src = EMPTY_HEART;\r\n\r\n        // -------------------------\r\n        // ADD\r\n        // -------------------------\r\n      } else {\r\n        wishlist.push({\r\n          id: productId,\r\n          code: productCode,\r\n          title: productTitle,\r\n          image: productImage,\r\n          link: productLink,\r\n          originalPrice: productPrice,\r\n          salePrice: productPrice,\r\n          size_ID: productId,\r\n        });\r\n\r\n        heartButton.classList.add(\"active\");\r\n\r\n        heartImage.src = SELECTED_HEART;\r\n      }\r\n\r\n      // -------------------------\r\n      // Save localStorage\r\n      // -------------------------\r\n\r\n      localStorage.setItem(\"wishlist\", JSON.stringify(wishlist));\r\n\r\n      // -------------------------\r\n      // Update header\r\n      // -------------------------\r\n\r\n      if (typeof window.updateWishlistHeader === \"function\") {\r\n        window.updateWishlistHeader();\r\n      }\r\n\r\n      // -------------------------\r\n      // Sync Bloomreach\r\n      // -------------------------\r\n\r\n      if (typeof window.syncWishlistToBloomreach === \"function\") {\r\n        window.syncWishlistToBloomreach();\r\n      }\r\n    });\r\n  });\r\n})();\r\n\r\n  \r\n};\r\n\r\n","trigger":{"include_pages":[{"url":"/p/","type":"contains"}],"exclude_pages":[{"url":"/i/","type":"contains"}]},"_id":"6a9e9fcb1399b0bc106356e5"},{"uses_overlay":false,"type":"js","parametrized_definition":"window.triggerMyAccount = function () {\r\n  console.log(\"Monetate triggered: PDP WishList Bloomreach TAG\");\r\n\r\n\r\n// styling\r\ndocument.head.insertAdjacentHTML(\r\n  \"beforeend\",\r\n  `\r\n    \u003cstyle\u003e\r\n      .addToWL {\r\n        display: block;\r\n        width: 100%;\r\n        margin-top: 10px;\r\n        border: 1px inherit solid;\r\n        padding: 2px 5px;\r\n      }\r\n    \u003c/style\u003e\r\n  `\r\n);\r\n\r\n// add wish list to list of options to my account\r\nconst myAcccountUL = document.querySelector(\"#main-container \u003e div \u003e div.acc-layout.mb-md-3 \u003e div.acc-layout__nav.mb-2.mb-md-0 \u003e ul\");\r\n\r\n// Find the Order History link\r\nconst orderHistoryLink = myAcccountUL.querySelector('a[href=\"/account/orderhistory\"]');\r\n\r\nif (orderHistoryLink) {\r\n  // Get the LI containing Order History\r\n  const orderHistoryLI = orderHistoryLink.closest(\"li\");\r\n\r\n  // Clone it\r\n  const newItem = orderHistoryLI.cloneNode(true);\r\n  newItem.classList.remove(\"is-selected\");\r\n\r\n  const wishLishHeart = newItem.querySelector(\"span.fi\");\r\n  const WlText = newItem.querySelector(\".allow-underline\");\r\n  const wlLink = newItem.querySelector(\"a\");\r\n  const heartIcon = \"https://brxcdn.com/exp-app-storage/803561c6-2959-11e9-8626-0a580a201a1c/media/original/02205514-9659-11f1-98df-4e4784a89a9d\";\r\n  const heartIconImage = document.createElement(\"img\");\r\n\r\n  heartIconImage.src = heartIcon;\r\n  heartIconImage.style = \"height:17px\";\r\n\r\n  if (wishLishHeart) {\r\n    wishLishHeart.className = \"fi mr-2 d-flex\";\r\n  }\r\n\r\n  wishLishHeart.appendChild(heartIconImage);\r\n\r\n  if (WlText) {\r\n    WlText.textContent = \"My Wish List\";\r\n  }\r\n\r\n  if (wlLink) {\r\n    wlLink.href = \"/my-wishlist?prv=1\";\r\n  }\r\n\r\n  // Insert wishlist immediately AFTER Order History\r\n  orderHistoryLI.insertAdjacentElement(\"beforebegin\", newItem);\r\n}\r\n\r\n// add wish list tile\r\nconst myAccountTiles = document.querySelector(\"#main-container \u003e div \u003e div.acc-layout.mb-md-3 \u003e div.acc-layout__body \u003e div \u003e div \u003e a:nth-child(6)\");\r\n\r\nif (myAccountTiles) {\r\n  // Change link\r\n  myAccountTiles.href = \"/my-wishlist?prv=1\";\r\n\r\n  // Change the icon\r\n  const icon = myAccountTiles.querySelector(\".fi.flaticon-love-wf-tile\");\r\n\r\n  if (icon) {\r\n    icon.outerHTML = `\r\n      \u003cimg\r\n        src=\"https://brxcdn.com/exp-app-storage/803561c6-2959-11e9-8626-0a580a201a1c/media/original/9e0f8ed6-a86f-11f1-933f-cea23c30b003\"\r\n        alt=\"\"\r\n        class=\"custom-account-icon\"\r\n        style=\"height:40px; margin:14px\"\r\n      \u003e\r\n    `;\r\n  }\r\n\r\n  // Change the title\r\n  const text = myAccountTiles.querySelector(\"strong\");\r\n\r\n  if (text) {\r\n    text.textContent = \"My Wish List\";\r\n  }\r\n\r\n  // Add description\r\n  if (!myAccountTiles.querySelector(\".wishlist-description\")) {\r\n    myAccountTiles.insertAdjacentHTML(\"beforeend\", `\u003csmall class=\"mt-2\"\u003eSaved items will be displayed on this page.\u003c/small\u003e`);\r\n  }\r\n}\r\n\r\n \r\n};\r\n\r\n\r\n","trigger":{"include_pages":[{"url":"account","type":"contains"}],"exclude_pages":null},"_id":"6a44f1ee745a67ddc2cf4e74"}],"vars":{"data":[]}}