// Mike Carifio <carifio@idg.com> 9/10/99
// A set of scripts to generate HTML code fragments and URLs for DoubleClick ads.

// Return a randomish number with each new invocation.
// THE SAME ORD THROUGOUT THE PAGE DOESN'T WORK. GET A NEW ONE FOR EACH URL!
// var idgOrdConst = (new Date()).getTime();
function idgOrd() { return (new Date()).getTime(); }

// [carifio 11/22/99]
// Return the "run of site" DART site. This is also the default site if
//   no argument is specified in the ads.
function idgROS() { return "idg.us.cio.cio/home";}


// isNN => true iff client is Netscape Navigator version 'version'
function isNN(version) {
  return navigator.appName == "Netscape" && navigator.appVersion[0] == version;
}

// isIE(3) => true iff IE3; isIE(4) => true iff IE4
function isIE(version) {
  return navigator.appName == "Microsoft Internet Explorer" && version > 3;
}


// [carifio 5/26/00 Added a debugging mode to test ads in production. Looks for '?debug' in the url.]
var idgDebugConst = false; 
// try { idgDebugConst = top.document.URL.indexOf("?debug") > -1; } catch(e) { }
function idgDebug() { return idgDebugConst; }





// Writes msg to current window's document.
function say(msg) {
  if (idgDebug()) alert("DEBUG: |" + msg + "|");
  document.write(msg);
}

// HTML fragments to close NN ads.
var idgCloseHtml =  new Array();

// Returns a doubleclick URL with the apropriate site, sz, tile and ord.
// Result: http://ad.doubleclick.net/[adi|jump|ad]/;sz=<size>x<size>;tile=<tile>;ord=<random>?
//  where size is an integer, tile is an integer counting up from 1 
//  and random is a large random number,
//  one per url. Current sizes are 125x125, 468x60, 150x800,
//  180x70 and 150x56 respectively. New sizes can be added in
//  collaboration with DoubleClick.

function idgMakeUrl(kind, site, rest) { 
  var result = "http://ad.doubleclick.net/" + kind + "/" + site;
  for (var i in rest) result += ";" + i + "=" + rest[i];
  return result + ";ord=" + idgOrd() + "?";
}

// The workhorse, inserts the appropriate ad in the current page at the current position.
// Keeps a running count of the ads created on a page and uses it to "count up" the tiles.
// The actual HTML to insert is generated by adHtml.

idgCloseHtml[0] = "";  // final closing html, if you ever need it.
function idgAd(width, height, tile, adiURL, adlURL, jumpURL, adURL) {
  if (isNN(4)) idgCloseHtml[tile] = "<layer src='" + adlURL+ 
      "' width='" + width + "' height='" + height +
      "' visibility='hide' onLoad='moveToAbsolute(layer" + tile + 
      ".pageX,layer" + tile + ".pageY);clip.height=" + height +
      ";clip.width=" + width + ";visibility=\"show\";'></layer>";
   say(idgAdHtml(width, height, tile, adiURL, jumpURL, adURL));
}


// The other workhorse, generate the HTML DoubleClick suggests for ad insertion.
// Some black art here.
function idgAdHtml(width, height, tile, adiURL, jumpURL, adURL) {

  // v3 and all other browsers
  var simple="<a href='" +
    jumpURL +  "'><img height='" + height + "' width='" +
    width + "' src='" + adURL + "'></a>"

  // ie 3+
  if (isIE(4)) return "<iframe src='" + adiURL + "' width='" + width + "' height='" + height +
    "' frameborder='0' border='0' marginwidth='0' marginheight='0' vspace='0' hspace='5' scrolling='no' noscroll>" +
      simple + "</iframe>";

  // nn4
  if (isNN(4)) return "<ilayer id='layer" + tile + "' visibility='hide' width='" + width + "' height='" + height + "'></ilayer>" 

  return simple;
}

// You can insert five kinds of ads -- 468x60, 125x125, 150x800, 180x70 or 150x56-- in a page. 
// Each function inserts a kind. See idgAd.html for example usage.

var idgTile = 0;
var idgLeft = 0;


