$(document).ready(function() {
  /* CSS mitteilen, dass JavaScript aktiv ist */
  $('html').addClass('js');
  
  /* Sprunglinks animiert scrollen und Ziel hervorheben */
  $('a[href^=#]').click(function(event) {
    if($(this).attr('href') != '#') {
      var target = $($(this).attr('href'));
      
      animatedScrollTo(target);
      
      if(target.attr('id') == 'adresse-oeffnungszeiten') {
        var oldBackground = target.css('background-color');
        target.css('background-color', 'rgba(106,35,44, 1)');
        target.animate({backgroundColor: oldBackground}, 1000);
      }
    }
    
    event.preventDefault();
  });
  
  /**** Angebote mit Slider ****/
  
  // Initial die Größen richtig setzen
  resizeAngebote();
  $(window).resize(resizeAngebote);
  
  /* Blätterlinks für scrollable */
  var angebotContainer = $('#angebote');
  angebotContainer.prepend('<a class="prev" href="#">Zurück</a>');
  angebotContainer.append('<a class="next" href="#">Weiter</a>');
  
  /* den Slider initialisieren */
  var scrollableElement = angebotContainer.find('.window'); 
  scrollableElement.scrollable();
  var scrollableApi = scrollableElement.data("scrollable");
  
  /* Navigation für die Slides */
  $('#angebotnav .nav').css('height', '0');
  var openNav = function() {
    $('#angebotnav').children('.nav').animate({height: '100%'}, 'swing');
  };
  var closeNav = function() {
    $('#angebotnav').children('.nav').animate({height: 0}, 'swing');
  };
  
  $('#angebotnav').hover(openNav, closeNav);
  $('#angebotnav a').focus(openNav);
  
  
  /* beim Anspringen eines Slides den Slider scrollen */
  $('a[href^=#]').click(function(event) {
    var href = $(this).attr('href');
    
    if(angebotContainer.find(href)) {
      scrollableApi.seekTo(indexOfId(angebotContainer, href));
    }
  });
  
  /* beim Start wird entweder direkt an ein per search übergebenes
   * Angebot horizontal gescrollt, oder an das #current
   */
  var scrollToAngebot;
  var angebotFromSearch = window.location.search.match(/angebot=([^&]+)/);
  
  if(angebotFromSearch) {
    scrollToAngebot = scrollableElement.find('#' + angebotFromSearch[1]);
  } else if(window.location.hash) {
    scrollToAngebot = scrollableElement.find(window.location.hash);
  } else {
    scrollToAngebot = scrollableElement.find('.upcomming');
  }
  scrollableApi.seekTo(scrollToAngebot.index(), 0);
  
  /* zusätzlich wird zum Inhalt vertical gescrollt wenn man einen Link auf der
   * Seite geklickt hat
   */
  var selfReferrer = 'http://' + window.location.host;
  if(document.referrer.indexOf(selfReferrer) == 0
     && document.location.href.indexOf('index.html') == -1) {
    window.setTimeout("animatedScrollTo($('#mainnav'))", 1000);
  }
});
  
/**
 * Sets the outerWidth of an element
 * @param jQuery element
 * @param int innerWidth in px
 * @param bool respectMargin
 */
function setOuterWidth(element, width, respectMargin) {
  var paddingMarginBorder = element.outerWidth(respectMargin) - element.width();
  
  element.width(width - paddingMarginBorder);
}

/**
 * Sets the outerHeight of an element
 * @param jQuery element
 * @param int innerHeight in px
 * @param bool respectMargin
 */
  function setOuterHeight(element, height, respectMargin) {
    var paddingMarginBorder = element.outerHeight(respectMargin) - element.height();
    
    element.height(height - paddingMarginBorder);
  }
 
  
/**
 * Die Höhe des Containers wird an das höchste Angebot angepasst
 * Die Breite der einzelnen Angebote wiederum an die Breite des Containers
 */
function resizeAngebote() {
  var angebotContainer = $('#angebote');
  var maxHeight = 0;
  
  // Breite vererben
  var angebotWidth = angebotContainer.innerWidth();
  
  angebotContainer.find('.items > div').each(function(index) {
    setOuterWidth($(this), angebotWidth, true);
  });
  
  // Maximale Höhe der Angebote ermittelt
  angebotContainer.find('.items > div').each(function(index) {
    var myHeight = $(this).outerHeight(true);
    
    if(myHeight > maxHeight) {
      maxHeight = myHeight;
    }
  });
  
  // alle Angebote gleich hoch machen
  angebotContainer.find('.items > div').each(function(index) {
    setOuterHeight($(this), maxHeight, true);
  });

  // den Container anpassen
  setOuterHeight(angebotContainer, maxHeight, false);
  
  /* Scrollposition neu bestimmen *
  var scrollableElement = angebotContainer.find('.window'); 
  var scrollableApi = scrollableElement.data("scrollable");
  scrollableApi.seekTo(scrollableApi.getIndex(), 0); */
}

/**
 * Scrollt die Seite animiert zu einem bestimmten Element
 * @param targetElement
 */
function animatedScrollTo(targetElement) {
  $('html, body').animate({
    scrollTop: targetElement.position().top
  });
}

/**
 * @param jQuery container
 * @param string href
 * @return int number of element with id in container
 */
function indexOfId(container, idHref) {
  return container.find(idHref).index();
}
