/*
 * Original Author: Robert Birkline
 * COPR 1985-2009 Hearst Newspapers Partnership, L.P. All rights reserved.
 */
var adwiz_errors = ''; /* this is a container to hold errors */
function CHRON_get_param() {
  var CHRON_gp = window.location.href;
  var CHRON_gp_list = CHRON_gp.split(/\?/);
  if (CHRON_gp_list.length > 1) {
    CHRON_gp_list[1] = CHRON_gp_list[1].replace(/\&/g, ',');
    CHRON_gp_list[1] = CHRON_gp_list[1].replace(/\=/g, '~');
    return CHRON_gp_list[1];
  }
  return '';
}

function CHRON_get_param_array() {
  var CHRON_gpa = window.location.href;
  var CHRON_gpa_list = CHRON_gpa.split(/\?/);
  var CHRON_gpa_list_final = Array();
  if (CHRON_gpa_list[1]) {
    var CHRON_gpa_list_sp = CHRON_gpa_list[1].split(/\&/);
    for (i = 0; i < CHRON_gpa_list_sp.length; i++) {
      try {
        if (CHRON_gpa_list_sp[i].search(/=/) !== -1) {
          CHRON_tmp = CHRON_gpa_list_sp[i].split(/=/);
          CHRON_gpa_list_final[CHRON_tmp[0]] = CHRON_tmp[1];
        }
        else {
          CHRON_gpa_list_final[CHRON_gpa_list_sp[i]] = true;
        }
      } catch (e) {
        alert(e);
      }
    }
  }
  return CHRON_gpa_list_final;
}

