/* ------------------------ CONSTANTES ------------------------ */

// Par défaut le menu n'est pas affiché
var bMenuVisible = false;

// Vitesse d'affichage d'une box
var speedshowBox = 750;

// Vitesse de disparition d'une box
var speedHideBox = 250;

// Effet d'arrivée d'une box
var effectshowBox = "easeOutBounce";

// Effet de départ d'une box
var effectHideBox = "easeInExpo";

// Position de la souris en cours
var lastClickX = "";
var lastClickY = "";


/* ------------------------ INIT ------------------------ */
$(document).ready(function(){
	// On cache le menu
	$(".pieMenu").css({
		'display':'none',
		'cursor':'pointer'
	})
	
	// On affiche le menu au click si l'élément cliqué n'a pas de onclick ou de href
	$("*, document.body").click(function(e){
					
		// On recupere les coordonées
		lastClickX = e.clientX+$(document).scrollLeft();
		lastClickY = e.clientY+$(document).scrollTop();
		
		// On arrête la propagation
		e.stopPropagation();
/*alert(this.tagName);
alert(this.id);
alert(this.className);*/
		if (this.tagName != "A" 
			&& $(this).parents("A").length == 0
			&& this.tagName != "INPUT" 
			&& $(this).parents("INPUT").length == 0
			&& this.tagName != "TEXTAREA" 
			&& $(this).parents("TEXTAREA").length == 0
			&& ($(this).attr("onclick") == "" || $(this).attr("onclick") == undefined)
			&& !isInPieMenu(this)
			&& this.id != "more_and_less_links"
			&& e.target.id != "more_comments_link"
			&& e.target.id != "less_comments_link"
			&& !$(this).hasClass(".countComment")
			&& !$(this).parents(".boxPieMenu").length > 0
			&& !$(e.target).hasClass(".boxPieMenu")
			&& !$(e.target).hasClass(".titreResultat")
			&& !$(e.target).hasClass(".titleBlocSearchResult")) {

			// On place le menu à cet endroit
			switchMenu(lastClickX, lastClickY, 90);
			
			// On empêche l'événement par défaut
			e.preventDefault();
			
			$(this).trigger("closeAllBoxes");
		}
		// Si on a cliquer sur un élément du menu, on le cache
		else if(isInPieMenu(this))
		{
			pageTracker._trackEvent("pieMenu", $(this).parent().parent().get(0).id, "Click sur "+$(this).parent().parent().get(0).id);

			hideMenu();
		}
		else if($(this).parent().hasClass(".close") || $(this).hasClass(".close")){
			hideBox($(this).parents(".boxPieMenu"));
		}
	});
	
	// On défini les événements de la box de recherche
	setSearchBoxEvents();
	
	// On défini les événements de la box d'inscript à la newsletter
	setNewsletterBoxEvents();
	
	// Transparence des PNG sous IE6
	$(document).pngFix();
});

/* ------------------------ EVENEMENTS ------------------------ */

$(document).bind("pieMenuShown", function(){
	// On stat l'ouverture
	pageTracker._trackEvent("pieMenu", "show");
	
	// On le défini comme visible
	bMenuVisible = true;
});

$(document).bind("pieMenuHidden", function(){
	// On stat l'ouverture
	pageTracker._trackEvent("pieMenu", "hide");

	// On le défini comme caché
	bMenuVisible = false;
});

$(document).bind("closeAllBoxes", function(){
	$(".boxPieMenu").each(function(){
		hideBox($(this));
	});
	
	// On cache l'éventuel message de la box de newsletter
	showSendNewEmailForm();
});

$(document).bind("boxShowingAnimationEnded", function(){
	
});

$(document).bind("getBoxRSS", function(){

	// On masque le menu
	hideMenu();
	
	// On affiche la box du RSS
	showBox($("#boxRSS"));
});

$(document).bind("getBoxSearch", function(){

	// On masque le menu
	hideMenu();
	
	// On affiche la box du RSS
	showBox($("#boxSearch"));
	
	// On met le focus sur l'input
	$(document).one("boxShowingAnimationEnded", function(){
		$("#boxesSearchTxt").focus();
	});
});

$(document).bind("startSearch", function(){
	// On recupère la recherche
	curSearch = $("#boxesSearchTxt").val();
	
	// On recupère l'url de la recherche
	curURLSearch = $("#boxesSearchURL").val();
	
	// On va a la recherche
	document.location.href = curURLSearch+curSearch;
});

$(document).bind("getBoxNewsletter", function(){

	// On masque le menu
	hideMenu();
	
	// On affiche la box du RSS
	showBox($("#boxNewsletter"));

	// On met le focus sur l'input sur la fin de l'affichage
	$(document).one("boxShowingAnimationEnded", function(){
		$("#boxesNewsletterTxt").focus();		
	});
});

$(document).bind("startSendNewEmail", function(){
	// On recupère l'email
	curEmail = $("#boxesNewsletterTxt").val();
	
	// On recupère l'url d'ajout à la newsletter
	curURLNewsletter = $("#boxesNewsletterURL").val();

	// Donnée à envoyer
	dataToSend = {'email':curEmail};

	// On envoi le mail
	$.ajax({
		url: curURLNewsletter,
		data: dataToSend,
		type: 'GET',
		success: function(data){
			// On affiche le retour à l'utilisateur
			showSendNewEmailMessage(data);

			$(document).trigger("endSendNewEmail");
		}
	});
});

/* ------------------------ FONCTIONS ------------------------ */

function sendEvent(event){
	$(document).trigger(event);
}

function switchMenu(centerX, centerY)
{
	// Si le menu est visible, on le cache
	if(bMenuVisible)
		hideMenu();
	// Sinon on l'affiche
	else
		showMenu(centerX, centerY);
}

