$(document).ready(function() {

	/* Headermenü-Hover ... */
	setHeaderNaviHoverContainerPosition();
	initHeaderNaviEntryMouseOver();
	initHeaderCountryNaviEntryMouseOver();
	
	/* Suchfeld ... */
	initSearchField();
	initSearchFieldSearch();
	
	initReisekalenderRowMouseOver();
	
	initPraesiPLZFilter();
	
	initNewsShowFunction();

	setTimeout('initPreviewLoad();', 2000);
	
	//$.prettyLoader();
	
	initHoldZipcode();
	
	initDoGuestbookComment();
	
	initGuestbookCommentLink();
});



$(window).load(function() {
	
});



/**
 * Initialisiert das Suchfeld in der Navigation mit OnFocus-Funktionalität.
 */
function initSearchField() {
	var $inp = $('input[name=search]');
	var infoText = $('input[name=default]').val();	// <-- wird beim Laden der Seite im Suchfeld angezeigt
	$inp.val(infoText);
	
	$inp.bind('focus', function() {
		if($(this).val() == infoText) {
			$(this).val('');
			
			$(this).unbind('focusout').bind('focusout', function() {
				if(jQuery.trim($(this).val()).length == 0)
					$(this).val(infoText);
			});
		}
	});
}

/**
 * Initialisiert die Suche an sich.
 */
function initSearchFieldSearch() {
	var $sInp = $('input[name=search]');
	var $form = $sInp.parents('form');
	
	$sInp.bind('keyup', function(event) {
		if(event.keyCode == '13') {
			var sVal = $(this).val();
			doSearch(sVal, $form);
		}
	});
	
	$('.searchbtn').bind('click', function() {
		var sVal = $sInp.val();
		doSearch(sVal, $form);
	});
	
	$form.bind('submit', function (){
		//console.log('submit canceled');
		return false;
	});
}

/**
 * Kümmert sich um das Abschicken des Formulars.<br />
 * Dabei wird geprüft, ob ein Suchbegriff eingegeben wurde und ob sich dieser vom Default-Text unterscheidet.
 */
function doSearch(needle, $form) {
	if(jQuery.trim(needle).length > 0 && $form != undefined) {
		var infoText = $('input[name=default]').val();
		
		if(needle.toLowerCase() != infoText.toLowerCase()) {
			//console.log('Suche nach: ' + needle);
			
			$form.unbind('submit');
			$form.submit();
		}
	}
}

/**
 * Positioniert die Kontainer, die beim MouseOver über einen der drei Navi-Einträge (Bus-, Schiff-, Flugreise) eingeblendet werden.<br />
 * Jeder Navi-Eintrag hat seinen eigenen Kontainer, der die Länder enthält, die bei diesem Reisetyp Reiseziele enthalten.
 */
function setHeaderNaviHoverContainerPosition() {
	var $fstEntry = $('#header').find('a.entry').first();
	var left = $fstEntry.position().left;
	var top = $fstEntry.position().top + $fstEntry.height();
	
	$('.headernavihovercontainer').css({
		'top': top + "px",
		'left': left + "px"
	});
}

/**
 * Initialisiert den Mouse-Over über die Navi-Einträge (Bus-, Schiff-, Flugreise), so dass die in <code>setHeaderNaviHoverContainerPosition()</code> positionierten Kontainer eingeblendet werden.
 */
function initHeaderNaviEntryMouseOver() {
	var $entries = $('#header').find('a.entry');
	
	$entries.bind('mouseenter', function () {
		var rel = $(this).attr('rel');
		
		$('.headernavihovercontainer').hide();
		
		$('#'+rel).slideDown('fast');
		$('.headernavjourneylistofland').hide().html('');
	});
	
	/*$('body').bind('click', function(){
		$('.headernavihovercontainer').slideUp();
	});*/
	$('body').mousemove(function(event) {
		var $container = $('.headernavihovercontainer:visible');
		
		if($container.length > 0) {
			var topPlusHeight = $container.position().top + $container.height();
			
			if(event.pageY > topPlusHeight) {
				$container.slideUp();
				
				// Spacer verkleinern und anschließend löschen ...
				var $spacer = $('#content').find('#contentspacer');
				hideSpacer($spacer);
			}
		}
	});
}

 /**
  * Blendet den Spacer im Content-Bereich langsam aus.
  * 
  * @param $spacer Der auszublendende Spacer im Content-Bereich
  * @param duration Geschwindigkeit, Default = 800
  */
