/***************************************************************************
 * Système de gestion des arbitres de volleyball
 * Auteur: Alain Lafaille - DATE: Avril 2005 - LANGAGES: PHP, JavaScript, HTML
 * ============================================================================
 * Contient différentes fonctions Javascript utilisées dans les pages du site.
 * Doit obligatoirement être incluse dans une autre page.
 ***************************************************************************/

var txt_debug = '';        // Variable utile pour la trace de debug
var gl_page_ferme = "1";
var gl_page_nom = "";
var CDB_message = "Click droit de la souris désactivé!";
var MSG_affiche = true;
var winARB;
var gl_parm;      // Paramètre global pour passer à une fonction
var gl_msg_fermeture = false;   // Permet de savoir si on affich ou non un message d'evartissement à la fermeture de la fenêtre
 
var browserType;
if (document.layers) 
{  browserType = "nn4"; }
if (document.all) 
{  browserType = "ie";  }
if (window.navigator.userAgent.toLowerCase().match("gecko")) 
{  browserType= "gecko";   }
var IE4 = false;
if (document.all) 
{  IE4 = true; }

/*
//-----------------------------------------------------------
// Désactivation du click droit de la souris pour Explorer
//-----------------------------------------------------------
function clickIE4()
{  if (event.button==2)
   {  window.status=CDB_message; // CDB_message défini global
      return false;
   }
   window.status="";
   return true;
}

//-----------------------------------------------------------
// Désactivation du click droit de la souris pour Netscape
//-----------------------------------------------------------
function clickNS4(e)
{  if (document.layers||document.getElementById&&!document.all)
   {  if (e.which==2||e.which==3)
      {  window.status=CDB_message; // CDB_message défini global
         return false;
      }
   }
   window.status="";
   return true;
}

//-----------------------------------------------------------
// Début de la gestion du click droit de la souris

if (document.layers)
{  document.captureEvents(Event.MOUSEDOWN);
   document.onmousedown=clickNS4;
}
else if (document.all&&!document.getElementById)
{  document.onmousedown=clickIE4;
}
document.oncontextmenu=new Function("window.status=CDB_message;return false;") // CDB_message défini global

// Fin de la gestion du click droit de la souris
//-----------------------------------------------------------
*/

//-----------------------------------------------------------
// Fonction pour mettre le focus sur le premier élément d'une page de saisie
//-----------------------------------------------------------
function JS_FonctionOnLoad(premier)
{  // On se positionne sur le premier élément
   if (document.forms.length > 0 && premier === 'oui')
   {  var field = document.forms[0];
      for (var i = 0; i < field.length; i++)
      {  var abc=1;
         if (field.elements[i].disabled === false && field.elements[i].readOnly === false && ((field.elements[i].type === "text") || (field.elements[i].type === "textarea") || (field.elements[i].type === "password") || (field.elements[i].type.toString().charAt(0) === "s")))
         {  document.forms[0].elements[i].focus();
            var abc=1;
            break;
         }
      }
   }

   // Si nous avons une zone divVar, nous replaçons l'écran à la position qu'il avait avant d'aller ailleurs
   if (document.getElementById('divVar'))
   {  JS_chgSize();  // Ajustement de la hauteur de l'écran
      var valNav = JS_get_URL_Parm('nav');
      if (valNav !== '~')
      {  var valScroll = JS_readCookie("NAV" + valNav);
         if (valScroll !== null)
         {  document.getElementById('divVar').scrollTop = valScroll;
         }
      }
   }
}

//-----------------------------------------------------------
// Ouverture d'une lightbox
//-----------------------------------------------------------
function OpenLightBox(BoxName) 
{  var box = document.getElementById(BoxName);
   document.getElementById('LightBoxWin').style.display='block';

//   var btitle = document.getElementById('boxtitle');
//   btitle.innerHTML = formtitle;
   box.style.display='block';
}


//-----------------------------------------------------------
// Fermeture d'une lightbox
//-----------------------------------------------------------
function CloseLightBox()
{  var frm_el = document.getElementsByTagName('DIV');
   var frm_ln = frm_el.length;
   for (var i = 0;i < frm_ln;i++)
   {  if (frm_el[i].className === 'LightBox')
      {  frm_el[i].style.display='none';
      }
   }
   document.getElementById('LightBoxWin').style.display='none';
}

//-----------------------------------------------------------
// Fonction Pour afficher une nouvelle boîte d'alerte, à la sauce VB
// VB_makeMsgBox doit être défini dans du VBScript
//-----------------------------------------------------------
function JS_NewAlert(p_title, p_mess, p_icon, p_mods)
{  if (IE4) // IE4 défini global
   {  VB_makeMsgBox(p_title,p_mess,p_icon,0,0,p_mods);
   }
   else
   {  alert(p_mess);
   }
}

//-----------------------------------------------------------
// Fonction Pour afficher une nouvelle boîte de confirmation, à la sauce VB
// VB_makeMsgBox doit être défini dans du VBScript
//-----------------------------------------------------------
function JS_NewConfirm(p_title, p_mess, p_icon, p_defbut, p_mods)
{  var retVal;
   var p_retVal;
   if (IE4) // IE4 défini global
   {  p_icon = (p_icon === 0) ? 0 : 2;
      p_defbut = (p_defbut === 0) ? 0 : 1;
      p_retVal = VB_makeMsgBox(p_title,p_mess,p_icon,4,p_defbut,p_mods);
      retVal = (p_retVal === 6);
   }
   else
   {  retVal = confirm(p_mess);
   }
   return retVal;
}

