/**
 * @author Adam Laszlo
 * @since 01.08.11
 */

var anim = new Animation(Animation.EASING_EFFECT_SWING,
		Animation.LOCATION_NONE, 1000);

var animFaster = new Animation(Animation.EASING_EFFECT_SWING,
		Animation.LOCATION_NONE, 500);

var naviHeight = 31;
var naviHeightExtended = 173;

var paddingSlidedUp = 5;
var paddingSlidedDown = 9;

/**
 * true, wenn die Navigation zwischen Galerie- und Content Ansicht wechselt.
 */
var isNaviMoving = false;
var naviWidth = 940;

var rootTitleName = "Kronenschlösschen";

var naviHome;

var wLoc = window.location;

var id_menu;
var id_mainNaviWrapper;

var id_mainNavi;
var id_manuLanguageInner;
var id_manuLanguageInnerImg;

var activeElement;
var activeSuperElement;

/**
 * Lädt die Navigation. Alle Style Attribute werden gesetzt. Ein Listener für die Navi-Elemente wird gesetzt.
 * @since 28.08.2011 Lutz | Umstellung auf Preloader.
 * @since 10.10.2011 Lutz | Flaggen in png geändert.
 */
function loadNavigation() {
	debug("navigation.js->loadNavigation()");
	id_menu = $("#menu");
	id_mainNaviWrapper = $("#mainNaviWrapper");

	id_mainNavi = $("#mainNavi");
	id_manuLanguageInner = $("#menuLanguageInner");
	id_manuLanguageInnerImg = id_manuLanguageInner.find("img");
	
	naviHome = $(".naviSuper:first span:first");
	
	Preloader.preloadImage("resources/images/system/Flag_menu_DE.png");
	Preloader.preloadImage("resources/images/system/Flag_menu_DE_hover.png");
	Preloader.preloadImage("resources/images/system/Flag_menu_EN.png");
	Preloader.preloadImage("resources/images/system/Flag_menu_EN_hover.png");
	
	Preloader.preloadImage("resources/images/system/JRE_inactive.gif");
	Preloader.preloadImage("resources/images/system/JRE_active.gif");
	
	var hash = wLoc.hash;
	if (hash.startsWith("#!/")){
		loadSiteByHash(hash);
	}
	
	id_mainNaviWrapper.css({
		height : naviHeightExtended
	});
	id_mainNavi.css({
		width : naviWidth
	});
	var bWidth = getBrowserOuterWidth();
	if(bWidth < minWidth) bWidth = minWidth;
	id_menu.css({
		minWidth : minWidth,
		width : bWidth,
		bottom : -1*getBrowserHeight()
	});
	id_mainNaviWrapper.mouseenter(function() {
		naviExtend();
	}).mouseleave(function() {
		naviCollapse();
	});
	$("#naviCols .naviCol ul > li > span").click(function() {
		manualChange = true;
		if (!contentShowing) {
			naviSlideUp($(this));
		} else {
			naviCollapse();
			loadSite($(this));
		}
	});
	
	id_manuLanguageInner.mouseenter(function(){
		id_manuLanguageInnerImg.attr("src", "resources/images/system/Flag_menu_"+languageOther+"_hover.png");
	}).mouseleave(function(){
		id_manuLanguageInnerImg.attr("src", "resources/images/system/Flag_menu_"+languageOther+".png");
	}).click(function(){
		wLoc.href = languageOther+wLoc.hash;
	});
	setGalleryCenterSize(); // @since 05.11.2011 Lutz Hoffarth | Ist notwendig, um beim ersten Laden die Galeriegröße festzulegen. Sonst wird diese nicht angezeigt.
};

/**
 * Klappt die Navigation auf.
 * @author Adam Laszlo
 * @since 29.08.11
 */
function naviExtend(){
	if (contentShowing && !subMenuShowing && !isNaviMoving) {
		subMenuShowing = true;
		id_menu.stop().animate({
			height : naviHeightExtended + "px"
		}, animFaster.getSpeed(), animFaster.getEasing());
	}
}

