// JavaScript Document



$(document).ready(function()
{
	//On rend le zoom-info draggable sur l'axe Y seulement
	/*$(".conteneur-general-droite .conteneur-zoom-info").draggable(
	{
		axis: "y", 
		containment: ".conteneur-general-droite",
		//Vérif de la position lorsque l'on lache la zone déplaçable
		stop: function()
		{
			if ($(".conteneur-general-droite .conteneur-zoom-info").offset().top < 220)
			{
				$(".conteneur-general-droite .conteneur-zoom-info").css({"top": 220});
			}
		}
	});*/ 
	
	//Génération des datepicker jquery au chargement de la page
	$(function()
	{
		//On récupère les infos du navigateur pour checker si la version est bonne
		get_informations_navigateur();
	
	
		$("input.pour-datepicker").datepicker({dateFormat: 'dd/mm/yy'});
		//Transformation de tous les input qui ont un placeholder en javascript si le navigateur ne support pas le placeholder
		//if (!Modernizr.input.placeholder)
			//alert('yo');
		/*zoneAttente($("body .conteneur-general"));*/
		//afficherUnMessageInformationUtilisateur("Test", "Texte d'aperçu", "info", 500000);
		//afficherUnMessageInformationUtilisateur("Test", "Texte d'aperçu", "erreur", 500000);		
		//afficherUnMessageInformationUtilisateur("Test", "Texte d'aperçu", "", 500000);
	});
	//Click sur un element sur la page qui serait censé avoir un datepicker mais qui n'en a pas (on le lui crée)
	$("input.pour-datepicker:not(.hasDatepicker)").live("click", function()
	{
		$(this).blur();									//On supprime le focus sur le champ
		$(this).datepicker({dateFormat: 'dd/mm/yy'});	//On ajoute le datepicker comme il n'existe pas
		$(this).focus();								//Puis on remet le focus sur le champ, ce qui ouvre maintenant le datepicker
	});
	
	
	$(".conteneur-general-droite").css({'min-height': (($(".conteneur-general-centre").outerHeight() < 600)?600:$(".conteneur-general-centre").outerHeight()) });

	$(".conteneur-mode-affichage a.section_Nav:not(.non-selectionnable)").live('click', function(e)
	{
		$(".conteneur-mode-affichage a.section_Nav").removeClass("selected").addClass("non-selectionnable");
		$(this).addClass("selected");
		chargerContenuPageCentrale();
		if ($(this).attr('href') == '#')	//On empeche l'action si le href n'a pas de cible
			e.preventDefault();
	});

	//Gestion d'un element qui se masquerait si on click ailleurs dans le document
	$("body").live('click', function(e)
	{
		$(".masquable-click:visible").each(function()
		{
			var elemWidth = $(this).outerWidth();
			var elemHeight = $(this).outerHeight();
			var elemPosition = $(this).offset();
			
			var decallageX = 15;	//px
			var decallageY = 10;	//px
			
			//Si la souris n'est pas sur un element qui se situe dans la zone de l'élement masquable
			if (	!(	(e.pageX >= elemPosition.left - decallageX && e.pageX <= elemPosition.left + elemWidth + decallageX && e.pageY >= elemPosition.top - decallageY && e.pageY <= elemPosition.top + elemHeight + decallageY) 	)	)
			{
				$(this).fadeOut(600, function(){$(this).removeClass('masquable-click');});
			}
		});
		
		
		//$(".masquable-click:visible").fadeOut(600, function(){$(this).removeClass('masquable-click');});
	});
	
	//Si la souris sort de la liste de premier niveau uniquement
	/*$(".conteneur-general .liste-style:not(.liste-style li.selected .liste-style)").live('mouseleave', function()
	{
		$(this).hide();
	});*/
	
	$(".conteneur-pagination p.pagination input.aller-a, .conteneur-pagination p.pagination input.changer-page-lien").live('keypress', function(event)
	{
		if (event.keyCode == '13')
		{
			var newPage = parseInt($(this).val());
			if (isNaN(newPage) == false)
			{
				//var newURL = location.href.split('&');
				var newURL = getPartieEntreCrochets($(this).attr('class')).split('&');
				var trouve = false;
				var i = 0;
				while (!trouve && i < newURL.length)
				{
					if (newURL[i].split('=')[0].indexOf('pagination') != -1)
					{
						trouve = true;
						newURL[i] = 'pagination=' + newPage;
					}
					else
					{
						i++;
					}
				}
				if (!trouve)
					newURL.push('pagination=' + newPage);
				//alert(newURL.join('&'));
				location.href = (newURL.join('&'));
			}
			else
			{
				$(this).val('');
				alert("Veuillez saisir un chiffre ou un nombre...");
			}
		}
	});
	//Effets pour masquer les colonnes
	$(".toggle-left:not(.invisible)").live('mouseenter', function()
	{
		if ($(".conteneur-general-gauche").queue('fx').length == 0)
			$(".conteneur-general-gauche").animate({'opacity': 0.2}, 800);
	});
	$(".toggle-left:not(.invisible)").live('mouseleave', function()
	{
		//else
			$(".conteneur-general-gauche").animate({'opacity': 1}, 800);
	});
	$(".toggle-right:not(.invisible)").live('mouseenter', function()
	{
		if ($(".conteneur-general-droite").queue('fx').length == 0)
			$(".conteneur-general-droite").animate({'opacity': 0.2}, 800);
	});
	$(".toggle-right:not(.invisible)").live('mouseleave', function()
	{
		//else
			$(".conteneur-general-droite").animate({'opacity': 1}, 800);
	});
	$(".toggle-left:not(.invisible)").live('click', function()
	{
		toggleLeftMenu();
		$(".conteneur-general-gauche").clearQueue().css({'opacity': 1});
		chargerGraphiqueDoubleCourbePige();
	});
	$(".toggle-right:not(.invisible)").live('click', function()
	{
		toggleRightMenu();
		$(".conteneur-general-droite").clearQueue().css({'opacity': 1});
		chargerGraphiqueDoubleCourbePige();
	});
	
	//Click sur un input avec un placeholder (pour les safari qui ne gèrent pas le placeholder)
	$("input[placeholder!='']").live('focusin', function()
	{
		if (!Modernizr.input.placeholder)
			$(this).val('');
	});
	$("input[placeholder!='']").live('focusout', function()
	{
		if (!Modernizr.input.placeholder)
			$(this).val($(this).attr('placeholder'));
	});
	$(function()
	{
		if (!Modernizr.input.placeholder)
		{
			$('input[placeholder!=""]').each(function()
			{
				$(this).val($(this).attr('placeholder'));
			});
		}
	});
	
	//Permet de mettre une ligne en surbrillance
	$(".selectionnable:not(.multi-niveaux)").live('click', function(e)
	{
		var cible = e.target;
		if ($(cible).hasClass('ne-pas-charger') == false)
		{
			var laLigne = null
			if ($(this).is('tr') || $(this).is('li'))
				laLigne = $(this);
			else if ($(this).parents('tr').length > 0)
				laLigne = $(this).parents('tr').first();
			else if ($(this).parents('li').length > 0)
				laLigne = $(this).parents('li').first();
			
			if (laLigne != null)
			{
				//on retire le selected d'une autre ligne du tableau
				laLigne.parent().first().children('.selected').removeClass('selected');
				laLigne.addClass('selected');
			}
		}
	});
	
	//Permet de mettre une ligne en surbrillance sur plusieurs niveaux
	$(".selectionnable.multi-niveaux").live('click', function(e)
	{
		var cible = e.target;
		if ($(cible).hasClass('ne-pas-charger') == false)
		{
			var laLigne = null
			if ($(this).is('tr') || $(this).is('li'))
				laLigne = $(this);
			else if ($(this).parents('tr').length > 0)
				laLigne = $(this).parents('tr').first();
			else if ($(this).parents('li').length > 0)
				laLigne = $(this).parents('li').first();
			
			if (laLigne != null)
			{
				//on retire le selected d'une autre ligne du tableau
				laLigne.parents('.origine-selection').first().find('.selected').removeClass('selected');
				laLigne.addClass('selected');
			}
		}
	});
	
	//Placement des pastilles de nombre notes, todo, alertes
	$(function()
	{
		/*$(".menu-principal .element-menu.chiffrable").each(function()
		{
			var elementMenu = $(this);
			var positionElement = elementMenu.offset();
			var elementAPlacer = elementMenu.children("span.nombre");
			if (elementAPlacer != null)
			{
				elementAPlacer.css(
				{
					display: "block",
					position: "absolute",
					top: positionElement.top - 5,
					left: positionElement.left + elementMenu.outerWidth() - elementAPlacer.outerWidth() + 5
				});
			}
		});*/
	});
	
	
	/*$("p.test_1").live('click', function()
	{
		$(this).text($(".conteneur-general ul.options-ajout-liste-annonceur").outerHeight());
	});*/
	
	//Cochage d'une case qui décoche toutes les autres
	$("input.check-alone").live('click', function()
	{
		//Si on décoche la case et que plus aucun autre check-alone n'est coché
		if (!$(this).is(":checked") && $("input[class*='check-alone'][value!=''][checked='checked']").length == 0)
		{
			$("input[value=''][class*='check-alone']").attr('checked', 'checked');		//On recoche celui qui a la valeur vide
		}
		else
		{
			if ($(this).val() == "" && $(this).is(':checked'))
			{
				$("input[class*='check-alone']").not($(this)).removeAttr('checked');
			}
			else if ($(this).val() != "" && $(this).is(':checked'))
			{
				$("input[value=''][class*='check-alone']").removeAttr('checked');
			}
		}
	});
	
	//Cochage d'une case pour cocher toutes les autres dans un tableau
	$("table thead th.selection input.cocher-toutes-les-cases, table tfoot th.selection input.cocher-toutes-les-cases").live('click', function()
	{
		if ($(this).is(':checked'))
		{
			$(this).parents('table').children('tbody').children('tr:visible').children('td.selection').children("input").not(':checked').attr('checked', 'checked');
		}
		else
		{
			$(this).parents('table').children('tbody').children('tr:visible').children('td.selection').children('input:checked').removeAttr('checked');
		}
	});
	//Decochage d'une case qui est dans un tableau qui était tout coché		/!\	AVANT LE CLIK, l'action par défaut n'a donc toujours pas été faite
	$("table tbody td.selection input[type='checkbox']").live('mousedown', function()
	{
		if ($(this).is(':checked'))		//Si la case etait cochée	(on décoche donc)
			$(this).parents('table').first().find('thead tr th.selection input:checkbox').removeAttr('checked');	//On décoche la case de la tête de tableau
		else if ($(this).parents('tbody').first().find('tr td.selection input:checkbox').not(':checked').not($(this)).length == 0)	//Sinon si toutes les cases du tableau son cochées (le nbr de cases non cochées vaut 0)
			$(this).parents('table').first().find('thead tr th.selection input:checkbox').attr('checked', 'checked');	//On décoche la case de la tête de tableau
	});
	
	/*$(".case-a-cocher:not(.desactivee)").live('click', function()
	{
		if ($(this).hasClass('cochee'))
		{
			$(this).removeClass('cochee');
		}
		else
		{
			$(this).addClass('cochee');
		}
	});*/
	
	//gestion des périodes prédéfinies
	$("select[name='periodePredefinie']").live('change', function()
	{
		var objSelect = decouperTextClassCrochets($(this).attr('class'));
		var objSelection = decouperTextClassCrochets($(this).val());
		if (objSelect['idDtDebut'] != undefined && objSelection['dateDebut'] != undefined)
			$("#" + objSelect['idDtDebut']).val(objSelection['dateDebut']);
		if (objSelect['idDtFin'] != undefined && objSelection['dateFin'] != undefined)
			$("#" + objSelect['idDtFin']).val(objSelection['dateFin']);
	});
	
	//gestion de la liste de multi selection perso
	$("[class*='liste-deroulante-multi-selection']").live('click', function(e)
	{
		var elemClique = e.target;
		var referent = $(this);
		var laListe = $(this).find("ul").first();
		//si l'element cliqué n'est pas un fils de la liste affichée
		if ($(elemClique).parents('ul').first().length == 0)
		{
			if (laListe.is(':hidden'))
			{	
				laListe.css(
				{
					'left': "-1px",
					'top': referent.outerHeight() - 3 + "px"
				}).fadeIn(600, function(){laListe.addClass('masquable-click');});
			}
			else
			{
				laListe.fadeOut(600, function(){$(this).removeClass('masquable-click');});
			}
		}
		else	//Sinon si on coche une case
		{
			var objListe = decouperTextClassCrochets(referent.attr('class'));
			var nbrElemsCoches = laListe.find('input:checked').length;
			referent.children('.texte').children('.nombre').text((nbrElemsCoches > 0)?nbrElemsCoches:objListe['textNombre']);
			referent.children('.texte').children('.pluriel').text((nbrElemsCoches == 0 || nbrElemsCoches > 1)?'s':'');
		}
	});
	
	//Click sur un label de liste déroulante perso
	$("[class*='label-liste-deroulante-multi-selection']").live('click', function()
	{
		$(this).parent().find('.' + $(this).attr('for')).click();
	});
	
	//focus sur un element de création (on duplique cet élement, on met la duplication à la suite de celui cliqué)
	$(".dupliquer-sur-focus").live("click focus", function()
	{
		var newElem = $(this).clone();
		newElem.removeClass('selected');
		$(this).removeClass('dupliquer-sur-focus');
		if (newElem.attr('class').indexOf('numeroElement=') != -1)		//incrémentation du numéro d'élément
		{
			var objNewElem = decouperTextClassCrochets(newElem.attr('class'));
			if (objNewElem['numeroElement'] != undefined && parseInt(objNewElem['numeroElement']) > 0)
			{
				ajouter_modifier_parametre_classe_element(newElem, 'numeroElement', parseInt(objNewElem['numeroElement']) + 1);
			}
		}
		$(this).after(newElem);
	});
});








