var cnnad_tileID = cnnad_getID();
var cnnad_enabled = true;
var cnnad_adIframes = new Array();
var cnnad_adVault = new Array();
var cnnad_adCache = new Array();
var cnnad_interstitialPID = null;
var cnnad_interstitialPlaying = false;
var cnnad_transactionID = null;
// flag for geo targetting image
var alreadySwappedDETargetImage = false;
var cnnDEadDEonCookie = false;
// document domain security issues
var cnnDocDomain = cnnad_getTld(location.hostname);
if(cnnDocDomain) {document.domain = cnnDocDomain;}
//ADM send functionality
//pagemodes - 1(all tags) - DM_cat(), DM_addToLoc(), DM_tag();
//pagemodes - 2(health) - DM_tag();
//pagemodes - 3(none);
var cnnad_pageMode = 1;
var cnnad_calledURLs = new Array(); //associative array
var cnnad_successfulSend = 0;
var cnnad_resultArray = new Array();
var cnnad_ADMSizes = new Array();
// Set default sizes, can be overridden with cnnad_setADMSizes
cnnad_ADMSizes = ["728x90","300x250","336x280","160x600","336x850","300x600"];
function cnnad_setADMSizes(admSizesArray) {
// Use this function to override ADM ad sizes to be sent
cnnad_ADMSizes = admSizesArray;
}
function cnnad_parseReferrer(url) {
// take a url, typically document.referrer, and parse out the domain,
// eg "http://edition.cnn.com/story/otherstuff&refresh=1" returns "cnn.com"
if (!url) {
return null;
}
var data = url.substring(0, url.indexOf('/', 7));
if (data.indexOf(':', 5) > 0)
data = data.substring(0, url.indexOf(':', 5));
data = data.substring(data.lastIndexOf('/')+1);
var datachop = data.split('.');
return(datachop[datachop.length-2] + '.' + datachop[datachop.length-1]);
}
function cnnad_sendADMData() {
var finalExpression = "";
for(as=0;as<cnnad_ADMSizes.length;as++){
var calledURL = cnnad_calledURLs[cnnad_ADMSizes[as]];
if(calledURL && cnnad_successfulSend == 0){
if(cnnad_pageMode != 3){
finalExpression += '<scr' + 'ipt> \n ';
if(cnnad_pageMode == 1){
finalExpression += '	A09801.DM_cat("';
var site = cnnad_getParamValue(calledURL, "site=","&");
var rollup = cnnad_getParamValue(calledURL, "_rollup=","&");
var section = cnnad_getParamValue(calledURL, "_section=","&");
var subsection = cnnad_getParamValue(calledURL, "_subsection=","&");
var referrerTld = cnnad_parseReferrer(document.referrer);
finalExpression += site;
if((site!="") && ((rollup!="") || (section!="") || (subsection!=""))){
finalExpression += " > ";
}
finalExpression += rollup;
if((rollup!="") && ((section!="") || (subsection!=""))){
finalExpression += " > ";
}
finalExpression += section;
if((section!="") && (subsection!="")){
finalExpression += " > ";
}
finalExpression += subsection;
finalExpression += '"); \n ';
if (referrerTld)
finalExpression += ' A09801.DM_addEncToLoc("refer", "' + referrerTld + '"); \n ';
else
finalExpression += ' A09801.DM_addEncToLoc(); \n ';
}
finalExpression += '	A09801.DM_tag(); \n ';
finalExpression += '</scr' + 'ipt> \n ';
document.write(finalExpression);
}
cnnad_successfulSend = 1;
break;
}
}
}
function cnnad_getParamValue(paramString, parameter, endCharacter){
if(paramString.match(parameter)){
var startOfString = paramString.indexOf(parameter)+parameter.length;
var endOfString = paramString.indexOf(endCharacter,startOfString);
var parameterValue = paramString.substring(startOfString,endOfString);
return parameterValue;
}
else{
return "";
}
}
// end ADM send functionality
//DYNAMIC TYLEID
var cnnad_adTileIDGroup = new Array();
var cnnad_newTileIDIteration = 0;
var cnnad_tileExemptions = new Array();
function cnnad_addExemptCriteria() {
var idx = cnnad_tileExemptions.length;
if (arguments.length % 2 != 0) {
// Arguments must be sent in pairs
return;
}
cnnad_tileExemptions[idx] = new Array();
for (var i = 0; i < arguments.length; i+=2) {
cnnad_tileExemptions[idx][arguments[i]] = arguments[i+1];
}
}
function cnnad_checkTileExempt(adUrl) {
var exempt;
for (var i = 0; i < cnnad_tileExemptions.length; i++) {
exempt = true;
for (adKey in cnnad_tileExemptions[i]) {
adValue = cnnad_getParamValue(adUrl, adKey + '=', '&');
if (cnnad_tileExemptions[i][adKey] != adValue) {
exempt = false;
break;
}
}
if (exempt) {
return true;
}
}
return false;
}
function cnnad_newTileIDGroup(newGroupArray) {
var newTileID = (cnnad_tileID * 1 + 4*(++cnnad_newTileIDIteration));
for (var i = 0; i < newGroupArray.length; i++) {
cnnad_adTileIDGroup[cnnad_adTileIDGroup.length] = {tileID:newTileID, adName:newGroupArray[i]};
}
}
function cnnad_getDynamicTileID(adURL) {
var returnId = cnnad_tileID;
if (cnnad_checkTileExempt(adURL)) {
return returnId;
}
if(cnnad_adTileIDGroup.length > 0){
var ad_position;
if(adURL.match("_position=") ){
ad_position = cnnad_getParamValue(adURL, "_position=", "&");
}
else if(adURL.match("_pos=")){
ad_position = cnnad_getParamValue(adURL, "_pos=", "&");
}
else {
ad_position = "";
}
for (var i = 0; i < cnnad_adTileIDGroup.length; i++) {
var adName = cnnad_adTileIDGroup[i].adName;
if(ad_position == adName){
returnId = cnnad_adTileIDGroup[i].tileID;
break;
}
}
}
return returnId;
}
//END DYNAMIC TYLEID
function cnnad_debug (m)
{
if (typeof(console) != 'undefined' && typeof(console.debug) != 'undefined')
{
console.debug(m);
}
}
function cnnad_error (m)
{
if (typeof(console) != 'undefined' && typeof(console.error) != 'undefined')
{
console.error(m);
}
}
function cnnad_reverseString (input)
{
// convert everything to a string
input = "" + input;
var output = '';
if (input.length)
{
var i;
for (i = input.length; i > 0; i--)
{
output += input.charAt(i-1);
}
}
return(output);
}
function cnnad_getID() {
return (cnnad_reverseString(new Date().getTime()));
}
function cnnad_renderAd(cnnad_url) {
cnnad_url = cnnad_preview(cnnad_url);
cnnad_url = cnnad_statusCodeQA(cnnad_url);
if(cnnad_enabled == true) {
document.write("<script type=\"text/javascript\"");
document.write(" src=\""+cnnad_url+"&tile="+cnnad_getDynamicTileID(cnnad_url)+"&transactionID="+cnnad_getTransactionID()+"\"></scr");
document.write("ipt>");
}
}
function cnnad_preview(cnnad_adstring) {
if ( location.host.indexOf("turner.com") > -1) {
// we are on preview (or on local subnet, so we have to use internal names)
cnnad_adstring = cnnad_adstring.replace(new RegExp("ads\..*?\.com","gi"),"ads.turner.com");
cnnad_adstring = cnnad_adstring.replace(new RegExp("ads\..*?\.tv","gi"),"ads.turner.com");
}
var cnnad_ug = cnnad_readCookie("ug");
if (cnnad_ug) {
cnnad_adstring = cnnad_adstring + "&Params.User.UserID=" + cnnad_ug;
} else {
cnnad_adstring = cnnad_adstring + "&Params.User.UserID=";
}
return cnnad_adstring;
}
function cnnad_getTransactionID() {
if (cnnad_transactionID == null) {
cnnad_transactionID = "";
cnnad_transactionID = Math.floor(Math.random()*9007199254740992);
}
return cnnad_transactionID;
}
function cnnad_isBlocking (id) {
var blocking = false;
if(document.getElementById('ad-'+id) != null && document.getElementById('ad-'+id).style.display === 'none') {
blocking = true;
} else if (cnnad_interstitialPlaying === true) {
blocking = true;
}
return blocking;
}
function cnnad_createIframe (id, cnnad_url)
{
var iframe = document.createElement('iframe');
iframe.id = id;
iframe.name = id;
iframe.width = 0;
iframe.height = 0;
iframe.style.position = 'absolute';
iframe.style.top = '-20px';
iframe.style.left = '-20px';
iframe.marginWidth = 0;
iframe.marginHeight = 0;
iframe.frameBorder = 0;
iframe.scrolling = "no";
iframe.allowTransparency = 'true';
iframe.src = cnnad_url;
return iframe;
}
function cnnad_createAdHelper (adId, cnnad_url, cnnad_height, cnnad_width, target) {
if (cnnad_isBlocking(adId)) {
window.setTimeout(function(){cnnad_createAdHelper(adId,cnnad_url,cnnad_height,cnnad_width,target);},1000);
} else {
var d = document.getElementById('ad-' + adId);
if (d) {
d.appendChild(cnnad_createIframe(adId,cnnad_url));
} else {
if (!target) {
document.write('<iframe ALLOWTRANSPARENCY="true" hspace="0" vspace="0" marginHeight="0" marginWidth="0" src="' + cnnad_url + '" border="0" frameBorder="0" height="0" width="0" scrolling="no" id="'+adId+'" style="position: absolute; top: -20px; left: -20px;" ></iframe>');
} else {
document.getElementById(target).innerHTML = '<iframe ALLOWTRANSPARENCY="true" hspace="0" vspace="0" marginHeight="0" marginWidth="0" src="' + cnnad_url + '" border="0" frameBorder="0" height="0" width="0" scrolling="no" id="'+adId+'" style="position: absolute; top: -20px; left: -20px;" ></iframe>';
}
}
}
}
function cnnad_createAdNoTileId(adId,cnnad_url,cnnad_height,cnnad_width,target) {
cnnad_url = cnnad_preview(cnnad_url);
cnnad_url = cnnad_statusCodeQA(cnnad_url);
cnnad_url += "&transactionID=" + cnnad_getTransactionID();
cnnad_url += '&domId=' + adId;
cnnad_createAdHelper(adId,cnnad_url,cnnad_height,cnnad_width,target,false);
}
function cnnad_createAd(adId,cnnad_url,cnnad_height,cnnad_width,target) {
cnnad_url = cnnad_preview(cnnad_url);
cnnad_url = cnnad_statusCodeQA(cnnad_url);
cnnad_url += "&transactionID=" + cnnad_getTransactionID();
cnnad_url += '&tile=' + cnnad_getDynamicTileID(cnnad_url) + '&domId=' + adId;
cnnad_createAdHelper(adId,cnnad_url,cnnad_height,cnnad_width,target,false);
// ADM functionality
var adSize = new String();
if(cnnad_url.match("_position=") ){
adSize = cnnad_getParamValue(cnnad_url, "_position=", "_");
}
else if(cnnad_url.match("_pos=")){
adSize = cnnad_getParamValue(cnnad_url, "_pos=", "_");
}
else {
adSize = "";
}
cnnad_calledURLs[adSize] = cnnad_url;
// END ADM functionality
}
function cnnad_writeAd(cnnad_callid,cnnad_url) {
if(cnnad_enabled == true) {
document.write("<script id=\"" + cnnad_callid + "\" type=\"text/javascript\" onload=\"cnnSendData();\"");
document.write(" src=\""+cnnad_url+"&tile="+cnnad_getDynamicTileID(cnnad_url)+"\"></scr");
document.write("ipt>");
}
}
function cnnad_showAd(cnnad_id) {
var e = document.getElementById(cnnad_id);
if (e) {
e.style.position = 'relative';
e.style.left = '0px';
e.style.top = '0px';
if (e.style.visibility === 'hidden') {
e.style.visibility = 'visible';
}
if (e.style.display === 'none') {
e.style.display = 'block';
}
} else {
cnnad_error("Could not find element by id: " + cnnad_id);
}
}
function cnnad_setAdSize(docId,height,width) {
var i = document.getElementById(docId);
if (i) {
i.height = height;
i.width = width;
i.className +=' adunit_'+width+'x'+height;
} else {
cnnad_error("Could not find element by id: " + cnnad_id);
}
}
function cnnad_readCookie( name ) {
if ( document.cookie == '' ) { // there is no cookie, so go no further
return null;
} else { // there is a cookie
var ca = document.cookie.split(';');
var nameEQ = name + "=";
for(var i=0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1, c.length); //delete spaces
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
}
return null;
}
}
function cnnad_getTld (hostname)
{
var data = hostname.split(".");
if (data.length >= 2) {
return (data[data.length-2] + "." + data[data.length-1]);
}
return(null);
}
function cnnad_refreshAds (type) {
if (! cnnad_adIframes) {
return;
}
for (var i = 0; i < cnnad_adIframes.length; i++) {
var targetAd = cnnad_adIframes[i];
var newAdLoc = cnnad_findAd(type,targetAd.getWidth(),targetAd.getHeight());
cnnad_swapAd(targetAd.getId(), newAdLoc);
}
}
function cnnad_swapAd (id, newAdLoc)
{
var elem = document.getElementById(id);
if (elem)
{
elem.width = 0;
elem.height = 0;
elem.style.display = 'none';
// if we find our ad in the cache, then use it
if (cnnad_adCache[newAdLoc])
{
//alert("found ad via cache: " + cnnad_adCache[newAdLoc]);
//elem.src = cnnad_adCache[newAdLoc];
for (var j = 0; j < window.frames.length; j++) {
try {
if (window.frames[j].location.href.indexOf('domId='+id) > -1) {
window.frames[j].location.replace(cnnad_adCache[newAdLoc]);
}
} catch(e) {}
}
return;
}
// if not in cache, we fetch it using an Ajax call
// first we try Prototype
if ((typeof Ajax != 'undefined') && (typeof Ajax.Request != 'undefined'))
{
var temp = new Ajax.Request(
newAdLoc,
{
method:'get',
onSuccess: function (req) {
var newLoc = cnnad_parseResponse(req.responseText,id);
newLoc = cnnad_preview(newLoc);
newLoc = cnnad_statusCodeQA(newLoc);
newLoc += "&transactionID=" + cnnad_getTransactionID();
if (newLoc)
{
cnnad_adCache[newAdLoc] = newLoc;
//elem.src = newLoc;
for (var j = 0; j < window.frames.length; j++) {
try {
if (window.frames[j].location.href.indexOf('domId='+id) > -1) {
window.frames[j].location.replace(newLoc);
}
} catch(e) {}
}
return;
}
}
});
}
// next try Dojo
else if (typeof dojo != 'undefined')
{
if (typeof dojo.io == 'undefined')
{
dojo.require("dojo.io.*");
}
dojo.io.bind({
url: newAdLoc,
load: function (type, data, evt) {
var newLoc = cnnad_parseResponse(data,id);
newLoc = cnnad_preview(newLoc);
newLoc = cnnad_statusCodeQA(newLoc);
newLoc += "&transactionID=" + cnnad_getTransactionID();
if (newLoc)
{
cnnad_adCache[newAdLoc] = newLoc;
elem.src = newLoc;
}
}
});
}
// neither worked, we just give up and not do anything
else
{
// do nothing
// alert("No way to fetch " + newAdLoc);
}
}
}
function cnnad_parseResponse (resp, id)
{
// chop off everything before callout marker
var startMarker = "<!-- CALLOUT|";
var endMarker = "|CALLOUT -->";
var start = resp.indexOf(startMarker);
var end = resp.indexOf(endMarker);
var loc = null;
if (start >= 0 && end > start)
{
loc = resp.substring(start + startMarker.length ,end);
}
if (loc)
{
return(loc + "&tile=" + cnnad_getDynamicTileID(loc) + "&domId=" + id);
}
else
{
//alert("Parsing failed!");
return null;
}
}
function cnnad_findAd (type, width, height)
{
var ret = null;
for (var i = 0; i < cnnad_adVault.length; i++)
{
var ad = cnnad_adVault[i];
if (ad.getType() == type && ad.getHeight() == height && ad.getWidth() == width)
{
ret = ad.getUrl();
break;
}
}
return ret;
}
function cnnad_getDEAdHeadCookie( imageRef ) {
if (typeof(cnnad_readCookie) != "undefined") {
cnnDEadDEonCookie = cnnad_readCookie( 'adDEon' );
}
var newSrc = "http://gdyn." + cnnad_getTld(location.hostname) + "/1.1/1.gif?" + new Date().getTime();
if ( !alreadySwappedDETargetImage && !cnnDEadDEonCookie) {
imageRef.src = newSrc;
alreadySwappedDETargetImage = true;
}
}
function cnnad_registerAd (type, width, height, url)
{
var ad = new cnnad_AdObject (null, width, height, type, url);
cnnad_adVault[cnnad_adVault.length] = ad;
}
function cnnad_registerSpace (id, width, height)
{
var ad = new cnnad_AdObject(id, width, height, null, null);
cnnad_adIframes[cnnad_adIframes.length] = ad;
}
function cnnad_endInterstitial(adId)
{
// remove the interstitial node
var adNode = document.getElementById('interstitial'+adId);
if(adNode && adNode.parentNode)
{
adNode.parentNode.removeChild(adNode);
}
// remove the interstitial related CSS node
var styleNode = document.getElementById('interstitialcss' + adId);
if (styleNode && styleNode.parentNode)
{
styleNode.parentNode.removeChild(styleNode);
}
// for IE, we need to add another style to make sure tables show up
if (typeof(document.createStyleSheet) != 'undefined')
{
var cssNode = document.createStyleSheet();
cssNode.addRule('table','{display:inline}');
}
cnnad_interstitialPlaying = false;
}
function cnnad_startInterstitial(adId,cnnad_url,timeout)
{
cnnad_interstitialPlaying = true;
var adUrl = cnnad_url + '&tile=' + cnnad_getDynamicTileID(cnnad_url) + '&domId=' + adId;
document.write('<div id="interstitial'+adId+'" class="interstitial" align="center"><iframe ALLOWTRANSPARENCY="true" hspace="0" vspace="0" marginHeight="0" marginWidth="0" src="'+adUrl+'" border="0" frameBorder="0" height="0" width="0" scrolling="no" id="'+adId+'"></iframe></div>');
if(!timeout) { timeout = 1500;}
cnnad_interstitialPID = window.setTimeout('cnnad_endInterstitial("'+adId+'");',timeout);
}
function cnnad_resetInterstitial(adId,timeout)
{
cnnad_interstitialPlaying = true;
var elem = document.getElementById(adId);
if (null != elem && elem.height > 20 && elem.width > 20)
{
if(cnnad_interstitialPID)
{
window.clearTimeout(cnnad_interstitialPID);
}
if(!timeout) { timeout = 15000;}
cnnad_interstitialPID = window.setTimeout('cnnad_endInterstitial("'+adId+'");',timeout);
}
}
function cnnad_getUrlParam(name)
{
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( window.location.href );
if( results == null )
return "";
else
return results[1];
}
function cnnad_statusCodeQA(cnnad_adstring)
{
var qaparam = cnnad_getUrlParam("adsqa");
if (qaparam) {
cnnad_adstring = cnnad_adstring + "&" + qaparam.replace("%3D", "=");
}
return cnnad_adstring;
}
function cnnad_updateIframeSource(id, cnnad_url) {
cnnad_url = cnnad_preview(cnnad_url);
cnnad_url = cnnad_statusCodeQA(cnnad_url);
cnnad_url += "&transactionID=" + cnnad_getTransactionID();
document.getElementById(id).contentWindow.location.replace(cnnad_url + '&tile=' + cnnad_tileID + '&domId=' + id);
}
function cnnad_showAdByKey(adKey, iframeId) {
cnnad_swapAd(iframeId, cnnad_adUrls[adKey]);
}
function cnnad_haveCookie(name) {
return cnnad_readCookie(name);
}
function cnnad_ugsync() {
if (!cnnad_haveCookie('ugs')) {
document.write('<scr'+'ipt src="http://www.ugdt'+'urner.com/xd.sjs"></scr'+'ipt>');
}
}
// ----- THE CNN ADS OBJECT ----- //
function cnnad_AdObject (id,width,height,type,url)
{
this.id = id;
this.width = width;
this.height = height;
this.type = type;
this.url = url;
this.getId = function () { return this.id; };
this.setId = function (id) { this.id = id; };
this.getWidth = function () { return this.width; };
this.setWidth = function (width) { this.width = width; };
this.getHeight = function () { return this.height; };
this.setHeight = function (height) { this.height = height; };
this.getType = function () { return this.type; };
this.setType = function (type) { this.type = type; };
this.getUrl = function () { return this.url; };
this.setUrl = function (url) { this.url = url; };
this.toString = function () { return "[AD|ID=" + this.id + "|WIDTH=" + this.width + "|HEIGHT=" + this.height + "]"; };
}
// ------ /CNN ADS OBJECT ----- //