//-----------------------------------------------------------
// Fonction pour désactiver un bouton qu'on vient de cliquer, pour éviter un double click
//-----------------------------------------------------------
function JS_BoutonOff(p_ele)
{  // On commence par désactiver le bouton pressé
   if (document.all || document.getElementById) // Netscape 6.0+ and Internet Explorer 5.0+
   {  p_ele.style.display = "none";
   }
   else if (document.layers) // Netscape 4.0+
   {  p_ele.display = "none";
   }

   // On fait ensuite le tour de tous les boutons pour les désactiver
   var frm_el = p_ele.form.elements;
   var frm_ln = frm_el.length;
   for (var i = 0;i < frm_ln;i++)
   {  if (frm_el[i].type === "submit" || frm_el[i].type === "button")
      {  if (document.all || document.getElementById) // Netscape 6.0+ and Internet Explorer 5.0+
         {  frm_el[i].style.display = "none";
         }
         else if (document.layers) // Netscape 4.0+
         {  frm_el[i].display = "none";
         }
      }
   }
}

//-----------------------------------------------------------
// Fonction pour accéder une page
// Peut être utilisé sur un événement "onchange" d'un élément "select"
//-----------------------------------------------------------
function JS_OpenAdrsURL(p_adrsBase, p_adrsURL, p_adrsParam)
{  if (p_adrsURL)
   {  window.location.href=p_adrsBase + "/" + p_adrsURL + p_adrsParam;
   }
}

//-----------------------------------------------------------
// Fonction pour ouvrir une nouvelle page
//-----------------------------------------------------------
function JS_OuvrirPage(p_url)
{  window.location.href=p_url;
   return true;
}

//-----------------------------------------------------------
// Fonction pour ouvrir une page dans une nouvelle fenêtre
//-----------------------------------------------------------
function JS_openWindow(p_url, p_name, p_scroll, p_top, p_left, p_width, p_height)
{  var wWidth;
   var wHeight;
   var winARB;
   if ((p_width === 0) && (p_height === 0))
   {  winARB = window.open(p_url, p_name, 'toolbar=no,location=no,directories=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes');
   }
   else 
   {  if (screen.availWidth > p_width)
      {  wWidth = p_width;
      }
      else
      {  wWidth = screen.availWidth;
      }
      if (screen.availHeight > p_height)
      {  wHeight = p_height;
      }
      else
      {  wHeight = screen.availHeight;
      }
      winARB = window.open(p_url, p_name, 'width=1024,height=' + screen.availHeight + ',left=0,top=0,toolbar=no,location=no,directories=no,status=no,menubar=yes,scrollbars=yes,resizable=yes');
   }
   winARB.focus();
   gl_page_nom = p_name;  // gl_page_nom défini global
}

//-----------------------------------------------------------
// Fonction pour fermer une page ouverte dans une fenêtre
//-----------------------------------------------------------
function JS_FermerPage(p_name)
{  gl_page_ferme = "0"; // gl_page_ferme défini global
   window.location.href = p_name;
}

//-----------------------------------------------------------
// Fonction pour gérer l'affichage de la zone de transport
//-----------------------------------------------------------
function JS_TMajAC_Click_trans()
{  if (document.getElementById('divTransport'))
   {  var docDivTrans = document.getElementById('divTransport');
      if (document.CompleterForm.chk_trans.checked == true)
      {  docDivTrans.style.display = 'block';
         document.CompleterForm.txt_msg_trans.readOnly = false;
         document.CompleterForm.txt_msg_trans.className = 'editCourier';
         document.CompleterForm.txt_msg_trans.focus();
      }
      else
      {document.CompleterForm.txt_msg_trans.readOnly = true;
         document.CompleterForm.txt_msg_trans.className = 'readCourier';
         docDivTrans.style.display = 'none';
      }
   }
}

//-----------------------------------------------------------
// Fonction pour faire varier les images dans l'affectation
//-----------------------------------------------------------
function JS_ToggleAffct(p_img, p_form, p_el)
{  if (p_img.name.substr(0,9) === "affct_nul")
   {  p_img.name = "affct_oui";
      p_img.src = document.forms[p_form].elements['img_affect_oui'].value;
      p_img.alt = document.forms[p_form].elements['libl_Candidat_retenue'].value;
      p_img.title = document.forms[p_form].elements['libl_Candidat_retenue'].value;
      document.forms[p_form].elements[p_el].value = '1';
   }
   else
   {  if (p_img.name.substr(0,9) === "affct_oui")
      {  p_img.name = "affct_non";
         p_img.src = document.forms[p_form].elements['img_affect_non'].value;
         p_img.alt = document.forms[p_form].elements['libl_Candidat_non_ret'].value;
         p_img.title = document.forms[p_form].elements['libl_Candidat_non_ret'].value;
         document.forms[p_form].elements[p_el].value = '0';
      }
      else
      {  if (p_img.name.substr(0,9) === "affct_non")
         {  p_img.name = "affct_null";
            p_img.src = document.forms[p_form].elements['img_affect_null'].value;
            p_img.alt = document.forms[p_form].elements['libl_Affect_non_effec'].value;
            p_img.title = document.forms[p_form].elements['libl_Affect_non_effec'].value;
            document.forms[p_form].elements[p_el].value = '2';
         }
      }
   }
}

