//* FILE **********************************************************************
//*                                                                          **
//* NAME: checkModifs.js                                                     **
//*                                                                          **
//* GOAL: Detecte les changements effectuées sur un formulaire               **
//*                                                                          **
//* FILE **********************************************************************

//* FUNCTION ******************************************************************
//*                                                                          **
//* NAME: checkAbandonModifs                                                 **
//* GOAL: Si modifs détectées, demande confirmation d'abandon                **
//*       Renvoie true si pas de modifs ou si abandon                        **
//*                                                                          **
//***************************************************************** FUNCTION **

var champsSurveilles = new Array();
var formNonSurveille = false; // form qui ne doit plus etre surveille, car le user accepte la perte des modif ou car il veut le sauvegarder justement
var abandonTouteModifs = false;

//* CLASS *********************************************************************
//*                                                                          **
//* NAME: champSurveille                                                     **
//* GOAL: Objet correspondant à un champ sous surveillance                   **
//*                                                                          **
//******************************************************************** CLASS **
function champSurveille(pForm, pNomChamp, pLibelleChamp)
{
  this.form = pForm;
  this.nomChamp = pNomChamp;
  this.libelleChamp = pLibelleChamp;
  
  this.valeurInitiale = GetInputValue(this.form, this.nomChamp);

  this.isModifie = _isModifie;
  return this;
} // champSurveille

/* Renvoie true si ce champ a été modifié */
function _isModifie()
{
  return GetInputValue(this.form, this.nomChamp) != this.valeurInitiale;
}

//* FUNCTION ******************************************************************
//*                                                                          **
//* NAME: addChampSurveille                                                  **
//* GOAL: Met le champ sous surveillance                                     **
//*                                                                          **
//***************************************************************** FUNCTION **
function addChampSurveille(pForm, pNomChamp, pLibelleChamp)
{
  champsSurveilles.push(new champSurveille(pForm, pNomChamp, pLibelleChamp));
} // addChampSurveille

//* FUNCTION ******************************************************************
//*                                                                          **
//* NAME: getChampsModifies                                                  **
//* GOAL: Renvoie une chaine décrivant les modifications, ou '' si aucune    **
//*       Ne teste pas les champs du formulaire formExclu                    **
//*                                                                          **
//***************************************************************** FUNCTION **
function getChampsModifies(formExclu)
{
  var modifs = '';
  var nbChamps = champsSurveilles.length;
  var cs;
  
  for (var i = 0; i < nbChamps; i++)
  {
    cs = champsSurveilles[i];
    if (formExclu && cs.form == formExclu)
    {
    }
    else if (cs.isModifie())
    {
      modifs += (modifs==''?'':', ') + cs.libelleChamp;
    }
  }
  return modifs;
  
} // getChampsModifies

//* FUNCTION ******************************************************************
//*                                                                          **
//* NAME: checkAbandonModifs                                                 **
//* GOAL: Renvoie true si pas de modifs ou abandon des changements           **
//*       Si formExclu est spécifie, ne teste pas les champs de ce Form      **
//*                                                                          **
//***************************************************************** FUNCTION **
function checkAbandonModifs(formExclu)
{
  var modifs = getChampsModifies(formExclu);
  if (modifs != '')
  {
    abandonModifs = confirm('Vous avez modifié les champs suivants ('+ modifs +')\n\nSi vous souhaitez ignorer vos changement cliquez sur Ok.\nSinon cliquez sur Annuler, puis cliquez sur le bouton pour enregistrer vos changements.');
    if (abandonModifs)
    {
      abandonTouteModifs = true;
    }
    return abandonModifs;
  }
  else
  {
    return true;
  }
} // checkAbandonModifs

//* FUNCTION ******************************************************************
//*                                                                          **
//* NAME: checkModifsPerdues                                                 **
//* GOAL: Affiche une alerte et renvoie true si des modifs ont été perdues   **
//*       A appeler sur onunload de la page                                  **
//*                                                                          **
//***************************************************************** FUNCTION **
function checkModifsPerdues()
{
  if (abandonTouteModifs)
    return false;

  var modifs = getChampsModifies(formNonSurveille);
  if (modifs != '')
  {
    alert('Attention !\nVous avez quitté la page sans sauvegarder les champs suivants ('+ modifs +')\n');
    return true;
  }
  else
  {
    return false;
  }
} // checkModifsPerdues


