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 SUPER_BANNER  = 1 << 5;
var BIGBOX_BOTTOM = 1 << 6;
var TOWER_RIGHT_160 = 1 << 7;
var GOOGLE_LINKS	= 1 << 8;
var SUPER_BANNER_BOTTOM = 1 << 9;
var HALFPAGE_LEFT = 1 << 10;


// Define all possible ad templates
var NEWS_TOWER     = 0;
var NEWS_BIGBOX    = 1;
var BIGFIVE_TOWER  = 2;
var BIGFIVE_BIGBOX = 3;
var WASHTECH       = 4;
var OBIT           = 5;
var NEWS_SUPER_BANNER = 6;
var TECH_SUPER_BANNER = 7;
var TRAVEL_TOWER = 8;
var RE_TOWER = 9;
var BANNER_ONLY = 10;
var NEWS_TOWER_160 = 11;
var BIGFIVE_TOWER_160  = 12;
var WASHTECH_160 = 13;
var NEWS_SUPER_BANNER_160 = 14;
var TECH_SUPER_BANNER_160 = 15;
var TRAVEL_TOWER_160 = 16;
var RE_TOWER_160 = 17;
var BOX_ONLY = 18;
var POL_NEWS_SUPER_BANNER_160 = 19;
var POL_BOX_ONLY = 20;
var NEWS_BIGBOX_GOOGLE = 21;
var LIVEONLINE_BIGBOX = 22;
var ADMIN_TOWER = 23;
var ADMIN_BIGBOX = 24;
var ADMIN_HALFPAGE = 25;
var TECH_160_NO_GOOGLE = 26;
var FEDWORK_ONLY = 27;

var DEFAULT_TEMPLATE = NEWS_TOWER_160;

// Allow for IE User to get google links
document.layers?GOOGLE=null:GOOGLE=GOOGLE_LINKS;

// Define contents of ad templates
var templateConfigs = new Array();
templateConfigs[ NEWS_TOWER_160 ]     = BANNER_TOP + TOWER_RIGHT_160 + GOOGLE;
templateConfigs[ NEWS_TOWER ]     = BANNER_TOP + TOWER_RIGHT + GOOGLE;
templateConfigs[ NEWS_BIGBOX ]    = BANNER_BOTTOM + BIGBOX ;
templateConfigs[ NEWS_BIGBOX_GOOGLE ]    = BANNER_BOTTOM + BIGBOX + GOOGLE;
templateConfigs[ BIGFIVE_TOWER_160 ]  = BANNER_TOP + TOWER_RIGHT_160 + BANNER_BOTTOM + GOOGLE;
templateConfigs[ BIGFIVE_TOWER ]  = BANNER_TOP + TOWER_RIGHT + BANNER_BOTTOM ;
templateConfigs[ BIGFIVE_BIGBOX ] = BANNER_BOTTOM + BIGBOX + GOOGLE;
templateConfigs[ WASHTECH_160 ]       = SUPER_BANNER + TOWER_RIGHT_160 + SUPER_BANNER_BOTTOM + BIGBOX + GOOGLE;
templateConfigs[ WASHTECH ]       = BANNER_TOP + TOWER_RIGHT + BANNER_BOTTOM + BIGBOX;
templateConfigs[ OBIT ]           = 0;
templateConfigs[ NEWS_SUPER_BANNER_160 ] = SUPER_BANNER + /*TOWER_RIGHT_160 +*/ BANNER_BOTTOM + GOOGLE;
templateConfigs[ POL_NEWS_SUPER_BANNER_160 ] = SUPER_BANNER + TOWER_RIGHT_160 + BANNER_BOTTOM ;
templateConfigs[ NEWS_SUPER_BANNER ] = SUPER_BANNER + TOWER_RIGHT + BANNER_BOTTOM ;
templateConfigs[ TECH_SUPER_BANNER_160 ] = SUPER_BANNER + TOWER_RIGHT_160 + SUPER_BANNER_BOTTOM + BIGBOX + GOOGLE;
templateConfigs[ TECH_SUPER_BANNER ] = SUPER_BANNER + TOWER_RIGHT + BANNER_BOTTOM + BIGBOX;