/*	#############################
		Fonctions en rapport avec les events
	#############################	*/
//var lancementEffet = null;
//function masquer_afficher_colonne_droite_fondu(element)
//{
	//element.animate({'opacity': 0.2}, 800);
	//element.animate({'opacity': 1}, 800);
//}










/*	#############################

	Fonctions généralistes

	#############################	*/
	
	
/*Attention renvoie un objet*/
function decouperTextClassCrochets(unTexte, separateur)
{
	if (unTexte == undefined)
	{
		return new Object();
	}
	if (separateur == "" || separateur == null)
	{
		separateur = "&";
	}
	if (unTexte.indexOf('{') == -1)
	{
		return new Object();
	}
	else
	{
		//Objet pour le retour
		var monRetour = new Object();
		//On récupère les positions des accolades
		/*var debutIndex = unTexte.indexOf("{") + 1;
		var finIndex = unTexte.indexOf("}");
		//On récupère ce qu'il y a dans les accolades
		unTexte = unTexte.substring(debutIndex, finIndex);
		//on vire les espaces avant et après au cas ou
		unTexte = $.trim(unTexte);*/
		//On découpe ce qu'il y a dans les accolades
		var laDecoupe = getPartieEntreCrochets(unTexte).split(separateur);
		//on boucle sur les parametres
		for (var index = 0; index < laDecoupe.length; index++)
		{
			if (laDecoupe[index] != '' && laDecoupe[index].indexOf('=') != -1)
			{
				//On découpe la variable avec d'un coté le nom, et de l'autre la valeur
				var decoupeVariable = laDecoupe[index].split('=');
				//Nom de la variable
				var nomVar = decoupeVariable[0];
				//valeur de la variable
				var valVar = decoupeVariable[1];
				//Si il y a des virgules, (un array) on le crée, sinon pas besoin
				if (valVar.indexOf(',') != -1)
				{
					valVar = valVar.split(',');
				}
				//Si rien n'est définit pour cette variable, on crée l'entrée dans le tableau
				if (monRetour[nomVar] == undefined)
				{
					monRetour[nomVar] = $.trim(valVar);
				}
				else if (!(monRetour[nomVar] instanceof Array))						//On crée l'array
				{
					var vieilleValeur = monRetour[nomVar];							//On récupère l'ancienne valeur
					monRetour[nomVar] = [vieilleValeur, $.trim(valVar)];			//On crée un array à la place, avec l'ancienne valeur, et on ajoute la nouvelle
				}
				else if (monRetour[nomVar] instanceof Array)						//L'array existe, on ajoute la valeur à l'array
				{
					monRetour[nomVar].push(valVar);
				}
			}
		}
		//alert(monRetour.type + ' : ' + monRetour.id);
		return monRetour;
	}
}

