/************************************************
**     LIBRAIRIE DE FONCTIONS STANDARD SIGMA   **
**      Fonction de gestion des formulaires    **
********************************************************************************************
**  Version 2.1   -  07/03/2007 - RGUEGAN -  * reecriture de std_gestionnaireEvenementEntree
**  Version 2.0   -  27/06/2007 - ECHEVALIER - + nouvelles méthodes pour cocher/décocher un ensemble de lignes
**  Version 1.9   -  07/03/2007 - RGUEGAN -  + setFocusId
                                             * detection de objet null sur setFocus
                                             * OBLIGATOIRE accepte OUI et TRUE
**  Version 1.8   -  07/03/2007 - RGUEGAN -  * ne valide plus un formulaire lorque ENTREE sur un bouton
**  Version 1.7   -  01/07/2004 - RGUEGAN -  + Pour les champs obligatoires affichage du libelle si attribut LIBELLE présent
**                                           + La validation des formulaires est compatible FireFox
**  Version 1.6   -  01/07/2004 - RGUEGAN -  * bug lorsqu'aucun onglet présent
**  Version 1.5   -  01/07/2004 - NGOURDON - * contrôles automatiques de iCopitole
**  Version 1.14b -  10/10/2002 - RGUEGAN  - * ne valide plus un formulaire lorque ENTREE sur un TEXTAREA (saut de ligne)
**  Version 1.13 -  30/09/2002 - RGUEGAN - * ne valide plus un formulaire lorque ENTREE sur un lien
**  Version 1.12 -  26/09/2002 - RGUEGAN - + std_setFocus
                                           * trim dans verifierChampObligatoire
**  Version 1.11 -  03/05/2002 - RGUEGAN - Modification pour prospectus
**                                         + std_garderFocusSurErreur
**                                         * std_controlerDateBornes, pour FIXE : nouveau msg d'erreur : controleDate_messageSaisirDateFixe
**  Version 1.00 -  23/04/2002 - RGUEGAN - Première diffusion pour Prospectus
**
*******************************************************************************************/

///////////////////////////////////////////
// Variables globales
///////////////////////////////////////////
///////////////////////////////////////////


var globale_formulaireDateAControler  = 0;  // Numéro du formulaire où un contrôle de date est à faire
var controleDate_messageSaisirDatePlusAncienne = "La valeur saisie est incorrecte : @1@ \n Vous devez saisir une date inférieure ou égale au @2@"
var controleDate_messageSaisirDatePlusRecente = "La valeur saisie est incorrecte : @1@ \n Vous devez saisir une date supérieure ou égale au @2@"
var controleDate_messageSaisirDateValide      = "La valeur saisie est incorrecte : @1@ \n La date saisie (@2@) n'est pas au format valide "
var controleDate_messageSaisirDateFixe      = "La date ne peut pas être modifiée "

var champsObligatoireMessageDeb = "La saisie du champ "
var champsObligatoireMessageFin = " est obligatoire"
///////////////////////////////////////////
// Fonctions
///////////////////////////////////////////
///////////////////////////////////////////
function std_modifierControleDate(nomChampDate, mode)
{
  objetChampDate = eval('document.forms[globale_formulaireDateAControler].'+nomChampDate);
  objetChampDate.setAttribute("CONTROLE", mode);
}

