$(document).ready(function(){
  //Variablendeklaration
  /*if ($('#slider').length > 0){
	 var fadeContainer = $('#slider');
	}
	else {
	 var fadeContainer = $('#content');
	}*/

  var tglFrm = $('#toggleForm');
  var frmTray = $('#formTray');
  var frm = $('#contactform');
  var frmInput = $('#contactform :input');
  var required = ['author', 'email', 'text'];	
  var email = $('#email');
  var feedback = $('#feedback');
  var emptyerror = 'Bitte füllen Sie dieses Feld aus.';
  var emailerror = 'Bitte geben Sie eine gültige E-Mailadresse ein.';
  var errornotice = $('#error');
  var slideshow = $('#slideshow');
	//Folgende Funktion prüft, ob der Browser die opacity-Eigenschaft unterstützt. Wenn ja (alle richtigen Browser), dann wird bei
	//Funktionsaufruf ein fadeIn() oder fadeOut() ausgeführt. Wenn nicht (IE), wird stattdessen ein show() oder hide() ausgeführt.
	var tglFade = function(inOut) {
		if (jQuery.support.opacity == true) {
			(inOut === 'in') ? $(tglFrm).fadeIn(375) : $(tglFrm).fadeOut(375);
		}
		else {
			(inOut === 'in') ? $(tglFrm).show() : $(tglFrm).hide();
		}
	};
	
  //Formular-Reset, wenn etwas in das Formular eingegeben wurde und das Formular
  //geschlossen oder die ganze Seite neu geladen wird, ohne dass auf den
  //Submit-Button geklickt wurde.
  var clearForm = function() {
    if (frm.data('initialForm') != frm.serialize()) {
      $(frm)[0].reset();
      $(frmInput).each(function() {
        if ($(this).hasClass('missing')) {
         $(this).removeClass('missing');
         $(this).css({backgroundColor:''});
        }
      });
      if ($(errornotice).is(':visible')){
			 $(errornotice).hide();
	    }
    }
  };
   
  $(tglFrm).click(function(){
    if ($(frmTray).is(':hidden')){
		  //Prüfe, ob es das Element #slideshow gibt (mit anderen Worten: prüfe, ob wir uns
		  //auf der Startseite befinden, denn nur dort gibt's eine slideshow).
		  if ($(slideshow).length > 0){
			 $(slideshow).crossSlideFreeze();
			 //$('#slideshow img').stop(); //stop geht auch im ie, besser?
		  }
		  tglFade('out');
		  $('#content').children().fadeOut(750, function() {
			 $(tglFrm).removeClass('open').addClass('close');
			 $(frmTray).slideDown(750);	 
		  });
		  setTimeout(function(){
			 tglFade('in');
		  },1000);
    }
    else {
		  clearForm();
		  tglFade('out');
		  $(frmTray).slideUp(750, function() {
		    //Die folgende setTimeout-Funktion mit dem im Grunde sinnlosen
			  //Verzögerungsfaktor "10" ist nur erforderlich, weil der FF an dieser Stelle
			  //sonst mit einem Flash of unstyled content (FOUC) reagieren würde.
        setTimeout(function(){ 
		      //Prüfe, ob es das Element #slider gibt (mit anderen Worten: prüfe, ob wir uns
		      //auf der Beispielseite befinden, denn nur dort gibt's das Element).
		      if ($('#slider').length > 0){
		        $('ul.sliderNavigation a:first').click(); //FF Hack, noch nicht zufriedenstellend
		      }
		      //der ":not" Selector verhindert im Folgenden, dass auf der Beispielseite divs der Klasse 
		      //"jqmWindow" auch eingeblendetwerden und sich sichtbar über die Vorschaubilder legen.
		      $('#content').children(':not(.jqmWindow)').fadeIn(750);
		      $(tglFrm).removeClass('close').addClass('open');
		      tglFade('in');
			  },10);
		  });
		  if ($(slideshow).length > 0){
			 var imgs = $('#slideshow img');
			 $(slideshow).crossSlide({ sleep: 6, fade: 3 }, imgs);
			 //Der IE versteht "Restart()" hier nicht, deshalb dieser umständliche Neustart
		  }
    }
    return false; /* Bewirkt, dass der Link mit der id "toggleForm", die auf eine Seite
    namens "kontakt.html" verweist, nicht ausgeführt wird. Ist Javascript deaktiviert,
    werden die Links ausgeführt und man gelangt auf eine gesonderte Kontaktseite.*/
  });  

	$(frm).submit(function(){
		//Pflichtfelder validieren
		for (i=0;i<required.length;i++) {
			var input = $('#'+required[i]);
			if ((input.val() == '') || (input.val() == emptyerror)) {
				input.addClass('missing');
				$(input).val(emptyerror); 
				$(input).animate({backgroundColor: '#ff9933'}, 250); 
				errornotice.fadeIn(750);
			}
			else {
				input.removeClass('missing');
			}
		}
		//E-Mailadresse validieren
		if (!/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(email.val())) {
			$(email).addClass('missing');
			$(email).animate({backgroundColor: '#ff9933'}, 250);
			$(email).val(emailerror);
			if ($(errornotice).is(':hidden')){
			 $(errornotice).fadeIn(750);
	    }
		}
		//Wenn ein oder mehrere Inputs die Klasse "missing" haben, wird das Formular nicht
		//an das verarbeitende Skript übergeben.
		if ($(frmInput).hasClass('missing')) {
			return false;
		} 
		else {
			errornotice.hide();
      //Ajax request senden und die zurückgesendeten Daten der div #feedback hinzufügen.
      $.post('php/mail.php', $(frm).serialize(), function(data){
        $(feedback).append(data);
      });
      //Form aus- und Meldung einblenden
      $(frm).fadeOut(750, function() {
		    tglFade('out');
        $(feedback).fadeIn(750);
      }); 
      //5000 warten, erst die Meldung ausblenden und dann die Formularebene
      //hochfahren und alles wieder in den Ausgangszustand versetzen.
      setTimeout(function(){
        $(feedback).fadeOut(250, function() {
          $(frmTray).slideUp(750, function() {
            $(feedback).empty();
            $(frm)[0].reset();
            $(frm).show(10, function() {
              if ($('#slider').length > 0){
		            $('ul.sliderNavigation a:first').click(); //FF Hack, noch nicht zufriedenstellend
		          }
              $('#content').children(':not(.jqmWindow)').fadeIn(500, function() {
                $(tglFrm).removeClass('close').addClass('open');
			          tglFade('in');
              });
            }); 
          });
        });
        if ($(slideshow).length > 0){
          $(slideshow).crossSlideRestart();
        }
      },5000);
      //Auf der aktuellen Seite bleiben
      return false;
		}
	});
	
	//Leeren der Formularfelder, wenn auf sie geklickt wird
	$(frmInput).focus(function(){		
	   if ($(this).hasClass('missing') ) {
			$(this).val('');
			$(this).removeClass('missing');
			$(this).animate({backgroundColor: '#6294C9'}, 250 );
	   }
	});
	
	//Beim erneuten Laden der Seite (F5) wird die Funktion "clearForm()" aufgerufen
	$(window).bind('beforeunload', clearForm);
});	
