/**
 * Ce fichier va contenir les petites fonctions javascripts utiles.
 * A developper : 
 *
 * 
function  proprietes(objet,nom) {
var texte = "";
 for (var i in objet )
 texte +=nom+"."+i+" = " +objet[i] +"";
document.write(texte)
}
// parcours des propriétés des instances de Personne
for (var i=0; i<personnes.length; i++)
	proprietes(personnes[i], personnes[i].nom)
	
	---
	
	TODO : A mettre dans une fonction globale :
	alert("La résolution de votre écran est : " + screen.width + " x " + screen.height + "\n\n" +
		"Fonctions javascript :\n" +
		"Largeur screen.width = " + screen.width + "\n" +
		"Hauteur screen.height = " + screen.height + "\n" +
		"Largeur disponible screen.availWidth = " + screen.availWidth+"\n"+
		"Hauteur disponible screen.availHeight = " + screen.availHeight+"\n"+
		"Profondeur des couleurs screen.colorDepth = " + screen.colorDepth+" bits"+
		"document.body.clientWidth=" + document.body.clientWidth + "\n" +
		"document.body.clientHeight=" + document.body.clientHeight + "\n" +
		"document.body.scrollHeight=" + document.body.scrollHeight + "\n" +
		"document.body.scrollLeft=" + document.body.scrollLeft + "\n" +
		"document.body.scrollTop=" + document.body.scrollTop + "\n" +
		"window.outerHeight=" + window.outerHeight + "\n" +
		"window.outerWidth=" + window.outerWidth + "\n"
		
		);
	
 * 
 */

/**
 * Retourne la taille du scroll horizontal en pixel (par rapport à la gauche).
 * @return int : la taille du scroll horizontal en pixel.
 */
function getPostionScrollLargeur() {
	return ((document.documentElement && document.documentElement.scrollLeft) || window.pageXOffset || self.pageXOffset || document.body.scrollLeft);
}

/**
 * Retourne la taille du scroll vertical en pixel.
 * @returns int : la taille du scroll vertical.
 */
function getPostionScrollHauteur() {
	return ((document.documentElement && document.documentElement.scrollTop) || window.pageYOffset || self.pageYOffset || document.body.scrollTop);
}

/**
 * Cette fonction affiche une popup "ajax". Cette popup est définie dans index.php grace a un div se nommant "oneiraPopup".
 * <div id="oneiraPopup" style="position:absolute; min-height:150px; display:hidden; overflow: hidden"></div>
 * A noter que la div pour le fond grisé doit également être définie.
 * <div id="brume" class="brume" style="display:none"></div>
 * Cette fonction va griser le donc
 */

function centerPopup(element) {
	var height = document.getElementById(element).offsetHeight;		//hauteur de l'élément à positionner
	var width = document.getElementById(element).offsetWidth;		//largeur de l'élément à positionner
	alert(height + " - " + width);
	myParent = document.getElementById(element).parentNode;
	var pHeight = myParent.offsetHeight;							//Hauteur de l'élément parent
	var pWidth = myParent.offsetWidth;								//Largeur de l'élément parent
	alert(pHeight + " - " + pWidth);
	var sTop = myParent.scrollTop;									//Hauteur de défilement de l'élément parent
	var sLeft = myParent.scrollLeft;								//Longueur de défilement de l'élément parent
	var posY = (pHeigh / 2) - (height / 2) + sTop;					//Calcul de la position en Y
	var posX = (pWidth / 2) - (width / 2) + sLeft;					//Calcul de la position en X
	document.getElementById(element).style.top = posY + "px";
	document.getElementById(element).style.left = posX + "px";
}

/**
 * Affiche une popup ajax
 * @param url : l'url de la page qui sera appelé en ajax et affichée dans la popup.
 * @param height : la hauteur de la fenêtre. Ce champ ne dimensionne pas, il doit juste être correct pour le centrage.
 * @param width : la largeur de la fenêtre. Ce champ ne dimensionne pas, il doit juste être correct pour le centrage.
 */
