if (typeof advertisements === 'undefined') {
  var advertisements = {};
}

/**
 *
 * @param Element element DOM element
 * @param bool    status  Visibility status
 *
 * @return bool
 */
advertisements._toggler = function(element, status)
{
  // pho 1.2.09 - debugging video ads...
  // Do nothing if no element defined - should not happen?
  //if (!element) {
  //  return null;
  //}

  // Do nothing if current status is new status
  if (status !== null) {
    if (element.visible() === status) {
      return null;
    }
  }

  if (status === true) {
    element.show();
  }
  else if (status === false) {
    element.hide();
  }
  else {
    element.toggle();
  }

  return element.visible();
}

/**
 * Homepage "contentad"
 *
 * @return bool
 */
advertisements.homepage_content_ad = function()
{
  return advertisements._toggler($('content_ad').up('div'), (arguments.length > 0 ? arguments[0] : null));
}

/**
 * Homepage "contentad textlink"
 *
 * @return bool
 */
advertisements.homepage_contentad_textlink = function()
{
  return advertisements._toggler($('contentad_textlink').up('div'), (arguments.length > 0 ? arguments[0] : null));
}

/**
 * Homepage "ebooklet ad"
 *
 * @return bool
 */
advertisements.homepage_ebooklet_ad = function()
{
  return advertisements._toggler($('ebooklet_ad').up('div'), (arguments.length > 0 ? arguments[0] : null));
}

/**
 * Homeage "theamtische specials"
 *
 * @return bool
 */
advertisements.homepage_thematische_specials_ad = function()
{
  return advertisements._toggler($('thematische_specials_ad').up('div'), (arguments.length > 0 ? arguments[0] : null));
}

/**
 * Sidebar "halfpage_ad"
 *
 * @return bool
 */
advertisements.halfpage_ad = function()
{
  return advertisements._toggler($('halfpage_ad'), (arguments.length > 0 ? arguments[0] : null));
}

/**
 * Index "content ad textlink"
 *
 * @return bool
 */
advertisements.index_contentad_textlink = function()
{
  if (!document.loaded
      && (arguments.length > 0 ? arguments[0] : false) && !(arguments.length > 1 ? arguments[1] : false)) {
    document.observe('dom:loaded', advertisements.index_contentad_textlink.curry(
      (arguments.length > 0 ? arguments[0] : null), true
    ));
    return;
  }

  if (advertisements.index_content_teasermover_usedfrom != null && advertisements.index_content_teasermover_usedfrom != 'index_contentad_textlink') {
    return null;
  }

  var ad_element = $('contentad_textlink');
  var status = advertisements._toggler(ad_element, (arguments.length > 0 ? arguments[0] : null));
  if (status === null) return null;

  advertisements.index_content_teasermover_usedfrom = 'index_contentad_textlink';

  return advertisements.index_content_teasermover(ad_element, status);
}

/**
 * Content "content_ad 300x250"
 */
advertisements.content_content_ad = function()
{
  return advertisements._toggler($('content_ad'), (arguments.length > 0 ? arguments[0] : null));
}

/**
 * Indexsite "contentad"
 *
 * @return bool
 */
advertisements.index_content_ad = function()
{
  if (!document.loaded
      && (arguments.length > 0 ? arguments[0] : false) && !(arguments.length > 1 ? arguments[1] : false)) {
    document.observe('dom:loaded', advertisements.index_content_ad.curry(
      (arguments.length > 0 ? arguments[0] : null), true
    ));
    return;
  }

  if (advertisements.index_content_teasermover_usedfrom != null && advertisements.index_content_teasermover_usedfrom != 'index_content_ad') {
    return null;
  }

  var ad_element = ('woman' == project.siteConfig.siteId) ? $('contentad_textlink') : $('content_ad'); //< dirty hack :(
  
  var status = advertisements._toggler(ad_element, (arguments.length > 0 ? arguments[0] : null));
  
  if (status === null && (ad_element.visible() && arguments.length > 0 && arguments[0])) {
    status =  true;
  }
  
  var $halfpage_ad = $('halfpage_ad');
  if ($halfpage_ad !== null && $halfpage_ad.visible()) {
    ad_element.hide();
    status = false;
  }
  
  
  if (status === null) { 
    return null;
  }

  advertisements.index_content_teasermover_usedfrom = 'index_content_ad';

  return advertisements.index_content_teasermover(ad_element, status);
}

/**
 * Toggles an advertisement
 *
 * @param string advertisement Advertisement name
 * @param string sitetype      Sitetype
 *
 * @return void
 */
advertisements.toggle = function(advertisement, sitetype)
{
  if (!Object.isUndefined(advertisements[sitetype+'_'+advertisement])) {
    return advertisements[sitetype+'_'+advertisement]();
  }
  else if (!Object.isUndefined(advertisements[advertisement])) {
    return advertisements[advertisement]();
  }
  else {
    return advertisements._toggler($(advertisement));
  }
}

/**
 * Teaser mover for index sites
 *
 * @return bool
 */