function getPartieEntreCrochets(unTexte)
{
	//On récupère les positions des accolades
	var debutIndex = unTexte.indexOf("{") + 1;
	var finIndex = unTexte.indexOf("}");
	//On récupère ce qu'il y a dans les accolades
	unTexte = unTexte.substring(debutIndex, finIndex);
	//on vire les espaces avant et après au cas ou
	unTexte = $.trim(unTexte);
	return unTexte;
}

function supprimerLignesSuperflues(text)
{
	while (text.indexOf('\n\n') > -1)
    {
        text = text.replace('\n\n', '\n');
    }
	return text;
}

function encode_html(uneChaine)
{
	var chaineRetour = '';
	if (uneChaine.length > 0)
	{
		var tablChaine = uneChaine.substr(0);
		for (i in tablChaine)
		{
			if (tablChaine[i] == '&')
				chaineRetour += tablChaine[i].replace('&', '&amp;');
			else if (tablChaine[i] == '<')
				chaineRetour += tablChaine[i].replace('<', '&lt;');
			else if (tablChaine[i] == '>')
				chaineRetour += tablChaine[i].replace('>', '&gt;');
			else if (tablChaine[i] == "'")
				chaineRetour += tablChaine[i].replace("'", '&apos;');
			else if (tablChaine[i] == '"')
				chaineRetour += tablChaine[i].replace('"', '&quot;');
			else
				chaineRetour += tablChaine[i];
		}
	}
	return chaineRetour;
}

