/**
 * Librairie javascript commune à tout l'ecog
 *
 * @author		Julie Tétard <julie@2jstudio.com> 
 * @version		E-cog 3.0
 * @package		shared
 * @subpackage	shared
 * @category	js
 * @internal	last modified
 */



/**
 * Fonctions de manipulation des événements
 */

	/**
	 * Fonction attachant un événement a un objet selon le navigateur
	 *
	 * @param  		object	obj				objet auquel on doit attacher l'événement
	 * @param  		string	evenType		nom de l'évenement 
	 * @param  		string	functionName	nom de la fonction
	 * @param  		bool	capture			methode de capture
	 * @return		-
	 */
	function ECOG_smartAttachEvent(obj, evenType, functionName, capture)
	{
		// Cas de type Mozilla
		if (window.addEventListener) {
			obj.addEventListener(evenType, functionName, capture);
		// Cas MSIE
		} else {
			obj.attachEvent('on' + evenType, functionName);	
		}
	}
	
	/**
	 * Fonction supprimant un événement pour un objet selon le navigateur
	 *
	 * @param  		object	obj				objet auquel on doit attacher l'événement
	 * @param  		string	evenType		nom de l'évenement 
	 * @param  		string	functionName	nom de la fonction
	 * @param  		bool	capture			methode de capture
	 * @return		-
	 */
	function ECOG_smartRemoveEvent(obj, evenType, functionName, capture)
	{
		// Cas de type Mozilla
		if (window.addEventListener) {
			obj.removeEventListener(evenType, functionName, capture);
		// Cas MSIE
		} else {
			obj.detachEvent('on' + evenType, functionName);	
		}
	}
	
	/**
	 * Fonction récupérant l'élément déclencheur
	 *
	 * @param		object	event		Objet évenement
	 * @return		object	élément déclencheur
	 */
	function ECOG_smartGetTarget(event)
	{
		if(event.currentTarget) {
			return objOrigin = event.currentTarget;
		} else {
			return objOrigin = event.srcElement; 
		}
	}
	
	/**
	 * Fonction déclanchant un événement
	 *
	 * @param		object		object		objet déclancheur
	 * @param		string		eventName	nom de l'événement à déclencher
	 * @return		object	élément déclencheur
	 */
	function ECOG_fireEvent(object, eventName)
	{
		if (document.createEvent) {
			var eventN = document.createEvent('MouseEvents');
			eventN.initEvent(eventName, true, false);
			object.dispatchEvent(eventN);
		} else if (document.createEventObject) {
			eval("object." + eventName + "();");
		}
	}
	



