////	ON SELECTIONNE L'ELEMENT PAR SON ATTRIBUT "ID" OU "NAME"
////
function element(id_name)
{
	if(document.getElementById(id_name)!=undefined)				{ return document.getElementById(id_name); }
	else if(document.getElementsByName(id_name)[0]!=undefined)	{ return document.getElementsByName(id_name)[0]; }
	else														{ return false; }
}


////	ON DONNE UNE VALEUR A UN ELEMENT
////
function set_value(id_elem, valeur)
{
	element(id_elem).value = valeur;
}


////	ON RECUPERE LA VALEUR D'UN ELEMENT
////
function get_value(id_elem)
{
	return element(id_elem).value;
}


////	VERIFIE L'EXISTANCE D'UN ELEMENT
////
function existe(id_elem)
{
	if (element(id_elem))	{ return true; }
	else					{ return false; }
}


////	SELECTION D'UNE CHECKBOX / BOUTON RADIO
////
function set_check(id_elem, valeur)
{
	if(existe(id_elem))
	{
		if (valeur==true)			{ element(id_elem).checked = true; }
		else if (valeur==false)		{ element(id_elem).checked = false; }
		else if (valeur=="bascule")
		{
			if (element(id_elem).checked==true)	{ element(id_elem).checked = false; }
			else								{ element(id_elem).checked = true; }
		}
	}
}


////	CHECKBOX / BOUTON RADIO SELECTIONNE ?
////
function is_checked(id_elem)
{
	if (existe(id_elem) && element(id_elem).checked==true)	{ return true; }
	else													{ return false; }
}


////	NB DE CHECKBOX SELECTIONNEES (TABLEAU)
////
function nb_box_checked(id_elem)
{
	var checked = 0;
	tab_checkbox = document.getElementsByName(id_elem);
	for(i=0; i<tab_checkbox.length; i++)	{ if(tab_checkbox[i].checked==true)	checked++; }
	return checked
}


////	BASCULEMENT D'UNE CHECKBOX ET DU STYLE DU TEXTE ASSOCIE  (id_element=>element cliqué / id_reference=>base de l'identifiant du box et du txt / style=> style du text désélectionné)
////
function check_txt_box(id_element, id_reference, style_select)
{
	if(style_select==undefined)  style_select = "lien_select";
	id_txt = "txt_"+id_reference;
	id_box = "box_"+id_reference;
	type_select = element(id_element).type;
	if(is_enabled(id_box)==true)
	{
		// Clique texte : bascule valeur checkbox  /  change couleur du text
		if(type_select!="checkbox")		{ set_check(id_box,"bascule"); }
		if (is_checked(id_box)==true)	{ element(id_txt).className = style_select; }
		else							{ element(id_txt).className = "lien"; }
	}
}


////	INPUT ACTIVE ?
////
function is_enabled(id_elem)
{
	if (element(id_elem).disabled==false)	{ return true; }
	else									{ return false; }
}


////	ACTIVATION / DESACTIVATION D'UN INPUT (checkbox...)
////
function enable(id_elem, valeur)
{
	if (valeur==true)	{ element(id_elem).disabled = false; }
	else				{ element(id_elem).disabled = true; }
}


////	AFFECTATION D'UN STYLE CSS A UN ELEMENT
////
function set_css(id_elem, class_css)
{
	element(id_elem).className = class_css;
}


////	VERIFICATION D'UNE CLASS CSS A UN ELEMENT
////
function css_verif(id_elem, class_css)
{
	if (element(id_elem).className==class_css)	{ return true; }
	else										{ return false; }
}


////	CONFIRMATION AVANT REDIRECTION
////
function confirmer(text_confirm, adresse)
{
	if(confirm(text_confirm))	redir(adresse);
}


////	DONNE UNE COULEUR A UN ELEMENT
////
function set_couleur(id_elem, valeur, methode)
{
	if (methode=="background")	{ element(id_elem).style.backgroundColor = valeur; }
	else						{ element(id_elem).style.color = valeur; }
}


////	CONTROLE D'UN MAIL
////
function controle_mail(mail)
{
	verif = new RegExp("^([a-zA-Z0-9_-])+([.]?[a-zA-Z0-9_-]{1,})*@([a-z.])*([a-zA-Z0-9-_]{2,}[.])+[a-zA-Z]{2,5}$");
	return verif.test(mail);
}


