// ----------------------------------------------------------------------------------------------
//
//	jscript/include/tool_fihm.js
//
//	Fonctions des contrôles javascript pour les tools
//
//--------------------------------------  PREREQUIS  --------------------------------------------
//
//
//-------------------------------------- HISTORIQUE ---------------------------------------------
//
//      Création
//      --------
//
//	Modifications
//	-------------
//	09/2003		LTS		V170 Tools
//	- BOURSES: Dans le contrôle de l'écran de soumission d'un organisme, sortir dès qu'une
//	erreur rencontrée
//	-----------------------------------------------------------------------------------------
//	11/2003		LTS		V172 Tools
//	- la fonction FillSelDay() est dédinie dans fichier commun
//	-----------------------------------------------------------------------------------------
//	01/2004		LTS		V180 Tools
//	- ajout de la fonction de contrôle saisie profession
//	-----------------------------------------------------------------------------------------
//	07/2004		LTS		V220 Tools
//	- correction de la fonction de contrôle des authentifications
//	- ajout prise en compte des marqueurs d'existence de mots de passe dans les authentifs
//
// ----------------------------------------------------------------------------------------------

//
// Variables globales au module
//
var selAlert = "Sélectionner au moins 1 ";
var txtAlert = "Vous devez donner";
var txtError = "ERREUR";


// -------------------------------------------------------------------- //
//                        FONCTIONS GENERALES
// -------------------------------------------------------------------- //

//
// 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);
        }
}


// -------------------------------------------------------------------- //
//                        FONCTIONS DE GESTION DE DATES
// -------------------------------------------------------------------- //

/* V172
// MODIF LTS 11/2003 V172 TOOLS
// Cette fonction se trouve désormais dans commun/jscript/loca_com_dat.js

//
// Fonction de remplissage d'une liste de jours en fonction d'un mois donné
//
//        sday        nom de l'objet liste pour les jours
//        smon        nom de l'objet liste pour les mois
//        syea        nom de l'objet liste pour les années
//
function FillSelDay (sday, smon, syea)
{
        // Calcul du nb de jours du mois/année sélectionné
        // Fonction nbDayMonth() définie dans dates.js
        var nbdays = nbDaysMonth (smon.options[smon.selectedIndex].value, syea.options[syea.selectedIndex].value);

        // Conservation de la sélection courante pour la réappliquer
        var selday = sday.selectedIndex;

        // Vidage de la liste actuelle des jours
        RazSelect (sday);                                        // fonction définie dans select.js

        // Remplissage de la liste des jours
        for (i=0; i < nbdays; i++)
        {
                // Valeur = texte
                var numday = new String (i + 1);
                if (numday.length == 1)                numday = "0" + numday;                // sur 2 chiffres
                // Ajout de l'option
                sday.options[i] = new Option (numday, numday);
        }
        // Sélection du 1er élément par défaut si précédent ne fait plus partie de la liste
        if (selday > nbdays-1)        selday = nbdays-1;
        sday.options[selday].selected = true;
}
V172 */

// -------------------------------------------------------------------- //
//                        FONCTIONS DE GESTION DE FENETRES
// -------------------------------------------------------------------- //

//
// Fonction d'ouverture d'une fenêtre popup
//
//        action                tableau des caractéristiques de la fenêtre à ouvrir
//
function OpenWpop (action)
{
        var wf = "";
        wf = wf + "width=" + action[3];
        wf = wf + ",height=" + action[4];
        wf = wf + ",resizable=" + (action[5] ? "yes" : "no");
        wf = wf + ",scrollbars=" + (action[6] ? "yes" : "no");
        wf = wf + ",menubar=" + (action[7] ? "yes" : "no");
        wf = wf + ",toolbar=" + (action[8] ? "yes" : "no");
        wf = wf + ",directories=" + (action[9] ? "yes" : "no");
        wf = wf + ",location=" + (action[10] ? "yes" : "no");
        wf = wf + ",status=" + (action[11] ? "yes" : "no");
        return (window.open(action[1],action[2],wf));
}


//
// Fonction d'ouverture d'une fenêtre popup
//
//        dest                url destination
//        w                largeur fenêtre
//        h                hauteur fenêtre
//
function OpenWpopPreconf (dest, w, h)
{
        featur = 'toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width='+w+',height='+h;
        zoom = window.open (dest, 'hrbcpop', featur );
        zoom.focus();
}


//
// Fonction d'ouverture d'une fenêtre sur une url
//
function OpenWindow (dest)
{
        zoom = window.open (dest, 'winbifurc');
        zoom.focus();
}



//
// Fonction d'ouverture de la fenêtre popup des news
//
function OpenWnews()
{
        // Le nom à donner à la fenêtre
        var windowName = 'bifnews';
        // Création du tableau des caractéristiques à appliquer à la fenêtre
        CSAct = new Array ('','commnews.php',windowName,350,150,false,true,false,false,false,false,false);
        var winNews = OpenWpop (CSAct);
        // Placement de la fenêtre en haut à gauche et passage en avant plan
        winNews.moveTo (0,0);
        winNews.focus ();
}




// -------------------------------------------------------------------- //
//                FONCTIONS DE CONTROLE DE CONTENU
// -------------------------------------------------------------------- //



// fonction de verification des infos de chaque step d'un album photo
function AlertStp (message)
{
        // Initialisations
        var ret = false;

        alert (message);
	
	return (ret);
}
//
// Fonction de vérification du dialogue d'admin d'une botm/case/studie
// Vérifier que les champs obligatoires sont bien remplis
//
//        txtTitl                = titre
//        lenTitl                = longueur titre
//        txtName                = nom auteur
//        txtFnam                = prénom auteur
//
//function CheckSetBotm (txtTitl, lenTitl, txtName, txtFnam)
function CheckSetBotm (txtTitl, lenTitl)
{
        // Initialisations
        var ret = true;

        // --- Contrôles de saisies non vides -- //

        // Titre
        if (txtTitl.value.length == 0)
        {
                alert (txtAlert + " un TITRE !!!");
                txtTitl.focus();
                ret = false;
        }
        else if (txtTitl.value.length > lenTitl)
        {
                //alert ("The TITLE must not exceed " + lenTitl + " characters !!!\r\n(Actually " + txtTitl.value.length + ")");
		alert ("Le TITRE ne doit pas dépasser " + lenTitl + " caractères !!!\r\n(Actuellement " + txtTitl.value.length + ")");
                txtTitl.focus();
                ret = false;
        }
/*
        // Nom auteur
        else if (txtName.value.length == 0)
        {
                //alert (txtAlert + " an Author NAME !!!");
		alert (txtAlert + " un NOM !!!");
                txtName.focus();
                ret = false;
        }

        // Nom auteur
        else if (txtFnam.value.length == 0)
        {
                //alert (txtAlert + " an Author FIRST NAME !!!");
		alert (txtAlert + " un PRENOM !!!");
                txtFnam.focus();
                ret = false;
        }
*/
        // Retour traitement
        return (ret);
}

// -------------------------------------------------------------------- //

