var adTemplate = 255;



// Define all possible ad positions

var BANNER_TOP    = 1 << 0;

var BANNER_BOTTOM = 1 << 1;

var TOWER_LEFT    = 1 << 2;

var TOWER_RIGHT   = 1 << 3;

var BIGBOX        = 1 << 4;

var BIGBOX_LEFT = 1 << 5;

var SUPER_BANNER  = 1 << 6;

var SUPER_BANNER_BOTTOM = 1 << 7;

var GOOGLE_LINKS	= 1 << 8;

var HALFPAGE_LEFT = 1 << 9;

var TOWER_LEFT_160 = 1 << 10 ;

var FIRST_COLUMN_160 = 1 << 11 ;



// Define all possible ad templates

var STANDARD = 0 ;

var GOOGLELESS = 1 ;

var NONE = 2 ;

var HALFPAGE_ONLY = 3;

var LEADERBOARD_SKY = 4;

var LEADERBOARD_BIGBOX = 5;

var PRINTER_FRIENDLY = 6;

var FLEX_DISPLAY = 7;









var DEFAULT_TEMPLATE = FLEX_DISPLAY ;



// Allow for IE User to get google links

document.layers?GOOGLE=null:GOOGLE=GOOGLE_LINKS;

(window.navigator.userAgent.indexOf("7.1") != -1)?GOOGLE=null:true;



if (typeof commercialNode == 'undefined') {

commercialNode = '';

}

// Makes fourth column equal to true if commercial node is equal to technology

if ( (commercialNode.indexOf("technology") != -1) && (thisNode.indexOf("technology") == -1) ) {

BIGBOX = BIGBOX_LEFT;

TOWER_LEFT_160 = null;

}



// Check screen width to see if user is eligible for fourth column skyscraper (must have a resolution higher than 860 wide, and not use Netscape

if ((screen.width<=860) || (document.layers))

	{FIRST_COLUMN=null;}

else{FIRST_COLUMN=FIRST_COLUMN_160;}



// Removes google links for individual articles.  

articleUrl = document.location.href;

//if (articleUrl.indexOf('A37827-2004Feb12') != -1) GOOGLE=null; // Feb. 13, 2004





if (thisNode == 'world/columns/sanchezmarcela') GOOGLE = null; // NO GOOGLE ON SPANISH ARTICLES

if (thisNode == 'nation/specials/aroundthenation/hurricanes') GOOGLE = null; // NO GOOGLE ON HURRICANE ARTICLES

if (thisNode == 'nation/nationalsecurity') GOOGLE = null;









// Define contents of ad templates

var templateConfigs = new Array();



templateConfigs[ STANDARD ]   = SUPER_BANNER + FIRST_COLUMN_160 + BIGBOX_LEFT + SUPER_BANNER_BOTTOM + GOOGLE ;

templateConfigs[ GOOGLELESS ] = SUPER_BANNER + FIRST_COLUMN_160 + TOWER_LEFT_160 + SUPER_BANNER_BOTTOM ;

templateConfigs[ NONE ]       = 0 ;

templateConfigs[ HALFPAGE_ONLY ] = HALFPAGE_LEFT + GOOGLE;

templateConfigs[ LEADERBOARD_SKY ] = SUPER_BANNER + TOWER_LEFT_160 + SUPER_BANNER_BOTTOM  + GOOGLE;

templateConfigs[ LEADERBOARD_BIGBOX ] = SUPER_BANNER + BIGBOX_LEFT + SUPER_BANNER_BOTTOM  + GOOGLE;

templateConfigs[ PRINTER_FRIENDLY ] = TOWER_LEFT_160 + GOOGLE;

templateConfigs[ FLEX_DISPLAY ] = SUPER_BANNER + BIGBOX_LEFT + SUPER_BANNER_BOTTOM + GOOGLE;





// Make node-to-template assignments



// 120x600 Tower Ads

var nodeConfigs = new AdConfigurations();



nodeConfigs.addConfiguration('entertainment')

.addTemplateAssignment(new TemplateAssignment(LEADERBOARD_SKY,.5))

.addTemplateAssignment(new TemplateAssignment(LEADERBOARD_BIGBOX,.5))

nodeConfigs.addConfiguration('mostemailed')

.addTemplateAssignment(new TemplateAssignment(LEADERBOARD_SKY,.5))

