﻿jQuery.noConflict();

var mls = mls || {};
mls.copy = mls.copy || {};

mls.copy.close   = {'en': 'close', 'de': 'Schließen'};
mls.copy.routing = {'en': 'Route planner', 'de': 'Routenplaner'};

mls.browser_is_msie = jQuery.browser.msie; 

/* Konstanten für Navigationshighlighting */
if (!mls.navi) { mls.navi = {}; }

/* Initialisierung der "aktiver-Tab"-Variable; wird im Modul "mod_article.tpl" gesetzt */
mls.first_tab_profil = '';

/**
* @fn void mls.navi.moveHighlightToPosition($element)
* Verschiebt den Container mit der Highlight-Grafik an die Position des Navigationselementes "id"
* @param $highlighter String Der Container mit der Highlight-Grafik
* @param $element String title-Inhalt (von Contao), welcher gesucht werden soll ("$", weil ein jQuery-Objekt �bergeben werden sollte)
* @author Alexander Rothe
* @date 2010-10-15
*/
mls.navi.moveHighlightToPosition = function(highlighter, element) {
  if (jQuery('#header .cms .mod_navigation').length == 0) return;
  
  if (!highlighter) return;
  
  if (!element) {
    // Bei nicht übergebenem Element wird der aktuell aktive Navi-Eintrag (welche nach Contao kein "a" sondern ein "span" ist) gew�hlt als default
    element = jQuery('#header .mod_navigation li a.active, #header .mod_navigation li a.trail');
  }

  //console.log(element);
  
  // Errechnen der Link-Position innerhalb des ".inside"-Containers, in welchem sich auch das Highlight-DIV befindet
  var element_pos_left = (element.offset()).left - (jQuery('#header .inside').offset()).left;
  
  // Errechnen der zentrierten Position unterhalb des Links
  element_pos_left = element_pos_left - (highlighter.width() - element.width()) / 2;
  
  // Highlighter-DIV an berechnete Position schieben
  highlighter.css('left', element_pos_left + 'px');
}


/**
* @fn void mls.navi.setMouseOver($highlighter)
* Belegt alle Navigationsitems mit Highlight-Effekt per MouseOver
* @param $highlighter String Der Container mit der Highlight-Grafik
* @author Alexander Rothe
* @date 2010-10-11
*/
mls.navi.setMouseOver = function(highlighter) {
  if (!highlighter) return;
  
  var highlightReset;
  var navi_items = jQuery('#header .mod_navigation li > a');
  
  navi_items.each(function() {
    jQuery(this)
      .mouseover(function() {
        //FadeIn-Funktion
        mls.navi.moveHighlightToPosition(highlighter, jQuery(this));
        if (!mls.browser_is_msie) {
          highlighter.stop(true, true).fadeIn(600);
        }
        else {
          highlighter.show();
        }
      })
      .mouseout(function() {
        //FadeOut-Funktion
        if (!mls.browser_is_msie) {
          highlighter.stop(true, true).fadeOut(350);
        }
        else {
          highlighter.hide();
        }
      })
    ;
  });
}


/**
* @fn void mls.initNavi()
* Navigation initialisieren
* @comment in eine Funktion zusammengezogen wg der besseren Les- und wartbarkeit
* @author Peter Adelmann
* @date 2010-10-08
*/
mls.initNavi = function() {
  /* Menu-Highlighting */
  /* aktuelle Seite in Navi (perm.) Highlighten */
  mls.navi.moveHighlightToPosition(jQuery('#navi_active'));
  jQuery('#navi_active').show();
  
  /* MouseOver-Effekt (= anderer HL-Container) an Navi-Items binden */
  mls.navi.setMouseOver(jQuery('#navi_highlight'));
};