function centrerObjetDansConteneur(objetACentrer, objetConteneur)
{
	//$("#test1").text(objetConteneur.width());
	//$("#test2").text(objetACentrer.width());
	objetACentrer.css(
	{
		"left": (objetConteneur.width() / 2) - (objetACentrer.width() / 2),
		"top": (objetConteneur.height() / 2) - (objetACentrer.height() / 2),
		"position": "absolute"
	});
}


function replacerElementSiSortiFenetre(elementJquery, decallageX, decallageY)
{	
	decallageX = ((decallageX>=0)?decallageX:20);
	decallageY = ((decallageY>=0)?decallageY:20);

	var widthElement = elementJquery.outerWidth();
	var heightElement = elementJquery.outerHeight();
	var positionTopElement = elementJquery.offset().top;
	var positionLeftElement = elementJquery.offset().left;
	
	/*$("p.test_1").text(heightElement);
	$("p.test_2").text($(".conteneur-general ul.options-ajout-liste-annonceur").outerHeight());
	$("p.test_3").text(positionTopElement);*/

	var windowHeight = $(window).height();
	var windowWidth = $(window).width();
	var scrollTop = $(window).scrollTop();
	
	var positionTempTop = 0;
	var positionTempLeft = 0;
	
	var sortBas = false;
	var sortHaut = false;
	var sortDroite = false;
	var sortGauche = false;
	
	
	//Si l'élément sort de la page en bas
	if ((positionTopElement + heightElement) > (windowHeight + scrollTop - 10))
	{
		sortBas = true;
		//positionTempTop = positionTopElement - heightElement + decallageY;		//définition de la position à partir du haut
		positionTempTop = positionTopElement - ((positionTopElement + heightElement) - (windowHeight + scrollTop))			//On retire à la position en top ce qui sort du visible
	}
	//Si l'élément sort de la page en haut
	if ((positionTopElement) < (scrollTop + 10))
	{
		sortHaut = true;
		positionTop = positionTopElement + positionTopElement - decallageY;		//
	}
	//Si l'élément sort de la page à droite
	if ((positionLeftElement + widthElement) > (windowWidth - 10))
	{
		sortDroite = true;
		positionTempLeft = positionLeftElement - decallageX - widthElement;		//
	}
	//Si l'élément sort à gauche
	if ((positionLeftElement) < 10)
	{
		sortGauche = true;
		positionLeft = positionLeftElement + decallageX;
	}
	
	
	
	if (sortBas && sortHaut)
	{
		positionTopElement = scrollTop + (windowHeight / 2)  - (heightElement / 2);
	}
	else if (positionTempTop > 0)
	{
		positionTopElement = positionTempTop;
	}
	
	if (sortDroite && sortGauche)
	{
		positionLeftElement = (windowWidth / 2) - (widthElement / 2);
	}
	else if (positionTempLeft > 0)
	{
		positionLeftElement = positionTempLeft;
	}	
	
	elementJquery.css(
	{
		top: positionTopElement,
		left: positionLeftElement
	});
}


function placerElementVisaVisAutreElement(elemAplacer, elemReferent)
{
	if (elemReferent != undefined)
	{
		var hauteurElem = elemAplacer.outerHeight();
		//Par defaut le top est celui de l'element référent
		var newElemTop = elemReferent.offset().top - (hauteurElem / 2);
		//$(".conteneur-zoom-info h3 span").text($('body .conteneur-general').outerHeight() + ' || ' + newElemTop + ' dont ' + hauteurElem);
		//Si l'élément référent + hauteur elemAplacer > taille du body, on retire la taille de l'elemAplacer
		if ( (newElemTop + hauteurElem) > ($('body .conteneur-general').outerHeight() - 20) )
		{
			newElemTop = ($('body .conteneur-general').outerHeight() - 20) - hauteurElem;
		}
		
		/*if ( newElemTop < 65)
			newElemTop = 65;*/
		if ( newElemTop <= 220)
		{
			newElemTop = 220;
		}
		
		elemAplacer.css(
		{
			'top': newElemTop
		});
	}
}



