// Initialisation des paramètres temporaires
function paramColor ()
	{	
		for (var p in param)
			if ( expColor.test(p) )
				param_color[p] = param[p];
	}
// Mise à jour des paramètres actifs
function validColor ()
	{
		if (param_color['color_pal_choice'] == 0)
		{ 
			for (var i = 1 ; i < 7; i++)
				param_color['color'+i] = colorPerso[i];
		}
		
		for (var p in param)
		{	
			if ( expColor.test(p) )
				param[p] = param_color[p];
		}
		
		loadIframe();
		document.getElementById('popup_color').style.display = 'none'; 
	}
// Initialisation des éléments de la popup
function initColor ()
	{	
		// On récupère le type de palette activée
		if (param['color_pal_choice'] == 1)
		{ 	// Palette standard
			document.getElementsByName("set_pal_choice")[0].checked = true; 
			document.getElementsByName("set_pal_choice")[1].checked = false;
		}
		else 
		{ 	// Palette perso
			document.getElementsByName("set_pal_choice")[0].checked = false; 
			document.getElementsByName("set_pal_choice")[1].checked = true;
		}
		// On récupère la palette standard cochée
		document.getElementById("set_pal_"+param['color_pal_nb']).checked = true;	
		// On affiche la palette perso à droite
		setPersoPal();	
		// On affiche l'aperçu en bas
		previewColor() ;

		document.getElementById('popup_color').style.display = 'block'; 
	}
// Convertir de base 10 à base 16 (hexa) un nombre entre 0 et 255
function hexVal (n) 
	{
		var $result = "";
		var data = "0123456789ABCDEF";
		if ( isNaN(n) ) n = parseInt (n,10); 
		
		if ( (n>= 0) && (n <= 255) )
			$result = data.charAt(n/16) + data.charAt(n%16);
			
		return $result;
	}
// Convertir 3 nombre en base 10 à un seul en base 16 (hexa) 
function rgb2hex (r,g,b)
	{
		var hexa = "";
		
		if (hexVal(r) != "") hexa += hexVal(r);
		else hexa = "";
		
		if (hexVal(g) != "") hexa += hexVal(g);
		else hexa = "";
		
		if (hexVal(b) != "") hexa += hexVal(b);
		else hexa = "";
		
		return hexa;
	}
// Détermine une couleur d'écriture pour une couleur de fond donnée
function readingColor (bkg_color)
	{	
		// On compare la couleur de fond à #888 (choisie comme référence)
		if ( parseInt( bkg_color.replace("#","") ,16 ) <= parseInt("888888",16) )
			return "#FFFFFF";
		else
			return "#000000";
	}
// Détermine la couleur de fond d'un élément
function getColor (id)
	{
		var colorhexa = "";
		
		var expHexa = new RegExp("^#[a-fA-F0-9]{6}$", "g"); // #xxxxxx
		var expRgb = new RegExp("^rgb", "gi"); // rgb
		
		// On tente de récupérer la couleur de fond (problème de navigateurs)
		var color = document.getElementById(id).style.backgroundColor;

		if ( !expHexa.test (color) )
		{	// On récupère autrement la couleur de fond
			color = window.getComputedStyle(document.getElementById(id),null).backgroundColor;
			// Cas : rgb(xx,xx,xx) 
			if ( expRgb.test (color) )
			{				
				// On supprime le texte " rgb() "
				color = color.replace("rgb(","");
				color = color.replace(")","");
				// On récupère chaque valeur
				var rgbtab = color.split(",");
				// On transforme la couleur en hexa
				colorhexa = "#"+rgb2hex(rgbtab[0],rgbtab[1],rgbtab[2]);
			}
			else colorhexa = -1;
		}
		else 	colorhexa = color; 	// Cas : #xxxxxx

		return colorhexa;
	}
// Permet de mettre à jour les choix de couleurs dans tout l'outil selon la palette active
function setAlIColors ()
	{
		// Tableau pour répertorier tous les éléments proposant chaque couleur de la palette active
		var allColor = new Array();
		// Pour chaque couleur
		for (var i = 0 ; i<=7 ; i++)
		{
			// On répertorie tous les éléments la proposant
			allColor[i] = new Array();
			allColor[i] = getElementsByClass ('color'+i);
			// Et pour chaque élément
			for (var j = 0 ; j < allColor[i].length ; j++)
				// On met à jour la couleur avec la palette active
				allColor[i][j].style.background = param['color'+i]; 
		}
	}
// recupere un tableau de tous les elements d une meme classe
function getElementsByClass (className)
{
	var testClass = new RegExp("(^|s)" + className + "(s|$)");
	
	if (document.all) 
		elements = document.all;
	else 
		elements = document.getElementsByTagName("*");

	var returnElements = new Array();
	for ( i = 0 ; i < elements.length ; i++)
	{
		current = elements[i ];
		if ( testClass.test (current.className) )
			returnElements.push(current);
	}
	return returnElements;
}
// Met à jour les couleurs en bas selon le type de palette actif
function previewColor () 
	{
		// Si le type de palette est standard
		if (param_color['color_pal_choice'] == 1)
		{ 
			for (var i = 1 ; i < 7; i++)
				// On affiche les couleur de la palette standard
				document.getElementById("ppcolor"+i).style.background = param_color['color'+i]; 
		}
		else
		{
			for (var i = 1 ; i < 7; i++)
				// On affiche les couleurs de la palette perso
				document.getElementById("ppcolor"+i).style.background = colorPerso[i]; 
		}
	}
// Change le type de palette
function switchPalette (numero)
	{	
		// On change le type de palette choisi
		if (numero == 0)
		{ 
			document.getElementsByName("set_pal_choice")[0].checked = false; 
			document.getElementsByName("set_pal_choice")[1].checked = true;
			param_color['color_pal_choice'] = 0;
		}
		else
		{
			document.getElementsByName("set_pal_choice")[0].checked = true; 
			document.getElementsByName("set_pal_choice")[1].checked = false;
			param_color['color_pal_choice'] = 1;
		}
		// On met à jour l'aperçu des couleurs en bas
		previewColor ();
	}
// Met à jour la palette des couleurs personalisees
function setPersoPal ()
	{ 
		// Pour chaque couleur
		for (var i = 1 ; i < 7 ; i++)
		{
			// On change la couleur de fond
			document.getElementById("pacolor"+i).style.background = colorPerso[i];
			
			// On choisi une couleur d'écriture lisible
			document.getElementById("pacolor"+i).style.color = readingColor (colorPerso[i]);
			document.getElementById("pacolor"+i).style.fontWeight = "bold";
			
			// On affiche le code hexa de la couleur de fond
			document.getElementById("pacolor"+i).value = colorPerso[i].replace("#","").toUpperCase();
		}
	}
//  Met à jour la palette active avec celle sélectionnée
function setStdPal (pal_nb)
	{	
		// Pour chaque couleur
		for (var i = 1 ; i< 7 ; i++)
			// On met à jour la palette active avec celle sélectionnée
			param_color['color'+i] = getColor ("pal_"+pal_nb+"_color_"+i); 
		param_color['color_pal_nb'] = pal_nb;	
		switchPalette (1);
	}
// Change une couleur de la palette perso
function newColor (numero)
	{
		// On change la couleur 
		colorPerso[numero] = getColor ("pacolor"+numero); 
		// On met à jour l'aperçu
		switchPalette (0);
	}
