////	ON SELECTIONNE L'ELEMENT PAR SON ATTRIBUT "ID" OU "NAME"
////
function element(id_name)
{
	elem_id   = document.getElementById(id_name);
	elem_name = document.getElementsByName(id_name)[0];
	if(elem_id!=undefined  &&  elem_id!=null)			{ return elem_id; }
	else if(elem_name!=undefined && elem_name!=null)	{ return elem_name; }
	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)!=false)	{ 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-zA-Z0-9-_]{2,}[.])+[a-zA-Z]{2,5}$");
	return verif.test(mail);
}


////	CHERCHE UNE EXPRESSION DANS UNE CHAINE DE CARACTERES
////
function trouver(expression, chaine)
{
	if(chaine.search(expression)==-1)	return false;
	else								return true;
}


////	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)
{
	// Nom
	if(nom==undefined || nom==null)	 nom = Math.floor(Math.random()*1000);
	// taille
	taille_defaut = (trouver(".php",adresse)==false)  ?  500  :  50;
	if(width==undefined || width==null)		width = taille_defaut;
	if(height==undefined || height==null)	height = taille_defaut;
	// Lance le popup
	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";

	// AFFICHE / MASQUE / BASCULE
	if(valeur==true)			{ element(id_elem).style.display = type_display; }
	else if(valeur==false)		{ element(id_elem).style.display = "none"; }
	else if(valeur=="bascule"){
		if(element(id_elem).style.display==type_display)	{ element(id_elem).style.display = "none"; }
		else												{ element(id_elem).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);
	// Largeur entre 200 & 300 pixels
	if(element(id_elem).offsetWidth > 300)		{ element(id_elem).style.width = "300px"; }
	else if(element(id_elem).offsetWidth < 200)	{ element(id_elem).style.width = "200px"; }
	// Positionne à gauche?
	if(position_gauche=="1"){
		element(id_elem).style.width = "240px";
		element(id_elem).style.marginLeft = "-250px";
	}
}


////	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()
{
	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  :  PENSER A UTILISER urlencode() DANS CHAQUE VARIABLE LE NESSESSITANT !!
////
function requete_ajax(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();
}


////	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;
}


////	VERIFIE SI C'EST UNE FICHIER "VIDEO" LISIBLE
////
function is_video(chemin_fichier)
{
	if(ext_video=="mp4" || ext_video=="mpeg" || ext_video=="mpg" || ext_video=="avi" || ext_video=="flv" || ext_video=="ogv" || ext_video=="webm" || ext_video=="wmv" || ext_video=="mov")
		return true;
	else
		return false;
}


////	FONCTION IN_ARRAY() SIMILAIRE A PHP
////
function in_array(array, p_val)
{
    for(var i=0, l=array.length; i < l; i++)
    {
        if(array[i]==p_val){
            rowid = i;
            return true;
        }
    }
    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 = "";
	if(trouver("video",element("page_fantome_iframe").src)==true)	element("page_fantome_iframe").src = "";	// réinitialise pour ne pas faire tourner la video en fond..
	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 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 / UN POPUP
////
function resize_iframe_popup(width, height)
{
	// Page de l'iframe (si c'est le cas) et de la page principale
	iframe = window.parent.element("page_fantome_iframe");
	page_iframe = (iframe.src)  ?  iframe.src.substring(iframe.src.lastIndexOf("/")+1)  :  "";
	page_principale = window.location.href.substring(window.location.href.lastIndexOf("/")+1);
	// Popup : redimensionne tout  (Taille en pourcentage/pixels)
	if(page_iframe!=page_principale){
		if(isNaN(width)==true)	{ width = (screen.width / 100 ) * width.replace("%",""); }
		if(isNaN(height)==true)	{ height = (screen.height / 100 ) * height.replace("%",""); }
		window.resizeTo(width, height);
	}
	// Iframe : change uniquement la largeur
	else{
		iframe.style.width = width+"px";
		document.body.style.backgroundColor="transparent";
	}
}


////	CONTENU DU TinyMCE VIDE ?
////
function tinymce_vide(nom_champ)
{
	contenu = tinyMCE.get(nom_champ).getContent();
	if(contenu.length==0 || contenu=="<div>&nbsp;</div>")	return true;
}


////	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;
}


////	ANCRE NOMMEE : SCROLL VERS UN ELEMENT AVEC JQUERY
////
function goToByScroll(id_elem)
{
	$('html,body').animate({scrollTop: $("#"+id_elem).offset().top},'slow');
}


////	CHANGE LA COULEUR D'UN INPUT <SELECT>  (TEXT+BACKGROUND)
////
function style_select(input_name)
{
	input = element(input_name);
	element(input_name).style.color = element(input_name).options[element(input_name).selectedIndex].style.color;
	element(input_name).style.fontWeight = element(input_name).options[element(input_name).selectedIndex].style.fontWeight;
	element(input_name).style.backgroundColor = element(input_name).options[element(input_name).selectedIndex].style.backgroundColor;
}


////	ACTIONS AVEC LE CLAVIER
////
function action_clavier(event)
{
	// DEFILEMENT D'IMAGES AVEC LE CLAVIER  (Image precedante / suivante / rotation gauche / rotation droite)
	if(trouver("images.php", window.parent.element("page_fantome_iframe").src))
	{
		iframe_img = window.parent.page_fantome_iframe;
		if(event.keyCode==37)						iframe_img.affiche_img(iframe_img.element("id_img_pre").value);
		if(event.keyCode==39 || event.keyCode==32)	iframe_img.affiche_img(iframe_img.element("id_img_suiv").value);
		if(event.keyCode==38)						iframe_img.affiche_img(iframe_img.element("id_fichier").value, 0, iframe_img.element("rotation_gauche").value);
		if(event.keyCode==40)						iframe_img.affiche_img(iframe_img.element("id_fichier").value, 0, iframe_img.element("rotation_droite").value);
	}
}

////	REPLACER ICONE/MENU EN BAS D'UN BLOCK D'ELEMENT
////
function replacer_bas_block(id_block_principal, id_block_bas)
{
	element(id_block_bas).style.marginTop = (element(id_block_principal).offsetHeight - element(id_block_bas).offsetHeight)+'px';
}


////	TYPE DE NAVIGATEUR
////
function navigateur()
{
	nav = navigator.userAgent.toLowerCase();
	if(trouver("msie",nav))				return "ie";
	else if(trouver("firefox",nav))		return "firefox";
	else if(trouver("chrome",nav))		return "chrome";
	else if(trouver("safari",nav))		return "safari";
	else if(trouver("webkit",nav))		return "webkit";
	else if(trouver("opera",nav))		return "opera";
	else if(trouver("netscape",nav))	return "netscape";
}


////	VERSION D'INTERNET EXPLORER
////
function version_ie()
{
	if(navigateur()=="ie") {
		var ms_version = navigator.appVersion.split("MSIE");
		return parseFloat(ms_version[1]);
	}
}
