
$(document).ready(function () {
	$("span.menuSpan").mouseenter(function () {
		menuHover(this);
	});
	$("div#divMenuBar").mouseleave(function () {
		// Hide the menu hover when the cursor leaves the menu bar
		hideMenuHover();
	});

	$("span.menuSpan").click(function () {
		selectObjet(this);
	});

	$("div#divHoverCursor").click(function () {
		selectCurrentHover();
	});

	$("tr.subMenuRow").click(function () {
		selectComposant(this);
	});

	$("tr.subSubMenuRow").click(function (e) {
		selectOption(this);
	});

	selectInitialMenu();
});

// Move the hover indicator to this span
function menuHover(span) {
	// Remove any previous hover
	$("span.hovered").removeClass("hossvered");
	// And mark this one as hovered.  Useful for if they click on the hover cursor.
	$(span).addClass("hovered");
	var hoverCursor = $("div#divHoverCursor");
	// Get the x-position of the centre of this span
	var xTarget = getMenuCenterPos(span);
	hoverCursor.stop(true);
	if (hoverCursor.css("display") == "none") {
		//hoverCursor.css("left", $(span).offset().top + "px");
		// Just move the cursor to here.
		hoverCursor.css("left", xTarget + "px");
		hoverCursor.show();
	} else {
		// Animate the cursor to here
		hoverCursor.animate({ left: xTarget + 'px' }, 200, 'linear');
	}
}

function hideMenuHover() {
	// Remove any current hover
	$("span.hovered").removeClass("hovered");
	var hoverCursor = $("div#divHoverCursor");
	hoverCursor.stop(true);
	setTimeout('$("div#divHoverCursor").hide();', 200);
}

// User clicked on the hover cursor.  Select the currently hovered menu.
function selectCurrentHover() {
	var currentHoverSpan = $("span.hovered");
	if (currentHoverSpan.length > 0) {
		selectObjet(currentHoverSpan.get(0));
	}
}

function selectInitialMenu() {
	var selectedMenu = $("span.menuSpan.selected");
	if (selectedMenu != null && selectedMenu.length > 0) {
		var selectedCursor = $("div#divSelectedCursor");
		selectedCursor.css("left", $(selectedMenu).offset().top + "px");
		selectedCursor.show();
		var xTarget = getMenuCenterPos(selectedMenu);
		selectedCursor.css("left", xTarget + "px");
	}
}

function getMenuCenterPos(span){
//	return $(span).position().left + ($(span).width() / 2);
	return $(span).offset().left + ($(span).width() / 2) - 43;
}

function selectObjet(span) {
	$("span.menuSpan.selected").removeClass("selected");
	// Show that the item has been selected, while the page reloads.
	$(span).addClass("selected");
	selectInitialMenu();
	// Select the first option for this objet (in the first composant)
	navigateMenu($(span).attr("defaultUrl"), $(span).attr("idObjet"), $(span).attr("defaultComposant"), $(span).attr("defaultOption"), $(span).attr("defaultSecure").toUpperCase()=="TRUE");
}

function selectComposant(row) {
	// unselect the currently selected composant, then select this one
	if (!$(row).hasClass("selected")) {
		$("tr.subMenuRow.selected").removeClass("selected");
		showHideOptions(row);
		$(row).addClass("selected");
		// And load the url of the first option for this component
		selectOption($(row).next("tr.subSubMenuRow"));
	}
}

// Hide all currently visible options
function showHideOptions(row) {
	$("tr.subSubMenuRow").hide();
	var objet = $(row).attr("idObjet");
	var composant = $(row).attr("idComposant");
	$("tr.subSubMenuRow[idObjet='" + objet + "'][idComposant='" + composant + "']").show();
}

function selectOption(row) {
	// Show that the item has been selected, while the page reloads.
	$("tr.subSubMenuRow.selected").removeClass("selected");
	$(row).addClass("selected");
	navigateMenu($(row).attr("url"), $(row).attr("idObjet"), $(row).attr("idComposant"), $(row).attr("idOption"), $(row).attr("secure")!=undefined && $(row).attr("secure").toUpperCase()=="TRUE");
}

// Navigate to the specified url, from the specified menu context.
function navigateMenu(url, objet, composant, option, secure, forceAbsoluteUrl) {
	var fullUrl = url;
	if (url.indexOf('?') > -1) {
		fullUrl += "&";
	} else {
		fullUrl += "?";
	}
	fullUrl += "menuObjet=" + objet + "&menuComposant=" + composant + "&menuOption=" + option;

	// If objet starts with i or a, then no need to check auth.
	if(objet.length>0 && (objet.charAt(0)=='i' || objet.charAt(0)=='a')){
		// No login needed.  Can navigate to the menu
		document.location = fullUrl;
	}else{
		// Check authorisation
		// Must POST because otherwise IE 7 caches the response.
	$.ajax({
		type: 'POST',
		url: '/services/rest/CheckAuth.ashx',
		dataType: "json",
		error: function (obj, status, error) {
			alert("Impossible de communiquer avec le serveur.  Vous avez peut-être perdu votre connexion internet");
		},
		success: function (jsonData) {
			if (jsonData == null) {
				alert("Impossible de communiquer avec le serveur.  Vous avez peut-être perdu votre connexion internet");
			} else {
				var needConnection = false;
				var needSecureKey = false;
				if (!jsonData.connected) {
					needConnection = true;
				}
				if (secure != undefined && secure && !jsonData.secureMode) {
					needSecureKey = true;
				}

				if (needConnection || needSecureKey) {
					// Display the login screen, asking for connection and/or secure key.
					showAuthPopup(fullUrl, needConnection, needSecureKey, needConnection);
				} else {
					// Nothing extra needed.  Can navigate to the menu
					document.location = fullUrl;
				}
			}
		}
	});
	}	
}