/**
 * Klappt die Navigation auf.
 * @author Adam Laszlo
 * @since 29.08.11
 */
function naviCollapse(){
	if (contentShowing && subMenuShowing && !isNaviMoving) {
		subMenuShowing = false;
		id_menu.stop().animate({
			height : naviHeight + "px"
		}, animFaster.getSpeed(), animFaster.getEasing());
	}
}

/**
 * Lädt eine Seite anhand des angeklickten <code>&lt;span&gt;</code> - Elements
 * @param naviElement
 */
function loadSite(naviElement){
	var naviParent = naviElement.parent();
	// substring(13), da "contentLinkID" 13 Zeichen hat...
	var naviIDLong = naviParent.attr('id');
	if(naviIDLong == undefined) return;
	var naviID = naviIDLong.substring(13);
	var naviHash = naviID+"/";
	var naviSuperID = naviID;
	var title = rootTitleName;
//	var newActiveSuperElement;
	if (naviParent.hasClass("naviSuper")){
		title += " | "+naviParent.text();
		naviHash += naviParent.text() + "/";
		newActiveSuperElement = naviParent.find("span");
	} else if (naviParent.hasClass("naviSub")){
		var naviParentSuper = naviParent.parent().find(".naviSuper");
		title += " | "+naviParentSuper.text()+" | "+naviParent.text();
		naviHash += naviParentSuper.text() + "/";
		naviHash += naviParent.text() + "/";
		naviSuperID = naviParentSuper.attr('id').substring(13);
		newActiveSuperElement = naviParentSuper.find("span");
	};
	
	document.title = title;
	
	loadContent(naviSuperID, naviID, naviHash);
}

/**
 * @param linkId
 * @param naviHash
 * @since 02.10.2011 Lutz Hoffarth | Erstellt
 */
function loadContent(linkSuperId, linkId, naviHash, params){
	if (params == undefined || params == null) params = {};
//	debug("loadContent("+linkId+", "+naviHash+") language:"+language);
	id_contentWrapper.show();
	id_content.empty().html("<div style='width: 100%; text-align:center;'><img src='resources/images/system/preloader_content.gif'/ style='margin-top: 100px;'><div>").show();
	id_content.load("Content.php?language="+language, {
		contentNR : linkId,
		params: params
	}, function(response){
		$(this).hide().fadeIn(500);
		wLoc.hash = "!/"+naviHash;
		footerPosition();
	});
	resizeGallery(getRandomTitleImage(linkSuperId));
	activateMenuItem($("#contentLinkID"+linkId).find("span"));
}

// Resize Event
$(window).resize(function(){
	debug("navigation.js->$(window).resize(function()");
	id_menu.css({
		width : getBrowserOuterWidth(),
		bottom : -1*getBrowserHeight()
	});
});

function loadSiteByHash(hash){
	if (hash.startsWith("#!/")){
		var element = $("#contentLinkID"+hash.split("/")[1]).find("span");
		if (element != null && element != undefined && element.length > 0){
			if (!contentShowing && !subMenuShowing && !isNaviMoving){
				naviSlideUp(element);
			} else {
				displayContent();
				loadSite(element);
			}
		}
	} else {
		naviSlideDown();
	}
}

/**
 * Markiert den ausgewählten Menü Eintrag als aktiv.
 * @author Adam Laszlo
 * @since 29.08.11
 * @param activeMenuItem
 */
function activateMenuItem(activeMenuItem){
	if (activeElement != undefined){
		activeElement.removeClass("menuActive");
	}
	if (activeSuperElement != undefined){
		activeSuperElement.removeClass("menuActive");
	}
	var naviParent = activeMenuItem.parent();
	if (naviParent.hasClass("naviSuper")){
		newActiveSuperElement = naviParent.find("span");
	} else if (naviParent.hasClass("naviSub")){
		var naviParentSuper = naviParent.parent().find(".naviSuper");
		newActiveSuperElement = naviParentSuper.find("span");
	}
	activeElement = activeMenuItem;
	activeSuperElement = newActiveSuperElement;
	activeMenuItem.addClass("menuActive");
	activeSuperElement.addClass("menuActive");
}