//-----------------------------------------------------------
// Fonction pour enabler ou disabler plusieurs cases à cocher dans l'écran de gestion des responsabilités
// frm = nom de la forme dans laquelle on travail
// p_etat = valeur du checkbox (cochée, non cochée)
// p_nom = nom de la variable cochée ou décochée. Utile pour savoir dans quelle colonne on travail.
//-----------------------------------------------------------
function JS_PMajSA_Toggle_chk_respons(p_etat, p_nom, p_msg)
{  var in_niv;
   var no;
   var nom_comp;
   if (p_nom === "chk_respn_arbtr")
   {  in_niv = document.getElementsByTagName('INPUT');
      for(no=0;no<in_niv.length;no++)
      {  if (in_niv[no].type === "checkbox" &&
             in_niv[no].name.substr(0,13) === 'chk_region___')
         {  in_niv[no].checked = false;
         }
      }
      if (MSG_affiche) // MSG_affiche défini global
      {  JS_NewAlert("Attention",p_msg,3,1);
         MSG_affiche = false; // MSG_affiche défini global
      }
   }
   else
   {  p_etat_resp = false;
      in_niv = document.getElementsByTagName('INPUT');
      for(no=0;no<in_niv.length;no++)
      {  if (in_niv[no].type === "checkbox" && in_niv[no].name === "chk_respn_arbtr")
         {  p_etat_resp = in_niv[no].checked;
            break;
         }
      }
      if (p_etat_resp === true)
      {  nom_comp = p_nom.substr(0,17);
         for(no=0;no<in_niv.length;no++)
         {  if (in_niv[no].type === "checkbox" && in_niv[no].name.substr(0,17) === nom_comp)
            {  in_niv[no].checked = p_etat;
            }
         }
      }
   }
}

//-----------------------------------------------------------
// Fonction pour cocher ou décocher plusieurs cases à cocher
// frm = nom de la forme dans laquelle on travail
// p_etat = valeur à mettre dans la checkbox (cochée, non cochée)
// code = suffixe des variables à rechercher. TOUS pour toutes les cases à cocher
// excl = code à exclure lorsque "code" est à "TOUS"
//-----------------------------------------------------------
function JS_ToggleCheckbox(p_frm, p_etat, p_code, p_excl, p_longueur)
{  var frm_el = p_frm.elements;
   var frm_ln = frm_el.length;
   var str_test = "chkbox___" + p_code;
   var str_excl = "chkbox___XXX";
   var val_long = 12;
   if (p_excl !== null)
   {  str_excl = "chkbox___" + p_excl;
   }
   if (p_longueur !== null)
   {  val_long = p_longueur;
   }

   for (var i = 0;i < frm_ln;i++)
   {  if (frm_el[i].type === "checkbox" && frm_el[i].name.substr(0,9) === "chkbox___")
      {  if (frm_el[i].name.substr(0,val_long) !== str_excl && (p_code === "TOUS" || frm_el[i].name.substr(0,val_long) === str_test))
         {  frm_el[i].checked = p_etat;
         }
      }
   }
}

//-----------------------------------------------------------
// Fonction pour enabler ou disabler plusieurs cases à cocher dans l'écran de gestion de fusion des arbitres en double
// p_etat = valeur du checkbox (cochée, non cochée)
// p_frm = nom de la forme dans laquelle on travail
//-----------------------------------------------------------
function JS_Fusion_Toggle_chk(p_etat, p_id)
{  var chx, no;
   chx = document.getElementsByTagName('INPUT');
	for(no=0;no<chx.length;no++)
   {  if (chx[no].type === "radio" && chx[no].id === p_id)
      {  chx[no].checked = p_etat;
      }
   }
}

//-----------------------------------------------------------
// Fonction pour cocher ou décocher plusieurs cases à cocher
//-----------------------------------------------------------
function JS_VerifierCheckbox(p_frm, p_etat, p_code)
{  var frm_el = p_frm.elements;
   var frm_ln = frm_el.length;
   if (p_etat === false)
   {  for (var i = 0;i < frm_ln;i++)
      {  if (frm_el[i].name === p_code)
         {  frm_el[i].checked = false;
            break;
         }
      }
   }
}

//-----------------------------------------------------------
// Pour contourner la contrainte des 200 POST
// Construction d'une chaîne émulant un tableau de checkbox
// La chaîne sera postée au lieu des nombreux checkbox, qui seront décochés
//-----------------------------------------------------------
function JS_Build_arr_checkbox(p_form, p_elem, p_prefixe)
{  var frm_el = p_form.elements;
   var frm_ln = p_form.length;
   var prefixe_len = p_prefixe.length;
   var txt_checkbox = '';
   var pointVirgul = '';
   for (var i = 0;i < frm_ln;i++)
   {  if (frm_el[i].type === "checkbox" &&
          frm_el[i].checked === true    &&
          frm_el[i].name.substr(0,prefixe_len) === p_prefixe)
      {  frm_el[i].checked = false;
         txt_checkbox += pointVirgul + frm_el[i].name + '¦' + frm_el[i].value;
         pointVirgul = ';';
      }
   }

   p_form.elements[p_elem].value = txt_checkbox;
}