// public, usage: idgAd468x60([optional site]); default is idgROS()
function idgAd468x60() {
  var arity = arguments.length;
  if (0 == arity) {
    var site = idgROS();
  } else {
    var site = arguments[0];
  }

  idgTile += 1;

  var pairs = new Object();
  pairs.pos = "top";
  pairs.sz = "468x60";
  pairs.tile = idgTile;
  // Add additional pairs here, before idgAd call

  // override or add to pairs
  for (var i = 1; i < arity; i += 2) 
    pairs[arguments[i]] = arguments[i + 1];

  // [carifio 5/1/00] Added 'abr=!ie' for the 'jump' and 'ad' url's.
  //  Controls load order in IE, ignored for NN. Must first clone all
  //  attribute/values in the pairs before adding the new one. Object.clone()
  //  not supported in all versions all browsers.
  var jumpPairs = new Object();
  for (var i in pairs) jumpPairs[i] = pairs[i];
  jumpPairs.abr = "!ie";

  idgAd(468, 60, idgTile,
     idgMakeUrl("adi", site, pairs),
     idgMakeUrl("adl", site, pairs),
     idgMakeUrl("jump", site, jumpPairs),
     idgMakeUrl("ad", site, jumpPairs));
}

function idgAdSpecial(site, special) { 
  idgTile += 1;

  var pairs = new Object();
  pairs.special = special;
  pairs.pos = "top";
  pairs.sz = "468x60";
  pairs.tile = idgTile;
  // Add additional pairs here, before idgAd call

  idgAd(468, 60, idgTile,
     idgMakeUrl("adi", site, pairs),
     idgMakeUrl("adl", site, pairs),
     idgMakeUrl("jump", site, pairs),
     idgMakeUrl("ad", site, pairs));
}


// public, usage: idgAd125x125([optional site]); default is idgROS()
function idgAd125x125() {
  var arity = arguments.length;
  if (0 == arity) {
    var site = idgROS();
  } else {
    var site = arguments[0];
  }

  idgTile += 1;

  var pairs = new Object();
  pairs.pos = "left" + (++idgLeft);
  pairs.sz = "125x125";
  pairs.tile = idgTile;
  // Add additional pairs here, before idgAd call

  // override or add to pairs
  for (var i = 1; i < arity; i += 2)
    pairs[arguments[i]] = arguments[i + 1];

  idgAd(125, 125, idgTile,
     idgMakeUrl("adi", site, pairs),
     idgMakeUrl("adl", site, pairs),
     idgMakeUrl("jump", site, pairs),
     idgMakeUrl("ad", site, pairs));

  idgLeft %= 2;
}


// public, usage: idgAd150x800([optional site]); default is idgROS()
function idgAd150x800() { 
  var arity = arguments.length;
  if (0 == arity) {
    var site = idgROS();
  } else {
    var site = arguments[0];
  }

  idgTile += 1;
  
  var pairs = new Object();
  pairs.pos = "right";
  pairs.sz = "150x800";
  pairs.tile = idgTile;
  // Add additional pairs here, before idgAd call

  // override or add to pairs
  for (var i = 1; i < arity; i += 2)
    pairs[arguments[i]] = arguments[i + 1];

  idgAd(150, 800, idgTile,
     idgMakeUrl("adi", site, pairs),
     idgMakeUrl("adl", site, pairs),
     idgMakeUrl("jump", site, pairs),
     idgMakeUrl("ad", site, pairs));
}


// public, usage: idgAd180x70([optional site]); default is idgROS()
function idgAd180x70(site) { 
  var arity = arguments.length;
  if (0 == arity) {
    var site = idgROS();
  } else {
    var site = arguments[0];
  }

  idgTile += 1;

  var pairs = new Object();
  pairs.pos = "top";
  pairs.sz = "180x70";
  pairs.tile = idgTile;
  // Add additional pairs here, before idgAd call

  // override or add to pairs
  for (var i = 1; i < arity; i += 2)
    pairs[arguments[i]] = arguments[i + 1];

  idgAd(180, 70, idgTile,
     idgMakeUrl("adi", site, pairs),
     idgMakeUrl("adl", site, pairs),
     idgMakeUrl("jump", site, pairs),
     idgMakeUrl("ad", site, pairs));
}