//Prend en param un l'element jquery à mettre en attente
var derniereZoneAttente = 0;
function zoneAttente(elementJqueryPourAttente, message, appendBody)
{
	if (elementJqueryPourAttente != undefined)
	{
		//Si l'élement est déjà en mode attente, on vire l'attente
		if (elementJqueryPourAttente.hasClass('en-attente'))
		{
			elementJqueryPourAttente.removeClass('en-attente');
			var laClasse = elementJqueryPourAttente.attr('class');
			var objRetour = decouperTextClassCrochets(laClasse);
			if (laClasse.indexOf('idAttente=' + objRetour.idAttente) != -1)
			{
				var regExpClasse = /\&?idAttente=[0-9]+/;
				elementJqueryPourAttente.attr('class', $.trim(laClasse.replace(regExpClasse, "")));
				//laClasse = laClasse.replace('idAttente=' + objRetour.idAttente, '');
				//laClasse = ((laClasse.indexOf('{}') != -1)?laClasse.replace('{}', ''):laClasse);
				//laClasse = $.trim(laClasse);
				//elementJqueryPourAttente.attr('class', laClasse);
				//alert(elementJqueryPourAttente.attr('class') + '\n' + ('idAttente=' + objRetour.idAttente) + "\n" + elementJqueryPourAttente.hasClass(('idAttente=' + objRetour.idAttente)));
			}
			$(".zone-attente.idAttente" + objRetour.idAttente).fadeOut(600, function()
			{
				$(".zone-attente.idAttente" + objRetour.idAttente).remove();
			});
		}
		else	//L'élément n'est pas en attente, on le met
		{
			if (message == undefined)
			{
				message = 'Veuillez patienter...';
			}
			derniereZoneAttente += 1;
			elementJqueryPourAttente.addClass('en-attente');
			if ( (elementJqueryPourAttente.attr('class') != undefined) && ((elementJqueryPourAttente.attr('class')).indexOf('}') != -1) )
			{
				elementJqueryPourAttente.attr('class', ((elementJqueryPourAttente.attr('class')).replace('}', ('&idAttente=' + derniereZoneAttente + '}'))));
			}
			else
			{
				elementJqueryPourAttente.addClass('{idAttente=' + derniereZoneAttente + '}');
			}
			//On remonte les 5 derniers parents de l'élément tant qu'on ne trouve pas de z-index, si on en trouve un, on le définit et on sort de la boucle
			var nbrBoucles = 0;
			var elemEnCoursPourAttente = elementJqueryPourAttente;
			var zIndexZoneAtt = ((elemEnCoursPourAttente.css('z-index') == 'auto')?1:parseInt(elemEnCoursPourAttente.css('z-index')) + 1);
			/*while (nbrBoucles < 5 && zIndexZoneAtt == 1)
			{
					if (elemEnCoursPourAttente.parent() != null && elemEnCoursPourAttente.parent().length > 0 && elemEnCoursPourAttente.parent().css('z-index') != 'auto' && parseInt(elemEnCoursPourAttente.parent().css('z-index')) > 1)
						zIndexZoneAtt = parseInt(elemEnCoursPourAttente.css('z-index')) + 1;
					else
						elemEnCoursPourAttente = elemEnCoursPourAttente.parent();
				
				/*if (elemEnCoursPourAttente.parent().length == 0)
					elemEnCoursPourAttente = null;
				else if (elemEnCoursPourAttente != null && elemEnCoursPourAttente.parent().length > 0 && elemEnCoursPourAttente.parent().css('z-index') != 'auto' && parseInt(elemEnCoursPourAttente.parent().css('z-index')) > 1)
				{
					elemEnCoursPourAttente = elemEnCoursPourAttente.parent();
					zIndexZoneAtt = parseInt(elemEnCoursPourAttente.css('z-index')) + 1;
				}
				nbrBoucles++;
			}*/
			//message += '<br />Offset top parent : ' + elementJqueryPourAttente.offset().top + 'px';
			//message += '<br />Position top parent : ' + elementJqueryPourAttente.position().top + 'px';
			var leContenuDeLaZone = '<div class="zone-attente idAttente' + derniereZoneAttente + '">' + message + '</div>';
			$('body' + ((appendBody)?'':' .conteneur-general' + ((elementJqueryPourAttente.parents('.conteneur-boite-modale').length == 0)?'':' .conteneur-boite-modale'))).append(leContenuDeLaZone);
			$('.zone-attente.idAttente' + derniereZoneAttente).css(
			{
				"display": "none",
				"position": "absolute",
				"top": ((elementJqueryPourAttente.offset() != null)?elementJqueryPourAttente.offset().top:0),
				"left": ((elementJqueryPourAttente.offset() != null)?elementJqueryPourAttente.offset().left:0),
				//"top": ((elementJqueryPourAttente.position() != null)?elementJqueryPourAttente.position().top:0),
				//"left": ((elementJqueryPourAttente.position() != null)?elementJqueryPourAttente.position().left:0),
				"width": elementJqueryPourAttente.outerWidth(),
				//"height": elementJqueryPourAttente.outerHeight() - (elementJqueryPourAttente.outerHeight() / 3),
				"height": ((elementJqueryPourAttente.outerHeight() < 70)?70:elementJqueryPourAttente.outerHeight() - 30 - ((elementJqueryPourAttente.outerHeight() - (elementJqueryPourAttente.outerHeight() / 3) > 70)?0:30)),
				//"padding-top": (elementJqueryPourAttente.outerHeight() / 3)
				"padding-top": 30,
				"padding-bottom": ((elementJqueryPourAttente.outerHeight() - (elementJqueryPourAttente.outerHeight() / 3) > 70)?0:30),
				"z-index": zIndexZoneAtt
			});
			//si la zone à masquer est visible , on met la zone d'attente par dessus, sinon on ne fait rien (éviter d'appliquer zone attente au dessus d'un element non visible...)
			if (elementJqueryPourAttente.is(':visible'))
			{
				$('.zone-attente.idAttente' + derniereZoneAttente).fadeIn(600, function()
				{
					//Une fois la zone d'attente définie, et son effet terminé, il se peut qu'elle ne soit pas totalement de la taille voulue.
					//On va donc la redimensionner pour coller au mieux à l'élement
					if ($(this).outerHeight() != elementJqueryPourAttente.outerHeight() || $(this).outerWidth() != elementJqueryPourAttente.outerWidth())
					{
						$(this).css(
						{
							"width": elementJqueryPourAttente.outerWidth(),
							"height": ((elementJqueryPourAttente.outerHeight() < 70)?70:elementJqueryPourAttente.outerHeight() - 30 - ((elementJqueryPourAttente.outerHeight() - (elementJqueryPourAttente.outerHeight() / 3) > 70)?0:30)),
						});
					}
				});
			}
		}
	}
}
//Le message se masque automatiquement au bout du temps défini
//Cette liste fonctionne comme une pile. Premier entré, premier sorti
function afficherUnMessageInformationUtilisateur(titre, text, typeMsg, nbrSecondes)
{
	//Si le conteneur n'existe pas, on le crée
	if ($('body>.conteneur-messages').length == 0)
		$('body').append('<div class="conteneur-messages"><ul></ul></div>');
	
	//On récupère la liste d'infos
	var laListeInfos = $('body>.conteneur-messages>ul');
	
	//On définit ce qu'il y aura à ajouter (texte, titre...)
	var contenu = '<li class="coinsArrondis_5 ' + ((typeMsg == 'erreur')?'erreur ':((typeMsg == 'info')?'info ':'')) + 'invisible">';
	contenu += ((titre != undefined && titre != '')?'<h1>' + titre + '</h1>':'');
	contenu += ((text != undefined && text != '')?'<div class="text">' + text + '</div>':'');
	contenu += '</li>';
	
	//On ajoute du contenu à cette liste, toujours au début
	laListeInfos.prepend($(contenu));
	
	var tempsAffichage = ((nbrSecondes != undefined && nbrSecondes > 0)?parseInt(nbrSecondes + '000'):3000);
	
	//On affiche l'élement qu'on vient d'ajouter
	laListeInfos.children().first().show(function()
	{
		var elemJquery = $(this);
		elemJquery.removeClass('invisible');
		//On définit le timer qui masquera ce message
		var temps = setTimeout(function()
		{
			elemJquery.hide(function()
			{
				$(this).remove();
				var laListeInfos = $('body>.conteneur-messages>ul');
				//S'il n'y a plus aucun message, on vire le conteneur
				if (laListeInfos.children('li').length == 0)
					$('body>.conteneur-messages').remove();
			});
		}, tempsAffichage);
	});
}
function afficherUnMessageInfo(unMessage, secondesAffichage)
{
	$("body .info-generale h5").html(unMessage);
	$("body .info-generale").css(
	{
		top: $("body .barre-top").outerHeight()
	}).show(function()
	{
		var temps = setTimeout('$("body .info-generale").hide("slow");', ((secondesAffichage != undefined && secondesAffichage > 0)?parseInt(secondesAffichage + '000'):3000) );
	});
}
function afficherUnMessageErreur(unMessage, secondesAffichage)
{
	$("body .info-erreur h5").html(unMessage);
	$("body .info-erreur").css(
	{
		top: $("body .barre-top").outerHeight()
	}).show(function()
	{
		var temps = setTimeout('$("body .info-erreur").hide("slow");', ((secondesAffichage != undefined && secondesAffichage > 0)?parseInt(secondesAffichage + '000'):3000) );
	});
}


