$(document).ready(function(){
  /**
   * toggle set
   */

  $('.toggle-set')
    // show visible items
    .find('.toggle-visible').show().end()
    // hide non-visible items
    .find('.toggle-hidden').hide().end()
    // show tiggers
    .find('.toggle-trigger').show()
      .find('a').click(function() {
        // slide
        $(this).closest('.toggle-item').slideEm(300);
        // one or less trigger items left? -> hide global trigger
        var toggleset = $(this).closest('.toggle-set');
        var triggers = toggleset.find('.toggle-trigger:visible');
        if (triggers.length <= 1) {
          toggleset.find('.toggle-trigger-all').hide();
        }
        // return
        return false;
      })
      .end()
    .end()
    // show global trigger
    .find('.toggle-trigger-all').show()
      .find('a').click(function() {

        var toggleset = $(this).closest('.toggle-set');
        // get current height
        var fixheight = toggleset.outerHeight()+15;        
        toggleset
          .css('min-height', fixheight+'px')
          // slide
          .find('.toggle-item').andSelf().slideEm(1000);
        // hide trigger
        $(this).blur().hide();
        // return
        return false;
      });

  $.fn.slideEm = function(speed) {  
      return this.each(function() {
      // get current height
      var fixheight = $(this).outerHeight()+15;
      $(this)
        .css('min-height', fixheight+'px')
        // slide
        .find('.toggle-hidden').slideDown(speed, function() {
          // reset display style on list items
          if ($(this).is('li')) {
            $(this).css('display', 'list-item');
          }
        })
        .end()
        // hide trigger
        .find('.toggle-trigger').blur().hide();
      });
  }


  /**
   * gallery
   * »show more« link
   */

  $('.d--gallery-more a').click(function() {
    var items = $(this).closest('.d--gallery').find('.d--gallery-items');
    // show hidden items
    var displayvalue = 'inline-block';
    if (jQuery.browser.msie && (jQuery.browser.version.substr(0,1) == "6" || jQuery.browser.version.substr(0,1) == "7")) {
      // IE 6+7
      var displayvalue = 'inline';
    }
    function run_forrest_run(itm) {
      window.setTimeout(function() {
        run_forrest_run(itm.next());
      }, 80);
      itm.css('display', displayvalue);
      itm.animate({'opacity': '1'}, 500);
    }
    run_forrest_run($('li.toggle:first'));
    // hide »show more« link
    $(this).hide();
  });





  /**
   * external links
   *
   * filters href != hostname or rel="external"
   * adds .external to elements not containing img, div or mailto
   * opens external links in new window/tab
   */

  $('a, area').filter(function() {
    return this.hostname && (this.hostname).split(":")[0] !== (location.hostname).split(":")[0] || $(this).attr('rel') == 'external';
  })
  .not(':has(img, div, mailto)')
  .addClass('external')
  .end()
  .click(function(e) {
    open(this.href); 
    e.preventDefault();
  });
});