.addTemplateAssignment(new TemplateAssignment(LEADERBOARD_BIGBOX,.5))

nodeConfigs.addConfiguration('admin/keycontent')

.addTemplateAssignment(new TemplateAssignment(LEADERBOARD_BIGBOX,1))

nodeConfigs.addConfiguration('visitorsguide')

.addTemplateAssignment(new TemplateAssignment(LEADERBOARD_SKY,1))

nodeConfigs.addConfiguration('metro')

.addTemplateAssignment(new TemplateAssignment(STANDARD,1))

nodeConfigs.addConfiguration('health')

.addTemplateAssignment(new TemplateAssignment(STANDARD,1))

nodeConfigs.addConfiguration('education')

.addTemplateAssignment(new TemplateAssignment(STANDARD,1))

nodeConfigs.addConfiguration('realestate')

.addTemplateAssignment(new TemplateAssignment(STANDARD,1))

nodeConfigs.addConfiguration('obituaries')

.addTemplateAssignment(new TemplateAssignment(STANDARD,1))

nodeConfigs.addConfiguration('sports')

.addTemplateAssignment(new TemplateAssignment(STANDARD,1))

nodeConfigs.addConfiguration('artsandliving')

.addTemplateAssignment(new TemplateAssignment(STANDARD,1))

nodeConfigs.addConfiguration('cars')

.addTemplateAssignment(new TemplateAssignment(STANDARD,1))





// For this node, select a template

adTemplate = nodeConfigs.getTemplate( thisNode );

if ( (typeof commercialNode != 'undefined') && (commercialNode != "") )

{

  if (thisNode.indexOf("technology") != -1)

    adTemplate = nodeConfigs.getTemplate( thisNode )

  else

    adTemplate = nodeConfigs.getTemplate( commercialNode );

}

else

{

  adTemplate = nodeConfigs.getTemplate( thisNode );

}



if (document.location.href.indexOf("debugAdCode") != -1) document.writeln("Ad Template: " + adTemplate);



// Define objects

// TemplateAssignment associates a template with a frequency ( 0 <= frq <= 1 )

function TemplateAssignment( tmpl, frq )

{

  this.template = tmpl;

  this.frequency = ( ( frq >= 0 ) && ( frq <= 1 ) ) ? frq : 0 ;

}



// NodeTemplateAssignment collects TemplateAssignment objects for a specific node

function NodeTemplateAssignment ( node )

{

  this.node = node;

  this.templates = new Array();

  this.templateCount = 0;

  

  this.addTemplateAssignment = _addAdTemplateAssignment;

  this.selectTemplate = _adSelectTemplate;

}



// AdConfigurations collects NodeTemplateAssignments for the site

function AdConfigurations ()

{

  this.configs = new Array();

  this.length = 0;

  

  this.addConfiguration = _addAdConfiguration;

  this.getTemplate = _adGetTemplate;

}



function _adSelectTemplate()

{

  var base = 0;

  var rNum = Math.random();

  var rTemplate = STANDARD;

  

  for (var count = 0; count < this.templates.length; count++)

  {

    if ( rNum < this.templates[count].frequency + base ) 

    {

      rTemplate = this.templates[count].template;

      break;

      //return this.templates[count].template;

    }

    else

    {

      base += this.templates[count].frequency;

    }

  }

  return rTemplate;

}



function _adGetTemplate ( node )

{

  adTemplate = DEFAULT_TEMPLATE;

  var base = 0;

  var bestMatch = 0;

  for ( var count = 0; count < this.length; count++ )

  {

    if ( this.configs[count].node == node )

    {

      adTemplate = this.configs[count].selectTemplate();

      break;

    }

    else if (( node.indexOf(this.configs[count].node) == 0 ) && ( this.configs[count].node.length > bestMatch ))

    {

      adTemplate = this.configs[count].selectTemplate();

      bestMatch = this.configs[count].node.length;

    }

  }

  return templateConfigs[adTemplate];

}



function _addAdTemplateAssignment( templateAssignment )

{

  this.templates[this.templateCount++] = templateAssignment;

  return this;

}



function _addAdConfiguration ( n )

{

  this.configs[this.length++] = new NodeTemplateAssignment (n);

  return this.configs[this.length - 1];

}