//-----------------------------------------------------------
// Pour contourner la contrainte des 200 POST
// Construction d'une chaîne émulant un tableau d'éléments
// La chaîne sera postée au lieu des nombreux éléments, qui seront simplement désactivés
//-----------------------------------------------------------
function JS_Build_arr_elements(p_form, p_elem)
{  var frm_el = p_form.elements;
   var frm_ln = p_form.length;
   var txt_elements = '';
   var pointVirgul = '';
   for (var i = 0;i < frm_ln;i++)
   {  if (frm_el[i].name && frm_el[i].name.indexOf("___") > -1)
      {  txt_elements += pointVirgul + frm_el[i].name + '¦' + frm_el[i].value + ';';
         frm_el[i].disabled = true;
         pointVirgul = ';';
      }
   }
   p_form.elements[p_elem].value = txt_elements;
}

//-----------------------------------------------------------
// Fonction pour vérifier si une case spécifique est cochée dans la fenêtre.
// Si oui, on ne fait rien d'autre
// Si non, on demande une confirmation à l'utilisateur pour savoir si on doit la cocher ou non
//-----------------------------------------------------------
function JS_VerifDeclr(p_chk_el, p_msg, p_chk_val)
{  if (p_chk_el.checked === p_chk_val)
   {  JS_NewAlert('Confirmation', p_msg, 3, 1);
   }
   return true;
}

//-----------------------------------------------------------
// Fonction pour vérifier si une case spécifique est cochée dans la fenêtre.
// Si oui, on ne fait rien d'autre
// Si non, on demande une confirmation à l'utilisateur pour savoir si on doit la cocher ou non
//-----------------------------------------------------------
function JS_VerifPayeSurPlace(p_msg)
{  var i = 0;
   var chk_el = document.ParamTarifForm.chk_ind_paye_sur_place;
   var frm_el = document.ParamTarifForm.elements;
   var frm_ln = frm_el.length;

   if (chk_el.checked === true)
   {  if (JS_NewConfirm("Confirmation", p_msg, 1, 1, 1))
      {  for (i = 0;i < frm_ln;i++)
         {  if (frm_el[i].type === "text" &&
                frm_el[i].name !== "txt_cod_tarif" &&
                frm_el[i].name !== "txt_descr_tarif" &&
                frm_el[i].name !== "txt_dat_deb_tarif" &&
                frm_el[i].name !== "txt_dat_fin_tarif")
            {  frm_el[i].value = 0;
               frm_el[i].disabled = true;
            }
         }
      }
      else
      {  chk_el.checked = false;
         chk_el.value = 0;
      }
   }
   else
   {  for (i = 0;i < frm_ln;i++)
      {  if (frm_el[i].type === "text" &&
             frm_el[i].name !== "txt_cod_tarif" &&
             frm_el[i].name !== "txt_descr_tarif" &&
             frm_el[i].name !== "txt_dat_deb_tarif" &&
             frm_el[i].name !== "txt_dat_fin_tarif")
         {  frm_el[i].disabled = false;
         }
      }
   }
   return true;
}

function JS_displayRecalc(p_form, p_libl)
{  Tip(gl_parm);
   return true;
}

//-----------------------------------------------------------
// Fonction pour calculer le total d'un arbitre suite à un changement dans la page
//-----------------------------------------------------------
function JS_EffaceTotal(p_form, p_no, p_eff)
{  document.forms[p_form].elements["txt_mnt_total___" + p_no].value = '- ??? -';
   if (document.forms[p_form].elements["txt_mnt_client___" + p_no])
   {  document.forms[p_form].elements["txt_mnt_client___" + p_no].value = '- ??? -';
   }
   var alinks = document.getElementsByTagName('A');
   gl_parm = document.forms[p_form].elements["tt_recalculer"].value + '...';
   var voir = document.forms[p_form].elements["tt_voir"].value;
   for (var i=0; i<alinks.length; i++)
   {  if (alinks[i].innerHTML == voir)
      {  //if IE
         if(!window.event)
         {  alinks[i].addEventListener('mouseover',JS_displayRecalc,false);
         }
         else
         {  alinks[i].attachEvent('onmouseover',JS_displayRecalc);
         }
         alinks[i].innerHTML = '(' + gl_parm + ')';
      }
   }
}