function hideSpacer($spacer, duration) {
	if(duration == undefined)
		duration = 800;
	
	$spacer.attr('id', 'NA');
	$spacer.animate({
		'margin-top': '0px'
	}, duration, function() {
		$(this).remove();
	});
}

/**
 * Initialisiert den MouseOver über eines der Länder-Einträge.<br />
 * Per Ajax wird dabei <code>load.header.navi.journeylist.php</code> nachgeladen, das die Reisen zu dem Land listet.
 */
function initHeaderCountryNaviEntryMouseOver() {
	$('.headernavcountryentry').hover(
								function () {
									$('.headernavcountryentry').removeClass('active');
									$(this).addClass('active');
									
									var countryID = $(this).find('.label:first').attr('rel');
									var typeOfJourneyID = $(this).attr('rel');
									var $journeyContainer = $(this).parent().parent().find('.headernavjourneylistofland:first');	// Container für die Liste der Reisen in diesem Land
									
									// Reisen des Landes mit der ID #countryID holen ...
									var resource = LOAD_FOLDER + 'load.header.navi.journeylist.php';
									$.ajax({
										url: resource,
										data: "countryID="+countryID+'&type='+typeOfJourneyID,
										success: function(data){
											
											// geladenen Inhalt setzen
											$journeyContainer.html(data);
											
											// Reiselinks erstellen / setzen
											makeJourneyLinks($journeyContainer);
											
											// MouseOver der Reiselinks initialisieren
											initHeaderJourneyNaviEntryMouseOver();
											
											makeAllJourneyOfThisCountryClickable();

											// geladenen Inhalt anzeigen
											$journeyContainer.fadeIn(300);
										}
									});
								},
								function () {
									
								}
	);
	
	$('.headernavihovercontainer').bind('mouseleave', function () {
									$(this).slideUp();
								});
	
}

/**
 * Initialisiert den MouseOver der Reise-Einträge in der Header-Navigation.<br />
 * Es wird auch der "Alle zeigen"-Eintrag initialisiert.
 */
function initHeaderJourneyNaviEntryMouseOver() {
	$('.headernavjourneylistentry').bind('mouseenter', function () {
		var $isAllLink = $(this).hasClass('allLink');
		var rel = $(this).attr('rel');
		var typeOfJourneyID = $(this).parent().find('input[name=typeofjourney]').val();
		var landOfJourneyID = $(this).parent().find('input[name=currentcountry]').val();
		var $content = $('#content');
		
		$content.fadeOut('fast', function () {
			var marginTop4Spacer = $('.headernavihovercontainer:visible').first().height();
			var spacer = '<div id="contentspacer" style="margin-top: '+marginTop4Spacer+'px"></div>';

			
			// Reise oder alle Reisen holen ...
			var resource = 'NA';
			var dataStr = 'NA';
			if($isAllLink) {
				resource = LOAD_FOLDER + 'load.content.journey.php';
				dataStr = 'type='+typeOfJourneyID+'&countryID='+landOfJourneyID;
			} else {
				resource = LOAD_FOLDER + 'load.content.journey.php';
				dataStr = 'reise='+rel+'';
			}

			$.ajax({
				url: resource,
				data: dataStr,
				success: function(data){
					
					// geladenen Inhalt setzen
					$content.html(spacer + data);
					$content.fadeIn('slow');
					setHeaderNaviHoverContainerPosition();
					
					if($isAllLink) {
						initPreviewLoad();
					}
				}
			});
			
		});
		
	});
}

function makeAllJourneyOfThisCountryClickable() {
	$alllinks = $('.headernavjourneylistentry.allLink');
	$alllinks.unbind('click');
	$alllinks.bind('click', function() {
		$('.headernavihovercontainer:visible').hide();
		
		// Spacer verkleinern und anschließend löschen ...
		var $spacer = $('#content').find('#contentspacer');
		hideSpacer($spacer, 400);
	});
}

