/**
 * AdManager
 * @return
 */
var AdManager = function() {
  this.test = false;
  this.ads = {};
}
AdManager.prototype.register = function(ad, region) {
  ad.manager = this;
  if(!region) region = 'content';
  if(!this.ads[region]) this.ads[region] = [];

  this.ads[region][this.ads[region].length] = ad;
  
  return ad;
}
AdManager.prototype.render = function(region) {
  if(region) {
    if(this.ads[region]) {
      for(i = 0; i < this.ads[region].length; i++) {
        
        this.ads[region][i].render();
      }
    }
  } else {
    for(k in this.ads) {
      for(i = 0; i < this.ads[k].length; i++) {
        
        this.ads[k][i].render();
      }
    }
  }
  
  return this;
}


/**
 * AdManager_DoubleClick extends AdManager
 */
var AdManager_DoubleClick = function() {
  this.site = '';
  this.zone = '';
  this.page = '';
  this.attributes = {};
  this.ord = Math.floor(Math.random() * 99999999 + 1);
  this.tileCounter = 0;
}
AdManager_DoubleClick.prototype = new AdManager();
AdManager_DoubleClick.prototype.register = function(ad) {
  ad.manager = this;
  ad.tile = ++this.tileCounter;
  if(ad.tile == 1) ad.dcopt = 'ist';
  if(this.test) ad.test = true;
  if(!ad.pos) ad.pos = ad.tile;
  
  if(!ad.region) ad.region = 'content';
  if(!this.ads[ad.region]) this.ads[ad.region] = [];

  this.ads[ad.region][this.ads[ad.region].length] = ad;
  
  return ad;
}
AdManager_DoubleClick.prototype.iframe = function(width, height, region) {
  var ad = new AdPlacement_DoubleClick_IFrame();
  ad.width = width;
  ad.height = height;
  ad.region = region;
  return this.register(ad);
}
AdManager_DoubleClick.prototype.wallpaper = function(region) {
  var ad = new AdPlacement_DoubleClick_Wallpaper();
  ad.region = region
  return this.register(ad);
}
AdManager_DoubleClick.prototype.serializeAttributes = function(attributes) {
  var attributesString = "";
  if(attributes) for (i in attributes) {
    if((typeof attributes[i]) == "object") for (i2 in attributes[i]) attributesString += ";" + escape(i) + "=" + escape(attributes[i][i2]);
    else attributesString += ";" + escape(i) + "=" + escape(attributes[i]);
  } 
  
  return attributesString;
}


/**
 * AdPlacement
 */
var AdPlacement = function() {
  this.manager = {};
  this.width = 0;
  this.height = 0;
  this.region = 'content';
  this.test = false;
}


/**
 * AdPlacement_DoubleClick extends AdPlacement
 */
var AdPlacement_DoubleClick = function() {
  this.attributes = {};
  this.pos = '';
  this.tile = 0;
  this.documentLoaded = false;
  
  var ad = this;
  $(document).ready(function() { ad.documentLoaded = true; });
}
AdPlacement_DoubleClick.prototype = new AdPlacement();
AdPlacement_DoubleClick.prototype.serializeAttributes = function() {
  return this.manager.serializeAttributes(this.attributes);
}
AdPlacement.prototype.render = function() {
  return "" + this;
}


/**
 * AdPlacement_DoubleClick_IFrame extends AdPlacement_DoubleClick
 */
var AdPlacement_DoubleClick_IFrame = function() {
  this.domId = 'doubleclick-iframe-' + Math.floor(Math.random() * 99999999 + 1);
  if(this.documentLoaded) { // body is loaded we can't do document.write
    this.domNode = document.createElement('iframe');
    this.domNode.id = this.domId;
    this.domNode.scrolling = "no";
    this.domNode.frameborder = 0;
    this.domNode.width = 0;
    this.domNode.height = 0;
  } else {
    document.write('<iframe id="' + this.domId + '" scrolling="no" frameborder="0" width="0" height="0"></iframe>');
    this.domNode = document.getElementById(this.domId);
  }
}
AdPlacement_DoubleClick_IFrame.prototype = new AdPlacement_DoubleClick();
AdPlacement_DoubleClick_IFrame.prototype.render = function() {
  var url = "http://ad.doubleclick.net/adi/" + this.manager.site + "/" + this.manager.zone 
    + ";page=" + this.manager.page 
    + this.serializeAttributes()
    + (this.test? ";test=yes": "")
    + (this.dcopt? ";dcopt=" + this.dcopt: "")
    + ";pos=" + this.pos 
    + ";sz=" + this.width + "x" + this.height
    + ";tile=" + this.tile 
    + ";ord=" + this.manager.ord 
    + "?";
  
  this.domNode.name = "ad_" + this.width + "x" + this.height;
  this.domNode.id = "ad_" + this.width + "x" + this.height;
  this.domNode.width = this.width;
  this.domNode.height = this.height;
  this.domNode.src = url;
  
  return this.domNode;
}


/**
 * AdPlacement_DoubleClick_Wallpaper extends AdPlacement_DoubleClick
 */
var AdPlacement_DoubleClick_Wallpaper = function() {
  this.domId = 'doubleclick-wallpaper-' + Math.floor(Math.random() * 99999999 + 1);
  if(this.documentLoaded) { // body is loaded we can't do document.write
    this.domNode = document.createElement('script');
    this.domNode.id = this.domId;
    this.domNode.type = "text/javascript";
  } else {
    document.write('<script id="' + this.domId + '" type="text/javascript"></scr' + 'ipt>');
    this.domNode = document.getElementById(this.domId);
  }
}
AdPlacement_DoubleClick_Wallpaper.prototype = new AdPlacement_DoubleClick();
AdPlacement_DoubleClick_Wallpaper.prototype.width = 1;
AdPlacement_DoubleClick_Wallpaper.prototype.height = 1;
AdPlacement_DoubleClick_Wallpaper.prototype.pos = 'wallpaper';
AdPlacement_DoubleClick_Wallpaper.prototype.render = function() {
  var url = "http://ad.doubleclick.net/adj/" + this.manager.site + "/" + this.manager.zone 
    + ";page=" + this.manager.page 
    + this.serializeAttributes()
    + (this.test? ";test=yes": "")
    + (this.dcopt? ";dcopt=" + this.dcopt: "")
    + ";pos=" + this.pos 
    + ";sz=" + this.width + "x" + this.height
    + ";tile=" + this.tile 
    + ";ord=" + this.manager.ord 
    + "?";

  this.domNode.src = url;
  
  return this.domNode;
}

Drupal.dartWallpaperRender = function(options) {
  $(document).ready(function() {
    $("body").css("background", options.background_color + " url(" + options.image_url + ")  top center " + options.background_tiling + " fixed");
    $("body").css("cursor", "pointer");
    $("#wrap > div").css("cursor", "default"); // make the main body section not appear clickable
    $("body").click(function(e) {
      if(e.target.tagName.toLowerCase() == "body"
        || e.target.id.toLowerCase() == "container"
        || e.target.id.toLowerCase() == "wrap") {
        window.open(options.link_url);
      }
    });
  });
}

//$(document).ready(function() {
//  doubleClickManager.render("header");
//  doubleClickManager.render("sidebar_top");
//  doubleClickManager.render("sidebar_bottom");
//  doubleClickManager.render("content");
//  doubleClickManager.render("footer");
//});
