if(jQuery!=undefined){(function($){

// START

var iBox = function(){
  var _pub = {
    // label for the close link
    close_label: 'Close',

    // padding around the box
    padding: 100,

    // show iframed content in the parent window
    // this *does not* work with #containers
    inherit_frames: false,

    // how fast to fade in the overlay/ibox (this is each step in ms)
    fade_in_speed: 20,

    // our attribute identifier for our iBox elements
    attribute_name: 'rel',

    // tags to hide when we show our box
    tags_to_hide: ['select'], //  ,'embed', 'object'

    // default width of the box (when displaying html only)
    // height is calculated automatically
    default_width: 450,

    // browser checks
    is_opera: navigator.userAgent.indexOf('Opera/9') != -1,
    is_ie: navigator.userAgent.indexOf("MSIE ") != -1,
    is_ie6: false /*@cc_on || @_jscript_version < 5.7 @*/,
    is_firefox: navigator.appName == "Netscape" && navigator.userAgent.indexOf("Gecko") != -1 && navigator.userAgent.indexOf("Netscape") == -1,
    is_mac: navigator.userAgent.indexOf('Macintosh') != -1,

    base_url: 'http://cbsoutdooradtool.s3.amazonaws.com/',

    /**
     * Updates the base_url variable.
     * @param {String} path Relative or absolute path to this file.
     */
    setPath: function(path)
    {
      _pub.base_url = path;
    },

    /**
     * Binds arguments to a callback function
     */
    bind: function(fn)
    {
        var args = [];
        for (var n=1; n<arguments.length; n++) args.push(arguments[n]);
        return function(e) { return fn.apply(this, [e].concat(args)); };
    },

    /**
     * Sets the content of the ibox
     * @param {String} content HTML content
     * @param {Object} params
     */
    html: function(content, params)
    {
      if (content === undefined) return els.content;
      if (cancelled) return;
      _pub.clear();
      els.wrapper.style.display = "block";
      els.wrapper.style.visibility = "hidden";
      els.content.style.height = 'auto';

      if (typeof(content) == 'string') els.content.innerHTML = content;
      else els.content.appendChild(content);

      var elemSize = _pub.getElementSize(els.content);
      var pageSize = _pub.getPageSize();

      if (params.can_resize === undefined) params.can_resize = true;
      if (params.fade_in === undefined) params.use_fade = true;

      if (params.width) var width = parseInt(params.width);
      else var width = _pub.default_width;

      if (params.height) var height = parseInt(params.height);
      else var height = elemSize.height;

      els.wrapper.style.width = width + 'px';
      els.wrapper.style.height = height + 'px';

      // if we dont do this twice we get a bug on the first display
      if (!params.height)
      {
        var elemSize = _pub.getElementSize(els.content);
        var height = elemSize.height;
      }
      if (params.can_resize) _pub.resizeObjectToScreen(els.content, width, height, params.constrain);
      else
      {
        els.content.style.width = width + 'px';
        els.content.style.height = height + 'px';
      }

      // now we set the wrapper
      var elemSize = _pub.getElementSize(els.content);
      els.wrapper.style.width = elemSize.width + 'px';
      els.wrapper.style.height = elemSize.height + 'px';

      _pub.reposition();

      els.wrapper.style.visibility = "visible";
      _pub.fadeIn(els.wrapper, 10, params.fade_in ? _pub.fade_in_speed : 0);
    },

    /**
     * Empties the content of the iBox (also hides the loading indicator)
     */
    clear: function()
    {


    // els.loading.style.display = "none";
      while (els.content.firstChild) els.content.removeChild(els.content.firstChild);
      els.content.innerHTML = '';
  },

    /**
     * Loads text into the ibox
     * @param {String} url
     * @param {String} title
     * @param {Object} params
     */
    show: function(text, title, params)
    {


      _pub.hide();
      showInit(title, params, function(){
        _pub.html(text, params);
      });
    },
    /**
     * Loads a url into the ibox
     * @param {String} url
     * @param {String} title
     * @param {Object} params
     */
    showURL: function(url, title, params)
    {
      showInit(title, params, function(){
        cancelled = false;
        for (var i=0; i<_pub.plugins.list.length; i++)
        {
          var plugin = _pub.plugins.list[i];
          if (plugin.match(url))
          {
            active_plugin = plugin;
            plugin.render(url, params);
            break;
          }
        }
      });
    },

    /**
     * Hides the iBox
     */
    hide: function()
    {

    if (active_plugin)
      {
        // call the plugins unload method
        if (active_plugin.unload) active_plugin.unload();
        active_plugin = null;
      }
      window.onscroll = null;
  //return true;      
  _pub.clear();

    // restore elements that were hidden
      for (var i=0; i<_pub.tags_to_hide.length; i++) showTags(_pub.tags_to_hide[i]);

      // els.loading.style.display = 'none';
      els.overlay.style.display = 'none';
      els.wrapper.style.display = 'none';
      //_pub.enableBodyOverflow();

    _pub.fireEvent('hide');
    },

    /**
     * Resizes an object to fit on screen
     * @param {Object} obj
     * @param {Integer} width
     * @param {Integer} height
     * @param {Boolean} constrain
     */
    resizeObjectToScreen: function(obj, width, height, constrain)
    {

      var pagesize = _pub.getPageSize();

      var x = pagesize.width - _pub.padding;
      var y = pagesize.height - _pub.padding;

      if (!height) var height = obj.height;
      if (!width) var width = obj.width;
      if (width > x)
      {
        if (constrain) height = height * (x/width);
        width = x;
      }
      if (height > y)
      {
        if (constrain) width = width * (y/height);
        height = y;
      }
      obj.style.width = width + 'px';
      obj.style.height = height + 'px';
    },

    /**
     * Repositions the iBox wrapper (from events)
     */
    reposition: function(e)
    {
      // verify height doesnt overreach browser's viewpane
      // _pub.center(els.loading);
    if(els == undefined || els == null || els.wrapper == undefined || els.wrapper == null) return;

      _pub.center(els.wrapper);
      var pageSize = _pub.getPageSize();
      var scrollPos = _pub.getScrollPos();

      if (_pub.is_ie6) els.overlay.style.width = document.documentElement.clientWidth + 'px';
      var height = Math.max(document.documentElement.clientHeight, document.body.clientHeight);
      els.overlay.style.height = height + 'px';
    },

    /**
     * Centers an object
     * @param {Object} obj
     */
    center: function(obj)
    {
      var pageSize = _pub.getPageSize();
      var scrollPos = _pub.getScrollPos();
      var emSize = _pub.getElementSize(obj);
      var x = Math.round((pageSize.width - emSize.width) / 2 + scrollPos.scrollX);
      var y = Math.round((pageSize.height - emSize.height) / 2 + scrollPos.scrollY);
	  
      if( _pub.is_ie || _pub.is_ie6 ) 
		obj.style.left = (x + 1) + 'px';
	  else
      	obj.style.left = (x - 7) + 'px';

    var y = 5;
      obj.style.top = y + 'px';
    },

    getStyle: function(obj, styleProp)
    {
      if (obj.currentStyle)
        return obj.currentStyle[styleProp];
      else if (window.getComputedStyle)
        return document.defaultView.getComputedStyle(obj,null).getPropertyValue(styleProp);
    },

    /**
     * Gets the scroll positions
     */
    getScrollPos: function()
    {
      var docElem = document.documentElement;
      return {
        scrollX: document.body.scrollLeft || window.pageXOffset || (docElem && docElem.scrollLeft),
        scrollY: document.body.scrollTop || window.pageYOffset || (docElem && docElem.scrollTop)
      };
    },

    /**
     * Gets the page constraints
     */
    getPageSize: function()
    {
      return {
        width: window.innerWidth || (document.documentElement && document.documentElement.clientWidth) || document.body.clientWidth,
        height: window.innerHeight || (document.documentElement && document.documentElement.clientHeight) || document.body.clientHeight
      };
    },

    /**
     * Gets an objects offsets
     * @param {Object} obj
     */
    getElementSize: function(obj)
    {
    if(obj==undefined || obj==null) return 0;
      return {
        width: (function(object){ try{ return object.offsetWidth; } catch(e){ return object.style.pixelWidth; }})(obj),
        height: (function(object){ try{ return object.offsetHeight; } catch(e){ return object.style.pixelHeight; }})(obj)
      };
    },

    fadeIn: function(obj, level, speed, callback)
    {
      if (level === undefined) var level = 100;
      if (speed === undefined) var speed = 70;
      if (!speed)
      {
        _pub.setOpacity(null, obj, level*10);
        if (callback) callback();
        return;
      }

      _pub.setOpacity(null, obj, 0);
      for (var i=0; i<=level; i++)
      {
        setTimeout(_pub.bind(_pub.setOpacity, obj, i*10), speed*i);
      }
      if (callback) setTimeout(callback, speed*(i+1));
    },

    /**
     * Sets the opacity of an element
     * @param {Object} obj
     * @param {Integer} value
     */
    setOpacity: function(e, obj, value)
    {
      obj.style.opacity = value/100;
      obj.style.filter = 'alpha(opacity=' + value + ')';
    },

    /**
     * Creates a new XMLHttpRequest object based on browser
     */
    /* slim: dont need this. 
    createXMLHttpRequest: function()
    {
      var http;
      if (window.XMLHttpRequest)
      { // Mozilla, Safari,...
        http = new XMLHttpRequest();
        if (http.overrideMimeType)
        {
          // set type accordingly to anticipated content type
          http.overrideMimeType('text/html');
        }
      }
      else if (window.ActiveXObject)
      { // IE
        try {
          http = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
          try {
            http = new ActiveXObject("Microsoft.XMLHTTP");
          } catch (e) {}
        }
      }
      if (!http)
      {
        alert('Cannot create XMLHTTP instance');
        return false;
      }
      return http;
    },
    */

    addEvent: function(obj, evType, fn)
    {
      if (obj.addEventListener)
      {
        obj.addEventListener(evType, fn, false);
        return true;
      }
      else if (obj.attachEvent)
      {
        var r = obj.attachEvent("on"+evType, fn);
        return r;
      }
      else
      {
        return false;
      }
    },

    addEventListener: function(name, callback)
    {
      if (!events[name]) events[name] = new Array();
      events[name].push(callback);
    },

    fireEvent: function(name)
    {
        if (events[name] && events[name].length)
        {
          for (var i=0; i<events[name].length; i++)
          {
            var args = [];
            for (var n=1; n<arguments.length; n++) args.push(arguments[n]);
            // Events returning false stop propagation
            if (events[name][i](args) === false) break;
          }
        }
    },

    /**
     * Parses the arguments in the rel attribute
     * @param {String} query
     */
    parseQuery: function(query)
    {
       var params = new Object();
       if (!query) return params; 
       var pairs = query.split(/[;&]/);
       var end_token;
       for (var i=0; i<pairs.length; i++)
       {
          var keyval = pairs[i].split('=');
          if (!keyval || keyval.length != 2) continue;
          var key = unescape(keyval[0]);
          var val = unescape(keyval[1]);
          val = val.replace(/\+/g, ' ');
          if (val[0] == '"') var token = '"';
          else if (val[0] == "'") var token = "'";
          else var token = null;
          if (token)
          {
            if (val[val.length-1] != token)
            {
              do
              {
                i += 1;
                val += '&'+pairs[i];
              }
              while ((end_token = pairs[i][pairs[i].length-1]) != token)
            }
            val = val.substr(1, val.length-2);
          }
          params[key] = val;
       }
       return params;
    },
    handleTag: function(e)
    {
      var t = this.getAttribute('rel');
      var params = _pub.parseQuery(t.substr(5,999));
      if (params.target) var url = params.target
      else if (this.target && !params.ignore_target) var url = this.target;
      else var url = this.href;
      var title = this.title;
      if (_pub.inherit_frames && window.parent) window.parent.iBox.showURL(url, title, params);
      else _pub.showURL(url, title, params);
      return false;
    },

    disableBodyOverflow: function(){
      this.body_over_flow = document.body.style.overflow;
      document.body.style.overflow = "hidden";
      this.body_right_margin = 8;
      //alert(document.body.style.margin);
      //this.body_right_margin =  || 8);
      var margin_right = this.body_right_margin + this.getScrollerWidth();
      //alert(margin_right);
      document.body.style.marginRight = ""+margin_right+"px";
    },

    enableBodyOverflow: function(){
      //document.body.style.overflow = (this.body_over_flow || "scroll");
      document.body.style.overflow = (this.body_over_flow || "auto");
      document.body.style.marginRight = "8px";
      var scrollTop = document.body.scrollTop;
      document.body.scrollTop = scrollTop + 1; 
      document.body.scrollTop = scrollTop;
      //document.body.focus();
    },

    getScrollerWidth: function() {
        var scr = null;
        var inn = null;
        var wNoScroll = 0;
        var wScroll = 0;

        // Outer scrolling div
        scr = document.createElement('div');
        scr.style.position = 'absolute';
        scr.style.top = '-1000px';
        scr.style.left = '-1000px';
        scr.style.width = '100px';
        scr.style.height = '50px';
        // Start with no scrollbar
        scr.style.overflow = 'hidden';

        // Inner content div
        inn = document.createElement('div');
        //inn.style.width = '100%';
        inn.style.height = '200px';

        // Put the inner div in the scrolling div
        scr.appendChild(inn);
        // Append the scrolling div to the doc
        document.body.appendChild(scr);

        // Width of the inner div sans scrollbar
        wNoScroll = inn.offsetWidth;
        // Add the scrollbar
        scr.style.overflow = 'hidden';
        // Width of the inner div width scrollbar
        wScroll = inn.offsetWidth;

        // Remove the scrolling div from the doc
        document.body.removeChild(
            document.body.lastChild);

        // Pixel width of the scroller
        return (wNoScroll - wScroll);
    },

    plugins: {
      list: new Array(),
      register: function(func, last)
      {
        if (!last)
        {
          _pub.plugins.list = _pub.plugins.list.concat([func],_pub.plugins.list);
        }
        else
        {
          _pub.plugins.list.push(func);
        }
      }
    }
  };

  // private methods and variables
  var cancelled = false;
  var active_plugin = null;

  // events
  var events = {};

  // some containers
  // we store these in memory instead of finding them each time
  var els = {
    wrapper: null,
    footer: null,
    content: null,
    overlay: null
    //,loading: null
  };

  /**
   * Creates the iBox container and appends it to an element
   * @param {Object} elem Container to attach to
   * @return {Object} iBox element
   */
  var create = function(elem)
  {
    // TODO: why isnt this using DOM tools
    // a trick on just creating an ibox wrapper then doing an innerHTML on our root ibox element
    var container = document.createElement('div');
    container.id = 'ibox';
    container.style.display = 'block';

    els.overlay = document.createElement('div');
    els.overlay.style.display = 'none';
    els.overlay.id = 'ibox_overlay';
    //els.overlay.onclick = _pub.hide;
    container.appendChild(els.overlay);

    // els.loading = document.createElement('div');
    // els.loading.id = 'ibox_loading';
    // els.loading.innerHTML = 'Loading...';
    // els.loading.style.display = 'none';
    // els.loading.onclick = function() {
    //   _pub.hide();
    //   cancelled = true;
    // }
    // container.appendChild(els.loading);

    els.wrapper = document.createElement('div')
    els.wrapper.id = 'ibox_wrapper';
    els.wrapper.style.display = 'none';

    els.content = document.createElement('div');
    els.content.id = 'ibox_content';
    els.wrapper.appendChild(els.content);

    var child = document.createElement('div');
    child.id = 'ibox_footer_wrapper';

    var child2 = document.createElement('a');
    child2.innerHTML = _pub.close_label;
    child2.href = 'javascript:void(0)';
    child2.onclick = _pub.hide;
    //child.appendChild(child2);

    els.footer = document.createElement('div');
    els.footer.id = 'ibox_footer';
    els.footer.innerHTML = '&nbsp;';
    //child.appendChild(els.footer);
    els.wrapper.appendChild(child);

    container.appendChild(els.wrapper);

    elem.appendChild(container);
    return container;
  };

  var hideTags = function(tag)
  {
//  return;
    var list = document.getElementsByTagName(tag);
    for (var i=0; i<list.length; i++)
    {
      if (_pub.getStyle(list[i], 'visibility') != 'hidden' && list[i].style.display != 'none')
      {

        list[i].style.overflow = 'hidden';
        list[i].style.marginLeft = '-1000px';  
// list[i].style.height = '0px';
    //list[i].style.visibility = 'hidden';
        list[i].wasHidden = true;
      }
    }
  };

  var showTags = function(tag)
  {
  //  return;
    var list = document.getElementsByTagName(tag);
    for (var i=0; i<list.length; i++)
    {
      if (list[i].wasHidden)
      {
        //list[i].style.visibility = 'visible';
    list[i].style.overflow = 'visible';
        list[i].style.marginLeft = '0px';  
        list[i].wasHidden = null;
      }
    }
  };

  var showInit = function(title, params, callback)
  {
    // els.loading.style.display = "block";
    // _pub.center(els.loading);

    _pub.reposition();
    if (!_pub.is_firefox) var amount = 8;
    else var amount = 10;
    for (var i=0; i<_pub.tags_to_hide.length; i++) hideTags(_pub.tags_to_hide[i]);

    window.onscroll = _pub.reposition;

    // set title here
    els.footer.innerHTML = title || "&nbsp;";

    els.overlay.style.display = "block";
    els.overlay.style.backgroundImage = "url('" + _pub.base_url + "images/white_bg.png')";

    //_pub.disableBodyOverflow();
    //_pub.fadeIn(els.overlay, amount, _pub.fade_in_speed, callback);
    _pub.fireEvent('show');
  callback();

  };

  var drawCSS = function()
  {
    // Core CSS (positioning/etc)
    // #ibox_loading {position:absolute;z-index:1000001;}
    var core_styles = "#ibox {} #ibox_overlay {position:absolute;top:0;left:0;right:0;}  #ibox_wrapper {position:absolute;top:0;left:0;margin-left:-1px !important;z-index:1000001;padding:10px 16px 10px 15px;width:938px !important;height:810px !important;overflow:hidden;} #ibox_content {z-index:1000002;overflow:hidden;height:100%;position:relative;padding:2px;text-align:left;} #ibox_content object { display:block;} #ibox_content .ibox_image {width:100%;height:100%;margin:0;padding:0;border:0;display:block;overflow:hidden;} #ibox_footer_wrapper a {float:right;display:block;outline:0;margin:0;padding:0;} #ibox_footer_wrapper {text-align:left;position:absolute;top:5px;right:10px;left:10px;white-space:nowrap;overflow:hidden;}";

    // Default style/theme/skin/whatever
    // #ibox_loading {padding:50px; background:#000;color:#fff;font-size:16px;font-weight:bold;}
    var default_skin = "#ibox_footer_wrapper {font-weight:bold;}#ibox_footer_wrapper a {text-decoration:underline;text-transform:lowercase;font-weight:normal;font-family:Verdana, Arial, Helvetica, sans-serif;font-size:12px;}#ibox_footer_wrapper {font-size:12px;font-family:Verdana, Arial, Helvetica, sans-serif;}#ibox_wrapper {border:none;}#ibox_wrapper, #ibox_footer_wrapper a {color: white; background-color:#FFF;}#ibox_content {background-color:#FFF;border:0px solid #666;color:#FFF !important;}";

    var head = document.getElementsByTagName("head")[0];
    // tricky hack for IE
    var htmDiv = document.createElement('div');

    htmDiv.innerHTML = '<p>x</p><style type="text/css">'+default_skin+'</style>';
    head.insertBefore(htmDiv.childNodes[1], head.firstChild);

    htmDiv.innerHTML = '<p>x</p><style type="text/css">'+core_styles+'</style>';
    head.insertBefore(htmDiv.childNodes[1], head.firstChild);
  }

  var initialize = function()
  {
    // elements here start the look up from the start non <a> tags
    drawCSS();
    create(document.body);
  };

  // Should these be added as needed ?
  _pub.addEvent(window, 'keypress', function(e){ if (e.keyCode == (window.event ? 27 : e.DOM_VK_ESCAPE)) { iBox.hide(); }});
  _pub.addEvent(window, 'resize', _pub.reposition);
  _pub.addEvent(window, 'load', initialize);

  return _pub;
}();

$.adToolFormats = {
  "base": {
    "onClickAdCreatorJS": "onClickAdCreatorJS",
    "onClickChangeAdImageJS": "onClickChangeAdImageJS",
    "onClickViewAdOnAreaJS": "onClickViewAdOnAreaJS", 
    "onCreateAdCompleteJS": "onCreateAdCompleteJS",
    "onCropAdCompleteJS": "onCropAdCompleteJS",
    "onClickChangeAdImageJS": "onClickChangeAdImageJS",
    "templatePath": "${root}/downloads/${format}-ads.zip",
    "imagePath": "${root}/formats/${format}/default.png",
    "pointPath": "${root}/formats/${format}/points.txt",
    "coverPath": "${root}/formats/${format}/cover.png",
    "coverMaskPath": "${root}/formats/${format}/mask.png",
    "videoPath": "${root}/formats/${format}/clip.swf",
    "thumbPath": "${root}/formats/${format}/thumb.jpg",
    "maxUploadFileSize": 10485760, 
    "uploadPicFileUrl": "${phpRoot}/upload_file.php?prefix=${locale}_${format}_",
    "uploadBitmapDataUrl": "${phpRoot}/upload_bitmap.php?prefix=${locale}_${format}_",
    "tellFriendUrl": "${phpRoot}/tell_friend.php?locale=${locale}",
    "saveVideoRequestUrl": "${phpRoot}/save_video.php?locale=${locale}",
    "swfPath": "${root}/swfs/shared/"
  },
  
  "ar-01": {
    "adWidth": "712",	
    "adHeight": "440",
    "coverAlpha": ".8",
    "lang": "la",
    "adType": "ar1",
    "adCoverAreaPath":"${root}/formats/${format}/area.png",
    "coverBlendMode": "hardlight",
    "advertBlendMode": "overlay",
    "bgColor": "717359"
  },
  
  "ar-02":{
    "adWidth":"938",
    "adHeight":"250",
    "coverAlpha":".7",
    "bannerSize":"260,220,410",
    "advertBlendMode":"multiply",
    "coverBlendMode":"normal",
    "adType":"ar2",
    "lang":"la",
    "bgColor":"b7b9c9",
    "coverMaskPath": null
  },
  
  "br-01": {
    "adWidth":"912",
    "adHeight":"498",
    "coverAlpha": ".8",
    "lang": "pt",
    "adType": "br1",
    "coverMaskPath": null,
    "lang": "pt"
  },
  
  "br-02":{
    "adWidth":"350",
    "adHeight":"527",
    "coverAlpha":".85",
    "advertBlendMode":"normal",
    "coverBlendMode":"multiply",
    "adType":"br2",
    "lang":"pt",
    "coverMaskPath":null,
    "bgColor":"838484"
  },
  
  "cl-01":{
    "adWidth":"912",
    "adHeight":"284",
    "coverAlpha":".8",
    "videoBlendMode":"multiply",
    "adType":"cl1",
    "lang":"la",
    "bgColor":"613030"
  },
  
  "cl-02":{
    "adWidth":"658",
    "adHeight":"512",
    "coverAlpha":".8",
    "advertBlendMode":"normal",
    "coverBlendMode":"multiply",
    "adType":"cl2",
    "lang":"la",
    "coverMaskPath":null,
    "bgColor":"D4D4D4"
  },
  
  "cn-01": {
    "adWidth":"912",
  	"adHeight":"187",
    "adWidth":"938",
    "adHeight":"250",
    "coverAlpha": ".5",
    "coverMaskPath": null,
    "coverBlendMode": "hardlight",
    "adType": "cn1",
    "lang": "cn",
    "advertBlendMode": "multiply",
    "bgColor": "c1d5cc"
  },
  
  "es-01":{
    "adWidth":"912",
    "adHeight":"350",
    "adCoverAreaPath":"${root}/formats/${format}/area.png",
    "coverAlpha":".8",
    "videoBlendMode":"multiply",
    "adType":"es1",
    "lang":"es",
    "coverBlendMode":"lighten",
    "bgColor":"e6e8db"
  },
  
  "es-02":{
    "adWidth":"912",
    "adHeight":"317",
    "coverAlpha":".5",
    "advertBlendMode":"multiply",
    "coverBlendMode":"hardlight",
    "adType":"es2",
    "lang":"es",
    "coverMaskPath":null,
    "bgColor":"aeafaf"
  },
  
  "fr-01":{
    "adWidth":"683",
    "adHeight":"512",
    "coverAlpha":".85",
    "advertBlendMode":"multiply",
    "coverBlendMode":"normal",
    "adType":"fr2",
    "lang":"fr",
    "coverMaskPath":null,
    "bgColor":"7a7b76",
    "coverPath":null
  },
  
  "fr-02":{
    "adWidth":"336",
    "adHeight":"500",
    "coverAlpha":".85",
    "advertBlendMode":"multiply",
    "coverBlendMode":"multiply",
    "adType":"fr1",
    "lang":"fr",
    "coverMaskPath":null,
    "bgColor":"cecdd3"
  },
  
  "ie-01":{
    "adWidth":"912",
    "adHeight":"498",
    "coverAlpha":".95",
    "advertBlendMode":"multiply",
    "coverBlendMode":"hardlight",
    "adType":"ie1",
    "lang":"en",
    "coverMaskPath":null,
    "bgColor":"828282"
  },
  
  "ie-02":{
    "adWidth":"397",
    "adHeight":"527",
    "coverAlpha":".75",
    "advertBlendMode":"normal",
    "adType":"ie2",
    "lang":"en",
    "coverBlendMode":"overlay",
    "coverMaskPath":null,
    "bgColor":"727272"
  },

  "ie-03":{
    "adWidth":"560",
    "adHeight":"663",
    "coverAlpha":"1",
    "advertBlendMode":"normal",
    "adType":"ie3",
    "lang":"en",
    "coverBlendMode":"normal",
    "adCoverAreaPath":"${root}/formats/${format}/area.png",
    "bgColor":"97A0A"
  },

  "ie-04":{
    "adWidth":"755",
    "adHeight":"410",
    "coverAlpha":"1",
    "advertBlendMode":"normal",
    "adType":"ie4",
    "lang":"en",
    "coverBlendMode":"normal",
    "coverMaskPath":null,
    "bgColor":"97a0af"
  }	,

  "ie-05":{
    "adWidth":"350",
    "adHeight":"555",
    "coverAlpha":"1", 
    "advertBlendMode":"normal",
    "adType":"ie5",
    "lang":"en",
    "coverBlendMode":"normal",
    "coverMaskPath":null,
    "bgColor":"97a0af"
  },	
  "ie-06":{
	"adWidth":"422",
    "adHeight":"527",
    "coverAlpha":"1",
    "advertBlendMode":"normal",
    "adType":"ie6",
    "lang":"en",
    "coverBlendMode":"normal",
    "adCoverAreaPath":"${root}/formats/${format}/area.png",
    "bgColor":"e5e5e5"
  },
  
  "it-01":{
    "adWidth":"830",
    "adHeight":"120",
    "adCoverAreaPath":"${root}/formats/${format}/area.png",
    "coverAlpha":".8",
    "bannerSize":"291,256,283",
    "advertBlendMode":"multiply",
    "adType":"it1",
    "lang":"it",
    "coverBlendMode":"hardlight",
    "bgColor":"e1e1e1"
  },
  
  "it-02":{
    "adWidth":"500",
    "adHeight":"480",
    "adCoverAreaPath":"${root}/formats/${format}/area.png",
    "coverAlpha":".8",
    "advertBlendMode":"multiply",
    "featherSize":"0",
    "adType":"it2",
    "lang":"it",
    "coverBlendMode":null,
    "bgColor":"e1e1e1",
    "advertAlpha":"0.2"
  },
  
  "ni-01":{
    "adWidth":"912",
    "adHeight":"112",
    "coverAlpha":".5",
    "bannerSize":"585,125,80",
    "advertBlendMode":"multiply",
    "adType":"ni1",
    "lang":"en",
    "coverBlendMode":"overlay",
    "bgColor":"aba9b1",
    "coverMaskPath":null
  },
  
  "ni-02":{
    "adWidth":"934",
    "adHeight":"228",
    "adCoverAreaPath":"${root}/formats/${format}/area.png",
    "coverAlpha":".5",
    "bannerSize":"698,236",
    "advertBlendMode":"multiply",
    "adType":"ni2",
    "lang":"en",
    "coverBlendMode":"overlay",
    "bgColor":"aba9b1"
  },
  
  "nl-01":{
    "adWidth":"383",
    "adHeight":"512",
    "coverAlpha":".5",
    "bannerSize":"291,256,283",
    "advertBlendMode":"multiply",
    "adType":"nl1",
    "lang":"nl",
    "coverBlendMode":"overlay",
    "bgColor":"aba9b1",
    "coverMaskPath":null
  },
  
  "nl-02":{
    "adWidth":"493",
    "adHeight":"512",
    "adType":"nl2",
    "lang":"nl",
    "adCoverAreaPath":"${root}/formats/${format}/area.png",
    "bgColor":"cecdd3"
  },
  
  "uk-01":{
    "adWidth":"912",
    "adHeight":"112",
    "coverAlpha":".5",
    "bannerSize":"291,256,283",
    "advertBlendMode":"multiply",
    "adType":"uk1",
    "coverBlendMode":"overlay",
    "lang":"en",
    "bgColor":"aba9b1",
    "coverMaskPath":null
  },

  "uk-02":{
    "adWidth":"580",
    "adHeight":"360",
    "coverAlpha":".5",
    "advertBlendMode":"multiply",
    "coverBlendMode":"overlay",
    "lang":"en",
    "adType":"uk2",
    "coverMaskPath":null,
    "bgColor":"cecdd3",
    "coverPath":null
  },

  "uk-03":{
    "adWidth":"912",
    "adHeight":"152",
    "coverAlpha":".9",
    "advertBlendMode":"multiply",
    "coverBlendMode":"normal",
    "lang":"en",
    "adType":"uk3",
    "coverMaskPath":null,
    "bgColor":"f7fbfe"
  },

  "uk-04":{
    "adWidth":"912",
    "adHeight":"305",
    "coverAlpha":".9",
    "advertBlendMode":"multiply",
    "coverBlendMode":"normal",
    "lang":"en",
    "adType":"uk4",
    "coverMaskPath":null,
    "bgColor":"f7fbfe"
  },
  
  "uk-05":{
    "adWidth":"934",
    "adHeight":"228",
    "coverAlpha":".9",
    "advertBlendMode":"overlay",
    "coverBlendMode":"overlay",
    "lang":"en",
    "adType":"uk5",
    "bgColor":"717359",
	"adCoverAreaPath":"${root}/formats/${format}/area.png"
  },

  "uk-06":{
    "adWidth":"900",
    "adHeight":"242",
    "coverAlpha":".9",
    "advertBlendMode":"multiply",
    "coverBlendMode":"overlay",
    "lang":"en",
    "adType":"uk6",
    "bgColor":"e1c0ac",
	"coverMaskPath":null
  },
  
  "uk-07":{
    "adWidth":"912",
    "adHeight":"220",
    "coverAlpha":".12",
    "advertBlendMode":"multiply",
    "coverBlendMode":"normal",
    "lang":"en",
    "adType":"uk7",
    "bgColor":"e0e0e0",
	"bannerSize":"579,333",	
	"adCoverAreaPath":"${root}/formats/${format}/area.png"
  },

  "uk-08":{
    "adWidth":"450",
    "adHeight":"678",
    "coverAlpha":"0.9",
    "advertBlendMode":"normal",
    "coverBlendMode":"normal",
    "lang":"en",
    "adType":"uk8",
    "bgColor":"FFFFFF",
	"adCoverAreaPath":"${root}/formats/${format}/area.png"
  },
  
  "uy-01":{
    "adWidth":"912",
    "adHeight":"135",
    "coverAlpha":".85",
    "advertBlendMode":"multiply",
    "coverBlendMode":"normal",
    "adType":"uy1",
    "lang":"la",
    "coverMaskPath":null,
    "bgColor":"fcf4f1"
  },
  
  "uy-02":{
    "adWidth":"912",
    "adHeight":"303",
    "coverAlpha":".5",
    "advertBlendMode":"multiply",
    "adType":"uy2",
    "lang":"la",
    "coverBlendMode":"normal",
    "coverMaskPath":null,
    "bgColor":"f4f5f8"
  } 
}


$.adToolConfig = {
  phpRoot: 'http://cbsoutdoor.codegent.net/php',
  root: 'http://cbsoutdooradtool.s3.amazonaws.com',
  yourPageLink: "http://example/view?id=$id",
  embedCode: '<object width="715" height="400"><param name="allowScriptAccess" value="always" /><param name="movie" value="http://cbsoutdooradtool.s3.amazonaws.com/swfs/shared/embedPlayer_f9_715x400_v2.swf" /><param name="flashvars" value="id=$id" /><embed src="http://cbsoutdooradtool.s3.amazonaws.com/swfs/shared/embedPlayer_f9_715x400_v2.swf" flashvars="id=$id" width="715" height="400" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" /></object>',
  minFlashPlayerVersion: "9.0.0",
  minFlashUpgradeVersion: "8.0.0" // set to first express install version. set to 11 to test.
};

$.adToolSetup = function(config){
  for(var prop in config){
    $.adToolConfig[prop] = config[prop];
  }
  return $.adToolConfig;
}

var fixFormat = function(format){
  var check_format = format.split('-');
  if(check_format.length > 2){
      // Handle old format names
      return check_format[0] + '-' + check_format[1];
  } else {
    return format;
  }
}

$.adToolCreate = function(locale, format){
  $.adToolConfig.locale = locale;
  $.adToolConfig.format = fixFormat(format);
  $.adToolConfig.mode = 'create';
}

$.adToolLoad = function(id){
  parts = id.split("_");
  $.adToolConfig.locale = parts[0] + "_" + parts[1];
  $.adToolConfig.format = fixFormat(parts[2]);
  $.adToolConfig.id = id; 
  $.adToolConfig.mode = 'view';
}

$.adToolFormatFlashVars = function(allowed,format){
  if(format == undefined){
    format = $.adToolConfig.format;
  }
  var vars = {};
  var copyConfig = function(source, target){
    for(var prop in source){
      if(source[prop] == null){
        delete target[prop];
      } else {
        target[prop] = source[prop].toString().replace("${root}", $.adToolConfig.root).replace("${phpRoot}", $.adToolConfig.phpRoot).replace("${locale}", $.adToolConfig.locale).replace("${format}", format);
      }
    }
  }
  copyConfig($.adToolFormats["base"], vars);
  copyConfig($.adToolFormats[format], vars);
  if( $.adToolConfig.mode == 'view' ){
    vars['imagePath'] = $.adToolConfig.root + '/uploads/'+ $.adToolConfig.id + '.jpg';
    //console.debug(vars['imagePath']);
  }
  vars['yourPageLink'] = $.adToolConfig.yourPageLink;
  vars['embedCode'] = $.adToolConfig.embedCode;
  if(allowed != undefined){
    var only = {};
    for(var i=0; i<allowed.length; i++){
      if(vars[allowed[i]] != undefined && vars[allowed[i]] != "undefined"){
        only[allowed[i]] = vars[allowed[i]];
      }
    }
    vars = only;
  }
  //console.debug(vars);
  return vars;
}

$.fn.adToolPlayer = function(config){
  if(config == undefined){ config = {}; }
  
  if(!swfobject.hasFlashPlayerVersion($.adToolConfig.minFlashUpgradeVersion)){
    $(this).html("<a href='http://get.adobe.com/flashplayer/' target='_blank'><img src='"+$.adToolConfig.root+"/formats/"+$.adToolConfig.format+"/alternative_content.jpg'  width='715' height='585' /></a>");
    return;
  }
  
  var flashvars = $.adToolFormatFlashVars([
    "imagePath",
    "pointPath",
    "coverPath",
    "videoPath",
    "bannerSize",
    "adWidth",
    "adHeight",
    "coverAlpha",
    "advertBlendMode",
    "coverBlendMode",
    "adType",
    "lang",
    "coverMaskPath",
    "bgColor",
    "swfPath"
  ]);
  
  var params = {
    allowScriptAccess: 'always',
    menu: 'false',
    wmode: 'opaque'
  };
  var attributes = {
    id: 'adtool_player_swf',
    name: 'adtool_player_swf'
  };
  
  var id = $(this).attr('id');
  
  swfobject.embedSWF(
    // videoTrackingPlayer_f9_v1.swf
    $.adToolConfig.root + '/swfs/shared/embedPlayer_f9_715x400_v1.swf', id, 
    '715', '400', 
    $.adToolConfig.minFlashPlayerVersion, $.adToolConfig.root+'/swfs/shared/expressInstall.swf', 
    flashvars, params, attributes);
    
}; 

$.fn.adToolMenu = function(config){
  if(config == undefined){ config = {}; }
  
  if(!swfobject.hasFlashPlayerVersion($.adToolConfig.minFlashUpgradeVersion)){
    // noop
    return;
  }
  
  var flashvars = $.adToolFormatFlashVars([
    "imagePath",
    "onClickAdCreatorJS",
    "onClickChangeAdImageJS",
    "onClickViewAdOnAreaJS", 
    "thumbPath",
    "maxUploadFileSize", 
    "uploadPicFileUrl",
    "uploadBitmapDataUrl",
    "yourPageLink",
    "embedCode",
    "coverMaskPath",
    "tellFriendUrl",
    "saveVideoRequestUrl",
    "templatePath",
    "adCoverAreaPath"
  ]);

  flashvars["embedCode"] = escape( flashvars["embedCode"] );
  
  if($.adToolConfig.mode == 'create'){
    delete flashvars['imagePath'];
  }
  
  var allowedFlashVars = [''];
  
  var params = {
    allowScriptAccess: 'always',
    menu: 'false',
    wmode: 'opaque'
  };
  var attributes = {
    id: 'adtool_menu_swf',
    name: 'adtool_menu_swf'
  };
  
  var id = $(this).attr('id');
  // $.adToolConfig.locale = 'en_GB';
  swfobject.embedSWF(
    $.adToolConfig.root + '/swfs/locale/'+$.adToolConfig.locale+'/creatorToolMain_f9_715x265_v4.swf', id, 
    '715', '265', 
    $.adToolConfig.minFlashPlayerVersion, $.adToolConfig.root+'/swfs/shared/expressInstall.swf', 
    flashvars, params, attributes);
  
  // // Doesn't really work, needs a flashvar really.
  // var path = flashvars.imagePath;
  // window.setTimeout(function(){ 
  //   if($.adToolConfig.mode == 'view'){
  //     var menu = $('#'+id+"_swf")[0];
  //     menu.onAdComplete(path);
  //   }
  // }, 1000);
  
};

// Support functions.


// Working. 
function showAdCreatorTool(){
	
  $('#adtool_player_swf')[0].pauseVideo();

  window.scrollTo(0,0); // Is this a plugin? 

  var width = 937; 
  var height = 522;
  var creator_tool_name = "creator_tool_" + (new Date().getTime());

  iBox.show('<div id=\'ad_creator_tool\' style=\'background:#EEE; width:'+width+'px;height:'+height+'px\'><iframe id="' + creator_tool_name + '" name="' + creator_tool_name + '" src="javascript:\'\';" style="width:100%; height:100%; margin:0; padding:0;overflow:hidden;" SCROLLING="no" FRAMEBORDER="0" MARGINWIDTH="0" MARGINHEIGHT="0" ></iframe></div>', '',{width:width, height:height, constrain: false, can_resize:false});

  window.setTimeout(function(){
    
    var iframe = window.frames[creator_tool_name]; 
    
    var flashvars = $.adToolFormatFlashVars([
		"uploadPicFileUrl",
	    "uploadBitmapDataUrl",
	    "imageForCropPath",
	    "adWidth", 
	    "adHeight", 
	    "onClickViewAdOnAreaJS",
	    "onCreateAdCompleteJS",
	    "onClickChangeAdImageJS",
	    "maxUploadFileSize",
	    "sizeMultiply",
	    "adCoverAreaPath",
	    "lang",
		"adType"
	]);
    
    var params = {
      allowScriptAccess: 'always',
      menu: 'false'
    };
    var attributes = {
      id: 'adtool_creator_swf',
      name: 'adtool_creator_swf'
    };
    
    iframeSetup(iframe, function(win){
	  var swf = $.adToolConfig.root+"/swfs/locale/"+$.adToolConfig.locale+"/adCreatorTool_f9_937x522_v4.swf";
      win.swfobject.embedSWF(
        swf, 'container', 
        width, height,
        $.adToolConfig.minFlashPlayerVersion, $.adToolConfig.root+'/swf/country/expressInstall.swf', 
        flashvars, params, attributes);
    })
    
    iframe.onCreateAdCompleteJS = function (path) { window.parent.onCreateAdCompleteJS(path) };
    iframe.closeTool = closeTool;

  },500);
}

function showCropTool(path){

  $('#adtool_player_swf')[0].pauseVideo();

  window.scrollTo(0,0);

  var width = 937; 
  var height = 522;

  var crop_tool_name = "crop_tool_" + (new Date().getTime());

  iBox.show('<div id=\'ad_crop_tool\' style=\'background:#EEE; width:'+width+'px;height:'+height+'px\'><iframe id="' + crop_tool_name + '" name="' + crop_tool_name + '" src="javascript:\'\';" style="width:100%; height:100%; margin:0; padding:0;overflow:hidden;" SCROLLING="no"  FRAMEBORDER="0" MARGINWIDTH="0" MARGINHEIGHT="0" ></iframe></div>', '',{width:width, height:height, constrain: false, can_resize:false});
 
  window.setTimeout(function(){

    var iframe = window.frames[crop_tool_name]; 
    
    var flashvars = $.adToolFormatFlashVars([
		"uploadPicFileUrl",
	    "uploadBitmapDataUrl",
	    "imageForCropPath",
	    "adWidth", 
	    "adHeight", 
	    "onClickViewAdOnAreaJS",
	    "onCreateAdCompleteJS",
	    "onClickChangeAdImageJS",
	    "maxUploadFileSize",
	    "sizeMultiply",
	    "adCoverAreaPath",
	    "lang",
		"adType"
	]);
    flashvars.imageForCropPath = path;
    
    var params = {
      allowScriptAccess: 'always',
      menu: 'false'
    };
    var attributes = {
      id: 'adtool_crop_swf',
      name: 'adtool_crop_swf'
    };
    
    iframeSetup(iframe, function(win){
      win.swfobject.embedSWF(
        $.adToolConfig.root+"/swfs/locale/"+$.adToolConfig.locale+"/adCropTool_f9_937x522_v1.swf", 'container', 
        width, height,
        $.adToolConfig.minFlashPlayerVersion, $.adToolConfig.root+'/swfs/shared/expressInstall.swf', 
        flashvars, params, attributes);
    })
    
    iframe.onCropAdCompleteJS = function (path) { window.parent.onCropAdCompleteJS(path) };
    iframe.onClickChangeAdImageJS = function() { window.parent.onClickChangeAdImageJS() };  

  }, 500);

}

function uploadNewImage(){
  var menu = $('#adtool_menu_swf')[0];
  menu.uploadNewImage();
}

function onAdComplete(path){
  var menu = $('#adtool_menu_swf')[0];
  menu.onAdComplete(path);
}

function onClickViewAdOnAreaJS(path){       
  showCropTool(path);
}

function backToMain(){  
  var menu = $('#adtool_menu_swf')[0];
  menu.backToMainMenu();     
}

function iframeSetup(iframe, callback){
  var callbackName = "iframe_callback_"+(new Date).getTime();
  window[callbackName] = callback;
  code = ''
  code = [
'<html>',
  '<head>',
    //'<scr'+'ipt src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js" type="text/javascr'+'ipt"></scr'+'ipt>',
    '<scr'+'ipt src="http://ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject.js" type="text/javascr'+'ipt"></scr'+'ipt>',
    '<scr'+'ipt type="text/javascr'+'ipt">',
    'function loaded(){',
    //'$(document).ready(function(){',
          'window.parent["'+callbackName+'"](window);',
    //'});',
    '}',
    '</scr'+'ipt>',
  '</head>',
  '<body onload="loaded();">',
    '<div id="container"></div>',
  '</body>',
'</html>'
  ]
  html = code.join("\n");
  iframe.document.open();
  iframe.document.write(html);
  iframe.document.close();
}

function hide(callback){
  window.setTimeout(function(){
    iBox.hide(); 
    window.setTimeout(function(){callback();},250);
  }, 250);
}

function loadAdImage(path){  
  var player = $('#adtool_player_swf')[0];
  player.loadAdImage(path);  
  player.unpauseVideo(); 
  onAdComplete(path);
}

// Working.
function closeTool(){
  hide(function(){
    backToMain();
  });
  var player = $('#adtool_player_swf')[0];
  player.unpauseVideo();
}

// Handles to be called via External Interface

function onCreateAdCompleteJS(path){  
  hide(function(){
    loadAdImage(path);
  });
}

function onClickAdCreatorToolJS(){
 showAdCreatorTool();
}

function onClickChangeAdImageJS(){
 var player = $('#adtool_player_swf')[0];
 hide(function(){
   uploadNewImage();
   player.unpauseVideo();
  });
}

function onCropAdCompleteJS(path){
  hide(function(){
    loadAdImage(path);
  });
}

window.onClickViewAdOnAreaJS = onClickViewAdOnAreaJS;
window.onClickAdCreatorToolJS = onClickAdCreatorToolJS;
window.onClickChangeAdImageJS = onClickChangeAdImageJS;
window.onCropAdCompleteJS = onCropAdCompleteJS;
window.onCreateAdCompleteJS = onCreateAdCompleteJS;

// END

})(jQuery);}