/**
* @fn void mls.initTabContainer()
* Tab-Container initialisieren
* @author Peter Adelmann
* @date 2010-10-08
*/
mls.initTabContainer = function() {
  if (jQuery('.profil #left-container').length == 0) return;

  // Artikel als Einzeltabs
  jQuery('#left-container .mod_article').each(function() {
    
    // Artikelüberschrift wird zur Tab-Überschrift; Artikelüberschrift holen
    var tabContainerContentHeadline = jQuery(this).children('h1:first-child');
    
    if (tabContainerContentHeadline) {
      // Artikelüberschrift löschen
      tabContainerContentHeadline.remove();
    
      var id = jQuery(this).attr('id');
      // HTML für Tab-Navigation zusammensetzen
      jQuery('.tab-container-navigation').append(
        jQuery('<li />').append(
          jQuery('<a />', {'href': '#' + id}).click(function() {
            document.location.hash = id;
            return false;
          }).append(
            tabContainerContentHeadline.html()
          )
        )
      );
    }
    // Tab anzeigen
    jQuery(this).show();
  });
  
  // Tabs initialisieren
  jQuery('#tab-container-bottom').show();
  var teaser_tabs = jQuery('#left-container').tabs();
  
  
  // Alex: Tabstyling (Schatten)
  // Tabs absteigend mit z-Indizes versehen, damit die Schatteneffekte sich wie gewünscht überlagern
  var all_tabs = jQuery('#left-container .tab-container-navigation li.ui-state-default');
  var item_zindex = 100 + all_tabs.size();
  
  all_tabs.each(function() {
    jQuery(this).css('z-index', item_zindex--);
  });
  
  if (document.location.hash != '') mls.first_tab_profil = document.location.hash;
  
  if (mls.first_tab_profil != '') {

    // Tabs initialisieren
    jQuery('#tab-container-bottom').show();
    var teaser_tabs = jQuery('#left-container').tabs();
    
    // Tabs absteigend mit z-Indizes versehen, damit die Schatteneffekte sich wie gewünscht überlagern
    var all_tabs = jQuery('#left-container .tab-container-navigation li.ui-state-default');
    var item_zindex = 100 + all_tabs.size();
    all_tabs.each(function() {
      jQuery(this).css('z-index', item_zindex--);
    });    
    teaser_tabs.tabs('select', mls.first_tab_profil);
  }
};

/**
* @fn void mls.initFooter()
* Footer initialisieren
* @author Peter Adelmann
* @date 2010-10-08
*/
mls.initFooter = function() {
 
  // Überschriften extrahieren und neu einordnen
  jQuery('#footer td').each(function() {

    // Spaltenüberschrift wird zur Tab-Überschrift
    var footerColumnContentHeadline = jQuery(this).children('div .mod_article').children('h1:first-child');
    
    if (footerColumnContentHeadline) {
      jQuery('#footer th.' + jQuery(this).attr('class') + ' h3').empty().append(footerColumnContentHeadline);
      
      // Spaltenüberschrift löschen
      footerColumnContentHeadline.remove();

      // HTML für Spaltenüberschrift zusammensetzen
      jQuery('#footer th.' + jQuery(this).attr('class') + ' h3')
        .empty()
        .append(footerColumnContentHeadline.html())
      ;
      jQuery('#footer th.' + jQuery(this).attr('class')).show();
    }
    // Spalte anzeigen
    jQuery(this).show();
  });
};


/**
* @fn void mls.changeKompetenzenToKunden()
* Beschriftungen von Kompetenz nach Kunden ändern
* @author Peter Adelmann
* @date 2010-10-08
*/
mls.changeMenuFilterHighlight = function() {
  // active-Klasse Hauptmenü löschen (da falscher Menüpunkt)
  jQuery('#header .mod_navigation .active, #header .mod_navigation .trail').removeClass();

  // Kunden als Aktiver Punkt setzen
  mls.navi.moveHighlightToPosition(
    jQuery('#navi_active'),
    jQuery('#header .mod_navigation li a[title="' + mls.pageTitle + '"]')
  );
  jQuery('#header .mod_navigation li a[title="' + mls.pageTitle + '"]').addClass('trail');
}


/**
* @fn void mls.initCases()
* todo
* @author Peter Adelmann
* @date 2010-10-08
*/
mls.initCases = function() {
  if (jQuery('.cases #wrapper').length == 0 || mls.filter == false) return;
  mls.changeMenuFilterHighlight();
}


/**
* @fn void mls.changeKompetenzenToKunden()
* Beschriftungen von Kompetenz nach Kunden ändern
* @author Peter Adelmann
* @date 2010-10-08
*/
mls.changeKompetenzenToKunden = function() {
  // Menü-Highlight ändern
  mls.changeMenuFilterHighlight();
    
  // Überschriften tauschen
  jQuery('.hauptspalte .non_customer .kompetenz').hide();
  jQuery('.hauptspalte .non_customer .kunden').show();

  // Title anpassen
  var title = jQuery('title').html().replace(mls.pageTitle, mls.filter);

  // IE (kann jQuery nicht)
  if (mls.browser_is_msie) {
    document.title = title;
  }
  // andere (haben Probleme mit dem &-Zeichen)
  else {
    jQuery('title').html(title);
  }
}