// public, usage: idgAd150x56([optional site]); default is idgROS()
function idgAd150x56() { 
  var arity = arguments.length;
  if (0 == arity) {
    var site = idgROS();
  } else {
    var site = arguments[0];
  }

  idgTile += 1;

  var pairs = new Object();
  pairs.pos = "top";
  pairs.sz = "150x56";
  pairs.tile = idgTile;
  // Add additional pairs here, before idgAd call

  // override or add to pairs
  for (var i = 1; i < arity; i += 2)
    pairs[arguments[i]] = arguments[i + 1];

  idgAd(150, 56, idgTile,
     idgMakeUrl("adi", site, pairs),
     idgMakeUrl("adl", site, pairs),
     idgMakeUrl("jump", site, pairs),
     idgMakeUrl("ad", site, pairs));
}


// public, usage: idgAd200x200([optional site]); default is idgROS()
function idgAd200x200() { 
  var arity = arguments.length;
  if (0 == arity) {
    var site = idgROS();
  } else {
    var site = arguments[0];
  }

  idgTile += 1;

  var pairs = new Object();
  pairs.pos = "popup";
  pairs.sz = "200x200";
  pairs.tile = idgTile;
  // Add additional pairs here, before idgAd call

  // override or add to pairs
  for (var i = 1; i < arity; i += 2)
    pairs[arguments[i]] = arguments[i + 1];

  idgAd(200, 200, idgTile,
     idgMakeUrl("adi", site, pairs),
     idgMakeUrl("adl", site, pairs),
     idgMakeUrl("jump", site, pairs),
     idgMakeUrl("ad", site, pairs));
}
// public, usage: idgAd220x800([optional site]); default is idgROS()

function idgAd220x800() { 
  var arity = arguments.length;
  if (0 == arity) {
    var site = idgROS();
  } else {
    var site = arguments[0];
  }

  idgTile += 1;

  var pairs = new Object();
  pairs.pos = "right";
  pairs.sz = "220x800";
  pairs.tile = idgTile;
  // Add additional pairs here, before idgAd call

  // override or add to pairs
  for (var i = 1; i < arity; i += 2)
    pairs[arguments[i]] = arguments[i + 1];

  idgAd(220, 800, idgTile,
     idgMakeUrl("adi", site, pairs),
     idgMakeUrl("adl", site, pairs),
     idgMakeUrl("jump", site, pairs),
     idgMakeUrl("ad", site, pairs));
}


// [carifio 5/9/00] Added 1x1 ad
// public, usage: idgAd1x1([optional site]); default is idgROS()

function idgAd1x1() { 
  var arity = arguments.length;
  if (0 == arity) {
    var site = idgROS();
  } else {
    var site = arguments[0];
  }

  idgTile += 1;

  var pairs = new Object();
  pairs.pos = "phantom";
  pairs.sz = "1x1";
  pairs.tile = idgTile;
  // Add additional pairs here, before idgAd call

  // override or add to pairs
  for (var i = 1; i < arity; i += 2)
    pairs[arguments[i]] = arguments[i + 1];

  idgAd(1, 1, idgTile,
     idgMakeUrl("adi", site, pairs),
     idgMakeUrl("adl", site, pairs),
     idgMakeUrl("jump", site, pairs),
     idgMakeUrl("ad", site, pairs));
}




// [carifio 6/12/00] Added phantom ad
// public, usage: idgAdphantom([optional site]); default is idgROS()

function idgAdphantom() { 
  var arity = arguments.length;
  if (0 == arity) {
    var site = idgROS();
  } else {
    var site = arguments[0];
  }

  idgTile += 1;

  var pairs = new Object();
  pairs.tile = idgTile;
  // Add additional pairs here, before idgAd call

  // override or add to pairs
  for (var i = 1; i < arity; i += 2)
    pairs[arguments[i]] = arguments[i + 1];

  idgAd(1, 1, idgTile,
     idgMakeUrl("adi", site, pairs),
     idgMakeUrl("adl", site, pairs),
     idgMakeUrl("jump", site, pairs),
     idgMakeUrl("ad", site, pairs));
}

// [kkimball 12/01/00] Added phantom ad for idg tracking