/**
 * Erstellt die Links nach dem die Reisen beim MouseOver in der Header-Navigation geladen wurden.
 */
function makeJourneyLinks($journeyLinkContainer) {
	$journeyLinkContainer.find('a').not(':first').each(function() {
		var jID = $(this).attr('rel');
		var href = BACKSTEPS + 'reise/' + jID + '.html';
		
		$(this).attr('href', href);
	});
}

function initReisekalenderRowMouseOver() {
	var $table = $('#reisekalender');
	
	$table.find('tbody tr').hover(function() {
		var $overl = $(this).find('.reisekalenderrowoverlay:first');
		
		var p = $(this).position();
		var left = p.left + $(this).find('td:first').width();
		var top = p.top;
		var height = $(this).height() - 2;
		var width = $(this).width() - $(this).find('td:first').width();
		$overl.css({
			'left': left + 'px',
			'top': top + 'px',
			'height': height + 'px',
			'width': width + 'px'
		})
		
		$overl.fadeTo('slow', 0.9);
	}, function(){
		var $overl = $(this).find('.reisekalenderrowoverlay:first');
		$overl.fadeOut('fast');
	});
}

function initPreviewLoad() {
	$('.homesitejourneyentry').find('img').each(function() {
		var imageUrl = $(this).attr('rel');
		
		$(this).attr('src', imageUrl);
	});
}

function initPraesiPLZFilter() {
	var $box = $('#praesifilter');
	var $inputdefault = $box.find('input[name=inputdefault]');
	var defaultVal = $inputdefault.val();
	var defaultColor = $inputdefault.css('color');
	var $search = $box.find('input[name=praesifilterplz]');
	var $praesi = $('#praesi');
	
	$search.val(defaultVal);
	
	// init focus In/Out ...
	$search.focus(function() {
		if($(this).val() == defaultVal)
			$(this).val('');
		
		$(this).css({
			'color': '#000'
		});
		
		$(this).select();
	}).blur(function () {
		if($(this).val().length == 0)
			$(this).val(defaultVal);
		
		if($(this).val() == defaultVal) {
			$(this).css({
				'color': defaultColor
			});
		}
	});
	
	// init typing ...
	$search.bind('keyup', function(event) {
		var currentVal = $(this).val();
		
		if(event.keyCode == '13') {
			// wenn Enter gedrückt wurde ...
		}
		
		$praesi.find('tbody tr').each(function() {
			if(currentVal.length > 0) {
				var rowHasPlzRelAttr = ($(this).attr('rel') !== undefined && $(this).attr('rel') !== false);
				if(currentVal.length > 2 && rowHasPlzRelAttr) {
					var plz = $(this).attr('rel');
					
					if(plz.length >= currentVal.length) {
						if(plz.substring(0, currentVal.length) == currentVal) {
							$(this).show();
						} else {
							$(this).slideUp('fast');
						}
					}
				}
			} else {
				$praesi.find('tbody tr').show();
			}
		});
	});
}

function initNewsShowFunction() {
	var $table = $('#news');
	var $rows = $table.find('tbody tr').not('.nonews');
	
	$rows.each(function() {
		$(this).bind('click', function() {
			var $curRow = $(this);
			var $curContent = $(this).find('.content');
			var $curNewsGallery = $curContent.find('.newsgallery');
			
			// alle offenen News ausblenden
			$table.find('.contentcol').find('.content').not($curContent).slideUp(300);
			
			$rows.removeClass('active');
			$curRow.addClass('active');
			
			// News anzeigen und Bilder nachladen
			$curContent.slideDown(700, function() { showNewsImages($curNewsGallery) });
			doGalleryLightboxing($curNewsGallery);
		});
	});
}

/**
 * Kümmert sich darum, das zu einer News die Bilder geladen werden.
 * 
 * @param $newsimagecontainer News-Galerie-Kontainer
 */
