﻿var hashListener = new HashListener({
  'blank_page': 'fileadmin/assets/scripts/blank.html'
});

document.addEvent('domready', function(){
  var base = document.getElement('base').getProperty('href');
  
  var navigation = $('navigation');
  var activeLink = null;  
  var contentInner = $('content_inner');
  var leftNav = null;
  var leftNavSub = null;
  var lightbox = null;
  var lightboxLoaded = false;
  var currentLang = 'de';
  
  var backgroundMovie = null;
  var backgroundImage = null;
  var moviePaused = false;
  
  Asset.css('fileadmin/assets/css/active.css');
  
  var trackPage = function(url, title)
  {
	try{
		piwikTracker.setCustomUrl(url);
		piwikTracker.setDocumentTitle(title);
		piwikTracker.trackPageView();
	}
	catch(ex)
	{
		trc(ex, 'error');
	}
  };
  
  var getContent = function(url, cb){
    new Request.HTML({
      'method': 'GET',
      'url': base + url + '?type=1',
      'async': false,
      'onSuccess': function(responseTree, responseElements, responseHTML, responseJavaScript)
      {
        cb(responseHTML);
					
        try
        {
          eval(responseJavaScript);
        }
        catch(ex)
        {
          trc(ex, 'error');
        }
      }
    }).send();
  };
  
  var getNavigation = function(url, lang, cb){
    new Request.HTML({
      'method': 'GET',
      'url': base + lang + '/' + url + '?type=2',
      'async': false,
      'onSuccess': function(responseTree, responseElements, responseHTML, responseJavaScript)
      {
        cb(responseHTML);
      }
    }).send();
  }
      
      var invokeHooks = function(){  
        try
        {
          var grid = contentInner.getFirst('table.content_grid');
          
          if(grid !== null && grid.get('id') !== null)
          {
            eval("hook_" + grid.get('id') + "()");
          }
        }
        catch(ex){
        }
      }
          
          var hook_pg_6 = function(){ //team  
            var gallery = $('gallery');
            
            var prev = new Element('div', {
              'html': '&nbsp;',
              'class': 'prev-button content-prev'
            });
            
            var next = prev.clone();
            next.set('class', 'next-button content-next');
            
            prev.inject(gallery, 'after');
            next.inject(gallery, 'after');
            
            var pages = gallery.getElements('li');
            var carrousel = new ContentCarousel(gallery, pages, {
              'prevButton': prev,
              'nextButton': next,
              'duration': 550,
              'instant': ((Browser.ie && Browser.version < 9) ? true : false),
              'onEndReached': function(){
                next.addClass('disabled');
              },
              'onStartReached': function(){
                prev.addClass('disabled');
              },
              'onNextStart': function(c){
                if(prev.hasClass('disabled')){
                  prev.removeClass('disabled');
                }
              },
              'onPrevStart': function(){
                if(next.hasClass('disabled')){
                  next.removeClass('disabled');
                }
              }
            });
          };
  
  var hook_pg_2 = function(){ //start
    $('change-logo').setStyle('display', 'none');
  }  
      
      var hook_pg_31 = function(){ //news  
   
        var slider = contentInner.getElement('.pageslider');    
        if(slider !== null)
        {    
          var pages = slider.getChildren('li');
          
          if(pages.length > 1)
          {      
            var nextButton = new Element('div', {
              'class': 'next-button content-next'
            });
            var prevButton = new Element('div', {
              'class': 'prev-button content-prev'
            });
            
            nextButton.inject(slider, 'before');
            prevButton.inject(slider, 'before');
            
            var carousel = new ContentCarousel(slider, pages, {
              'nextButton': nextButton,
              'prevButton': prevButton,
              'instant': ((Browser.ie && Browser.version < 9) ? true : false),
              'onEndReached': function(){
                nextButton.addClass('disabled');
              },
              'onStartReached': function(){
                prevButton.addClass('disabled');
              },
              'onNextStart': function(){
                if(prevButton.hasClass('disabled')){
                  prevButton.removeClass('disabled');
                }
              },
              'onPrevStart': function(){
                if(nextButton.hasClass('disabled')){
                  nextButton.removeClass('disabled');
                }
              }
            });
          }
        }   
      }  
          
          
          var assignLightbox = function(selector)
              {  
                var elements = $$(selector);
                
                if(!elements)
                  return;
                    
                    if(lightbox !== null)
                    {
                      lightbox.addItems(selector);
                    }
                else if(lightboxLoaded)
                {
                  lightbox = new CeraBox({
                    group:  true,
                    errorLoadingMessage: 'Inhalt konnte nicht geladen werden. Bitte versuchen Sie es später noch einmal'
                  });
                  
                  assignLightbox(selector);
                }  
                else
                {
                  Asset.css('fileadmin/assets/scripts/cerabox/style/cerabox.css');
                  Asset.javascript('fileadmin/assets/scripts/cerabox/cerabox.js', {
                    onload: function(){
                      lightboxLoaded = true;          
                      assignLightbox(selector);
                    }
                  });
                }    
              };
  
  var resetLightbox = function(){    
    lightbox = null;
    
    var cerabox = $('cerabox-background');
    if(cerabox !== null)
      cerabox.destroy();
  };
  
  var switchMovie = function(path){  
    if(typeof(swfobject) == "undefined" || path == '')
      return;
        
        if(backgroundImage !== null)
        {
          backgroundImage.setStyle('display', 'none');
        }
    
    if(backgroundMovie !== null)
    {
      var overlay = $('background_overlay');
      if(overlay)
      {
        overlay.setStyle('display', 'none');
      }
      
      backgroundMovie.setAttribute('width', '100%');  
      backgroundMovie.setAttribute('height', '100%');      
      
      backgroundMovie.setMoviePath(path);
      //backgroundMovie.resume();
    }
    else
    {    
      var obj = swfobject.getObjectById("bg_movie_obj");  
      
      obj.setMoviePath(path);      
      backgroundMovie = obj;
    }
    
    moviePaused = false;
  };
  
  var switchImage = function(path){  
    var absolutePath = base + path;
    
    if(typeof(swfobject) != "undefined")
    {    
      backgroundMovie = swfobject.getObjectById("bg_movie_obj");  
    }
    
    if(backgroundMovie !== null)
    {
      backgroundMovie.setAttribute('width', '1px');  
      backgroundMovie.setAttribute('height', '1px');    
      
      if(moviePaused === false){
        try{
          
          if(Browser.ie && Browser.version <= 8)
          {
            makeCallable(backgroundMovie, 'pause');           
            backgroundMovie.pause();          
          }
          else{
            backgroundMovie.pause();
          }
          
          moviePaused = true;
        }
        catch(ex)
        {
          trc("Could not pause movie. " + ex, 'error');
        }
      }
    }
    
    if(backgroundImage !== null)
    {
      var overlay = $('background_overlay');
      if(overlay)
      {
        overlay.setStyle('display', 'block');
      }
      
      backgroundImage.setProperty('src', base + path);
      backgroundImage.setStyle('display', 'block');
    }
    else
    {
      backgroundImage = new Element('img', {
        'id': 'bg_image_obj',
        'src': base + path,
        'width': '100%',
        'height': '100%'
      });
      
      backgroundImage.inject(document.body, 'top');
      
      new Element('div', {
        'id': 'background_overlay'
      }).inject(backgroundImage, 'before');
    }        
    
  };
  
  var makeCurrentActiveInList = function(list, hash)
      {    
        var result = null;
        
        list.each(function(el){
          var link = el.getFirst('a');
          
          if(el.hasClass('active') === true && !el.getParent('li'))
          {
            el.removeClass('active');
          }
          
          var baseSegmentsCount = base.split('/').length - 4;
          
          var hashSegments = hash.split('/');
          var finalHash = hashSegments.slice(baseSegmentsCount).join('/');
          var rootPage = (hashSegments[0] == 'de' || hashSegments[0] == 'en') ? hashSegments[1] : hashSegments[0];
          
          if(link.href == base + finalHash || link.href.indexOf(rootPage) != -1)
          {      
            activeLink = link;
            el.addClass('active');
            
            result = activeLink;
            return;
              }
        });
        
        return result;
      };  
  
  var pausePlayers = function(el){            
    var players = el.getElements('.media-player');
    if(players.length > 0)
    {
      players.each(function(el){  
        
        if(Browser.ie)
        {
          var player = swfobject.getObjectById(el.getFirst('object').id);
          
          makeCallable(player, 'pauseMovie');           
          player.pauseMovie();
        }
        else{
          var movieObj = swfobject.getObjectById(el.getChildren('object').get('id'));
          
          if(movieObj)
          {
            movieObj.pauseMovie();
          }
        }
      });
    }
  };
  
  hashListener.addEvent('hashChanged', function(hash){  
    if(hash == '')
      return;
        
    $('change-logo').setStyle('display', 'block');
    
    contentInner.getElements('.media-player').each(function(obj){
      obj.destroy();
    });
    
    contentInner.empty();
    
    resetLightbox();
    
    var content = getContent("/" + hash, function(result){
      contentInner.innerHTML = result;
      
      invokeHooks();
    });
    
    //destroy the old subnav    
    
    var subUl = navigation.getElement('ul');
    if(subUl != null)
    {
      subUl.destroy();
    }
    
    //find the current navigation point and insert sub navigation into it
    makeCurrentActiveInList(navigation.getElements('li'), hash);
    
    //find the subnav in the inner content
    var subNav = contentInner.getElement('#sub_nav_async');
    if(subNav !== null && activeLink !== null)
    {
      subNav.removeProperty('id');
      subNav.inject(activeLink, 'after');     
      subNav.getParent().addClass('active');
    }
    
    //get the suitable background movie
    var movieUrl = contentInner.getElement('#bg_1');    
    if(movieUrl !== null)
    {
      try{
        switchMovie(movieUrl.innerHTML);
      }
      catch(ex)
      {
        trc(ex, 'error');
      }
      finally
      {
        movieUrl.destroy();
      }
    }
    
    //get the suitable background image
    var imageUrl = contentInner.getElement('#bg_0');    
    if(imageUrl !== null)
    {    
      switchImage(imageUrl.innerHTML);
      imageUrl.destroy();
    }
    
    if(leftNav !== null)
    {
      leftNav.destroy();
    }
    
    leftNav = $('navigation_left');
    if(leftNav !== null)
    {
      leftNav.inject(contentInner, 'before');
      
      leftNav.position({
        'relativeTo': contentInner,
        'edge': 'topRight',
        'position': 'topLeft'
      });
      
      //makeCurrentActiveInList(leftNav.getChildren('li'), hash);
    }  
    
    var images = $$('a.lightbox');
    if(images.length > 0){
      assignLightbox(images);
    }
    
    //get tabs        
    var slider = $('pageslider');    
    if(slider !== null)
    {
      var pages = slider.getChildren('.slider-page');
      
      if(pages.length > 1)
      {      
        var nextButton = new Element('div', {
          'class': 'next-button content-next'
        });
        var prevButton = new Element('div', {
          'class': 'prev-button content-prev'
        });
        
        nextButton.inject(slider, 'before');
        prevButton.inject(slider, 'before');
        
        var carousel = new ContentCarousel(slider, pages, {
          'nextButton': nextButton,
          'prevButton': prevButton,
          'instant': ((Browser.ie && Browser.version < 9) ? true : false),
          'onEndReached': function(){
            nextButton.addClass('disabled');
          },
          'onStartReached': function(){
            prevButton.addClass('disabled');
          },
          'onNextStart': function(){
            if(prevButton.hasClass('disabled')){
              prevButton.removeClass('disabled');
            }
            
            pausePlayers(this.getCurrentPage());
          },
          'onNextCompleted': function(){
            var player = this.getCurrentPage().getElement('.media-player');
            
            if(player !== null){
              if(Browser.ie)
              {              
                makeCallable(swfobject.getObjectById(player.getFirst('object').id), 'startMovie');           
                player.getFirst('object').startMovie();
              }
              else{
                var movieObj = swfobject.getObjectById(player.getChildren('object').get('id'));
                
                if(movieObj)
                {
                  movieObj.startMovie();
                }                
              }
            }
          },
          'onPrevStart': function(){
            if(nextButton.hasClass('disabled')){
              nextButton.removeClass('disabled');
            }
            pausePlayers(this.getCurrentPage());
          }
        });
      }
    }    
  });
  hashListener.start();
  
  //make content links async
  document.addEvent('click:relay(a.internal-link)', function(e){
    e.preventDefault();
    
    hashListener.updateHash(this.href.replace(base, ''));
	
	trackPage(this.href, this.innerHTML);
  });
  
  document.window.addEvent('resize', function(){
    if(leftNav === null)
      return;
        
        leftNav.position({
          'relativeTo': contentInner,
          'edge': 'topRight',
          'position': 'topLeft'
        });
  });
  
  document.addEvent('click:relay(#navigation_left li a, #navigation_left_sub li a)', function(e){
    e.preventDefault();
    
    hashListener.updateHash(e.target.href.replace(base, ''));      
    e.target.getParent('li').addClass('active');
	
	trackPage(e.target.href, e.target.innerHTML);
  });
  
  document.addEvent('click:relay(#navigation a)', function(e){
    e.preventDefault();
    
    hashListener.updateHash(e.target.href.replace(base, ''));
	
	trackPage(e.target.href, e.target.innerHTML);
  });
  
  /*$('language_switch').addEvent('click', function(e){    
    if(!location.hash)
    {
      return; 
        }
    
    var urlLang = location.href.replace(base, '').split('/')[0];
    if(urlLang == '#de' || urlLang == '#en'){
      currentLang = urlLang.replace('#', '');
    }
    
    console.log(currentLang );
    
    var newLang = (currentLang == 'de') ? 'en' : 'de';
    var hash = location.hash.replace('#', '');
    var segments = hash.split('/');
    
    if(segments[0] == 'de' || segments[0] == 'en')
    {          
      segments[0] = newLang;
      hash = segments.join('/');
    }
    else
    {
      hash = newLang + '/' + hash;
    }
    
    currentLang = newLang;
    
    getNavigation(segments.slice(1).join('/'), currentLang, function(responseHTML){ 
      navigation.destroy();
      
      $('footer').innerHTML = responseHTML;
      
      navigation = $('navigation');      
      makeCurrentActiveInList(navigation.getElements('li'), hash);
      
      e.target.innerHTML = (currentLang == 'de') ? 'Deutsch': 'Englisch';
    });
    
    hashListener.updateHash(hash);
    
    e.preventDefault();
  });*/
  
  invokeHooks();
});

document.addEvent('load', function(){  
  hashListener.updateHash(window.location.hash);
});