function idgciosurveytrack() { 
  var arity = arguments.length;
  if (0 == arity) {
	 var site = "idg.us.ciosurvey/ciosurvey121900";
  } else {
    var site = "idg.us.ciosurvey/ciosurvey121900";
  }
  idgTile += 1;
  var pairs = new Object();
  pairs.tile = idgTile;

  // Add additional pairs here, before idgAd call
  
  // override or add to pairs
  for (var i = 1; i < arity; i += 2)
    pairs[arguments[i]] = arguments[i + 1];


  idgAd(1, 1, idgTile,
     idgMakeUrl("adi", site, pairs),
     idgMakeUrl("adl", site, pairs),
     idgMakeUrl("jump", site, pairs),
     idgMakeUrl("ad", site, pairs));
}

// [kkimball 12/01/00] Added phantom ad for idg tracking

function idgdarwinsurveytrack() { 
  var arity = arguments.length;
  if (0 == arity) {
	 var site = "idg.us.darwinsurvey/darwinsurvey121900";
  } else {
    var site = "idg.us.darwinsurvey/darwinsurvey121900";
  }
  idgTile += 1;
  var pairs = new Object();
  pairs.tile = idgTile;

  // Add additional pairs here, before idgAd call
  
  // override or add to pairs
  for (var i = 1; i < arity; i += 2)
    pairs[arguments[i]] = arguments[i + 1];


  idgAd(1, 1, idgTile,
     idgMakeUrl("adi", site, pairs),
     idgMakeUrl("adl", site, pairs),
     idgMakeUrl("jump", site, pairs),
     idgMakeUrl("ad", site, pairs));
}

// [kkimball 12/01/00] Added phantom ad for idg tracking

function idgtrack() { 
  var arity = arguments.length;
  if (0 == arity) {
	 var site = "idg.pixel.global/idgpixel7.18.00";
  } else {
    var site = "idg.pixel.global/idgpixel7.18.00";
  }
  idgTile += 1;
  var pairs = new Object();
  pairs.tile = idgTile;

  // Add additional pairs here, before idgAd call
  
  // override or add to pairs
  for (var i = 1; i < arity; i += 2)
    pairs[arguments[i]] = arguments[i + 1];


  idgAd(1, 1, idgTile,
     idgMakeUrl("adi", site, pairs),
     idgMakeUrl("adl", site, pairs),
     idgMakeUrl("jump", site, pairs),
     idgMakeUrl("ad", site, pairs));
}

// [kkimball 12/01/00] Added phantom ad for cio tracking

function ciotrack() { 
  var arity = arguments.length;
  if (0 == arity) {
	 var site = "idg.pixel.usa.cio/usacio8.1.00";
  } else {
    var site = "idg.pixel.usa.cio/usacio8.1.00";
  }
  idgTile += 1;
  var pairs = new Object();
  pairs.tile = idgTile;

  // Add additional pairs here, before idgAd call
  
  // override or add to pairs
  for (var i = 1; i < arity; i += 2)
    pairs[arguments[i]] = arguments[i + 1];


  idgAd(1, 1, idgTile,
     idgMakeUrl("adi", site, pairs),
     idgMakeUrl("adl", site, pairs),
     idgMakeUrl("jump", site, pairs),
     idgMakeUrl("ad", site, pairs));
}

// [kkimball 12/01/00] Added phantom ad for darwinmag tracking

function darwintrack() { 
  var arity = arguments.length;
  if (0 == arity) {
	 var site = "idg.pixel.usa.darwin/usadar8.1.00";
  } else {
    var site = "idg.pixel.usa.darwin/usadar8.1.00";
  }
  idgTile += 1;
  var pairs = new Object();
  pairs.tile = idgTile;

  // Add additional pairs here, before idgAd call
  
  // override or add to pairs
  for (var i = 1; i < arity; i += 2)
    pairs[arguments[i]] = arguments[i + 1];


  idgAd(1, 1, idgTile,
     idgMakeUrl("adi", site, pairs),
     idgMakeUrl("adl", site, pairs),
     idgMakeUrl("jump", site, pairs),
     idgMakeUrl("ad", site, pairs));
}



// Note: You need only call idgAdDone once. Calling multiple times
//  does nothing.
var idgAdIsDone = false;
function idgAdDone() {
  if (idgAdIsDone) return;
  for (var i = idgCloseHtml.length-1; i >= 0; --i) {
    say(idgCloseHtml[i]);
  }
  idgAdIsDone = true;
}

// eof idgAd.js

