﻿// Fonctions de gestion DHTML standards


	
// ----- Affichage / masquage de layers
	
	// Permutation de l'affichage
	function collapseDiv(itemID, displayVal, returnIsShown, collapsedImagesArr) {
		var itm = getDiv(itemID);
		if(displayVal != null && displayVal != "" && displayVal != undefined && typeof(displayVal) != "string") {
			// Classes (css), displayVal = ["classe_affiché", "classe_masquée"]
			var curVal = itm.className;
			var isShown = (curVal == displayVal[0]);
			
			if(isShown) itm.className = displayVal[1];
			else itm.className = displayVal[0];
			
		} else {
			// Style 
			var curProp = getStyleProp(itm, "display");
			
			var isShown = (curProp != "none"); // Auto.
			if(displayVal == null || displayVal == "" || displayVal == "undefined") displayVal = "inherit"; // Défaut
			
			if(isShown) setStyleProp(itm, "display", "none");
			else setStyleProp(itm, "display", displayVal);
		}
		
		// Image à remplacer, collapsedImagesArr = ["id_image", "image_expanded.gif", "image_collapsed.gif"]
		if(collapsedImagesArr && collapsedImagesArr.length == 3) {
			var imgObj = document.getElementById(collapsedImagesArr[0]);
			imgObj.src = collapsedImagesArr[ (isShown ? 1 : 2) ];
		}
		
		if(returnIsShown) return !isShown;
	}
	
	// Affichage d'un div
	function showDiv(id, displayVal){
		if(displayVal == null || displayVal == "" || displayVal == undefined) displayVal = "inherit"; // Défaut
		setStyleProp(getDiv(id), "display", displayVal);
	}
	
	// Masquage d'un div
	function hideDiv(id){
		setStyleProp(getDiv(id), "display", "none");
	}
			
	// Affichage d'un layer (div) parmi ceux spécifiés
	function switchLayer(layersList,shownIndex,shownStyle) {
		for(var i=0; i<layersList.length; i++) {
			if(shownIndex == i) showDiv(layersList[i], shownStyle);
			else hideDiv(layersList[i]);
		}
	}

	
// ----- Gestion CSS
	function setStyleProp(obj, propName, newVal) {
		if(typeof(obj) == "string") obj = getDiv(obj);
		if(!obj) return;
		try {
			if(propExistsOnObj(obj,"style")) obj.style[propName] = newVal; // Recent browser (IE, Mozilla, etc.)
			else obj[propName] = newVal; // Old browser
		} catch(e) {
			//alert("setStyleProp(" + obj.id + ", " + propName + ", " + newVal + "): Error setting style property on specified object - " + e.description);
		}
	}
	
	function getStyleProp(obj, propName){
		if(typeof(obj) == "string") obj = getDiv(obj);
		if(!obj) return null;
		try {
			if(propExistsOnObj(obj,"currentStyle")) return obj.currentStyle[propName]; // IE
			else if(window.getComputedStyle) return window.getComputedStyle(obj,null)[propName]; // Mozilla/Opera
			else if(propExistsOnObj(obj,"style")) return obj.style[propName]; // Static in-line and JS style
			else if(propExistsOnObj(obj,propName)) return obj[propName]; // Very old
			else return null;
		} catch(e) {
			alert("getStyleProp(" + obj.id + ", " + propName + "): Error finding style property on specified object - " + e.description);
			return null;
		}
	}
	
	// Retourne la référence au layer (div) demandé
	function getDiv(id){
		if(document.getElementById) return document.getElementById(id);
		if(document.layers) return document.layers[id];
		if(document.all) return document.all[id];
		return null;
	}
	
	// Valide l'existance de la propriété sur un objet donné
	function propExistsOnObj(obj, prop) {
		try { return Boolean(obj[prop]); }
		catch(e) { return false; }
	}
	
	// Conversion d'une couleur RGB en Hexadécimale
	function getHexFromRGB(red,green,blue, numberOnly) {
		function ToHex(n) {
			 n = n % 16;
			 if(n <= 0) return "0";
			 if(n < 10) return n.toString();
			 if(n == 10) return "A";
			 if(n == 11) return "B";
			 if(n == 12) return "C";
			 if(n == 13) return "D";
			 if(n == 14) return "E";
			 if(n == 15) return "F";
		}
		function Color2Hex(n){
			 return ToHex(n >> 4) + ToHex(n);
		}
		
		return (numberOnly ? "" : "#") + Color2Hex(red) + Color2Hex(green) + Color2Hex(blue);
	}
	
	
	
	// Déplacement du pop-up
	if(!document.fullscreenCenteredElement) {
		if(document && document.body) {
		// Déclaration du document.onScroll
			document.fullscreenCenteredElement = ["popupBG"];
			document.onscroll = function() { // FireFox
				var sTop = document.body.scrollTop;
				for(var i=0; i<document.fullscreenCenteredElement.length; i++) {
					var newE = document.fullscreenCenteredElement[i];
					if(typeof(newE) == "string") newE = document.getElementById(newE);
					if(newE && getStyleProp(newE, "position") != "fixed") {
						//alert(document.fullscreenCenteredElement[i] + ": " + getStyleProp(newE, "position"));
						setStyleProp(newE, "top", sTop+"px");
					}
				}
			}
			document.body.onscroll = document.onscroll; // IE
		} else {
		// Erreur
			alert("Attention: dhtml.js doit etre inclu dans <body> et non dans le <head>");
		}
	}