/**
 * Fonctions de formulaire
 */
	
	/**
	 * Fonction remplissant les champs d'un page au chargement
	 *
	 * @param		object		nodeName		nom du noeud de restriction
	 * @return		-
	 */
	function ECOG_inputSetBlank(nodeName) {
		// Si non défini
		if (!nodeName || nodeName.type) {
			nodeName = '';
		} 
		// Si pas de noeud ou si noeud existe bien : on continue
		if (nodeName == '' || $(nodeName)) {
			// On définit l'appel si existe noeud
			if (nodeName != '') {
				nodeName = '#' + nodeName + ' ';
			}
			// On passe en revue tous les inputs
			for (i = 0 ; i < $$(nodeName + 'input').length ; i++) {
				var input = $$(nodeName + 'input')[i];
				
				// Si input texte + existe un title
				if ((input.type == 'text' || input.type == 'password') && input.title && input.title != '') {
					// Si la valeur est vide, on la remplit avec le title
					if (input.value == '') {
						input.value = input.title;
					}
					// Si value = title : on rajoute le blank dans la classe
					if (input.value == input.title) {
						input.className += ' e_blank';
					}
					// Attache
					ECOG_smartAttachEvent(input, 'focus', ECOG_fieldAutoFill, false);
					ECOG_smartAttachEvent(input, 'blur', ECOG_fieldAutoFill, false);
				}
				
			}
			// On passe en revue tous les textarea
			for (i = 0 ; i < $$(nodeName + 'textarea').length ; i++) {
				var textarea = $$(nodeName + 'textarea')[i];
				// Si input texte + existe un title
				if (textarea.title && textarea.title != '') {
					// Si existe un title et que value vide
					if (textarea.value == '' && textarea.title && textarea.title != '') {
						textarea.value = textarea.title;
					}
					// Si value = title : on rajoute le blank dans la classe
					if (textarea.value == textarea.title) {
						textarea.className += ' e_blank';
					}
					// Attache
					ECOG_smartAttachEvent(textarea, 'focus', ECOG_fieldAutoFill, false);
					ECOG_smartAttachEvent(textarea, 'blur', ECOG_fieldAutoFill, false);
				}
			}
		}
		
	}
	
	/**
	 * Fonction permettant de vider un champ et de le reremplir
	 *
	 * @param		object		event		Objet évenement
	 * @return		-
	 */
	function ECOG_fieldAutoFill(event) 
	{ 
		// Recup target
		var target = ECOG_smartGetTarget(event);
		// Si évenement focus et que value = title : on vide le champ
		if (event.type == 'focus' && target.value == target.title) {
			target.value = '';
		// Si évenement blur
		} else if (event.type == 'blur') {
			// Si valeur vide => remplissage avec title
			if (target.value == '') {
				target.value = target.title;
			}
			// Si valeur = title et qu'il n'y a pas de blank dans la class : on le rajoute
			if (target.value == target.title && target.className.indexOf(' e_blank') == -1) {
				target.className += ' e_blank';
			}
		}
	} 
	
	
	
	/**
	 * Fonction assignant l'highlight des champs de formulaires
	 *
	 * @param		object		nodeName		nom du noeud de restriction
	 * @return		-
	 */
	function ECOG_inputSetFocusBlur(nodeName) {
		// Si non défini
		if (!nodeName || nodeName.type) {
			nodeName = '';
		} 
		// Si pas de noeud ou si noeud existe bien : on continue
		if (nodeName == '' || $(nodeName)) {
			// On définit l'appel si existe noeud
			if (nodeName != '') {
				nodeName = '#' + nodeName + ' ';
			}
			
			// Attache actions sur champ recherche
			$$(nodeName + 'input').each(
				function(input) {
					ECOG_smartAttachEvent(input, 'focus', ECOG_fieldFocus, false);
					ECOG_smartAttachEvent(input, 'blur', ECOG_fieldBlur, false);
				}
			);
			$$(nodeName + 'select').each(
				function(input) {
					ECOG_smartAttachEvent(input, 'focus', ECOG_fieldFocus, false);
					ECOG_smartAttachEvent(input, 'blur', ECOG_fieldBlur, false);
				}
			);
			$$(nodeName + 'textarea').each(
				function(input) {
					ECOG_smartAttachEvent(input, 'focus', ECOG_fieldFocus, false);
					ECOG_smartAttachEvent(input, 'blur', ECOG_fieldBlur, false);
				}
			);
		}
	}
	
	/**
	 * Fonction permettant d'highlighter un champ
	 *
	 * @param		object		event		Objet évenement
	 * @return		-
	 */
	function ECOG_fieldFocus(event) 
	{ 
		// Recup cible
		var target = ECOG_smartGetTarget(event);
		// On vire le blank éventuel
		ECOG_cleanClassName(target, 'e_blank');
		// On vire les warn
		if (target.className.indexOf('e_warn') != -1) {
			var classNameTab = target.className.split(' ');
			var newClassNameTab = Array();
			for (i = 0 ; i < classNameTab.length ; i++) {
				if (classNameTab[i].indexOf('e_warn') == -1) {
					newClassNameTab.push(classNameTab[i]);
				}
			}
			target.className = newClassNameTab.join(' ');
		}
		// On rajoute le focus 
		if (target.className.indexOf(' e_focus') == -1) {
			target.className += ' e_focus';
		}	
	} 

	/**
	 * Fonction permettant d'enlever l'highlight sir un champ
	 *
	 * @param		object		event		Objet évenement
	 * @return		-
	 */
	function ECOG_fieldBlur(event) 
	{ 
		// Recup cible
		var target = ECOG_smartGetTarget(event);
		// On vire le focus éventuel
		ECOG_cleanClassName(target, 'e_focus');
	} 
	
	/**
	 * Fonction permettant d'enlever un morceau de classe
	 *
	 * @param		object		event		Objet évenement
	 * @return		-
	 */
	function ECOG_cleanClassName(object, label)
	{
		// On vire le focus éventuel
		var classNameTab =  object.className.split(' ');
		var newClassNameTab =  Array();
		for (i = 0 ; i < classNameTab.length ; i++) {
			if (classNameTab[i] != label) {
				newClassNameTab.push(classNameTab[i]); 
			}
		}
		object.className = newClassNameTab.join(' ');
	}
	
	/**
	 * Fonction permettant d'enlever l'highlight sir un champ
	 *
	 * @param		object		event		Objet évenement
	 * @return		-
	 */
	function ECOG_fieldSetValue(objectId, objectValue) 
	{ 
		document.getElementById(objectId) = objectValue;
	} 
	
	/**
	 * Fonction validant le formulaire parent en stockant l'id de l'élément cliqué
	 *
	 * Attache l'hidden qui stocke l'id s'il 'nexiste pas
	 * @param		object	event		Objet évenement
	 * @return		-
	 * @uses		ECOG_smartGetTarget()
	 */
	function ECOG_formSubmitWithId(event)
	{
		// Récupère la cible
		var objOrigin = ECOG_smartGetTarget(event);
		while(objOrigin.id == '' && objOrigin.nodeName != 'body') {
			objOrigin = objOrigin.parentNode;
		}
		// Récupère le formulaire parent
		objForm = document.getElementById(curForm);
		// S'il n'existe pas d'hidden, on en attache un
		if (!document.getElementById('submitId')) {
			$(objForm).insert({bottom:new Element('input', {type:'hidden', id: 'submitId', name: 'submitId', 'class': 'inputHidden'})});
		}
		// Assigne id de l'élément cliqué au champs caché
		$('submitId').value = objOrigin.id;
		// Valide le formulaire parent
		objForm.submit();
		
	}
	
	/**
	 * Fonction validant le formulaire parent en stockant la valeur de l'élément cliqué
	 *
	 * Attache l'hidden qui stocke l'id s'il 'nexiste pas
	 * @param		object	event		Objet évenement
	 * @return		-
	 */
	function ECOG_formSubmitWithValue(event)
	{
		// Récupère la cible
		var objOrigin = ECOG_smartGetTarget(event);
		// Récupère le formulaire parent
		objForm = document.getElementById(curForm);
		// S'il n'existe pas d'hidden, on en attache un
		if (!document.getElementById('submitId')) {
			$(objForm).insert({bottom:new Element('input', {type:'hidden', id: 'submitId', name: 'submitId', 'class': 'inputHidden'})});
		}
		// Assigne id de l'élément cliqué au champs caché
		$('submitId').value = $(objOrigin).value;
		// Valide le formulaire parent
		objForm.submit();
	}
	
	/**
	 * Fonction empechant la validation d'un formulaire
	 *
	 * @param		object	event		Objet évenement
	 * @return		-
	 */
	function ECOG_formStopSubmit(event)
	{
		// On empeche la propagation si on peut
		if (event.preventDefault) {
		   event.preventDefault();
		}
		// On retourne false
		event.returnValue = false;	
	}
	
	/**
	 * Fonction récupérant la valeur d'un groupe de bouton radion / checkbox
	 *
	 * @param		string		formId		id du formulaire
	 * @param		string		inputType	type des inputs
	 * @param		string		radioName	nom du group de bouton radio
	 * @return		mixed		valeur du bouton radio
	 */
	function ECOG_inputSetGetValue(formId, inputType, radioName)
	{
		// On récupère les bouton radio + la valeur à false
		var value = false;
		var radio = $(formId).getInputs(inputType, radioName).each( 
			function (input){ 
				// S'il est chécké, on récupère la valeur
				if (input.checked) {
					if (inputType == 'checkbox') {
						if (!value) {
							value = Array();
						}
						value.push(input.getValue());
					} else {
						value = input.getValue();
					}
				}
			}
		);
		// Retour
		return value;
	}
	
	/**
	 * Fonction déselectionnant un set de checkbox
	 *
	 * @param		string		formId		id du formulaire
	 * @param		string		inputType	type des inputs
	 * @param		string		radioName	nom du group de bouton radio
	 * @param		bool		value		valeur du checked
	 * @return		-
	 */
	function ECOG_inputSetUpdate(formId, inputType, radioName, value)
	{
		$(formId).getInputs(inputType, radioName).each( 
			function (input){ 
				input.checked = value;
			}
		);
	}
	
	/**
	 * Fonction d'initialisation des faux select
	 *
	 * @param		object		event		Objet évenement
	 * @return		-
	 * @uses		ECOG_smartAttachEvent()
	 * @uses		ECOG_selectSlideByEvent()
	 * @uses		ECOG_rollOver()
	 * @uses		ECOG_rollOut()
	 */
	function ECOG_selectInit(event) {
		$$('.selectLikeTop').each( function (div) {
			var id = div.id.substr(0, div.id.length - 3);
			ECOG_smartAttachEvent(div.getElementsByTagName('p')[0], 'click', ECOG_selectSlideByEvent, false);
			ECOG_smartAttachEvent($(id + 'Arrow'), 'click', ECOG_selectSlideByEvent, false);
			ECOG_smartAttachEvent($(id + 'Arrow'), 'mouseover', ECOG_rollOver, false);
			ECOG_smartAttachEvent($(id + 'Arrow'), 'mouseout', ECOG_rollOut, false);
			
		});
	}
	
	/**
	 * Fonction permettant d'afficher ou rétracter le faux select en cliquant dessus
	 *
	 * @param		object		event		Objet évenement
	 * @return		-
	 */
	function ECOG_selectSlideByEvent(event) {
		var target = ECOG_smartGetTarget(event);
		if (target.nodeName.toLowerCase() == 'img') {
			var id = target.id.substr(0, target.id.length - 5);
		} else {
			var id = target.parentNode.id.substr(0, target.parentNode.id.length - 3);
		}
		ECOG_selectSlide(id);
	}
	
	/**
	 * Fonction permettant d'afficher ou rétracter le faux select
	 *
	 * @param		string		objId		id de l'objet concerné
	 * @return		-
	 */
	function ECOG_selectSlide(objId) {
		if ($(objId + 'Div').style.display == 'none') {
			$$('.selectLikeTop').each( function (div) {
				var id = div.id.substr(0, div.id.length - 3);
				if (objId != id) {
					Effect.BlindUp(id + 'Div', { duration: 0.3 });
				}
			});
			Effect.BlindDown(objId + 'Div', { duration: 0.3 });			
		} else {
			Effect.BlindUp(objId + 'Div', { duration: 0.3 });
		}
	}
	