////	CHANGEMENT D'UNE IMAGE
////
function change_img(id_elem, adresse_img)
{
	element(id_elem).src = adresse_img;
}


////	OUVERTURE D'UNE FENETRE
////
function popup(adresse, nom, width, height)
{
	if(nom==undefined)	nom = Math.floor(Math.random()*1000);
	if(width==undefined)	width = 50;
	if(height==undefined)	height = 50;
	window.open(adresse, nom, "width="+width+",height="+height+",left=100,top=100,scrollbars=yes,resizable=yes,directories=no,location=no,menubar=no,status=no,toolbar=no,dependent=yes");
}


////	REDIRECTION D'UNE PAGE
////
function redir(adresse)
{
	window.location.href = adresse;
}


////	 CONTRÔLE DE CONNEXION À L'AGORA
////
function controle_connexion(text_alert, login, passord)
{
	if (get_value("login")=="" || get_value("login")==login || get_value("password")=="" || get_value("password")==passord)	{ alert(text_alert);  return false; }
}


////	AFFICHAGE OU MASQUAGE D'UN DIV (valeur=true/false/bascule | type_display=inline/block)
////
function afficher(id_elem, valeur, type_display)
{
	// INITIALISATION
	if(valeur==null)		valeur = "bascule";
	if(type_display==null)	type_display = "inline";
	objet = element(id_elem);
	if (objet!=undefined) {
		// AFFICHE / MASQUE / BASCULE
		if(valeur==true)			{ objet.style.display = type_display; }
		else if(valeur==false)		{ objet.style.display = "none"; }
		else if(valeur=="bascule")	{
			if(objet.style.display==type_display)	{ objet.style.display = "none"; }
			else									{ objet.style.display = type_display; }
		}
	}
}


////	AFFICHAGE OU MASQUAGE D'UN DIV AVEC FADING
////
function afficher_dynamic(id_elem, type_affichage, afficher)
{
	if(afficher==undefined) {
		if(element(id_elem).style.display=="none")	{ afficher = true; }
		else										{ afficher = false; }
	}
	if(type_affichage==null || type_affichage=="show"){
		if(afficher==true)	{ $("#"+id_elem).slideDown(); }
		else				{ $("#"+id_elem).slideUp(); }
	}
	else if(type_affichage=="fade"){
		if(afficher==true)	{ $("#"+id_elem).fadeIn(200);  }
		else				{ $("#"+id_elem).fadeOut(200); }
	}
}


////	AFFICHAGE OU MASQUAGE DU MENU D'ELEMENT
////
function afficher_info_edit(id_elem, position_gauche)
{
	afficher(id_elem, true);
	if (element(id_elem).offsetWidth > 300)			{ element(id_elem).style.width = "300px"; }
	else if (element(id_elem).offsetWidth < 170)	{ element(id_elem).style.width = "170px"; }
	if (position_gauche=="1") {
		element(id_elem).style.width = "220px";
		element(id_elem).style.marginLeft = "-230px";
	}
}


////	INFOBULLE  &  INFOBULLE FIN
////
function bulle(message)
{
	////	On positionne l'infobulle
	function position_bulle(e)
	{
		//	Position de la souris
		posX = (navigator.appName.substring(0,3)=="Net") ? e.pageX : event.clientX+document.documentElement.scrollLeft;
		posY = (navigator.appName.substring(0,3)=="Net") ? e.pageY : event.clientY+document.documentElement.scrollTop;
		//	Repositionne l'infobulle si on est sur le bord de la page
		if(pageW < (posX + bulleW))	{ bulleX = posX - bulleW; }  // Si largeur page < (position souris + largeur bulle) :	position bulle = position souris - largeur bulle
		else						{ bulleX = posX; }
		if(pageH < (posY + bulleH))	{ bulleY = posY - bulleH; }  // Idem pour la hauteur
		else						{ bulleY = posY + 15; }
		//	On place l'infobulle
		bulle.style.left = bulleX + "px";
		bulle.style.top = bulleY + "px";
	}

	////	Affichage avec un temps de latence
	function affiche_bulle()
	{
		if(bulle.style.left.replace("px","")>1)		bulle.style.visibility = "visible";
	}

	////	S'il y a un message
	if(message!="")
	{
		////	Texte dans l'"infobulle"
		var bulle = element("infobulle");
		var txt_align	= (message.length > 30) ? "left;" : "center;";
		bulle.innerHTML = "<div class='infobulle_contenu' style=\'text-align:"+txt_align+"\'>"+message+"</div>";
		////	Largeur/hauteur de la bulle & de la page
		bulleW = bulle.offsetWidth;
		bulleH = bulle.offsetHeight;
		pageW = document.documentElement.clientWidth;
		pageH = document.documentElement.clientHeight;
		if(pageW==0)	pageW = document.body.clientWidth;
		if(pageH==0)	pageH = document.body.clientHeight;
		////	Position() et Affichage() de l'infobulle
		document.onmousemove = position_bulle;
		timeoutID_bulle = window.setTimeout(affiche_bulle,300);
	}
}