//
// Fonction de vérification du dialogue d'admin d'une step de botm/case
// Vérifier que les champs obligatoires sont bien remplis
//
//        txtTitl                = titre
//        txtComm                = zone commentaire
//
//function CheckSetBstp (txtTitl, txtComm)
function CheckSetBstp (txtTitl)
{
        // Initialisations
        var ret = true;

        // --- Contrôles de saisies non vides -- //

        // Titre
        if (txtTitl.value.length == 0)
        {
                alert (txtAlert + " a TITLE !!!");
                txtTitl.focus();
                ret = false;
        }

/*
        // Texte commentaire
        else if (txtComm.value.length == 0)
        {
                alert (txtAlert + " a COMMENT !!!");
                txtComm.focus();
                ret = false;
        }
*/
        // Retour traitement
        return (ret);
}


// -------------------------------------------------------------------- //

//
// Fonction de vérification du dialogue d'ajout d'une bifurcation
// Ajout par les visiteurs du site
// Vérifier que les champs obligatoires sont bien remplis
//
//        txtBtit                titre bifurcation
//        txtBnam                nom auteur bifurcation
//        txtItit                titre introduction
//        txtIcom                commentaire introduction
//        txtYnam                nom contributeur
//        txtYmel                mail contributeur
//        txtYorg                organisme contributeur
//
function CheckSetBadd (txtBtit, txtBnam, txtItit, txtIcom, txtYnam, txtYmel, txtYorg)
{
        // Initialisations
        var ret = true;
        var txtBifur = "to your Bifurcation";
        var txtIntro = "to the Introduction";

        // --- Contrôles saisies BIFURCATION -- //

        // Titre
        if (txtBtit.value.length == 0)
        {
                alert (txtAlert + " a TITLE " + txtBifur + " !!!");
                txtBtit.focus();
                ret = false;
        }

        // Nom auteur
        else if (txtBnam.value.length == 0)
        {
                alert (txtAlert + " an Author NAME " + txtBifur + "!!!");
                txtBnam.focus();
                ret = false;
        }

        // --- Contrôles saisies INTRO BIFURCATION -- //

        // Titre Intro
        else if (txtItit.value.length == 0)
        {
                alert (txtAlert + " a TITLE " + txtIntro + " !!!");
                txtItit.focus();
                ret = false;
        }

        // Commentaire Intro
        else if (txtIcom.value.length == 0)
        {
                alert (txtAlert + " an COMMENT " + txtIntro + "!!!");
                txtIcom.focus();
                ret = false;
        }

        // --- Contrôles saisies COORDONNEEZ CONTRIBUTEUR -- //

        // Nom du contributeur
        else if (txtYnam.value.length == 0)
        {
                alert (txtAlert + " your NAME !!!");
                txtYnam.focus();
                ret = false;
        }

        // Mail du contributeur
        else if (txtYmel.value.length == 0)
        {
                alert (txtAlert + " your EMAIL !!!");
                txtYmel.focus();
                ret = false;
        }
        // Contrôle structure du mail saisi
        else if (!CheckEmail (txtYmel))
        {
                alert ("<" + txtYmel.value + ">: Invalid Mail !");
                txtYmel.focus();
                ret = false;
        }

        // Organisme du contributeur
        else if (txtYorg.value.length == 0)
        {
                alert (txtAlert + " your INSTITUTION !!!");
                txtYorg.focus();
                ret = false;
        }

        // Retour traitement
        return (ret);
}

// -------------------------------------------------------------------- //

//
// Fonction de vérification du dialogue d'admin d'une publication
// Vérifier que les champs obligatoires sont bien remplis
//
//        txtTitl                = texte titre
//        lenTitl                = longueur max texte titre
//        txtName                = texte nom des auteurs
//        txtRefe                = texte références
//        radType                = bouton radio de type: biblio ou abstract
//        txtText                = texte abstract
//        txtComm                = texte commentaire
//
//function CheckSetPubl (txtTitl, lenTitl, txtName, txtRefe, radType, txtText, txtComm)
//function CheckSetPubl (txtTitl, lenTitl, txtName, txtOnam, txtPres, radType, txtLabo, txtProf,txtAdr1, txtAdr2, txtCpos, txtCity, txtPhon, txtMail, idThem)

// MODIF RBT V180 : séparation publications / coordonnées -> CheckSetCoord
function CheckSetPubl (txtTitl, lenTitl, txtOnam, txtPres, radType, txtLabo, idThem)
{
        // Initialisations
        var ret = true;
        var idx = idThem.options.selectedIndex;


        // --- Contrôles de saisies non vides -- //

        // Titre
        if (txtTitl.value.length == 0)
        {
                alert (txtAlert + " un TITRE !!!");
                txtTitl.focus();
                ret = false;
        }


/*        // Nom des auteurs
        else if (txtName.value.length == 0)
        {
                alert (txtAlert + " le NOM du premier auteur !!!");
                txtName.focus();
                ret = false;
        }


        // Adresse de l'auteur
        else if (txtAdr1.value.length == 0 && txtAdr2.value.length == 0)
        {
                alert (txtAlert + " l'ADRESSE du premier auteur !!!");
                txtAdre.focus();
                ret = false;
        }

        // Code Postal de l'auteur
        else if (txtCpos.value.length == 0)
        {
                alert (txtAlert + " le CODE POSTAL du premier auteur !!!");
                txtCpos.focus();
                ret = false;
        }

        // Code Postal de l'auteur
        else if (txtCity.value.length == 0)
        {
                alert (txtAlert + " la VILLE du premier auteur !!!");
                txtCity.focus();
                ret = false;
        }

        // Téléphone de l'auteur
        else if (txtPhon.value.length == 0)
        {
                alert (txtAlert + " le TELEPHONE du premier auteur !!!");
                txtPhon.focus();
                ret = false;
        }

        // Mail de l'auteur
        else if (txtMail.value.length == 0)
        {
                alert (txtAlert + " l'E-MAIL du premier auteur !!!");
                txtMail.focus();
                ret = false;
        }
*/
        // Laboratoire
        else if (txtLabo.value.length == 0)
        {
                alert (txtAlert + " l'intitulé du laboratoire !!!");
                txtLabo.focus();
                ret = false;
        }

        // Les références
        else if (txtOnam.value.length == 0)
        {
                alert (txtAlert + " les AUTRES AUTEURS !!!");
                txtOnam.focus();
                ret = false;
        }

        // nom orateur
        else if (txtPres.value.length == 0)
        {
                alert (txtAlert + " le NOM du PRESENTATEUR");
                txtPres.focus();
                ret = false;
        }

        // Le theme
        else if (idThem.options[idx].value.length == 0)
        {
                alert (txtAlert + " un THEME à votre abstract!!!");
                idThem.focus();
                ret = false;
        }

        // Si une erreur déjà trouvée, ne  pas continuer
        if (!ret)        return (ret);

        // Lecture du type de la publication: bibliography ou abstract
        var type = 0;
        for (var i=0; i < radType.length; i++)
        {
                if (radType[i].checked == 1)
                {
                        // Le bouton radio marqué a été trouvé
                        type = radType[i].value;
                        break;
                }
        }

        // Contrôle si nécessaire du texte et du commentaire
        var warn = false;
        var text = "";
        if (type == pubMEDI)
        {
                       // Cas d'une bibliographie: vérifier texte et commentaire vides
                // Confirmation perte abstract et/ou commentaire si renseignés
//                if (txtProf.value.length > 0)
//                        ret = confirm ("MEDICAL SECTION\r\nYou will lost the First Author's Profession !\r\nDo you Confirm ?");
        }
        // Modification 24/06/02: on autorise un texte et/ou commentaire pour les publications abstracts
//        else if (txtText.value.length == 0)
/*        else if (txtProf.value.length == 0)
        {
                // Cas d'un abstract: vérification saisie de l'abstract et/ou du commentaire: un des 2 obligatoire
//                alert (txtAlert + " the First Author's Profession !!!");
//                txtProf.focus();
//                ret = false;
        }
*/
        // Retour traitement
        return (ret);
}