function std_controlerDateBornes(objetChampDate)
{
  dateCorrigee = std_convertirDateToString(std_convertirStringToDate(objetChampDate.value, CONSTANTE_FORMAT_DATE_FR), "Fr");
  if (dateCorrigee != "")
  {
          objetChampDate.value = std_convertirDateToString(std_convertirStringToDate(objetChampDate.value, CONSTANTE_FORMAT_DATE_FR), "Fr");
          dateSaisie = objetChampDate.value;
       	  dateMax = objetChampDate.getAttribute("DATEMAX");

          mode = objetChampDate.getAttribute("CONTROLE");
          switch (mode)
          {
            case "FUTUR" :  dateMin = objetChampDate.getAttribute("DATEMIN");
         	            dateMax = "";
        	   break;
            case "PASSE" :  dateMin = "";
         	            dateMax = objetChampDate.getAttribute("DATEMAX");
        	   break;
            case "LIBRE" :  dateMin = "";
         	            dateMax = "";
        	   break;
            case "FIXE"   : dateMin = "";
         	            dateMax = "";
                   break;
            case "PLAGE"  :  dateMin = objetChampDate.getAttribute("DATEMIN");
         	             dateMax = objetChampDate.getAttribute("DATEMAX");
        	   break;
            default :  dateMin = "";
         	       dateMax = "";
           }

	  if ((dateMin != "") && (std_comparerDatesFr(dateSaisie,dateMin) < 0))
	  {
                messageErreur = std_remplacerTexte(controleDate_messageSaisirDatePlusRecente,"@1@", dateCorrigee);
                messageErreur = std_remplacerTexte(messageErreur,"@2@", dateMin);
		std_afficherErreurSaisieDate(messageErreur, objetChampDate);
		retour = false;
	  }
	  else if ((dateMax != "") && (std_comparerDatesFr(dateSaisie,dateMax) > 0))
	  {
                messageErreur = std_remplacerTexte(controleDate_messageSaisirDatePlusAncienne,"@1@", dateCorrigee);
                messageErreur = std_remplacerTexte(messageErreur,"@2@", dateMax);
		std_afficherErreurSaisieDate(messageErreur, objetChampDate);
		retour = false;
	  } // sinon la date est dans la bonne plage de valeurs
	  else if (mode == "FIXE")
	  {
                dateInitiale = std_convertirDateToString(std_convertirStringToDate(objetChampDate.getAttribute("DATEINITIALE"), CONSTANTE_FORMAT_DATE_FR), "Fr")
                if (dateCorrigee != dateInitiale)
                {
                   std_afficherErreurSaisieDate(controleDate_messageSaisirDateFixe, objetChampDate);
                   objetChampDate.value = dateInitiale;
  		   retour = false;
  		}
          }
	  else
	  {
                retour = true;
          }
  }
  else
  {
      // La date saisie est invalide
    dateSaisie = objetChampDate.value;
    messageErreur = std_remplacerTexte(controleDate_messageSaisirDatePlusAncienne,"@1@", dateCorrigee);
    messageErreur = std_remplacerTexte(messageErreur,"@2@", dateMax);
    std_afficherErreurSaisieDate(messageErreur, objetChampDate);

    std_afficherErreurSaisieDate(std_remplacerTexte(controleDate_messageSaisirDateValide, "@2@", dateSaisie)+CONSTANTE_FORMAT_DATE_FR, objetChampDate);
    retour = false;
  }
  if (retour == false)
  {
     // alert("erreur");
     objetChampDate.setAttribute("STD-ERREUR-VALIDATION","TRUE");
//     objetChampDate.onblur = std_garderFocus;
//     document.forms[globale_formulaireDateAControler].onsubmit = "";
  }
  else
  {
     objetChampDate.setAttribute("STD-ERREUR-VALIDATION","");
  }
  return retour;
}

// Ramène le focus sur le champ s'il n'a pas été validé par la fonction de controle : std_controlerDateBornes
// doit etre appele sur le onBlur
function std_garderFocusSurErreur(objetChampDate)
{
    if (objetChampDate.getAttribute("STD-ERREUR-VALIDATION") == "TRUE")
    {
      objetChampDate.focus();
      return false;
    }
    return true;
}

function std_controlerDate(objetChampDate)
{
  dateCorrigee = std_convertirDateToString(std_convertirStringToDate(objetChampDate.value, globale_FormatDate), globale_codePays);
  if (dateCorrigee != "")
  {
      return dateCorrigee;
  }
  else
  {
      // La date saisie est invalide
      std_afficherErreurSaisieDate(std_remplacerTexte(controleDate_messageSaisirDateValide, "@1@", objetChampDate.value)+globale_FormatDate, objetChampDate);
      return objetChampDate;
  }
}

function std_formaterDateSaisie(objetChampDate)
{
  dateCorrigee = std_convertirDateToString(std_convertirStringToDate(objetChampDate.value, globale_FormatDate), globale_codePays);
  if (dateCorrigee != "")
  {
      objetChampDate.value = dateCorrigee;
  }
}



function std_afficherErreurSaisieDate(message, objet)
{
   alert(message);
}

function std_afficherErreurChampObligatoire(message, objet)
{
   alert(message);
}

function std_setElementActif( objetFormulaire )
{
    objetFormulaire.focus();
    if (objetFormulaire.type == "text" || objetFormulaire.type == "textarea")
    {
          if (objetFormulaire.value != "")
          {
                objetFormulaire.select();
          }
    }
}

/*
   Ne fonctionne pas pour les listes (simple, dropdown)
*/
function std_verifierChampObligatoire(objetFormulaire, messageUtilisateur)
{
    objetFormulaire.value = std_trim(objetFormulaire.value);
    if (objetFormulaire.value == "")
    {
        std_setFocus(objetFormulaire);
        if (arguments.length == 2)
        {
          std_afficherErreurChampObligatoire(messageUtilisateur,objetFormulaire);
        }
        retour =  false;
    }
    else
    {
      retour = true
    }
    return retour;
}

