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 ;



// Define all possible ad templates
var NEWS_TOWER     = 0;
var NEWS_BIGBOX    = 1;
var BIGFIVE_TOWER  = 2;
var BIGFIVE_BIGBOX = 3;
var OBIT           = 4;
var NEWS_SUPER_BANNER = 5;
var BANNER_ONLY = 6;
var BOX_ONLY = 7;
var LIVEONLINE_BIGBOX = 8;
var NEWS_SUPER_BANNER_NOGOOGLE = 9;
var BOX_ONLY_NOGOOGLE = 10; 
var HALFPAGE_ONLY = 11;
var TECH          = 12;
var TECH_SUPER_BANNER = 13;
var BANNER_BIGBOX = 14;
var POLITICS_BOX_ONLY = 15;
var BIGFIVE_TOWER_NO  = 16;
var BIGFIVE_BIGBOX_NO = 17;
var ENLARGE_PHOTO = 18;
var PRINTER_FRIENDLY = 19;
var NEWS_TOWER_NO     = 20;
var LIVEONLINE_BIGBOX_NO = 21;


var DEFAULT_TEMPLATE = NEWS_TOWER;

// Allow for IE User to get google links
document.layers?GOOGLE=null:GOOGLE=GOOGLE_LINKS;
if (thisNode == "business/industries/transportation/autos") GOOGLE=null;
var ourURL = document.location.href;
if (ourURL.indexOf("language=printer") != -1) {
document.write('<S\CRIPT LANGUAGE="javascript" SRC="http://media.washingtonpost.com/wp-srv/popjs/popupCampaignClasses.js"></S\CRIPT>');
}

// Define contents of ad templates
var templateConfigs = new Array();

templateConfigs[ NEWS_TOWER ]     = SUPER_BANNER + TOWER_LEFT_160 + GOOGLE;
templateConfigs[ NEWS_BIGBOX ]    = SUPER_BANNER + SUPER_BANNER_BOTTOM + BIGBOX_LEFT + GOOGLE;
templateConfigs[ BIGFIVE_TOWER ]  = SUPER_BANNER + TOWER_LEFT_160 + SUPER_BANNER_BOTTOM + GOOGLE;
templateConfigs[ BIGFIVE_BIGBOX ] = SUPER_BANNER + SUPER_BANNER_BOTTOM + BIGBOX_LEFT + GOOGLE;
templateConfigs[ OBIT ]           = 0;
templateConfigs[ NEWS_SUPER_BANNER ] = SUPER_BANNER + TOWER_LEFT_160 + SUPER_BANNER_BOTTOM + GOOGLE ;
templateConfigs[ BANNER_ONLY ]   = SUPER_BANNER_BOTTOM + GOOGLE;
templateConfigs[ BOX_ONLY ]   = BIGBOX_LEFT + GOOGLE;
templateConfigs[ LIVEONLINE_BIGBOX ]   = SUPER_BANNER + BIGBOX_LEFT + GOOGLE ;
templateConfigs[ NEWS_SUPER_BANNER_NOGOOGLE ] = SUPER_BANNER + TOWER_LEFT_160 + SUPER_BANNER_BOTTOM ;
templateConfigs[ BOX_ONLY_NOGOOGLE ]   = BIGBOX_LEFT ;
templateConfigs[ HALFPAGE_ONLY ] = HALFPAGE_LEFT + GOOGLE ;
templateConfigs[ TECH ]   = SUPER_BANNER + TOWER_LEFT_160 + BANNER_BOTTOM + BIGBOX + GOOGLE;
templateConfigs[ TECH_SUPER_BANNER ] = SUPER_BANNER + TOWER_LEFT_160 + BANNER_BOTTOM + BIGBOX + GOOGLE;
templateConfigs[ BANNER_BIGBOX ] = SUPER_BANNER + BIGBOX + GOOGLE;
templateConfigs[ POLITICS_BOX_ONLY ]   = BIGBOX_LEFT + BANNER_BOTTOM + GOOGLE;
templateConfigs[ BIGFIVE_TOWER_NO ]  = SUPER_BANNER + TOWER_LEFT_160 + SUPER_BANNER_BOTTOM;
templateConfigs[ BIGFIVE_BIGBOX_NO ] = SUPER_BANNER + SUPER_BANNER_BOTTOM + BIGBOX_LEFT;
templateConfigs[ ENLARGE_PHOTO ] = TOWER_LEFT_160;
templateConfigs[ PRINTER_FRIENDLY ] = TOWER_LEFT_160 + GOOGLE;
templateConfigs[ NEWS_TOWER_NO ]     = SUPER_BANNER + TOWER_LEFT_160;
templateConfigs[ LIVEONLINE_BIGBOX_NO ]   = SUPER_BANNER + BIGBOX_LEFT ;