// -------------------------------------------------------------------- //

//
// Fonction de vérification du dialogue d'admin d'inscription
// Vérifier que les champs obligatoires sont bien remplis
//
//        txtName                = texte nom des auteurs
//        txtAdr1                = adresse1
//	  txtAdr2                = adresse2
//        txtCpos                = code postal
//        txtCity                = ville
//        txtPhon                = téléphone
//	  txtMail		 = email
//
function CheckSetCoord (txtName, txtAdr1, txtCpos, txtCity, txtPhon, txtMail)
{
        // Initialisations
        var ret = true;

        // --- Contrôles de saisies non vides -- //

        // Nom des auteurs
        if (txtName.value.length == 0)
        {
                alert (txtAlert + " votre NOM !!!");
                txtName.focus();
                ret = false;
        }

        // Adresse de l'auteur
        else if (txtAdr1.value.length == 0)
        {
                alert (txtAlert + " votre ADRESSE !!!");
                txtAdr1.focus();
                ret = false;
        }

        // Code Postal de l'auteur
        else if (txtCpos.value.length == 0)
        {
                alert (txtAlert + " votre CODE POSTAL !!!");
                txtCpos.focus();
                ret = false;
        }

        // Code Postal de l'auteur
        else if (txtCity.value.length == 0)
        {
                alert (txtAlert + " votre VILLE !!!");
                txtCity.focus();
                ret = false;
        }

        // Téléphone de l'auteur
        else if (txtPhon.value.length == 0)
        {
                alert (txtAlert + " votre TELEPHONE !!!");
                txtPhon.focus();
                ret = false;
        }

        // Mail de l'auteur
        else if (txtMail.value.length == 0)
        {
                alert (txtAlert + " votre E-MAIL !!!");
                txtMail.focus();
                ret = false;
        }

        // Retour traitement
        return (ret);
}



// Fonction de vérification du dialogue d'admin d'inscription
// Vérifier que les champs obligatoires sont bien remplis
//
//        txtName                = texte nom des auteurs
//        txtAdr1                = adresse1
//	  txtAdr2                = adresse2
//        txtCpos                = code postal
//        txtCity                = ville
//        txtPhon                = téléphone
//	  txtMail		 = email
//
function CheckSetGrpCoord (txtName, txtAdr1, txtPhon, txtMail)
{
        // Initialisations
        var ret = true;

        // --- Contrôles de saisies non vides -- //

        // Nom des auteurs
        if (txtName.value.length == 0)
        {
                alert (txtAlert + " votre NOM !!!");
                txtName.focus();
                ret = false;
        }

        // Adresse de l'auteur
        else if (txtAdr1.value.length == 0)
        {
                alert (txtAlert + " votre ADRESSE !!!");
                txtAdr1.focus();
                ret = false;
        }

        // Téléphone de l'auteur
        else if (txtPhon.value.length == 0)
        {
                alert (txtAlert + " votre TELEPHONE !!!");
                txtPhon.focus();
                ret = false;
        }

        // Mail de l'auteur
        else if (txtMail.value.length == 0)
        {
                alert (txtAlert + " votre E-MAIL !!!");
                txtMail.focus();
                ret = false;
        }

        // Retour traitement
        return (ret);
}



// -------------------------------------------------------------------- //

//
// Fonction de vérification du dialogue d'admin d'inscription
// Vérifier que les champs obligatoires sont bien remplis
//
//        txtUser                = login
//        txtPass                = mot de passe
//	  txtConf                 = confirmation
//
//
// MODIF RBT V351 tools
// ajour des tailles de mots de passe autorisées
//
//function CheckSetMbre (txtUser, txtPass, txtConf)
function CheckSetMbre (txtUser, txtPass, txtConf, sizemin, sizemax)
{
        // Initialisations
        var ret = true;

        // --- Contrôles de saisies non vides -- //
        // Login
        if (txtUser.value.length < sizemin)
        {
                alert ("LOGIN  non valide !!!");
                txtUser.focus();
                ret = false;
        }
        // Login
        else if (txtUser.value.length > sizemax)
        {
                alert ("LOGIN  non valide !!!");
                txtUser.focus();
                ret = false;
        }

        // mot de passe
        else if (txtPass.value.length < sizemin)
        {
                alert ("MOT DE PASSE non valide !!!");
                txtPass.focus();
                ret = false;
        }
        // mot de passe
        else if (txtPass.value.length > sizemax)
        {
                alert ("MOT DE PASSE non valide !!!");
                txtPass.focus();
                ret = false;
        }

        // confirmation
        else if (txtConf.value != txtPass.value)
        {
                alert ("MOT DE PASSE non valide !!!");
                txtConf.focus();
                ret = false;
        }

        // Retour traitement
        return (ret);
}

// MODIF RBT V351
// ajout des tailles max et moin pour mot de passe
function CheckModifMdp (txtPass, txtConf, sizemin, sizemax)
{
        // Initialisations
        var ret = true;

        // --- Contrôles de saisies non vides -- //
        // Login
        if (txtPass.value.length >0)
        {
		// mot de passe
		if (txtPass.value.length < sizemin)
		{
			alert ("MOT DE PASSE trop court !!!");
			txtPass.focus();
			ret = false;
		}
		// mot de passe
		else if (txtPass.value.length > sizemax)
		{
			alert ("MOT DE PASSE trop long !!!");
			txtPass.focus();
			ret = false;
		}

		// confirmation
		else if (txtConf.value != txtPass.value)
		{
			alert ("MOT DE PASSE non valide !!!");
			txtConf.focus();
			ret = false;
		}

	}
        // Retour traitement
        return (ret);
}




// -------------------------------------------------------------------- //