/**
 * Fonctions de conversion HTML
 */

	/**
	 * Fonction affichant un lien dans une nouvelle fenetre
	 *
	 * @param		object	event		Objet évenement
	 */
	function ECOG_openLinkInNewWindow(event)
	{
		// On récupere la cible et l'url de son lien
		var target = ECOG_smartGetTarget(event);
		// Remonte jusqu'au a
		var node = target.nodeName;
		while(node.toLowerCase() != 'a' && node.toLowerCase() != 'body') {
			target = target.parentNode;
			node = target.nodeName;
		}
		// On execute le lien en javascript
		if (node.toLowerCase() == 'a') {
			window.open(target.name, '_blank');
		}
	}


/**
 * Fonctions d'interaction
 */

	/**
	 * Fonction récupérant le nom de l'image source d'un élément
	 *
	 * @param		object		object		objet concerné
	 * @return		string		nom de l'image source
	 */
	function ECOG_getPixName(object) 
	{
		var srcTab = object.src.split('/');
		return srcTab[srcTab.length - 1];
		
	}
	
	/**
	 * Fonction chnageant le nom de l'image source d'un élément
	 *
	 * @param		object		object		objet concerné
	 * @param		string		newName		nouveau nom de l'image source de l'objet concerné
	 * @return		-
	 */
	function ECOG_setPixName(object, newName) 
	{
		var srcTab = object.src.split('/');
		srcTab[srcTab.length - 1] = newName;
		object.src = srcTab.join('/');
	}
	
	/**
	 * Fonction affichant le rollover de l'image principale
	 *
	 * @param		object		menuObj			l'objet cible
	 * @return		-
	 */
	function ECOG_rollOver(event)
	{
		/* On explose la source de l'image en tableau */
		var object = ECOG_smartGetTarget(event);
		var imgName = ECOG_getPixName(object);
		/* Si l'image n'est déjà pas en rollover, on la change */
		if (imgName.substr(imgName.length - 7, 3) != '_f2') {
			/* On lui rajoute le _f2 et on recolle avec l'extension */
			ECOG_setPixName(object, imgName.substr(0, imgName.length - 4) + '_f2' + imgName.substr(imgName.length - 4));
		}
		if (navigator.userAgent.indexOf('MSIE 6') != -1 && imgName.substr(imgName.length - 3) == 'png') {
			object.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, src='" + object.src + "');" ;
		}
	}
	
	/**
	 * Fonction affichant le rollout de l'image principale
	 *
	 * @param		object		menuObj			l'objet cible
	 * @return		-
	 */
	function ECOG_rollOut(event)
	{
		/* On explose la source de l'image en tableau */
		var object = ECOG_smartGetTarget(event);
		var imgName = ECOG_getPixName(object);
		/* Si l'image est bien en rollover, on la change */
		if (imgName.substr(imgName.length - 7, 3) == '_f2') {
			/* On enlève le _f2 final */
			ECOG_setPixName(object, imgName.substr(0, imgName.length - 7) + imgName.substr(imgName.length - 4));
		}
		if (navigator.userAgent.indexOf('MSIE 6') != -1 && imgName.substr(imgName.length - 3) == 'png') {
			object.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, src='" + object.src + "');" ;
		}
	}

	
	/**
	 * Fonction insérant un loader
	 *
	 * @param		string		loaderParentId		id du noeud parent du loader
	 * @param		string		loaderId			id du loader
	 * @param		string		loaderAlt			alt du loader
	 * @return		-
	 * @uses		Prototype >= 1.6.0.2
	 */
	function ECOG_loaderInsert(loaderParentId, loaderId, loaderAlt, loaderPosition, loaderSrc) {
		// Valeurs par défaut
		if (!loaderId) {
			loaderId = 'loader';
		}
		if (!loaderAlt) {
			loaderAlt = 'Chargement en cours';
		}
		if (!loaderPosition) {
			loaderPosition = 'bottom';
		}
		if (!loaderSrc) {
			loaderSrc = 'param/pix/shared/load.gif';
		}
		// Si loader n'existe pas déjà
		if (!document.getElementById(loaderId)) {
			// Crée l'image
			var img = new Element('img', { id: loaderId, src: loaderSrc, alt: loaderAlt, title: loaderAlt, 'class': 'loader'});
			// L'insère
			eval('$(loaderParentId).insert({ ' + loaderPosition + ': img});');
		}
	}
	
	/**
	 * Fonction insérant un loader
	 *
	 * @param		string		loaderId			id du loader
	 * @return		-
	 * @uses		Prototype >= 1.6.0.2
	 */
	function ECOG_loaderRemove(loaderId) {
		// Valeurs par défaut
		if (!loaderId) {
			loaderId = 'loader';
		}
		// Remove
		if (document.getElementById(loaderId)) {
			Element.remove($(loaderId));
		}
	}