function formaterNombreSortie(unNombre, nombreDecimales, caractereDecimal, separateurMilliers)
{
	nombreDecimales = ((nombreDecimales == undefined || nombreDecimales == null || isNaN(nombreDecimales))?0:nombreDecimales);
	caractereDecimal = ((caractereDecimal == undefined || caractereDecimal == null || caractereDecimal.length > 1)?',':caractereDecimal);
	separateurMilliers = ((separateurMilliers == undefined || separateurMilliers == null || separateurMilliers.length > 1)?' ':separateurMilliers);
	
	var uneChaine = new String(unNombre.toFixed(nombreDecimales));
	if (uneChaine.indexOf('.') != -1)
	{
		var chaineApresVirgulle = ',' + uneChaine.split('.')[1];
		uneChaine = uneChaine.split('.')[0];
	}
	else
	{
		var chaineApresVirgulle = '';
	}
	var chaineAvantVirgulle = '';
	var compteurNormal = 1;
	for (var i = uneChaine.length - 1; i >= 0; i--)
	{
		chaineAvantVirgulle = uneChaine[i] + chaineAvantVirgulle;
		chaineAvantVirgulle = ((compteurNormal > 0 && compteurNormal%3 == 0)?' ':'') + chaineAvantVirgulle;
		compteurNormal++;
	}
	return chaineAvantVirgulle + chaineApresVirgulle;
}
function formaterNombreEntree(uneChaine)
{
	var unNombre = new String(uneChaine);
	unNombre = unNombre.replace(' ', '');
	unNombre = unNombre.replace(',', '.');
	//unNombre = parseFloat(unNombre);
	//return ((isNaN(unNombre))?0:unNombre);
	return parseFloat(((unNombre == '.' || unNombre == '-')?0:unNombre));
}

