
/*****************************************************************************************************
		Affiche ou masque un élément
	*****************************************************************************************************/
	function displayornot(obj) {
		if (document.layers) {
			d1=document.layers[obj];
			dl.visibility = (d1.visibility=="hide") ? "show" : "hide";
		}
		else{
			if (document.getElementById) { d1=document.getElementById(obj); }
			else if (document.all) { d1=document.all[obj]; } else { return }
			dl.style.display = (d1.style.display=="none") ? "block" : "none";
		}
	}

	/*****************************************************************************************************
		Donne le focus à un éléménet
	*****************************************************************************************************/
	function giveFocus(i) {
		var elt;
		if(elt = document.getElementById(i)) {
			elt.focus();
		}
	}

	/*****************************************************************************************************
		Cache les sous-éléments d'un conteneur
	*****************************************************************************************************/
	function hideChildren(bloc, tag) {
		var contener = document.getElementById(bloc);
		var children = contener.getElementsByTagName(tag);
		for(var i=0, n=children.length; i<n; i++) {
			children[i].style.display = "none";
		}
	}

	/*****************************************************************************************************
		Affiche le premier enfant d'un conteneur
	*****************************************************************************************************/
	function displayOnlyFirstChild(bloc, tag) {
		var contener = document.getElementById(bloc);
		var children = contener.getElementsByTagName(tag);
		if(children.length > 0) {
			for(var i=0, n=children.length; i<n; i++) {
				children[i].style.display = "none";
			}
			children[0].style.display = "block";
		}
	}
	
	/*****************************************************************************************************
		Affiche l'élément i d'un conteneur
	*****************************************************************************************************/
	function displayChildNum(bloc, tag, x) {
		var contener = document.getElementById(bloc);
		var children = contener.getElementsByTagName(tag);
		for(var i=0, n=children.length; i<n; i++) {
			if(i == x) {
				children[i].style.display = "block";
			}
		}
	}

	/*****************************************************************************************************
		Affecte une fonction à l'évènement onclick des balises tabName ayant pour classe className
	*****************************************************************************************************/
	function getVisibleBlock(contener) {
		var bloc = document.getElementById(contener); 
		var blocs = bloc.getElementsByTagName("div");

		for(var i=0, n=blocs.length; i<n; i++) {
			if(blocs[i].style.display != "none") { //alert("Current visible : "+blocs[i].getAttribute("id"));
				return blocs[i]; 
			}
		}
		return false;
	}
	
	
	/*****************************************************************************************************
		Affiche le prochain enfant d'un conteneur
	*****************************************************************************************************/
	function showNextChild(bloc, tag) {
		var contener = document.getElementById(bloc);
		var children = contener.getElementsByTagName(tag);
		var currentVisible = getVisibleBlock(bloc);
		for(var i=0, n=children.length; i<n; i++) {
			if(children[i].getAttribute("id") == currentVisible.getAttribute("id")) {
				
			}
		}
	}
	
	/*****************************************************************************************************
		Affiche le prochain bloc d'un contener 
	*****************************************************************************************************/
	function switchContent(bloc, tag, delai, firsttime) {
		delai = delai ? delai : 5000; 
		var currentVisible = getVisibleBlock(bloc); 
		var contener       = document.getElementById(bloc);
		var children       = contener.getElementsByTagName(tag);
		
		if(!firsttime) { 
		
			for(var i=0, n=children.length; i<n; i++) {
				if(children[i].getAttribute("id") == currentVisible.getAttribute("id")) {
					var nextVisible = (i==(n-1)) ? 0 : i+1;
				}
				children[i].style.display = "none";
			}
			children[nextVisible].style.display = "block";
		//contener.onclick = "switchContent("+idcontener+", "+delai+");";
		}
		else {
			displayOnlyFirstChild(bloc, tag);
		}
		var timer = window.setTimeout(function() { switchContent(bloc,tag, delai, false); }, delai);
	}
	
	/*****************************************************************************************************
		Décryptage des emails de la forme mail at domain dot com
	*****************************************************************************************************/
	function uncryptEmails(mailto) {
		var emails = document.getElementsByTagName("address");
		for(var i=0, n=emails.length; i<n; i++) {
			email = emails[i].innerHTML;
			while(email.match(" dot ")) { email = email.replace(" dot ", "."); }
			while(email.match(" at "))  { email = email.replace(" at ", "@"); }
			if(mailto) { email = '<a href="mailto:'+email+'">'+email+'</a>'; }
			emails[i].innerHTML = email;
		}
	}
	
	/*****************************************************************************************************
		Affiche un message lors de la validation des formulaires
	*****************************************************************************************************/
	function formLoading(msg, container, callback) {
		var bloc = false;
		var forms = document.getElementsByTagName("form");
		var nb    = forms.length;
		if(nb > 0) {
			
		// Message par défaut
		if(!msg) { 
			msg = "Chargement en cours..."; 
		}
				
		// Ajout du bloc au contenu de la page
		var c;
		if(container && (c = $(container))) {
			var bloc        = document.createElement("div");
			var blocContent = document.createElement("span");
			var message     = document.createTextNode(msg);
			
			bloc.appendChild(blocContent);
			blocContent.appendChild(message);
			
			bloc.setAttribute('id', 'form-loading');
			bloc.style.display = "none";
			c.appendChild(bloc);
		}
		else { 
			document.body.innerHTML = document.body.innerHTML +'<div id="form-loading"><span>'+msg+'</span></div>';
			if(bloc = $("form-loading")) {
				bloc.style.display = "none";
			}
		}
			
		// Balayage des formulaires de la page
		for(var i=0; i<nb; i++) {
			forms[i].onsubmit = function() {
				bloc.style.display = "block";
				new Effect.Opacity(bloc, { from:0, to:1, duration:0.1 });
				if(callback != false && callback != 'undefined') {
					callback();
				}
			} // eof_form_onsubmit
		} // eof_foreach_forms
			
		} // eof_if_forms
	}// eof_function_loadingForm
	
	function fixPseudoClasses(tags) {	
		var tags = new Array("input", "textarea","select");
		for(var i=0, n=tags.length; i<n; i++) {
			var elts = document.getElementsByTagName(tags[i]);
			for(var j=0, nb=elts.length; j<nb; j++) {
				//elts[j].onmouseover = function() { this.className = this.className + ' hover'; }
				//elts[j].onmouseout  = function() { this.className = this.className.replace('hover', ''); }
				elts[j].onfocus     = function() { this.className = this.className + ' focus'; }
				elts[j].onblur      = function() { this.className = this.className.replace('focus', ''); }
			}
		}
	}
	
	
	function popupImage(img) {
		var titre; titre="Photo";
		w=window.open("",'image','width=400,height=400,toolbar=no,scrollbars=no,resizable=yes');	
		w.document.write("<html><head><title>"+titre+"</title></head>\n");
		w.document.write("<style type=\"text/css\">\n");
		w.document.write("body { margin:0; padding:0; }");
		w.document.write("");
		w.document.write("</style>");
		w.document.write("<script type=\"text/javascript\">\n");
		w.document.write("\n var left,top;");
		w.document.write("\n function checkPosition() {");
		w.document.write("\n    var w, h, left, top;");
		w.document.write("\n    w = document.getElementById(\'photo').width;");
		w.document.write("\n    h = document.getElementById(\'photo').height;");
		w.document.write("\n    left = (window.screen.availWidth/2)-w/2;");
		w.document.write("\n    top  = (window.screen.availHeight/2)-h/2;");
		w.document.write("\n    window.moveTo(left, top);");
		w.document.write("\n    ");
		w.document.write("\n }");
		w.document.write("\n ");
		w.document.write("\n function checksize() { ");
		w.document.write("\n    var image = document.getElementById('photo');");
		w.document.write("\n    if (image.complete) {  window.resizeTo(image.width+12,image.height+30);");
		w.document.write("\n    window.focus();");
		w.document.write("\n }");
		w.document.write("\n else \n{ \nsetTimeout('check()',250) \n} \n}");
		w.document.write("\n window.onload = function() { checksize(); checkPosition(); }");
		w.document.write("\n window.onblur = function() { self.close(); }");
		w.document.write("\n ");
		w.document.write("\n </script>");
		w.document.write("\n<body>");
		w.document.write("\n<img id='photo' src='"+img+"'  alt=\"Photo\" /> ");
		w.document.write("\n<script>window.moveTo(left,top);</"+"SCRIPT>");
		w.document.write("\n</body></html>");
		w.document.close();
		return false;
	}
	
	function buildPopupLinks(className) {
		var links = document.getElementsByTagName('a');
		for(var i=0, n=links.length; i<n; i++) {
			if(links[i].className.search(className) != -1) {
				links[i].onclick = function() {
					popupImage(this);
					return false;
				}
			}
		}
	}
	
	
	function buildTooltips(tag, className) {
		var tags = document.getElementsByTagName(tag);
		for(var i=0, n=tags.length; i<n; i++) {
			if(tags[i].className.search(className) != -1) {
				
				var tooltip = document.createElement('span');
				tooltip.innerHTML = tags[i].getAttribute('title');
				
				tags[i].style.position = "relative";
				tooltip.style.display = "none";
				
				tooltip.className = className;
				tooltip.style.position = "absolute";
				tooltip.style.zIndex = "-1";
				tooltip.style.bottom = "0";
				tooltip.style.right = "-20px";
				
				tags[i].appendChild(tooltip);
				
				tags[i].onmouseover = function() {
					tooltip.style.display = "block";
					var dimensions = Element.getDimensions(tooltip);
					tooltip.style.right = "-"+(dimensions.width+5)+"px;";
					tooltip.style.bottom = "-"+(dimensions.height-18)+"px;";
					tooltip.innerHTML = tooltip.innerHTML + " " + "-"+dimensions.width+"px; " + dimensions.height;
					
				}
				tags[i].onmouseout = function() {
					tooltip.style.display = "none";
				}
				//tags[i].className.onmouseo
				
			}
		}
	}
	
	
	/********************************************************************************************************************/
	/********************************************************************************************************************/
	/********************************************************************************************************************/
	/********************************************************************************************************************/
	/********************************************************************************************************************/
	/********************************************************************************************************************/
	/********************************************************************************************************************/
	/********************************************************************************************************************/
	/**************************************************************************************************************
	*******  COOKIES
	**************************************************************************************************************/
	function setcookie(name, value, expire){
		var timestamp=new Date(expire);
		document.cookie=name + "=" + escape(value) + "; expires=" + timestamp.toGMTString(); 
	}
	
	function getcookie(name){ 
		var cookies = document.cookie.split('; '); //alert(document.cookie);
		for(var i=0, n=cookies.length; i < n; i++){ 
			var cook = cookies[i].split('=');
			var ok = (cook[0] == name); 
			//alert(name + ' => '+cook[0] + (ok ? '  ok' : '  pas ok'));
			if(ok) {
				return unescape(cook[1]);
			}
		}
		return false;
	}	
	
	function persistentDraggable(e, params) {
		new Draggable($(e), params);
		saveElementPosition(e); 
		loadElementPosition(e);
	}
	
	/**
	 * Sauvegarde et chargement automatique de la position d'un élément
	 */
	function saveAndLoadPosition(e) {
		saveElementPosition(e); 
		loadElementPosition(e);
	}
	
	
	/**
	 * Stocke la position d'un élément en cookie
	 */
	function saveElementPosition(e) { 
		$(e).onmouseup = function() {
			$(e).removeClassName("dragging");
			var element = $(e);
			var x = element.style.left;
			var y = element.style.top; 
			var pos = x+','+y;
			setcookie(e+"-position", pos, (new Date(2010, 12).getTime())); 
		}
		$(e).onmousedown = function() { $(e).className = $(e).className + " dragging"; }

}
	
	/**
	 * Récupère le cookie contenant la position d'un élément
	 */
	function loadElementPosition(e) {// alert("try to load : "+e+'-position \n\n '+document.cookie);
		var pos = false;
		if(pos = getcookie(e+'-position')) { //alert(pos);
			pos = pos.split(','); 
			var x = pos[0]; 
			var y = pos[1]; 
			//alert(pos);alert('x : '+x+' - y : '+y); 
			$(e).style.left = x; 
			$(e).style.top  = y; 
		}
	}
	
	/********************************************************************************************************************/
	/********************************************************************************************************************/
	/********************************************************************************************************************/
	
	
	function positionX(r){ return calculeOffset(r,"offsetLeft") }
	
	function positionY(r){ return calculeOffset(r,"offsetTop") }
	
	function calculeOffset(element,attr){ 
		var offset=0;
		while(element){ offset+=element[attr]; element=element.offsetParent }
		return offset
	}	
	
	/*****************************************************************************************************
		Réupération d'éléments à partir d'un attribut
	*****************************************************************************************************/
	document.getElementsByAttribute = function (attribute, value) {
		var objs = new Array(); objs = document.getElementsByTagName("*");
		var tab = new Array();
		for (var i in objs) {
			if (objs[i]) {
				if (objs[i][attribute]) {
				if (!value) tab[tab.length] = objs[i];
				else if (objs[i][attribute].toLowerCase() == value.toLowerCase()) tab[tab.length] = objs[i];
				}
			}
		}
		return tab;
	}

	/*****************************************************************************************************
		Retourne un objet de cookies : objet.get(cookie)
	*****************************************************************************************************/
	function getCookies () {
		var tab = document.cookie.split(";"); var t = new Object(); var n = 0;
		for (var i=0; i < tab.length; i++) {
			var x = tab[i].split("="); t[x[0]]=x[1]; t[i]=tab[i]; n++;
		}
		t.length = n;
		t.get = function (name) { if (t[name]) return t[name]; else return null; }
		return t;
	}

	/*****************************************************************************************************
		Retourne un cookie
	*****************************************************************************************************/
	function getCookie (name) {
		var t = getCookies(); return t.get(name);
	}

	/*****************************************************************************************************
		Crée un cookie
	*****************************************************************************************************/
	function setCookie (name, value, expires) {
		var date=new Date(); 
		date  = date.getTime(); 
		date += expires;
		date  = new Date(date); var expdate=date.toGMTString(); 
		document.cookie=name+"="+value+";expires="+expdate+";";
	}

	/*****************************************************************************************************
		Crée une chaine de type QUERY STRING
	*****************************************************************************************************/
	function createParameters () {
		eval(document.location.search.substring(1).split("&").join("; ").replace(new RegExp("=([^=;]*)", "g"), "=\"$1\"").replace(new RegExp("=\"([0-9]+(\\.[0-9]+){0,1})\"", "g"), "=$1"));
	}

	/*****************************************************************************************************
		Retourne un objet à partir de la QUERY STRING : objet.get(param)
	*****************************************************************************************************/
	function getParameters () {
		var tab = document.location.search.substring(1).split("&"); var t = new Object(); var n =0;
		for (var i=0; i < tab.length; i++) {
			n++; var x = tab[i].split("="); if (!isNaN(x[1])) x[1] = parseFloat(x[1]); t[x[0]]=x[1]; t[i]=tab[i];
		}
		t.length = n;
		t.get = function (name) { if (t[name]) return t[name]; else return null; }
		return t;
	}