advertisements.index_content_teasermover_original_teaser = new Array();
advertisements.index_content_teasermover_new_teaser = new Array();
advertisements.index_content_teasermover_initialized = false;
advertisements.index_content_teasermover_usedfrom = null;
advertisements.index_content_teasermover = function(ad_element, status) {
  var is_woman = ('woman' == project.siteConfig.siteId);
  if (advertisements.index_content_ad_initialized) {
    if (status) {
      advertisements.index_content_teasermover_original_teaser.invoke('hide');
      advertisements.index_content_teasermover_new_teaser.invoke('show');
    }
    else {
      advertisements.index_content_teasermover_new_teaser.invoke('hide');
      advertisements.index_content_teasermover_original_teaser.invoke('show');
    }
  }
  else {
  
    // brigitte and brigitte woman need different repositioning behaviour
    if (!is_woman) {
      var teaser_stack = ad_element.up('div').childElements().findAll(function(element) {
        return (
          (element.hasClassName('box-300') || element.hasClassName('box-custom')) &&
          ((element.id != 'contentad_textlink') && (element.id != 'content_ad'))
        );
      });
      advertisements.index_content_teasermover_original_teaser = teaser_stack.clone();

      if (status) {
        teaser_stack.invoke('hide');

        var teaser_box = ad_element.up('div.boxen-zweispaltig');
        var new_teaser, columns, column, column_teasercount, teasers, teaser;

        if (advertisements.index_content_teasermover_usedfrom == 'index_content_ad'
            && teaser_box.down('div.linke-spalte').childElements().length < 2
            && teaser_stack.length > 0) {
          teaser_box.down('div.linke-spalte').childElements().first().addClassName('border-bottom');

          new_teaser = teaser_stack.shift().cloneNode(true);
          teaser_box.down('div.linke-spalte').insert({ bottom: new_teaser });
          if (new_teaser.hasClassName('box-custom')) {
            new_teaser.setStyle({ 'marginTop': '4px' });
          }
          else {
            new_teaser.addClassName('no-border-top');
          }
          new_teaser.show();
          advertisements.index_content_teasermover_new_teaser.push(new_teaser);
        }

        while ((teaser_stack.length > 0) && (teaser_box = teaser_box.next('div.boxen-zweispaltig'))) {
          columns = teaser_box.select('div[class$=spalte]');

          for (var ci=0; ci<columns.length; ci++) {
            teasers = columns[ci].select('div.box-300', 'div.box-custom').findAll(function(element) {
              return !element.hasClassName('box-umfrage');
            }).toArray();

            for (var ti=0; ti<teasers.length; ti++) {
              teaser = teasers[ti];

              advertisements.index_content_teasermover_original_teaser.push(teaser);
              teaser_stack.push(teaser);

              new_teaser = teaser_stack.shift().cloneNode(true);

              if (teasers.length == 1) {
                new_teaser.removeClassName('no-border-top');
              }
              else if (teasers.length > 1) {
                if ((ti+1) < teasers.length) {
                  new_teaser.addClassName('border-bottom');
                }
                if ((ti+1) == teasers.length) {
                  new_teaser.addClassName('no-border-top');
                }
              }
              if (teaser_box.next('.clearfix').hasClassName('boxen-wrapper-container')) {
                if (teasers.length == 1 || (ti+1) == teasers.length) {
                  new_teaser.addClassName('border-bottom');
                }
              }
              else if ((ti+1) == teasers.length) {
                new_teaser.removeClassName('border-bottom');
              }
              teaser.insert({ after: new_teaser }).hide();
              new_teaser.show();

              advertisements.index_content_teasermover_new_teaser.push(new_teaser);
            }
          }
        }

        advertisements.index_content_ad_initialized = true;
      }
    }
    
    // brigitte woman ad repositioning
    else {
      var teaser_stack = ad_element.up('div').childElements().findAll(function(element) {
        return (
          element.tagName == 'DIV' && element.visible()
        );
      });
      advertisements.index_content_teasermover_original_teaser = teaser_stack.clone();

      if (status) {
        for (var i = 0; i < teaser_stack.length; i++) {
          if (i && teaser_stack[i].id == 'content_ad' && teaser_stack[i-1].hasClassName('teaser') && contentad) {
            teaser_stack[i-1].addClassName('teaser-300');
          }
        }
        advertisements.index_content_ad_initialized = true;
      }
    }
  }

  return status;
}

/**
 * Builds the advertisements controll bar
 *
 * @return void
 */
advertisements.build_controllbar = function(sitetype)
{
  var controllbar = new Element('div', { style: 'position:fixed; left:0px; bottom:0px; background:black; padding:5px; width:75%; z-index:1000;' });

  $$('.advertisement_preview').each(function(element) {
    var button = new Element('button', { style: 'color: '+(element.visible() ? 'green' : 'red')+';' })
      .update(element.down('span.advertisement_label').innerHTML);
    button.onclick = function() {
      if (advertisements.toggle(element.id, sitetype)) {
        button.setStyle('color:green;');
      }
      else {
        button.setStyle('color:red;');
      }
    }

    controllbar.insert(button);
  });

  $(document.body).insert(controllbar);
}