//ajouter_modifier_parametre_classe_element($(".conteneur-general-centre .contenu"), 'idTest', 123);	//Initialisation
//ajouter_modifier_parametre_classe_element($(".conteneur-general-centre .contenu"), 'idTest', 456);	//Remplacement non défini (par défaut, remplacement de l'ancienne valeur), (booléen)
//ajouter_modifier_parametre_classe_element($(".conteneur-general-centre .contenu"), 'idTest', 789, true);	//Remplacement défini
//ajouter_modifier_parametre_classe_element($(".conteneur-general-centre .contenu"), 'idTest', 101112, false);	//Ajout de valeur
function ajouter_modifier_parametre_classe_element(elemJquery, nomVar, valVar, modifier)
{
	modifier = ((modifier == undefined)?true:modifier);
	var regexpCrochet = new RegExp("\{.*\}");
	var textCrochets = regexpCrochet.exec(elemJquery.attr('class'));		//on récupère la partie entre accolades
	var classeRetour = $.trim((textCrochets != null)?elemJquery.attr('class').replace(textCrochets, ""):elemJquery.attr('class'));	//Si qqch entre accolades, on prend tout ce qu'il y a autour
	var paramsClasse = decouperTextClassCrochets(String(textCrochets));	//On récupère on récupère la partie entre accolades en objet
	if (modifier && valVar instanceof Array)		//Si la valeur existe déjà, on la remplace, sinon on la crée
		paramsClasse[nomVar] = valVar;		//Si c'est un array on met l'array
	else if (modifier)
		paramsClasse[nomVar] = [valVar];	//Sinon si c'est pas un array, on met la valeur dans un array
	else	//Sinon si on ne cherche qu'à ajouter une valeur
	{
		if (paramsClasse[nomVar] instanceof Array)		//Si la valeur est déjà un array et qu'on ne cherche pas à la modifier mais à en ajouter
			paramsClasse[nomVar].push(valVar);
		else if (paramsClasse[nomVar] != undefined)
			paramsClasse[nomVar] = [paramsClasse[nomVar], valVar];
		else
			paramsClasse[nomVar] = [valVar];
	}
	var i = 0;
	for (nomVariable in paramsClasse)		//On reconstruit la classe
	{
		if (paramsClasse[nomVariable] instanceof Array)
		{
			for (y in paramsClasse[nomVariable])
			{
				classeRetour += ((i > 0)?'&':' {') + nomVariable + "=" + paramsClasse[nomVariable][y];
				i++;
			}
		}
		else
		{
			classeRetour += ((i > 0)?'&':' {') + nomVariable + "=" + paramsClasse[nomVariable];
			i++;
		}
	}
	classeRetour += ((i > 0)?"}":"");
	elemJquery.attr('class', classeRetour);
}

function supprimer_parametre_classe_element(elemJquery, nomVar)
{
	var regexpCrochet = new RegExp("\{.*\}");
	var textCrochets = regexpCrochet.exec(elemJquery.attr('class'));		//on récupère la partie entre accolades
	var classeRetour = $.trim((textCrochets != null)?elemJquery.attr('class').replace(textCrochets, ""):elemJquery.attr('class'));	//Si qqch entre accolades, on prend tout ce qu'il y a autour
	var classeParamsRetour = '';
	var paramsClasse = decouperTextClassCrochets(String(textCrochets));	//On récupère on récupère la partie entre accolades en objet
	//paramsClasse[nomVar] = null;		//On retire la valeur
	for (nomParam in paramsClasse)		//On reconstruit le tableau de params
	{
		if (nomParam != nomVar)
			classeParamsRetour += ((classeParamsRetour != '')?'&':' {') + nomParam + "=" + paramsClasse[nomParam];		//On ajoute le param seulement si ce param n'est pas à supprimer
	}
	classeRetour += ((classeParamsRetour != '')?classeParamsRetour + "}":'');
	elemJquery.attr('class', classeRetour);
}

function taille(tableauAssociatif)
{
	var taille = 0;
	for (cle in tableauAssociatif)
	{
		if (cle != '')
			taille++;
	}
	return taille;
}
function email_valide(chaine)
{
	var patt = new RegExp('^([a-z0-9_\.\-]){2,}@([a-z0-9_\.\-]){2,}\.([a-z]){2,4}$','ig');
	return patt.test(chaine);
}
function telephone_valide(chaine)
{
	var tmpChaine = chaine;
	var telFr = /^\+[3]{2}/ig;	//telephone français
	tmpChaine = tmpChaine.replace(telFr.exec(tmpChaine), "0");
	var tel = new RegExp('^0[1-9]([ \.\-]?[0-9]{2}){4}$','ig');
	return tel.test(tmpChaine);
}









/*	#############################

Chargement de données : MENU DE GAUCHE

	#############################	*/

/*function chargerLesListesAnnonceur_MenuGauche(idListeDepliee, idListeSelection, chargerConteneurCentral)
{
	zoneAttente($(".conteneur-listes-annonceur"));
	//Récupération des listes d'annonceurs
	$.ajax(
	{
		type: "POST",
		url: "../ajax/getListesEntreprises_menuGauche.lasso",
		data: "mettreLiens=" + ((pageProspection)?0:1) + ((idListeSelection > 0)?("&idListeSelection=" + idListeSelection):'') + ((idListeDepliee > 0)?("&idListeDepliee=" + idListeDepliee):''),
		success: function(retour)
		{
			$(".conteneur-listes-annonceur ul.premier-niveau").empty();
			$(".conteneur-listes-annonceur ul.premier-niveau").append(retour);
			zoneAttente($(".conteneur-listes-annonceur"));
			if (chargerConteneurCentral != undefined && chargerConteneurCentral)
			{
				$(".conteneur-mode-affichage a.section_Nav.selected").removeClass('selected');
				$(".conteneur-mode-affichage a.section_Nav.icone1").addClass('selected');
				chargerContenuPageCentrale("", "", "");
			}
		}
	});
}
function modifierLeNombreAnnonceurListeAnnonceur(idListe, valeur, ajouterAMonFichier)
{
	var nbrTmp = parseInt($(".conteneur-listes-annonceur ul li[class*='" + idListe + "'] span.nombre-liste").text());
	$(".conteneur-listes-annonceur ul li[class*='" + idListe + "'] span.nombre-liste").text(nbrTmp + valeur);
	$(".conteneur-listes-annonceur ul li[class*='" + idListe + "'] p.zero").removeClass('zero');
	if (ajouterAMonFichier)
	{
		nbrTmp = parseInt($(".conteneur-listes-annonceur ul li p.mon-fichier span.nombre-liste").text());
		$(".conteneur-listes-annonceur ul li p.mon-fichier span.nombre-liste").text(nbrTmp + valeur);
		$(".conteneur-listes-annonceur ul li p.mon-fichier.zero").removeClass('zero');
	}
}*/