templateConfigs[ FEDWORK_ONLY ] = SUPER_BANNER + TOWER_RIGHT_160 + SUPER_BANNER_BOTTOM;
 

templateConfigs[ TRAVEL_TOWER_160 ]   = BANNER_TOP + TOWER_RIGHT_160 + BANNER_BOTTOM + GOOGLE;
templateConfigs[ TRAVEL_TOWER ]   = BANNER_TOP + TOWER_RIGHT + BANNER_BOTTOM ;
templateConfigs[ RE_TOWER_160 ]   = BANNER_TOP + TOWER_RIGHT_160 + BANNER_BOTTOM + TOWER_LEFT + GOOGLE;
templateConfigs[ RE_TOWER ]   = BANNER_TOP + TOWER_RIGHT + BANNER_BOTTOM + TOWER_LEFT ;
templateConfigs[ BANNER_ONLY ]   = BANNER_BOTTOM + GOOGLE;

templateConfigs[ BOX_ONLY ]   = BIGBOX + BANNER_BOTTOM + GOOGLE;
templateConfigs[ POL_BOX_ONLY ]   = BIGBOX;
templateConfigs[ LIVEONLINE_BIGBOX ]   = BANNER_TOP + GOOGLE + BIGBOX;

templateConfigs[ ADMIN_TOWER ]   = SUPER_BANNER + TOWER_RIGHT_160 + SUPER_BANNER_BOTTOM + GOOGLE;
templateConfigs[ ADMIN_BIGBOX ]   = SUPER_BANNER + BIGBOX + SUPER_BANNER_BOTTOM + GOOGLE;
templateConfigs[ ADMIN_HALFPAGE ]   = SUPER_BANNER + HALFPAGE_LEFT + SUPER_BANNER_BOTTOM + GOOGLE;

templateConfigs[ TECH_160_NO_GOOGLE ] = SUPER_BANNER + TOWER_RIGHT_160 + SUPER_BANNER_BOTTOM + BIGBOX ;
// Make node-to-template assignments

// 120x600 Tower Ads
var nodeConfigs = new AdConfigurations();
nodeConfigs.addConfiguration( 'nation/nationalsecurity/abroad/iraq' )
           .addTemplateAssignment ( new TemplateAssignment( BANNER_ONLY,            1) );
nodeConfigs.addConfiguration( 'metro/obituaries' )
           .addTemplateAssignment ( new TemplateAssignment( OBIT,            1) );
nodeConfigs.addConfiguration( 'nation' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER_160,     .2) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_BIGBOX_GOOGLE,    .8) );
nodeConfigs.addConfiguration( 'jobs' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER_160,     .5) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_BIGBOX_GOOGLE,    .5) );
nodeConfigs.addConfiguration( 'world' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER_160,     .2) )
           .addTemplateAssignment ( new TemplateAssignment( BOX_ONLY,    .8) );
nodeConfigs.addConfiguration( 'metro' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER_160,     .2) )
           .addTemplateAssignment ( new TemplateAssignment( BOX_ONLY,    .8) );
nodeConfigs.addConfiguration( 'sports' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER_160,     .2) )
           .addTemplateAssignment ( new TemplateAssignment( BOX_ONLY,    .8) );
nodeConfigs.addConfiguration( 'business' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER_160,     .4) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_BIGBOX_GOOGLE,       .6) );
nodeConfigs.addConfiguration( 'food' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER_160,     .2) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_BIGBOX_GOOGLE,    .8) );
nodeConfigs.addConfiguration( 'style' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER_160,     .2) )
           .addTemplateAssignment ( new TemplateAssignment( BOX_ONLY,    .8) );
nodeConfigs.addConfiguration( 'style/columns/horoscope' )
           .addTemplateAssignment ( new TemplateAssignment( POL_NEWS_SUPER_BANNER_160,     .2) )
           .addTemplateAssignment ( new TemplateAssignment( POL_BOX_ONLY,    .8) );