//---------------------------------------------------------------------------------
// Fonction pour calculer le total du paiement d'un arbitre selon les cases cochées
//---------------------------------------------------------------------------------
function JS_Paiement_CalculTotal(p_frm)
{  var i, num, nom_honor, nom_trans, nom_contb, nom_remb, total_tourn, mnt_cheque;
   var sstot_honor = 0.00;
   var sstot_remb = 0.00;
   var sstot_trans = 0.00;
   var sstot_contb_honor = 0.00;
   var sstot_corrc = 0.00;
   var sstot_contb_corrc = 0.00;
   var total_corrc = 0.00;
   var frm_el = p_frm.elements;
   var frm_ln = frm_el.length;
   for (i = 0;i < frm_ln;i++)
   {  if (frm_el[i].type === "checkbox" && frm_el[i].name.substr(0,9) === "chkbox___")
      {  if (frm_el[i].checked === true)
         {  num = frm_el[i].name.substr(9);
            nom_honor = 'mnt_honor___' + num;
            nom_trans = 'mnt_trans___' + num;
            nom_contb = 'pct_contb___' + num;
            nom_remb = 'mnt_remb___' + num;
            sstot_honor += frm_el[i].getAttribute(nom_honor) * 1.00;
            sstot_trans += frm_el[i].getAttribute(nom_trans) * 1.00;
            sstot_contb_honor += Math.round((frm_el[i].getAttribute(nom_honor) * frm_el[i].getAttribute(nom_contb)) + 0.49) / 100.00;
            if (frm_el[i].getAttribute(nom_remb) !== "---")
            {  sstot_remb  += frm_el[i].getAttribute(nom_remb) * 1.00;
            }
         }
      }
   }
   total_tourn = (sstot_honor + sstot_remb + sstot_trans - sstot_contb_honor) * 1.00;
   
   for (i = 1;i <= 5;i++)
   {  sstot_corrc += frm_el["txt_mnt_corrc___" + i].value * 1.00;
      sstot_contb_corrc += Math.round((frm_el["txt_mnt_corrc___" + i].value * frm_el["txt_pct_corrc___" + i].value) + 0.49) / 100.00;
   }
   total_corrc = (sstot_corrc - sstot_contb_corrc) * 1.00;
   
   mnt_cheque = (total_tourn + total_corrc) * 1.00;

   if (total_corrc.toFixed) //if browser supports toFixed() method
   {  document.getElementById("txt_ss_total_honrr").innerText  = sstot_honor.toFixed(2) + ' $';
      document.getElementById("txt_ss_total_remb").innerText   = sstot_remb.toFixed(2) + ' $';
      document.getElementById("txt_ss_total_trans").innerText  = sstot_trans.toFixed(2) + ' $';
      document.getElementById("txt_contb_honrr").innerText     = sstot_contb_honor.toFixed(2) + ' $';
      document.getElementById("txt_total_tourn").innerText     = total_tourn.toFixed(2) + ' $';
      document.getElementById("txt_ss_total_corrc").innerText  = sstot_corrc.toFixed(2) + ' $';
      document.getElementById("txt_contb_corrc").innerText     = sstot_contb_corrc.toFixed(2) + ' $';
      document.getElementById("txt_total_corrc").innerText     = total_corrc.toFixed(2) + ' $';
      document.getElementById("txt_mnt_chequ").innerText       = mnt_cheque.toFixed(2) + ' $';
   }
   else
   {  document.getElementById("txt_ss_total_honrr").innerText  = (sstot_honor * 1.00) + ' $';
      document.getElementById("txt_ss_total_remb").innerText   = (sstot_remb * 1.00) + ' $';
      document.getElementById("txt_ss_total_trans").innerText  = (sstot_trans * 1.00) + ' $';
      document.getElementById("txt_contb_honrr").innerText     = (sstot_contb_honor * 1.00) + ' $';
      document.getElementById("txt_total_tourn").innerText     = (total_tourn * 1.00) + ' $';
      document.getElementById("txt_ss_total_corrc").innerText  = (sstot_corrc * 1.00) + ' $';
      document.getElementById("txt_contb_corrc").innerText     = (sstot_contb_corrc * 1.00) + ' $';
      document.getElementById("txt_total_corrc").innerText     = (total_corrc * 1.00) + ' $';
      document.getElementById("txt_mnt_chequ").innerText       = (mnt_cheque * 1.00) + ' $';
   }
   frm_el["txt_contb_honrr"].value = sstot_contb_honor;
   frm_el["txt_mnt_chequ"].value = mnt_cheque;
}

//-----------------------------------------------------------
// Fonction pour afficher ou non des parties de l'écran
// La fonction attend un minimum de 2 arguments :
// - Premier (p_checked) = Vrai ou Faux pour savoir si on affiche ou non les blocks
// - Second et suivants (p_nom) = noms des blocks
//-----------------------------------------------------------
function JS_ToggleBlock()
{  var valVisibility;
   var valDisplay;
   var p_checked = arguments[0];
   if (p_checked === true)
   {  valVisibility = "visible";
      valDisplay = "block";
   }
   else
   {  valVisibility = "hidden";
      valDisplay = "none";
   }

   for (var i = 1; i < arguments.length; i++)
   {  var p_nom = arguments[i];
      if (document.layers && document.layers[p_nom]) // Netscape 4.0+
      {  document.layers[p_nom].visibility = valVisibility;
         document.layers[p_nom].display = valDisplay;
      }
      else if (document.getElementById && document.getElementById(p_nom)) // Netscape 6.0+ and Internet Explorer 5.0+
      {  document.getElementById(p_nom).style.visibility = valVisibility;
         document.getElementById(p_nom).style.display = valDisplay;
      }
      else if (document.all && document.all[p_nom])
      {  document.all[p_nom].style.visibility = valVisibility;
         document.all[p_nom].style.display = valDisplay;
      }
   }
}

//-----------------------------------------------------------
// Fonction pour activer/désactiver des parties de l'écran
// La fonction attend un minimum de 2 arguments :
// - Premier (p_checked) = Vrai ou Faux pour savoir si on active ou désactive
// - Second et suivants (p_nom) = noms des éléments
//-----------------------------------------------------------
function JS_ToggleEnable()
{  var valDisable;
   var p_checked = arguments[0];
   if (p_checked === true)
   {  valDisable = false;
   }
   else
   {  valDisable = true;
   }

   for (var i = 1; i < arguments.length; i++)
   {  var p_nom = arguments[i];
      if (document.layers && document.layers[p_nom]) // Netscape 4.0+
      {  document.layers[p_nom].disabled = !p_checked;
         document.layers[p_nom].readOnly = !p_checked;
      }
      else if (document.getElementById && document.getElementById(p_nom)) // Netscape 6.0+ and Internet Explorer 5.0+
      {  document.getElementById(p_nom).disabled = !p_checked;
         document.getElementById(p_nom).readOnly = !p_checked;
      }
      else if (document.all && document.all[p_nom])
      {  document.all[p_nom].disabled = !p_checked;
         document.all[p_nom].readOnly = !p_checked;
      }
   }
}