function ajaxPopupFixe(url, height, width) {
	var brume = document.getElementById('brume');
	var popup = document.getElementById('one_popup');
	
	/* fonction jQuery permettant de faire de l'ajax */
	
	document.body.style.cursor = 'wait';
	$.ajax({
		type: "GET",
		url: url, 
		error: function(error, error2) {
			alert(error + ' - ' + error2);
		},
		success: function(msg) {
			/*alert("appel fait !");
			alert(msg);*/
			$("#one_popup").html(msg);
			
			brume.style.display = "block";
			popup.style.display = "block";
			//centerPopup('one_popup');
			monLeft = (popup.parentNode.offsetWidth - width) / 2;
			monTop = (popup.parentNode.offsetHeight - height) / 2;
			popup.style.left = monLeft + "px";
			popup.style.top = monTop + "px";
			document.body.style.cursor = 'default';
		}
	});
	
	$(document).ready(function() {
		$("#brume").click(function() {
			brume.style.display = "none";
			popup.style.display = "none";
		});
	});
}

/**
 * Affiche une popup ajax
 * @param url : l'url de la page qui sera appelé en ajax et affichée dans la popup.
 * @param cheminImage : le chemin de l'image.
 * @param height : la hauteur de la fenêtre. Ce champ ne dimensionne pas, il doit juste être correct pour le centrage.
 * @param width : la largeur de la fenêtre. Ce champ ne dimensionne pas, il doit juste être correct pour le centrage.
 */
function ajaxPopupImageFixe(url, cheminImage, height, width) {
	var brume = document.getElementById('brume');
	var popup = document.getElementById('one_popup');
	
	/* fonction jQuery permettant de faire de l'ajax */
	document.body.style.cursor = 'wait';
	$.ajax({
		type: "POST",
		url: url, 
		data: "cheminImage=" + cheminImage + "&hauteur=" + height + "&largeur=" + width,
		error: function(error, error2) {
			alert(error + ' - ' + error2);
		},
		success: function(msg) {
			/*alert("appel fait !");
			alert(msg);*/
			$("#one_popup").html(msg);
			
			brume.style.display = "block";
			popup.style.display = "block";
			//centerPopup('one_popup');
			if (popup.parentNode.offsetWidth < width) {
				width = popup.parentNode.offsetWidth * 0.9;
			}
			if (popup.parentNode.offsetHeight < height) {
				height = popup.parentNode.offsetHeight * 0.9;
			}
			//alert("width=" + width + " - height=" + height);
			monLeft = (popup.parentNode.offsetWidth - width) / 2;
			monTop = (popup.parentNode.offsetHeight - height) / 2;
			popup.style.left = monLeft + "px";
			popup.style.top = monTop + "px";
			document.body.style.cursor = 'default';
		}
	});
	
	$(document).ready(function() {
		$("#brume").click(function() {
			brume.style.display = "none";
			popup.style.display = "none";
		});
	});
}

/**
 * Liste de fonctions pour récupérer la taille d'un objet (div ou autres)
 */

function getLeft(MyObject) {
    if (MyObject.offsetParent)
        return (MyObject.offsetLeft + getLeft(MyObject.offsetParent));
    else
        return (MyObject.offsetLeft);
    }

function getTop(MyObject) {
    if (MyObject.offsetParent)
        return (MyObject.offsetTop + getTop(MyObject.offsetParent));
    else
        return (MyObject.offsetTop);
    }
function getHeight(MyObject) {
	return (MyObject.offsetHeight);
}

function getWidth(MyObject) {
	return (MyObject.offsetWidth);
}

/**
 * Cette fonction fait une redirection automatique vers la page spécifiée, 
 * au bout de x millisecondes.
 * @param string page : la page vers laquelle on veut se rediriger.
 * @param millisecondes : le nombre de milliseconde avant la redirection automatique. 
 */
function redirection(page, millisecondes) {
	setTimeout('window.location="' + page + '"', millisecondes);
}


/**
 * Cette fonction affiche un message de demande de confirmation.
 * @param string message : le message de confirmation à afficher.
 * @return boolean : oui si l'utilisateur a confirmé, false sinon.
 */
function confirmation(message) {
	if (confirm(message)) {
		return (true);
	} else {
		return (false);
	}
}