function bullefin()
{
	//// jdoc: réécriture stricte
	if(typeof(timeoutID_bulle)!=='undefined')
	{
		window.clearTimeout(timeoutID_bulle);
		element("infobulle").style.visibility = "hidden";
		document.onmousemove = null;
	}
}


////	DRAG & DROP
////
function DragDrop(nom_calque)
{
	////	Function Drag_Div
	function Drag_Div(e)
	{
		//	Position de la souris
		posX = (navigator.appName.substring(0,3)=="Net") ? e.pageX : event.clientX+document.documentElement.scrollLeft;
		posY = (navigator.appName.substring(0,3)=="Net") ? e.pageY : event.clientY+document.documentElement.scrollTop;
		//	Initialisation : Différence entre la position du calque & de la souris
		if(Drag_actif==false) {
			divX_origine = calque.style.left;
			divY_origine = calque.style.top;
			diffX = divX_origine.replace("px","") - posX;
			diffY = divY_origine.replace("px","") - posY;
			Drag_actif = true;
		}
		//	On replace le calque par rapport aux mouvements de la souris
		else {
			calque.style.left = (posX+diffX)+"px";
			calque.style.top = (posY+diffY)+"px";
		}
	}

	////	Function Drop_Div
	function Drop_Div()
	{
		document.onmousemove = null;
	}

	////	Drag_Div() a chaque mouvement de souris & Drop_Div() quant la souris est relachée
	calque = element(nom_calque);
	Drag_actif = false;
	document.onmousemove = Drag_Div;
	document.onmouseup = Drop_Div;
}


////	AJAX : FONCTION DE LANCEMENT D'UNE REQUETE XMLhttpRequest
////
function New_Http_Request(methode, page_requete, donnees)
{
	// On initialise l'objet
	var xhr_object = null;
	
	// XMLHttpRequest sous Firefox ou Internet Explorer
	if(window.XMLHttpRequest)		{ xhr_object = new XMLHttpRequest(); }
	else if(window.ActiveXObject)	{ xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); }
	
	// On lance la requete (true/false : asynchrone), on précise s'il s'agit d'un formulaire et on envoi les données si besoin
	xhr_object.open(methode, page_requete, false);
	if(methode=="POST")   { xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); }
	xhr_object.send(donnees);
	
	// On retourne le résultat
	if(xhr_object.readyState==4)    return Http_Request_Result = xhr_object.responseText;
}


////	RECUP' L'EXTENSION D'UN FICHIER
////
function extension(chemin_fichier)
{
	var tab_fichier = chemin_fichier.substring(chemin_fichier.lastIndexOf("\\")+1).split(".");
	if(tab_fichier.length > 0)	return tab_fichier[tab_fichier.length-1].toLowerCase();
}


////	VERIFIE SI C'EST UNE FICHIER "IMAGE"
////
function is_image(chemin_fichier)
{
	ext_img = extension(chemin_fichier);
	if(ext_img=="jpg" || ext_img=="jpeg" || ext_img=="jpe" || ext_img=="png" || ext_img=="gif" || ext_img=="bmp")	{ return true; }
	else																											{ return false; }
}


////	AFFICHER DU CONTENU DANS LA PAGE FANTOME
////
function contenu_page_fantome(contenu, nocloseicone, nobackground)
{
	if(nobackground!=null)	element("page_fantome").style.backgroundImage="url('')";
	if(nocloseicone!=null)	afficher("page_fantome_fermer",false);
	element("page_fantome_iframe").src = "";
	element("page_fantome_contenu").innerHTML = contenu;
	afficher("page_fantome",true);
}


