/* JS Document pour les pages du Parlement europeen */
/* Scripts permettant les actions sur les balises */

/* ======================================================================================================== */
/* ACTIVATION DES SCRIPTS ================================================================================= */
/* ======================================================================================================== */
	var htmanager_js			= true;


/* ======================================================================================================== */
/* HTManager ============================================================================================== */
/* ======================================================================================================== */
/* Classe JS gerant les actions sur les balises */

	function HTManager(){
		// Fonction verifiant la validite d'une balise HTML
		this.check = function(o){	if(typeof(o) == "object" && o != null){	return(typeof(o.tagName) == "string"); }else{	return(false);	}	};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction construisant un noeud/balise HTML
		this.createNode = function(tag){
			var n				= document.createElement(tag);
			var c;
			for(var p = 1; p < arguments.length; p++){
				c				= arguments[p];
				if(typeof(c) == "string"){
					n.appendChild(document.createTextNode(c));
				}else if(c.nodeName){
					n.appendChild(c);
				}else{
					for(var sP in c){
						n[sP]	= c[sP];
					}
				}
			}
			return n;
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction convertissant les caractères spéciaux et supprimant les espaces vides pour la récupération de texte en JS
		this.cleanText = function(value){	return(String(value).replace(/&nbsp;/gi, ' ').replace(/^\s+/g,'').replace(/\s+$/g,'').replace(/&nbsp;/gi, " ").replace(/&lt;/gi, "<").replace(/&gt;/gi, ">").replace(/&amp;/gi, "&"));		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction envoyant la valeur numerique de la touche pressee
		this.getKey = function(eEvent){
			if(window.event)		return(event.keyCode);						// IE
			else if(eEvent)			return((eEvent.which)? eEvent.which : 0);	// Autres
			else 					return(0);
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction ajoutant un evenement JS a une balise
		this.addEvent = function(oTag, sEvent, fAction, bBlockReturn){
			function callfunction(e){
				fAction(e);
				if(!String(sEvent).match("key") && (typeof(bBlockReturn) == "boolean" && bBlockReturn)){
					if(e.preventDefault) e.preventDefault();
					else e.returnValue		= false;
				}
			}
			if((this.check(oTag) || oTag == window || oTag == document) && typeof(sEvent) == "string" && typeof(fAction) == "function"){
				// Ajout de l'evenement
				if(document.addEventListener) oTag.addEventListener(sEvent, callfunction, false);
				else if(window.attachEvent)	oTag.attachEvent("on" + sEvent, callfunction);
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction envoyant les dimensions du contenu de la page
		this.documentDimensions = function(){
			// Calcul des dimensions en fonction de l'interpretation des css par le navigateur
			if(document.compatMode){
				var w			= document.documentElement.scrollWidth;
				var h 			= document.documentElement.scrollHeight;
			}else{
				var w			= document.body.scrollWidth;
				var h			= document.body.scrollHeight;
			}
			// Verification de la demande de taille maximale : document/window
				b				= this.windowDimensions();
				// Comparaison
				w				= Math.max(w, b.width);
				h				= Math.max(h, b.height);
			// Verification des valeurs
			if(isNaN(w)) w		= null;
			if(isNaN(h)) h		= null;	
			// Envoi des dimensions
			return({width:w, height:h});
		};
		// Recuperation de la dimension de la fenetre
		this.windowDimensions = function(){
			// Calcul des dimensions en fonction du navigateur
			var w				= window.innerWidth;
			var h				= window.innerHeight;
			if(document.documentElement.clientWidth){
				w			= document.documentElement.clientWidth;
				h 			= document.documentElement.clientHeight;
			}else{
				w			= document.body.clientWidth;
				h			= document.body.clientHeight;
			}
			// Envoi de la hauteur
			return({width:w, height:h});
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction envoyant la position reelle d'une balise dans la page
		this.getRealOffset = function(tag, limit){
			// Verification de la valeur de la balise
			if(this.check(tag)){
				var t					= 0;
				var l					= 0;
				// Identification de la balise limite
				limit					= (this.check(limit))? limit : null;
				// Creation de la securite (eviter les boucles infinie)
				var nmax				= 1000;
				// Lancement de la recuperation des positions
				while(this.check(tag) && tag != limit && nmax > 0){
					nmax--;
					// Verification du type de balise atteinte
					if(String(tag.tagName).toLowerCase != "html" && String(tag.tagName).toLowerCase != "body"){
						// Sauvegarde de la position
						t				+= tag.offsetTop;
						l				+= tag.offsetLeft;
						// Mise a jour de la balise a traitee
						tag				= tag.offsetParent;
					}else break;
				}
				return({top:t, left:l});
			}else{
				return(null);
			}
		};
		// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		// Fonction chargeant un fichier XML
		this.loadfile = function (File, CallBack){
			// Verification des parametres transmis
			if(typeof(CallBack) == "function" && typeof(File) == "string" && String(File).length > 4 && String(File).lastIndexOf(".xml") >= String(File).length -5){
				This = this;
				// Initialisation de l'indicateur de chargement automatique
				var request = null;
				var autoLoading = false;
				// Chargement du fichier (pour différents navigateurs)
				try{
					request = new XMLHttpRequest();
					request.open("GET", File, false);
				} catch(exception) {
					//gestion du chargement sous IE
					var isIE = (typeof window.ActiveXObject != "undefined");
					if(isIE){
						// chargement automatique
						request = new ActiveXObject("Microsoft.XMLDOM");
						request.async = false;
						// attente du chargement complet
						while(request.readyState != 4) {};
						//changement
						request.load(File);
						// appel de la fonction de convertion
						CallBack(request.documentElement);
						// Blocage de l'action de chargement différé
						autoLoading = true;
					} else {
						request = document.implementation.createDocument("", "", null);
						request.onload = function(){ 
							CallBack(request.documentElement);
						};
						request.load(File);
						autoLoading = true;
					}
				}
				// vérification de l'existence de la requete
				if(!autoLoading && request !=null){
					request.setRequestHeader('Content-Type', 'text/xml');
					request.send("");
					var result = request.responseXML;
					CallBack(result.documentElement);
					autoLoading = true;
				}
			}
		};
	};