/**
 * Cette fonction affiche ou cache les sous menus quand on clique sur un lien du menu qui n'est présent
 * que pour ses sous menus (qui n'a pas d'article propre).
 */
function changeEtatSousMenu(id) {
	$(".classeInvisible" + id).each (
		function() {
			$(this).slideToggle("slow");
			$(this).dblclick();
		}
	);
}

/**
 * Cette fonction cache systèmatiquement les sous menus.
 */
function cacheSousMenu(id) {
	$(".classeInvisible" + id).each (
		function() {
			$(this).slideUp("slow");
			$(this).dblclick();
		}
	);
}


/** 
 * Cette partie de code gère les infobulles.
 * TODO : Reprendre. 
 */
 
function get_id(id) {
	return document.getElementById(id);
}

var estVisible = false; // La variable i nous dit si la bulle est visible ou non
var global_text = '';	// La variable global_text contient le texte à afficher en infobulle.
var infobulle_largeur = 300;

function move_info(e) {
	if(estVisible) {	// Si la bulle est visible, on calcul en temps reel sa position ideale
		if (global_text.length < 50) {
			infobulle_largeur = global_text.length * 6 + 20;
		} else {
			infobulle_largeur = 300;
		}
		if (navigator.appName != "Microsoft Internet Explorer") { // Si on n'est PAS sous IE
			get_id("curseur").style.left = e.pageX + 5 + "px";
			get_id("curseur").style.top = e.pageY + 10 + "px";
			if (e.pageX + 10 + infobulle_largeur < document.width) {
				get_id("curseur").style.width = infobulle_largeur + "px";
			} else {
				get_id("curseur").style.width = document.width - e.pageX - 10 + "px";
			}
		} else { // sous IE
			if (document.documentElement.clientWidth > 0) {
			//alert("x =" + event.x + " - y = " + event.y);
			//alert("x =" + event.clientX + " - y = " + event.clientY);
				get_id("curseur").style.left = 5 + event.clientX + document.documentElement.scrollLeft + "px";
				get_id("curseur").style.top = 10 + event.clientY + document.documentElement.scrollTop + "px";
				if (5 + event.clientX + infobulle_largeur < document.body.clientWidth) {
					get_id("curseur").style.width = infobulle_largeur + "px";
				} else {
					get_id("curseur").style.width= document.body.clientWidth - event.clientX - 5 + "px";
				}
			} else {
				// Gestion version ie.
				get_id("curseur").style.left = 5 + event.clientX + "px";
				get_id("curseur").style.top = 10 + event.clientY + document.body.scrollTop + "px";
				if (10 + event.clientX + infobulle_largeur < document.body.clientWidth) {
					get_id("curseur").style.width = infobulle_largeur + "px";
				} else {
					get_id("curseur").style.width = document.body.clientWidth - event.clientX - 10 + "px";
				}
			}
		}
	}
}

/**
* Cette fonction rend l'infobulle visible. Cependant, dans la mesure ou l'infobulle s'affiche
* apres un certain timeout, on verifie avant qu'il est toujours pertinent de l'afficher. 
*/
function doVisible() {
	document.onmousemove=move_info;
	if (estVisible == true) {
		get_id("curseur").innerHTML = global_text; // Cette fonction est a améliorer, il parait qu'elle n'est pas valide (mais elle marche)
		get_id("curseur").style.visibility = "visible"; // Si il est caché (la verif n'est qu'une securité) on le rend visible.
	}
}

/**
* Cette fonction mets a jour le texte. Elle lancera également la fonction qui rend l'infobulle
* visible apres un certain timeout.
*/
function show_info(text) {
	if (estVisible == false) {
		estVisible = true;
		global_text = text;
		setTimeout(function(){doVisible()}, "700");
	}
}

/**
* Cette fonction cache l'infobulle.
*/
function hide_info() { 
	if (estVisible == true) {
		get_id("curseur").style.visibility = "hidden"; // Si la bulle etais visible on la cache
		estVisible = false;
	}
}
document.onmousemove=move_info; // des que la souris bouge, on appelle la fonction move pour mettre a jour la position de la bulle.
//-->