////	AFFICHER UNE IFRAME DANS LA PAGE FANTOME
////
function iframe_page_fantome(url, pleine_page)
{
	// Affiche la page fantome
	afficher("page_fantome",true);
	// Nouvelle adresse demandée ? on charge l'iframe
	url_old_src = element("page_fantome_iframe").src.substring(element("page_fantome_iframe").src.lastIndexOf("/")+1);
	url_src = url.substring(url.lastIndexOf("/")+1);
	if(url_old_src=="" || url_old_src!=url_src)
	{
		// Affichage pleine page
		if(pleine_page==true) {
			element("page_fantome_iframe").style.width = "100%";
			element("page_fantome_iframe").style.margin = "0px";
			element("page_fantome_iframe").style.height = element("page_fantome").offsetHeight + "px";
		}
		// Affichage avec marges
		else {
			element("page_fantome_iframe").style.margin = "30px";
			element("page_fantome_iframe").style.height = (element("page_fantome").offsetHeight - 60) + "px";
		}
		// Charge L'iframe
		element("page_fantome_contenu").innerHTML = "";
		element("page_fantome_iframe").src = url;
	}
	// On masque la barre de scroll de la page principale
	document.body.style.overflow = "hidden";
}


////	MASQUER L'IFRAME DE LA PAGE FANTOME
////
function iframe_page_fantome_close()
{
	element('page_fantome_contenu').innerHTML = "";
	afficher('page_fantome',false);
	document.body.style.overflow = "auto";
}


////	EDITION D'UN ELEMENT DANS UNE IFRAME (page fantome) OU UN POPUP
////
function edit_iframe_popup(url)
{
	// Ie 7 : ne redimensionne pas correctement les iframes quant on est en basse résolution...
	special_ie7 =  (document.documentElement.clientHeight < 750 && version_ie() > 1 && version_ie() < 8)  ?  true  :  false;
	if(edition_popup==1 || special_ie7==true)	{ popup(url); }
	else										{ iframe_page_fantome(url); }
}


////	REDIMENSIONNE UNE IFRAME (page fantome) OU UN POPUP
////
function resize_iframe_popup(width, height)
{
	iframe = window.parent.element("page_fantome_iframe");
	url_iframe = (iframe.src) ? iframe.src.substring(iframe.src.lastIndexOf("/")+1) : "";
	url_window = window.location.href.substring(window.location.href.lastIndexOf("/")+1);
	// Dans un popup : redimensionne tout
	if(url_iframe!=url_window)		{ window.resizeTo(width, height); }
	// Dans une iframe : change uniquement la largeur
	else {
		iframe.style.width = width+"px";
		document.body.style.backgroundColor="transparent";
	}
}


////	URLENCODE POUR JAVASCRIPT
////
function urlencode(texte)
{
	texte = texte.replace('!', '%21');
	texte = texte.replace('"', '%22');
	texte = texte.replace('$', '%24');
	texte = texte.replace('%', '%25');
	texte = texte.replace('&', '%26');
	texte = texte.replace('\'', '%27');
	texte = texte.replace('(', '%28');
	texte = texte.replace(')', '%29');
	texte = texte.replace('*', '%2A');
	texte = texte.replace('+', '%2B');
	texte = texte.replace(',', '%2C');
	texte = texte.replace('/', '%2F');
	texte = texte.replace(':', '%3A');
	texte = texte.replace(';', '%3B');
	texte = texte.replace('?', '%3F');
	texte = texte.replace('\\', '%5C');
	texte = texte.replace('[', '%5B');
	texte = texte.replace(']', '%5D');
	texte = texte.replace('^', '%5E');
	texte = texte.replace('`', '%60');
	texte = texte.replace('{', '%7B');
	texte = texte.replace('|', '%7C');
	texte = texte.replace('}', '%7D');
	texte = texte.replace('~', '%7E');
	texte = texte.replace('=', '%3D');
	texte = texte.replace('£', '%A3');
	texte = texte.replace('§', '%A7');
	texte = texte.replace('@', '%40');
	return texte;
}


////	VERSION D'IE
////
function version_ie()
{
	if(navigator.appName=="Microsoft Internet Explorer") {
		var ms_version = navigator.appVersion.split("MSIE");
		return parseFloat(ms_version[1]);
	} else {
		return false;
	}
}

////	ANIMATION DU LOGO PRINCIPAL
////
function pulsate_logo_header()
{
	if(existe("logo_header_fond")==true && (version_ie()==false || version_ie() > 8)) {
		$("#logo_header_fond").effect("pulsate",{ times:2 },1000);
	}
}
