﻿/* JS Document pour les pages du Parlement europeen */
/* Scripts gerant les principaux add on a appliquer aux sites de la galaxie */

/* ======================================================================================================== */
/* ACTIVATION DES SCRIPTS ================================================================================= */
/* ======================================================================================================== */
	var widget_js			= true;

/* ======================================================================================================== */
/* MenuAdaptator ========================================================================================== */
/* ======================================================================================================== */
/* Classe JS gerant l'espacement des boutons du menu principal du site */

	function MenuAdaptator(){
		// Fonction autogeree >> ne necessitant pas d'etre parametree
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new MenuAdaptator();
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(){
			// Verification a l'acces aux scripts de gestion et creation
			if(typeof(htmanager_js) == "boolean" && htmanager_js){
				// Sauvegarde des references
				var Html					= new HTManager();
				// Identification du menu
				var m						= document.getElementById("menunavigation");
				if(Html.check(m)){
					var s;
					var l;
					// Recuperation des blocs de liens
					var a					= m.getElementsByTagName("a");
					var n					= a.length;
					// Traitement des liens 
					// >> recuperation de la taille reelle du texte et assignation au bloc
					for(var i = 0; i < n; i++){
						s					= a[i].getElementsByTagName("span");
						if(s.length > 0){
							s				= s[0];
							l				= s.getElementsByTagName("span")[0];
							s.style.width	= l.offsetWidth + "px";
						}
					}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init();
	};

/* ======================================================================================================== */
/* MenuViewer ============================================================================================= */
/* ======================================================================================================== */
/* Classe JS gerant l'ouverture et la fermeture du menu secondaire du site */

	function MenuViewer(Lang, Planet, Opened){
		// Parametres autorises lors de la creation de la classe JS:
			// 	Lang						:String			>> version linguistique (encode sur deux caracteres [exemple : en])
			// 	Planet						:String			>> nom de reference de la planete afin de cibler le bon cookie
			// 	Opened						:Boolean		>> forcage de l'etat initial du menu (si le parametre est transmis, il ecrasera la valeur stoquee dans le cookie [optionnel])
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new MenuViewer("en", "news");
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Variables
		var This;
		var Shift			= false;
		var Timer;
		var Name			= new Object();
		var Animated		= true;
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(L, P, O){
			// Verification a l'acces aux scripts de gestion et creation et de l'acces aux cookies
			if(typeof(htmanager_js) == "boolean" && htmanager_js && navigator.cookieEnabled){
				// Sauvegarde des references
				This								= this;
				var Html							= new HTManager();
				var Focus							= false;
				// Verification de la presence d'un deuxieme menu
				var Body							= document.getElementById("body");
				if(Html.check(Body)){
					if(String(Body.className).match("ep_2headmenu")){
						// Identification des menus
						var mp						= document.getElementById("menunavigation");
						var ms						= document.getElementById("submenu");
						var mc						= document.getElementById("submenubox");
						if(Html.check(mp) && Html.check(ms) && Html.check(mc)){
							// Recuperation des blocs du menu principal
							var mb					= null;
							var mn					= null;
							var l					= mp.getElementsByTagName("li");
							var n					= l.length;
							// Identification de l'élement selectionné
							for(var i = 0; i < n; i++){ 
								if(l[i].className == "ep_selected"){
									mb 					= l[i];
									mn					= (i +1 < n)? l[i +1] : null;
									break;
								}
							}
							// Recherche du premier lien du sous menu pour l'assignation du focus
							var a1					= mc.getElementsByTagName("a");
							if(a1.length > 0) a1	= a1[0];
							// Verification de l'existence d'un element selectionne et d'un lien dans le sous menu
							if(Html.check(mb) && Html.check(a1)){
								var a2				= mb.getElementsByTagName("a");
								if(a2.length > 0) a2= a2[0];
								var a3				= (mn != null)? mn.getElementsByTagName("a") : [];
								a3					= (a3.length > 0)? a3[0] : null;
								// Identification de la planete
								if(typeof(P) == "string" && String(P).length > 0) Name = {name:P, length:P.length + 19};
								// Identification de l'etat du menu
								var menuopened;
								if(typeof(O) == "boolean" && O != null)	menuopened	= O;
								else{
									// Recuperation de la valeur contenue dans le cookie
									menuopened		= getCookie();
									// Verification de la valeur obtenue
									menuopened		= (menuopened != null && Number(menuopened) == 0)? false : true;
								}
								// Sauvegarde de l'information dans le cookie
								setCookie((menuopened)? 1 : 0);
								// Texte linguistique
								var sl;
								var sto;
								var stc;
								switch(L){
									case "bg":	sl	= "Затвори";	sto	= "Отвори менюто";				stc	= "Затвори менюто";			break;
									case "cs":	sl	= "Zavřít";		sto	= "Zobrazit hlavní nabídku";	stc	= "Zavřít hlavní nabídku";	break;
									case "da":	sl	= "Luk";		sto	= "Åbn menuen";					stc	= "Luk menuen";				break;
									case "de":	sl	= "Schließen";	sto	= "Menü ausklappen";			stc	= "Menü einklappen";		break;
									case "el":	sl	= "Κλείσιμο";	sto	= "Άνοιγμα Μενού";				stc	= "Κλέισιμο Μενού";			break;
									case "es":	sl	= "Cerrar";		sto	= "Abrir el menú";				stc	= "Cerrar el menú";			break;
									case "et":	sl	= "Sulge";		sto	= "Ava menüü";					stc	= "Sulge menüü";			break;
									case "fi":	sl	= "Sulje";		sto	= "Avaa valikko";				stc	= "Sulje valikko";			break;
									case "fr":	sl	= "Fermer";		sto	= "Ouvrir le menu";				stc	= "Fermer le menu";			break;
									case "hu":	sl	= "Bezár";		sto	= "Menü megnyitása";			stc	= "Menü bezárása";			break;
									case "it":	sl	= "Chiudere";	sto	= "Apri il menu";				stc	= "Chiudi il menu";			break;
									case "lt":	sl	= "Uždaryti";	sto	= "Atverti meniu";				stc	= "Užverti meniu";			break;
									case "lv":	sl	= "Aizvērt";	sto	= "Atvērt izvēlni";				stc	= "Aizvērt izvēlni";		break;
									case "mt":	sl	= "Agħlaq";		sto	= "Iftaħ il-menu";				stc	= "Agħlaq il-menu";			break;
									case "nl":	sl	= "Sluiten";	sto	= "Menu openklappen";			stc	= "Menu dichtklappen";		break;
									case "pl":	sl	= "Zamknij";	sto	= "Otwórz menu";				stc	= "Zamknij menu";			break;
									case "pt":	sl	= "Fechar";		sto	= "Abrir o menu";				stc	= "Fechar o menu";			break;
									case "ro":	sl	= "Închide";	sto	= "Deschide meniul";			stc	= "Închide meniul";			break;
									case "sk":	sl	= "Zatvoriť";	sto	= "Otvoriť menu";				stc	= "Zatvoriť menu";			break;
									case "sl":	sl	= "Zapri";		sto	= "Odpri meni";					stc	= "Zapri meni";				break;
									case "sv":	sl	= "Stäng";		sto	= "Öppna menyn";				stc	= "Stäng menyn";			break;
									case "en":
									default:	sl	= "Close";		sto	= "Open menu";					stc	= "Close menu";
								}
								// Ajout du bouton "fleche" dans le bouton sélectionné menu principal
								var t				= Html.createNode("span", " ");
								t					= Html.createNode("span", {className:"ep_endmenu"}, t);
								mp.parentNode.appendChild(t);
								// Ajout du bouton "fleche" dans le bouton sélectionné menu principal
								var bt				= Html.createNode("span", (menuopened)? stc : sto);
									t				= Html.createNode("span", bt);
									t				= Html.createNode("span", t);
								var ba				= Html.createNode("div", {className:(menuopened)? "ep_closebtn" : "ep_openbtn", tabIndex:"0", title:(menuopened)? stc : sto}, t);
								mb.appendChild(ba);
								// Ajout du bouton "Fermer" dans le menu secondaire
									t				= Html.createNode("span", sl);
									t				= Html.createNode("span", t);
								var bc				= Html.createNode("div", {className:"ep_closebtn", tabIndex:"0", title:stc}, t);
								mc.appendChild(bc);
								// Calcul de la dimension du menu
								t					= ms.offsetHeight; 
								// Initialisation de l'affichage du sous menu
								Body.className		+= " ep_jsmenu";
								ms.style.height		= (menuopened)? t + "px" : "10px";
								mc.style.display	= (menuopened)? "" : "none";
								// Ajout des actions d'ouverture/fermeture
								ba.onclick			= function(){ This.change(false, ms, mc, ba, bt, sto, stc, 10, t, a1, a2); 	return(false); };
								bc.onclick			= function(){ This.change(false, ms, mc, ba, bt, sto, stc, 10, t, a1, a2); 	return(false); };
								ba.onkeypress		= function(e){ if(Html.getKey(e) == 13 || Html.getKey(e) == 32){ This.change(true, ms, mc, ba, bt, sto, stc, 10, t, a1, a2); } };
								bc.onkeypress		= function(e){ if(Html.getKey(e) == 13 || Html.getKey(e) == 32){ This.change(true, ms, mc, ba, bt, sto, stc, 10, t, a1, a2); } };
								// Gestion du focus
								if(Focus){
									// Ajout des actions de navigation
									ba.onblur			= function(e){ This.navigation(e, null, a1, ms, 10);	return(false); 	};
									ba.onkeydown		= function(e){ This.shifted(e); 						return(true); 	};
									a1.onblur			= function(e){ This.navigation(e, ba, null, ms, 10);	return(false); 	};
									a1.onkeydown		= function(e){ This.shifted(e); 						return(true); 	};
									if(a3 != null){
										bc.onblur		= function(e){ This.navigation(e, null, a3, ms, 10);	return(false); 	};
										bc.onkeydown	= function(e){ This.shifted(e); 						return(true); 	};
										mn				= document.getElementById("maincontent");
										a3.onblur		= function(e){ This.navigation(e, null, mn, ms, 10);	return(false); 	};
										a3.onkeydown	= function(e){ This.shifted(e); 						return(true); 	};
									}
								}
								// Autorisation d'acces aux fonctionnalites
								Animated			= false;
							}
						}
					}
				}
			}
		};	
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Changement de l'affichage
		this.change = function(KeyFocus, submenu, content, button, label, titleopen, titleclose, minHeight, maxHeight, LinkOpen, LinkClose){
			if(!Animated && typeof(submenu) == "object" && typeof(button) == "object"){
				Animated				= true;
				clearTimeout(Timer);
				if(submenu.style.height	== (minHeight + "px")){	// Demande d'ouverture du menu
					submenu.style.height	= minHeight + "px";
					content.style.display	= "";
					Timer					= setTimeout(function(){ This.animopen(KeyFocus, submenu, content, button, label, titleclose, maxHeight, LinkOpen); }, 10);
				}else{											// Demande de fermeture du menu
					submenu.style.height	= maxHeight + "px";
					content.style.display	= "";
					Timer					= setTimeout(function(){ This.animclose(KeyFocus, submenu, content, button, label, titleopen, minHeight, LinkClose); }, 10);
				}
			}
		};
		// Changement de l'affichage
		this.animopen = function(KeyFocus, submenu, content, button, label, title, target, lnk){
			if(parseFloat(submenu.style.height) >= target){
				// Remise a niveau du menu
				content.style.display	= "";
				submenu.style.height	= target + "px";
				// Changement de l'etat du bouton
				button.className		= "ep_closebtn";
				button.title			= title;
				label.innerHTML			= title;
				// Sauvegarde de l'etat
				setCookie(1);
				// Assignation du focus
				if(KeyFocus) lnk.focus();
				// Deblocage des acces d'animation
				Animated				= false;
			}else{
				submenu.style.height	= (parseFloat(submenu.style.height) + 10) + "px";
				Timer					= setTimeout(function(){ This.animopen(KeyFocus, submenu, content, button, label, title, target, lnk); }, 10);
			}
		};
		this.animclose = function(KeyFocus, submenu, content, button, label, title, target, lnk){
			if(parseFloat(submenu.style.height) <= target){
				// Remise a niveau du menu
				content.style.display	= "none";
				submenu.style.height	= target + "px";
				// Changement de l'etat du bouton
				button.className		= "ep_openbtn";
				button.title			= title;
				label.innerHTML			= title;
				// Sauvegarde de l'etat
				setCookie(0);
				// Assignation du focus
				if(KeyFocus) lnk.focus();
				// Deblocage des acces d'animation
				Animated				= false;
			}else{
				submenu.style.height	= (parseFloat(submenu.style.height) - 10) + "px";
				Timer					= setTimeout(function(){ This.animclose(KeyFocus, submenu, content, button, label, title, target, lnk); }, 10);
			}
		};	
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Piratage de la navigation dans le menu
		this.navigation = function(Event, Targetshift, Target, Menu, Min){
			var shifted;
			// Analyse de la valeur de l'evenement. Firefox et Chrome ne renseignent pas l'information pour les evenements de focus
			if(Event.shiftKey) 	shifted	= Event.shiftKey;
			else 				shifted	= Shift;
			if(!Animated && parseFloat(Menu.style.height) > Min){
				if(shifted && Targetshift != null)	setTimeout(function(){ Targetshift.focus(); }, 1);
				else if(!shifted && Target != null)	setTimeout(function(){ Target.focus(); }, 1);
			}
		};
		// Sauvegarde de l'etat actif de la touche "shift" pour Firefox et Google Chrome
		this.shifted = function(e){	Shift	= e.shiftKey;	}
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Sauvegarde de l'etat d'ouverture du menu dans un cookie
		function setCookie(value){
			// Creation de la date d'expiration (1an)
			var d 	= new Date()
			var e	= new Date();
        	e.setTime(d.getTime() + (365*24*60*60*1000));
			// Remplacement de la valeur
			var s	= (Name.name == "template")? "" : ("; path=/" + Name.name);
			document.cookie				= "europarl" + Name.name  + "menuviewer=" + encodeURIComponent(value) + "; expires=" + e.toGMTString() + s;
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Recuperation de l'etat d'ouverture du menu depuis un cookie
		function getCookie(){
			if(typeof(document.cookie) == "string" && String(document.cookie).length > 0 && document.cookie.indexOf("europarl" + Name.name  + "menuviewer=") >= 0){
				return(String(document.cookie).charAt(String(document.cookie).indexOf("europarl" + Name.name  + "menuviewer=") + Name.length));
			}else{
				return(null);
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init(String(Lang).toLowerCase(), Planet, Opened);
	};

/* ======================================================================================================== */
/* MenuAlphabetic ========================================================================================= */
/* ======================================================================================================== */
/* Classe JS gerant l'ouverture et la fermeture du menu secondaire du site */

	function MenuAlphabetic(){
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
			// SwitchClass					>> managetag.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(){
			// Verification a l'acces aux scripts de gestion et creation
			if(typeof(managetag_js) == "boolean" && managetag_js && typeof(htmanager_js) == "boolean" && htmanager_js){
			// Sauvegarde des references
				var H					= new HTManager();
				// Identification du menu
				var m					= document.getElementById("submenubox");
				if(H.check(m)){
					// Recuperation des balises
					var t				= null;
					var i;
					var l				= m.getElementsByTagName("div");
					var n				= l.length;
					// Recherche de la balise du menu en forme alphabetique
					for(i = 0; i < n; i++){	if(l[i].className == "ep_alphabeticmenu"){	t = l[i]; break; } }
					// Verification de la presence du menu
					if(t != null){
						var r			= null;
						var a			= new Array();
						// Recherche de l'ancre presente dans l'adresse de la page
						var init		= String(location.href);
						if(init.indexOf("#") > 0 && init.indexOf("#") +1 < init.length){
							init		= init.substring(init.indexOf("#") +1);
							if(init != "fulllist" && !H.check(document.getElementById(init))) init = null;
						}else{
							init		= null;
						}
						// Fonction de traitement
						function searchtag(L){
							// Recherche du lien
							var B		= L.getElementsByTagName("a");
							if(B.length > 0){
								B		= B[0];
								// Recuperation du contenu associe au lien
								var U	= String(B.href).indexOf("#");
									U	= String(B.href).substring(U +1);
								var C	= document.getElementById(U);
								// Verification de l'acces
								if(H.check(B) && (H.check(C) || Boolean(String(U).match("fulllist")))){
									// Sauvegarde de l'information
									if(Boolean(String(U).match("fulllist"))){
										a.push({button:B, content:null, menu:L, 
												full:true, 
												selected:(init == null),
												initcss:""});
									}else{
										a.push({button:B, content:C, menu:L, 
												full:false, 
												selected:(init != null && Boolean(String(U).match(init))), 
												initcss:C.className});
										// Suppression de l'ancre pour eviter le scroll vertical
										C.id	= "";
									}
								}
							}
						};
						function addaction(E, M){
							// Creation de la liste
							var A		= new Array();
							// Traitement du bouton en fonction de s'il est "full" ou non
							if(!a[E].full){
								for(var e = 0; e < M; e++){
									if(!a[e].full){
										if(e == E){
											A.push({id:a[e].menu, csstarget:"ep_selected"});
											A.push({id:a[e].content, csstarget:a[e].initcss});
										}else if(!a[e].full){
											A.push({id:a[e].menu, csstarget:""});
											A.push({id:a[e].content, csstarget:"ep_hidden"});
										}
									}
								}
							}else{
								for(var e = 0; e < M; e++){
									A.push({id:a[e].menu, csstarget:(e == E)? "ep_selected" : ""});
									if(!a[e].full) A.push({id:a[e].content, csstarget:a[e].initcss});
								}
							};
							// Ajout de l'evenement
							S.addEventFct(a[E].button, A, a[E].selected, false, false);
						};
						// Recherche des liens
						l				= t.getElementsByTagName("li");
						n				= l.length;
						for(i = 0; i < n; i++){ searchtag(l[i]); }
						// Traitement des liens
						if(a.length > 1){
							n			= a.length;
							var S		= new SwitchClass();
							// Traitement des elements
							for(i = 0; i < n; i++){ addaction(i, n); }
						}
					}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init();
	};

/* ======================================================================================================== */
/* MenumoreViewer ========================================================================================= */
/* ======================================================================================================== */
/* Classe JS gerant la creation et l'affichage du sous menu "more" de l'entete d'apres les liens presents dans le footer */

	function MenumoreViewer(DisplayTitle){
		// Fonction autogeree >> ne necessitant pas d'etre parametree
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Parametres autorises lors de la creation de la classe JS:
			// 	DisplayTitle				:Boolean		>> affichage de titre present dans le footer
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
			// DisplayControl				>> managetag.js
			// SwitchClass					>> managetag.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new MenumoreViewer(true);
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Variables
		var This;
		var Html;
		var Switch			= null;
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(t){
			// Verification a l'acces aux scripts de gestion et creation
			if(typeof(managetag_js) == "boolean" && managetag_js && typeof(htmanager_js) == "boolean" && htmanager_js){
				// Sauvegarde des references
				This					= this;
				Html					= new HTManager();
				// Identification du menu
				var m					= document.getElementById("menumore");
				var a					= document.getElementById("footermenusite");
				var g					= document.getElementById("footermenugalaxy");
				if(Html.check(m) && Html.check(a) && Html.check(g)){
					// Analyse de la demande d'affichage des sous titres
					t					= (typeof(t) != "boolean" || t);
					// Identification du bouton d'ouverture
					var s				= m.getElementsByTagName("a");
					s					= (s.length > 0)? s[0] : null;
					// Creation du sous menu deroulant
						var n			= new Array();
						// Conteneur
						var d			= Html.createNode("div");
						m.appendChild(d);
						// Recherche des blocs de contenus
						var l			= new Array();
						var i;
						var j;
						// Recherche des conteneurs de liens du footer du site
						var c			= a.getElementsByTagName("div");
						var k			= c.length;
						for(i = 0; i < k; i++){		if(c[i].className.match("ep_column")) l.push(c[i]);	}
						// Recuperation des liens du footer du site
						c				= l;
						k				= c.length;
						var o;
						for(i = 0; i < k; i++){
							l			= c[i].childNodes;
							o			= l.length;
							for(j = 0; j < o; j++){
								if(l[j].nodeType == 1){
									if(	t && String(l[j].nodeName).toLowerCase() == "div" && 
										l[j].className == "ep_title" && String(l[j].innerHTML).length > 1)	n.push({type:0, value:l[j]});
									else if(String(l[j].nodeName).toLowerCase() == "ul")	n.push({type:1, value:l[j].getElementsByTagName("a")});
								}
							}
						}
						// Recherche du lien "A a Z"
						c				= g.getElementsByTagName("a");
						j				= /\/portal\/[a-z][a-z]\/a-z/gi;
						k				= c.length -1;
						for(i = k; i > 0; i--){
							if(j.test(c[i].href)){
								// Ajout du titre
								o		= 0;
								j		= c[i].parentNode;
								while(o < 10 && String(j.tagName).toLowerCase() != "ul"){ j = j.parentNode;	o += 1;	}
								if(String(j.tagName).toLowerCase() == "ul"){
									o	= 0;
									while(o < 10 && (j.nodeType != 1 || String(j.tagName).toLowerCase() != "div")){  j = j.previousSibling;	o += 1;	}
									if(Html.check(j)){
										if(String(j.tagName).toLowerCase() == "div" && j.className == "ep_title") n.push({type:0, value:j});
									}
								}
								// Ajout du lien
								n.push({type:1, value:[c[i]]});
								break;
							}
						}
						// Integration des liens
						var ok			= false;
						var p			= d;
						var q;
						t				= new Array();
						k				= n.length;
						for(i = 0; i < k; i++){
							if(n[i].type == 0){		// Titre
								p		= Html.createNode("div", {className:n[i].value.className}, Html.cleanText(n[i].value.innerHTML));
								t.push(p);
								if(n[i].value.innerHTML != "&nbsp;") d.appendChild(p);
							}else{					// Element de liste
								ok		= true;
								// Verification de l'existance d'une liste deja existante
								if(String(p.tagName).toLowerCase() != "ul"){
									p	= Html.createNode("ul");
									t.push(p);
									d.appendChild(p);
								}
								// Integration des liens
								l		= n[i].value;
								o		= l.length;
								for(j = 0; j < o; j++){
									q	= Html.createNode("li", Html.createNode("a", {href:l[j].href, target:l[j].target}, Html.cleanText(l[j].innerHTML)));
									p.appendChild(q);
								}
							}
						}
					// Verification de la necessite du menu	
					if(Html.check(s) && ok){
						// Convertion du lien
						p				= s.innerHTML;
						m.removeChild(s);
						s				= Html.createNode("span", s.innerHTML);
						m.insertBefore(s, d);
						t.push(s);
						t.push(m);
						t.push(d);
						// Initialisation de la classe de fermeture via clic exterieur
						Switch			= new SwitchClass();
						// Ajout de la fermeture via clic exterieur
						var f			= function(e){	This.hide(e, s, m, d, [t.length, t]) };
						if(window.addEventListener)			window.addEventListener("click", 	f, false);
						else if(document.addEventListener) 	document.addEventListener("click", 	f, false);
						else if(document.attachEvent)		document.attachEvent("onclick",		f);
						// Ajout des fonctionnalites du bouton d'affichage
						l				= new DisplayControl(true);
						l.addEventFct({id:s, cssopen:"ep_open", cssclose:"ep_close"}, 
									  [{id:m, cssopen:"ep_selected", cssclose:""}, {id:d, cssopen:"", cssclose:"ep_hidden"}], 
									  true, true, true, true);
					}
				}
			};
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.hide = function(e, s, m, d, l){
			var ok	= true;
			// Identification de la balise appelante
			var t	= null;
			if(e.target)				t	= e.target;
			else if(e.srcElement)		t	= e.srcElement;
			// Verification que les variables soient correctes
			if(t != null && typeof(l) == "object"){
				// Verification que la balise ne fait pas partie du menu
				for(var i = 0; i < l[0]; i++){
					if(t == l[1][i]) ok		= false;
				}
				// Lancement du traitement
				if(ok && Switch != null) Switch.switcher([{id:s, csstarget:"ep_close"}, {id:m, csstarget:""}, {id:d, csstarget:"ep_hidden"}]);
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init(DisplayTitle);
	};

/* ======================================================================================================== */
/* LanguageSelector ======================================================================================= */
/* ======================================================================================================== */
/* Classe JS gerant la convertion du selecteur de langue pour la suppression du bouton d'envoi */

	function LanguageSelector(){
		// Fonction autogeree >> ne necessitant pas d'etre parametree
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
			// SelectConvert				>> managetag.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new LanguageSelector();
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(){
			// Verification a l'acces aux scripts de gestion et creation
			if(typeof(managetag_js) == "boolean" && managetag_js){
				var s	= new SelectConvert();
					s.addEventFct("langbox", "langbox_select", "langbox_btn", true);
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init();
	};

/* ======================================================================================================== */
/* SearchmenuControler ==================================================================================== */
/* ======================================================================================================== */
/* Classe JS gerant la convertion du selecteur de langue pour la suppression du bouton d'envoi */

	function SearchmenuControler(){
		// Fonction autogeree >> ne necessitant pas d'etre parametree
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
			// SelectConvert				>> managetag.js
			// FieldMessage					>> managetag.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new SearchmenuControler();
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Variables
		var This;
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction initialisant le menu de recherche
		this.init = function(){
			// Verification a l'acces aux scripts de gestion et creation
			if(typeof(managetag_js) == "boolean" && managetag_js){
				This						= this;
				var Html					= new HTManager();
				var m						= document.getElementById("searchmenubox");
				if(Html.check(m)){
					var i;
					var s;
					var t;
					var a;
					var l;
					var j;
					var k;
					var ref					= new Array();
					// Sauvegarde des references
					var Select				= new SelectConvert();
					var Field				= new FieldMessage();
					// Recherche de fieldset a convertir
					a						= new Array();
					s						= m.getElementsByTagName("fieldset");
					l						= s.length;
					for(i = 0; i < l; i++){	a.push(s[i]); }
					for(i = 0; i < l; i++){
						t					= null;
						if(String(a[i].className).match("ep_adaptationradio_")) 	t = manageRadioElement(Html, a[i]);
						if(t != null) ref.push(t);
					}
					// Sauvegarde de la longueur de la liste a traiter
					j						= ref.length;
					// Recherche de selecteur a convertir (en double selecteurs) [selecteurs convertis dans la fonction]
					a						= new Array();
					s						= m.getElementsByTagName("select");
					l						= s.length;
					for(i = 0; i < l; i++){	a.push(s[i]); }
					for(i = 0; i < l; i++){
						t					= null;
						if(String(a[i].className).match("ep_adaptationselect")) 	manageSelectElement(Html, Select, m, a[i]);
					}
					// Convertion des champs texte
					a						= m.getElementsByTagName("input");
					l						= a.length;
					for(i = 0; i < l; i++){ Field.addEventFct(a[i]);	}
					// Identification des selecteurs
					s						= m.getElementsByTagName("select");
					l						= s.length;
					a						= new Array();
					for(i = 0; i < l; i++){	a.push(s[i]); }
					// Fonction ajoutant l'action au selecteur
					function setAction(list, button, index){
						if(list == null){
							Select.addEventFct(m, button, null, false, index);
						}else{
							Select.addEventFct(m, button, null, true, index, [true, function(value){ This.change_initradio(list, value, null); }, true]);
						}
					}
					// Convertion des selecteurs originaux et crees pour le choix par radio
					for(i = 0; i < l; i++){
						// Identification des balises dont il faut modifier les index
						s					= new Array();
						t 					= a[i].parentNode;
						while(!String(t.className).match("ep_menubox")){
							s.push(t);
							t				= t.parentNode;
						}
						// Activation de la transformation
						k					= null;
						for(t = 0; t < j; t++){
							if(ref[t].reference	== a[i].id){ k = ref[t].target; break; }
						}
						// Ajout de l'action
						setAction(k, a[i], s);
					}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction convertissant les champs en selecteur associes a des champs radio en deux selecteurs
		function manageRadioElement(H, F){
			var R				= null;
			// Analyse du type de filtre a obtenir
			var ref				= String(F.className);
			ref					= ref.substring(ref.indexOf("ep_adaptationradio_"));
			ref					= ref.replace("ep_adaptationradio_", "");
			// Objet de stockage
			var o				= new Array();
			// Recuperation des donnees
			var i 				= F.getElementsByTagName("input");
			var l 				= F.getElementsByTagName("label");
			var m				= i.length;
			var n				= l.length;
			var a;
			var b;
			var r;
			var s;
			var t;
			for(a = 0; a < m; a++){
				// Verification du type de balise
					if(i[a].type == "radio" && i[a].name == ref){
					r			= null;
					t			= null;
					// Recuperation du libelle
					for(b = 0; b < n; b++){	if(l[b].htmlFor == i[a].id){	r = l[b]; } }
					// Identification de la cible
					t			= String(i[a].className);
					if(t.match("ep_filter_none")){
						s		= "none";
						t		= "none";
					}else if(t.match("ep_filter_empty")){
						s		= "empty";
						t		= "empty";
					}else{
						t		= t.substring(t.indexOf("ep_filter_"));
						t		= t.replace("ep_filter_", "");
						t		= document.getElementById(t);
					}
					if(H.check(r) && (H.check(t) || t == "empty" || t == "none")){
						// Identification du label de la cible
						if(H.check(t)){ for(b = 0; b < n; b++){	if(l[b].htmlFor == t.id){	s = l[b]; } } }
						// Sauvegarde de l'info
						o.push({labelbtn:Html.cleanText(r.innerHTML), tagbtn:i[a], labeltarget:s, tagtarget:t});
					}
				}
			}
			// Traitement des champs
			if(o.length > 0){
				R				= new Object();
				m				= o.length;
				// Creation du nouveau selecteur de filtre
					// Creation du selecteur
					r			= false;
					s			= H.createNode("select", {className:"ep_field", id:ref});
					R.reference	= ref;
					for(b = 0; b < m; b++){
						// Creation de l'option
						t	= H.createNode("option", {value:o[b].tagbtn.value}, o[b].labelbtn);
						// Verification de l'etat selectionne
						if(o[b].tagbtn.checked || o[b].tagbtn.checked == "checked"){ t.selected = "selected"; r = true; R.selected = b; }
						s.appendChild(t);
					}
					if(!r) s.className = s.className + " ep_empty";
					t			= H.createNode("div", s);
					t			= H.createNode("div", {className:"ep_data"}, t);
					// Creation du label visible
					l			= F.getElementsByTagName("legend")[0];
					r			= l.getElementsByTagName("span");
					l 			= (r.length > 0)? Html.cleanText(r[0].innerHTML) : Html.cleanText(l.innerHTML);
					l			= H.createNode("label", {htmlFor:ref}, l);
					l			= H.createNode("div", l);
					l			= H.createNode("div", {className:"ep_label"}, l);
					// Creation du colonnage
					r			= H.createNode("div", {className:"ep_block2col"}, l, t);
				// Creation du contenu
					t			= H.createNode("div", {className:"ep_block2col"});
					// Creation du label vide
					l			= H.createNode("div", " ");
					l			= H.createNode("div", l);
					l			= H.createNode("div", {className:"ep_label"}, l);
					t.appendChild(l);
					// Creation des selecteurs
					R.target	= new Array();
					for(b = 0; b < m; b++){
						s		= new Array();
						s[0]	= o[b].tagbtn.value;
						// Creation du label
						if(o[b].tagtarget == "none"){
							l	= H.createNode("label", {htmlFor:"filternone_" + b}, o[b].labeltarget);
						}else if(o[b].tagtarget == "empty"){
							l	= H.createNode("label", {htmlFor:"filterempty_" + b}, o[b].labeltarget);
						}else{
							l	= H.createNode("label", {htmlFor:o[b].tagtarget.id}, o[b].labeltarget);
						}
						l		= H.createNode("div", {className:"ep_hidden"}, l);
						t.appendChild(l);
						s[1]	= l;
						// Creation du champ
						if(o[b].tagtarget == "none"){
							// Creation de la balise
							l	= H.createNode("div", {className:"ep_invisible"}, " ");
							a	= H.createNode("div", {className:"ep_menu"}, l);
						}else if(o[b].tagtarget == "empty"){
							// Creation de la balise
							l	= H.createNode("div", {className:"ep_fake"}, " ");
							a	= H.createNode("div", {className:"ep_menu"}, l);
						}else{
							// Creation de la balise
							a	= H.createNode("div", o[b].tagtarget);
						}
						l		= H.createNode("div", {className:"ep_data"}, a);
						t.appendChild(l);
						s[2]	= l;
						// Affichage du champ
						if(R.selected != b) s[1].style.display = s[2].style.display = "none";
						R.target.push(s);
					}
				// Creation de la balise de cloture
					l			= H.createNode("span", {className:"ep_endbox"}, " ");
				// Nettoyage du fieldset
				F.className		= String(F.className).replace(ref, "").replace(" ep_adaptationradio_", "").replace("ep_adaptationradio_", ""); 
				F.innerHTML		= "";
				// Recuperation des colonnages
				F.appendChild(r);
				F.appendChild(t);
				F.appendChild(l);
			}
			// Envoi du resultat
			return(R);
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction convertissant un champs select en deux selecteurs
		function manageSelectElement(H, S, M, T){
			// Recherche d'elements necessitant un tri
			var o						= T.getElementsByTagName("optgroup");
			// Traitement des champs
			if(o.length > 0){
				R						= new Object();
				// Recherche de la balise parente
				var i					= 0;
				var t					= T.parentNode;
				while(i < 100 && H.check(t) && !String(t.className).match("ep_element")){
					t					= t.parentNode;
					i++;
				}
				if(H.check(t)){
					var a;
					var j;
					var m;
					var n;
					var h;
					var s;
					var r;
					var p;
					var cm;
					var cs;
					// Sauvegarde du parent
					var C				= t;
					var P				= C.parentNode;
					// Initialisation de l'objet
					R					= new Object();
					R.multivalue		= new Array();
					// Identification de la future legende
						var l			= t.getElementsByTagName("label");
						l				= (l.length > 0)? l[0].innerHTML : "";
					// Sauvegarde des valeurs du selecteur
						o				= new Array();
						p				= new Array();
						m				= T.childNodes.length;
						for(i = 0; i < m; i++){
							if(String(T.childNodes[i].tagName).toLowerCase() == "option"){
								o.push({label:T.childNodes[i].innerHTML, value:T.childNodes[i].value, selected:(T.childNodes[i].selected || T.childNodes[i].selected == "selected")});
							}else if(String(T.childNodes[i].tagName).toLowerCase() == "optgroup"){
								a		= new Array();
								t		= T.childNodes[i].childNodes;
								n		= T.childNodes[i].childNodes.length;
								for(j = 0; j < n; j++){
									if(String(t[j].tagName).toLowerCase() == "option") a.push({label:Html.cleanText(t[j].innerHTML), value:t[j].value});
								};
								n		= p.length;
								if(a.length > 0) a[0].selected = true;
								o.push({label:T.childNodes[i].label, value:T.id + "_sub" + n});
								p.push({label:T.childNodes[i].title, elements:a, reference:T.id + "_sub" + n});
							}
						}
					// Createur de conteneurs
					function createSelect(label, datas, ref, main){
						// Creation du label
						var k					= H.createNode("label", {htmlFor:T.id + "_main"}, label);
						var u					= H.createNode("div", {className:"ep_label"}, k);
						// Creation du selecteur
						ok						= "";
						var w					= H.createNode("select", {className:"ep_field", id:ref + "_main"});
						var f					= datas.length;
						for(var g = 0; g < f; g++){
							// Creation de l'option
							k					= H.createNode("option", {value:datas[g].value}, datas[g].label);
							// Verification de l'etat selectionne
							if(datas[g].selected){ k.selected = "selected"; ok = datas[g].value; }
							w.appendChild(k);
						}
						if(ok.length <= 0) u.className	+= " ep_empty";
						w						= H.createNode("div", w);
						w						= H.createNode("div", {className:"ep_data"}, w);
						// Envoi du resultat
						return([ref, u, w, ok]);
					};
					// Creation de la balise recuperant les donnees
						var h			= H.createNode("input", {className:"ep_hidden", type:"hidden", id:T.id});
					// Creation des balises pour le selecteur principal
						// Creation du conteneur principal
						cm				= H.createNode("div", {className:"ep_block2col"}, h);
						// Creation du selecteur
						a				= createSelect(l, o, T.id);
						// Sauvegarde des donnees
						R.reference		= T.id + "_main";
						cm.appendChild(a[1]);
						cm.appendChild(a[2]);
						R.selected 		= a[3]; 
					// Creation des balises pour les selecteurs secondaires
						cs				= H.createNode("div", {className:"ep_block2col"});
						// Creation du selecteur
						R.target		= new Array();
						m				= p.length;
						for(a = 0; a < m; a++){
							s			= createSelect(p[a].label, p[a].elements, p[a].reference);
							cs.appendChild(s[1]);
							cs.appendChild(s[2]);
							R.target.push(s);
							if(R.selected != p.reference) s[1].style.display = s[2].style.display = "none";
						}
					// Integration des elements
					s					= H.createNode("span", {className:"ep_endbox"}, " ");
					a					= H.createNode("fieldset", {className:"ep_element"});
					a.appendChild(cm);
					a.appendChild(cs);
					a.appendChild(s);
					P.insertBefore(a, C);
					P.removeChild(C);
					// Convertion des selecteurs du selecteur
					j					= a.getElementsByTagName("select");
					m					= j.length;
					s					= new Array();
					for(i = 0; i < m; i++){ s.push(j[i]); }
					for(i = 0; i < m; i++){
						// Identification des balises dont il faut modifier les index
						l					= new Array();
						t 					= s[i].parentNode;
						while(!String(t.className).match("ep_menubox")){
							l.push(t);
							t				= t.parentNode;
						}
						// Sauvegarde de la valeur choisie par defaut
						h.value				= R.selected;
						// Convertion des selecteurs
						if(R.reference == s[i].id){	// Selecteur principal
							S.addEventFct(M, s[i], null, true, l, [true, function(value){ This.change_initselect(R.target, value, h, true, T.id + "_sub"); }, true]);
						}else{						// Selecteurs secondaires
							S.addEventFct(M, s[i], null, true, l, [true, function(value){ This.change_initselect(R.target, value, h, false, T.id + "_sub"); }, true]);
						}
					}
				}
			}
			// Envoi du resultat
			return(R);
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction changeant l'affichage du selecteur cree depuis un systeme de bouton radio
		this.change_initradio = function(list, target){
			var m				= list.length;
			for(var i = 0; i < m; i++){	
				list[i][1].style.display = 	list[i][2].style.display = 	(list[i][0] == target)? "" : "none";
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction changeant l'affichage du selecteur cree depuis un systeme base sur un selecteur
		this.change_initselect = function(list, target, hidden, display, ref){
			
			// Changement d'affichage
			if(display){
				m				= list.length;
				for(var i = 0; i < m; i++){	
					list[i][1].style.display = 	list[i][2].style.display = 	(list[i][0] == target)? "" : "none";
				}
			}
			// Assignation de la valeur
			if(String(target).indexOf(ref) == 0){
				m				= document.getElementById(target + "_main");
				if(typeof(m) == "object" && m != null) hidden.value = m.value;
			}else{
				hidden.value 	= target;
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init();
	};

/* ======================================================================================================== */
/* FieldAdaptator ========================================================================================= */
/* ======================================================================================================== */
/* Classe JS gerant la convertion des balises <select> pour leur redesign et la suppression du bouton d'envoi ainsi que du traitement des champs libres */

	function FieldAdaptator(){
		// Fonction autogeree >> ne necessitant pas d'etre parametree
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
			// SelectConvert				>> managetag.js
			// FieldConvert					>> managetag.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new AllConvertSelector();
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(){
			// Verification a l'acces aux scripts de gestion et creation
			if(	typeof(htmanager_js)		== "boolean" && htmanager_js && 
				typeof(managetag_js) 		== "boolean" && managetag_js){
				// Sauvegarde des references
				var Html					= new HTManager();
				var Select					= new SelectConvert();
				var Message					= new FieldMessage();
				var Calendar;
				// Verification de l'existance des codes gerant les calendriers
				if(	typeof(calendarcontrol_js) == "boolean" && calendarcontrol_js && 
					typeof(calendarfunction_js) == "boolean" && calendarfunction_js) 	Calendar = new CalendarControl();
				else 																	Calendar = null;
				// Fonction de recherche des formulaires
				function getForm(ref){
					var m					= document.getElementById(ref);
					if(Html.check(m)){
						// Recuperation des boites formulaires
						var f				= m.getElementsByTagName("form");
							m				= f.length;
						// Traitement des formulaires
						for(var i = 0; i < m; i++){
							// Verification que le formulaire ne soit pas un formulaire autogere
							if(!f[i].className.match("ep_formbox") && !f[i].className.match("ep_strictformbox")) manageform(Select, Message, Calendar, f[i], ref);
						}
					}
				};
				// Lancement de la recherche dans les 3 colonnes
				getForm("menuzone");
				getForm("mainzone");
				getForm("contextzone");
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction recherchant et remplacant les selecteurs
		function manageform(S, M, C, F, Z){
			var s;
			var m;
			var i;
			var t;
			var a;
			var l;
			var ref;
			// Recherche des balises <select> pour convertir le design
			s								= F.getElementsByTagName("select");
			if(s.length > 0){
				m							= s.length;
				// Analyse de l'auto envoi de l'action du formulaire > la balise "select" est-elle le seul element du formulaire
				var b;
				if(m == 1){
					// Recherche des balises autres balises potencielles
					i						= F.getElementsByTagName("input");
					t						= F.getElementsByTagName("textarea");
					if(i.length > 1 || t.length > 0){						// Presence d'autres balises de formulaire -----------------> pas d'auto submit
						a					= false;
						b					= null;
					}else if(i.length == 0){								// Aucune autre balise presente ----------------------------> auto submit active
						a					= true;
						b					= null;
					}else if(String(i[0].type).toLowerCase() == "submit"){	// Aucune autre balise presente en dehors du bouton submit -> auto submit active
						a					= true;
						b					= i[0];
					}else{													// Presence d'une autre balise -----------------------------> pas d'auto submit
						a					= false;
						b					= null;
					}
				}else{														// Presence d'autres balises "select" ----------------------> pas d'auto submit
					a						= false;
					b						= null;
				}
				// Extrait des selecteurs
				ref							= new Array();
				for(i = 0; i < m; i++){	ref.push(s[i]) };
				// Lancement du traitement des selecteurs
				for(i = 0; i < m; i++){
					l						= new Array();
					// Recherche des balises dont l'index doit etre modifie
					t						= ref[i].parentNode;
					while(t.id != "menuzone" && t.id != "mainzone" && t.id != "contextzone"){
						l.push(t);
						t					= t.parentNode;
					}
					// Convertion des selecteurs
					S.addEventFct(F, ref[i], b, a, l); 
				}
			}
			// Recherche des balises <input> pour l'ajout du texte par defaut ou du bouton calendrier
			s								= F.getElementsByTagName("input");
			if(s.length > 0){
				m							= s.length;
				if(Z == "contextzone" && C != null){
					// Fonction permettant de recuperer les dates limites
					function getLimit(classvalue){
						var datelimitmin			= null;
						var datelimitmax			= null;
						var dv;
						var di;
						// Recherche de la date limite minimale
						if(classvalue.match("ep_limitpast_")){
							di						= classvalue.indexOf("ep_limitpast_") + 13;
							dv						= classvalue.substring(di, (classvalue.indexOf(" ", di) < 0)? classvalue.length : classvalue.indexOf(" ", di));
							if(dv.match("today")){
								dv					= new Date();
								datelimitmin		= {day:1, month:dv.getMonth() +1, year:dv.getFullYear()}; 
							}else if(dv.length == 6){
								if(!isNaN(Number(dv.substr(0, 2))) && !isNaN(Number(dv.substr(2, 6)))){
									datelimitmin	= {day:1, month:Number(dv.substr(0, 2)), year:Number(dv.substr(2, 6))};
								}
							}
						}
						// Recherche de la date limite maximale
						if(classvalue.match("ep_limitfutur_")){
							di						= classvalue.indexOf("ep_limitfutur_") + 14;
							dv						= classvalue.substring(di, (classvalue.indexOf(" ", di) < 0)? classvalue.length : classvalue.indexOf(" ", di));
							if(dv.match("today")){
								dv					= new Date();
								datelimitmax		= {day:1, month:dv.getMonth() +1, year:dv.getFullYear()}; 
							}else if(dv.length == 6){
								if(!isNaN(Number(dv.substr(0, 2))) && !isNaN(Number(dv.substr(2, 6)))){
									datelimitmax 	= {day:1, month:Number(dv.substr(0, 2)), year:Number(dv.substr(2, 6))};
								}
							}
						}
						// Envoi du resultat
						if(datelimitmin == null && datelimitmax == null) 	return(null)
						else 												return({min:datelimitmin, max:datelimitmax});
					}
					// Creation des references css pour les balises du calendrier
					var c					= new Object();
					c.hidden				= "ep_hidden";
					c.popup					= "ep_calendar_popup";
					c.shadow				= "ep_calendar_shadow";
					c.calendarday			= "ep_calendar_daymode";
					c.calendarweek			= "ep_calendar_weekmode";
					c.month					= "ep_monthtitle";
					c.linkprev				= "ep_linkprev";
					c.linknext				= "ep_linknext";
					c.linkmonth				= "ep_linkmonth";
					c.linkyear				= "ep_linkyear";
					c.linklabel				= "ep_linklabel";
					c.tableblock			= "ep_tablecontent";
					c.ceilday				= "ep_ceilday";
					c.ceilweek				= "ep_ceilweek";
					c.ceilwkend				= "ep_ceilweekend";
					c.rowhover				= "ep_rowhover";
					c.ceilselected			= "ep_selected";
					c.rowselected			= "ep_selected";
					c.close					= "ep_footer";
					// Creation des references css pour les balises du bouton d'appel du calendrier
					l						= {parent:"ep_calendar", link:"ep_calendarbtn", label:""};
					// Creation des references css pour le positionnement du calendrier en pop up 
					ref						= {topleft:"ep_calendar_tl", topright:"ep_calendar_tr", bottomleft:"ep_calendar_bl", bottomright:"ep_calendar_br"};
					// Creation de la liste des balises dont l'index doit etre mis a jour
					a						= new Array();
					// Recuperation de la version linguistique
					var L 					= document.getElementsByTagName("body")[0].lang;
					// Traitement en boucle des champs input
					for(i = 0; i < m; i++){	
						if(String(s[i].className).match("ep_fieldday") || String(s[i].className).match("ep_fieldweek")){
							// Recherche des balises
							t				= s[i].parentNode;
							a				= new Array();
							while(t.id != Z){
								a.push(t);
								t					= t.parentNode;
							}
							// Appel de l'evenement
							C.addEventFct(L, s[i].parentNode, s[i], t, a, c, ref, l, true, Boolean(s[i].className.match("week")), getLimit(s[i].className), null, null);
						}else{
							M.addEventFct(s[i]);
						}
					}
				}else{
					for(i = 0; i < m; i++){	M.addEventFct(s[i]); }
				}
			}
			// Recherche des balises <textarea> pour l'ajout du texte par defaut
			s								= F.getElementsByTagName("textarea");
			if(s.length > 0){
				m							= s.length;
				for(i = 0; i < m; i++){	M.addEventFct(s[i]); }
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init();
	};

/* ======================================================================================================== */
/* SearchDisplay ========================================================================================= */
/* ======================================================================================================== */
/* Classe JS gerant l'affichage du texte par defaut dans le moteur de recherche de l'entete */

	function SearchDisplay(){
		// Fonction autogeree >> ne necessitant pas d'etre parametree
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new SearchDisplay();
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Variables
		var This;
		var Html;
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(){
			// Verification a l'acces aux scripts de gestion et creation
			if(typeof(htmanager_js) == "boolean" && htmanager_js){
				// Sauvegarde des references
				This		= this;
				Html		= new HTManager();
				// Identification du menu
				var m		= document.getElementById("menusearch_field");
				if(Html.check(m)){
					// Ajout des evenements
					Html.addEvent(m, "click", function(){ This.removetext(m); });
					Html.addEvent(m, "focus", function(){ This.removetext(m); });
					Html.addEvent(m, "blur", function(){ This.addtext(m); });
					// Lancement automatique
					This.addtext(m);
				}
			};
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant le texte au champ si le contenu est vide
		this.addtext = function(tag){
			// Nettoyage du style
			tag.className		= String(tag.className).replace(" ep_empty", "").replace("ep_empty", "");
			// Analyse du texte
			if(tag.value == "" || tag.value == tag.title){
				// Ajout de la classe
				tag.className	+= (tag.className.length > 0)? " ep_empty" : "ep_empty";
				// Integration du texte
				tag.value		= tag.title;
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction supprimant le texte par defaut si le contenu est vide
		this.removetext = function(tag){
			// Nettoyage du style
			tag.className		= String(tag.className).replace(" ep_empty", "").replace("ep_empty", "");
			// Analyse du texte
			if(tag.value == "" || tag.value == tag.title) tag.value		= "";
		}
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init();
	};

/* ======================================================================================================== */
/* PrintControler ========================================================================================= */
/* ======================================================================================================== */
/* Classe JS gerant l'ajout du bouton d'impression dans le footer du site et de ses fonctionnalites */

	function PrintControler(Lang){
		// Parametres autorises lors de la creation de la classe JS:
			// 	Lang						:String			>> version linguistique (encode sur deux caracteres [exemple : en])
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new PrintControler("version linguistique sur deux caracteres");
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Variables
		var This;
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(sLang){
			// Verification a l'acces aux scripts de gestion et creation
			if(typeof(htmanager_js) == "boolean" && htmanager_js){
				// Creation de la classe utile
				var Html					= new HTManager();
				// Identification de la liste de liens
				var tag						= document.getElementById("footermenutools");
				if(Html.check(tag)){
					var list				= tag.getElementsByTagName("li");
					// Verification de l'existance des elements
					if(list.length > 0){
						// Sauvegarde des references
						This				= this;
						// Identification du parent de la liste
						var p				= list[0].parentNode;
						// Identification du premier element
						var t				= list[0];
						if(String(t.innerHTML).match("RSS")) 	t = list[1];
						else									t = list[0];
						// Recuperation du libelle dans la bonne version linguistique
						var s;
						switch(sLang){
							case "bg":	s	= "За печат";					break;
							case "cs":	s	= "Vytisknout";					break;
							case "da":	s 	= "Udskriv";					break;
							case "de":	s 	= "Drucken";					break;
							case "el":	s 	= "Εκτύπωση";					break;
							case "es":	s 	= "Imprimir";					break;
							case "et":	s 	= "Trüki";						break;
							case "fi":	s 	= "Tulosta";					break;
							case "fr":	s 	= "Imprimer";					break;
							case "hu":	s 	= "Nyomtatás";					break;
							case "it":	s	= "Stampa";						break;
							case "lt":	s 	= "Spausdinti";					break;
							case "lv":	s 	= "Izdrukāt";					break;
							case "mt":	s 	= "Stampa";						break;
							case "nl":	s 	= "Print";						break;
							case "pl":	s 	= "Drukuj";						break;
							case "pt":	s 	= "Imprimir";					break;
							case "ro":	s 	= "Imprimă";					break;
							case "sk":	s 	= "Tlač";						break;
							case "sl":	s	= "Natisni";					break;
							case "sv":	s 	= "Skriv ut";					break;
							case "en":	
							default:	s 	= "Print";						break;
						};
						// Creation du lien
						var b				= Html.createNode("a", {href:"#print"}, s);
						b.onclick			= function(){ This.launchprint(); };
						b					= Html.createNode("li", b);
						// Integration du lien dans la liste
						(Html.check(t))? p.insertBefore(b, t) : p.appendChild(b);
					}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction lancant l'action d'imprimer
		this.launchprint = function(){
			// Analyse du type de navigateur
			if(String(navigator.appName).toLowerCase().match("microsoft")){
				intOLEparam				= 7; 
				intOLEcmd				= 7;
				var WebBrowser			= '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';
				document.body.insertAdjacentHTML('beforeEnd', WebBrowser);
				if(!intOLEparam || intOLEparam < -1 || intOLEparam > 1 ) intOLEparam = 1;
				WebBrowser1.ExecWB(intOLEcmd, intOLEparam);
				WebBrowser1.outerHTML	= "";
			}else{
				window.print();
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init(Lang);
	};

/* ======================================================================================================== */
/* ShareboxDisplay ======================================================================================== */
/* ======================================================================================================== */
/* Classe JS gerant l'ajout du bouton "ajouter aux favoris" et gerant les liens sociaux supplementaires */

	function ShareboxDisplay(Lang){
		// Parametres autorises lors de la creation de la classe JS:
			// 	Lang						:String			>> version linguistique (encode sur deux caracteres [exemple : en])
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
			// DisplayControl				>> managetag.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new ShareboxDisplay("version linguistique sur deux caracteres");
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Variables
		var This;
		var Html;
		var Bookmark						= true;
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(sLang){
			// Verification a l'acces aux scripts de gestion et creation
			if(typeof(htmanager_js) == "boolean" && htmanager_js){
				// Sauvegarde des references
				This						= this;
				Html						= new HTManager();
				// Recherche de la boite
				var m						= document.getElementById("sharebox");
				if(Html.check(m)){
					// Recherche de la liste
					m						= m.getElementsByTagName("ul");
					if(m.length > 0){
						m					= m[0];
						// Listing des balises enfant
						var r				= null;
						var u				= null;
						var c				= m.getElementsByTagName("li");
						var l				= c.length;
						// Recherche des liens de partage
						for(var i = 0; i < l; i++){
							if(c[i].className == "ep_share")	r = i;
							if(c[i].className == "ep_url")		u = i;
						}
						// Verification du resultat
						if(r != null || u != null){
							// Verification du format linguistique
							sLang			= String(sLang).toLowerCase();
							// Gestion des liens sociaux supplementaires si les classes utiles sont disponibles
							if(typeof(managetag_js) == "boolean" && managetag_js){
								if(r != null) manageshare(sLang, 	c[r]);
								if(u != null) manageurl(sLang, 		c[u]);
							}
							// Ajout du bouton "Ajouter aux favoris" si autorise et si le navigateur est autre que Google Chrome
							if(Bookmark && navigator.appVersion.indexOf("Chrome") < 0) addbookmark(sLang, m, c, (r == null)? l : r+1);
						}
					}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant le bouton d'affichage et de disparition des liens sociaux supplementaires
		function manageshare(lang, box){
			var a;
			var c;
			// Recherche de l'existance de liens sociaux supplementaires
			var l					= box.getElementsByTagName("div");
			var m					= l.length;
			for(var i = 0; i < m; i++){
				if(l[i].className == "ep_link")			a = l[i];
				else if(l[i].className == "ep_linkmore")c = l[i];
			}
			// Verification de la presence des deux blocs
			if(Html.check(a) && Html.check(c)){
				// Recuperation du libelle dans la bonne version linguistique
				var s;
				switch(lang){
					case "bg":	s	= "Вижте още линкове / Скрийте линкове";		break;
					case "cs":	s	= "přehled dostupných internetových stránek";	break;
					case "da":	s 	= "Se/skjul flere links";						break;
					case "de":	s 	= "Mehr Links anzeigen/verbergen";				break;
					case "el":	s 	= "Εμφάνιση/απόκρυψη περισσοτέρων δεσμών";		break;
					case "es":	s 	= "Mostrar / ocultar les otros enlaces";		break;
					case "et":	s 	= "Esita/peida lisaviidad";						break;
					case "fi":	s 	= "Näytä/piilota lisää linkkejä";				break;
					case "fr":	s 	= "Afficher / cacher les autres liens";			break;
					case "hu":	s 	= "További linkek megjelenítése/elrejtése";		break;
					case "it":	s	= "Mostra/nascondi altri collegamenti";			break;
					case "lt":	s 	= "Rodyti/slėpti daugiau nuorodų";				break;
					case "lv":	s 	= "Parādīt/slēpt pārējās saites";				break;
					case "mt":	s 	= "Uri/aħbi aktar links";						break;
					case "nl":	s 	= "Zie/verberg meer links";						break;
					case "pl":	s 	= "Pokaż/ukryj odnośniki";						break;
					case "pt":	s 	= "Visualizar/ocultar mais links";				break;
					case "ro":	s 	= "Afişează/ascunde celelalte link-uri";		break;
					case "sk":	s 	= "Zobraz/Skry viac odkazov";					break;
					case "sl":	s	= "Prikaži/skrij več povezav";					break;
					case "sv":	s 	= "Visa/dölj fler länkar";						break;
					case "en":	
					default:	s 	= "View/hide more links";						break;
				};
				// Creation du bouton
				var b				= Html.createNode("span", "");
				b					= Html.createNode("a", {className:"", href:"#viewmore", title:s}, b);
				a.appendChild(b);
				// Nettoyage de la classe par defaut
				c.className			= "";
				// Ajout de l'evenement
				var d				= new DisplayControl();
				d.addEventFct({id:b, cssopen:"ep_less", cssclose:"ep_more"}, 
							  [{id:c, cssopen:"ep_linkmore", cssclose:"ep_hidden"}], 
							  true, true, true, true);
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction affichant ou masquant la balise contenant l'URL courte
		function manageurl(lang, box){
			var a;
			var c;
			var i;
			// Recherche de l'existance des elements necessaires
			var l					= box.getElementsByTagName("div");
			var m					= l.length;
			for(i = 0; i < m; i++){
				if(l[i].className == "ep_label")		a = l[i];
				else if(l[i].className == "ep_link")	c = l[i];
			}
			i						= null;
			l						= box.getElementsByTagName("input");
			if(l.length > 0) i		= l[0];
			// Verification de la presence des deux blocs
			if(Html.check(a) && Html.check(c) && Html.check(i)){
				// Initialisation des classe
				a.className			= "ep_label ep_cursor";
				c.className			= "ep_hidden";
				// Ajout des evenements
				a.onclick			= function(){	a.className	= "ep_hidden"; 				c.className = "ep_link ep_focus"; 	i.focus();	}
				i.onfocus			= function(){	a.className	= "ep_hidden"; 				c.className = "ep_link ep_focus";	i.select();	}
				i.onblur			= function(){	a.className	= "ep_label ep_cursor"; 	c.className = "ep_hidden";						}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant le bouton "Ajouter aux favoris" apres les liens de partage 
		function addbookmark(lang, box, list, index){
			// Recuperation du libelle dans la bonne version linguistique
			var s;
			switch(lang){
				case "bg":	s	= "Добави към любими!";			break;
				case "cs":	s	= "Oblíbené";					break;
				case "da":	s 	= "Føj til bogmærke";			break;
				case "de":	s 	= "Bookmark setzen";			break;
				case "el":	s 	= "Προσθέστε στα Αγαπημένα";	break;
				case "es":	s 	= "Añadir a marcadores";		break;
				case "et":	s 	= "Lemmikud";					break;
				case "fi":	s 	= "Lisää kirjanmerkki";			break;
				case "fr":	s 	= "Ajouter aux favoris";		break;
				case "hu":	s 	= "Hozzáadás könyvjelzőhöz";	break;
				case "it":	s	= "Aggiungi ai preferiti";		break;
				case "lt":	s 	= "Lisa järjehoidjasse";		break;
				case "lv":	s 	= "Pievienot grāmatzīmi";		break;
				case "mt":	s 	= "Żid mal-bookmarks";			break;
				case "nl":	s 	= "Aan favorieten toevoegen";	break;
				case "pl":	s 	= "Dodaj do ulubionych";		break;
				case "pt":	s 	= "Adicionar";					break;
				case "ro":	s 	= "Preferinţe";					break;
				case "sk":	s 	= "Pridať do záložiek";			break;
				case "sl":	s	= "Dodaj med zaznamke";			break;
				case "sv":	s 	= "Lägg till bokmärke";			break;
				case "en":	
				default:	s 	= "Add to bookmarks";			break;
			};
			// Creation du lien
			var a			= Html.createNode("a", {href:"#addbookmark", tabIndex:0}, s);
			var t			= Html.createNode("div", a);
				t			= Html.createNode("li", {className:"ep_bookmark"}, t);
			// Ajout de l'action
			Html.addEvent(a, "click", This.addBookmark, true);
			// Integration du lien dans la liste
			if(index < list.length) box.insertBefore(t, list[index]);
			else box.appendChild(t);
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant la page aux favoris
		this.addBookmark = function(){
			var s;
			if(window.sidebar){
				s = (!(String(window.location).match("http") || String(window.location).match("https")))? "http://" + window.location : window.location;
				window.sidebar.addPanel(document.title, s, "");
			}else if(window.external){
				s = (!(String(location.href).match("http") || String(location.href).match("https")))? "http://" + location.href : location.href;
				window.external.AddFavorite(s, document.title);
			} 
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init(Lang);
	};

/* ======================================================================================================== */
/* SocialboxDisplay ======================================================================================= */
/* ======================================================================================================== */
/* Classe JS gerant l'ajout de la classe CSS permettant l'affichage de la boite "reseaux sociaux" en fin de colonne */

	function SocialboxDisplay(){
		// Fonction autogeree >> ne necessitant pas d'etre parametree
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
			// DisplayControl				>> managetag.js
			// SwitchClass					>> managetag.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new SocialboxDisplay();
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(){
			// Verification a l'acces aux scripts de gestion et creation
			if(typeof(htmanager_js) == "boolean" && htmanager_js){
				var Html					= new HTManager();
				var c						= document.getElementById("contextzone");
				var b						= document.getElementById("socialbox");
				if(Html.check(c) && Html.check(b)){
					if(!c.className.match("ep_addsocialbox")){
						c.className			+= (String(c.className).length > 0)? " ep_addsocialbox" : "ep_addsocialbox";
					}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init();
	};

/* ======================================================================================================== */
/* AccordeonControler ===================================================================================== */
/* ======================================================================================================== */
/* Classe JS gerant le traitement de toutes les balises demandant l'ouverture/fermeture de contenu en accordeon ([+]/[-]) */

	function AccordeonControler(){
		// Fonction autogeree >> ne necessitant pas d'etre parametree
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
			// DisplayControl				>> managetag.js
			// SwitchClass					>> managetag.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new AccordionControler();
			// Les balises utilisant la classe "ep_minimizeblock" se comporte de maniere independante > on/off
			// Les balises utilisant la classe "ep_allminimizeblock" referme automatiquement les autres boites lors de son ouverture
			// Les boites utilisant la classe "ep_autominimizebox" appliqueront l'affichage a l'ensemble des blocks de la boite (filtre, corps, pagination et footer)
			// Les boites utilisant la classe "ep_closeminimizebox" ne permettent pas l'ouverture initiale du premier element
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(FOpen){
			// Verification a l'acces aux scripts de gestion et creation
			if(typeof(htmanager_js) == "boolean" && htmanager_js && typeof(managetag_js) == "boolean" && managetag_js){
				// Sauvegarde des references
				var Html				= new HTManager();
				// Analyse de la valeur du parametre de demande d'ouverture du premier element
				FOpen					= (typeof(FOpen) == "boolean")? FOpen : true;
				// Identification des boites
					// Liste des boites a traiter
					var boxes				= new Array();	// Effet accordeon dans le corps de la boite simple
					var autoboxes			= new Array();	// Effet accordeon sur l'integralite de la boite
					var peopleboxes			= new Array();	// Effet accordeon dans les elements de boite de presentation
					// Fonction d'identification des boites
					function getBoxes(m){
						var l				= m.childNodes.length;
						for(var i = 0; i < l; i++){
							if(Html.check(m.childNodes[i])){
								// Recherche des boites ayant une bordure [boite avec bordure et presentation de personne] (le style ne peut s'appliquer dans les boites sans bordure)
								if(m.childNodes[i].className.match("ep_peoplebox")){
									// Ajout du traitement de la boite de presentation
									peopleboxes.push([m.childNodes[i], !Boolean(m.childNodes[i].className.match("ep_closeminimizebox"))]);
								}else if(m.childNodes[i].className.match("ep_borderbox")){
									// Ajout du traitement de la boite simple avec bordure
									boxes.push([m.childNodes[i], !Boolean(m.childNodes[i].className.match("ep_closeminimizebox"))]);
									// Recherche des boites ayant une demande d'effet accordeon sur toute la boite
									if(m.childNodes[i].className.match("ep_autominimizebox")) 	autoboxes.push([m.childNodes[i], !Boolean(m.childNodes[i].className.match("ep_closeminimizebox"))]);
								}
							}
						}
					}
					// Lancement de la recherche dans les deux zones principales
					var z					= document.getElementById("mainzone");
					if(Html.check(z)) getBoxes(z);
					z						= document.getElementById("contextzone");
					if(Html.check(z)) getBoxes(z);
				// Verification de la presence de boite a traiter (effet sur le contenu contenu)
				if(boxes.length > 0){
					// Traitement des boites
					k						= boxes.length;
					for(var j = 0; j < k; j++){		managebox(Html, boxes[j][0], boxes[j][1]);	}
				}
				// Verification de la presence de boite a traiter (effet sur la boite)
				if(autoboxes.length > 0){
					// Traitement des boites
					k						= autoboxes.length;
					for(var j = 0; j < k; j++){		manageFullbox(Html, autoboxes[j][0], autoboxes[j][1]);	}
				}
				// Verification de la presence de boite a traiter (effet sur les blocs)
				if(peopleboxes.length > 0){
					// Traitement des boites
					k						= peopleboxes.length;
					for(var j = 0; j < k; j++){		manageElementbox(Html, peopleboxes[j][0], peopleboxes[j][1]);	}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction gerant les effets par boite
		function managebox(Html, Box, FOpen){
			var refopen				= {d:0, s:0};
			// Liste des balises valides a traiter
			var listdisplay			= new Array();	// Liste des blocs "accordeon" ([+]/[-]) independants
			var listswitch			= new Array();	// Liste des blocs "accordeon" ([+]/[-]) dependants
			// Recherche des elements a gerer - - - - - - - - - - - - - - - - -
				// Liste des balises a analyser
				var l				= Box.getElementsByTagName("div");
				// Recherche des elements necessitant un traitement
				var r				= l.length;
				for(i = 0; i < r; i++){
					if(l[i].className.match("ep_allminimizeblock")){
						listswitch.push(l[i]);
						if(l[i].className.match("ep_openminimize")){ refopen.s = listswitch.length -1;	l[i].className = String(l[i].className).replace(" ep_openminimize", "").replace("ep_openminimize", "");	}
					}else if(l[i].className.match("ep_minimizeblock")){
						listdisplay.push(l[i]);
						if(l[i].className.match("ep_openminimize")){ refopen.d = listdisplay.length -1;	l[i].className = String(l[i].className).replace(" ep_openminimize", "").replace("ep_openminimize", "");	}
					}
				}
			// Variables utiles - - - - - - - - - - - - - - - - - - - - - - - -
			var i;
			var e;
			var b;
			var j;
			var m;
			var n;
			var D;
			var S;
			var list;
			// Initialisation de l'identificateur de comportement : clic sur toute la zone ou juste sur le titre (dans le cas d'un entete avec bouton)
			A						= true;
			// Traitement des elements de boites independants - - - - - - - - -
			if(listdisplay.length > 0){
				// Initialisation de la classe
				D					= new DisplayControl();
				// Verification de la demande d'ouverture
				refopen.d			= (isNaN(refopen.d))? 0 : Math.max(0, refopen.d);
				// Traitement des elements
				a					= new Array();
				m					= listdisplay.length;
				for(i = 0; i < m; i++){
					e				= null;
					b				= null;
					// Recherche de l'element "lien"
					list			= listdisplay[i].getElementsByTagName("div");
					n				= list.length;
					for(j = 0; j < n; j++){	
						if(list[j].className == "ep_element1col")		e = list[j];
						if(	list[j].className == "ep_elementheading" 					|| 
							list[j].className == "ep_elementbtnheading"					||	
							list[j].className == "ep_elementbtnheading ep_btndisplay"	||	
							list[j].className == "ep_btndisplay ep_elementbtnheading")	b = list[j];
						if(e != null && b != null){
							a.push({button:b, target:e, ref:i});
							if(A && String(b.className).match("ep_elementbtnheading")) A	= false; 
							break;
						}
					}
				}
				m					= a.length;
				for(i = 0; i < m; i++){
					// Ajout de la fonctionnalite
					if(typeof(a[i]) == "object"){
						// Ajout de la classe principal au premier element
						a[i].target.className	= a[i].target.className + " ep_elementmain";
						// Verification du bouton pour l'assignation de l'action d'ouverture/fermeture 
						if(A){
							// Ajout de la fonctionnalite au bouton
							D.addEventFct({id:a[i].button, cssopen:"ep_open", cssclose:"ep_close"},
										  [{id:listdisplay[a[i].ref], cssopen:"ep_openblock", cssclose:"ep_closeblock"}],
										  !(FOpen && a[i].ref == refopen.d), true, true, false);
						}else{
							// Recuperation de la balise de titre
							a[i].target		= null;
							list			= a[i].button.getElementsByTagName("span");
							for(j = 0; j < n; j++){	if(list[j].className == "ep_title"){	e	= list[j];	break;	}	}
							// Ajout de la fonctionnalite au bouton
							if(e != null){
								D.addEventFct({id:e, cssopen:"ep_titleopen", cssclose:"ep_titleclose"},
											  [{id:listdisplay[a[i].ref], cssopen:"ep_openblock", cssclose:"ep_closeblock"}, {id:a[i].button, cssopen:"ep_openbtn", cssclose:"ep_closebtn"}],
											  !(FOpen && a[i].ref == refopen.d), true, true, false);
							}
						}
					}
				}
			}
			// Traitement des elements de boites dependants - - - - - - - - - -
			if(listswitch.length == 1){			// Element unique > traitement comme independant
				// Initialisation de la classe
				D					= new DisplayControl();
				e					= null;
				b					= null;
				// Recherche de l'element "lien"
				list				= listswitch[0].getElementsByTagName("div");
				n					= list.length;
				for(j = 0; j < n; j++){	
					if(list[j].className == "ep_element1col")		e = list[j];
					if(list[j].className == "ep_elementheading" || list[j].className == "ep_elementbtnheading")	b = list[j];
					if(e != null && b != null) break;
				}
				// Ajout de la fonctionnalite
				if(e!= null && b != null){
					// Ajout de la classe principal au premier element
					e.className	= e.className + " ep_elementmain";
					// Verification du bouton pour l'assignation de l'action d'ouverture/fermeture 
					if(b.className == "ep_elementheading"){
						// Ajout de la fonctionnalite au bouton
						D.addEventFct({id:b, cssopen:"ep_open", cssclose:"ep_close"},
									  [{id:listswitch[0], cssopen:"ep_openblock", cssclose:"ep_closeblock"}],
									  !FOpen, true, true, false);
					}else{
						// Recuperation de la balise de titre
						e		= null;
						list	= b.getElementsByTagName("span");
						for(j = 0; j < n; j++){	if(list[j].className == "ep_title"){	e	= list[j];	break;	}	}
						// Ajout de la fonctionnalite au bouton
						if(e != null){
							D.addEventFct({id:e, cssopen:"ep_titleopen", cssclose:"ep_titleclose"},
										  [{id:listswitch[0], cssopen:"ep_openblock", cssclose:"ep_closeblock"}, {id:b, cssopen:"ep_openbtn", cssclose:"ep_closebtn"}],
										  !FOpen, true, true, false);
						}
					}
				}
			}else if(listswitch.length > 1){	// Elements multiples > traitement comme dependant
				var a;
				var c;
				// Initialisation de la classe
				D					= new DisplayControl();
				S					= new SwitchClass();
				// Verification de la demande d'ouverture
				refopen.s			= (isNaN(refopen.s))? 0 : Math.max(0, refopen.s);
				// Fonction de traitement pour le clic sur tout le bloc
				function addEvent(buttons, elements, r){
					// Identification du bloc conteneur > les elements a traiter doivent etre dans la meme boite
					var parent		= buttons[r].target.parentNode;
					// Creation de la liste d'elements a traiter excepte l'element concerne
					var l			= new Array();
					var lmax		= buttons.length;
					for(var t = 0; t < lmax; t++){
						if(t != r && parent == buttons[t].target.parentNode){
							l.push(elements[buttons[t].refb]);
							l.push(elements[buttons[t].refc]);
						}
					}
					// Ajout de la fonctionnalite
					S.addEventFct(buttons[r].button, l, false, false, false);
					D.addEventFct({id:buttons[r].button, cssopen:"ep_open", cssclose:"ep_close"},
								  [{id:buttons[r].target, cssopen:"ep_openblock", cssclose:"ep_closeblock"}],
								  !(FOpen && r == refopen.s), true, true, false);
				}
				// Fonction de traitement pour le clic sur le titre du bloc
				function addEventBtn(buttons, elements, r){
					// Identification du bloc conteneur > les elements a traiter doivent etre dans la meme boite
					var parent		= buttons[r].target.parentNode;
					// Creation de la liste d'elements a traiter excepte l'element concerne
					var l			= new Array();
					var lmax		= buttons.length;
					for(var t = 0; t < lmax; t++){
						if(t != r && parent == buttons[t].target.parentNode){
							l.push(elements[buttons[t].refb]);
							l.push(elements[buttons[t].refc]);
							l.push(elements[buttons[t].reft]);
						}
					}
					// Ajout de la fonctionnalite
					if(buttons[r].title != null){
						S.addEventFct(buttons[r].title, l, false, false, false);
						D.addEventFct({id:buttons[r].title, cssopen:"ep_titleopen", cssclose:"ep_titleclose"},
									  [{id:buttons[r].target, cssopen:"ep_openblock", cssclose:"ep_closeblock"}, {id:buttons[r].button, cssopen:"ep_openbtn", cssclose:"ep_closebtn"}],
									  !(FOpen && r == refopen.s), true, true, false);
					}
				}
				// Recherches des elements
				b					= new Array();
				list				= new Array();
				m					= listswitch.length;
				for(i = 0; i < m; i++){
					c				= -1;
					// Recherche de l'element "lien"
					a				= listswitch[i].getElementsByTagName("div");
					n				= a.length;
					for(j = 0; j < n; j++){	
						if(a[j].className == "ep_elementheading" || a[j].className == "ep_elementbtnheading"){
							c 		= b.length;
							b.push({button:a[j], target:listswitch[i], title:null});
							// Analyse du type de comportement a utiliser
							if(A && a[j].className == "ep_elementbtnheading") A	= false; 
							break;
						}
					}
				}
				// Verification de l'existance d'un bouton
				if(b.length > 0){
					var s				= (A)? "ep_close" : "ep_closebtn";
					m					= b.length;
					for(i = 0; i < m; i++){
						// Design au premier element
						b[i].button.parentNode.className	= b[i].button.parentNode.className + " ep_elementmain";
						// Ajout du contenu
							// Ajout de la demande de gestion du contenu
							list.push({	id:b[i].target, 
										csstarget: (String(b[i].target.className).length > 0)? b[i].target.className + " ep_closeblock" : "ep_closeblock"
										});
							// Sauvegarde de la reference
							b[i].refc	= list.length -1;
						// Ajout du bouton
							// Ajout de la demande de gestion du bouton
							list.push({	id:b[i].button, 
										csstarget: (String(b[i].button.className).length > 0)? b[i].button.className + " " + s : s
										});
							// Sauvegarde de la reference
							b[i].refb	= list.length -1;
						// Ajout du titre du bouton
							// Recuperation de la balise de titre
							b[i].title	= null;
							e			= b[i].button.getElementsByTagName("span");
							n			= e.length;
							for(j = 0; j < n; j++){	if(e[j].className == "ep_title"){	b[i].title	= e[j];	break;	}	}
							if(b[i].title != null){
								// Ajout de la demande de gestion du titre du bouton
								list.push({	id:b[i].title, 
											csstarget: (String(b[i].title.className).length > 0)? b[i].title.className + " ep_titleclose" : "ep_titleclose"
											});
								// Sauvegarde de la reference
								b[i].reft	= list.length -1;
							}
					}
					// Ajout de la fonctionnalite
					if(A) for(j = 0; j < m; j++){	addEvent(b, list, j);		}
					else  for(j = 0; j < m; j++){	addEventBtn(b, list, j);	}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction gerant les effets sur la totalite de la boite
		function manageFullbox(Html, Box, FOpen){
			// Recuperation des elements de contenu de la boite
			var H				= null;
			var ok				= false;
			var i;
			var l				= Box.childNodes.length;
			for(i = 0; i < l; i++){
				if(Html.check(Box.childNodes[i])){
					if(Box.childNodes[i].className.match("ep_box")){
						if(Box.childNodes[i].className.match("ep_boxheader")) H = Box.childNodes[i];
						else if(H == null) 	ok = true;
						else{				ok = true;	break;	}
					}
				}
			}
			// Verification de la validite de la boite
			if(H != null && ok){
				// Recherche du bloc titre
				var T			= null;
				var B			= null;
				l				= H.childNodes.length;
				for(i = 0; i < l; i++){
					if(Html.check(H.childNodes[i])){
						if(H.childNodes[i].className.match("ep_block")) T = H.childNodes[i];
						else if(H.childNodes[i].className.match("ep_button")) B = H.childNodes[i];
					}
				}
				// Verification de l'existence du titre
				if(T != null){
					// Initialisation de la classe
					D			= new DisplayControl();
					// Ajout de l'action sur le titre de la boite
					D.addEventFct({id:T, cssopen:(B == null)? "ep_open" : "ep_openbtn", cssclose:(B == null)? "ep_close" : "ep_closebtn"}, 
								  [{id:Box, cssopen:"ep_openbox", cssclose:"ep_closebox"}], !(FOpen), false, true, false);
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction gerant les effets sur les elements de la boite de presentation
		function manageElementbox(Html, Box, FOpen, Full){
			// Recherche des boites demandant l'ajout du widget
			var list			= new Array();
			var I				= null;
			var t				= null;
			var F				= false;
			var B				= false;
			var P				= false;
			var E				= false;
			var i;
			var l				= Box.childNodes.length;
			if(Full){
				for(i = 0; i < l; i++){
					if(Html.check(Box.childNodes[i])){
						if(Box.childNodes[i].className.match("ep_box") && !Box.childNodes[i].className.match("ep_boxidentity")){
							if(Box.childNodes[i].className.match("ep_boxheader")){
								list.push({button:Box.childNodes[i], content:[]});
								I	= list[list.length -1];
								F	= false;
								B	= false;
								P	= false;
								E	= false;
							}else if(I != null){
								if(!F && Box.childNodes[i].className.match("ep_boxfilter")){			I.content.push(Box.childNodes[i]);	F 	= true;
								}else if(!B && Box.childNodes[i].className.match("ep_boxbody")){		I.content.push(Box.childNodes[i]);	B	= true;
								}else if(!P && Box.childNodes[i].className.match("ep_boxpaginate")){	I.content.push(Box.childNodes[i]);	P	= true;
								}else if(!E && Box.childNodes[i].className.match("ep_boxfooter")){		I.content.push(Box.childNodes[i]);	E	= true;
								}else{																	I	= null;
								}
							}
						}
					}
				}
			}else{
				for(i = 0; i < l; i++){
					t				= Box.childNodes[i];
					if(Html.check(t)){
						if(t.className.match("ep_box") && !t.className.match("ep_boxidentity")){
							if((t.className.match("ep_boxheader") && Full) || t.className.match("ep_minimizeblock")){
								list.push({button:t, content:[]});
								I	= list[list.length -1];
								F	= false;
								B	= false;
								P	= false;
								E	= false;
							}else if(I != null){
								if(!F && !B && t.className.match("ep_boxfilter")){		I.content.push([t, "filter"]);													F 	= true;
								}else if(!B && t.className.match("ep_boxbody")){		I.content.push([t, (t.className.match("ep_greybody"))? "greybody" : "body"]);	B	= true;
								}else if(!P && t.className.match("ep_boxpaginate")){	I.content.push([t, "paginate"]);												P	= true;
								}else if(!E && t.className.match("ep_boxfooter")){		I.content.push([t, "footer"]);													E	= true;
								}else{																																	I	= null;
								}
							}
						}
					}
				}
			}
			// Verification de la presence de traitement
			if(list.length > 0){
				l				= list.length;
				for(i = 0; i < l; i++){ 
					if(typeof(list[i]) == "object"){
						if(typeof(list[i].button) == "object" && list[i].content.length > 0) manageElementbox_display(Html, list[i].button, list[i].content, (FOpen && i == 0)); 
					}
				}
			}
		};
		function manageElementbox_display(Html, Button, Contents, FOpen){
			// Recherche du bloc titre
			var T			= null;
			var B			= null;
			var E			= null;
			var i;
			var j;
			var n;
			var l;
			var m			= Button.childNodes.length;
			for(i = 0; i < m; i++){
				if(Html.check(Button.childNodes[i])){
					if(Button.childNodes[i].className.match("ep_block")) 		T = Button.childNodes[i];
					else if(Button.childNodes[i].className.match("ep_button")) 	B = Button.childNodes[i];
				}
			}
			// Creation de la liste
			var list		= [{id:Button, cssopen:"ep_openheader", cssclose:"ep_closeheader"}];
			m				= Contents.length;
			for(i = 0; i < m; i++){ list.push({id:Contents[i][0], cssopen:"ep_open" + Contents[i][1], cssclose:"ep_close" + Contents[i][1]}); }
			// Recherche du premier element
			for(i = 0; i < m; i++){	
				l			= Contents[i][0].getElementsByTagName("div");
				n			= l.length;
				for(j = 0; j < n; j++){	if(l[j].className == "ep_element1col"){		E = l[j];	break; } }
			}
			// Verification de l'existence du titre
			if(T != null){
				// Correction du premier conteneur
				if(E != null) E.className	= E.className + " ep_elementmain";
				// Initialisation de la classe
				D			= new DisplayControl();
				// Ajout de l'action sur le titre de la boite
				D.addEventFct({id:T, cssopen:(B == null)? "ep_open" : "ep_openbtn", cssclose:(B == null)? "ep_close" : "ep_closebtn"}, list, !(FOpen), false, true, false);
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init();
	};

/* ======================================================================================================== */
/* PaginationControler ==================================================================================== */
/* ======================================================================================================== */
/* Classe JS gerant le traitement de toutes les boites demandant une pagination geree en javascript */

	function PaginationControler(Lang){
		// Parametres autorises lors de la creation de la classe JS:
			// 	Lang						:String			>> version linguistique (encode sur deux caracteres [exemple : en])
			// 	Argument optionnel			:Number			>> nombre de "ep_block" affiches par la pagination (a utiliser avec precaution)
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new PaginationControler("version linguistique sur deux caracteres");
			// Les boites utilisant la classe "ep_autopaginatebox" seront automatiquement converties : creation de la pagination + disparition des elements
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Variables
		var This;
		var Html;
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(VL, Max){
			// Verification a l'acces aux scripts de gestion et creation
			if(typeof(htmanager_js) == "boolean" && htmanager_js){
				// Verification du nombre d'elements par page
				Max							= (!isNaN(Max) && Max > 0)? Max : 10;
				// Sauvegarde des references
				This						= this;
				Html						= new HTManager();
				// Identification des boites
					// Liste des boites a traiter
					var boxes				= new Array();
					// Fonction d'identification des boites
					function getBoxes(m){
						var l				= m.childNodes.length;
						for(var i = 0; i < l; i++){
							if(Html.check(m.childNodes[i])){
								// Recherche des boites portant la classe "marqueur"
								if(m.childNodes[i].className.match("ep_autopaginatebox")) 	boxes.push([m.id, m.childNodes[i]]);
							}
						}
					}
					// Lancement de la recherche dans les deux zones principales
					var z					= document.getElementById("mainzone");
					if(Html.check(z)) getBoxes(z);
					z						= document.getElementById("contextzone");
					if(Html.check(z)) getBoxes(z);
				// Verification de la presence de boite a traiter
				if(boxes.length > 0){
					// Identification linguistique
					var z					= getLang(VL);
					// Traitement des boites
					k						= boxes.length;
					for(var j = 0; j < k; j++){		managebox(boxes[j][1], Max, z, (boxes[j][0] == "mainzone"));	}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'element de pagination si besoin
		function managebox(Box, Max, Language, Buttons){
			var i;
			var B						= null;
			var P						= null;
			var F						= null;
			// Identification des elements de la boite
			var m						= Box.childNodes.length;
			for(i = 0; i < m; i++){
				if(Html.check(Box.childNodes[i])){
					// Recherche des boites portant la classe "marqueur"
					if(Box.childNodes[i].className.match("ep_boxbody")) 			B	= Box.childNodes[i];
					else if(Box.childNodes[i].className.match("ep_boxfooter")) 		F	= Box.childNodes[i];
					else if(Box.childNodes[i].className.match("ep_boxpaginate")) 	P	= Box.childNodes[i];
					if(B != null && F != null && P != null) break;
				}
			}
			// Suppression de la pagination existante
			if(P != null) Box.removeChild(P);
			// Verification de l'acces aux donnees
			if(B != null){
				// Recherche du nombre d'elements dont est compose la boite
				var e					= new Array();
				m						= B.childNodes.length;
				for(i = 0; i < m; i++){
					if(Html.check(B.childNodes[i])){
						if(B.childNodes[i].className.match("ep_block")) e.push(B.childNodes[i]);
					}
				}
				// Verification de la presence d'un nombre superieur au nombre maximal autorise
				if(e.length > Max){
					// Creation de l'objet de donnees
					var D				= new Object();
					// Sauvegarde des elements
					D.elements			= e;
					// Sauvegarde des valeurs maximales
					D.max				= new Object();
					D.max.e				= D.elements.length;
					D.max.v				= Max;
					D.max.p				= Math.ceil(D.max.e / D.max.v);
					// Sauvegarde de l'affichage des boutons
					D.display			= new Object();
					D.display.p			= false;
					D.display.n			= false;
					// Creation des balises
						// Objet de donnees
						D.tags			= new Object();
						// Creation du conteneur principal
						var M			= Html.createNode("div", {className:"ep_boxpaginate"});
						D.tags.m		= Html.createNode("div", {className:"ep_block"});
						M.appendChild(D.tags.m);
						// Creation du bouton precedent
						if(Buttons){
							D.tags.bp		= Html.createNode("a", {href:"#paginateprevious", 	title:Language.previous_title}, 	Language.previous_label);
							D.tags.cp		= Html.createNode("span", {className:"ep_button"});
							D.tags.m.appendChild(D.tags.cp);
						}
						// Creation du conteneur de la liste de page
						D.tags.c		= Html.createNode("div", {className:"ep_paginate"});
						D.tags.m.appendChild(D.tags.c);
						D.tags.p		= null;
						// Creation du bouton suivant
						if(Buttons){
							D.tags.bn		= Html.createNode("a", {href:"#paginatenext", 		title:Language.next_title}, 		Language.next_label);
							D.tags.cn		= Html.createNode("span", {className:"ep_button"});
							D.tags.m.appendChild(D.tags.cn);
						}
						// Creation du bloc de fin
						D.tags.e		= Html.createNode("span", {className:"ep_endbox"}, " ");
						D.tags.m.appendChild(D.tags.e);
						// Ajout des actions
						if(Buttons){
							Html.addEvent(D.tags.bp, "click", function(){ This.change(D, null, -1, Language, Buttons); }, true);
							Html.addEvent(D.tags.bn, "click", function(){ This.change(D, null,  1, Language, Buttons); }, true);
						}
					// Integration du conteneur
					if(F == null) Box.appendChild(M);
					else Box.insertBefore(M, F);
					// Gestion de l'affichage de la premiere page
					display(D, 1, Language, true, Buttons);
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction affichant les bons elements en fonction de la pagination
		function display(D, selected, Language, init, Buttons){
			// Verification de la demande
			if(selected < 1) 		selected = 1;
			if(selected > D.max.p) 	selected = D.max.p;
			// Sauvegarde de la selection
			D.selected				= selected;
			// Creation de la pagination
			createPagination(D, selected, Language, Buttons);
			// Affichage des pages
			var i;
			var min;
			var max;
				// Disparition des elements des pages apres la page selectionnee
				min					= 0;
				max					= (selected -1)*D.max.v;
				for(i = min; i < max; i++){	D.elements[i].style.display = "none";	}
				// Affichage des elements de la page selectionnee
				min					= (selected -1)*D.max.v;
				max					= Math.min((selected)*D.max.v, D.max.e);
				for(i = min; i < max; i++){	D.elements[i].style.display = "";	}
				// Disparition des elements des pages avant la page selectionnee
				min					= Math.min((selected)*D.max.v, D.max.e);
				max					= D.max.e;
				for(i = min; i < max; i++){	D.elements[i].style.display = "none";	}
			// Assignation du focus
			if(!init) D.elements[(selected -1)*D.max.v].focus();
		}
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction creant les elements de la pagination
		function createPagination(D, selected, Language, B){
			// Fonction de creation des pages
			function addpage(ref){
				// Creation du conteneur
				var s			= Html.createNode("div");
				var m			= Html.createNode("li", s);
				// Analyse de la version demandee
				var t;
				if(ref != selected){
					// Creation du texte cache
					t			= Html.createNode("span", {className:"ep_hidden"}, Language.page);
					// Creation du lien
					t			= Html.createNode("a", {href:"#paginatenumber", 	title:Language.number_title}, t, String(ref));
					s.appendChild(t);
					// Ajout de l'action
					t.onclick	= function(){	This.change(D, ref, 0, Language); return(false); };	
				}else{
					// Creation du texte cache
					t			= Html.createNode("span", {className:"ep_hidden"}, Language.page);
					// Creation du texte cache
					var u		= Html.createNode("span", {className:"ep_hidden"}, Language.selected);
					// Creation du libelle
					t			= Html.createNode("span", {tabIndex:0}, t, String(ref), u);
					s.appendChild(t);
				}
				D.tags.p.appendChild(m);	
			};
			// Fonction de creation des elements "..."
			function addmore(){
				var s			= Html.createNode("span", {className:"ep_more"}, "…");
				s				= Html.createNode("div", s);
				s				= Html.createNode("li", {tabIndex:"-1"}, s);
				D.tags.p.appendChild(s);
			};
			// Nettoyage de la pagination existante
				if(D.tags.p != null) D.tags.c.removeChild(D.tags.p);
			// Gestion des boutons de navigation
			if(B){
				if(!D.display.p			&& selected > 1){ 			D.tags.cp.appendChild(D.tags.bp);	D.display.p = true; 
				}else if(D.display.p	&& selected == 1){ 			D.tags.cp.removeChild(D.tags.bp);	D.display.p = false;	}
				if(!D.display.n			&& selected < D.max.p){ 	D.tags.cn.appendChild(D.tags.bn);	D.display.n = true;
				}else if(D.display.n	&& selected == D.max.p){ 	D.tags.cn.removeChild(D.tags.bn);	D.display.n = false; 	}
			}
			// Creation de la liste
				D.tags.p			= Html.createNode("ol");
				D.tags.c.appendChild(D.tags.p);
				// Creation des pages
				var i;
				var min;
				var max;
				if(D.max.p <= 11){
					// Creation des elements
					min				= 1;
					max				= D.max.p +1;
					for(i = min; i < max; i++){	addpage(i); }
				}else if(selected <= 6){
					// Creation des elements
					min				= 1;
					max				= 10;
					for(i = min; i < max; i++){	addpage(i); }
					// Ajout du texte "..."
					addmore();
					// Creation du dernier element de la liste
					addpage(D.max.p);
				}else if(selected >= D.max.p - 5){
					// Creation du premier element de la liste
					addpage(1);
					// Ajout du texte "..."
					addmore();
					// Creation des elements
					min				= D.max.p -8;
					max				= D.max.p +1;
					for(i = min; i < max; i++){	addpage(i); }
				}else{
					// Creation du premier element de la liste
					addpage(1);
					// Ajout du texte "..."
					addmore();
					// Creation des elements
					min				= selected -3;
					max				= selected +4;
					for(i = min; i < max; i++){	addpage(i); }
					// Ajout du texte "..."
					addmore();
					// Creation du dernier element de la liste
					addpage(D.max.p);
				}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction modifiant l'affichage de la pagination
		this.change = function(D, choose, change, Language, Button){
			// Verification de la conformite du format
			if(typeof(D) == "object"){
				if(typeof(D.elements) == "object"){
					// Analyse de la demande
					if(choose != null) 	display(D, choose, Language, false, Button);
					else 				display(D, D.selected + change, Language, false, Button);
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction initialisant les valeurs linguistiques
		function getLang(l){
			l						= String(l).toLowerCase();
			var o					= new Object();
				o.ref				= l;
			switch(l){
				case "bg":
					o.page				= "страница ";
					o.number_title		= "Покажете тази страница";
					o.selected			= " (селекциониране)";
					o.previous_label	= "Предишна страница";
					o.previous_title	= "Покажете предишната страница";
					o.next_label		= "Следваща страница";
					o.next_title		= "Покажете следващата страница";
					break;
				case "cs":
					o.page				= "stránka ";
					o.number_title		= "Chci vidět tuto stránku";
					o.selected			= " (výběr)";
					o.previous_label	= "Předchozí stránka";
					o.previous_title	= "Chci vidět předchozí stránku";
					o.next_label		= "Další stránka";
					o.next_title		= "Chci vidět příští stránku";
					break;
				case "da":
					o.page				= "side ";
					o.number_title		= "Vis denne side";
					o.selected			= " (valgt)";
					o.previous_label	= "Sidste side";
					o.previous_title	= "Vis foregående side";
					o.next_label		= "Næste side";
					o.next_title		= "Vis næste side";
					break;
				case "de":
					o.page				= "seite ";
					o.number_title		= "Diese Seite anzeigen";
					o.selected			= " (ausgewählt)";
					o.previous_label	= "Zurück";
					o.previous_title	= "Vorige Seite anzeigen";
					o.next_label		= "Weiter";
					o.next_title		= "Nächste Seite anzeigen";
					break;
				case "el":
					o.page				= "σελίδα ";
					o.number_title		= "Εμφάνιση σελίδας";
					o.selected			= " (επιλεγμένο)";
					o.previous_label	= "Προηγούμενη σελίδα";
					o.previous_title	= "Εμφάνιση προηγούμενης σελίδας";
					o.next_label		= "Επόμενη σελίδα";
					o.next_title		= "Εμφάνιση επόμενη σελίδα";
					break;
				case "es":
					o.page				= "página ";
					o.number_title		= "Mostrar esta página";
					o.selected			= " (selección)";
					o.previous_label	= "Página anterior";
					o.previous_title	= "Mostrar la página anterior";
					o.next_label		= "Página siguiente";
					o.next_title		= "Mostrar la página siguiente";
					break;
				case "et":
					o.page				= "lehekülg ";
					o.number_title		= "Vaata seda lehekülge";
					o.selected			= " (valitud)";
					o.previous_label	= "Eelmine lehekülg";
					o.previous_title	= "Vaata eelmist lehekülge";
					o.next_label		= "Järgmine lehekülg";
					o.next_title		= "Vaata järgmist lehekülge";
					break;
				case "fi":
					o.page				= "sivu ";
					o.number_title		= "Näytä sivu";
					o.selected			= " (valittuna)";
					o.previous_label	= "Edellinen sivu";
					o.previous_title	= "Näytä edellinen sivu";
					o.next_label		= "Seuraava sivu";
					o.next_title		= "Näytä seuraava sivu";
					break;
				case "fr":
					o.page				= "page ";
					o.number_title		= "Afficher cette page";
					o.selected			= " (sélectionné)";
					o.previous_label	= "Page précédente";
					o.previous_title	= "Afficher la page précédente";
					o.next_label		= "Page suivante";
					o.next_title		= "Afficher la page suivante";
					break;
				case "hu":
					o.page				= "oldal ";
					o.number_title		= "Ugrás erre az oldalra";
					o.selected			= " (kiválasztva)";
					o.previous_label	= "Előző oldal";
					o.previous_title	= "Ugrás az előző oldalra";
					o.next_label		= "Következő oldal";
					o.next_title		= "Ugrás a következő oldalra";
					break;
				case "it":
					o.page				= "pagina ";
					o.number_title		= "Mostra la pagina corrente";
					o.selected			= " (selezionato)";
					o.previous_label	= "Pagina precedente";
					o.previous_title	= "Mostra la pagina precedente";
					o.next_label		= "Pagina successiva";
					o.next_title		= "Mostra la pagina seguente";
					break;
				case "lt":
					o.page				= "puslapis ";
					o.number_title		= "Rodyti šį puslapį";
					o.selected			= " (atrinkta)";
					o.previous_label	= "Ankstesnis puslapis";
					o.previous_title	= "Rodyti ankstesnį puslapį";
					o.next_label		= "Kitas puslapis";
					o.next_title		= "Rodyti kitą puslapį";
					break;
				case "lv":
					o.page				= "lapa ";
					o.number_title		= "Parādīt šo lappusi";
					o.selected			= " (izvēlēts)";
					o.previous_label	= "Iepriekšējā lapa";
					o.previous_title	= "Parādīt iepriekšējo lappusi";
					o.next_label		= "Nākamā lapa";
					o.next_title		= "Parādīt nākamo lappusi";
					break;
				case "mt":
					o.page				= "paġna ";
					o.number_title		= "Uri din il-paġna";
					o.selected			= " (magħżula)";
					o.previous_label	= "Paġna ta' qabel";
					o.previous_title	= "Uri l-paġna preċedenti";
					o.next_label		= "Paġna ta' wara";
					o.next_title		= "Uri l-paġna li jmiss";
					break;
				case "nl":
					o.page				= "pagina ";
					o.number_title		= "Toon deze pagina";
					o.selected			= " (huidige pagina)";
					o.previous_label	= "Vorige pagina";
					o.previous_title	= "Toon de vorige pagina";
					o.next_label		= "Volgende pagina";
					o.next_title		= "Toon de volgende pagina";
					break;
				case "pl":
					o.page				= "strona ";
					o.number_title		= "Ugrás erre az oldalra";
					o.selected			= " (wybrano)";
					o.previous_label	= "Poprzednia strona";
					o.previous_title	= "Ugrás az előző oldalra";
					o.next_label		= "Następna strona";
					o.next_title		= "Ugrás a következő oldalra";
					break;
				case "pt":
					o.page				= "página ";
					o.number_title		= "Mostrar esta página";
					o.selected			= " (seleccionado)";
					o.previous_label	= "Página anterior";
					o.previous_title	= "Mostrar página anterior";
					o.next_label		= "Página seguinte";
					o.next_title		= "Mostrar página seguinte";
					break;
				case "ro":
					o.page				= "pagina ";
					o.number_title		= "Afişează această pagină";
					o.selected			= " (selecţionat)";
					o.previous_label	= "Pagina anterioară";
					o.previous_title	= "Afişează pagina precedentă";
					o.next_label		= "Următoarea pagină";
					o.next_title		= "Afişează pagina următoare";
					break;
				case "sk":
					o.page				= "stránka ";
					o.number_title		= "Zobraz túto stránku";
					o.selected			= " (vybraté)";
					o.previous_label	= "Predchádzajúca strana";
					o.previous_title	= "Zobraz predchádzajúcu stránku";
					o.next_label		= "Nasledujúca strana";
					o.next_title		= "Zobraz ďalšiu stránku";
					break;
				case "sl":
					o.page				= "stran ";
					o.number_title		= "Prikaži to stran";
					o.selected			= " (izbrano)";
					o.previous_label	= "Prejšnja stran";
					o.previous_title	= "Prikaži predhodno stran";
					o.next_label		= "Naslednja stran";
					o.next_title		= "Prikaži naslednjo stran";
					break;
				case "sv":
					o.page				= "sida ";
					o.number_title		= "Visa denna sida";
					o.selected			= " (vald)";
					o.previous_label	= "Föregående sida";
					o.previous_title	= "Visa föregående sida";
					o.next_label		= "Nästa sida";
					o.next_title		= "Visa nästa sida";
					break;
				case "en":
				default:
					// Texte cache "page"
					o.page				= "page ";
					// Infobulle des boutons numeriques
					o.number_title		= "Display this page";
					// Texte cache "selectionne"
					o.selected			= " (selected)";
					// Libelle du bouton "next"
					o.previous_label	= "Previous page";
					// Infobulle du bouton "next"
					o.previous_title	= "Display the previous page";
					// Libelle du bouton "next"
					o.next_label		= "Next page";
					// Infobulle du bouton "next"
					o.next_title		= "Display the next page";
			}
			return(o);
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init(Lang, arguments[1]);
	};

/* ======================================================================================================== */
/* FilterControler ======================================================================================== */
/* ======================================================================================================== */
/* Classe JS gerant le traitement de toutes les boites demandant un filtre gere en javascript */

	function FilterControler(){
		// Classe utilisee
			// HTManager					>> htmanager.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new FilterControler();
			// Les boites utilisant la classe "ep_autofilterbox" seront automatiquement converties : creation du filtre + disparition des elements
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Variables
		var This;
		var Html;
		var Ref		= 0;
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(){
			// Verification a l'acces aux scripts de gestion et creation
			if(typeof(htmanager_js) == "boolean" && htmanager_js && typeof(managetag_js) == "boolean" && managetag_js){
				// Sauvegarde des references
				This						= this;
				Html						= new HTManager();
				Select						= new SelectConvert();
				// Identification des boites
					// Liste des boites a traiter
					var boxes				= new Array();
					// Fonction d'identification des boites
					function getBoxes(m){
						var l				= m.childNodes.length;
						for(var i = 0; i < l; i++){
							if(Html.check(m.childNodes[i])){
								// Recherche des boites portant la classe "marqueur"
								if(m.childNodes[i].className.match("ep_autofilterbox")){
									boxes.push([m.childNodes[i], true]);
								} else if(m.childNodes[i].className.match("ep_autorequestbox")){
									boxes.push([m.childNodes[i], false]);
								}
							}
						}
					}
					// Lancement de la recherche dans les deux zones principales
					var z					= document.getElementById("mainzone");
					if(Html.check(z)) getBoxes(z);
					z						= document.getElementById("contextzone");
					if(Html.check(z)) getBoxes(z);
				// Verification de la presence de boite a traiter
				if(boxes.length > 0){
					// Traitement des boites
					k						= boxes.length;
					for(var j = 0; j < k; j++){		managebox(Select, boxes[j][0], boxes[j][1]);	}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'element de filtre si bien parametre
		function managebox(Select, Box, FilterContent){
			var i;
			var B						= null;
			var F						= null;
			var R						= null;
			// Identification des elements de la boite
			var m						= Box.childNodes.length;
			for(i = 0; i < m; i++){
				if(Html.check(Box.childNodes[i])){
					// Recherche des boites portant la classe "marqueur"
					if(Box.childNodes[i].className.match("ep_boxbody")) 			B	= Box.childNodes[i];
					else if(Box.childNodes[i].className.match("ep_boxfilter")) 		F	= Box.childNodes[i];
					if(B != null && F != null) break;
				}
			}
			// Verification de l'acces aux donnees
			if(B != null && F != null){
				// Recherche des donnees relatives au filtre
					var filter				= new Object();
					// Initialisation de l'objet de donnee
					filter.title			= null;			// Titre du filtre
					filter.label			= null;			// Libelle pour le selecteur
					filter.links			= new Array();	// Liste des options pour le selecteur
					filter.alltarget		= new Array();	// Liste des blocs existants
					filter.target			= new Object();	// Listes des blocs de contenu a filtrer
					filter.selected			= -1;			// Valeur selectionnee
					// Recuperation du label et du titre
					var t					= F.getElementsByTagName("div");
					m						= t.length;
					for(i = 0; i < m; i++){	
						if(t[i].className 		== "ep_block") 				R			 = t[i];	// Conteneur du menu
						else if(t[i].className 	== "ep_title") 				filter.title = Html.cleanText(t[i].innerHTML);
						else if(t[i].className 	== "ep_subtitle_view")		filter.label = {text:Html.cleanText(t[i].innerHTML), display:true};
						else if(t[i].className 	== "ep_subtitle_hidden")	filter.label = {text:Html.cleanText(t[i].innerHTML), display:false};
					}
					// Recuperation des liens
					t						= F.getElementsByTagName("a");
					m						= t.length;
					var f;
					// Analayse de l'action demandee pour le filtre : filtrage du contenu de la boite ou ouverture dans une nouvelle page ?
					if(FilterContent){	// - - - - - - - - - - - - - - - - Filtre de contenu > Recuperation des ancres valides
						// Initialisation du champs selectionne par defaut
						filter.selected			= 0;
						// Traitement des liens
						for(i = 0; i < m; i++){	
							if(String(t[i].href).match("#")){
								// Identification de l'ancre
								f					= String(t[i].href).indexOf("#") +1;
								f					= String(t[i].href).substr(f);
								// Sauvegarde du lien
								filter.links.push({label:Html.cleanText(t[i].innerHTML), target:f});
								// Analyse de la selection
								if(String(t[i].className).match("ep_selected")) filter.selected = i;
								// Preparation de l'objet de donnees
								filter.target[f]	= new Array();
							}
						}
						// Verification de la presence de liens
						if(filter.links.length > 2){
							// Recherche des elements dont est compose le corps de la boite
							m						= B.childNodes.length;
							for(i = 0; i < m; i++){
								if(Html.check(B.childNodes[i])){
									if(B.childNodes[i].className.match("ep_block")){
										// Ciblage de l'element de filtre
										if(String(B.childNodes[i].id).length > 0 && typeof(filter.target[B.childNodes[i].id]) == "object"){
											f = filter.target[B.childNodes[i].id];
											B.childNodes[i].id	= "";
										}
										// Ajout du bloc dans le filtre
										if(typeof(f) == "object"){
											f.push(B.childNodes[i]);
											filter.alltarget.push(B.childNodes[i]);
										}
									}
								}
							}
							// Ajout du lien ne filtrant rien s'il est demande
							if(typeof(filter.target.filterallview) == "object") filter.target.filterallview	 = filter.alltarget;
						}
					}else{	// - - - - - - - - - - - - - - - - - - - - - - Filtre de contenu > Recuperation des liens menant vers une page web
						for(i = 0; i < m; i++){	
							if(String(t[i].href).length > 2){
								// Sauvegarde du lien
								filter.alltarget.push({address:t[i].href, target:"_self"});
								if(t[i].target == "_blank") filter.alltarget[filter.alltarget.length -1].target = "_blank";
								filter.links.push({label:Html.cleanText(t[i].innerHTML), target:(filter.alltarget.length -1)});
								// Analyse de la selection
								if(String(t[i].className).match("ep_selected")) filter.selected = i;
							}
						}
					}
					// Verification de l'existance de blocs associés au filtre
					if(filter.alltarget.length >= filter.links.length){
						// Creation du filtre
							// Conteneur principal
							var menu				= Html.createNode("form", {action:"filter", method:"get", className:"ep_block1col"});
							// Creation du titre
							if(filter.title != null){
								t 					= Html.createNode("div", {className:"ep_title"}, filter.title);
								menu.appendChild(t);
							}
							// Creation du bloc de colonnage
							t 						= Html.createNode("div", {className:"ep_columninline"});
							menu.appendChild(t);
							// Creation du label
							if(filter.label != null){
								f					= Html.createNode("label", {htmlFor:"filter_autoselector_num" + Ref}, filter.label.text);
								f					= Html.createNode("div", f);
								f					= Html.createNode("div", {className:(filter.label.display)? "ep_label" : "ep_hidden"}, f);
								t.appendChild(f);
							}
							// Creation du selecteur
							var o					= (!FilterContent && filter.selected == -1)? " ep_empty" : "";
							var s					= Html.createNode("select", {className:"ep_field" + o, id:"filter_autoselector_num" + Ref});
							m						= filter.links.length;
							for(i = 0; i < m; i++){
								o					= Html.createNode("option", {value:filter.links[i].target}, filter.links[i].label);
								s.appendChild(o);
							}
							f						= Html.createNode("div", s);
							f						= Html.createNode("div", {className:"ep_data"}, f);
							t.appendChild(f);
							menu.appendChild(t);
							// Creation du bloc de colonnage
							o						= Html.createNode("input", {type:"submit", value:"Ok"});
							t 						= Html.createNode("div", {className:"ep_button"}, o);
							menu.appendChild(t);
							// Cloture du bloc
							t						= Html.createNode("span", {className:"ep_endbox"}, " ");
							menu.appendChild(t);
						// Integration du menu
						F.insertBefore(menu, R);
						// Suppression des balises de l'ancien
						F.removeChild(R);
						// Ajout de l'evenement de filtrage du contenu
						if(FilterContent){
							// Assignation de la valeur selectionnee du selecteur
							s.selectedIndex				= filter.selected;
							// Convertion du champ "select"
							Select.addEventFct(menu, s, o, true, [f], [true, function(value){ This.filter(filter.alltarget, filter.target[value]); }]);
							// Gestion de l'affichage de la premiere page
							This.filter(filter.alltarget, filter.target[filter.links[filter.selected].target], ("filter_autoselector_num" + Ref));
						}else{
							// Convertion du champ "select"
							Select.addEventFct(menu, s, o, true, [f], [true, function(value){ window.open(filter.alltarget[value].address, filter.alltarget[value].target); }]);
						}
						// Indexaction du filtre
						Ref++;
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement du filtre des blocs associes
		this.filter = function(Full, List){
			var i;
			var m;
			// Disparition de tous les blocs de donnees
			m					= Full.length;
			for(i = 0; i < m; i++){	Full[i].style.display = "none"; }
			// Affichage des blocs ciblage
			m					= List.length;
			for(i = 0; i < m; i++){	List[i].style.display = ""; 	}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init();
	};

/* ======================================================================================================== */
/* TabControler =========================================================================================== */
/* ======================================================================================================== */
/* Classe JS gerant le traitement de toutes les boites demandant des onglets geres en javascript */

	function TabControler(Lang){
		// Parametres autorises lors de la creation de la classe JS:
			// 	Lang						:String			>> version linguistique (encode sur deux caracteres [exemple : en])
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new TabControler();
			// Boite dont le corps (ep_boxbody) est a diviser en onglet :
			//	> la boite doit posseder la classe "ep_autotabbox" pour etre traitee
			//	> la boite doit avoir un menu de type "onglet" deja present en HTML
			//	> chaque onglet doit etre une ancre menant a une balise "ep_block"
			//	> un onglet n'est pris en compte que s'il mene vers une balise "ep_block" (ayant donc le meme id que celui de l'ancre)
			//	> toutes les balises "ep_block" suivant une balise ayant l'id d'un onglet seront associees a cet onglet
			//	> si on veut ouvrir la boite sur un onglet specifique, il faut assigner la classe "ep_selected" a l'onglet
			// Boites a fusionner en une boite a onglet
			// 	> les boites doivent porter la classe ["ep_mergetabbox" + reference] (la reference sert a identifier les boites a fusionner)
			//	> si on veut ouvrir la boite sur un onglet specifique, il faut assigner la classe "ep_opentab"
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Variables
		var This;
		var Html;
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(VL){
			// Verification a l'acces aux scripts de gestion et creation
			if(typeof(htmanager_js) == "boolean" && htmanager_js && typeof(managetag_js) == "boolean" && managetag_js){
				// Sauvegarde des references
				This						= this;
				Html						= new HTManager();
				// Identification des boites
					// Liste des boites a traiter : onglets dynamiques gerant l'affichage du contenu d'une meme boite
					var tagboxes			= new Array();
					// Liste des boites a traiter : fusion des boites en une boite unique
					var mergeboxes			= new Object();
						mergeboxes.l		= new Array();
						mergeboxes.b		= new Object();
					// Fonction d'identification des boites
					function getBoxes(m){
						var l				= m.childNodes.length;
						var c;
						var r;
						var s;
						for(var i = 0; i < l; i++){
							if(Html.check(m.childNodes[i])){
								// Recherche des boites portant la classe "marqueur"
								if(m.childNodes[i].className.match("ep_autotabbox")) 		tagboxes.push(m.childNodes[i]);
								else if(m.childNodes[i].className.match("ep_mergetabbox")){
									s		= String(m.childNodes[i].className);
									r		= s.indexOf("ep_mergetabbox");
									c		= s.substring(r + 3, (s.indexOf(" ", r) > r)? s.indexOf(" ", r) : s.length);
									if(typeof(mergeboxes.b[c]) != "object"){ mergeboxes.b[c]	= new Array();	mergeboxes.l.push(c); }
									mergeboxes.b[c].push(m.childNodes[i]);
								}
							}
						}
					}
					// Lancement de la recherche dans les deux zones principales
					var z					= document.getElementById("mainzone");
					if(Html.check(z)) getBoxes(z);
					z						= document.getElementById("contextzone");
					if(Html.check(z)) getBoxes(z);
				// Verification de la presence de boite a onglets dynamiques a traiter
				var k;
				var j;
				if(tagboxes.length > 0){
					// Traitement des boites
					k						= tagboxes.length;
					for(j = 0; j < k; j++){		managetab(tagboxes[j]);	}
				}
				// Verification de la presence de boite a onglets dynmaiques a traiter
				if(mergeboxes.l.length > 0){
					// Traitement des boites
					k						= mergeboxes.l.length;
					for(j = 0; j < k; j++){		if(mergeboxes.b[mergeboxes.l[j]].length > 1){ managemerge(mergeboxes.b[mergeboxes.l[j]], VL);	}}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction gerant les onglets de la boite si elle est bien parametree
		function managetab(Box){
			var i;
			var B						= null;
			var H						= null;
			var R						= null;
			// Identification des elements de la boite
			var m						= Box.childNodes.length;
			for(i = 0; i < m; i++){
				if(Html.check(Box.childNodes[i])){
					// Recherche des boites portant la classe "marqueur"
					if(Box.childNodes[i].className.match("ep_boxbody")) 			B	= Box.childNodes[i];
					else if(Box.childNodes[i].className.match("ep_boxheader")) 		H	= Box.childNodes[i];
					if(B != null && H != null) break;
				}
			}
			// Verification de l'acces aux donnees
			if(B != null && H != null){
				// Recherche des donnees relatives au filtre
					var tab					= new Object();
					// Initialisation de l'objet de donnee
					tab.links				= new Array();	// Liste des options pour le selecteur
					tab.alltarget			= new Array();	// Liste des blocs existants
					tab.target				= new Object();	// Listes des blocs de contenu a filtrer
					tab.selected			= 0;			// Valeur selectionnee
					// Recuperation des liens
					t						= H.getElementsByTagName("a");
					m						= t.length;
					var f;
					for(i = 0; i < m; i++){	
						if(String(t[i].href).match("#")){
							// Identification de l'ancre
							f					= String(t[i].href).indexOf("#") +1;
							f					= String(t[i].href).substr(f);
							// Sauvegarde du lien
							tab.links.push({button:t[i].parentNode, target:f});
							// Analyse de la selection
							if(String(t[i].className).match("ep_selected")){ tab.selected = tab.links.length -1;	t[i].className = t[i].className.replace(" ep_selected", "").replace("ep_selected", ""); }
							// Preparation de l'objet de donnees
							tab.target[f]	= new Array();
						}
					}
				// Verification de la presence de liens
				if(tab.links.length >= 2){
					// Recherche des elements dont est compose le corps de la boite
					m						= B.childNodes.length;
					for(i = 0; i < m; i++){
						if(Html.check(B.childNodes[i])){
							if(B.childNodes[i].className.match("ep_block")){
								// Ciblage de l'element de filtre
								if(String(B.childNodes[i].id).length > 0 && typeof(tab.target[B.childNodes[i].id]) == "object"){
									f = tab.target[B.childNodes[i].id];
									B.childNodes[i].id	= "";
								}
								// Ajout du bloc dans le filtre
								if(typeof(f) == "object"){
									f.push(B.childNodes[i]);
									tab.alltarget.push(B.childNodes[i]);
								}
							}
						}
					}
					// Fonction ajoutant l'action sur le lien du menu
					function add(target){
						if(tab.target[tab.links[target].target].length > 0){
							Html.addEvent(tab.links[target].button, "click", function(){ This.filterTab(tab.links, tab.links[target].button, tab.alltarget, tab.target[tab.links[target].target]);  }, true);
						}else{
							Html.addEvent(tab.links[target].button, "click", function(){  }, true);
						}
					}
					// Verification de l'existance de blocs associés au filtre
					if(tab.alltarget.length >= tab.links.length){
						// Ajout des actions sur les boutons
						m					= tab.links.length;
						for(i = 0; i < m; i++){  add(i); }
						// Gestion de l'affichage de la premiere page
						This.filterTab(tab.links, tab.links[tab.selected].button, tab.alltarget, tab.target[tab.links[tab.selected].target]);
					}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement du filtre des blocs associes
		this.filterTab = function(Links, Target, Full, List){
			var i;
			var m;
			// Disparition de tous les blocs de donnees
			m						= Full.length;
			for(i = 0; i < m; i++){	Full[i].style.display = "none"; }
			// Suppression de la selection des onglets
			m						= Links.length;
			for(i = 0; i < m; i++){	Links[i].button.className = String(Links[i].button.className).replace(" ep_selected", "").replace("ep_selected", ""); }
			// Affichage des blocs cibles
			m						= List.length;
			for(i = 0; i < m; i++){	List[i].style.display = ""; 	}
			// Ajout de la selection dans les onglets
			Target.className 		+= (String(Target.className).length > 0)? " ep_selected" : "ep_selected";
			// Assignation du focus
			List[0].focus();
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction fusionnant les boites si elles sont bien parametrees
		function managemerge(Boxes, sLang){
			var b;
			var i;
			var o;
			var l;
			var O							= new Array();
			// Recuperation du libelle dans la bonne version linguistique
			var lang;
			switch(sLang){
				case "bg":	lang	= " (селекциониране)";	break;
				case "cs":	lang	= " (výběr)";			break;
				case "da":	lang 	= " (valgt)";			break;
				case "de":	lang 	= " (ausgewählt)";		break;
				case "el":	lang 	= " (επιλεγμένο)";		break;
				case "es":	lang 	= " (selección)";		break;
				case "et":	lang 	= " (valitud)";			break;
				case "fi":	lang 	= " (valittuna)";		break;
				case "fr":	lang 	= " (sélectionné)";		break;
				case "hu":	lang 	= " (kiválasztva)";		break;
				case "it":	lang	= " (selezionato)";		break;
				case "lt":	lang 	= " (atrinkta)";		break;
				case "lv":	lang 	= " (izvēlēts)";		break;
				case "mt":	lang 	= " (magħżula)";		break;
				case "nl":	lang 	= " (huidige pagina)";	break;
				case "pl":	lang 	= " (wybrano)";			break;
				case "pt":	lang 	= " (seleccionado)";	break;
				case "ro":	lang 	= " (selecţionat)";		break;
				case "sk":	lang 	= " (vybraté)";			break;
				case "sl":	lang	= " (izbrano)";			break;
				case "sv":	lang 	= " (vald)";			break;
				case "en":
				default:	lang 	= " (selected)";		break;
			};
			// Identification des elements de la boite
			var m							= Boxes.length;
			for(b = 0; b < m; b++){
				if(Html.check(Boxes[b])){
					o						= new Object();
					o.h						= null;
					o.l						= null;
					o.b						= null;
					o.p						= null;
					o.f						= null;
					o.m						= Boxes[b];
					l						= o.m.childNodes.length;
					// Recherche des elements de la boites
					for(i = 0; i < l; i++){
						if(Html.check(o.m.childNodes[i])){
							if(o.m.childNodes[i].className.match("ep_boxheader")) 			o.h	= o.m.childNodes[i];
							else if(o.m.childNodes[i].className.match("ep_boxfilter")) 		o.l	= o.m.childNodes[i];
							else if(o.m.childNodes[i].className.match("ep_boxbody")) 		o.b	= o.m.childNodes[i];
							else if(o.m.childNodes[i].className.match("ep_boxpaginate")) 	o.p	= o.m.childNodes[i];
							else if(o.m.childNodes[i].className.match("ep_boxfooter")) 		o.f	= o.m.childNodes[i];
						}
					}
					// Verification de la presence des elements essentiels
					if(o.h != null && o.b != null) O.push(o);
				}
			}
			// Creation des elements
			function create(D, n){
				// Recuperation des donnees
				var e;
				var x						= D.h.childNodes.length;
				var y;
				var w;
				var t						= "";
				for(e = 0; e < x; e++){
					if(Html.check(D.h.childNodes[e])){
						if(D.h.childNodes[e].className.match("ep_block")){
							w 				= D.h.childNodes[e].childNodes.length;
							for(y = 0; y < w; y++){	
								if(Html.check(D.h.childNodes[e].childNodes[y])){
									if(D.h.childNodes[e].childNodes[y].className.match("ep_title")){
										t	= Html.cleanText(D.h.childNodes[e].childNodes[y].innerHTML);
										break;
									}
								}
							}
							break; 
						}
					}
				}
				// Objet de donnees
				var d						= new Object();
				// Creation de l'onglet
				d.tab						= Html.createNode("li");
				d.link						= Html.createNode("a", {href:"#mergebox" + n});
				d.tab.appendChild(d.link);
				d.title						= Html.createNode("span", t);
				d.link.appendChild(d.title);
				d.selected					= Html.createNode("span", {className:"ep_selected"}, lang);
				t							= Html.createNode("span", {className:"ep_align"}, " ");
				d.link.appendChild(t);
				// Integration de l'onglet
				U.appendChild(d.tab);
				// Recuperation de son contenu
				d.content					= new Array();
				if(D.l != null) d.content.push(D.l);
				if(D.b != null) d.content.push(D.b);
				if(D.p != null) d.content.push(D.p);
				if(D.f != null) d.content.push(D.f);
				// Sauvegarde des infos
				A.tabs.push(d);
				// Analyse de l'onglet a ouvrir a l'initialisation
				if(D.m.className.match("ep_opentab")) I = n;
				// Ajout de l'action d'ouverture
				Html.addEvent(d.link, "click", function(){ return(This.display(A, n));  }, true);
			};
			// Verification de l'acces aux donnees
			if(O.length > 0){
				m							= O.length;
				var A						= new Object();
				A.index						= -1;
				A.tabs						= new Array();
				// Index de l'onglet a ouvrir
				var I						= 0;
				// Creation de la boite
					// Creation du conteneur
					A.box					= Html.createNode("div", {className:"ep_borderbox"});
					// Creation du menu/entete
					var M					= Html.createNode("div", {className:"ep_boxheader ep_greyheader"});
					A.box.appendChild(M);
					var U					= Html.createNode("ul", {className:"ep_block ep_" + m + "columns"});
					M.appendChild(U);
					var E					= Html.createNode("span", {className:"ep_endbox"}, " ");
					M.appendChild(E);
				// Integration des elements
					for(i = 0; i < m; i++){	create(O[i], i);	}
				// Integration de la boite
					// Recuperation du parent
					var p					= O[0].m.parentNode;
					// Insertion de la boite avant la premiere boite
					p.insertBefore(A.box, O[0].m);
					// Suppression des boites
					for(i = 0; i < m; i++){	p.removeChild(O[i].m);	}
				// Affichage de l'onglet demande
					This.display(A, I);
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction affichant le contenu de l'onglet transmis
		this.display = function(D, r){
			// Verification des valeurs transmises
			if(typeof(D) == "object"){
				if(typeof(D.tabs) == "object"){
					if(r >= 0 && r < D.tabs.length && typeof(D.tabs[r]) == "object"){
						var i;
						var m;
						// Suppression de l'index
						if(D.index >= 0 && typeof(D.tabs[D.index]) == "object"){
							d				= D.tabs[D.index];
							d.tab.className	= "";
							d.title.removeChild(d.selected);
							m				= d.content.length;
							for(i = 0; i < m; i++){		D.box.removeChild(d.content[i]);		}
						}
						// Traitement de l'affichage
						d					= D.tabs[r];
						d.tab.className		= "ep_selected";
						d.title.appendChild(d.selected);
						m					= d.content.length;
						for(i = 0; i < m; i++){		D.box.appendChild(d.content[i]);			}
						// Assignation du focus
						d.content[0].focus();
						// Sauvegarde de l'index
						D.index 			= r;
						return(false);
					}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init(Lang);
	};

/* ======================================================================================================== */
/* PROMOTIONAL ==================================================================================== */
/* ======================================================================================================== */
/* Classe JS gerant le traitement en carroussel des elements de la zone promotionnelle */

	function PromotionalDisplay(Lang){
		// Parametres autorises lors de la creation de la classe JS:
			// Lang				:String			>> version linguistique (encode sur deux caracteres [exemple : en])
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager						>> htmanager.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new ShareboxDisplay("version linguistique sur deux caracteres");
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Variables
		var This;
		var Html;
		var Datas;
		var Authorize				= false;
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(sLang){
			// Verification a l'acces aux scripts de gestion et creation
			if(typeof(htmanager_js) == "boolean" && htmanager_js){
				// Sauvegarde des references
				This									= this;
				Html									= new HTManager();
				Authorize								= false;
				// Recherche de la boite
				var m									= document.getElementById("headerpromotion");
				if(Html.check(m)){
					// Recherche de la liste
					var r								= m.getElementsByTagName("ul");
					if(r.length == 1){
						r								= r[0];
						var l							= m.getElementsByTagName("li");
						if(l.length > 1){
							Datas						= new Object();
							Datas.list					= new Array();
							Datas.lang					= "";
							Datas.max					= l.length;
							Datas.index					= 0;
							Datas.width					= m.offsetWidth;
							Datas.animated				= false;
							Datas.timer					= 0;
							// Fonction de creation des elements du menu
							function manage(parent, ref){
								var i;
								// Gestion du lien du menu
									// Recuperation du titre de la news
									var s				= "";
									var t				= l[ref].getElementsByTagName("span");
									var n				= t.length;
									for(i = 0; i < n; i++){	if(String(t[i].className).match("ep_title")){	s = String(t[i].innerHTML).replace(/^\s+/g,'').replace(/\s+$/g,''); break; } };
									// Creation du lien
									var a				= Html.createNode("span", " ");
									if(ref == 0) a.className = "ep_selected";
									var c				= Html.createNode("li", {title:(String(s).length > 1)? Datas.lang + ": " + s : Datas.lang}, a);
									parent.appendChild(c);
									// Ajout de l'action via la souris
									a.onclick			= function(){ This.changeMouse(ref); return(false); };
								// Gestion de l'element
									// Positionnement
									l[ref].style.left	= 0;
									// Ajout de l'action via le clavier
									t					= l[ref].getElementsByTagName("a");
									n					= t.length;
									for(i = 0; i < n; i++){	t[i].onfocus = function(){ This.changeKey(ref); return(false); }; }
									n					= 0;
									while(l[ref].childNodes[n].nodeType == 3){ n = n+1; }
									// Affichage
									l[ref].style.zIndex		= (ref == 0)? 50 : 5;
									l[ref].style.opacity	= (ref == 0)? 1 : 0;
									l[ref].style.filter		= (ref == 0)? "" : "alpha(opacity=0)";
								// Sauvegarde de la reference
								Datas.list[ref]			= {btn:a, target:l[ref], lnk:(Html.check(l[ref].childNodes[n]))? l[ref].childNodes[n] : null};
								// Envoi de la hauteur du lien
								return(l[ref].offsetHeight);
							}
							// Recuperation du libelle dans la bonne version linguistique
							switch(sLang){
								case "bg":	Datas.lang	= "Покажи";				break;
								case "cs":	Datas.lang	= "Zobrazit";			break;
								case "da":	Datas.lang 	= "Vis";				break;
								case "de":	Datas.lang 	= "Anzeigen";			break;
								case "el":	Datas.lang 	= "Εμφάνιση";			break;
								case "es":	Datas.lang 	= "Mostrar";			break;
								case "et":	Datas.lang 	= "Näita";				break;
								case "fi":	Datas.lang 	= "Näytä";				break;
								case "fr":	Datas.lang 	= "Afficher";			break;
								case "hu":	Datas.lang 	= "Megnyit";			break;
								case "it":	Datas.lang	= "Visualizzare";		break;
								case "lt":	Datas.lang 	= "Rodyti";				break;
								case "lv":	Datas.lang 	= "Parādīt";			break;
								case "mt":	Datas.lang 	= "Iftaħ";				break;
								case "nl":	Datas.lang 	= "Weergeven";			break;
								case "pl":	Datas.lang 	= "Wyświetl";			break;
								case "pt":	Datas.lang 	= "Ver";				break;
								case "ro":	Datas.lang 	= "Afişare";			break;
								case "sk":	Datas.lang 	= "Zobraziť";			break;
								case "sl":	Datas.lang	= "Prikaži";			break;
								case "sv":	Datas.lang 	= "Visa";				break;
								case "en":	
								default:	Datas.lang 	= "Display";			break;
							};
							// Creation du conteneur du menu
							var menu					= Html.createNode("div", {className:"ep_menu", tabIndex:-1});
							var u						= Html.createNode("ul");
							menu.appendChild(u);
							// Gestion des elements
							var h						= 0;
							for(var i = 0; i < Datas.max; i++){	h = Math.max(h, manage(u, i)); };
							// Assignation de la hauteur au conteneur
							m.style.height				= h + "px";
							for(var i = 0; i < Datas.max; i++){	if(Datas.list[i].lnk != null){ Datas.list[i].lnk.style.height = h + "px"; }};
							// Integration du menu
							m.appendChild(menu);
							// Ajout de la classe CSS permettant l'affichage et autorisation des actions
							Authorize					= true;
							m.className					= "ep_animated";
							// Lancement du temps d'attente avant l'animation
							Datas.timer					= setTimeout(function(){ This.changeMouse(1); }, 15000);
						}
					}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction gerant le lancement de l'animation de changement
		this.changeKey = function(ref){
			// Verification de l'autorisation de changement
			if(Authorize){
				// Identification du lien cible
				if(0 <= ref < Datas.max){
					if(typeof(Datas.list[ref]) == "object"){
						// Arret de l'animation
						Datas.animated					= false;
						clearTimeout(Datas.timer);
						// Changement d'affichage des elements
						for(var i = 0; i < Datas.max; i++){
							Datas.list[i].btn.className			= (ref == i)? "ep_selected" : "";
							Datas.list[i].target.style.left		= 0;
							Datas.list[i].target.style.zIndex	= (ref == i)? 50 : 5;
							Datas.list[i].target.style.opacity	= (ref == i)? 1 : 0;
							Datas.list[i].target.style.filter	= (ref == i)? "" : "alpha(opacity=0)";
						}
					}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction gerant le lancement de l'animation de changement
		this.changeMouse = function(ref){
			// Verification de l'autorisation de changement
			if(Authorize && !Datas.animated){
				// Identification du lien cible
				if(0 <= ref < Datas.max && ref != Datas.index){
					if(typeof(Datas.list[ref]) == "object"){
						clearTimeout(Datas.timer);
						var i;
						// Changement d'affichage des elements
						for(i = 0; i < Datas.max; i++){
							Datas.list[i].btn.className			= (Datas.index == i)? "ep_selected" : "";
							Datas.list[i].target.style.left		= 0;
							Datas.list[i].target.style.zIndex	= (Datas.index == i)? 50 : 5;
							Datas.list[i].target.style.opacity	= (Datas.index == i)? 1 : 0;
							Datas.list[i].target.style.filter	= (Datas.index == i)? "" : "alpha(opacity=0)";
						}
						// Positionnement de l'element de destination
						Datas.list[ref].target.style.left		= (20 + Datas.width) + "px";
						Datas.list[ref].target.style.zIndex		= 55;
						Datas.list[ref].target.style.opacity	= 1;
						Datas.list[ref].target.style.filter		= "";
						// Lancement du deplacement
						Datas.animated							= true;
						Datas.timer								= setTimeout(function(){ This.move(Datas.index, ref); }, 10);
					}
				}
			}
		};
		// Fonction gerant le lancement de l'animation de changement
		this.move = function(start, end){
			clearTimeout(Datas.timer);
			var e										= parseFloat(Datas.list[end].target.style.left);
			var t										= Math.max(1, (e/50)*2);
			if((e - t) >  0){
				// Deplacement
				Datas.list[start].target.style.left		= (e - t - Datas.width -20) + "px";
				Datas.list[end].target.style.left		= (e - t) + "px";
				// Relancement de l'animation
				Datas.timer								= setTimeout(function(){ This.move(start, end); }, 10);
			}else{
				// Mise a jour des styles
				Datas.list[start].target.style.zIndex	= 5;
				Datas.list[start].target.style.opacity	= 0;
				Datas.list[start].target.style.filter	= "alpha(opacity=0)";
				Datas.list[start].target.style.left		= 0;
				Datas.list[start].btn.className			= "";
				Datas.list[end].target.style.left		= 0;
				Datas.list[end].target.style.zIndex		= 50;
				Datas.list[end].target.style.opacity	= 1;
				Datas.list[end].target.style.filter		= "";
				Datas.list[end].btn.className			= "ep_selected";
				// Sauvegarde des donnees
				Datas.index								= end;
				// Arret de l'animation
				Datas.animated							= false;
				// Lancement du temps d'attente avant l'animation suivante
				start									= (end +1 < Datas.max)? end +1 : 0;
				Datas.timer								= setTimeout(function(){ This.changeMouse(start); }, 15000);
			}
		}
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init(Lang);
	};

/* ======================================================================================================== */
/* OverlayControler ======================================================================================= */
/* ======================================================================================================== */
/* Classe JS gerant le traitement de toutes les boites demandant des onglets geres en javascript */

	function OverlayControler(Lang){
		// Parametres autorises lors de la creation de la classe JS:
			// 	Lang						:String			>> version linguistique (encode sur deux caracteres [exemple : en])
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new OverlayControler();
			// Formulaire deroulant a afficher :
			//	> la boite doit avoir la classe CSS : "ep_autooverlayhead"
			//	> le formulaire doit avoir la classe CSS : ep_selectdate (bouton avec icone calendrier) ou ep_selectvalue (bouton avec icone standare)
			//	> le formulaire doit etre compose uniquement d'un selecteur et d'un bouton submit
			// Formulaire affichant un calendrier : ( A FAIRE )
			//	> la boite doit avoir la classe CSS : "ep_autooverlayhead"
			//	> le formulaire doit avoir la classe CSS : ep_calendar
			//	> le formulaire doit etre compose uniquement soit 
			//		. d'un champ "input" de type texte" et d'un bouton submit (calendrier normal)
			//		. d'un selecteur de type texte" et d'un bouton submit (calendrier proposant comme lien que les semaines ou jours proposés dans le selecteur)
			// Formulaire complet a afficher : ( A FAIRE )
			//	> la boite doit avoir la classe CSS : "ep_autooverlayhead"
			//	> le formulaire doit avoir la classe CSS : ep_fullform
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Variables
		var This;
		var Autorize	= false;
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(VL){
			// Verification a l'acces aux scripts de gestion et creation
			if(typeof(htmanager_js) == "boolean" && htmanager_js){
				// Sauvegarde des references
				This									= this;
				var H									= new HTManager();
				// Identification des boites
					// Liste des boites a traiter : onglets dynamiques gerant l'affichage du contenu d'une meme boite
					var boxes				= new Array();
					// Fonction d'identification des boites
					function getBoxes(m){
						var l				= m.childNodes.length;
						// Recherche des boites portant la classe "marqueur"
						for(var i = 0; i < l; i++){
							if(H.check(m.childNodes[i])){
								if(m.childNodes[i].className.match("ep_autooverlayhead")) boxes.push(m.childNodes[i]);
							}
						}
					}
					// Lancement de la recherche dans les deux zones principales
					var z					= document.getElementById("mainzone");
					if(H.check(z)) getBoxes(z);
					z						= document.getElementById("contextzone");
					if(H.check(z)) getBoxes(z);
				// Verification de la presence de boite a onglets dynamiques a traiter
				if(boxes.length > 0){
					var L					= new Object();
					switch(VL){
						case "bg":	L.bopen	= "Отвори менюто";				L.bcancel	= "Затвори менюто";			break;
						case "cs":	L.bopen	= "Zobrazit hlavní nabídku";	L.bcancel	= "Zavřít hlavní nabídku";	break;
						case "da":	L.bopen	= "Åbn menuen";					L.bcancel	= "Luk menuen";				break;
						case "de":	L.bopen	= "Menü ausklappen";			L.bcancel	= "Menü einklappen";		break;
						case "el":	L.bopen	= "Άνοιγμα Μενού";				L.bcancel	= "Κλέισιμο Μενού";			break;
						case "es":	L.bopen	= "Abrir el menú";				L.bcancel	= "Cerrar el menú";			break;
						case "et":	L.bopen	= "Ava menüü";					L.bcancel	= "Sulge menüü";			break;
						case "fi":	L.bopen	= "Avaa valikko";				L.bcancel	= "Sulje valikko";			break;
						case "fr":	L.bopen	= "Ouvrir le menu";				L.bcancel	= "Fermer le menu";			break;
						case "hu":	L.bopen	= "Menü megnyitása";			L.bcancel	= "Menü bezárása";			break;
						case "it":	L.bopen	= "Apri il menu";				L.bcancel	= "Chiudi il menu";			break;
						case "lt":	L.bopen	= "Atverti meniu";				L.bcancel	= "Užverti meniu";			break;
						case "lv":	L.bopen	= "Atvērt izvēlni";				L.bcancel	= "Aizvērt izvēlni";		break;
						case "mt":	L.bopen	= "Iftaħ il-menu";				L.bcancel	= "Agħlaq il-menu";			break;
						case "nl":	L.bopen	= "Menu openklappen";			L.bcancel	= "Menu dichtklappen";		break;
						case "pl":	L.bopen	= "Otwórz menu";				L.bcancel	= "Zamknij menu";			break;
						case "pt":	L.bopen	= "Abrir o menu";				L.bcancel	= "Fechar o menu";			break;
						case "ro":	L.bopen	= "Deschide meniul";			L.bcancel	= "Închide meniul";			break;
						case "sk":	L.bopen	= "Otvoriť menu";				L.bcancel	= "Zatvoriť menu";			break;
						case "sl":	L.bopen	= "Odpri meni";					L.bcancel	= "Zapri meni";				break;
						case "sv":	L.bopen	= "Öppna menyn";				L.bcancel	= "Stäng menyn";			break;
						case "en":
						default:	L.bopen	= "Open menu";					L.bcancel	= "Close menu";
					}
					// Traitement des boites
					var k					= boxes.length;
					for(var j = 0; j < k; j++){		managebox(H, boxes[j], L);	}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction gerant la creation du formaire
		function managebox(H, B, L){
			var i;
			// Recherche du formulaire
			var F							= null;
			var m							= B.childNodes.length;
			for(i = 0; i < m; i++){
				if(H.check(B.childNodes[i])){
					if(String(B.childNodes[i].className).match("ep_boxheader")){
						if(B.childNodes[i].getElementsByTagName("form").length > 0) F = B.childNodes[i].getElementsByTagName("form")[0];
						break;
					}
				}
			}
			// Verification de la presence d'un formulaire dans l'entete
			if(F != null){
				var c						= "";
				var id						= "";
				var fct						= null;
				var init					= null;
				// Recherche des balises pour l'index
				var List					= new Array();
					List.push(F);
				var t						= F.parentNode;
				while(H.check(t)){
					if(t.id == "mainzone" || t.id == "contextzone")	break;
					List.push(t);
					t						= t.parentNode;
				}
				// Creation du menu
					// Bouton d'affichage
					var Bt					= H.createNode("span", "");
					var Bb					= H.createNode("div", {className:"ep_iconblock", title:"", tabIndex:0}, Bt);
					// Conteneur de donnees
					var C					= H.createNode("div", {className:"ep_contentblock"});
				// Analyse du type d'affichage demande
					// Recherche des balises de donnees
					var S					= F.getElementsByTagName("select");
					var I					= F.getElementsByTagName("input");
					// Verification qu'il n'y a qu'un seul selecteur
					if((F.className.match("ep_selectdate") || F.className.match("ep_selectvalue")) && S.length == 1 && I.length == 1 && String(I[0].type).toLowerCase() == "submit"){
						// Ajout de l'icone
						c					= " ep_overlaycalendar";
						// Integration des options dans le menu
						a					= managecombo(id, H, F, Bb, Bt, C, L, S[0], List);
						id					= a[0];
						init				= a[1];
					}else if(F.className.match("ep_selectcalendar") && S.length == 0 && I.length == 1 && String(I[0].type).toLowerCase() == "submit"){
						managecalendar();
					}else{
						manageinherit();
					}
				// Integration du menu
					// Ajout des evenements
					H.addEvent(Bb, "click", 	function(){ This.swapdisplay(id, Bb, Bt, C, L, List, null)});
					H.addEvent(Bb, "keypress", 	function(e){ if(H.getKey(e) == 13 || H.getKey(e) == 32) This.swapdisplay(id, Bb, Bt, C, L, List, null)});
					// Initialisation en mode "fermer"
					Bb.className			+= " ep_iconopen";
					Bb.title				= L.bopen;
					Bt.innerHTML			= L.bopen;
					C.style.display			= "none";
					// Suppression du contenu du formulaire
					F.innerHTML				= "";
					// Ajout du menu
					F.className				= "ep_overlayelement" + c;
					F.appendChild(Bb);
					F.appendChild(C);
					// Initialisation
					Autorize				= (typeof(init) == "function")? init() : true;
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction gerant l'affichage de la boite comme un seul selecteur avec l'action "submit"
		function managecombo(id, H, F, B, T, C, L, S, R){
			function add(I, r){
				var v		= I.value;
				var b		= H.createNode("input", {type:"button", id:S.id + "_b" + r, className:"ep_button", value:String(I.innerHTML).replace(/^\s+/g,'').replace(/\s+$/g,'')});
				c.appendChild(b);
				H.addEvent(b, "click", function(){ 
													This.closemenu(id, B, T, C, L, R)
													h.value = v;
													F.submit();
												});
			};
			// Fonction initialisant la largeur des boutons
			var init		= function(){
				var isIE							= String(navigator.appName).toLowerCase().match("microsoft");
				// Affichage cache du menu
				C.style.display						= "";
				C.style.left						= "-100000px";
				C.style.right						= "auto";
				// Calcul des dimensions des boutons
				var cs;
				var ce								= c.childNodes.length;
				var w								= 0;
				for(cs = 0; cs < ce; cs++){	w		= Math.max(w, c.childNodes[cs].offsetWidth); };
				// Assignation de la largeur
				w									-= (isIE)? 16 : -10;
				c.style.width						= w + "px";
				for(cs = 0; cs < ce; cs++){	c.childNodes[cs].style.width	= w + "px"; };
				// Calcul de la hauteur
				cs									= c.offsetHeight;
				c.style.maxHeight					= "10000px";
				if(isIE){
					setTimeout(function(){ if(cs > c.offsetHeight){ c.style.width = (w + 16) + "px"; } C.style.display = "none"; c.style.maxHeight = ""; }, 10);
				}else{
					if(cs > c.offsetHeight) c.style.width = (w + 16) + "px";
					C.style.display 				= "none";
					c.style.maxHeight 				= "";
				}
				// Remise a zero des styles
				C.style.left						= "";
				C.style.right						= "";
				// Envoi de l'autorisation de poursuite
				return(true);
			}
			// Convertion du selecteur
			var f			= H.createNode("fieldset",	{id:S.id + "_f"});
			C.appendChild(f);
			var h			= H.createNode("input", 	{id:S.id, type:"hidden", className:"ep_hidden", name:S.name});
			f.appendChild(h);
			var c			= H.createNode("div",		{id:S.id + "_s", className:"ep_elementselect"});
			f.appendChild(c);
			var l			= S.getElementsByTagName("option");
			var m			= l.length;
			for(var i = 0; i < m; i++){	add(l[i], i);	};
			// Envoi du conteneur a redimensionner
			return([S.id, init]);
		};
		// Fonction gerant l'affichage de la boite comme un seul selecteur	
		function managecalendar(vS, vI){
			
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction gerant l'affichage de la boite comme un seul selecteur	
		this.swapdisplay = function(id, B, T, C, L, I, Close){
			if(Autorize){
				// Analyse de l'affichage
				var c								= (typeof(Close) == "boolean")? Close : String(B.className).match("ep_iconopen");
				if(c){
					// Assignation des effets d'ouverture en decallage pour laisser le temps au script de fermeture d'autres panneaux de s'executer
					setTimeout(function(){ This.openmenu(id, B, T, C, L, I); }, 10);
				}else{
					// Lancement de la fermeture du menu
					This.closemenu(id, B, T, C, L, I);
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.openmenu = function(id, B, T, C, L, I){
			// Changement de valeur du bouton
			B.className						= "ep_iconblock ep_iconclose";
			B.title							= L.bcancel;
			T.innerHTML						= L.bcancel;
			// Changement d'affichage du contenu
			var m							= I.length;
			for(var i = 0; i < m; i++){ I[i].style.zIndex = "10000"; 	}
			C.style.display					= "";
			// Suppression de la fermeture via clic exterieur
			if(window.addEventListener)				window.addEventListener("click", 		function(e){ This.actionWindow(e, id, B, T, C, L, I)}, false);
			else if(document.addEventListener) 		document.addEventListener("click", 		function(e){ This.actionWindow(e, id, B, T, C, L, I)}, false);
			else if(document.attachEvent)			document.attachEvent("onclick",			function(e){ This.actionWindow(e, id, B, T, C, L, I)});
		};
		this.closemenu = function(id, B, T, C, L, I){
			// Changement de valeur du bouton
			B.className						= "ep_iconblock ep_iconopen";
			B.title							= L.bopen;
			T.innerHTML						= L.bopen;
			// Changement d'affichage du contenu
			var m							= I.length;
			for(var i = 0; i < m; i++){ I[i].style.zIndex = ""; 		}
			C.style.display					= "none";
			// Suppression de la fermeture via clic exterieur
			if(window.removeEventListener)			window.removeEventListener("click", 	function(e){ This.actionWindow(e, id, B, T, C, L, I)}, false);
			else if(document.removeEventListener) 	document.removeEventListener("click", 	function(e){ This.actionWindow(e, id, B, T, C, L, I)}, false);
			else if(document.detachEvent)			document.detachEvent("onclick",			function(e){ This.actionWindow(e, id, B, T, C, L, I)});
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction analysant l'element click
		this.actionWindow = function(e, id, B, T, C, L, I){
			var b = false;
			// Identification de la balise en fonction du type de navigateur
			if(e.target){
				if(!String(e.target.id).match(id))  		b = true;
			}else if(!String(e.srcElement.id).match(id)) 	b = true;
			if(b) This.closemenu(id, B, T, C, L, I);
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init(Lang);
	};

/* ======================================================================================================== */
/* PollboxControler ======================================================================================= */
/* ======================================================================================================== */
/* Classe JS gerant la  geres en javascript */

	function PollboxControler(Lang){
		// Parametres autorises lors de la creation de la classe JS:
			// 	Lang						:String			>> version linguistique (encode sur deux caracteres [exemple : en])
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new PollboxControler();
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Variables
		var This;
		var Timer;
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Autorisation d'activation du sondage pour toutes les planetes
		var Authorize					= true;
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(VL){
			// Verification a l'acces aux scripts de gestion et creation
			if(typeof(htmanager_js) == "boolean" && htmanager_js){
				// Sauvegarde des references
				This					= this;
				var H					= new HTManager();
				// Verification de la presence d'un boite de sondage deja encodee
				var m					= document.getElementById("pollbox");
				if(H.check(m)) m.parentNode.removeChild(m);
				// Recherche du type de la page ouverte : top page ?
				var r					= document.getElementById("menunavigation");
				if(H.check(r)){
					var b				= false;
					// Recuperation du l'URL de la page
					var u				= document.location.href;
					// Recherche de l'URL du lien selectionne dans le menu principal
					r					= r.getElementsByTagName("a");
					var i;
					m					= r.length;
					for(i = 0; i < m; i++){
						if(String(r[i].parentNode.className).match("ep_selected")){ 
							if(r[i].href == u || r[i].href == u) b = true;
							break;
						}
					}
					// Verification du type "top" de la page
					if(b){
						// Choix aleatoire de l'affichage 
						i			 		= Math.random();
						i 					= Math.floor(i*50);
						// Verification de la necessite de construire la boite
						if(i == 0){
							// Recuperation de la langue
							var L			= getLang(VL);
							// Creation de la boite
							m				= H.createNode("div", {id:"pollbox"});
							// Creation du fond
							var bg			= H.createNode("div", {className:"ep_background"}, " ");
							m.appendChild(bg);
							// Creation de la boite
								// Creation du conteneur
								var c		= H.createNode("div", {className:"ep_pollbox"}, " ");
								m.appendChild(c);
								// Creation de la balise pour l'alignement
								b			= H.createNode("span", {className:"ep_align"}, " ");
								c.appendChild(b);
								// Creation de la balise de la boite
								var box		= H.createNode("span", {className:"ep_box"}, " ");
								c.appendChild(box);
								// Creation de la balise du corps
								var bd		= H.createNode("span", {className:"ep_body"});
								bd.innerHTML	= L.text;
								box.appendChild(bd);
								// Creation de la balise du pied de boite
								var f		= H.createNode("span", {className:"ep_footer"});
								box.appendChild(f);
								// Creation de la balise pour le bouton de fermeture
								var cancel	= H.createNode("a", {className:"ep_cancel", href:"#closepoll"}, L.bcancel);
								f.appendChild(cancel);
								r			= H.createNode("a", {className:"ep_validate", href:L.link, title:L.topen}, L.bopen);
								f.appendChild(r);
								// Creation de la balise pour le bouton de fermeture
								var end		= H.createNode("a", {className:"ep_close", href:"#closepoll", tabIndex:-1, title:L.tclose}, " ");
								bd.appendChild(end);
							// Initialisation de l'affichage des elements
							opacity(bg, 0);
							box.style.display	= "none";
							// Integration de la boite
							b				= document.getElementsByTagName("body")[0];
							b.appendChild(m);
							// Analyse des dimensions
							setTimeout(function(){ This.initdisplay(H, m, bg, box, bd, f, end, cancel); }, 10);
						}
					}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction affichant progressivement le sondage
		this.initdisplay = function(H, Main, BG, Box, Body, Footer, Close, Cancel){
			// Affichage temporaire de la boite
			BG.style.display	= "none";
			Box.style.left		= "-1000px";
			Box.style.display	= "";
			// Calcul des dimensions
			var d				= {width:Box.offsetWidth, height:Box.offsetHeight};
			d.max				= 10;
			d.moveT				= (d.height +50)/d.max;
			d.moveW				= (d.width - 400)/d.max;
			d.moveH				= (d.height - 180)/d.max;
			// Reinitialisation des balises
			Box.style.display	= "none";
			Box.style.top		= "-" + (d.height +50) + "px";
			Box.style.left		= "-200px";
			Box.style.width		= "400px";
			Box.style.height	= "180px";
			Box.style.overlay	= "hidden";
			BG.style.display	= "";
			// Disparition du contenu
			Body.tabIndex		= 0;
			Body.style.left 	= "-100000px";
			Footer.style.left 	= "-100000px";
			// Lancement de l'animation d'affichage
			This.displaybg(Main, BG, Box, d, Body, Footer);
			// Ajout des actions
			H.addEvent(BG, 		"click", function(){ This.close(Main, BG, Box); }, true);
			H.addEvent(Close, 	"click", function(){ This.close(Main, BG, Box); }, true);
			H.addEvent(Cancel, 	"click", function(){ This.close(Main, BG, Box); }, true);
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction affichant progressivement le sondage
		this.displaybg = function(Main, BG, Box, Dim, Body, Footer){
			// Recuperation de l'etat du background
			var v	= parseFloat(BG.style.opacity);
			if(v + 0.01 > 0.9){
				// Mise a jour de l'affichage
				BG.style.opacity	=  "";
				BG.style.filter		=  "";
				Box.style.display	= "";
				This.displaybox(Main, Box, Dim, Body, Footer, 0, Dim.max);
			}else{
				// Mise a jour de l'affichage
				opacity(BG, v + 0.1);
				// Relancement de l'animation
				Timer	= setTimeout(function(){ This.displaybg(Main, BG, Box, Dim, Body, Footer); }, 50);
			}
		};
		this.displaybox = function(Main, Box, Dim, Body, Footer, number, max){
			// Recuperation de l'etat de la boite
			var t	= parseFloat(Box.style.top);
			var w	= parseFloat(Box.style.width);
			var h	= parseFloat(Box.style.height);
			if(number >= max){
				// Mise a jour de l'affichage
				Box.style.top			= "";
				Box.style.left			= "";
				Box.style.width			= "";
				Box.style.height		= "";
				Box.style.overlay		= "";
				Body.style.left			= "";
				Footer.style.left		= "";
				// Assignation du focus
				Body.focus();
			}else{
				// Mise a jour de l'affichage
				Box.style.top			= (t + Dim.moveT < 0)? (t + Dim.moveT) + "px" : 0;
				Box.style.width			= (w + Dim.moveW < Dim.width)? 	(w + Dim.moveW) + "px" : Dim.width + "px";
				Box.style.height		= (h + Dim.moveH < Dim.height)?	(h + Dim.moveH) + "px" : Dim.height + "px";
				Box.style.left			= "-" + (parseFloat(Box.style.width)/2) + "px";
				// Relancement de l'animation
				Timer					= setTimeout(function(){ This.displaybox(Main, Box, Dim, Body, Footer, number +1, max); }, 50);
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction lancant la suppression de la boite
		this.close = function(Main, BG, Box){
			// Mise a jour de l'affichage
			opacity(BG, 1);
			Box.style.top			= "0px";
			// Relancement de l'animation
			This.hidebox(Main, BG, Box);
		};
		this.hidebox = function(Main, BG, Box){
			// Recuperation de l'etat du background
			var v	= parseFloat(BG.style.opacity);
			if(v - 0.1 <= 0){
				// Suppression de la boite
				Main.display		= "none";
				var p				= Main.parentNode;
				p.removeChild(Main);
				// Assignation du focus
				p.focus();
			}else{
				// Mise a jour de l'affichage
				opacity(BG, v - 0.1);
				Box.style.top		= (parseFloat(Box.style.top) - 5) + "px";
				opacity(Box, v - 0.2);
				// Relancement de l'animation
				Timer				= setTimeout(function(){ This.hidebox(Main, BG, Box); }, 50);
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction modifiant l'opacite d'une balise
		function opacity(tag, value){
			tag.style.opacity	= value;
			tag.style.filter	= "alpha(opacity=" + value*100 + ")";
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction analysant l'element click
		function getLang(VL){
			VL						= String(VL).toLowerCase();
			var L					= new Object();
			L.link					= "/opinio/s?s=E01&lang=" + VL;
			switch(VL){
				case "bg":
					L.text			= "Вашето мнение за интернет страницата на Европейския парламент е наистина ценно за нас<br /><br />Това кратко допитване съдържа само 7 въпроса и е напълно анонимно.<br /><br />Благодарим Ви за отделения момент от Вашето време.";
					L.bopen			= "OK";
					L.topen			= "Отвори в нов прозорец";
					L.bcancel		= "Не, благодаря, не сега";
					L.tclose		= "Затвори";
					break;
				case "cs":
					L.text			= "Rádi bychom znali Váš názor na webové stránky Evropského parlamentu.<br /><br />Tento krátký dotazník obsahuje pouze 7 otázek a je zcela anonymní.<br /><br />Děkujeme za Váš čas.";
					L.bopen			= "Zodpovědět dotazník";
					L.topen			= "Otevřít v novém okně";
					L.bcancel		= "Teď ne, děkuji";
					L.tclose		= "Zavřít";
					break;
				case "da":
					L.text			= "Det er meget vigtigt for os at kende din mening om Europa-Parlamentets websted.<br /><br />Denne lille undersøgelse består kun af 7 spørgsmål og er fuldt anonym.<br /><br />Tak, fordi du vil give os et øjeblik af din tid.";
					L.bopen			= "OK";
					L.topen			= "Åbn i nyt vindue";
					L.bcancel		= "Nej tak, ikke nu";
					L.tclose		= "Luk";
					break;
				case "de":
					L.text			= "Ihre Meinung zur Internetseite des Europäischen Parlaments ist uns wichtig.<br /><br />Diese kurze Umfrage beinhaltet nur 7 Fragen und ist vollkommen anonym.<br /><br />Vielen Dank, dass Sie sich die Zeit nehmen.";
					L.bopen			= "Ja, gerne";
					L.topen			= "In neuem Fenster öffnen";
					L.bcancel		= "Nein, nicht jetzt";
					L.tclose		= "Schließen";
					break;
				case "el":
					L.text			= "Οι απόψεις σας για τον ιστότοπο του Ευρωπαϊκού Κοινοβουλίου μας είναι πραγματικά πολύτιμες.<br /><br />Το σύντομο ερωτηματολόγιο που ακολουθεί έχει μόνο επτά ερωτήσεις και είναι εντελώς ανώνυμο.<br /><br />Σας ευχαριστούμε για το χρόνο που μας διαθέτετε.";
					L.bopen			= "Θα απαντήσω";
					L.topen			= "Άνοιγμα σε νέο παράθυρο";
					L.bcancel		= "όχι αυτή τη φορά, ευχαριστώ";
					L.tclose		= "Κλείσιμο";
					break;
				case "es":
					L.text			= "Su punto de vista sobre el sitio web del Parlamento Europeo es muy valioso para quienes lo mantenemos.<br /><br />Esta breve encuesta sólo consta de 7 preguntas y es completamente anónima.<br /><br />Le agradeceremos sinceramente que dedique un momento a contestar a las preguntas.";
					L.bopen			= "De acuerdo";
					L.topen			= "Abrir en una ventana nueva";
					L.bcancel		= "No gracias, ahora no";
					L.tclose		= "Cerrar";
					break;
				case "et":
					L.text			= "Teie arvamus Euroopa Parlamendi veebisaidi kohta on meie jaoks oluline.<br /><br />Käesolev lühiuuring koosneb ainult seitsmest küsimusest ja on täiesti anonüümne.<br /><br />Oleme tänulikud, kui meie jaoks hetke aega leiate.";
					L.bopen			= "Olen nõus";
					L.topen			= "Ava uues aknas";
					L.bcancel		= "Tänan, kuid praegu mitte";
					L.tclose		= "Sulge";
					break;
				case "fi":
					L.text			= "Arvostamme mielipidettäsi Euroopan parlamentin verkkosivustosta.<br /><br />Pyydämme sinua vastaamaan seitsemään lyhyeen kysymykseen. Kysely on täysin nimetön ja vie vain hetken.";
					L.bopen			= "OK";
					L.topen			= "Avaa uuteen ikkunaan";
					L.bcancel		= "Ei tällä kertaa";
					L.tclose		= "Sulje";
					break;
				case "fr":
					L.text			= "Votre avis sur le site du Parlement européen nous intéresse.<br /><br />Cette brève enquête n'est composée que de 7 questions et est totalement anonyme.<br /><br />Merci de prendre quelques instants pour y répondre.";
					L.bopen			= "Ok";
					L.topen			= "Ouvrir dans une nouvelle fenêtre";
					L.bcancel		= "Non merci, pas maintenant";
					L.tclose		= "Fermer";
					break;
				case "hu":
					L.text			= "Az Európai Parlament weboldaláról alkotott véleménye fontos számunkra.<br /><br />Rövid kérdőívünk csupán 7 kérdést tartalmaz, és teljes mértékben névtelen.<br /><br />Kérjük, szánjon egy percet a kitöltésére!";
					L.bopen			= "Rendben";
					L.topen			= "Megnyitás új ablakban";
					L.bcancel		= "Köszönöm, majd máskor";
					L.tclose		= "Bezár";
					break;
				case "it":
					L.text			= "La Sua opinione sul sito del Parlamento europeo conta molto per noi.<br /><br />Questo breve sondaggio consiste in solo 7 domande ed è assolutamente anonimo.<br /><br />La ringraziamo per il tempo che vorrà dedicarci.";
					L.bopen			= "OK";
					L.topen			= "Apri in un'altra finestra";
					L.bcancel		= "Non ora, grazie";
					L.tclose		= "Chiudere";
					break;
				case "lt":
					L.text			= "Mums labai svarbi Jūsų nuomonė apie Europos Parlamento interneto svetainę.<br /><br />Šią trumpą apklausą sudaro tik 7 klausimai ir ji yra visiškai anonimiška.<br /><br />Būtume dėkingi, jei skirtumėte jai kelias minutes.";
					L.bopen			= "Sutinku";
					L.topen			= "Atidaryti naujame lange";
					L.bcancel		= "Ne, ačiū, ne dabar";
					L.tclose		= "Uždaryti";
					break;
				case "lv":
					L.text			= "Jūsu viedoklis par Eiropas Parlamenta tīmekļa vietni mums ir ļoti svarīgs.<br /><br />Šo īso aptauju veido tikai 7 jautājumi, un tā ir pilnībā anonīma.<br /><br />Paldies, ka veltījāt laiku, lai atbildētu uz jautājumiem!";
					L.bopen			= "Labi";
					L.topen			= "Atvērt jaunā logā";
					L.bcancel		= "Paldies, nē, šobrīd ne";
					L.tclose		= "Aizvērt";
					break;
				case "mt":
					L.text			= "Il-fehmiet tiegħek dwar il-websajt tal-Parlament Ewropew huma importanti ħafna għalina.<br /><br />Dan l-istħarriġ qasir fih seba' mistoqsijiet biss u huwa kompletament anonimu.<br /><br />Grazzi tal-ħin tiegħek.";
					L.bopen			= "OK";
					L.topen			= "Iftaħ f'tieqa ġdida";
					L.bcancel		= "Le mhux għalissa, grazzi";
					L.tclose		= "Agħlaq";
					break;
				case "nl":
					L.text			= "Uw mening over de website van het Europees Parlement is belangrijk voor ons.<br /><br />Deze korte enquête omvat slechts 7 vragen en is geheel anoniem.<br /><br />Wij danken u voor uw tijd";
					L.bopen			= "OK";
					L.topen			= "In nieuw venster openen";
					L.bcancel		= "Niet nu, misschien een volgende keer";
					L.tclose		= "Sluiten";
					break;
				case "pl":
					L.text			= "Wasze opinie na temat strony internetowej Parlamentu Europejskiego są dla nas bardzo ważne.<br /><br />Krótka ankieta zawiera tylko 7 pytań i jest całkowicie anonimowa.<br /><br />Dziękujemy za poświęcenie nam kilku minut.";
					L.bopen			= "TAK";
					L.topen			= "Otwórz w nowym oknie";
					L.bcancel		= "Nie teraz, dziękuję";
					L.tclose		= "Zamknij";
					break;
				case "pt":
					L.text			= "A sua opinião sobre o sítio do Parlamento Europeu é importante.<br /><br />Este breve inquérito contém 7 perguntas e é inteiramente anónimo.<br /><br />Agradecemos a sua disponibilidade.";
					L.bopen			= "OK";
					L.topen			= "Abrir numa janela nova";
					L.bcancel		= "Mais tarde";
					L.tclose		= "Fechar";
					break;
				case "ro":
					L.text			= "Opinia dvs. cu privire la site-ul Parlamentului European este foarte importantă pentru noi.<br /><br />Acest scurt chestionar cuprinde 7 întrebări şi este în totalitate anonim.<br /><br />Vă mulţumim pentru timpul acordat.";
					L.bopen			= "De acord.";
					L.topen			= "Deschidere într-o nouă fereastră";
					L.bcancel		= "Nu acum, mulţumesc.";
					L.tclose		= "Închide";
					break;
				case "sk":
					L.text			= "Radi by sme poznali Váš názor na internetovú stránku Európskeho parlamentu.<br /><br />Tento malý anonymný prieskum obsahuje len 7 otázok.<br /><br />Ďakujeme za Váš čas.";
					L.bopen			= "Vyplniť dotazník.";
					L.topen			= "Otvoriť v novom okne";
					L.bcancel		= "Ďakujem, teraz nemám čas.";
					L.tclose		= "Zatvoriť";
					break;
				case "sl":
					L.text			= "Vaše mnenje o spletišču Evropskega parlamenta je za nas zelo pomembno.<br /><br />Ta kratka anketa vsebuje le 7 vprašanj in je popolnoma anonimna.<br /><br />Hvala vam za trenutek vašega časa.";
					L.bopen			= "OK";
					L.topen			= "Odpri v novem oknu";
					L.bcancel		= "Ne zdaj, hvala";
					L.tclose		= "Zapri";
					break;
				case "sv":
					L.text			= "Dina åsikter om Europaparlamentets webbplats är viktiga för oss.<br /><br />Denna korta undersökning innehåller bara 7 frågor och du är helt anonym.<br /><br />Tack för att du tar dig tid.";
					L.bopen			= "Okej";
					L.topen			= "Öppna i nytt fönster";
					L.bcancel		= "Nej tack, inte just nu";
					L.tclose		= "Stäng";
					break;
				case "en":
				default:
					L.text			= "Your feedback on the European Parliament website is important to us.<br /><br />This short survey comprises just 7 questions and is entirely anonymous.<br /><br />Thank you for taking a moment to complete it.";
					L.bopen			= "Ok";
					L.topen			= "Open in a new window";
					L.bcancel		= "No, not now thanks";
					L.tclose		= "Close";
			}
			return(L);
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		if(typeof(Authorize) == "boolean" && Authorize) this.init(Lang);
	};

/* ======================================================================================================== */
/* Banner ================================================================================================= */
/* ======================================================================================================== */
/* Classe JS gerant la  geres en javascript */

	function Banner(Lang){
		// Parametres autorises lors de la creation de la classe JS:
			// 	Lang						:String			>> version linguistique (encode sur deux caracteres [exemple : en])
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Exemple d'utilisation
			//	var s = new Banner("en");
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Classe utilisee
			// HTManager					>> htmanager.js
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Variables
		var This;
		var Index;
		var Timer			= {authorize:false, thumb:0, banner:0, animated:false, waittime:10, actionwait:null, animatedwait:false, statewait:0};
		var Data			= new Array();
		var Animated		= true;
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant l'action aux boutons
		this.init = function(VL){
			// Verification a l'acces aux scripts de gestion et creation et de l'acces aux cookies
			if(typeof(htmanager_js) == "boolean" && htmanager_js){
				// Sauvegarde des references
				This								= this;
				var Html							= new HTManager();
				// Verification de la presence d'une banniere
				var Z								= document.getElementById("bannerzone");
				if(Html.check(Z)){
					var i;
					var r;
					// Recuperation des balises <div>
					var l							= Z.getElementsByTagName("div");
					var m							= l.length;
					// Recherche des balises indispensables
					var M							= null;
					var C							= null;
					var L							= null;
					for(i = 0; i < m; i++){
						if(String(l[i].className).match("ep_animatedbanner"))	M	= l[i];
						if(String(l[i].className).match(/ep_[2-9]banners/gi))	C	= l[i];
						if(String(l[i].className).match("ep_list"))				L	= l[i];
						if(M != null && C != null && L != null) break;
					}
					// Verification de la presence des elements composant une banniere de type "animation"
					if(Html.check(M) && Html.check(C)&& Html.check(L)){
						// Recherche des elements composant la banniere
						m							= L.childNodes.length;
						var d						= new Array();
						for(i = 0; i < m; i++){
							if(Html.check(L.childNodes[i])){
								if(L.childNodes[i].className == "ep_banner" || L.childNodes[i].className == "ep_textbanner") d.push(L.childNodes[i]);
							}
						}
						// Verification du nombre d'elements trouves
						if(d.length > 1){
							// Sauvegarde des textes
							switch(VL){
								case "bg":	VL	= {play:"Пускане на анимацията",	pause:"Спиране на анимацията",		view:"Показване на банер: {XX}"				}; break;
								case "cs":	VL	= {play:"Spustit video",			pause:"Zastavit video",				view:"Zobrazit animaci : {XX}"				}; break;
								case "da":	VL	= {play:"Start animationen",		pause:"Stop animationen",			view:"Vis følgende banner : {XX}"			}; break;
								case "de":	VL	= {play:"Animation starten",		pause:"Animation anhalten",			view:"Grafik anzeigen: {XX}"				}; break;
								case "el":	VL	= {play:"Εκκίνηση",					pause:"Παύση",						view:"Εμφάνιση κυλιόμενης επιγραφής: {XX}"	}; break;
								case "es":	VL	= {play:"Lanzar la animación",		pause:"Detener la animación",		view:"Visualizar la banderola: {XX}"		}; break;
								case "et":	VL	= {play:"Käivita animatsioon",		pause:"Peata animatsioon",			view:"Näita ribareklaami: {XX}"				}; break;
								case "fi":	VL	= {play:"Käynnistä animaatio",		pause:"Pysäytä animaatio",			view:"Näytä animaatio: {XX}"				}; break;
								case "fr":	VL	= {play:"Lancer l'animation",		pause:"Arrêter l'animation", 		view:"Afficher l'image : {XX}"				}; break;
								case "hu":	VL	= {play:"Animáció indítása",		pause:"Animáció megállítása",		view:"A(z) {XX} szalagcím megjelenítése"	}; break;
								case "it":	VL	= {play:"Avvia l'animazione",		pause:"Interrompi l'animazione",	view:"Visualizza il banner: {XX}"			}; break;
								case "lt":	VL	= {play:"Paleisti filmuką",			pause:"Sustabdyti filmuką",			view:"Rodyti reklamjuostę: {XX}"			}; break;
								case "lv":	VL	= {play:"Palaist animāciju",		pause:"Apstādināt animāciju",		view:"Parādīt reklāmrullīti: {XX}"			}; break;
								case "mt":	VL	= {play:"Ibda l-animazzjoni",		pause:"Waqqaf l-animazzjoni",		view:"Uri l-istrixxa: {XX}"					}; break;
								case "nl":	VL	= {play:"Start animatie",			pause:"Stop animatie",				view:"Banner {XX} tonen"					}; break;
								case "pl":	VL	= {play:"Rozpocznij animację",		pause:"Zatrzymaj animację",			view:"Pokaż baner: {XX}"					}; break;
								case "pt":	VL	= {play:"Iniciar a animação",		pause:"Parar a animação",			view:"Ver a barra: {XX}"					}; break;
								case "ro":	VL	= {play:"Lansaţi animaţia",			pause:"Opriţi animaţia",			view:"Afişare banner: {XX}"					}; break;
								case "sk":	VL	= {play:"Spustiť video",			pause:"Zastaviť video",				view:"Zobraziť banner : {XX}"				}; break;
								case "sl":	VL	= {play:"Začni animacijo",			pause:"Ustavi animacijo",			view:"Pokaži pasico {XX}"					}; break;
								case "sv":	VL	= {play:"Starta bannern",			pause:"Stoppa bannern",				view:"Visa bannern: {XX}"					}; break;
								case "en":
								default:	VL	= {play:"Start the animation",		pause:"Stop the animation",			view:"Show the banner: {XX}"				};
							}
							// Fonction traitant les bannieres 
							function manage(Tag, ref){
								var A							= null;
								var I							= null;
								var B							= null;
								var T							= null;
								var j;
								var t;
								var k;
								// Recuperation des dimensions
								wmax							= Math.max(wmax, Tag.offsetWidth);
								hmax							= Math.max(hmax, Tag.offsetHeight);
								// Recuperation du lien de la banniere
								if(String(Tag.tagName).toLowerCase() == "a") A	= Tag;
								else{
									t							= Tag.getElementsByTagName("a");
									if(t.length > 0) A			= t[0]; 
								}
								// Recherche des elements composant la bannieres
								k								= Tag.childNodes.length;
								for(j = 0; j < k; j++){
									if(Html.check(Tag.childNodes[j])){
										t						= Tag.childNodes[j];
										if(t.className == "ep_img" && t.getElementsByTagName("img").length > 0) I	= t;
										else if(t.className == "ep_text")										T	= t;
									}
								}
								// Creation du bouton si donnees trouvees sont correctes
								if(A != null && I != null && (String(Tag.className) == "ep_banner" || T != null)){
									// Recuperation du titre
									if(T == null){
										// Convertion de la banniere pour supporter le focus
										t						= I.getElementsByTagName("img")[0];
										I						= Html.createNode("span", {className:"ep_img"}, t);
										t						= Html.createNode("a", {className:"ep_banner", href:A.href, title:A.title}, I);
										k						= Tag.parentNode;
										k.insertBefore(t, Tag);
										k.removeChild(Tag);
										Tag						= t;
										A						= t;
										// Creation du texte pour l'info bulle
										t						= String(VL.view).replace(/{XX}/gi, I.getElementsByTagName("img")[0].alt);
									}else{
										t						= null;
										k						= T.childNodes.length;
										for(j = 0; j < k; j++){
											if(Html.check(T.childNodes[j])){
												if(T.childNodes[j].className == "ep_title"){
													t			= String(VL.view).replace(/{XX}/gi, T.childNodes[j].innerHTML);
													break;
												}else if(T.childNodes[j].className == "ep_text"){
													t			= T.childNodes[j];
												}
											}
										}
										// Creation du texte pour l'info bulle
										if(t != null && typeof(t) != "string") t = String(VL.view).replace(/{XX}/gi, T.childNodes[j].innerHTML);
									}
									// Verification de l'acces aux informations utiles pour l'info bulle
									if(typeof(t) != "string") t	= "";
									// Creation du bouton
										// Creation de l'icone
										var ic					= Html.createNode("span", " ");
										ic.style.backgroundImage= "url(" + String(I.getElementsByTagName("img")[0].src).replace(/_original.jpg/gi, "_100.jpg") + ")";
										// Creation du timer
											var it				= Html.createNode("span",  {className:"ep_timer"});
											// Creation des elements d'animation pour le timer
											var tt				= Html.createNode("span", " ");
											j					= Html.createNode("span", {className:"ep_top"}, tt);
											it.appendChild(j);
											var tb				= Html.createNode("span", " ");
											j					= Html.createNode("span", {className:"ep_bottom"}, tb);
											it.appendChild(j);
											var tl				= Html.createNode("span", " ");
											j					= Html.createNode("span", {className:"ep_left"}, tl);
											it.appendChild(j);
											var tr				= Html.createNode("span", " ");
											j					= Html.createNode("span", {className:"ep_right"}, tr);
											it.appendChild(j);
											// Creation des bordures
											j					= Html.createNode("span", {className:"ep_bordertop"}, " ");
											it.appendChild(j);
											j					= Html.createNode("span", {className:"ep_borderbottom"}, " ");
											it.appendChild(j);
											j					= Html.createNode("span", {className:"ep_borderleft"}, " ");
											it.appendChild(j);
											j					= Html.createNode("span", {className:"ep_borderright"}, " ");
											it.appendChild(j);
											j					= Html.createNode("span", {className:"ep_bordercenter"});
											it.appendChild(j);
											j					= Html.createNode("span", {className:"ep_background"}, " ");
											it.appendChild(j);
										// Integration du bouton
										k						= Html.createNode("span", ic);
										B						= Html.createNode("li", {title:t}, k, it);
									// Ajout des evenements
										// Acces a la banniere via le clavier
										A.onfocus				= function(){ This.view(ref, false); 	}
										// Acces a la banniere via la souris
										B.onclick				= function(){ (Index == ref)? This.wait() : This.view(ref, true); 	}
										// Animation de survol des boutons de raccourcis (uniquement a la souris)
										B.onmouseover			= function(){ This.getfocus(ref);		}
										B.onmouseout			= function(){ This.lostfocus(ref);		}
								}
								// Envoi du bouton a integrer
								if(B != null && I != null){
									return({ref:ref, style:Tag.className + " ep_display", banner:A, img:I, txt:T, btn:B, cont:k, icon:ic, timer:{m:it, t:tt, b:tb, l:tl, r:tr}, title:{s:VL.play, p:VL.pause, i:t}});
								}else{
									return(null);
								}
							};
							// Recuperation de la hauteur
							var wmax					= 0;
							var hmax					= 0;
							// Objet de donnees
							Data						= new Array();
							Index						= 0;
							// Creation du menu
							var Menu					= Html.createNode("div", {className:"ep_menu"});
							var List					= Html.createNode("ul");
							Menu.appendChild(List);
							m							= d.length;
							for(i = 0; i < m; i++){	
								r						= manage(d[i], i);
								if(r != null){
									// Sauvegarde des informations
									Data.push(r);
									// Gestion de l'affichage uniquement de la premiere banniere
									r.banner.className = (i != 0)? "ep_hidden" : r.style;
									// Ajout du bouton en rapport avec la banniere
									List.appendChild(r.btn);
								}
							}
							// Remplacement des elements
							M.appendChild(Menu);
							// Mise a jour de la classe CSS pour l'autorisation d'affichage des elements
							C.className					= "ep_banners";
							C.style.width				= wmax + "px";
							C.style.height				= hmax + "px";
							// Assignation des dimensions
							var t						= setTimeout(function(){ This.setsize(wmax); }, 10);
						}
					}
				}
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction assignant les dimensions des miniatures au demarrage
		this.setsize = function(widthBanner){
			// Assignation des dimensions pour les miniatures
			var d;
			var m							= Data.length;
			for(var i = 0; i < m; i++){
				d							= Data[i];
				d.dimbanner					= widthBanner;
				d.dim						= {min:{w:d.icon.offsetWidth, h:d.icon.offsetHeight}, max:{w:d.icon.offsetWidth*1.3, h:d.icon.offsetHeight*1.3}};
				d.pos						= {min:{l:((d.dim.min.w)*1.5)*i + 15, t:0}, max:{l:((d.dim.min.w)*1.5)*i - (d.dim.max.w - d.dim.min.w)*0.5 + 15, t:(d.dim.min.w - d.dim.max.w)*0.5}};
				d.icon.style.width			= d.dim.min.w + "px";
				d.icon.style.height			= d.dim.min.h + "px";
				d.btn.style.left			= d.pos.min.l + "px";
				d.btn.style.top				= d.pos.min.t + "px";
			}
			// Autorisation des animations
			Timer.authorize					= true;
			Timer.animated					= false;
			// Calcul du temps
			Timer.waiting					= (Timer.waittime*10)/2;
			// Initialisation de l'infos bulle en mode "play"
			Data[Index].btn.className		= "ep_selected";
			Data[Index].timer.m.className	= "ep_timer ep_pause";
			Data[Index].btn.title			= Data[Index].title.p;
			// Lancement de l'animation d'attente
			Timer.animatedwait				= true;
			Timer.actionwait				= This.wait_part1;
			This.wait_part1(Data[Index], 0, Timer.waiting);
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction modifiant l'opacite d'une balise
		function setopacity(tag, value){
			if(tag != null && !isNaN(value)){
				tag.style.opacity		= value;
				tag.style.filter		= "alpha(opacity=" + (value*100) + ")";
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction gerant l'affichage de la banniere via la navigation clavier et via un clic sur le bouton du menu 
		this.view = function(ref, animated){
			// Choix d'affichage en fonction du type d'acces
			if(!animated){							// Acces via navigation clavier
				var d;
				var m										= Data.length;
				// Arret de l'animation
				clearTimeout(Timer.banner);
				clearTimeout(Timer.thumb);
				// Assignation des classes CSS directement
				for(var i = 0; i < m; i++){
					// Initialisation des bannieres
					Data[i].banner.className 				= (i != ref)? "ep_hidden" : Data[i].style;
					Data[i].banner.style.zIndex				= 20;
					Data[i].img.style.left 					= "";
					if(Data[i].txt 	!= null){	Data[i].txt.style.opacity 	= "";	Data[i].txt.style.filter 	= ""; }
					// Initialisation des boutons
					Data[i].timer.t.style.width				= "";
					Data[i].timer.b.style.width				= "";
					Data[i].timer.l.style.height			= "";
					Data[i].timer.r.style.height			= "";
				}
			}else if(Timer.authorize && !Timer.animated){	// Acces via clic sur les boutons
				// Verification que la demande ne soit pas deja affiche
				if(ref != Index){
					Timer.animated							= true;
					// Arret de la boucle en cours
					clearTimeout(Timer.banner);
					// Positionnement des bannieres pour l'animation
						// Banniere actuelle
						Data[Index].banner.className		= Data[Index].style;
						Data[Index].banner.style.zIndex		= 20;
						Data[Index].img.style.left			= 0;
						setopacity(Data[Index].txt, 0);
						// Initialisation du bouton
						Data[Index].timer.t.style.width		= "";
						Data[Index].timer.b.style.width		= "";
						Data[Index].timer.l.style.height	= "";
						Data[Index].timer.r.style.height	= "";
						// Banniere suivante
						Data[ref].banner.style.zIndex		= 50;
						Data[ref].img.style.left			= (Data[ref].dimbanner) + "px";
						setopacity(Data[ref].txt, 0);
						Data[ref].banner.className			= Data[ref].style;
						// Initialisation du bouton
						Data[ref].timer.t.style.width		= "";
						Data[ref].timer.b.style.width		= "";
						Data[ref].timer.l.style.height		= "";
						Data[ref].timer.r.style.height		= "";
					// Lancement de l'affichage
					Timer.banner							= setTimeout(function(){ This.animatedview_img(Index, ref, 0); }, 10);
				}
			}
		};
		this.animatedview_img = function(index, next, max){
			// Recuperation des positions
			var i									= parseFloat(Data[next].img.style.left);
			var t									= Math.max(1, (i/50)*2);
			// Analyse 
			if((i - t) > 0){
				// Deplacement 
				Data[next].img.style.left			= (i - t) + "px";
				Data[index].img.style.left			= ((i - t) - Data[index].dimbanner) + "px";
				// Incrementation pour eviter les boucles infinies
				max 								= max +1;
				// Relancement de l'animation d'affichage de l'image
				if(max < 5000) Timer.banner			= setTimeout(function(){ This.animatedview_img(index, next, max); }, 10);
			}else if(Data[next].txt != null){
				// Lancement de l'animation d'affichage du texte
				Data[next].img.style.left			= "";
				Timer.banner						= setTimeout(function(){ This.animatedview_txt(index, next, 0); }, 10);
			}else{
				// Lancement de la cloture de l'animation d'affichage
				This.animatedview_end(index, next);
			}
		};
		this.animatedview_txt = function(index, next, max){
			// Recuperation des positions
			var o									= parseFloat(Data[next].txt.style.opacity);
			// Analyse 
			if((o + 0.05) < 1){
				// Deplacement 
				setopacity(Data[next].txt, o + 0.05);
				// Incrementation pour eviter les boucles infinies
				max 								= max +1;
				// Relancement de l'animation d'affichage du texte
				if(max < 1000) Timer.banner			= setTimeout(function(){ This.animatedview_txt(index, next, max); }, 10);
			}else This.animatedview_end(index, next);
		};
		this.animatedview_end = function(prev, index){
			// Sauvegarde de la banniere
			Index									= index;
			// Remise a niveau des CSS
			Data[index].banner.className			= Data[index].style;
			Data[index].banner.style.zIndex			= "";
			Data[index].img.style.left				= "";
			if(Data[index].txt 	!= null){	Data[index].txt.style.opacity 	= "";	Data[index].txt.style.filter 	= ""; }
			Data[prev].banner.className				= "ep_hidden";
			Data[prev].banner.style.zIndex			= "";
			Data[prev].img.style.left				= "";
			if(Data[prev].txt 	!= null){	Data[prev].txt.style.opacity 	= ""; 	Data[prev].txt.style.filter 	= ""; }
			// Remise a niveau des info bulle des boutons
			Data[prev].btn.className				= "";
			Data[index].btn.className				= "ep_selected";
			Data[prev].btn.title					= Data[prev].title.i;
			Data[index].btn.title					= Data[index].title.p;
			Data[prev].timer.m.className			= "ep_timer";
			Data[index].timer.m.className			= "ep_timer ep_pause";
			// Deblocage de l'animation des bannieres
			Timer.animated							= false;
			// Lancement de l'animation d'attente
			Timer.action							= This.wait_part1;
			Timer.animatedwait						= true;
			Timer.statewait							= 0;
			Timer.banner							= setTimeout(function(){ This.wait_part1(Data[Index], 0, Timer.waiting); }, Timer.waiting);
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction lancant l'animation de survol des boutons
		this.getfocus = function(ref){
			// Arret de l'animation
			clearTimeout(Timer.thumb);
			// Verification de l'acces aux animations
			if(Timer.authorize){
				var L					= new Array();
				var m					= Data.length;
				for(var i = 0; i < m; i++){	L.push(false); };
				// Recherche du sens de l'animation pour le bouton selectionne
				var t					= (ref != Index)? zoomon : zoomoff;
				// Lancement de l'animation
				Timer.thumb				= setTimeout(function(){ This.animatedfocus(L, m, ref, t, 0); }, 10);
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction lancant l'animation de reinitialisation des boutons du menu
		this.lostfocus = function(ref){
			// Verification de l'acces aux animations
			if(Timer.authorize){
				var L					= new Array();
				var m					= Data.length;
				// Arret de l'animation
				clearTimeout(Timer.thumb);
				// Lancement de l'animation de cloture
				Timer.thumb				= setTimeout(function(){ This.animatedclose(L, m, 0); }, 50);
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction modifiant l'affichage des boutons du menu
		this.animatedfocus = function(L, m, ref, action, max){
			var ok						= true;
			// Lancement de l'animation et verification de l'etat de chaque bouton
			for(var i = 0; i < m; i++){
				if(i == ref) 	L[i]	= action(Data[i]);
				else 			L[i]	= zoomoff(Data[i]);
				if(!L[i]) ok			= false;
			}
			// Incrementation pour eviter les boucles infinies
			max 						= max +1;
			// Relancement de l'animation si un des boutons n'a pas fini son animation
			if(!ok && max < 100) Timer.thumb	= setTimeout(function(){ This.animatedfocus(L, m, ref, action, max); }, 10);
		};
		this.animatedclose = function(L, m, max){
			var ok				= true;
			for(var i = 0; i < m; i++){
				L[i]			= zoomoff(Data[i]);
				if(!L[i]) ok	= false;
			}
			max 				= max +1;
			if(!ok && max < 100) Timer.thumb	= setTimeout(function(){ This.animatedclose(L, m, max); }, 10);
		};
		function zoomon(t){
			var ow						= false;
			var oh						= false;
			// Recuperation des dimensions initiales
			var w						= parseFloat(t.icon.style.width);
			var h						= parseFloat(t.icon.style.height);
			// Modification des dimensions
			if(w +2 < t.dim.max.w){
				t.icon.style.width		= (w + 2) + "px";
				t.btn.style.left		= (parseFloat(t.btn.style.left) - 1) + "px";
			}else{
				t.icon.style.width		= t.dim.max.w + "px";
				t.btn.style.left		= t.pos.max.l + "px";
				ow						= true;
			}
			if(h +2 < t.dim.max.h){
				t.icon.style.height		= (h + 2) + "px";
				t.btn.style.top			= (parseFloat(t.btn.style.top) - 1) + "px";
			}else{
				t.icon.style.height		= t.dim.max.h + "px";
				t.btn.style.top			= t.pos.max.t + "px";
				oh						= true;
			}
			// Envoi de l'indicateur de fin d'animation du bouton
			return((ow && oh));
		};
		function zoomoff(t){
			var ow						= false;
			var oh						= false;
			// Recuperation des dimensions initiales
			var w						= parseFloat(t.icon.style.width);
			var h						= parseFloat(t.icon.style.height);
			// Modification des dimensions
			if(w -2 > t.dim.min.h){
				t.icon.style.width		= (w - 2) + "px";
				t.btn.style.left		= (parseFloat(t.btn.style.left) + 1) + "px";
			}else{
				t.icon.style.width		= t.dim.min.w + "px";
				t.btn.style.left		= t.pos.min.l + "px";
				ow						= true;
			}
			if(h -2 > t.dim.min.h){
				t.icon.style.height		= (h - 2) + "px";
				t.btn.style.top			= (parseFloat(t.btn.style.top) + 1) + "px";
			}else{
				t.icon.style.height		= t.dim.min.h + "px";
				t.btn.style.top			= t.pos.min.t + "px";
				oh						= true;
			}
			// Envoi de l'indicateur de fin d'animation du bouton
			return((ow && oh));
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction gerant le lancement et l'arret de l'animation d'attente
		this.wait = function(){
			if(Timer.authorize && !Timer.animated){
				// Analyse de l'etat de l'animation
				if(Timer.animatedwait){
					// Arret de l'animation d'attente de la banniere
					clearTimeout(Timer.banner);
					// Mise a jour de l'info bulle
					Data[Index].btn.title			= Data[Index].title.s;
					Data[Index].timer.m.className	= "ep_timer ep_play";
					// Sauvegarde de l'information
					Timer.animatedwait				= false;
				}else{
					// Relancement de l'animation d'attente de la banniere
					clearTimeout(Timer.banner);
					// Mise a jour de l'info bulle
					Data[Index].btn.title	= Data[Index].title.p;
					Data[Index].timer.m.className	= "ep_timer ep_pause";
					// Sauvegarde de l'information
					Timer.animatedwait		= true;
					Timer.actionwait(Data[Index], Timer.statewait, Timer.waiting);
				}
			}
		};
		// Fonction gerant l'affichage de la banniere via la navigation clavier et via un clic sur le bouton du menu 
		this.wait_part1 = function(Button, max, timer){
			// Arret de la boucle
			clearTimeout(Timer.banner);
			// Sauvegarde des informations pour la mise en pause
			Timer.actionwait				= This.wait_part1;
			Timer.statewait					= max;
			// Analyse de l'etat de l'animation
			if(max < 50){
				Button.timer.t.style.width	= ((max + 1)*2) + "%";
				Timer.banner				= setTimeout(function(){ This.wait_part1(Data[Index], max +1, timer); }, timer);
			}else{
				Button.timer.t.style.width	= "100%";
				This.wait_part2(Data[Index], 0, timer);
			}
		};
		this.wait_part2 = function(Button, max, timer){
			// Arret de la boucle
			clearTimeout(Timer.banner);
			// Sauvegarde des informations pour la mise en pause
			Timer.actionwait				= This.wait_part2;
			Timer.statewait					= max;
			// Analyse de l'etat de l'animation
			if(max < 50){
				Button.timer.r.style.height	= ((max + 1)*2) + "%";
				Timer.banner				= setTimeout(function(){ This.wait_part2(Data[Index], max +1, timer); }, timer);
			}else{
				Button.timer.r.style.height	= "100%";
				Timer.banner				= setTimeout(function(){ This.wait_part3(Data[Index], 0, timer); }, timer);
			}
		};
		this.wait_part3 = function(Button, max, timer){
			// Arret de la boucle
			clearTimeout(Timer.banner);
			// Sauvegarde des informations pour la mise en pause
			Timer.actionwait				= This.wait_part3;
			Timer.statewait					= max;
			// Analyse de l'etat de l'animation
			if(max < 50){
				Button.timer.b.style.width	= ((50 - (max + 1))*2) + "%";
				Timer.banner				= setTimeout(function(){ This.wait_part3(Data[Index], max +1, timer); }, timer);
			}else{
				Button.timer.b.style.width	= 0;
				Timer.banner				= setTimeout(function(){ This.wait_part4(Data[Index], 0, timer); }, timer);
			}
		};
		this.wait_part4 = function(Button, max, timer){
			// Arret de la boucle
			clearTimeout(Timer.banner);
			// Sauvegarde des informations pour la mise en pause
			Timer.actionwait				= This.wait_part4;
			Timer.statewait					= max;
			// Analyse de l'etat de l'animation
			if(max < 49){
				Button.timer.l.style.height	= ((50 - (max + 1))*2) + "%";
				Timer.banner				= setTimeout(function(){ This.wait_part4(Data[Index], max +1, timer); }, timer);
			}else{
				Button.timer.l.style.height	= 0;
				This.view((Index +1 >= Data.length)? 0 : Index +1, true);
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Lancement automatique de la fonction d'initialisation
		this.init(String(Lang).toLowerCase());
	};
	