//
// Fonction de vérification du dialogue d'admin d'une structure proposant des bourses
// Vérifier que les champs obligatoires sont bien remplis
//
function CheckSetProp (txtOrg, txtAdr1, txtAdr2, txtCpos, txtCity, txtPhon, txtMail)
{
        // Initialisations
        var ret = true;


        // --- Contrôles de saisies non vides -- //

        // Titre
        if (txtOrg.value.length == 0)
        {
                alert (txtAlert + " l'ORGANISME !!!");
                txtOrg.focus();
                ret = false;
        }
        // Adresse de l'auteur
        else if (txtAdr1.value.length == 0 && txtAdr2.value.length == 0)
        {
                alert (txtAlert + " l'ADRESSE !!!");
                txtAdr1.focus();
                ret = false;
        }

        // Code Postal de l'auteur
        else if (txtCpos.value.length == 0)
        {
                alert (txtAlert + " le CODE POSTAL !!!");
                txtCpos.focus();
                ret = false;
        }

        // Code Postal de l'auteur
        else if (txtCity.value.length == 0)
        {
                alert (txtAlert + " la VILLE !!!");
                txtCity.focus();
                ret = false;
        }

        // Téléphone de l'auteur
        else if (txtPhon.value.length == 0)
        {
                alert (txtAlert + " le TELEPHONE !!!");
                txtPhon.focus();
                ret = false;
        }

        // Mail de l'auteur
        else if (txtMail.value.length == 0)
        {
                alert (txtAlert + " l'E-MAIL !!!");
                txtMail.focus();
                ret = false;
        }
	else if (!CheckEmail (txtMail))
        {
                alert ("<" + txtMail.value + ">: Invalid Mail !");
                txtMail.focus();
                ret = false;
        }
        // Retour traitement
        return (ret);
}



// -------------------------------------------------------------------- //

//
// Fonction de vérification du dialogue d'admin d'une structure proposant des bourses
// Vérifier que les champs obligatoires sont bien remplis
//
function CheckSetCand (txtNam, txtAdr1, txtAdr2, txtCpos, txtCity, txtPhon, txtNiv, txtMail, txtFil)
{
        // Initialisations
        var ret = true;


        // --- Contrôles de saisies non vides -- //

        // Titre
        if (txtNam.value.length == 0)
        {
                alert (txtAlert + " les NOM et PRENOM !!!");
                txtNam.focus();
                ret = false;
        }
        // Adresse de l'auteur
        else if (txtAdr1.value.length == 0 && txtAdr2.value.length == 0)
        {
                alert (txtAlert + " l'ADRESSE !!!");
                txtAdr1.focus();
                ret = false;
        }

        // Code Postal de l'auteur
        else if (txtCpos.value.length == 0)
        {
                alert (txtAlert + " le CODE POSTAL !!!");
                txtCpos.focus();
                ret = false;
        }

        // Ville de l'auteur
        else if (txtCity.value.length == 0)
        {
                alert (txtAlert + " la VILLE !!!");
                txtCity.focus();
                ret = false;
        }

        // Téléphone de l'auteur
        else if (txtPhon.value.length == 0)
        {
                alert (txtAlert + " le TELEPHONE !!!");
                txtPhon.focus();
                ret = false;
        }

        // Niveau d'etudes
        else if (txtNiv.value.length == 0)
        {
                alert (txtAlert + " le NIVEAU D'ETUDES !!!");
                txtNiv.focus();
                ret = false;
        }

        // Mail
        else if (txtMail.value.length == 0)
        {
                alert (txtAlert + " l'E-MAIL !!!");
                txtMail.focus();
                ret = false;
        }
	else if (!CheckEmail (txtMail))
        {
                alert ("<" + txtMail.value + ">: Invalid Mail !");
                txtMail.focus();
                ret = false;
        }
	// fichier joint
	if (txtFil.value.length == 0)
	{
		alert (txtAlert + " un FICHIER JOINT !!!");
		txtFil.focus();
		ret = false;
	}
        // Retour traitement

        // Retour traitement
        return (ret);
}


// -------------------------------------------------------------------- //

//
// Fonction de vérification du dialogue d'admin d'une structure proposant des bourses
// Vérifier que les champs obligatoires sont bien remplis
//
function CheckModCand (txtNam, txtAdr1, txtAdr2, txtCpos, txtCity, txtPhon, txtNiv, txtMail)
{
        // Initialisations
        var ret = true;


        // --- Contrôles de saisies non vides -- //

        // Titre
        if (txtNam.value.length == 0)
        {
                alert (txtAlert + " les NOM et PRENOM !!!");
                txtNam.focus();
                ret = false;
        }
        // Adresse de l'auteur
        else if (txtAdr1.value.length == 0 && txtAdr2.value.length == 0)
        {
                alert (txtAlert + " l'ADRESSE !!!");
                txtAdr1.focus();
                ret = false;
        }

        // Code Postal de l'auteur
        else if (txtCpos.value.length == 0)
        {
                alert (txtAlert + " le CODE POSTAL !!!");
                txtCpos.focus();
                ret = false;
        }

        // Code Postal de l'auteur
        else if (txtCity.value.length == 0)
        {
                alert (txtAlert + " la VILLE !!!");
                txtCity.focus();
                ret = false;
        }

        // Téléphone de l'auteur
        else if (txtPhon.value.length == 0)
        {
                alert (txtAlert + " le TELEPHONE !!!");
                txtPhon.focus();
                ret = false;
        }

        // Niveau d'etudes
        else if (txtNiv.value.length == 0)
        {
                alert (txtAlert + " le NIVEAU D'ETUDES !!!");
                txtNiv.focus();
                ret = false;
        }

        // Mail
        else if (txtMail.value.length == 0)
        {
                alert (txtAlert + " l'E-MAIL !!!");
                txtMail.focus();
                ret = false;
        }
	else if (!CheckEmail (txtMail))
        {
                alert ("<" + txtMail.value + ">: Invalid Mail !");
                txtMail.focus();
                ret = false;
        }
        // Retour traitement

        // Retour traitement
        return (ret);
}



// -------------------------------------------------------------------- //

//
// Fonction de vérification du dialogue d'admin d'une soumission de bourses
// Vérifier que les champs obligatoires sont bien remplis
//
//	txtOrg		nom organismse
//	txtThem		le thème sélectionné
//	txtName		le libellé de la bourse
//	txtText		la présentation
//	txtMont		le montant
//	txtNbre		le nombre de bourses
//	txtCond		les conditions d'admission
//
function CheckSetBour (txtOrg, txtThem, txtName, txtText, txtMont, txtNbre, txtCond)
{
        // Initialisations
        var ret = true;


        // --- Contrôles de saisies non vides -- //

        // ORGANISME
        if (txtOrg.value.length == 0)
        {
                alert (txtAlert + " l'ORGANISME !!!");
                txtOrg.focus();
                ret = false;
        }
// MODIF LTS 09/2003 V171
// Dès qu'une erreur est rencontrée on stoppe
        // THEME
//	if ((txtThem.value.length == 0) && (txtThem!=-1))
	else if ((txtThem.value.length == 0) && (txtThem!=-1))
        {
                alert (txtAlert + " le THEME !!!");
                txtThem.focus();
                ret = false;
        }
// FIN MODIF LTS 09/2003 V171
        // LIBELLE de la bourse
        else if (txtName.value.length == 0 && txtName.value.length == 0)
        {
                alert (txtAlert + " le LIBELLE de la bourse !!!");
                txtName.focus();
                ret = false;
        }

        // DESCRIPTION
        else if (txtText.value.length == 0)
        {
                alert (txtAlert + " la PRESENTATION !!!");
                txtText.focus();
                ret = false;
        }

        // MONTANT alloué
        else if (txtMont.value.length == 0)
        {
                alert (txtAlert + " le MONTANT alloué !!!");
                txtMont.focus();
                ret = false;
        }

        // NOMBRE de bourses
        else if (txtNbre.value.length == 0)
        {
                alert (txtAlert + " le NOMBRE de bourses !!!");
                txtNbre.focus();
                ret = false;
        }

        // conds d'admission
        else if (txtCond.value.length == 0)
        {
                alert (txtAlert + " les CONDITIONS D'ADMISSION !!!");
                txtCond.focus();
                ret = false;
        }
        // Retour traitement
        return (ret);
}