/*function chargerLesListesSupport_MenuGauche(idListeDepliee, idListeSelection, chargerConteneurCentral, unIdSupport)
{
	zoneAttente($(".conteneur-listes-support"));
	//Récupération des listes d'annonceurs
	$.ajax(
	{
		type: "POST",
		url: "../ajax/getListesSupports_menuGauche.lasso",
		data: "mettreLiens=" + ((pagePilote)?0:1) + ((idListeSelection > 0)?("&idListeSelection=" + idListeSelection):'') + ((idListeDepliee > 0)?("&idListeDepliee=" + idListeDepliee):'') + ((unIdSupport > 0)?'&idSupp=' + unIdSupport:''),
		success: function(retour)
		{
			$(".conteneur-listes-support ul.premier-niveau").empty();
			$(".conteneur-listes-support ul.premier-niveau").append(retour);
			zoneAttente($(".conteneur-listes-support"));
			if (chargerConteneurCentral != undefined && chargerConteneurCentral)
			{
				chargerContenuPageCentrale("", "", "");
			}
		}
	});
}

function modifierLeNombreSupportListeSupport(idListe, valeur)
{
	var nbrTmp = parseInt($(".conteneur-listes-support ul li[class*='" + idListe + "'] span.nombre-liste").text());
	$(".conteneur-listes-support ul li[class*='" + idListe + "'] span.nombre-liste").text(nbrTmp + valeur);
}*/

function chargerLesListesTheme_MenuGauche(idListeDepliee, idListeSelection, chargerConteneurCentral)
{
	zoneAttente($(".conteneur-listes-theme"));
	//Récupération des listes d'annonceurs
	$.ajax(
	{
		type: "POST",
		url: "../ajax/getListesNomenclatures_menuGauche.lasso",
		//data: "mettreLiens=" + ((pageProspection)?0:1) + ((idListeSelection > 0)?("&idListeSelection=" + idListeSelection):'') + ((idListeDepliee > 0)?("&idListeDepliee=" + idListeDepliee):''),
		data: "mettreLiens=" + ((pagePilote)?0:1) + ((idListeSelection > 0)?("&idListeSelection=" + idListeSelection):'') + ((idListeDepliee > 0)?("&idListeDepliee=" + idListeDepliee):''),
		success: function(retour)
		{
			$(".conteneur-listes-theme ul.premier-niveau").empty();
			$(".conteneur-listes-theme ul.premier-niveau").append(retour);
			zoneAttente($(".conteneur-listes-theme"));
			if (chargerConteneurCentral != undefined && chargerConteneurCentral)
			{
				chargerContenuPageCentrale("", "", "");
			}
		}
	});
}

function modifierLeNombreThemeListeTheme(idListe, valeur)
{
	var nbrTmp = parseInt($(".conteneur-listes-theme ul li[class*='" + idListe + "'] span.nombre-liste").text());
	$(".conteneur-listes-theme ul li[class*='" + idListe + "'] span.nombre-liste").text(nbrTmp + valeur);
	$(".conteneur-listes-theme ul li[class*='" + idListe + "'] p.zero").removeClass('zero');
}














/*	#############################

Chargement de données : COMPTEURS

	#############################	*/


function chargerLesCompteurs()
{
	$.ajax(
	{
		type: "POST",
		url: "../ajax/Compteurs.lasso",
		data: "",
		success: function(retour)
		{
			retour = decouperTextClassCrochets(retour);
			$(".menu-principal .element-menu.chiffrable span.nombre").each(function()
			{
				var elemClass = decouperTextClassCrochets($(this).attr('class'));
				$(this).text((retour[elemClass['nom']] == undefined)?0:retour[elemClass['nom']]);
			});
		}
	});
}




/*	#############################

	Changement du mode d'affichage : afficher/masquer gauche/droite
	
	#############################	*/
	
function toggleLeftMenu()
{
	$(".toggle-left").toggleClass("left-hidden");
	$(".conteneur-general").toggleClass("left-hidden");
	$(".toggle-right").toggleClass("left-hidden");
	$(".conteneur-general .conteneur-general-gauche").toggleClass("hidden");
	$(".conteneur-general .conteneur-general-centre").toggleClass("left-hidden");
	$(".conteneur-general .conteneur-general-droite").toggleClass("left-hidden");
}
function toggleRightMenu()
{
	$(".toggle-right").toggleClass("right-hidden");
	$(".conteneur-general").toggleClass("right-hidden");
	$(".toggle-left").toggleClass("right-hidden");
	$(".conteneur-general .conteneur-general-gauche").toggleClass("right-hidden");
	$(".conteneur-general .conteneur-general-centre").toggleClass("right-hidden");
	$(".conteneur-general .conteneur-general-droite").toggleClass("hidden");
}





function get_informations_navigateur()
{
	$.ajax(
	{
		type: "POST",
		url: "../ajax/navigateur.lasso",
		success: function(retour)
		{
			if ($.trim(retour) != '')
			{
				$("body").prepend(retour);
				$(".conteneur-login form, .conteneur-menu-principal ul.menu-principal").fadeOut(500, function() { $(this).remove(); });;
			}
		},
		error: function()
		{
			//afficherUnMessageInformationUtilisateur("Erreur", "Aucun visuel n'a pu être chargé.", "erreur", 5);
		}
	});
}