//-----------------------------------------------------------
// Demande de confirmation pour enlever un tournoi ou une ligne de la facture
//-----------------------------------------------------------
function JS_FactureEffacer(p_titre, p_texte)
{  if (JS_NewConfirm(p_titre, p_texte, 1, 1, 1))
   {  gl_msg_fermeture = false;
      return true;
   }
   else
   {  return false;
   }
}

//-----------------------------------------------------------
// Fonction pour vérifier si la fermeture de l'écran de la facture est problématique ou non
//-----------------------------------------------------------
function JS_FermerFacture(p_msg)
{  if (gl_msg_fermeture === true)
   {  JS_NewAlert("*** ATTENTION ***", p_msg, 3, 1);
   }
}

//-----------------------------------------------------------
// Fonction pour activer/désactiver les boutons de destruction et de déplacement des courriels
// en fonction des cases cochées des courriels
//-----------------------------------------------------------
function JS_Courriel_Del_ToggleBouton(p_frm)
{  if (p_frm.oCmdDetruire1 && p_frm.oCmdDetruire2 && p_frm.oCmdDeplacer1 && p_frm.oCmdDeplacer2)
   {  var frm_el = p_frm.elements;
      var frm_ln = frm_el.length;
      var on_off = true;
      for (var i = 0;i < frm_ln;i++)
      {  if (frm_el[i].type === "checkbox" && frm_el[i].name != "chkbox___TOUS")
         {  if (frm_el[i].checked === true)
            {  on_off = false;
               break;   // Si au moins une case coché, on arrête
            }
         }
      }
      p_frm.oCmdDetruire1.disabled = on_off;
      p_frm.oCmdDetruire2.disabled = on_off;
      p_frm.oCmdDeplacer1.disabled = on_off;
      p_frm.oCmdDeplacer2.disabled = on_off;
   }
}

//-----------------------------------------------------------
// Fonction pour faire réagir les boutons de déplacement dans le menu contextuel de déplacement des courriels
//-----------------------------------------------------------
function JS_Courriel_HighLite(el, on_off)
{  if (on_off)
   {  el.className = 'MailLienDeplacerOver'; }
   else
   {  el.className = 'MailLienDeplacer';  }
}

//-----------------------------------------------------------
// Fonction pour ajuster le contenu des variables de déplacement des courriels avant de faire un submit de la form
//-----------------------------------------------------------
function JS_Courriel_Deplacer(el)
{  var no_depl = el.id.substr(7);
   {  document.forms['CommCourrielRecuForm'].elements['depl'].value = 'oui';
      document.forms['CommCourrielRecuForm'].elements['no_dossier'].value = no_depl;
      document.CommCourrielRecuForm.submit();
   }
//   JS_NewAlert("Attention",typd,3,1);
//   JS_NewAlert("Attention",typd_len,3,1);
//   JS_NewAlert("Attention",action,3,1);
}

//-----------------------------------------------------------
// Fonction pour développer/réduire la liste des récipiendaires d'un courriel
//-----------------------------------------------------------
function JS_Courriel_Aff_Liste(on_off)
{  if (on_off)
   {  document.getElementById('ControleFerme').style.display = "none";
      document.getElementById('ControleOuvert').style.display = "block";
      document.getElementById('ListeDest').className = "ListeOuverte";
   }
   else
   {  document.getElementById('ControleFerme').style.display = "block";
      document.getElementById('ControleOuvert').style.display = "none";
      document.getElementById('ListeDest').className = "ListeFermee";
   }
//   JS_NewAlert("Attention",document.getElementById('ControleFerme').style.display,3,1);
//   JS_NewAlert("Attention",document.getElementById('ControleOuvert').style.display,3,1);
}

function JS_InitNomDossier(noDoss, NomDoss)
{  document.forms['CommDossiersRenomForm'].elements['NoDossier'].value = noDoss;
   document.forms['CommDossiersRenomForm'].elements['NomDossier'].value = NomDoss;
   document.forms['CommDossiersRenomForm'].elements['txt_renommer'].value = NomDoss;
}

//-----------------------------------------------------------
// Fonction pour faire réagir les boutons d'encaissement et d'annulation des chèques
//-----------------------------------------------------------
function JS_Paiement_ToggleBouton(p_frm)
{  var frm_el = p_frm.elements;
   var frm_ln = frm_el.length;
   var bouton_on = false;
   for (var i = 0;i < frm_ln;i++)
   {  if (frm_el[i].type === "checkbox")
      {  if (frm_el[i].checked === true)
         {  bouton_on = true;
         }
      }
   }
   if (bouton_on === true)
   {  p_frm.oCmdEncaisse.disabled = false;
      p_frm.oCmdEncaisse.style.color = '#000'; // '#FFFFCC';
      p_frm.oCmdEncaisse.style.backgroundColor = '#FCB69E';
      p_frm.oCmdAnnule.disabled = false;
      p_frm.oCmdAnnule.style.color = '#D4DFE8'; // '#FFFFCC';
      p_frm.oCmdAnnule.style.backgroundColor = 'black';
   }
   else
   {  p_frm.oCmdEncaisse.disabled = true;
      p_frm.oCmdEncaisse.style.color = '';
      p_frm.oCmdEncaisse.style.backgroundColor = '';
      p_frm.oCmdAnnule.disabled = true;
      p_frm.oCmdAnnule.style.color = '';
      p_frm.oCmdAnnule.style.backgroundColor = '';
   }
}