function checkSetNote(radNote)
{
        found=false;
        for (var i=0; i < radNote.length; i++)
        {
                if (radNote[i].checked == 1)
                {
                        // Le bouton radio marqué a été trouvé
                        found = true;
                        break;
                }
        }
        return (found);
}


// -------------------------------------------------------------------- //
//		GESTION DES PROFESSIONS
// -------------------------------------------------------------------- //

// MODIF LTS 01/2004 V180: ajout fonction de gestion des professions

// Fonction de mise à jour du champ libellé de profession en fonction de
// celui sélectionné couramment dans la liste
//
//	forme		= nom de la forme
//	selPro		= liste de sélection source de l'action
//	tabInp		= nom tableau js liste des champs en input
//	tabArray	= nom tableau js des valeurs
//
function ChangeSelProf (forme, selPro, tabInp, tabArray)
{
        // Construction du nom du tableau JavaScript à traiter pour faire maj de la liste
        //
        var tab = tabArray + "[" + (selPro.options.selectedIndex) + "]";

        // Demande effective de mise à jour de la liste
        //
        for (var i=0; i<1; i++)
        {
                // Zones de texte
                var c = eval ("document." + forme + "." +(eval (tabInp))[i]);
                c.value = (eval (tab))[i];
        }
}

// -------------------------------------------------------------------- //

//
// Fonction de vérification que les champs de saisie d'une profession sont bien remplis
//
//	tstId		= 1 pour cas modification
//			= 0 pour cas création
//	idPro		= champ de sélection profession
//	txtPro		= zone de saisie liobellé profession
//
function CheckSetProf (tstId, idProf, txtProf)
{
        // Initialisations
        //
        var ret = true;
        var idx = idProf.options.selectedIndex;

        // --- Contrôles de saisies non vides -- //

        // Titre
        if (!tstId && idProf.options[idx].value != 0)
        {
                alert ("Création impossible: vous êtes en modification !!!");
                txtProf.focus();
                ret = false;
        }
        else

        if ((tstId  &&  idProf.options[idx].value == 0))
        {
                alert ("Sélectionnez une PROFESSION à modifier !!!");
                txtProf.focus();
                ret = false;
        }
        else

        if (txtProf.value.length == 0)
        {
                alert (txtAlert + " une PROFESSION !!!");
                txtProf.focus();
                ret = false;
        }

        // Retour traitement
        return (ret);
}

// FIN MODIF LTS 01/2004 V180


// -------------------------------------------------------------------- //
//			GESTION DES THEMES
// -------------------------------------------------------------------- //

// Fonction de mise à jour du champ libellé de thème en fonction de celui sélectionné
// couramment dans la liste
// Thème de Publications ou Liens
//
//        selThm                = liste de sélection source de l'action
//        txtThm                = zone de saisie du libellé du theme
//
/*
function ChangeSelThem (selThm, txtThm, txtRef)
{
        // Lecture valeur index sélection
        var idx = selThm.options.selectedIndex;
        // Demande effective de mise à jour de la zone de saisie
        if (idx > 0)
        {
                txtThm.value = selThm.options[idx].text;
                txtRef.value = selThm.options[idx].text;
        }
        else        txtThm.value = "";
}
*/
function ChangeSelThem (forme, selThm, tabInp, tabArray)
{
        // Construction du nom du tableau JavaScript à traiter pour faire maj de la liste
        var tab = tabArray + "[" + (selThm.options.selectedIndex) + "]";
        // Demande effective de mise à jour de la liste
        for (var i=0; i<2; i++)
        {
                // Zones de texte
                var c = eval ("document." + forme + "." +(eval (tabInp))[i]);
                c.value = (eval (tab))[i];
        }
}

// -------------------------------------------------------------------- //

//
// Fonction de vérification du dialogue d'envoi de mail
// Vérifier que les champs obligatoires sont bien remplis
//
//        txtThm                = le titre à associer au lien
//

// Modif OLIVIER : idThem n'est plus un champ input mais un champ hidden
function CheckSetThem (tstId, idThem, txtThm)
{
        // Initialisations
        var ret = true;
        //var idx = idThem.options.selectedIndex;

        // --- Contrôles de saisies non vides -- //

        // Titre
        //if (!tstId && idThem.options[idx].value != 0)
		if (!tstId && idThem.value != 0)
        {
                alert ("Création impossible: vous êtes en modification !!!");
                txtThm.focus();
                ret = false;
        }
        else

		//if ((tstId  &&  idThem.options[idx].value == 0))
        if ((tstId  &&  idThem.value == 0))
        {
                alert ("Sélectionnez un theme à modifier !!!");
                txtThm.focus();
                ret = false;
        }
        else

        if (txtThm.value.length == 0)
        {
                alert (txtAlert + " un THEME !!!");
                txtThm.focus();
                ret = false;
        }

        // Retour traitement
        return (ret);
}


// -------------------------------------------------------------------- //

//
// Fonction de vérification d'un changement de libellé de thème ou pas
// Pour les publications uniquement
//
// Il s'agit de détecter le cas suivant:
//        - un thème sélectionné dans la liste
//        - une saisie réalisée dans la zone de saisie
//
//        selThm                liste de sélction des thèmes de publication
//        txtThm                zone de saisie des thèmes de publications
//
function CheckChgTpubl (selThm, txtThm)
{
        // Initialisations
        var ret = true;

        // Lecture si une saisie faite ou pas dans la zone de saisie
//        if (txtThm.value.length > 0)
        if (txtThm.value.length > 0  &&  selThm.options.selectedIndex > 0)
        {
                // Lecure de la sélection en cours dans la liste des thèmes
                // Si autre que 0, il faut contrôler la similitude des 2 ou pas
                var selIdx = selThm.options.selectedIndex;
                var selTxt = selThm.options[selIdx].text;
                // Contrôle que les contenus sont identiques ou pas
                if (selTxt != txtThm.value)
                {
                        // Un changement de libellé de thème a été détecté: demande cnfirmation
                        ret = confirm ("Are you sure you want to Modify this Theme ?\r\nThe change will take effect on every Publication on this Theme !\r\n\r\nFrom: "+selTxt+"\r\nTo: "+txtThm.value);
                }
        }

        // Retour du résultat du contrôle
        return (ret);
}


// -------------------------------------------------------------------- //