/**
* @fn void mls.setFilter()
* todo
* @param kompetenz Elemente, die hervorgehoben werden sollen
* @author Peter Adelmann
* @date 2010-10-08
*/
mls.setFilter = function(kompetenz) {
  // Ausblenden des Komp.-Layers, falls er noch eingeblendet sein sollte
  jQuery('#kompetenz-layer').hide();
  
  kompetenz = kompetenz.replace(/ kompetenzen/, '');
  kompetenz = kompetenz.replace(/ kunden/, '');

  // Kompetenzen
  var kompetenzen = jQuery('.hauptspalte .mod_article').not('.non_customer');
  
  // Ansicht zurücksetzen
  kompetenzen.fadeTo(0, 1);
  kompetenzen.removeClass('active');
  jQuery('#left-container .mod_tagcloud li').removeClass('active');
  jQuery('#left-container .mod_tagcloud li.' + kompetenz).addClass('active');
  
  // Ansicht filtern 
  if (kompetenz != 'default') {
    //kompetenzen.not('.' + kompetenz).fadeTo(0, 0.1);  // => dimmt alle nicht-triggernden Container auf "Halbmast"
    kompetenzen.not('.' + kompetenz).hide();        // => blendet alle nicht-triggernden Container komplett aus (d.h. die Übrigen "rutschen" auf)
    kompetenzen.not('.' + kompetenz).addClass('active');
  }
}


/**
* @fn void mls.initKompetenzenKunden()
* todo
* @author Peter Adelmann
* @date 2010-10-08
*/
mls.initKompetenzenKunden = function() {
  // auf der Kompetenz-Seite?
  if (jQuery('.kompetenz #wrapper').length == 0) return;
    
  // Layer schließen
  jQuery('#kompetenz-layer .close').click(function() {
    jQuery('#kompetenz-layer').hide();
  });

  // Kompetenzen
  var kompetenzen = jQuery('.hauptspalte .mod_article').not('.non_customer');
  
  // Zähler für Positionierung Layer
  var kompetenz = 0;
  
  // Layer mit Inhalten befüllen, Positionieren und anzeigen
  kompetenzen.each(function() {
    kompetenz++;
    
    jQuery(this).addClass('kompetenz-' + kompetenz);

    // Inhalte holen
    var logos   = jQuery(this).children().filter('div.ce_image');
    var content = jQuery(this).children().not('div.ce_image, div.ce_tags');
    
    if (mls.filter == true) {
      content.find('a[href!="http"]').each(function() {
        jQuery(this).attr('href', jQuery(this).attr('href') + '?filter=kunden');
      });
    }
    
    // erstes Logo einblenden
    logos.first().show();

    // Click-Funktionalität integrieren (Detail-Layer befüllen, positionieren und anzeigen)
    if (jQuery(this).hasClass('show-layer')) {
      jQuery(this).click(function() {
        if (jQuery(this).hasClass('active')) return;

        // Logo befüllen
        jQuery('#kompetenz-layer .logo').empty().append(logos.eq(1));
        
        // Inhalt befüllen
        jQuery('#kompetenz-layer .content').empty().append(content);
        
        // Position ermitteln
        var element = jQuery(this).position();
        var top = element.top;
        var left = element.left;
        
        // Position der letzten beiden Kompetenz-Layer korrigieren ("flippen"), wenn sich das Element in der rechten Hälfte des Blockes befindet
        if (left > 340) left -= 270;
        
        // Layer an Position verschieben & anzeigen
        jQuery('#kompetenz-layer').css({
          'top': top + 'px',
          'left': left + 'px'
        }).show();
      }); 
    }
    
    // neue Zeile
    if (kompetenz%5 === 0) kompetenz = 0;
  });
  
  // Filter "Alle" anzeigen
  if (mls.filter == true) {
    jQuery('#left-container li.kunden').show();
  }
  else {
    jQuery('#left-container li.kompetenzen').show();
  }
  
  if (mls.filter == true) {
    //Kompetenzen to Kunden
    mls.changeKompetenzenToKunden();
    
  }
  
  var tags = jQuery('.hauptspalte .ce_tags span');
  tags.each(function() {
    jQuery('#left-container li.' + jQuery(this).attr('class')).show();
  });
  
  // Filter initialisieren
  jQuery('#left-container li').each(function() {
    jQuery(this).click(function() {
      mls.setFilter(jQuery(this).attr('class'));
    })
  });
}


/**
* @fn void mls.initCasesNewsLightbox()
* Lightbox-Steuerung für Cases-Seite und Aktuell-Details
* @author Peter Adelmann
* @date 2010-10-08
*/
mls.initCasesNewsLightbox = function() {
  
  // auf der Cases-Seite?
  if (   jQuery('.cases #wrapper').length == 0
      && jQuery('.news #wrapper').length == 0
  ) return;

  // alle Bildcontainer holen
  var imagesContainer = jQuery('#left-container .ce_image .image_container');
  
  // ersten Container einblenden (wenn JS aktiv ist wierden alle Bildcontainer ausgeblendet)
  imagesContainer.first().parent().show();

  // Bilder für Lightbox vorbereiten
  imagesContainer.each(function(n) {
    
    // Zähler für Nr. Container
    // Algorithmus
    // - das erste Bild ist die Collage.
    // - diese soll nicht in die Lightbox
    // - der zu setzende Link hat immer das nächste Bild zum Ziel
    // - das letzte Bild bleibt unverlinkt
    if (n < imagesContainer.length - 1) {
      n++;
      var imageLightbox = imagesContainer.eq(n).children();
      var imageContent  = jQuery(this).children();
      imageContent.attr('alt', imageLightbox.attr('alt'));
      jQuery(this).empty().html(
        jQuery('<a />', {
          'href': imageLightbox.attr('src'),
          'rel': 'lightbox-cases'
        }).append(imageContent)
      );
    }
  });
};


