/**
 * Die Datei enthaellt alle Funktionen fuer die Mobile Version.
 * Diese Funktionen werden auch von der normalen Version benutzt.
 *
 */
$(document).ready(function() {
   // Lightbox fuer Bilder/Thumbs
   $("a.lightbox").fancybox();

   // Testimonial laden
   loadTestimonial();
   $('#testimonial-more').click(function() {
      loadTestimonial();
      return false;
   });
   
   // Vorbelegung des Kontaktformulars
   $('#kontaktformular #name, #kontaktformular #email, #kontaktformular #nachricht').each(function() {
      // Vorbelegten text speichern
      $(this).data('vorbelegung', $(this).val());
      // Vorbelegung loeschen
      $(this).focusin(function() {
         if($(this).val() == $(this).data('vorbelegung')) {
            $(this).val('');
         }
      });
      $(this).focusout(function() {
         if($(this).val().length == 0) {
            $(this).val($(this).data('vorbelegung'));
         }
      });
   });
   
   // Kontaktformular abschicken
   $('#kontaktformular').submit(function() {
      if(checkKontaktformular() == true) {
         $('#kontaktformular .error_hint').hide();
         // Daten abschicken
         $.post('scripts/nachricht.php?abschicken',
               {
                  name: $('#kontaktformular #name').val(),
                  email: $('#kontaktformular #email').val(),
                  nachricht: $('#kontaktformular #nachricht').val()
               },
               function(data, textStatus, XMLHttpRequest) {
                  var dataObject = eval('(' + data + ')');
                  if(dataObject.erfolg) {
                     // Nachricht wurde abgeschickt
                     $('#kontaktformular').css('height', $('#kontaktformular').height() + 'px');
                     $('#kontaktformular-wrapper').slideUp(700, function() {
                        $('#kontaktformular').append('<p class="success">Vielen Dank!<br/>Ihre Nachricht wurde erfolgreich verschickt.</p>');
                        $('#kontaktformular .success').slideDown(500);
                     });
                  }
                  else {
                     $('#kontaktformular .error_hint').html('Ein interner Fehler ist aufgetreten').show();
                  }
               }
         );
      }
      else {
         $('#kontaktformular .error_hint').show();
      }
      
      return false;
   });
   
   // Die Sliderfunktion
   var scrollPaneHeight = sliderHeight = contentHeight = contentWrapperHeight = sliderEnde = sliderStart = hiddenContentDiff = positionStart = positionTrack = 0;
   var contentScrollStep = 50;
   
   // Scrollen mit dem Slider
   $('#slider')
      .bind('init', function() {
         // Einige Masse auslesen
         scrollPaneHeight = $('#slider').parent().height();
         sliderHeight = $('#slider').height();
         sliderStart = $('#slider').parent().offset().top;
         contentHeight = $('#content').height();
         contentWrapperHeight = $('#content-wrapper').height();
         
         // Einzelne Werte berechnen
         sliderEnde = scrollPaneHeight + sliderStart - sliderHeight;
         hiddenContentDiff = contentHeight - contentWrapperHeight + 50;
         positionStart = 21;
         positionTrack = sliderHeight - 50 - ($('#slider-position').height() / 2);
         
         // Die Menupunkte so auf dem Slider verteilen, wie sie auch im Content vorkommen
         var posLiPrev = -1;
         $('#slider ul li').each(function() {
            // Link im Content auslesen und seine Position bestimmen
            var name = $(this).find('a').attr('href').match(/#(.*)/);
            var linkInContent = $('a[name='+name[1]+']');
            var posTop = linkInContent.position().top + $('#content-wrapper').scrollTop();

            if(posTop < 0) {
               posTop = 0;
            }
            var posTopPercent = posTop / contentHeight;
            var posTopLi = $('#mainnav').height() * posTopPercent;
            if($(this).parent().attr('id') != 'mainnav') {
               posTopLi = posTopLi - ($(this).parent().offset().top - $('#mainnav').offset().top) + 21 + 15;
            }
            else {
               // Positionierungsfehlerabfangen, so dass nicht zwei Links uebereinander liegen
               if(posTopLi <= posLiPrev) {
                  posTopLi = posLiPrev + 15;
               }
            }
            
            $(this).css({position: 'absolute', 'top' : posTopLi, 'right' : 0});
            posLiPrev = posTopLi;
         });
         // Sliderposition udpaten fuer den Fall, dass direkt ein Anker aufgerufen wurde
         $(this).trigger('updateSliderPosition');
      })
      .bind('updateSliderPosition', function() {
         // Position des Sliders in Abhängigkeit von der Scrollposition des Contents setzen
         var scrollTop = $('#content-wrapper').scrollTop() * -1;
         
         var scrollTopPercent = (Math.abs(scrollTop) / hiddenContentDiff);
         var sliderTop = ((sliderEnde - sliderStart) * scrollTopPercent);
         
         $('#slider').css('top', Math.round(sliderTop) + 'px');
         $(this).trigger('updatePositionMarker');
      })
      .bind('updatePositionMarker', function(positionPercentage) { // Event zum Update der Position des Positionsmarkers
         // Scrollposition des Sliders bestimmen
         positionPercentage = (typeof positionPercentage == 'number')? positionPercentage : getSliderPosition();
         // Neue Position des Positionspfeils setzen
         var newPositionMarker = ((positionTrack) * (positionPercentage / 100)) + positionStart;
         $('#slider-position').css('top', newPositionMarker + 'px');
      })
      .trigger('init')
      .draggable({axis: 'y', containment: 'parent', handle: '#slider-hands'})
      .bind('drag', function(event, ui) {
           // Position innerhalb der Scrollpane berechnen
           var positionPercentage = getSliderPosition();
           
           // Content verschieben
           var newPosition = Math.round(hiddenContentDiff * (positionPercentage / 100));
           //console.log(newPosition);
           $('#content-wrapper').scrollTop(newPosition);
           
           $(this).trigger('updatePositionMarker', [positionPercentage]);
      }
   );
      
   // Klick auf Menuepunkt (Der IEloesst das Scrollevent nicht aus)
   $('#slider a').click(function() {
      window.setTimeout(function() {$('#slider').trigger('updateSliderPosition');}, 0);
   });
   
   
   // Scrollen mit dem Mousrad des Contents
   $('body').bind('mousewheel', function(event, delta) {
         var top = $('#content-wrapper').scrollTop();
         
         if(delta < 0 && top >= 0) {
            // nach oben Scrollen
            var scrollTo = ((top * 1) + contentScrollStep);
            scrollTo = scrollTo < 0? scrollTo = 0 : scrollTo;
         }
         else if(delta > 0) {
            // nach unten scrollen
            var scrollTo = ((top * 1) - contentScrollStep);
            scrollTo = scrollTo > hiddenContentDiff? hiddenContentDiff : scrollTo;
         }
         
         $('#content-wrapper').scrollTop(scrollTo);
         $('#slider').trigger('updateSliderPosition');
      })
      .scroll(function() {
         window.setTimeout(function() {$('#slider').trigger('updateSliderPosition');}, 0);
      }
   );
   
   
   
   $(window).resize(function() {
      $('#slider').trigger('init');
      $('#slider').trigger('updateSliderPosition');
   });
});

/**
 * Fuktion zur Bestimmung der Scrollposition des Sliders.
 *
 * @return integer
 */
function getSliderPosition() {
   var scrollingOffset = $('#slider').offset().top - $('#slider').parent().offset().top + $('#slider').parent().offset().top;
   return (Math.round(((scrollingOffset - sliderStart) / (sliderEnde - sliderStart)) * 100));
}

/**
 * Funktion zum Laden des naechsten Testimonials.
 *
 */ 
function loadTestimonial() {
   $.getJSON('scripts/testimonials.php', {gettestimonial: 1}, function(data, textStatus) {
      if(data) {
         $('#testimonial').fadeOut(500, function() {
            $('#testimonial p').eq(0).html(data.text);
            $('#testimonial p.signature').html(data.autor);
            $('#testimonial').fadeIn(500);
         });
      }
   });
}

/**
 * Ueberpreuft die Eingaben des Nutzers im Kontaktformular
 *
 * @return bool true, wenn Das formular valide ist, sonst false
 */ 
function checkKontaktformular() {
   var valide = true;
   // Name angegeben?
   if($('#kontaktformular #name').val().length == 0 ||
      $('#kontaktformular #name').val() == $('#kontaktformular #name').data('vorbelegung')) {
      valide = false;
      $('#kontaktformular #name').addClass('error');
   }
   else {
      $('#kontaktformular #name').removeClass('error');
   }
   
   // Email angegeben?
   var emailfilter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
   if($('#kontaktformular #email').val().length == 0 ||
      $('#kontaktformular #email').val() == $('#kontaktformular #email').data('vorbelegung') ||
      emailfilter.test($('#kontaktformular #email').val()) == false) {
      valide = false;
      $('#kontaktformular #email').addClass('error');
   }
   else {
      $('#kontaktformular #email').removeClass('error');
   }
   
   // Nachricht angegeben?
   if($('#kontaktformular #nachricht').val().length == 0 ||
      $('#kontaktformular #nachricht').val() == $('#kontaktformular #nachricht').data('vorbelegung')) {
      valide = false;
      $('#kontaktformular #nachricht').addClass('error');
   }
   else {
      $('#kontaktformular #nachricht').removeClass('error');
   }
   
   return valide;
}