nodeConfigs.addConfiguration( 'travel' )
           .addTemplateAssignment ( new TemplateAssignment( TRAVEL_TOWER_160,   1) );
nodeConfigs.addConfiguration( 'health' )
           .addTemplateAssignment ( new TemplateAssignment( BIGFIVE_TOWER_160,  .7) )
           .addTemplateAssignment ( new TemplateAssignment( BIGFIVE_BIGBOX, .3) );
nodeConfigs.addConfiguration( 'home' )
           .addTemplateAssignment ( new TemplateAssignment( BIGFIVE_TOWER_160,  .7) )
           .addTemplateAssignment ( new TemplateAssignment( BIGFIVE_BIGBOX, .3) );
nodeConfigs.addConfiguration( 'education' )
           .addTemplateAssignment ( new TemplateAssignment( BIGFIVE_BIGBOX, 1) );
nodeConfigs.addConfiguration( 'world/columns/sanchezmarcela') 
           .addTemplateAssignment ( new TemplateAssignment( POL_NEWS_SUPER_BANNER_160,     .2) )
           .addTemplateAssignment ( new TemplateAssignment( POL_BOX_ONLY,    .8) );
nodeConfigs.addConfiguration( 'politics' )
           .addTemplateAssignment ( new TemplateAssignment( ADMIN_BIGBOX,     1) );
nodeConfigs.addConfiguration( 'washtech' )
            .addTemplateAssignment ( new TemplateAssignment( WASHTECH_160,        .85) )
            .addTemplateAssignment ( new TemplateAssignment( TECH_SUPER_BANNER_160, .15) );
nodeConfigs.addConfiguration( 'technology' )
            .addTemplateAssignment ( new TemplateAssignment( WASHTECH_160,        .5) )
            .addTemplateAssignment ( new TemplateAssignment( TECH_SUPER_BANNER_160, .5) );
nodeConfigs.addConfiguration( 'liveonline' )
            .addTemplateAssignment ( new TemplateAssignment( NEWS_TOWER_160,        .5) )
            .addTemplateAssignment ( new TemplateAssignment( LIVEONLINE_BIGBOX , .5) );
			
			
// this configuration is for Email this Article for technology articles:
nodeConfigs.addConfiguration( 'technology/email' )
						.addTemplateAssignment ( new TemplateAssignment( BIGFIVE_TOWER_160,     .2) )
           	.addTemplateAssignment ( new TemplateAssignment( BIGFIVE_BIGBOX,    .8) );

// Articles that DO NOT get google links		   
// 120x600 Tower Ads
nodeConfigs.addConfiguration( 'realestate' )
           .addTemplateAssignment ( new TemplateAssignment( RE_TOWER,     1) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_BIGBOX,    0) );
nodeConfigs.addConfiguration( 'weather' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_TOWER,     .6) )
           .addTemplateAssignment ( new TemplateAssignment( LIVEONLINE_BIGBOX,    .4) );
nodeConfigs.addConfiguration( 'entertainment' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER, .1) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_TOWER, .4) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_BIGBOX, .5) );
		   
		   
nodeConfigs.addConfiguration( 'admin/keycontent' )
           .addTemplateAssignment ( new TemplateAssignment( ADMIN_TOWER, .5) )
		   .addTemplateAssignment ( new TemplateAssignment( ADMIN_BIGBOX, .25) )
		   .addTemplateAssignment ( new TemplateAssignment( ADMIN_HALFPAGE, .25) );
		   
		   nodeConfigs.addConfiguration( 'politics/fedpage/workers' )
           .addTemplateAssignment ( new TemplateAssignment( FEDWORK_ONLY, 1) );
		   
		   nodeConfigs.addConfiguration( 'politics/elections/2004/zipfinder' )
           .addTemplateAssignment ( new TemplateAssignment( ADMIN_TOWER, 1) )



nodeConfigs.addConfiguration( 'visitorsguide' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER, 0) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_TOWER, 1) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_BIGBOX, 0) );

			
// For this node, select a template
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 = NEWS_TOWER;
  
  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];
}