function std_verifierChampObligatoire_Message(objetFormulaire, nomDuChamp)
{
    objetFormulaire.value = std_trim(objetFormulaire.value);
    if (objetFormulaire.value == "") {
        std_setFocus(objetFormulaire);
        if (arguments.length == 2) {
          alert(champsObligatoireMessageDeb + nomDuChamp + champsObligatoireMessageFin);
        }
        retour =  false;
    } else {
      retour = true
    }
    return retour;
}

function std_verifierChampObligatoire_Onglet(objetFormulaire, messageUtilisateur,onglet,nbOnglet)
{
    objetFormulaire.value = std_trim(objetFormulaire.value);
    if (objetFormulaire.value == "")
    {
       if (nbOnglet > 0) 
  		 {
	   	  MettreFocus(std_getReference("idOnglet" + onglet),nbOnglet); 	
   		 } 
    	std_setFocus(objetFormulaire);
     	if (arguments.length == 4)
     	{
			    if ((objetFormulaire.getAttribute("LIBELLE") != "" ) && (objetFormulaire.getAttribute("LIBELLE") != null ))
					{
     					messageUtilisateur += " \nChamp :  " + objetFormulaire.getAttribute("LIBELLE") + " ";
					}
      	  std_afficherErreurChampObligatoire(messageUtilisateur,objetFormulaire);
    	}
    	retour =  false;
    }
    else
    {
      retour = true
    }
    return retour;
}

/*
   Ne fonctionne pas pour les listes (simple, dropdown)
*/
function std_setFocus( objetFormulaire )
{
	if (objetFormulaire == null)
	{
		alert("Impossible de placer le focus, l'objet est null !");
	}
	else
	{
		objetFormulaire.focus();
		if (objetFormulaire.type == "text" || objetFormulaire.type == "textarea")
		{
			  if (objetFormulaire.value != "")
			  {
					objetFormulaire.select();
			  }
		}
	}
}

function std_setFocusId( idObjet )
{
	objetFormulaire = std_getReference(idObjet)
	std_setFocus(objetFormulaire)
}

function mettreFocus(ongletActif,nbOnglet)
{
 //Init
 for (i = 1; i <= nbOnglet; i++ )
  {
   //On rend tout invisible
   table = std_getReference("idOnglet" + i + "Contenu");
   table.style.display = "none";
   //Etat inactif pour tous les onglets
   onglet = std_getReference("idOnglet" + i);
   onglet.className = "OngletInactif"
   //Flêche grise
   image = std_getReference("idOnglet" + i + "IMG");
   image.src = imgDir + "fleche_ong_grise.gif";
  }
 //Affichage du tableau
 table = std_getReference(ongletActif.id + "Contenu");
 table.style.display = "block";
 //On affiche 'ongletActif"
 ongletActif.className = "OngletActif"
 //flêche rouge
 image = std_getReference(ongletActif.id + "IMG");
 image.src = imgDir + "fleche_ong_rouge.gif";
}

function MettreFocus(ongletActif,nbOnglet)
{
  if (ongletActif != null)
	{
  	mettreFocus(ongletActif,nbOnglet)
  }
}

/*
  On fait un submit automatique si
  - on a appuyé sur la touche entrée
  - l'élément courant n'est pas un lien <A HREF="">
  - l'élément courant n'est pas un bouton
*/
// activer à l'aide de : document.onkeypress = std_gestionnaireEvenementEntree;
function std_gestionnaireEvenementEntree(event)
{
  var evenement = (ie ? window.event : event);
  var touche = (ie ? evenement.keyCode : evenement.which);
  var element = (ie ? evenement.srcElement : evenement.target);
  
  // La touche entrée valide le formulaire
  if ((touche == TOUCHE_SUBMIT) && ((evenement.shiftKey && evenement.altKey && evenement.ctrlKey ) == false)
	  && (element.tagName != "TEXTAREA")
	  && (element.tagName != "A")
	  && (element.tagName != "button"))
  {
      //event.keyCode = 0; // ==> aucune action ne sera faite par IE 
      evenement.returnValue = false; 
   
      enregistrerFormulaire();  // On déclenche le submit du formulaire s'il est valide
  }
  else
  {
     try
     {
        hidecal1(event);
     }
     catch(err)
     {
        // le calendrier n'est pas actif/présent
     }
     
  }  
}


// ------------ Gestion verification automatique du type des champs ------------ //
// les variables globales suivantes sont nécessaires
//  - msgObligatoire
//  - msgSaisieEntier
//  - msgSaisieNumerique
//  - msgSaisieDate
//  - msgSaisieHeure
//  - nbOnglets