function showNewsImages($newsimagecontainer) {
	var $entries = $newsimagecontainer.find('.newsgalleryentry');
	var entriesCount = $entries.length;
	//console.log('Lade ' + $entries.length + ' Bilder');
	var relay = 500;
	var relayAdd = 550;

	$entries.each(function(i) {
		if($(this).attr('rel') != 'done') {
			var $img = $(this).find('img:first');
			var url = $img.attr('rel');
			var width = $(this).width();
			
			var timeoutFunction = "replaceImageWithFadeEffect('"+$img.attr('id')+"', '"+url+"', "+width+");";
			setTimeout(timeoutFunction, relay);
			relay += relayAdd;
			
			$(this).attr('rel', 'done');
		}
	});
}

function replaceImageWithFadeEffect(imgID, src, width) {
	$('#'+imgID).fadeOut(400, function() {
		$(this).attr('src', src).attr('width', width).fadeIn(800);
	});
}

function doGalleryLightboxing($newsGallery) {
	var lightboxingDone = $newsGallery.hasClass('lightboxingDone');
	//console.log(lightboxingDone ? "init lightbox for #"+$newsGallery.attr('id')+" completed" : "init lightbox for #"+$newsGallery.attr('id')+" expected");
	
	if(!lightboxingDone) {
		var $lightBoxEntries = $newsGallery.find('a.isLighboxLink');
		var moreThanOne = ($lightBoxEntries.length > 1);
		
		$lightBoxEntries.lightBox({
			fixedNavigation: moreThanOne
		});
		
		$newsGallery.addClass('lightboxingDone');
	}
}

/**
 * Initialisiert die Textfelder mit dem Namen <code>PLZ</code> so, dass die letzt Eingabe immer wieder automatisch eingetragen wird.<br />
 * Die Felder <strong>müssen</strong> den Namen PLZ haben!
 */
function initHoldZipcode() {
	var $inputs = $('input[name=plz]');		//INFO: kein automatisiertes Eintragen auf der Seite für Reisepräsentationen, da hier bei Eingabe gefiltert wird.
	
	$inputs.val(localStorage.getItem("catherinaplz"));
	
	$inputs.bind('blur', function() {
		var curVal = $(this).val();
		
		// nur speichern, wenn es sich um eine Nummer handelt
		if(!isNaN(curVal)) {
			localStorage.setItem("catherinaplz", curVal);
		}
	});
}

function initGuestbookCommentLink() {
	var $commentLinkContainer = $('.guestbookentry').find('.commentlink');
	var $commentFormContainer = $('.guestbookentry').find('.commentformcontainer');
	var $commentLink = $commentLinkContainer.find('a');
	
	$commentLink.each(function() {
		$(this).click(function() {
			$commentFormContainer.slideUp('fast');
			
			$curContainer = $(this).parent();
			$curContainer.parent().next('.msg').find('.commentformcontainer').slideDown('slow');
			
			return false;
		});
	});
}

function initDoGuestbookComment() {
	var $form = $('.commentformcontainer').find('form');
	var actionUrl = BACKSTEPS + "site.gaestebuch.docomment.php";
	
	$form.each(function() {
		$(this).submit(function() {
			var $curForm = $(this);
			var formData = $curForm.serialize();
			
			var $name = $curForm.find('[name="name"]');
			var $msg = $curForm.find('[name="sonstiges"]');
			
			var foundErr = false;

			if(jQuery.trim($name.val()).length < 1) {
				foundErr = true;
				$name.addClass('error');
				$('[for="'+$name.attr('id')+'"]').addClass('error');
			}

			if(jQuery.trim($msg.val()).length < 1) {
				foundErr = true;
				$msg.addClass('error');
				$('[for="'+$msg.attr('id')+'"]').addClass('error');
			}
			
			if(!foundErr) {
				$.ajax({
					type: 'POST',
					url: actionUrl,
					data: formData,
					success: function() {
						$curForm.parent().html('<span class="commentsuccessmsg">Vielen Dank für Ihren Kommentar. Ihr Kommentar wird geprüft und dann freigeschaltet.</span>');
					},
					dataType: 'html'
				});
			}
			
			return false;
		});
	});
	
	
}