//
// Fonction de vérification du dialogue d'envoi de mail
// Vérifier que les champs obligatoires sont bien remplis
//
//        txtTit                = le titre à associer au lien
//        txtUrl                = l'url du lien
//        txtCom                = le commentaire sur le lien
//
function CheckSetLink (txtTit, txtUrl, txtCom)
{
        // Initialisations
        var ret = true;

        // --- Contrôles de saisies non vides -- //

        // Titre
        if (txtTit.value.length == 0)
        {
                alert (txtAlert + " a TITLE !!!");
                txtTit.focus();
                ret = false;
        }

        // Titre
        else if (txtUrl.value.length == 0)
        {
                alert (txtAlert + " the URL !!!");
                txtUrl.focus();
                ret = false;
        }

        // Commentaire
        else if (txtCom.value.length == 0)
        {
                alert (txtAlert + " a COMMENT !!!");
                txtCom.focus();
                ret = false;
        }

        // Retour traitement
        return (ret);
}


// -------------------------------------------------------------------- //

//
// Fonction de vérification du dialogue d'envoi de mail
// Vérifier que les champs obligatoires sont bien remplis
//
//        radNot                = le titre à associer au lien
//        txtUrl                = l'url du lien
//        txtCom                = le commentaire sur le lien
//
function CheckSetRele (radNot, tabInpCrit)
{
        // Initialisations
        var ret = true;

        // --- Contrôles de saisies non vides -- //

        // Titre
        if (txtTit.value.length == 0)
        {
                alert (txtAlert + " a TITLE !!!");
                txtTit.focus();
                ret = false;
        }

        // Titre
        else if (txtUrl.value.length == 0)
        {
                alert (txtAlert + " the URL !!!");
                txtUrl.focus();
                ret = false;
        }

        // Commentaire
        else if (txtCom.value.length == 0)
        {
                alert (txtAlert + " a COMMENT !!!");
                txtCom.focus();
                ret = false;
        }

        // Retour traitement
        return (ret);
}


// -------------------------------------------------------------------- //

//
// Fonction de vérification du dialogue d'enregistrement dans news letter
// Vérifier que les champs obligatoires sont bien remplis
//
//        txtYnam                = le nom de la personne
//        txtYmel                = le mai de la personne
//        txtYorg                = l'institut
//
function CheckSetLdif (txtYnam, txtYmel, txtYorg)
{
        // Initialisations
        var ret = true;

        // --- Contrôles saisies COORDONNEEZ CONTRIBUTEUR -- //

        // Nom du contributeur
        if (txtYnam.value.length == 0)
        {
                alert (txtAlert + " your NAME !!!");
                txtYnam.focus();
                ret = false;
        }

        // Mail du contributeur
        else if (txtYmel.value.length == 0)
        {
                alert (txtAlert + " your EMAIL !!!");
                txtYmel.focus();
                ret = false;
        }
        // Contrôle structure du mail saisi
        else if (!CheckEmail (txtYmel))
        {
                alert ("<" + txtYmel.value + ">: Invalid Mail !");
                txtYmel.focus();
                ret = false;
        }

        // Organisme du contributeur
        else if (txtYorg.value.length == 0)
        {
                alert (txtAlert + " your INSTITUTION !!!");
                txtYorg.focus();
                ret = false;
        }


        // Retour traitement
        return (ret);
}

function CheckSetNbRele (form, ckrele, nbmax, nbindispo)
{
        // Initialisations
        var ret = true;
        // --- Contrôles de saisies non vides -- //

        // Contrôle qu'au moins un critère d'annulation sélectionné
        // On parcours tous les éléments de nom ckannu et on regarde si checkée
        //
        for (var i=0, nbchek=0; i < form.length; i++)
        {
                elt = eval ("document."+form+".elements["+i+"]");
                if (elt.name == ckrele  &&  elt.checked)
                        nbchek++;
        }

        if (nbchek + nbindispo > nbmax)
                ret = false;

        // Retour traitement
        return (ret);
}


// -------------------------------------------------------------------- //
//                FONCTIONS DE GESTION DES HABILITATIONS
// -------------------------------------------------------------------- //

//
// Fonction de mise à jour de champs habilitation en fonction choix dans une liste
//
//      frmaut          = nom de la forme de gestion des habilitations
//      choice          = liste de sélection source de l'action
//      tabInp          = tableau liste des noms des champs input à affecter
//      tabArray        = tableau liste des valeurs à traiter
//        tabAut                = tableau liste des valeurs adm type d'authentif à traiter
//
// Champs à mettre à jour (dans ordre tabInp)
//
//        User
//        Mot de passe (saisie)
//        Mot de passe (confirmation)
//        Libellé
//        Profils
//
function ChangeSelAuth (frmaut, choice, tabInp, tabArray, tabAut)
{
        // Construction du nom du tableau JavaScript à traiter pour faire maj de la liste
        var tab = tabArray + "[" + (choice.options.selectedIndex) + "]";
        // Demande effective de mise à jour de la liste
        var c, val;
// MODIF LTS 08/2004: suite ajout des marque d'existence de mot de passe '*****'
// V220	var nbs = 3;
	var nbs = 5;
// FIN MODIF LTS 08/2004
        for (var i=0; i<nbs; i++)
        {
//alert (i+"="+(eval (tabInp))[i]);
                // Champs de saisie texte
                c = eval ("document." + frmaut + "." +(eval (tabInp))[i]);
                c.value = (eval (tab))[i];
        }

        //
        // Parcours des CK des profils pour marquer celles associées à l'habilitation courante
        // Dans tab, on doit retrouver la somme des valeurs des profils sélectionnés
        // Les valeurs de chaque profil sont des puissances de 2
        // => on part de la plus grande pour revenir à la plus petite
        //
        // 3 zones de profil à traiter
        //        - profil pour les publications
        //        - profil pour les cases
        //        - profil pour les studies
        //        - profil pour les bourses
        //        - profil pour l'admin
        //

//	nbs += 4;
	nbs += 5;
        for (; i < nbs; i++)
        {
                // Lecture valeur du profil à exploiter pour marquer les ck's
                valeur = (eval (tab))[i];

                // Parcour des Check boxes à affecter par valeur
                //
                var sizeTab = (eval (tabAut)).length;
                for (var j=sizeTab-1; j >= 0; j--)
                {
                        // Calcul valeur de la puisssance de 2 courante
                        // => permet de construire le nom de la ck associée
                        //
                        var valpow = (eval (tabAut))[j];
                        // Préfix commun du nom des cks, suivi puissance de 2 associée
                        // Attention: la ck n'existe pas obligatoirement
                        c = eval ("document." + frmaut + "." + (eval (tabInp))[i] + valpow);

                        // Test si CK à marquer: puissance de 2 contenu dans valeur totale profil ?
//alert ((eval (tabInp))[i] + valpow+"#valeur="+valeur+"/value="+c.value+"#")
                        if ((!c)  ||  (valeur / (c.value) >= 1))
                        {
                                valeur -= valpow;
                                if (c)        c.checked = 1;
                        }
                        else        c.checked = 0;
                }
        }
}


