/* Controltag Loader for IAC */ (function(){ var debugging = /kxdebug/.test(location); var log = function() { // It's a flag, so if it's there, then it means debug. debugging && window.console && console.log([].slice.call(arguments).join(' ')); }; var load = function(url, callback) { log('Loading script from:', url); var node = document.createElement('script'); node.async = true; // This is just to be friendly. node.src = url; // Connect to both in case we're in older IE. node.onload = node.onreadystatechange = function() { var state = node.readyState; if (!callback.done && (!state || /loaded|complete/.test(state))) { log('Script loaded from:', url); callback.done = true; // Mark the callback, so we don't load it twice on accident. callback(); } }; // Fetch the first script element, so we can insert the // controltag before it. There *must* be at least one // script element, or this code would never be called var sibling = document.getElementsByTagName('script')[0]; sibling.parentNode.insertBefore(node, sibling); }; // ControlTag simply crashes when opening a website from Twitter browser on // iOS, temporarily disable CT when Twitter for iPhone is detected until they // fix this (works fine with other twitter client though) if (/Twitter for iPhone/.test(window.navigator.userAgent || '')) return; var config = {"partner_segment_map": {}, "context_terms": [], "tags": [{"content": "", "target": null, "target_action": "append", "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 8, "content_type": "html", "freq_cap": 1, "timing": "onload", "method": "document", "type": "data provider", "id": 27411, "name": "DataLogix provider tag"}, {"content": "", "target": null, "target_action": "append", "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 11, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "data provider", "id": 27413, "name": "eXelate Media provider tag"}, {"content": "", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 1, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "publisher", "id": 30998, "name": "Google User Match"}, {"content": "", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 1, "execution_results": {"onloadSafe": true, "docwrite": false, "listeners": []}, "tier": 1, "internal": 1, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "publisher", "id": 28193, "name": "MediaMath User Match"}, {"content": "", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 1, "content_type": "html", "timing": "onready", "method": "document", "type": "publisher", "id": 27829, "name": "Krux Data Transfer Code - About"}], "buckets": [], "publisher": {"uuid": "0f61e6a9-fba5-4842-9307-d0770a82362b", "id": 12106, "name": "IAC"}, "controltag_options": {"async": "true", "render": true}, "site": {"id": 15283, "name": "about.com"}, "realtime_segments": [{"test": ["and", ["or", ["and", ["or", ["intersects", "$page_attr_gs", "[\"grammar\"]"]]]]], "id": "n7gxyenzm"}, {"test": ["and", ["or", ["and", ["or", "$event_JGELCN7p"]]]], "id": "ogps9z662"}], "dnt": null, "params": {"connector_host": "connector.krxd.net", "first_party_uid": false, "control_tag_load_sync": "false", "userData_host": "cdn.krxd.net", "disable_http_compression": false, "remove_kxhead": true, "supertag_requires_approval": false, "control_tag_namespace": null, "cdn_host": "cdn.krxd.net", "control_tag_stats_prefix": null, "optimize_realtime_segments": false, "beacon_host": "beacon.krxd.net", "control_tag_pixel_throttle": "100", "store_realtime_segments": false, "user_id_cookie": null, "max_segments": null, "no_pii": 0, "recommend": false, "revenue_optimization": false, "context_terms": "false", "jslog_host": "jslog.krxd.net", "buckets": "", "site_level_supertag_config": "site", "max_slot_time": 1000, "services_host": "apiservices.krxd.net", "capture_leakage": true, "client_side_storage": "localStorage,cookie", "fingerprint": false, "config_source": 1, "control_tag_version": "stable", "capture_js_errors": "true", "datatag_version": "3", "dfp_premium": "false", "userdata_host": "cdn.krxd.net", "user_data_timing": "load", "target_fingerprint": false}, "services": {"event": "//beacon.krxd.net/event.gif", "impression": "//beacon.krxd.net/ad_impression.gif", "stats": "//apiservices.krxd.net/stats", "log": "//jslog.krxd.net/jslog.gif", "optout": "//beacon.krxd.net/optout_check", "config": "//cdn.krxd.net/controltag?confid=", "pixel": "//beacon.krxd.net/pixel.gif", "um": "//apiservices.krxd.net/um", "contentConnector": "//connector.krxd.net/content_connector/", "proxy": "//cdn.krxd.net/partnerjs/xdi", "set_optin": "//apiservices.krxd.net/consumer/optin", "social": "//beacon.krxd.net/social.gif", "set_optout": "//apiservices.krxd.net/consumer/optout", "addSegment": "//cdn.krxd.net/userdata/add", "userData": "//cdn.krxd.net/userdata/get", "data": "//beacon.krxd.net/data.gif", "userdata": "//cdn.krxd.net/userdata/get", "is_optout": "//beacon.krxd.net/optout_check"}, "geo": {}, "segments": [], "confid": "Itttdt64"}; // Wrap in a function and comment, then toString the func and replace // everything that's not the beginning or end of a JSON object, so we get a // string that's either empty or JSON. var esiGeo = String(function(){/* */}).replace(/^.*\/\*[^{]+|[^}]+\*\/.*$/g, ''); if (esiGeo) { log('Got a request for:', esiGeo, 'adding geo to config.'); try { config.geo = window.JSON.parse(esiGeo); } catch (__) { // Couldn't parse, so setting to {} log('Unable to parse geo from:', config.geo); config.geo = {}; } } load('//cdn.krxd.net/ctjs/controltag.js.65cb90ab31cdb5cf32ec075000ceff37', function() { log('Loading krux configuration.'); Krux('config', config); }); })();