// -------------------------------------------------------------------- //
//
//	Fonctions de gestion des listes de sélection en JavaScript
//
// -------------------------------------------------------------------- //


//
// Fonction de remplissage d'une liste-sélection avec le contenu d'un tableau
//
//	select	= nom de l'objet liste-sélection à remplir
//	tab	= nom du tableau source du remplissage
//
function Array2Select (select, tab)
{
	// Vidage de la liste avant son remplissage
	RazSelect (select);
	// Boucle de remplissage
	for (var i=0; i < tab.length; i++)
	{
		// Valeurs par défaut pour l'option de la sélection
		txt = tab[i];		// texte de l'option
		val = i;		// indice option
		//
		// Les items du tableau peuvent être formatés pour contenir
		//	- la valeur de l'option
		//	séparés par le caractère #
		//	- le texte de l'option
		//
		idx = tab[i].indexOf ("#",0);
		if (idx > 0)
		{
			val = tab[i].substring (0, idx);
			txt = tab[i].substring (idx+1, 100);
		}
		// Ajout de la nouvelle option
		select.options[i] = new Option (txt, val);
	}
}



//
// Fonction de vidage du contenu d'une liste de sélection
//
//	select	= nom de l'objet liste-sélection à vider
//
function RazSelect (select)
{
	// Boucle sur tous les éléments de la liste
	// Commencer par la fin pour ne pas avoir à gérer les décallages dans tableau suit aux suppressions
	for (var i=select.options.length-1; i>=0 ; i--)
		select.options[i] = null;
}


//
// Fonction de sélection de la totalité des éléments d'une liste
//
function SelectTout (select)
{
	// Boucle sur tous les éléments de la liste
	for (var i=0; i<select.options.length ; i++)
		select.options[i].selected = true;
}


//
// Fonction de changement du contenu d'une sélection à partir du choix réalisé dans une autre sélection
//
//	choice	= nom de la sélection (SIMPLE) qui vient d'être changée
//	select	= nom de la sélection dont le contenu est à mettre à jour en fonction du changement sur choice
//	tabint	= nom du tableau général liste des interventions
//
function ChangeSel2Sel (choice, select, tabarray)
{
	// Construction du nom du tableau JavaScript à traiter pour faire maj de la liste
	tab = tabarray + "[" + choice.options.selectedIndex + "]";
	// Demande effective de mise à jour de la liste
	Array2Select (select, eval (tab));
}



//
// Fonction de recherche d'un item dans une liste: par son texte
//
function ItemExist (txt, sel)
{
	for (var i=0; i<sel.options.length; i++)
	{
		// Item déjà présent dans la liste: ne pas ajouter
		if (sel.options[i].text == txt)
			return true;
	}
	return false;
}


//
// Fonction d'ajout d'éléments sélectionnés dans une liste, à une autre liste
//
//	from	= liste-sélection source qui contient les éléments sélectionnés
//	to	= liste-sélection destination
//	unik	= booleen indiquant s'il s'agit d'une liste ou chaque item est unique
//
function OptSelFromTo (from, to, unik)
{
	// Boucle de recherche de l'élément sélectionné dans choice
	for (var indf=0; indf < from.options.length; indf++)
	{
		if (from.options[indf].selected)
		{
			// Si item déjà présent dans la liste: ne pas ajouter
			if (unik  &&  ItemExist (from.options[indf].text, to))
				continue;
			// Item non encore présent ou multi-occurrence autorisée (unik=false)
			to.options[to.options.length] = new Option (from.options[indf].text, from.options[indf].value);
		}
	}
}



//
// Fonction de suppression des items sélectionnés d'une liste
//
//	sel	= liste-sélection à traiter
//
function OptSelDel (sel)
{
	// Commencer par la fin pour ne pas avoir à gérer les décallages dans tableau suit aux suppressions
	for (var i=sel.options.length-1; i>=0; i--)
		if (sel.options[i].selected)	sel.options[i] = null;
}





//
// Fonction de suppression d'un item d'une liste (par son texte)
//
//	sel	= liste-sélection à traiter
//	txt	= texte de l'item à supprimer
//
function OptDel (sel, txt)
{
	// Commencer par la fin pour ne pas avoir à gérer les décallages dans tableau suit aux suppressions
	for (var i=0; i<sel.options.length; i++)
		if (sel.options[i].text == txt)		sel.options[i] = null;
}


//
// Fonction de calcul du nb d'items sélectionnés dans une liste-sélection
//
function NbSelected (sel)
{
	for (var i=0, nb=0; i < sel.options.length; i++)
		if (sel.options[i].selected)	nb++;
	return (nb);
}


//
// Fonction qui sélectionne un item selon une valeur
//
function selectValue(a_liste, a_sel)
{

	var trouve = false;

//		for (var i=0; !trouve && i<a_liste.options.length; i++)
        for (var i=0; !trouve && a_liste.options && i<a_liste.options.length; i++)
        {
                // Item déjà présent dans la liste: ne pas ajouter
                if (a_liste.options[i].value == a_sel)
                {
                        trouve = true;
                        a_liste.options[i].selected = true;
                }
        }
}

// ----------------------------------------------------------------------------------------------

//
// Fonction de lecture valeur(s) liste sélectionnée(s)
function valueSelect (a_select_id)
{
	//
	// Initialisations
	var _return = '';
	var _sep = '';
	
	// Lecture de l'objet
	var select_object = document.getElementById(a_select_id);
	if (!select_object)	return;
	select_nbs = select_object.options.length;

	for (_i=0; _i < select_nbs; _i++)
	{
//		if (select_object.options[_i].selected)	return (select_object.options[_i].value);
		if (select_object.options[_i].selected) {
			_return = _return + _sep + select_object.options[_i].value;
			_sep = ';';
		}
	}
	
	return (_return);
}
// ----------------------------------------------------------------------------------------------

//
// Fonction de sélection d'une valeur dans un bouton radio
function selectRadio (a_radio_name, a_radio_value)
{
	// Lecture de l'objet
	var radio_object = document.getElementsByName(a_radio_name);
	if (!radio_object)	return;
	radio_nbs = radio_object.length;

	// Recherche/Sélection de la valeur
	for (_i=0; _i < radio_nbs; _i++)
		radio_object[_i].checked = (radio_object[_i].value == a_radio_value);
}

// ----------------------------------------------------------------------------------------------

//
// Fonction de lecture valeur radio sélectionné
function valueRadio (a_radio_name)
{
	// Lecture de l'objet
	var radio_object = document.getElementsByName(a_radio_name);
	if (!radio_object)	return;
	radio_nbs = radio_object.length;

	for (_i=0; _i < radio_nbs; _i++)
	{
		if (radio_object[_i].checked)	return (radio_object[_i].value);
	}
}
