/*
 * Advertising.js
 * Defines logic for doubleclick ad embedding
 */
 
function joinKeys(str) {
  var arr = str.split("&"), str = '';
  for (var i=0; arr[i]; i++) {
    str += 'adkw=' + arr[i] + ';';
  }
  return str;
}

function getTILE() {
  return tile++;
}

// Return boolean (Can not have number after / for zone)
function isFirstCharNumber(s) { 
  return ! isNaN(s.charAt(0));
}

function OAS_AD(pos, frame) {
  var adv = advert[pos.toLowerCase()];
  var size = adv.x + 'x' + adv.y;

  if (pos == 'Index') {
    document.write('<scr' + 'ipt src="' + ad_url + 'adj/o.index;'+keyword+';tile='+getTILE()+';sz='+size+';ord='+OAS_rns+'?" type="text/javascript"><\/SCRIPT>');
  } else if (frame) {
    return ad_url + 'adi/'+ site+';'+keyword+'page='+page+';tile='+getTILE()+';sz='+size+';mtfIFPath=/ord/doubleclick/;pos='+pos+';ord='+OAS_rns+'?';
  } else {
    document.write('<scr' + 'ipt src="' + ad_url + 'adj/'+ site+';'+keyword+';page='+page+';tile='+getTILE()+';sz='+size+';pos='+pos+';ord='+OAS_rns+'?" type="text/javascript"><\/script>');
  }
}

//configuration
var OAS_sitepage = location.pathname, ad_url=(('https:' == document.location.protocol) ? 'https://ad.doubleclick.net/' : 'http://ad.doubleclick.net/'), tile = 1, Metas = {};
var page = site = zone = keyword = new String();

// generate a random number string
  // TODO use a timestamp? new Date().getTime()
var OAS_rns = String(Math.random()).substring(2,11);

// object representing ad sizes
var advert = { pop: { x:728, y:90 }, // banner ad in popup slideshows
             index: { x:184, y:90 }, // index page header ad
            island: { x:300, y:250}, // island ad
           island2: { x:300, y:250}, // island ad within slideshows
           package: { x:104, y:66 }, // sponsor ad in package header
        skyscraper: { x:160, y:600}, // skyscraper/tower ad, pre-HD full-page video companion
       leaderboard: { x:728, y:90 }, // header banner ad, pre-HD full-page video companion
      leaderboard2: { x:728, y:90 }, // footer banner ad
    videocompanion: { x:234, y:60 }, // pre-HD inline video companion, post-HD inline and full-page video companion
   sponsorpagetool: { x:100, y:35 }, // sponsor ad in page tools on section banner
   sponsorfeatured: { x:115, y:125}, // featured sponsor ad
             print: { x:468, y:60 }  // half-ad for printable pages
};

// populate the metas object.
for(var i=0, m = document.getElementsByTagName('meta'); m[i]; i++) {
  Metas[m[i].name] = m[i].content;
  //Metas.set(m[i].name, m[i].content);
}

// sections are the root level directories to remove from site path
var sections = [
  'package', 'subpackage', 'article', 'slideshow', 'recipe', 'menu', 'survey', 'workbook', 'contributor', 'contributorblog',
  'topics', 'subtopic', 'dated', 'magazine', 'magazinetoc', 'datedcontent', 'entity', 'editorialsweeps'
];

// search for and define keyword parameters
for (var i=1; i <= 4; i++) {
  var tag = Metas['adtag' + i] || 'adkw=dummyad' + i + ';';
  keyword += (tag.indexOf("&") > -1) ? joinKeys(tag) : tag;
};