/**
 * Fonctions de liens et de redirection
 */

	/**
	 * Fonction attachant un les événements aux éléments du menu
	 *
	 * @return		-
	 */
	function ECOG_blankTargetRemake()
	{
		// On récupère le tableau de toutes les balises a du document
		var aTab = document.getElementsByTagName('a');
		if (aTab.length > 0) {
			for(i = 0 ; i < aTab.length ; i++) {
				// Pour chacun, on l'étudie s'il a bien un href
				if (aTab[i].href != '') {
					var hrefTab = aTab[i].href.split('#');
					// On ne le traite que s'il a un argument #blank à la fin du href
					if (hrefTab.length > 1 && hrefTab[1] == '_blank') {
						// On vire cet argument du href
						hrefTab = hrefTab.slice(0, hrefTab.length - 1); 
						aTab[i].href = hrefTab.join('#');
						// On rajoute une balise target="_blank"
						aTab[i].target = '_blank';
					}
				}
			}
			
		}
		// On récupère le tableau de toutes les balises a du document
		var formTab = document.getElementsByTagName('form');
		if (formTab.length > 0) {
			for(i = 0 ; i < formTab.length ; i++) {
				// Pour chacun, on l'étudie s'il a bien un href
				if (formTab[i].action && formTab[i].action != '') {
					var actionTab = formTab[i].action.split('#');
					// On ne le traite que s'il a un argument #blank à la fin du href
					if (actionTab.length > 1 && actionTab[1] == '_blank') {
						// On vire cet argument du href
						actionTab = actionTab.slice(0, actionTab.length - 1); 
						formTab[i].action = actionTab.join('#');
						// On rajoute une balise target="_blank"
						formTab[i].target = '_blank';
					}
				}
			}
		}
	} 
	
	/**
	 * Fonction récupérant l'id de la session en cours à partir de l'url de la page courrante
	 *
	 * @return		-
	 */
	function ECOG_getSesId()
	{
		// Recup url courrant
		var locationTab = document.location.href.split('?');
		// S'il y a bien des arguments
		var sesId = false;
		if (locationTab.length == 2) {
			// On les passe tous en revue
			var argsTab = locationTab[1].split('&');
			for (i = 0 ; i < argsTab.length ; i++) {
				argTab = argsTab[i].split('=');
				// S'il y en a un qui définit la sessions courrant, on l'assigne
				if (argTab[0].toLowerCase() == 'phpsessid') {
					sesId = argsTab[i];
				}
			}
		}
		// Retour
		return sesId;
	}
	
	/**
	 * Fonction récupérant l'id de la session en cours à partir de l'url de la page courrante
	 *
	 * @return		-
	 */
	function ECOG_getSesIdBis()
	{
		// Recup url courrant
		var locationTab = document.location.href.split('?');
		// S'il y a bien des arguments
		var sesId = false;
		if (locationTab.length == 2) {
			// On les passe tous en revue
			var argsTab = locationTab[1].split('&');
			for (i = 0 ; i < argsTab.length ; i++) {
				argTab = argsTab[i].split('=');
				// S'il y en a un qui définit la sessions courrant, on l'assigne
				if (argTab[0].toLowerCase() == 'phpsessid') {
					sesId = argTab[1];
				}
			}
		}
		// Retour
		return sesId;
	}
	
	/**
	 * Fonction récupérant l'id de la session en cours à partir de l'url de la page courrante
	 *
	 * @return		-
	 */
	function ECOG_getParentSesId()
	{
		// Recup url courrant
		var locationTab = parent.location.href.split('?');
		// S'il y a bien des arguments
		var sesId = false;
		if (locationTab.length == 2) {
			// On les passe tous en revue
			var argsTab = locationTab[1].split('&');
			for (i = 0 ; i < argsTab.length ; i++) {
				argTab = argsTab[i].split('=');
				// S'il y en a un qui définit la sessions courrant, on l'assigne
				if (argTab[0].toLowerCase() == 'phpsessid') {
					sesId = argTab[1];
				}
			}
		}
		// Retour
		return sesId;
	}
	
	/**
	 * Fonction permettant d'atteindre une url absolue
	 *
	 * @param  		string		url			url de l'adresse relative à atteindre
	 * @return		-
	 * @uses		ECOG_getSesId()
	 */
	function ECOG_goToFullUrl(url)
	{
		// On récupère l'id de la session
		var sesId = ECOG_getSesId();
		// Si elle existe et qu'il y a bien un tag base
		if (document.getElementsByTagName('base')) {
			// On redirige en ajoutant l'id de session
			this.location = document.getElementsByTagName('base')[0].href + url + (sesId ? sesId : 'PHPSESID=');
		}
	}
	
	/**
	 * Fonction permettant de construire une url absolue avec la session
	 *
	 * @param  		string		url			url de l'adresse relative à atteindre
	 * @return		mixed		url complète si trouvé éléments needed sinon false
	 * @uses		ECOG_getSesId()
	 */
	function ECOG_makeFullUrl(url)
	{
		// On récupère l'id de la session
		var sesId = ECOG_getSesId();
		// Si elle existe et qu'il y a bien un tag base
		if (sesId && document.getElementsByTagName('base')) {
			// On construit l'url en ajoutant l'id de session
			return document.getElementsByTagName('base')[0].href + url + sesId;
		} else {
			return false;
		}
	}
	
	/**
	 * Fonction permettant de construire une url absolue
	 *
	 * @param  		string		url			url de l'adresse relative à atteindre
	 * @return		mixed		url complète si trouvé éléments needed sinon false
	 */
	function ECOG_makeAbsUrl(url)
	{
		// Si elle existe et qu'il y a bien un tag base
		if (document.getElementsByTagName('base')) {
			// On construit l'url en ajoutant l'id de session
			return document.getElementsByTagName('base')[0].href + url;
		} else {
			return false;
		}
	}
	
	/**
	 * Fonction permettant de construire une url absolue
	 *
	 * @param  		string		url			url de l'adresse relative à atteindre
	 * @return		mixed		url complète si trouvé éléments needed sinon false
	 */
	function ECOG_makePublicUrl(url)
	{
		// On construit l'url en ajoutant l'id de session
		return $$('meta[name=identifier-url]')[0].content + url;
	}
	