//
// Fonction de vérification du dialogue de saisie/modification d'une habilitation
// Vérifier que les champs obligatoires sont bien remplis
//
//      tstId           booléen de test id: si modif choisie
//      idAuth          id authentif à traiter
//      useAuth         login authentif
//      pasAuth         mdp authentif
//      pwdAuth         confirm mdp authentif
//      libAuth         libellé authentif
//      melAuth         le mail associé
//      lstAuth         tableau liste des authentifs déjà enregistrées
//
//
//function CheckSetAuth (tstId, idAuth, useAuth, pasAuth, pwdAuth)
function CheckSetAuth (tstId, idAuth, useAuth, pasAuth, pwdAuth, libAuth, melAuth, lstAuth)
{
        // Initialisations
        var ret = true;
        //
        var lgquadri = 4;               // nb caractères quadrigramme client
        var lgusermin = 2;              // nb de caractères min pour le user
        var lgpassmin = 3;              // nb de caractères min pour mot de passe


        // --- Contrôles de saisies non vides -- //
        // Sélection de l'authentification
	if (tstId  &&  idAuth.value == 0)
        {
                alert ("Sélectionnez 1 Habilitation !!!");
                idAuth.focus();
                ret = false;
        }

        // User d'habilitation
        else if (useAuth.value.length == 0)
        {
                alert (txtAlert + " le USER d'habilitation !!!");
                useAuth.focus();
                ret = false;
        }
        else if (useAuth.value.length < lgusermin)
        {
                alert ("User: " + lgquadri + "+" + lgusermin + " caractères MINIMUM !!!");
                useAuth.focus();
                ret = false;
        }

        // Mot de passe d'habilitation
        // A tester dans les cas suivants:
        //        - création d'une nouvelle habilitation (!tstId)
        //        - mdp de saisie dans l'un des champs de saisie (cas modif)
        //
// MODIF LTS 07/2004 V220 TOOLS
//	else if (!tstId  &&  pasAuth.value.length > 0  ||  pwdAuth.value.length > 0)
        else if (!tstId  ||  pasAuth.value.length > 0  ||  pwdAuth.value.length > 0)
// FIN MODIF LTS 07/2004 V220 TOOLS
        {
                if (pasAuth.value.length < lgpassmin)
                {
                        alert ("Mot de passe: " + lgpassmin + " caractères MINIMUM !!!");
                        pasAuth.focus();
                        ret = false;
                }
                else if (pasAuth.value.length == 0)
                {
                        alert (txtAlert + " le MOT DE PASSE d'habilitation !!!");
                        pasAuth.focus();
                        ret = false;
                }

                // Mot de passe de confirmation
                else if (pwdAuth.value.length == 0)
                {
                        alert (txtAlert + " le MOT DE PASSE de confirmation !!!");
                        pwdAuth.focus();
                        ret = false;
                }

                // Mots de passe identiques
                else if (pasAuth.value != pwdAuth.value)
                {
                        alert ("Mot de passe et confirmation différents. RECOMMENCEZ !");
                        pasAuth.focus();
                        ret = false;
                }
        }

        // Mail d'authentification
        else if (melAuth.value.length == 0)
        {
                alert (txtAlert + " le MAIL d'habilitation !!!");
                melAuth.focus();
                ret = false;
        }
        else if (!CheckEmail (melAuth))
        {
                alert ("Format du MAIL d'habilitation incorrect !!!\r\nmail@mail.dom attendu ....");
                melAuth.focus();
                ret = false;
        }

        // Libellé d'habilitation
        else if (libAuth.value.length == 0)
        {
                alert (txtAlert + " le LIBELLE d'habilitation !!!");
                libAuth.focus();
                ret = false;
        }


        // Test authentif pas déjà existante: champ d'indice 0 dans tableau des valeurs
        // A faire uniquement si
        //        - aucune erreur détectée jusque là
        //        - cas création nouvelle authentif
        //
        for (var i=0; ret && !tstId && lstAuth && i<lstAuth.length; i++)
        {
                if (lstAuth[i][0] == useAuth.value)
                {
                        alert ("ERREUR: Habilitation '" + lstAuth[i][0] + "' déjà déclarée !");
                        ret = false;
                }
        }

        // Retour traitement
        return (ret);
}


// -------------------------------------------------------------------- //

//
// Fonction de vérification du dialogue d'envoi de mail
// Vérifier que les champs obligatoires sont bien remplis
//
//        txtSubj                = nom champ sujet du message
//        txtMess                = nom champ texte message
//        txtMail                = nom champ email émetteur
//
function CheckSendMail (txtSubj, txtMess, txtMail)
{
        // Initialisations
        var ret = true;

        // --- Contrôles de saisies non vides -- //
        // Mail du contributeur
        if (txtMail  &&  txtMail.value.length == 0)
        {
                alert (txtAlert + " your EMAIL !!!");
                txtMail.focus();
                ret = false;
        }
        // Contrôle structure du mail saisi
        else if (txtMail  &&  !CheckEmail (txtMail))
        {
                alert ("<" + txtMail.value + ">: Invalid Mail !");
                txtMail.focus();
                ret = false;
        }

        // Suject
        else if (txtSubj.value.length == 0)
        {
                alert (txtAlert + " a SUBJECT !!!");
                txtSubj.focus();
                ret = false;
        }

        // Nom auteur
        else if (txtMess.value.length == 0)
        {
                alert (txtAlert + " a MESSAGE !!!");
                txtMess.focus();
                ret = false;
        }

        // Retour traitement
        return (ret);
}


// -------------------------------------------------------------------- //
//                        FONCTIONS DE GESTION DE FICHIERS
// -------------------------------------------------------------------- //

//
// Fonction de contrôle de l'extension d'un fichier
//
//        tabext                = extensions reconnues
//        fldfile                = nom du champ html qu contient le path du fuchier à contrôler (peut être vide)
//
function CheckExtFile (forme, fldfile, tabext)
{
        // La zone de saisie du nom du fichier est-elle renseignée ?
        var file = fldfile.value;
        if (file.length == 0)        return (true);

        // Un nom de fichier saisi: extraction de son extension
        var idx = file.lastIndexOf ('.');
// modif RBT TOOL V 1.5.1 -> contrôle de la présence d'un extension
        if (idx < 0) {
		alert (txtError + ": votre fichier doit avoir une extension");
		return(false);
	}
        var ext = file.substring (idx+1, idx+10);

        // Boucle de comparaison des extensions autorisées avec celle du fichier saisi
        var lstext="";
        var sep="";
        for (var i=0; i < tabext.length; i++, sep=",")
        {
                var str = tabext[i];
                if (ext.toLowerCase() == str.toLowerCase())                return (true);
                lstext = lstext + sep + str;
        }

        // Retour traitement: on est en erreur
        // => sélectionner le contenu et mettre le focus dessus
        // Champ en lecture seule en js: on ne peut vider le contenu
        //
        //alert (txtError + ": Bad File TYPE '" + ext + "' !  Waiting for a '" + lstext + "' file ...");
	alert (txtError + ": Mauvaise extension de fichier '" + ext + "' !  Extensions '" + lstext + "' attendues ...");
        fldfile.select();
        fldfile.focus();
        return (false);
}



// -------------------------------------------------------------------- //
//                        FONCTIONS D'AFFICHAGE/MASQUAGE
// -------------------------------------------------------------------- //