/**
* @fn void mls.externalLinks()
* Externe Links in neuem Fenster öffnen
* @author Peter Adelmann
* @date 2010-10-08
*/
mls.externalLinks = function() {
  jQuery('a[href^="http"]').click(function() {
    window.open(this.href);
    return false;
  });
};


/**
* @fn void mls.initLightbox()
* Lightbox initialisieren
* @author Peter Adelmann
* @date 2010-10-08
*/
mls.initLightbox = function() {
  jQuery('a[rel="lightbox-cases"], a[rel*="lightbox"]').fancybox({
    'hideOnContentClick': true,
    'enableEscapeButton': true,
    'cyclic': true,
    'padding': 8,
    'autoDimensions': true,
    'titleShow': true,
    'titlePosition': 'inside',
    'showNavArrows': true,
    'overlayOpacity': 0.8,
    'overlayColor': '#000000'
  });
  
  jQuery('a[rel="google"]').fancybox({
    'hideOnContentClick': true,
    'enableEscapeButton': true,
    'cyclic': true,
    'padding': 8,
    'width': 580,
    'height': 400, // Höhe aus Layout abzüglich 37px, die im CSS gesetzt werden
    'type': 'iframe',
    'titleShow': false,
    'showNavArrows': true,
    'overlayOpacity': 0.8,
    'overlayColor': '#000000',
    'onStart': function() {
      jQuery('#fancybox-close').html(mls.copy.close[language]);
      jQuery('#fancybox-outer').append(
        jQuery('<a />', {
          'href': 'http://maps.google.de/maps?daddr=M%2EL%2E%26S%2E+Werbeagentur+GmbH,+Neuer+Zollhof+3,+40221+D%FCsseldorf+(M%2EL%2E%26S%2E+Werbeagentur+GmbH)&f=d&hl=de&dq=MLS&ie=ISO&ll=51.21645,6.7581&z=15&om=0',
          'onclick': function() { window.open(this.href); return false; },
          'id': 'fancybox-routenplaner'
        }).append(
          mls.copy.routing[language]
        )
      );
    }
  });
};


/**
* @fn void redirect()
* Flash-Menü
* @author Peter Adelmann
* @date 2010-10-08
*/
function redirect(id) {
  
  // aktuelle URL holen
  var documentLocationHref = document.location.href;
  
  
  // Weiterleitungen
  // 1: Sprachwechsel
  if (   id == 'en'
      || id == 'de'
  ) {
    documentLocationHref = documentLocationHref.replace(/(\?|&)language=(de|en)/g, '');
    // prüfen, ob die aktuelle URL bereits mit Parameter aufgerufen wurde
    // in Abhängigkeit den Sprachparameter anhängen
    if (documentLocationHref.match(/\?/)) {
      documentLocationHref += '&language=';
    }
    else {
      documentLocationHref += '?language=';
    }
    window.location.href = documentLocationHref + id;
  }
  
  // 2: Weiterempfehlen
  else if (id == 'empfehlen') {
    var subject = 'Empfehlung: M.L.%26S. Fullservice Werbeagentur';
    
    documentLocationHref = documentLocationHref.replace(/(\?|&)language=(de|en)/g, '');
    if (language == 'en') {
      if (documentLocationHref.match(/\?/)) {
        documentLocationHref += '%26';
      }
      else {
        documentLocationHref += '?';
      }
      subject = 'Suggestion: M.L.%26S. Fullservice Advertising Agency';
      documentLocationHref += 'language=en';
    }
    window.location.href = 'mailto:?subject=' + subject + '&body=<' + documentLocationHref + '>';
  }
  
  // 3: Seitenwechsel
  else {
  	window.location.href = '/' + id + '.html';
  }
}


jQuery(document).ready(function() {
  mls.initNavi();
});


jQuery(window).load(function() {
  mls.initFooter();
  mls.initTabContainer();
  mls.initKompetenzenKunden();
  mls.initCases();
  mls.initCasesNewsLightbox();
  mls.initLightbox();
  mls.externalLinks();
});