/**
 * Fonctions sur les chaînes
 */

	/**
	 * Fonction enlevant les espaces gauches et droites d'un chaine
	 *
	 * @param		string		string		la chaîne d'origine
	 * @return		string		chaine nettoyée
	 */
	function ECOG_trim(string) 
	{
		return string.replace(/^\s+/, '').replace(/\s+$/, '');
	} 
	
	/**
	 * Fonction nettoyant une chaine d'erreur pour un affichage alert
	 *
	 * @param		string		string		la chaîne d'origine
	 * @return		string		chaine nettoyée
	 */
	function ECOG_cleanErrorMsg(string) 
	{
		var tagsTab = Array('p', 'em', 'b', 'ul');
		for(i = 0 ; i < tagsTab.length ; i++) {
			while(string.indexOf('<' + tagsTab[i] + '>') != -1) {
				string = string.replace('<' + tagsTab[i] + '>', '');
			}
			while(string.indexOf('</' + tagsTab[i] + '>') != -1) {
				string = string.replace('</' + tagsTab[i] + '>', '');
			}
		}
		var tagsTab = Array('li');
		for(i = 0 ; i < tagsTab.length ; i++) {
			while(string.indexOf('<' + tagsTab[i] + '>') != -1) {
				string = string.replace('<' + tagsTab[i] + '>', '\n - ');
			}
			while(string.indexOf('</' + tagsTab[i] + '>') != -1) {
				string = string.replace('</' + tagsTab[i] + '>', '');
			}
		}
		while(string.indexOf('<br />') != -1) {
			string = string.replace('<br />', '\n');
		}
		while(string.indexOf('<br>') != -1) {
			string = string.replace('<br>', '\n');
		}
		string = string.replace('&egrave;', 'è');
		string = string.replace('&agrave;', 'à');
		string = string.replace('&eacute;', 'é');
		string = string.replace('&ecirc;', 'ê');
		return ECOG_trim(string);
	} 

	/**
	 * Fonction tronqaunt une chaine
	 *
	 * @param 		string		string			chaîne à tronquer
	 * @param 		integer		length			taille maximum de la chaine
	 * @param 		string		cropCar		caractère(s) à ajouter en fin de chaine
	 * @return		string		chaîne trpnquée
	 */
	function ECOG_strCrop(string, len, cropCar)
	{
		if (string.length > len) {
			string = string.substr(0, len) + cropCar;
		}
		return string;
	}


/**
 * Lié à l'intégration de plugin externe
 */

	/**
	 * Fonction activant ou désactivant le mode wysiwyg des éditeurs tinyMCE
	 *
	 * @param		object		event		Objet évenement
	 * @return		-
	 */
	function ECOG_toggleEditor(event) {
		var objOrigin = ECOG_smartGetTarget(event);
		var id = objOrigin.id.substr(0, objOrigin.id.length - 6);
		if (!tinyMCE.getInstanceById(id)) {
			if (confirm('Attention, vous risquez de perdre une partie de votre code html d\'origine. Souhaitez-vous continuer ?')) {
				tinyMCE.execCommand('mceAddControl', false, id);
				$(id + 'Editor').value = 'wysiwyg';
			}
		} else {
			tinyMCE.execCommand('mceRemoveControl', false, id);
			$('textHtml').className = 'noTinyMCEClass';
			$(id + 'Editor').value = 'html';
		}
	}	