// 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( HALFPAGE_ONLY,         .05 ) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER,     .25) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_BIGBOX,    .7) );
nodeConfigs.addConfiguration( 'jobs' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER,     .5) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_BIGBOX,    .5) );
nodeConfigs.addConfiguration( 'world' )
           .addTemplateAssignment ( new TemplateAssignment( HALFPAGE_ONLY,         .1 ) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER,     .25) )
           .addTemplateAssignment ( new TemplateAssignment( BOX_ONLY,    .65) );
nodeConfigs.addConfiguration( 'metro' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER,     .2) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_BIGBOX,    .8) );
nodeConfigs.addConfiguration( 'sports' )
           .addTemplateAssignment ( new TemplateAssignment( HALFPAGE_ONLY,         .5 ) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER,     .25) )
           .addTemplateAssignment ( new TemplateAssignment( BOX_ONLY,    .75) );
nodeConfigs.addConfiguration( 'business' )
           .addTemplateAssignment ( new TemplateAssignment( HALFPAGE_ONLY,         .05 ) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER,     .5) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_BIGBOX,       .45) );
nodeConfigs.addConfiguration( 'food' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER,     .2) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_BIGBOX,    .8) );
nodeConfigs.addConfiguration( 'style' )
	       .addTemplateAssignment ( new TemplateAssignment( HALFPAGE_ONLY,         .1 ) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER,     .25) )
           .addTemplateAssignment ( new TemplateAssignment( BOX_ONLY,    .65) );
nodeConfigs.addConfiguration( 'travel' )
           .addTemplateAssignment ( new TemplateAssignment( BIGFIVE_TOWER,   1) );
nodeConfigs.addConfiguration( 'health' )
           .addTemplateAssignment ( new TemplateAssignment( BIGFIVE_TOWER,  .3) )
           .addTemplateAssignment ( new TemplateAssignment( BIGFIVE_BIGBOX, .7) );
nodeConfigs.addConfiguration( 'home' )
           .addTemplateAssignment ( new TemplateAssignment( BIGFIVE_TOWER,  .4) )
           .addTemplateAssignment ( new TemplateAssignment( BIGFIVE_BIGBOX, .6) );
nodeConfigs.addConfiguration( 'education' )
           .addTemplateAssignment ( new TemplateAssignment( BIGFIVE_TOWER,  .65) )
           .addTemplateAssignment ( new TemplateAssignment( BIGFIVE_BIGBOX, .35) );
nodeConfigs.addConfiguration( 'world/columns/sanchezmarcela') 
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER_NOGOOGLE,     .4) )
           .addTemplateAssignment ( new TemplateAssignment( BOX_ONLY_NOGOOGLE,    .6) );
nodeConfigs.addConfiguration( 'liveonline' )
            .addTemplateAssignment ( new TemplateAssignment( NEWS_TOWER,        .5) )
            .addTemplateAssignment ( new TemplateAssignment( LIVEONLINE_BIGBOX , .5) );
nodeConfigs.addConfiguration( 'realestate' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_TOWER,     1) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_BIGBOX,    0) );
nodeConfigs.addConfiguration( 'technology' )
            .addTemplateAssignment ( new TemplateAssignment( TECH,        .5) )
            .addTemplateAssignment ( new TemplateAssignment( TECH_SUPER_BANNER, .5) );
nodeConfigs.addConfiguration( 'politics' )
		   .addTemplateAssignment ( new TemplateAssignment( HALFPAGE_ONLY,         .05 ) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER,     .25) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_BIGBOX,    .70) );
nodeConfigs.addConfiguration( 'weather' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_TOWER,     .6) )
           .addTemplateAssignment ( new TemplateAssignment( BANNER_BIGBOX,    .4) );
nodeConfigs.addConfiguration( 'entertainment' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER, .05) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_TOWER, .35) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_BIGBOX, .6) );
nodeConfigs.addConfiguration( 'artsandleisure' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_SUPER_BANNER, .05) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_TOWER, .35) )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_BIGBOX, .6) );
nodeConfigs.addConfiguration( 'visitorsguide' )
           .addTemplateAssignment ( new TemplateAssignment( NEWS_TOWER, 1) )
nodeConfigs.addConfiguration( 'health/specials/pharmaceuticals' )
           .addTemplateAssignment ( new TemplateAssignment( BIGFIVE_TOWER_NO,  .3) )
           .addTemplateAssignment ( new TemplateAssignment( BIGFIVE_BIGBOX_NO, .7) );
nodeConfigs.addConfiguration( 'liveonline/politics' )
            .addTemplateAssignment ( new TemplateAssignment( NEWS_TOWER_NO,        .5) )
            .addTemplateAssignment ( new TemplateAssignment( LIVEONLINE_BIGBOX_NO , .5) );
		   
		   
		   

// 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];
}