function std_verifierChampsAutomatiques()
{
  var indiceChamp = 0;
  for (indiceChamp=0; indiceChamp < document.forms[0].elements.length; indiceChamp++)
  {
	  zone   = document.forms[0].elements.item(indiceChamp);
  
    // Si input
    if (zone.tagName.toUpperCase() == "INPUT")
    {
      // Saisie obligatoire
      if ( (std_compareIgnoreCase(zone.getAttribute("OBLIGATOIRE"),"OUI")) || (std_compareIgnoreCase(zone.getAttribute("OBLIGATOIRE"),"TRUE")) )
      {
		if ((zone.getAttribute("TYPE").toUpperCase() == "TEXT" ) || (zone.getAttribute("TYPE").toUpperCase() == "PASSWORD"))
        {
		  if (!std_verifierChampObligatoire_Onglet(zone,msgObligatoire,zone.getAttribute("ONGLET"),nbOnglets))
		  {
		  	return false;
		  }
        }
//alert("RADIO");
/* Ne fonctionne pas : prend les radios buttons 1 par 1 au lieu de prendre le groupe
        if ((zone.getAttribute("TYPE").toUpperCase() == "RADIO") && (std_trim(std_getRadioValue(zone)) == ""))
        {
          alert(msgObligatoire);
          MettreFocus(std_getReference("idOnglet"+zone.getAttribute("ONGLET")),nbOnglets);	 
          std_setElementActif(zone);
          return false;
        }
*/
      }
      // Entier
      if (std_compareIgnoreCase(zone.getAttribute("GENRE"),"ENTIER") && (std_trim(zone.value) != ""))
      {
        if (!std_verifierInteger(zone.value))
        {
          alert(msgSaisieEntier);
          MettreFocus(std_getReference("idOnglet"+zone.getAttribute("ONGLET")),nbOnglets);	 
          std_setElementActif(zone);
          return false;
        }
      }
      // Numérique
      if (std_compareIgnoreCase(zone.getAttribute("GENRE"),"NUMERIQUE") && (std_trim(zone.value) != ""))
      {
        nbEntier = zone.getAttribute("NBENTIER");
        nbDec    = zone.getAttribute("NBDEC");
	  	if (!std_verifierNombreDecimal(zone.value,nbEntier,nbDec))

		{
          alert(msgSaisieNumerique + ' ' + nbEntier + '.' + nbDec);
          MettreFocus(std_getReference("idOnglet"+zone.getAttribute("ONGLET")),nbOnglets);	 
          std_setElementActif(zone);
          return false;
        }
      }
      // Date
      if (std_compareIgnoreCase(zone.getAttribute("GENRE"),"DATE") && (std_trim(zone.value) != ""))
      {
		if (!std_verifierDate(zone.value))
		{
          alert(msgSaisieDate);
          MettreFocus(std_getReference("idOnglet"+zone.getAttribute("ONGLET")),nbOnglets);	 
          std_setElementActif(zone);
          return false;
		}
      }
      // Heure
      if (std_compareIgnoreCase(zone.getAttribute("GENRE"),"HEURE")  && (std_trim(zone.value) != ""))
      {
        if (!std_verifierHeure(zone.value))
		{
          alert(msgSaisieHeure);
          MettreFocus(std_getReference("idOnglet"+zone.getAttribute("ONGLET")),nbOnglets);	 
          std_setElementActif(zone);
          return false;
        }
      }
	  
    } // Fin si INPUT

    // Si SELECT
    if (zone.tagName.toUpperCase() == "SELECT")
    {
      //Saisie obligatoire
      if (std_compareIgnoreCase(zone.getAttribute("OBLIGATOIRE"),"OUI"))
      {
		if (!std_verifierChampObligatoire_Onglet(zone,msgObligatoire,zone.getAttribute("ONGLET"),nbOnglets))
		{
		  return false;
        }
      }
    }
  
    // Si TextArea
    if (zone.tagName.toUpperCase() == "TEXTAREA")
    {
      // Saisie obligatoire
      if (std_compareIgnoreCase(zone.getAttribute("OBLIGATOIRE"),"OUI"))
      {
		if (!std_verifierChampObligatoire_Onglet(zone,msgObligatoire,zone.getAttribute("ONGLET"),nbOnglets))
		{
		  return false;
        }
      }
    }
	
  } // Fin pour tous les éléments du formulaire

  return true;
}