function showMenu(centerX, centerY)
{
	menuWidth = 350;
	menuHeight = 195;

	// On place le centre du piemenu sur la souris
	newPosLeft = centerX-menuWidth/2;
	newPosTop = centerY-menuHeight/2;
	
	// On affiche le menu
	$(".pieMenu").css({
		'display':'block',
		'left':newPosLeft+'px',
		'top':newPosTop+'px'
	})
	
	// On recupere les éléments du menu
	aMenuElement = $(".pieMenu").children();

	// On determine les events de chacun des éléments
	aMenuElement.each(function(i){
		// Element en cours
		curElement = aMenuElement[i];
		
		// On met le rollover sur l'élément
		$(curElement).mouseover(function(e){

			$(this).css({
				'color':'#A99'
			})
		});
		
		// On met le rollout sur l'élément
		$(curElement).mouseout(function(e){
			$(this).css({
				'color':'#000'
			})
		});
		
		// On met le click
		$(curElement).click(function(e){
//			alert($(this).children().html());
			$(this).children().trigger('click');
		});
	});
	
	// On lance l'événement
	$(".pieMenu").trigger("pieMenuShown");
}

function hideMenu()
{
	// On cache le menu
	$(".pieMenu").css({
		'display':'none'
	})

	// On lance l'événement
	$(".pieMenu").trigger("pieMenuHidden");
}

function setDivColor(color)
{
	$("#divColor").css({'background-color':color});
}

// Cette fonction renvoi vrai si l'élément passé est dans le piemenu
function isInPieMenu(objectDOM)
{
	bInPieMenu = false;

	while($(objectDOM).parent().get(0).tagName != undefined)
	{
		objectDOM = $(objectDOM).parent();

		if(objectDOM.attr("class") == "pieMenu")
			bInPieMenu = true;
	}
	
	return bInPieMenu;
}

function showBox(objectBox){

	// On affiche la box
	objectBox.css({'display':'block'});

	// Position de départ
	startPosLeft = lastClickX-75;
	startPosTop = -objectBox.outerHeight();

	objectBox.css({
		top:startPosTop,
		left:startPosLeft
	});

	// On recupere les dimensions de la box
	boxW = objectBox.outerWidth();
	boxH = objectBox.outerHeight();

	// Position visible
	visiblePosTop = lastClickY-60;
	visiblePosLeft = lastClickX-75;
	
	// Position des 2 coins opposés de la box
		// Coin haut gauche
		cornerBoxPosTopLeftX = visiblePosLeft;
		cornerBoxPosTopLeftY = visiblePosTop;

		// Coin bas droit
		cornerBoxPosBottomRightX = visiblePosLeft+boxW;
		cornerBoxPosBottomRightY = visiblePosTop+boxH;		

	// Coins opposés du viewport
		// Coin haut gauche
		cornerWindowPosTopLeftX = $(document).scrollLeft();
		cornerWindowPosTopLeftY = $(document).scrollTop();

		// Coin bas droit
		cornerWindowPosBottomRightX = $(document).scrollLeft() + $(window).width();
		cornerWindowPosBottomRightY = $(document).scrollTop() + $(window).height();

	// Si la position visible met l'un des 4 coins en dehors de la fenêtre on la corrige
		// Coté droit
		if(cornerBoxPosTopLeftX < cornerWindowPosTopLeftX)
			visiblePosLeft = cornerWindowPosTopLeftX;
		
		// Coté haut
		if(cornerBoxPosTopLeftY < cornerWindowPosTopLeftY)
			visiblePosTop = cornerWindowPosTopLeftY;
			
		// Coté gauche
		if(cornerBoxPosBottomRightX > cornerWindowPosBottomRightX)
			visiblePosLeft = cornerWindowPosBottomRightX-boxW;
		
		// Coté bas
		if(cornerBoxPosBottomRightY > cornerWindowPosBottomRightY)
			visiblePosTop = cornerWindowPosBottomRightY-boxH;

	objectBox.animate({
		top:visiblePosTop,
		left:visiblePosLeft
	}, speedshowBox, effectshowBox, function(){
		$(objectBox).trigger("boxShowingAnimationEnded");
	});
}

function hideBox(objectBox)
{
	// On recupere les dimensions de la box
	boxW = objectBox.outerWidth();
	boxH = objectBox.outerHeight();

	// Position caché
	hiddenPosLeft = $(document).scrollLeft() + $(window).width()+boxW;

	objectBox.animate({
		left:hiddenPosLeft
	}, speedHideBox, effectHideBox, function(){
		$(this).css({'display':'none'});
	});
}

function setSearchBoxEvents(){
	$("#boxSearch").keypress(function(e){
		if(e.which == 13){
			$(this).trigger("startSearch");
		}
	})
	
	$("#boxesSearchSubmit").click(function(){
		$(this).trigger("startSearch");		
	});
}

function setNewsletterBoxEvents(){
	$("#boxNewsletter").keypress(function(e){
		if(e.which == 13){
			$(this).trigger("startSendNewEmail");
		}
	});
	
	$("#boxesNewsletterSubmit").click(function(){
		$(this).trigger("startSendNewEmail");		
	});
}

function showSendNewEmailMessage(sMsg){
	$("#boxesNewsletterTitreInput").hide();
	$("#boxesNewsletterTxt").hide();
	$("#boxesNewsletterSubmit").hide();
			
	$("#boxesNewsletterMsg").html(sMsg);
	$("#boxesNewsletterMsg").show();
}

function showSendNewEmailForm(){
	$("#boxesNewsletterMsg").hide();

	$("#boxesNewsletterTitreInput").show();
	$("#boxesNewsletterTxt").val("");
	$("#boxesNewsletterTxt").show();
	$("#boxesNewsletterSubmit").show();	
}