//-----------------------------------------------------------
// Fonction pour ajouter la date et l'heure à la fin d'un texte
//-----------------------------------------------------------
function JS_Inserer_DH(p_frm, p_el)
{  var date, an, ms, jr, hre, min, sec, f_an, f_ms, f_jr, f_hre, f_min, f_sec;
   date = new Date();

   date = new Date();         // Créer l'objet date
   an = date.getFullYear();   // Année
   ms = date.getMonth() + 1;  // Mois (retourne 0 à 11)
   jr = date.getDate();       // Jour
   hre = date.getHours();     // Heure
   min = date.getMinutes();   // Minutes
   sec = date.getSeconds();   // Secondes
   if ( an < 1970 ) {an = an + 100;} // Correction du siècle
   // Convertion en caractères
   f_an = an + '';
   f_ms = ms + '';
   f_jr = jr + '';
   f_hre = hre + '';
   f_min = min + '';
   f_sec = sec + '';
   // Ajouter des zéros au début si nécessaire
   if (f_ms.length === 1 ) {f_ms = "0" + f_ms;}
   if (f_jr.length === 1 ) {f_jr = "0" + f_jr;}
   if (f_hre.length === 1 ) {f_hre = "0" + f_hre;}
   if (f_min.length === 1 ) {f_min = "0" + f_min;}
   if (f_sec.length === 1 ) {f_sec = "0" + f_sec;}
   // Si la chaîne n'est pas vide, insérer un saut de ligne
   if (document.forms[p_frm].elements[p_el].value !== "")
   {  document.forms[p_frm].elements[p_el].value += "\n\n";
   }
   // Insertion de la date et heure formatée
   document.forms[p_frm].elements[p_el].value += "[" + f_an + "-" + f_ms + "-" + f_jr + " " + f_hre + ":" + f_min + ":" + f_sec + "] ";
   document.forms[p_frm].elements[p_el].focus();
}

//-----------------------------------------------------------
// Fonction Pour afficher une nouvelle boîte de saisie de texte, à la sauce VB
// VB_makeInputBox doit être défini dans du VBScript
// title - Titre de la boîte de dialogue
// mess  - Message à afficher
// def   - Valeur par défaut à proposer dans le champ de saisie
//-----------------------------------------------------------
function JS_newPrompt(p_title,p_mess,p_def)
{  var retVal = (IE4) ? VB_makeInputBox(p_title,p_mess,p_def) : prompt(p_mess,p_def); // IE4 défini global
   return retVal;
}

//-----------------------------------------------------------
// Fonction Pour obtenir la position d'un objet
//-----------------------------------------------------------
function JS_findPos(obj)
{  var curTop = 0;
   if (obj.offsetParent)
   {  do
      {  curTop += obj.offsetTop;
      } while (obj === obj.offsetParent);
   }
   return curTop;
}

//-----------------------------------------------------------
// Fonction pour changer le format d'une zone contenue dans un div identifié 'divVar'
//-----------------------------------------------------------
function JS_chgSize()
{  if (document.getElementById('divVar'))
   {  var docDivVar = document.getElementById('divVar');
      var docPlatform = navigator.platform;
      docPlatform = docPlatform.toUpperCase();
      if (screen.height < 800 || docPlatform.indexOf("IPAD") > -1)
      {  docDivVar.style.height = 'auto';
      }
      else
      {  var finTop = JS_findPos(document.getElementById('divFin'));
         var winH = 0;
         var oldH = 0;
         var newH = 0;
         
         if (window.innerHeight)
         {  winH = window.innerHeight;}
         else if (document.documentElement && document.documentElement.clientHeight) 
         {  winH = document.documentElement.clientHeight;} 
         else if (document.body && document.body.clientHeight) 
         {  winH = document.body.clientHeight;}
         else if (document.body && document.body.offsetHeight) 
         {  winH = document.body.offsetHeight;}
         else 
         {  winH = 0;}
   
         var minH = 250;
         if (browserType === "ie")
         {  //oldH = parseInt(divVar.style.height);
            oldH = parseInt(docDivVar.offsetHeight, 10);
            newH = oldH + winH - finTop - 2;
            if (newH < minH) {newH = minH;}
//            divVar.style.height = newH + 'px';
            {  docDivVar.style.height = newH + 'px';}
         }
         else
         {  oldH = parseInt(docDivVar.offsetHeight, 10);
            newH = oldH + winH - finTop - 2;
            if (newH < minH) {newH = minH;}
            docDivVar.style.height = newH + 'px';
         }
         //alertH = oldH + winH - finTop - 2;
         //alert("newH = oldH + winH - finTop - 2 => " + newH + " => " + alertH + " = " + oldH + " + " + winH + " - " + finTop + "  - 2");
      }
   }
}

