mmRequestCallbacks[1]({"Scripts":[],"Campaigns":[{"Name":"DC_CTA_button_click_infinity_integration","Type":"ABnMVT","CSName":"cs_92496","HighLevelApiVersion":"1.26","PagePrefix":"MDkyNDk2","Scripts":[{"Name":"Rendering","Type":"script","Attrs":{"type":"text/javascript"},"Data":"var config = {\n    \"selectorsToHide\": \"\",\n    \"useSecondRequest\": true,\n    \"element1\": {\n        \"includedUrls\": [\n            \"https://www.visitdubai.com/en/whats-on/dubai-events-calendar/*\"\n        ],\n        \"excludedUrls\": [],\n        \"elements\": []\n    },\n    \"elements\": null\n};\n\ncampaign.scope.getConditions = getConditions;\n\nif (config.useSecondRequest) {\n    renderer.hide(config.selectorsToHide, \"ucb\");\n    when(isVisitorQualified())\n        .done(function () {\n            renderer.getContent().always(function () {\n                render();\n                renderer.show(\"ucb\");\n            })\n        })\n        .fail(function () {\n            renderer.show(\"ucb\");\n        });\n} else {\n    render();\n}\n\nfunction render() {\n    renderCss();\n    renderJs();\n    campaign.events.trigger(\"lastRequest\");\n}\n\nfunction renderJs() {\n    var elementsToRender = campaign.getElements();\n    for (var i in elementsToRender) {\n        if (elementsToRender.hasOwnProperty(i)) {\n            var element = elementsToRender[i];\n            renderer.runVariantJs(element);\n            initContentSeen(element.Name);\n        }\n    }\n}\n\nfunction renderCss() {\n    var styles = campaign.getStyles();\n    if (styles.length) {\n        dom.addCss(styles);\n    }\n}\n\nfunction isVisitorQualified() {\n    if (window.isCampaignDesignMode) {\n        return true;\n    }\n    var rules = campaign.scope.qualificationRules || [];\n    var results = [];\n    for (var i = 0; i < rules.length; i++) {\n        var result = rules[i]();\n        if (typeof result.then !== \"function\") {\n            result = Deferred()[result ? \"resolve\" : \"reject\"]().promise();\n        }\n        results.push(result);\n    }\n    return when.apply(this, results);\n}\n\nfunction initContentSeen (name) {\n    spa.when(getConditions(name)).then(function (campaign) {\n        campaign.sendContentSeen();\n        var campaignName = campaign.getName();\n        window.MMExperience = window.MMExperience || {};\n        window.MMExperience[campaignName] = campaign.getExperience();\n    }.bind(this, campaign));\n}\n\nfunction getConditions(name) {\n    var elementConfig = config[name];\n    if (!elementConfig) {\n        return [];\n    }\n    return createConditions(elementConfig.elements, elementConfig.includedUrls, elementConfig.excludedUrls);\n}\n\nfunction createConditions(elements, includedUrls, excludedUrls) {\n    var i, conditions = [];\n    elements = elements || [];\n    includedUrls = includedUrls || [];\n    excludedUrls = excludedUrls || [];\n\n    for (i = 0; i < elements.length; i++) {\n        conditions.push(spa.conditions.element(elements[i]));\n    }\n\n    if (includedUrls.length > 0 && excludedUrls.length === 0) {\n        conditions.push(spa.conditions.location.apply(null, includedUrls));\n    } else if (includedUrls.length > 0 && excludedUrls.length > 0) {\n        conditions.push(spa.conditions.location.apply(null, includedUrls).not.apply(null, excludedUrls));\n    }\n\n    return conditions;\n}","Order":5999,"HighLevelApiVersion":"1.26"},{"Name":"Google Universal","Type":"script","Attrs":{"type":"text/javascript"},"Data":"var config = {\n    \"trackerName\": \"tealium_0\",\n    \"customDimensions\": \"34\",\n    \"persist\": false\n}\ntry { if (window.self !== window.top) { return; } }\ncatch (e) { return; }\ncampaign.events.contentSeen(function () {\n    if (!isGenerated()) { return }\n    waitForGA(function () {\n        window[window['GoogleAnalyticsObject']](function(tracker) {\n            if (config.customDimensions) {\n              setDimension(tracker);\n            }\n            sendEvent(tracker);\n        });\n    });\n});\n\nfunction isGenerated() {\n    var e = campaign.getExperience();\n    for (var k in e) {\n        if(e.hasOwnProperty(k)) return true;\n    }\n    return false;\n}\n\nfunction waitForGA(callback) {\n    var timeout = false;\n    when(function () {\n        return window[window['GoogleAnalyticsObject']];\n    }, function () {\n        return timeout;\n    }).done(function () {\n        callback();\n    });\n    setTimeout(function () {\n        timeout = true;\n    }, 10e3);\n}\n\nfunction setDimension(tracker) {\n    var defaultTrackerName = tracker ? tracker.get('name') : getDefaultTrackerName();\n    var set = (config.trackerName ? config.trackerName : defaultTrackerName) + '.set';\n\n    var campaignExperience = campaign.getName() + '=' + getExperienceData();\n    var experienceValue = config.persist ? combineExperience(campaignExperience) : campaignExperience;\n\n    window[window['GoogleAnalyticsObject']](set, 'dimension' + config.customDimensions, experienceValue);\n}\n\nfunction combineExperience(experience) {\n    var cookieName = 'mm-ga-' + config.customDimensions;\n    var prevValue = cookies.get(cookieName);\n    var dataArray = prevValue ? JSON.parse(prevValue) : [];\n\n    var index = -1;\n    for (var i = dataArray.length; i--;) {\n        if (new RegExp('^(' + campaign.getName() + ')' + '\\=').test(dataArray[i])) {\n            index = i;\n            break;\n        }\n    }\n    if (index === -1) {\n        dataArray.push(experience);\n    } else {\n        dataArray[index] = experience;\n    }\n\n    while (dataArray.join(',').length > 150 && dataArray.length > 0) {\n        dataArray.shift();\n    }\n\n    cookies.set(cookieName, JSON.stringify(dataArray), {\n        expires: 365\n    });\n\n    return dataArray.join(',');\n}\n\nfunction sendEvent(tracker) {\n    var defaultTrackerName = tracker ? tracker.get('name') : getDefaultTrackerName();\n    var send = (config.trackerName ? config.trackerName : defaultTrackerName) + '.send';\n\n    var category = 'Maxymiser' + (isProduction() ? '' : ' QA');\n    var action = campaign.getName();\n\n    window[window['GoogleAnalyticsObject']](send, 'event', category, action, getExperienceData(), {'nonInteraction': 1});\n}\n\nfunction getDefaultTrackerName() {\n    return window[window['GoogleAnalyticsObject']].getAll()[0].get('name');\n}\n\nfunction getExperienceData() {\n    var experience = campaign.getExperience();\n    var variants = [];\n    for (var element in experience) {\n        variants.push(element + ':' + experience[element]);\n    }\n\n    return variants.join('|');\n}\n\nfunction isProduction() {\n    if (location.search.toLowerCase().indexOf('mmcore.') > -1) {\n        return false;\n    }\n\n    function removeExpiration(v) {\n        return v ? v.replace(/^\\d\\|/, '') : '';\n    }\n\n    var storage = mmsystem.getConfig().storageType;\n    if (storage === 'cookie-key-value' || storage === 'cookie-key-value-secure') {\n        if (/mmapi.p.cfgid/i.test(document.cookie) || /mmapi.p.un/i.test(document.cookie)) {\n            return false;\n        } else {\n            return true;\n        }\n    }\n    var mmcoreP = readCookieStorage('mmcore.store.p.') || {};\n    var mmcoreS = readCookieStorage('mmcore.store.s.') || {};\n    var mmapiP = readCookieStorage('mmapi.store.p.') || {};\n    var mmapiS = readCookieStorage('mmapi.store.s.') || {};\n    var storageTypes = [mmcoreP, mmcoreS, mmapiP, mmapiS];\n    var storageKeys = {\n        'mmparams.p': 1,\n        'mmparams.d': 1\n    };\n    var utils = {\n        'un': 1,\n        'cfgID': 1,\n        'pruh': 1\n    };\n    for (var l = storageTypes.length; l--;) {\n        var storageType = storageTypes[l];\n        for (var storageKey in (storageKeys || {})) {\n            for (var util in (utils || {})) {\n                if ((storageType[storageKey] || {})[util]) {\n                    return false;\n                }\n            }\n        }\n    }\n\n    function readCookieStorage(name) {\n        var res = {},\n            whole = '',\n            i = 0,\n            chunk;\n        while ((chunk = getCookie(name + i++))) {\n            whole += chunk;\n        }\n        whole = decodeURIComponent(whole);\n        try {\n            res = JSON.parse(whole);\n        } catch (e) {\n        }\n        return res;\n    }\n\n    function getCookie(name) {\n        var r = new RegExp('(?:^|; )' + encodeURIComponent(name).replace(/([.$?*|{}()\\[\\]\\\\\\/+^])/g, '\\\\$1') + '=([^;]+)');\n        var value = (document.cookie.match(r) || ['', ''])[1];\n        return value;\n    }\n\n    return true;\n}\n","Order":5000,"HighLevelApiVersion":"1.26"},{"Name":"C1953065492","Type":"script","Attrs":{"type":"text/javascript"},"Data":"/*configuration block begin*/\nvar config = {\n\t\"actionName\": \"Click Action 99\",\n\t\"actionType\": \"trackclicks\",\n\t\"actionInfo\": [\n\t\t{\n\t\t\t\"selector\": \".btn.btn-primary.btn-primary--large\",\n\t\t\t\"data\": {\n\t\t\t\t\"value\": 1,\n\t\t\t\t\"attr\": \"CTA-clicks\"\n\t\t\t}\n\t\t}\n\t],\n\t\"includedUrls\": [\n\t\t\"https://www.visitdubai.com/en/whats-on/dubai-events-calendar/new-year-in-dubai\",\n\t\t\"https://www.visitdubai.com/en/whats-on/dubai-events-calendar/new-year-in-dubai/\"\n\t],\n\t\"excludedUrls\": [],\n\t\"elements\": []\n};\n/*configuration block end*/\n\nfunction createConditions(elements, includedUrls, excludedUrls) {\n    var i, conditions = [];\n    elements = elements || [];\n    includedUrls = includedUrls || [];\n    excludedUrls = excludedUrls || [];\n\n    for(i = 0; i < elements.length; i++) {\n        conditions.push(spa.conditions.element(elements[i]));\n        }\n\n    if (includedUrls.length > 0 && excludedUrls.length === 0) {\n        conditions.push(spa.conditions.location.apply(null, includedUrls));\n    } else if (includedUrls.length > 0 && excludedUrls.length > 0) {\n        conditions.push(spa.conditions.location.apply(null, includedUrls).not.apply(null, excludedUrls));\n}\n\n    return conditions;\n}\n\n\nspa.when(createConditions(config.elements, config.includedUrls, config.excludedUrls)).then(function() {\nconfig.actionInfo.forEach(function(actionInfo) {\n        spa.actions.trackClicks(actionInfo.selector, {\n            name: config.actionName,\n            value: actionInfo.data.value,\n            attribute: actionInfo.data.attr\n        });\n    })\n});\n","Order":4000,"HighLevelApiVersion":"1.26"},{"Name":"Oracle Infinity","Type":"script","Attrs":{"type":"text/javascript"},"Data":"try { if (window.self !== window.top || window.isCampaignDesignMode) { return; } }\ncatch (e) { return; }\n/* global site campaign when events */\n\n/**\n * Creates a site-scope cache to store campaigns on the current page\n */\nsite.scope.infinityPushCache = site.scope.infinityPushCache || {\n\tcampaigns: [],\n\telements: [],\n\tvariants: [],\n\tsending: false\n}\n\n// when the campaign has made/received its decision\ncampaign.events.contentSeen(function () {\n\t// integration should run only once per-campaign / per-page to avoid duplciation\n\tif (campaign.scope.infinityCampaignEventSent) {\n\t\treturn;\n\t}\n\tcampaign.scope.infinityCampaignEventSent = true;\n\t// wait for the Infinity tag to be available\n\taddCampaignToCache(campaign);\n\n\t// only one campaign needs to send a tracking event for each synchronous CG Response\n\tif (!site.scope.infinityPushCache.sending) {\n\t\tsite.scope.infinityPushCache.sending = true;\n\t\twaitForInfinity().then(send, function(){\n\t\t\tsite.scope.infinityPushCache.sending = false;\n\t\t});\n\t}\n});\n\n/**\n * @returns {Promise} resolves when Infinity library and modules are defined. Rejects 10 seconds after DOM ready.\n */\nfunction waitForInfinity(){\n\tvar timeout = false;\n\tevents.domReady(function () {\n\t\tsetTimeout(function () {\n\t\t\ttimeout = true;\n\t\t}, 10e3);\n\t});\n\n\treturn when(function() {\n\t\treturn window.ORA && window.ORA.view && window.ORA.analytics && window.ORA.analytics.addMutation;\n\t}, function () {\n\t\treturn timeout;\n\t});\n}\n\n/**\n * @description adds (or overwrites) mutation, and sends event to Infinity\n */\nfunction send(){\n\taddMutation();\n\tsetTimeout(function(){\n\t\t// log view as \"wt.dl\" = 80\n\t\t// use 'click' not 'view'. 'view' affects page-per-session calculations.\n\t\twindow.ORA.click({\n\t\t\tdata: {\n\t\t\t\t'wt.dl': 80\n\t\t\t}\n\t\t});\n\t\tsite.scope.infinityPushCache.sending = false;\n\t});\n}\n\n/**\n *\n * @param {Object} campaign\n * @description appends campaign name, element(s), variant(s) to a site-scope cache\n */\nfunction addCampaignToCache(campaign){\n\t// gets experience object {Element1: VariantName [,ElementN: VariantName]}\n\tvar experience = campaign.getExperience();\n\t// gets element names as array [\"Element1\" [,\"ElementN\"]]\n\t// we sort the elements to ensure consistancy in reporting\n\tvar elements = Object.keys(experience).sort();\n\t// gets variant names for each element as array [\"VariantName\" [, \"VariantName\"]]\n\tvar variants = elements.map(function (element) {\n\t\treturn experience[element];\n\t});\n\t// getes an array filled with the campaign name, n times, where n = number of elements\n\tvar campaigns = elements.map(function () {\n\t\treturn campaign.getName();\n\t});\n\n\t// append these values to any existing campaigns on this page\n\tArray.prototype.push.apply(site.scope.infinityPushCache.campaigns, campaigns);\n\tArray.prototype.push.apply(site.scope.infinityPushCache.elements, elements);\n\tArray.prototype.push.apply(site.scope.infinityPushCache.variants, variants);\n}\n\n\n/**\n * @description adds a mutation to Infinity pipeline so that each subsequent request\n * on that page contains Maxymiser campaign information\n */\nfunction addMutation() {\n\tvar mutation = function (msg) {\n\t\tif (!site.scope.infinityPushCache.campaigns.length) {\n\t\t\treturn;\n\t\t}\n\t\tmsg.setParam('ora.maxymiser_campaign', site.scope.infinityPushCache.campaigns.join(';').toLowerCase());\n\t\tmsg.setParam('ora.maxymiser_elements', site.scope.infinityPushCache.elements.join(';').toLowerCase());\n\t\tmsg.setParam('ora.maxymiser_variants', site.scope.infinityPushCache.variants.join(';').toLowerCase());\n\t\tmsg.setParam('ora.maxymiser_production', isProduction() ? 1 : 0);\n\t};\n\twindow.ORA.analytics.addMutation('maxymiser-campaign-push', mutation);\n}\n\n/**\n * @returns {Boolean} `true` when user is not internal sandbox/qa mode\n */\nfunction isProduction() {\n\tif (location.search.toLowerCase().indexOf('mmcore.') > -1) {\n\t\treturn false;\n\t}\n\tif (window.isCampaignDesignMode) {\n\t\treturn false;\n\t}\n\n\tvar storage = window.mmsystem.getConfig().storageType;\n\tif (storage === 'cookie-key-value' || storage === 'cookie-key-value-secure') {\n\t\tif (/mmapi.p.cfgid/i.test(document.cookie) || /mmapi.p.un/i.test(document.cookie)) {\n\t\t\treturn false;\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\tvar mmcoreP = readCookieStorage('mmcore.store.p.') || {};\n\tvar mmcoreS = readCookieStorage('mmcore.store.s.') || {};\n\tvar mmapiP = readCookieStorage('mmapi.store.p.') || {};\n\tvar mmapiS = readCookieStorage('mmapi.store.s.') || {};\n\tvar storageTypes = [mmcoreP, mmcoreS, mmapiP, mmapiS];\n\tvar storageKeys = {\n\t\t'mmparams.p': 1,\n\t\t'mmparams.d': 1\n\t};\n\tvar utils = {\n\t\t'un': 1,\n\t\t'cfgID': 1,\n\t\t'pruh': 1\n\t};\n\tfor (var l = storageTypes.length; l--;) {\n\t\tvar storageType = storageTypes[l];\n\t\tfor (var storageKey in (storageKeys || {})) {\n\t\t\tfor (var util in (utils || {})) {\n\t\t\t\tif ((storageType[storageKey] || {})[util]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction readCookieStorage(name) {\n\t\tvar res = {},\n\t\t\twhole = '',\n\t\t\ti = 0,\n\t\t\tchunk;\n\t\twhile ((chunk = getCookie(name + i++))) {\n\t\t\twhole += chunk;\n\t\t}\n\t\twhole = decodeURIComponent(whole);\n\t\ttry {\n\t\t\tres = JSON.parse(whole);\n\t\t} catch (e) {\n\t\t\t//\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction getCookie(name) {\n\t\tvar r = new RegExp('(?:^|; )' + encodeURIComponent(name).replace(/([.$?*|{}()\\[\\]\\\\\\/+^])/g, '\\\\$1') + '=([^;]+)');\n\t\tvar value = (document.cookie.match(r) || ['', ''])[1];\n\t\treturn value;\n\t}\n\treturn true;\n}","Order":5000,"HighLevelApiVersion":"1.26"},{"Name":"Qualifying","Type":"script","Attrs":{"type":"text/javascript"},"Data":"var known = false;\n\nwhen(function(){\n    return typeof window._elqQ == \"object\" && typeof window._elqQ.push !== \"undefined\" && typeof window._elqQ.push == \"function\";\n}).done(function(){\n  var _elqQ = _elqQ || [];\n  window._elqQ.push(['elqSetSiteId', '1625795586']); //your Eloqua SiteId\n  window._elqQ.push(['elqUseFirstPartyCookie', 'tracking.visitdubai.com']);  \n  window._elqQ.push(['elqTrackPageView']);\n  window._elqQ.push(['elqDataLookup', escape('8a7b1443b6a24ea3b63b93f6ba38cf01'), '']); // lookup ID\n  when(function() {\n    return typeof GetElqContentPersonalizationValue == 'function';\n  }).done(function() {\n    if (GetElqContentPersonalizationValue('V_Email_Address') !== '') {\n      known = true;\n    }\n  });\n});\n\n\n\nfunction isQualified(){\n  return when(function() {\n      return (known == true);\n  });\n}\n\ncampaign.scope.qualificationRules = campaign.scope.qualificationRules || [];\ncampaign.scope.qualificationRules.push(isQualified);","Order":5000,"HighLevelApiVersion":"1.26"}],"Elements":[],"Recommendations":[]}],"MRRules":[],"PersistData":[{"Name":"srv","IsGlobal":false,"Value":"prodiadcgeu01","Expiration":365},{"Name":"bid","IsGlobal":false,"Value":"prodiadcgeu01","Expiration":0.00694},{"Name":"pd","IsGlobal":false,"Value":"HpB-gwzMnyxmZKEF1wdJ5jz_IC6lLacrZQwv56GsZOE=|AQAAAApDH4sIAAAAAAAEAGNhENwe-maWqLslA3NmYgqjEAOjE8PxxeeEGRnyAy5vP__lpgeMZgCC_1DAwOaSWZSaXMI4S5QRJA4GMEkQzcDAyBCQycggBZRhdAUA5NTHymYAAAA=","Expiration":365}],"SiteInfo":[{"Url":"visitdubai.com","ID":2100}],"SystemData":[{"Version":"1.0","RequestId":1,"ResponseId":1}],"GenInfo":{},"ServerAttributes":{"dmp_Monsoon":""},"Iteration":"ZFSj_3MWY4sjh44Z40lCvUbHE9w","Packages":["mmpackage-1.26.js"]});