// run an anonymous setup function [formerly getPage()]
(function() {
  if ((OAS_sitepage != null) && (OAS_sitepage != "")) {

    var temp = OAS_sitepage.substring(1).split("/");

    for (var i = 0; sections[i]; i++) {
      if (sections[i] == temp[0]) {
        var skip = true;
        break;
      }
    }

    if (temp.length >= 4) {
      if (skip) {
        site = 'o.' + temp[1];
        if (isFirstCharNumber(temp[2])) {
          temp[2] = '_' + temp[2];
        }
        if (isFirstCharNumber(temp[3])) {
          temp[3] = '_' + temp[3];
        }
        zone = '/' + temp[2] + '/' + temp[3];
      }
      else if (temp[0] == 'ads') {
        site = 'o.ads';
        if (isFirstCharNumber(temp[1])) {
          temp[1] = '_' + temp[1];
        }
        if (isFirstCharNumber(temp[2])) {
          temp[2] = '_' + temp[2];
        }
        if (isFirstCharNumber(temp[3])) {
          temp[3] = '_' + temp[3];
        }
        if (temp[3].indexOf(".") > -1) {
          var str = new String(temp[3]);
          temp[3] = str.substring(0, temp[3].indexOf("."));
          zone = '/' + temp[1] + '/' + temp[2] + '/' + temp[3];
        } else {
          zone = '/' + temp[1] + '/' + temp[2];
        }
      }
      else {
        site = 'o.' + temp[0];
        if (isFirstCharNumber(temp[1])) {
          temp[1] = '_' + temp[1];
        }
        if (isFirstCharNumber(temp[2])) {
          temp[2] = '_' + temp[2];
        }
        zone = (temp[2].indexOf(".") > -1) ? '/' + temp[1] : '/' + temp[1] + '/' + temp[2];
      }
    }
    else if (temp.length == 3) {
      if (skip == true) {
        if (isFirstCharNumber(temp[2])) {
          temp[2] = '_' + temp[2];
        }
        site = 'o.' + temp[1] + '/' + temp[2];
      } else if (temp[0] == 'ads') {
        site = 'o.ads';
        if (isFirstCharNumber(temp[1])) {
          temp[1] = '_' + temp[1];
        }
        if (isFirstCharNumber(temp[2])) {
          temp[2] = '_' + temp[2];
        }
        if (temp[2].indexOf(".") > -1) {
          var str = new String(temp[2]);
          temp[2] = str.substring(0, temp[2].indexOf("."));
          zone = '/' + temp[1] + '/' + temp[2];
        }
        else {
          zone = '/' + temp[1];
        }
      }
      else {
        site = 'o.' + temp[0];
        if (isFirstCharNumber(temp[1])) {
          temp[1] = '_' + temp[1];
        }
        if (isFirstCharNumber(temp[2])) {
          temp[2] = '_' + temp[2];
        }
        zone = (temp[2].indexOf(".") > -1) ? '/' + temp[1] : '/' + temp[1] + '/' + temp[2];
      }
    }
    else if (temp.length == 2) {
      if (skip) {
        if (isFirstCharNumber(temp[1])) {
          temp[1] = '_' + temp[1];
        }
        site = (temp[1].indexOf(".") > -1) ? 'o.' + temp[1].substring(0, temp[1].indexOf(".")) : 'o.' + temp[1];

      } else if (temp[0] == 'ads') {
        site = 'o.pos';
        if (isFirstCharNumber(temp[1])) {
          temp[1] = '_' + temp[1];
        }
        if (temp[1].indexOf(".") > -1) {
          var str = new String(temp[1]);
          temp[1] = str.substring(0, temp[1].indexOf("."));
          zone = '/' + temp[1];
        }
      }
      else {
        site = 'o.' + temp[0];
        if (temp[0].indexOf(".") > -1) {
          site = 'o.' + temp[0].substring(0, temp[0].indexOf("."));
        }
        if (isFirstCharNumber(temp[1])) {
          temp[1] = '_' + temp[1];
        }
        zone = (temp[1].indexOf(".") > -1) ? '' : '/' + temp[1];
      }
    }
    else if (!skip) {
      if (isFirstCharNumber(temp[0])) {
        temp[0] = '_' + temp[0];
      }
      site = (temp[0].indexOf(".") > -1) ? 'o.' + temp[0].substring(0, temp[0].indexOf(".")) : 'o.' + temp[0];        
    }
  }
  if (zone != '') {
    site += zone;
  }

  if (OAS_sitepage.indexOf('.') != "-1") {
    page = OAS_sitepage.substring(OAS_sitepage.lastIndexOf('/') + 1, OAS_sitepage.length);
    ext = page.indexOf('.');
    page = page.substring(0, ext);
  }
  else {
    page = OAS_sitepage.substring(OAS_sitepage.indexOf(zone) + zone.length + 1);
  }
})();

var fullpath = new String(location.href);
if (page == "search") {
  searched = fullpath.substring(fullpath.indexOf("query=") + 6, fullpath.indexOf("&"));
  searched = searched.toLowerCase();
  keyword = "kw=" + searched + ";" + keyword;
}