function std_compareIgnoreCase(text1,text2)
{
	if ((text1 != null) && (text2 != null))
	{
		return (text1.toUpperCase() == text2.toUpperCase());
	}
	else // au moins un texte est null, ne retourne vrai que si les deux textes sont null

	{
		return (text1 == text2);
	}
	
}

function std_getRadioValue(radio)
{
  for (i=0; i<radio.length; i++)
  {
    if (radio[i].checked)
    {
      return radio[i].value;
    }   
  }
  return ""; 
}

//Utilisé pour cocher/decocher des cases représentées par des checkbox
//refTableau : référence du tableau
//posColonne : index de la colonne
//posLigneDepart : index de la première ligne concernée
// aFaire = '0' pour tout décocher
// aFaire = '1' pour tout cocher
// aFaire = '2' pour inverser la sélection
function std_selectionCbxColonne(refTableau, posColonne, posLigneDepart, aFaire)
{
    for(var numLigne=posLigneDepart; numLigne < refTableau.rows.length; numLigne++)
    {
        var row = refTableau.rows[numLigne];
        var colonnes = row.getElementsByTagName("td");
        var cellule = colonnes[posColonne];
        var cbx = cellule.getElementsByTagName('input');
        for(var i=0; i < cbx.length; i++)
		{
		    if (cbx[i].getAttribute("type")=="checkbox")
	        {
	            var bool = (aFaire=='0') ? false : (aFaire=='1') ?	true :(cbx[i].checked) ? false:true;
		        cbx[i].checked = bool;
			}
		}
    }
}
//Utilisé pour cocher/decocher des cases représentées par des images
//refTableau : référence du tableau
//posColonne : index de la colonne
//posLigneDepart : index de la première ligne concernée
// aFaire = '0' pour tout décocher
// aFaire = '1' pour tout cocher
// aFaire = '2' pour inverser la sélection
function std_selectionImageColonne(refTableau, posColonne, posLigneDepart, aFaire)
{
    for(var numLigne=posLigneDepart; numLigne < refTableau.rows.length; numLigne++)
    {
        var row = refTableau.rows[numLigne];
        var colonnes = row.getElementsByTagName("td");
        var cellule = colonnes[posColonne];
        var bool = false;
        //traitement des champs cachés
        var hidden = cellule.getElementsByTagName('input');
        // 1er champ hidden = valeur de l'élément (position 0)
    	// 2è champ hidden = sélectionné ou non (position 1)
        if(hidden.length > 0)
		{
			if (hidden[1].getAttribute("type")=="hidden")
	        {
	            bool = (aFaire=='0') ? false : (aFaire=='1') ?	true :(hidden[1].value=="true") ? false:true;
	            //alert("valeur champ "+hidden[0].value+" " + numLigne + "-" + posColonne + " " + hidden[1].value + " --> " + (hidden[1].value=="true") + "-->" + bool);
		        hidden[1].value = bool;
			}
		}
		//traitement des images
		var img = cellule.getElementsByTagName('img');
		for(var i=0; i < img.length; i++)
		{
		    if(bool)
		    {
		    	img[i].src = "/iwgp-ressources/images/coche.gif";
		    }
		    else
		    {
				img[i].src = "/iwgp-ressources/images/decoche.gif";
		    }
		    //alert("src champ image " + img[i].src + " " + bool);
		}
    }
}

//Utilisé pour cocher/decocher une case représentée par une images
//refTableau : référence du tableau
//numLigne : indice de la ligne de la cellule concernée
//numColonne : indice de la colonne de la cellule concernée
function std_selectionChange(refTableau,numLigne,numColonne)
{
	var row = refTableau.rows[numLigne];
    var colonnes = row.getElementsByTagName("td");
    var cellule = colonnes[numColonne];
    var bool = false;
    //traitement des champs cachés
    var hidden = cellule.getElementsByTagName('input');
    // 1er champ hidden = valeur de l'élément
    // 2è champ hidden = sélectionné ou non
    
    /*for(var i=0; i < hidden.length; i++)
	{*/
	    if (hidden[1].getAttribute("type")=="hidden")
        {
            bool = (hidden[1].value=="true") ? false:true;
            //alert("valeur champ hidden " + bool);
	        hidden[1].value = bool;
		}
	/*}*/
	//traitement des images
	var img = cellule.getElementsByTagName('img');
	for(var i=0; i < img.length; i++)
	{
	    if(bool)
	    {
			img[i].src = baseRessource + "/images/coche.gif";
	    }
	    else
	    {
	    	img[i].src = baseRessource + "/images/decoche.gif";
	    }
	    //alert("src champ image " + img[i].src + " " + bool);
	}
}
// --------------------------------------------------------------------------------------------------------------