function getRandomTitleImage(naviSuperID){
	if (galleryTitle[naviSuperID] == undefined) return null;
	var max = galleryTitle[naviSuperID].length;
	var index = Math.round(Math.random()*(max-1));
	return galleryTitle[naviSuperID][index];
}

/**
 * Navigiert zur Home Seite, also Hauptmenu Eintrag "HOTEL"
 * @since 14.09.2011 Lutz Hoffarth | Bedingungsloser HomeLink
 * @param inJedemFall
 */
function naviToHome(inJedemFall){
	if (!contentShowing || inJedemFall){
		naviSlideUp(naviHome);
	}
//	loadSite(naviHome);
}

/**
 * Schiebt Navi nach oben
 */
function naviSlideUp(naviElement) {
	debug("navigation.js->naviSlideUp("+naviElement+")");
	isNaviMoving = true;
	contentShowing = true;
	subMenuShowing = false;
	var top = galleryId_galleryCenterView.height();
	id_menu.css({
		top : top
	});
	id_menu.stop().animate({
		top : titleImageHeight + "px",
		height : naviHeight + "px"
	}, anim.getSpeed(), anim.getEasing(), function(){
		isNaviMoving = false;
		if (naviElement !== undefined){
			loadSite(naviElement);
		}
	});
//	activateMenuItem(naviElement);
//	resizeGallery(getRandomTitleImage(naviSuperID));
	id_mainNavi.stop().animate({
		paddingTop : paddingSlidedUp+"px"
	}, anim.getSpeed(), anim.getEasing());
	resizeGallery(null, anim); // @since 04.08.2011 Lutz
}

/**
 * Schiebt Navi nach unten
 */
function naviSlideDown() {
	debug("navigation.js->naviSlideDown()");
	// erst Text ausblenden, dann Navi nach unten schieben
	contentShowing = false;
	id_contentWrapper.hide();
	id_content.fadeOut(100, function(){
//		$(this).text("");
		id_content.text("");
		
		isNaviMoving = true;
//		var bottom = (titleImageHeight + naviHeight)*-1;
		var bottom = (galleryId_galleryCenterView.height() + naviHeight)*-1;
		debug(bottom);
//		var bottom = getBrowserHeight() - id_menu.position().top - id_menu.height();
		id_menu.css({
			top : '',
			bottom : bottom
		});
		id_menu.stop().animate({
			bottom : -1*getBrowserHeight(),
			height : naviHeightExtended + "px"
		}, anim.getSpeed(), anim.getEasing(), function(){
			isNaviMoving = false;
		});
		id_mainNavi.stop().animate({
			paddingTop : paddingSlidedDown+"px"
		}, anim.getSpeed(), anim.getEasing());
		
		resizeGallery(null, anim);
		wLoc.hash = "";
	});
	
	if(activeElement != undefined) activeElement.removeClass("menuActive");
	if(activeSuperElement != undefined) activeSuperElement.removeClass("menuActive");
	activeElement = undefined;
	activeSuperElement = undefined;
}

/**
 * Setzt das CSS, sodass der Content angezeigt werden kann.
 * Wird benutzt beim Reload der Seite.
 */
function displayContent(){
	$("#menu").css({
		top : titleImageHeight + "px",
		height : naviHeight + "px"
	}, anim.getSpeed(), anim.getEasing(), function(){
		isNaviMoving = false;
		
	});
	$("#mainNavi").css({
		paddingTop : paddingSlidedUp+"px"
	}, anim.getSpeed(), anim.getEasing());
	contentShowing = true;
	subMenuShowing = false;
}