//
// Fonction générale d'affichage/masquage des blocs texte
// Traitement fonction du type de navigateur: STYLE valable que pour IE
//
//        obj        l'objet associé au bloc texte: pour IE
//
function fVis (obj)
{
        // Pour IE: exploiter les styles de blocs
        if (obj.style.display == "block")
                obj.style.display = "none";
        else    obj.style.display = "block";
}

// -------------------------------------------------------------------- //

//
// Fonction de masuqage/affichage de blocs texte pour les news
// La source de l'évènement est une Ancre placée dans la 2° cellule de la première ligne d'une table
// Le bloc de texte à masquer/afficher se trouve dans la cellule (colspan = 2 !!!) de la 2° ligne de cette même table
//
//        url        l'adresse éventuelle de lien: pour Netscape
//
function fVisNews (url)
{
        // Lecture type du navigateur client
        CSAg = window.navigator.userAgent;
        // Comportement différent suivant type de navigateur
        if (IsIE())
		fVis (window.event.srcElement.parentElement.parentElement.parentElement.children[1].children[0], url);
        else	// Pour Netscape et les autres, appliquer une nouvelle requête vis url: par redirection
		window.location.href=url;
}

// -------------------------------------------------------------------- //

//
// Fonction de masuqage/affichage de blocs texte pour les abstracts
// La source de l'évènement est une Ancre placée dans la 2° cellule de la première ligne d'une table
// Le bloc de texte à masquer/afficher se trouve dans la 2° cellule de cette même table
//
//        url        l'adresse éventuelle de lien: pour Netscape
//
function fVisAbst (url)
{
        // Lecture type du navigateur client
        CSAg = window.navigator.userAgent;

        // Comportement différent suivant type de navigateur
        if (IsIE())
		fVis (window.event.srcElement.parentElement.parentElement.children[1], url);
	else	// Pour Netscape et les autres, appliquer une nouvelle requête vis url: par redirection
		window.location.href=url;
}



function checkNbChars(form, inptarget, inpreste, inpwar, nbcharsmax)
{
        // cette fonction calcule et affiche le nombre de caracteres saisi pour le message a envoyer
        target = eval("document." + form + "." + inptarget)
        if (target.value.length > nbcharsmax)
        {
                target.value = target.value.substring(0,nbcharsmax);
                reste = 0;
                w = eval("document." + form + "." + inpwar);
                w.value = 1;
        }
        else
        if (target.value.length < nbcharsmax)
        {
                reste = nbcharsmax - target.value.length;
                w = eval("document." + form + "." + inpwar);
                w.value = 0;
        }
        else    {reste = nbcharsmax - target.value.length;}

        c = eval("document." + form + "." + inpreste);
        c.value = reste;
}



// -------------------------------------------------------------------- //
//
// controle la frappe selon le nombre de mots
// - inptarget: l'input à controler
// - inpreste:  l'input compteur de mots
// - nbwordsmax: le nombre maximum de mots autorisés
//
//
function checkNbWords(form, inptarget, inpreste, inpwar, nbwordsmax)
{

        // cette fonction calcule et affiche le nombre de caracteres saisi pour le message a envoyer
        target = eval("document." + form + "." + inptarget)
        // le nombre de mots du texte area est plus grand que celui autorisé
        if (countWords(form, inptarget) > nbwordsmax)
        {
                while (countWords(form, inptarget)-2 > nbwordsmax)
                {
                        delLastWords(form, inptarget, nbwordsmax);
                }

                reste = 0;
                w = eval("document." + form + "." + inpwar);
                w.value = 1;
                c = eval("document." + form + "." + inpreste);
                c.value = reste;
//                alert (lib + "#" + w.value);
        }
        else
        if (countWords(form, inptarget) < nbwordsmax)
        {
                reste = nbwordsmax - countWords(form, inptarget);
                w = eval("document." + form + "." + inpwar);
                w.value = 0;
                c = eval("document." + form + "." + inpreste);
                c.value = reste;
//                alert (lib + "#" + w.value);
        }
        else
        {
                c = eval("document." + form + "." + inpreste);
                reste = c.value;
                c.value = reste;
        }

}

// -------------------------------------------------------------------- //
//
// controle la frappe selon le nombre de mots
// - inptarget: l'input ? controler
// - inpreste:  l'input compteur de mots
// - nbwordsmax: le nombre maximum de mots autoris?s
//
//
function checkIframeNbWords(instanceName)
{

  // Get the editor instance that we want to interact with.
  var oEditor = FCKeditorAPI.GetInstance( instanceName ) ;
  
  // Get the editor contents as XHTML.
  alert(oEditor.GetXHTML( true )) ;  // "true" means you want it formatted.


}

function WarningLimitPubl(warTitle, warAbstr)
{
        ret = true
        if (warTitle.value==1 && warAbstr.value==1)
                { ret = confirm ('Le titre et l\'abstract ont été tronqués. \r\nValider la publication?')}
        else
        if (warTitle.value==1 && warAbstr.value==0)
                { ret = confirm ('Le titre a été tronqué. \r\nValider la publication?')}
        else
        if (warTitle.value==0 && warAbstr.value==1)
                { ret = confirm ('L\'abstract a été tronqué. \r\nValider la publication?')}

        return ret;
}



function WarningLimitBstp(warTitle)
{
        ret = true

        if (warTitle.value==1)
                { ret = confirm ('Le titre a été tronqué. \r\nValider l\'étape?')}

        return ret;
}


function WarningLimitCase(warTitle)
{
        ret = true

        if (warTitle.value==1)
                { ret = confirm ('Le titre a été tronqué. \r\nValider le cas clinique?')}

        return ret;
}


function WarningTrunc(warTitle,libelle)
{
        ret = true

        if (warTitle.value==1)
                { ret = confirm (libelle)}

        return ret;
}



function jsSelProfil (forme, prefix, outils, profil, id)
{

	var lien = document.getElementById(id);
	//alert(lien.value);
	formeval = eval ("document." + forme);
        for (var j=0; j < formeval.length; j++)
        {
                // L'objet existe: extraire sa valeur pour voir si elle fait partie de la liste
                //alert(formeval[j].name + "#" + formeval[j].name.indexOf (prefix));
		for (var tool=0; tool<outils.length; tool++)
		{
			var nomcheck = prefix+'['+outils[tool]+']['+profil+']';
			//alert('nomcheck='+nomcheck);
			if (formeval[j].name.indexOf(nomcheck) >= 0)
			{
				if (lien.value==0)
				{
					formeval[j].checked = 1;
					var value=1;
				}
				else 
				{
					formeval[j].checked = 0;
					var value=0;
				}
//	                else    c.checked = 0;
			}
		}
        }
	lien.value=value;
}

// Modif OLIVIER : Ajout d'une fonction pour la NewsLetter
function selectAndReload(branch) {
	clickLabel(branch);
	if (!branch.hasChildren())
		reload();
}

function reload() 
{
	var themeTree =	listTreeGet('themeTree');
	var profsTree =	listTreeGet('profsTree');
		
	document.formetat.action='addnewsdest.php';
	document.getElementById('idTheme').value = getCheckedChildsIds(themeTree);
	document.getElementById('idProfs').value = getCheckedChildsIds(profsTree);
	document.getElementById('formetatmod').value = 1;
	document.formetat.submit();
}