function CHRON_tag_normal(x) {
  x = x.replace(/\s+/g, '+');
  x = x.replace(/\/\//g, '/');
  x = x.replace(/\/$/, '');
  return x;
}

function CHRON_reset_query_string() {
  CHRON_query = '';
  adwiz.query = '';
  return true;
}

function CHRON_add_to_query_string(x) {
  CHRON_query += x + '&';
  adwiz.query += x + '&';
  return true;
}

function CHRON_add_adwiz_tag(atype, avalue, aname) {
  /* DEPRECATED */
  var adwiztag = document.createElement('adwiz');
  adwiztag.setAttribute('name', aname);
  adwiztag.setAttribute('value', avalue);
  adwiztag.setAttribute('type', atype);
  document.getElementsByTagName('head')[0].appendChild(adwiztag);

  /* The NEW way */
  adwiztag = document.createElement('meta');
  adwiztag.setAttribute( 'name', 'adwiz-' + atype );
  adwiztag.setAttribute( 'content', aname + ";" + value );
  document.getElementsByTagName( 'head' )[0].appendChild( adwiztag );
}

/* Ultimate goal:
 * replace non-standard <adwiz...> with:
 * <meta name="adwiz-keyword" content="key;value" />
 */
function CHRON_get_adwiz_tags() {
  /* get the tags information */
  var CHRON_gat = document.getElementsByTagName('adwiz');
  var CHRON_gat_length = CHRON_gat.length;
  /* set the sitepage array up, this allows ordering of content. */
  var CHRON_sitepage_array = Array();
  CHRON_sitepage ? CHRON_sitepage_array[0] = CHRON_sitepage : CHRON_sitepage_array[0] = '';
  CHRON_sitepage = '';
  for (var i = 0; i < CHRON_gat_length; i++) {
    var tag_name = CHRON_gat[i].getAttribute('name');
    var tag_type = CHRON_gat[i].getAttribute('type');
    var tag_value = CHRON_gat[i].getAttribute('value');
    var tag_order = CHRON_gat[i].getAttribute('order');

    switch (tag_type) {
      case 'keyname':
        if (tag_name && tag_value) {
          adwiz.keyname[tag_name] = tag_value;
          CHRON_add_to_query_string(tag_name + '=' + tag_value);
        }
        break;
      case 'keyword':
        if (tag_value) {
          adwiz.keyword.push(tag_value);
          CHRON_add_to_query_string(tag_value);
        }
        break;
      case 'rkeyname':
        if (tag_name && tag_value) {
          adwiz.keyname[tag_value] = tag_name;
          CHRON_add_to_query_string(tag_value + '=' + tag_name);
        }
        break;
      case 'urloverride':
        if (tag_value) {
          CHRON_page = tag_value;
        }
        break;
      case 'sitepage':
        if (tag_value && tag_order) {
          CHRON_sitepage_array[tag_order] = tag_value;
        }
        break;
      case 'listpos':
        if (tag_value) {
          adwiz.listpos = tag_value;
          CHRON_listpos = tag_value;
        }
        break;
      default:
        break;
    }
  }
  /* clean up the query tag */
  CHRON_clean_query_string();

  CHRON_sitepage_append = '';
  var CHRON_lp = 1;
  /* CHRON_sitepage == set order to sitepage variable */
  for (i = 0; i < CHRON_sitepage_array.length; i++) {
    try {
      if (i < CHRON_lp && CHRON_sitepage_array[i] != '') {
        CHRON_lp = i;
      }
      if (CHRON_sitepage_array[i]) {
        CHRON_sitepage_append += CHRON_sitepage_array[i] + '/';

      }

    } catch (e) {
    }
  }

  if (CHRON_lp == 0) {
    CHRON_sitepage = CHRON_tag_normal(CHRON_sitepage_append);
    adwiz.sitepage = CHRON_sitepage;
    CHRON_sitepage_append = ''; /* destroy it */
  }
  else {
    CHRON_sitepage_append = '/' + CHRON_sitepage_append;
    CHRON_sitepage_append = CHRON_tag_normal(CHRON_sitepage_append);
  }

}


function CHRON_clean_query_string() {
  CHRON_query = CHRON_query.replace(/\&$/, '');
  adwiz.query = adwiz.query.replace(/\&$/, '');

  CHRON_query = CHRON_tag_normal(CHRON_query);
  adwiz.query = CHRON_tag_normal(adwiz.query);
}

function CHRON_set_type_adwiz_tags(xvalue, xname) {
  /* get the tags information
   * xname is an option value and used to set tags with specific name
   */
  var tagname;
  xname ? tagname = xname : tagname = '';
  var CHRON_stat = document.getElementsByTagName('adwiz');
  var CHRON_stat_length = CHRON_stat.length;
  if (tagname == '') {
    /* set all the tags the same */
    for (i = 0; i < CHRON_stat_length; i++) {
      CHRON_stat[i].setAttribute('type', xvalue);
    }
  }
  else {
    for (i = 0; i < CHRON_stat_length; i++) {
      if (CHRON_stat[i].getAttribute('name') == tagname) {
        CHRON_stat[i].setAttribute('type', xvalue);
      }
    }

  }
}

function CHRON_adwiz_tag_name_change(tag2change, newname) {
  /* find the tag and change the name of the tag */
  var CHRON_stat = document.getElementsByTagName('adwiz');
  var CHRON_stat_length = CHRON_stat.length;
  for (i = 0; i < CHRON_stat_length; i++) {
    if (tag2change == CHRON_stat[i].getAttribute('name')) {
      CHRON_stat[i].setAttribute('name', newname);
    }
  }
}

function CHRON_clone_adwiz_tags(tagtype, tagname) {
  try {
    /* get the tags information
     * xname is an option value and used to set tags with specific name
     */
    var xname;
    var adwiz_errors;
    tagname ? xname = tagname : xname = '';
    var CHRON_clone = document.getElementsByTagName('adwiz');
    var CHRON_clone_length = CHRON_clone.length;
    var CHRON_max = 1000;
    if (xname == '') {
      /* clone set all the tags the same */
      for (i = 0; (i < CHRON_clone_length || i > CHRON_max); i++) {
        try {
          var CHRON_cloned_node = CHRON_clone[i].cloneNode(true);
          CHRON_cloned_node.setAttribute('type', tagtype);
          CHRON_clone[i].parentNode.appendChild(CHRON_cloned_node);
          delete (CHRON_cloned_node);
        } catch (e) {
          adwiz_errors += 'CHRON_clone_adwiz_tags --> ' + e + '\n';
        }

      }
    }
    else {
      for (i = 0; i < CHRON_clone_length; i++) {
        if (CHRON_clone[i].getAttribute('name') == tagname) {
          var CHRON_cloned_node = CHRON_clone[i].cloneNode(true);
          CHRON_cloned_node.setAttribute('type', tagtype);
          CHRON_clone[i].parentNode.appendChild(CHRON_cloned_node);
          delete (CHRON_cloned_node);
        }
      }
    }
    delete (CHRON_clone);
    delete (CHRON_clone_length); /* clean up a little */
  } catch (e) {
  }
}

function CHRON_make_adwiz_tags_readable() {
  /* go thru the tags and set the name or value to something readable */
  var CHRON_stat = document.getElementsByTagName('adwiz');
  var CHRON_stat_length = CHRON_stat.length;
  for (i = 0; i < CHRON_stat_length; i++) {
    try {
      CHRON_tmp = CHRON_stat[i].getAttribute('name');
      CHRON_stat[i].setAttribute('name', CHRON_adwiz_lookup[CHRON_tmp].name);
    } catch (e) {
    }
    try {
      CHRON_tmp = CHRON_stat[i].getAttribute('value');
      CHRON_stat[i].setAttribute('value', CHRON_adwiz_lookup[CHRON_tmp].name);
    } catch (e) {
    }
  }
}

function CHRON_adCode(x) {
  return document.getElementById('CHRON_ADPLACEMENT_' + x).innerHTML;
}

function CHRON_json(x) {
  try {
    var c = document.getElementById('CHRON_ADPLACEMENT_' + x);
    /* check for json div */
    var check1 = c.getElementsByTagName('div');
    var json_data = '';
    for (var i in check1) {
      try {
        if (check1[i].getAttribute('type') == 'json') {
          json_data = check1[i].innerHTML;
        }
      } catch (e) {
      }
    }
    /* deliver the data */
    if (json_data != '') {
      return eval('(' + json_data + ')');
    }
    return {};
  } catch (e) {
  }
}

function CHRON_MJX_TAG() {
  adwiz.MJX = document.getElementById('OAS_MJX_CALL');
}

function CHRON_adwiz_add_history(x) {
  /* ad history information to the call */
  try {
    var chron_history_url = document.referrer;
    chron_history_url = chron_history_url.replace(/http:\/\//, '');
    var chron_history = chron_history_url.split(/\//);
    adwiz.referrer = chron_history_url;
    adwiz.referrer_domain = chron_history[0];
    CHRON_query += 'referrer_domain=' + chron_history[0] +
    '&referrer=' +
    chron_history_url +
    '&';
  } catch (e) {
    adwiz_errors += 'history error\n';
  }
}


/* ADWIZ SERVING SECTION */
function CHRON_serve_adwiz() {
  var OAS_version = 11;
  /* adWiz call to adwiz.mpl */
  try {
    var CHRON_adwiz_url = CHRON_adwiz_src + '?url=' + CHRON_page + '&param=' +
    CHRON_param +
    '&mode=' +
    CHRON_adwiz_mode +
    '&version=' +
    OAS_version;
    document.write('<script id="ADWIZ_TAG" type="text/javascript" src="' +
    CHRON_adwiz_url +
    '"><\/script>');
  } catch (e) {
    adwiz_errors += 'adwiz serve error\n';
  }
  adwiz.adwiz = document.getElementById('ADWIZ_TAG');

}

function CHRON_serve_reporter(sitepage, listpos, chron_url) {
  /* adWiz call to error reporting script */
  try {
    document.write('<script id="CHRON_REPORTER" type="text/javascript" ' +
    'src="http://www.chron.com/apps/adWiz/adWizRecorder.mpl?sitepage=' +
    sitepage +
    '&listpos=' +
    listpos +
    '&url=' +
    chron_url +
    '"><\/script>');
  } catch (e) {
    adwiz_errors += 'reporter error\n';
  }
}

function CHRON_serve_OAS_MJX(sitepage, listpos, query) {
  /* adWiz call to Call the MJX code */
  try {
    var rn = CHRON_random_number();
    var OAS_MJX_CALL = OAS_url + 'adstream_mjx.ads/' +
    sitepage +
    '/1' +
    rn +
    '@' +
    listpos +
    '?' +
    query;
    document.write('<scr' + 'ipt type="text/javascript" ' +
    'id="OAS_MJX_CALL" src="' +
    OAS_MJX_CALL +
    '"><\/script>');
  } catch (e) {
    adwiz_errors += 'MJX error\n';
  }
  adwiz.MJX = document.getElementById('OAS_MJX_CALL');
}

function CHRON_serve_OAS_NX(sitepage, listpos, pos, query) {
  /* adWiz call to Call the OAS normal function for nx tags */
  try {
    var OAS_target = '_top';
    document.write('<a href="' + OAS_url + 'click_nx.ads/' +
    sitepage +
    '/1' +
    rn +
    '@' +
    listpos +
    '!' +
    pos +
    '?' +
    query +
    '" target=' +
    OAS_target +
    '>');
    document.write('<img src="' + url + 'adstream_nx.ads/' +
    sitepage +
    '/1' +
    rn +
    '@' +
    listpos +
    '!' +
    pos +
    '?' +
    query +
    '" /><\/a>');
  } catch (e) {
    adwiz_errors += 'NX error\n';
  }
}

/*  END ADWIZ SERVING SECTION */
function CHRON_random_number() {
  var rns = '1234567890';
  var rn = new String(Math.random());
  return (rn.substring(2, 11));
}


function detectAdwizSubDomain() {
  /* this function will look at the detect the chron subdomain used */
  var CHRON_detecthostname = window.location.hostname.split(/\./);
  var CHRON_subdomain = CHRON_detecthostname[0];
  var CHRON_domain = CHRON_detecthostname[1];
  var CHRON_toplevel = CHRON_detecthostname[2];

  if (CHRON_domain == 'chron') {
    switch (CHRON_subdomain) {
      case 'www':
      case 'images':
        return 'www.chron.com';
        break;
      case 'apps':
      case 'testakamai':
      case 'origin':
      case 'origin-www':
        return CHRON_subdomain + '.chron.com';
        break;
      default:
        return 'www.chron.com';
        break;
    }
  }
  else {
    return 'apps.chron.com';
  }
}

function CHRON_adwiz_sync_prototype() {
  var x = adwiz;
  x.sitepage = OAS_sitepage;
  x.listpos = OAS_listpos;
  x.query = OAS_query;
}



function CHRON_showad(x) {
  try {
    var curdiv = document.getElementById('CHRON_ADPLACEMENT_' + x);
    curdiv.style.border = "2px solid red";
    var addiv = document.createElement('div');
    addiv.style.background = 'pink';
    addiv.style.zIndex = '9999';
    addiv.style.border = '2px solid black';
    addiv.onClick = "alert(adwiz.pos(" + x + "))";
    if (adwiz.pos(x).search(/iframe|\-flash/)) {
      /* alert('flash/iframe detected'); */
      addiv.style.position = "absolute";
      addiv.style.inherit = 'no';
    }
    else {
      addiv.style.position = "relative";
    }

    addiv.innerHTML = 'Position: ' + x;
    curdiv.insertBefore(addiv, curdiv.firstChild);
    window.curdiv.focus();
  } catch (e) {
  }
}

/* RELOAD AD FEATURE */
function CHRON_reload() {
  CHRON_destroy_OAS();
  /* recall OAS */
  CHRON_add_OAS_MJX();
  var the_list = adwiz.listpos.split(',');
  for (var i in the_list) {
    CHRON_reload_selected('Top');
  }
}

function CHRON_reload_selected(pos) {
  var temp_write = document.write;
  var temp_container = '';
  document.write = function(x) {
    temp_container += x;
  };
  OAS_AD(pos, 'no_tag');
  document.write = temp_write;
  var c_ad = document.getElementById('CHRON_ADPLACEMENT_' + pos);
  c_ad.style.display = 'none';
  c_ad.innerHTML = 'reloaded' + temp_container;
  c_ad.style.display = 'block';

}

function CHRON_destroy_OAS() {
  var OAS_CALL = document.getElementById('OAS_MJX_CALL');
  OAS_CALL.parentNode.removeChild(OAS_CALL);
}

function CHRON_update_sitepage(x) {
  adwiz.sitepage = x;
  OAS_sitepage = x;
}

function CHRON_update_listpos(x) {
  adwiz.listpos = x;
  OAS_listpos = x;
}

function CHRON_add_OAS_MJX() {
  /* adWiz call to Call the MJX code */
  var rn = CHRON_random_number();
  var OAS_MJX_CALL = OAS_url + 'adstream_mjx.ads/' +
  adwiz.sitepage +
  '/1' +
  rn +
  '@' +
  adwiz.listpos +
  '?' +
  adwiz.query;
  var ns = document.createElement('script');
  ns.id = 'OAS_MJX_CALL';
  ns.src = OAS_MJX_CALL;
  ns.type = 'text/javascript';

  /* append to the head */
  document.getElementsByTagName('head')[0].appendChild(ns);
  adwiz.MJX = document.getElementById('OAS_MJX_CALL');
}


/* END RELOAD AD FEATURE */

function CHRON_meta_info() {
  var m = document.getElementsByTagName('meta');

  for (var i in m) {
    var x = m[i]
    x.name ? x.name = x.name.toLowerCase() : x.name = 'noname';
    try {
      this[x.name] = x.content;
    } catch (e) {
      alert(e)
    }
  }
  return this;
}

/* Ad tracking information */
function CHRON_increment_rm_tracker() {
  /* increment the tracking cookie */
  pageinfo.chron.richmedia.counter++;
  var awd = new Date();
  var awe = awd.toGMTString();
  awe = awe.replace(/\d{1,2}\:\d{1,2}\:\d{1,2}/, '23:59:59');
  document.cookie = 'rmt=' +
  pageinfo.chron.richmedia.counter +
  '; expires=' +
  awe +
  '; path=/';
  /* set expire to end of day */
}

function CHRON_get_rm_tracker() {
  /* check the cookie for the tracking cookie */
  var awc = document.cookie;
  var awa = awc.split(/;\s/);
  for (var i = 0; i < awa.length; i++) {
    if (!awa[i].search(/rmt/)) {
      var rt = awa[i].replace(/rmt=/, '');
      pageinfo.chron.richmedia.counter = rt;
      return rt;
    }
  }
  return 0;
}

function CHRON_validate_tracker() {
  CHRON_get_rm_tracker();
  if (pageinfo.chron.richmedia.counter >= 3 || adwiz.param['NORM']) {
    CHRON_add_to_query_string('&NORM');
    CHRON_clean_query_string();
  }
}

/*------*/

/* audit functions */
if (window.addEventListener)
  window.addEventListener("load", chron_audit_ads, false);
else
  window.onbeforeunload = chron_audit_ads;

function chron_audit_pos(pos) {}

function chron_audit_ads() {
  try {
    var script = document.getElementsByTagName("script");
    var adcall = /yld_mgr\.place_ad_here\( ?['"](\w+)/;
    var ref = [];
    for (var i = 0; i < script.length; i++) {
      var el = script[i];
      if (el.getAttribute("type") == "text/javascript") {
        var m = adcall.exec(el.innerHTML);
        if (m)
          ref.push(m[1]);
      }
    }
    var loc = window.location.toString();
    chron_deadDrop('http://origin.chron.com/apps/audit/ads.gif?cider=2;sitepage=' + OAS_sitepage + ';listpos=' + CiderAds + ';ref=' + ref + ';loc=' + encodeURI(loc));

  } catch (e) {
  }
}

function chron_deadDrop(src) {
  try {
    var ifr = document.createElement('img');
    ifr.src = src;
    document.body.appendChild(ifr);
    ifr.style.visibility = 'hidden';
  } catch (e) {
  }
  return null;
}

/* bright cove functions*/
function playAd(adXML, callback) {
  var callarray = callback.split('|');
  callFlashInstance(callarray[0], "playAd", pageinfo.json('x90'));
}

/* special functions */
function CHRON_commons() {
  try {
    var filename = pageinfo.url.match(/.*\/(\w+\.\w+).*/);
    switch (filename[1]) {
      case 'persona.html':
        pageinfo.url = pageinfo.url + '/' + pageinfo.param.newspaperUserId;
        CHRON_page = pageinfo.url;
        break;
      default:
    }
  } catch (e) {
  }
}

/* this is for a user that has javascript version 1.0
 * Originally in ad.msn
 */
var OAS_rns = CHRON_random_number();

function OAS_NORMAL( pos ) {
  if (OAS_sitepage != '' && OAS_listpos != '') {
    CHRON_serve_OAS_NX(OAS_sitepage, OAS_listpos, pos, OAS_query);
  }
}

/* chronicle control variables need by adWiz.mpl
 * Scoped globally */
var OAS_url = 'http://oascentral.chron.com/RealMedia/ads/';

var CHRON_page = window.location.hostname + window.location.pathname;

var CHRON_param = CHRON_get_param();
var CHRON_hostname = detectAdwizSubDomain();
CHRON_hostname = CHRON_hostname;
var CHRON_adwiz_src = 'http://' + CHRON_hostname + '/apps/adWiz/adWiz.mpl';

/* special variables used by the adwiz html tags and other processing */
var CHRON_query = '';
var CHRON_listpos = '';
var CHRON_sitepage = '';
var CHRON_sitepage_append = '';
try {
  var CHRON_adwiz_mode = adwiz_mode;
} catch (e) {
  var CHRON_adwiz_mode = 'production';
}
try {
  var CHRON_adwiz_serve = adwiz_serve;
} catch (e) {
  var CHRON_adwiz_serve = true;
}


/* Protype of the adwiz tag structure*/
var adwiz = {
  url: CHRON_page,
  keyname: new Array(), /* keyvalue pair */
  keyword: new Array(), /* arary of keywords */
  sitepage: '',
  listpos: '',
  query: '',
  pos: CHRON_adCode,
  json: CHRON_json,
  param: CHRON_get_param_array(),
  rn: CHRON_random_number,
  referrer: '',
  referrer_domain: '',
  reload: CHRON_reload,
  MJX: '',
  adwiz: '',
  show: CHRON_showad,
  readtags: CHRON_get_adwiz_tags,
  addtag: CHRON_add_adwiz_tag,
  meta: CHRON_meta_info(),
  position: function(pos) {
    var temp_write = document.write;
    var temp_container = '';
    document.write = function(x) {
      temp_container += x;
    };
    OAS_AD(pos, 'no_tag');
    document.write = temp_write;
    return temp_container;
  },
  exists: function(pos) {
    var ad_code = this.position(pos);
    if (ad_code === '' || ad_code.search('/empty\.gif/') > -1) {
      return false;
    }
    else {
      return true;
    }
  },
  chron: {
    richmedia: {
      counter: 0,
      increment: CHRON_increment_rm_tracker
    },
    rx: {
      src: function(sitepage, listpos, query) {
        return OAS_url + 'adstream_jx.ads/' + adwiz.sitepage + '/1' + adwiz.rn() + '@' + adwiz.listpos
      },
      serve: function() {
      }
    }
  },
  update: {
    listpos: CHRON_update_listpos,
    sitepage: CHRON_update_sitepage
  },
  yahoo: {
    context: {
      tier: '',
      tag: '',
      category: ''
    }
  }
};
/* prototype alias */
var pageinfo = adwiz;

/* rbx: get and process all of the adwiz custom tags */
CHRON_adwiz_add_history();
CHRON_get_adwiz_tags();
/* rbx: added this function to serve commons pages differently */
CHRON_commons();
/* rbx: validate that the richmedia quota is not meet */
CHRON_validate_tracker();
if (CHRON_adwiz_serve) {
  CHRON_serve_adwiz(); /* actually make the adwiz call */
}