//-----------------------------------------------------------
// Fonction pour obtenir la valeur d'une variable contenue dans l'URL de la page
//-----------------------------------------------------------
function JS_get_URL_Parm(name)
{  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
   var regexS = "[\\?&]"+name+"=([^&#]*)";
   var regex = new RegExp(regexS);
   var results = regex.exec(window.location.href);
   if (results === null)
   {  return "~"; }
   else
   {  return results[1]; }
}

//-----------------------------------------------------------
// Fonction pour obtenir la largeur de la page
//-----------------------------------------------------------
function JS_clientWidth() 
{  return JS_filterResults(window.innerWidth ? window.innerWidth : 0,
                          document.documentElement ? document.documentElement.clientWidth : 0,
                          document.body ? document.body.clientWidth : 0);
}

//-----------------------------------------------------------
// Fonction pour obtenir la hauteur de la page
//-----------------------------------------------------------
function JS_clientHeight()
{  return JS_filterResults(window.innerHeight ? window.innerHeight : 0,
                          document.documentElement ? document.documentElement.clientHeight : 0,
                          document.body ? document.body.clientHeight : 0);
}

//-----------------------------------------------------------
// Fonction pour obtenir la position gauche du scroll de la page
//-----------------------------------------------------------
function JS_scrollLeft() 
{  return JS_filterResults(window.pageXOffset ? window.pageXOffset : 0,
                          document.documentElement ? document.documentElement.scrollLeft : 0,
                          document.body ? document.body.scrollLeft : 0);
}

//-----------------------------------------------------------
// Fonction pour obtenir la position haut du scroll de la page
//-----------------------------------------------------------
function JS_scrollTop()
{  return JS_filterResults(window.pageYOffset ? window.pageYOffset : 0,
                          document.documentElement ? document.documentElement.scrollTop : 0,
                          document.body ? document.body.scrollTop : 0);
}

//-----------------------------------------------------------
// Fonction utile aux 4 précédentes pour déterminer la bonne valeur en fonction du fureteur
//-----------------------------------------------------------
function JS_filterResults(n_win, n_docel, n_body)
{  var n_result = n_win ? n_win : 0;
   if (n_docel && (!n_result || (n_result > n_docel)))
   {  n_result = n_docel;
   }
   return (n_body && (!n_result || (n_result > n_body))) ? n_body : n_result;
}

//-----------------------------------------------------------
// Fonction pour enregistrer la position du scroll dans un cookie
//-----------------------------------------------------------
function JS_enrg_Scroll_divVar()
{  if (document.getElementById('divVar'))
   {  var valNav = JS_get_URL_Parm('nav');
      if (valNav !== '~')
      {  JS_createCookie("NAV" + valNav, document.getElementById('divVar').scrollTop, 0);
      }
   }
}

//-----------------------------------------------------------
// Fonction pour créer un cookie
//-----------------------------------------------------------
function JS_createCookie(name,value,days)
{  var expires = "";
   if (days)
   {  var date = new Date();
      date.setTime(date.getTime()+(days*24*60*60*1000));
      expires = "; expires="+date.toGMTString();
   }
   document.cookie = name + "=" + value + expires + "; path=/";
}

//-----------------------------------------------------------
// Fonction pour lire le contenu d'un cookie
//-----------------------------------------------------------
function JS_readCookie(name)
{  var nameEQ = name + "=";
   var ca = document.cookie.split(';');
   for(var i=0;i < ca.length;i++)
   {  var c = ca[i];
      while (c.charAt(0) === ' ')
      {  c = c.substring(1,c.length);  }
      if (c.indexOf(nameEQ) === 0)
      {  return c.substring(nameEQ.length,c.length);  }
   }
   return null;
}

//-----------------------------------------------------------
// Fonction pour effacer un cookie
//-----------------------------------------------------------
function JS_eraseCookie(name)
{  JS_createCookie(name,"",-1);
}

//-----------------------------------------------------------
// Fonction pour calculer la position d'affichage du ToolTip
//-----------------------------------------------------------
function JS_FixCalcXY(el)
{  if(typeof(el.offsetParent) == "undefined")
   {  return [70, 4000];
   }
   var a = new Array(0, 28);
   while(el)
   {  a[0] += el.offsetLeft || 0;
      a[1] += el.offsetTop || 0;
      el = el.offsetParent || null;
   }
   return a;
}

//-----------------------------------------------------------
// Fonction pour permettre l'affichage d'informations pour debug
//-----------------------------------------------------------
function JS_debug(obj, p_aff, p_reset)
{  if (p_reset)
   {  txt_debug = '';
   }
   r_print_r(obj);
   if (p_aff)
   {  Tip(txt_debug, TITLE, 'DEBUG JavaScript', CLOSEBTN, true, BGCOLOR, '#FFFFCC', BORDERCOLOR, '#CC6600', BORDERWIDTH, 2, SHADOW, true, SHADOWCOLOR, '#FFCC66', FIX, [10, 100], WIDTH, 800);
   }
}

function r_print_r(theObj)
{  for(var p in theObj)
   {  if (theObj[p].constructor == Array || theObj[p].constructor == Object)
      {  txt_debug += "<li>["+p+"] =>"+typeof(theObj)+"</li>";
         txt_debug += "<ul>";
         r_print_r(theObj[p]);
         txt_debug += "</ul>";
      }
      else
      {  txt_debug += "<li>["+p+"] =>"+theObj[p]+"</li>";
      }
   }
   txt_debug += "</ul>";
}

