
isCheckAllCheckbox = false;
validDelStrict = true; //Validation chaque éléments, sinon seulement les conteneur non vide

/**
 * Recoit en parametre la référence au checkboxs.
 * ne pas mettre this mais plutôt le nom complet vers l'objet.
 */
function checkAllCheckbox(box){
   isCheckAllCheckbox = (isCheckAllCheckbox == false) ? true : false;
   if(typeof(box) != 'undefined'){
      if(typeof(box.length) != 'undefined'){
         for(i=0; i < box.length; i++){
            box[i].checked = isCheckAllCheckbox;
         }
      }
      else{ box.checked = isCheckAllCheckbox; }
   }
}

/**
 * Cette fonction est appelé lors de la suppresion d'un éléments dans la page index.cgi.
 * Il recoit en parametre, Une référence au formulaire, le nombre d'éléments que celui-ci contient, le nom du type de l'élément.
 * Retourne <code>true</code> si l'élément peut être supprimer, <code>false</code> sinon.
 */
function validDel(ihref, nbrElem, typeElem){
   delall = false
   if(typeElem == 'Lien')
      delall = true

   if(validDelStrict || nbrElem > 0){
      if(confirm("L'élément va être supprimé !")){
         if(nbrElem > 0 && typeElem != 'Lien' && confirm("Les éléments contenus dans l'élément que vous supprimez vont être supprimés !"))
            delall = true
         window.location.href = ihref + '&CMS_1delall=' + delall
      }
   }
   else
      window.location.href = ihref + '&CMS_1delall=' + delall
}

/**
 * GetCookie(name,[defaultValue])
 * retrieves the value  of a cookie (returns null if it doesn't exist)
 */
function GetCookie (name, d) {
	if (!d) var d = null;
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen) {
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg) {
			var endstr = document.cookie.indexOf (";", j);
			if (endstr == -1) endstr = document.cookie.length;
			return unescape(document.cookie.substring(j, endstr));
 		}
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) break;
	}
	return d;
}

/**
 * SetCookie(name, value, [expires])
 * sets the cookie name with value
 * (takes optional argument expires which is the time in hours till it expires)
 */
function SetCookie (name, value, expires) {
	if (expires) {
		var exp = new Date();
		exp.setTime(exp.getTime() + (expires*60*60*1000));
		expires = exp;
	}
	document.cookie = name + "=" + escape(value) + ((expires == null) ? "" : ("; expires=" + expires.toGMTString()));
}

/**
 * DeleteCookie(name)
 * removes the cookie "name"
 */
function DeleteCookie (name) {
	var exp = new Date();
	exp.setTime (exp.getTime() - 1000);
	var cval = GetCookie (name);
	document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}

/**
 * Effectue la validation des champs pour la référence au formulaire passé en parametre.
 * Il retourne <code>true</code> si le formulaire est valide, <code>false</code> sinon.
 * - iform, nom du formulaire a valider
 * - msgerr, le message d'erreur general a afficher avant le(s) message(s) particulier(s) ("" n'affiche pas de message general)
 * - maxmsg, le nombre de message maximum a afficher
 * - focus, si "1", set le focus sur le premier champs valide qui comporte une erreur
 * @todo
 * - Le select-multiple n'est pas supporté
 * - Si iform est undef, valider tout les formulaire de la page
 * - Faire la validation est éléments radio
 */
function validForm(iform,msgerr,maxmsg,focus){
   if(typeof(msgerr) != 'undefined'){ errBase = msgerr; }
   else{ errBase = 'Une erreur empêche de soumettre le formulaire.\n\n';};

   var err = '';
   var iregx = new RegExp();
   var nbrerr = 0;
   var fieldfocus = '';

   for(i=0; i < iform.length; i++){
      iregx.compile('^V_.*$','');
      //si le nom du champ match une validation
      //c'est qu'une validation doit être effectué.
      if(iregx.test(iform.elements[i].name)){
         vername = new String(iform.elements[i].name);
         ver = new String(iform.elements[i].value);
         ver = ver.split('|',5);
         valname = vername.substr(2, vername.length - 2);
         eval('valref = iform.' + valname + ';');

         switch(valref.type){
            case 'text' : case 'hidden' : case 'file' : case 'textarea' : case 'password' :
               val = valref.value;
               break;
            //NON SUPPORTÉ PARCE QUE BUG DANS IE 5, à vérifier
            //~ case 'radio' : case 'checkbox' :
               //~ for(j=0; j < valref.length; j++) {
                  //~ if(valref[j].checked) val = valref[j].value;
               //~ };
               //~ break;
            case 'select-one' :
               val = valref.options[valref.selectedIndex].value;
               break;
            default : break;
         }
         if(typeof(val) == 'undefined') val = '';

         if(ver[1] == 1 || val.length > 0){
            //Effectuer la validation sur le champs selon les parametres
            switch(ver[0]){
               case 'char' :
                  if((ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){ 
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  };
                  break;
               case 'date' :
                  iregx.compile('^[0-9]{2}-[0-9]{2}-[0-9]{4}$','');
                  if(!iregx.test(val)){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  else {
                     var day = val.substr(0,2);
                     var month = val.substr(3,2);
                     var year = val.substr(6,4);
                     var leap = 0;

                     if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
                        leap = 1;
                     };

                     if( (year <= 0) || ((month < 1) || (month > 12)) || (day < 1) ||
                         ((month == 2) && (leap == 1) && (day > 29)) || ((month == 2) && (leap != 1) && (day > 28)) ||
                         ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) ||
                         ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11")))
                        ) {
                        if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                        nbrerr += 1;
                        if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                     };
                  };
                  break;
               case 'domain' :
                  iregx.compile('^[a-z|0-9|-]*$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'int' :
                  iregx.compile('^[0-9]+$','');
                  if(!iregx.test(val) || (ver[2] > 0 && val.value < ver[2]) || (ver[3] > 0 && val.value > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'pct' :
                  iregx.compile('%$','');
                  if( iregx.test(val) ) {
                     val = val.substr(0,val.length-1);
                     ver[3] = 100;
                  };
                  iregx.compile('^[0-9]*$','');
                  if(!iregx.test(val) || (ver[2] > 0 && val.value < ver[2]) || (ver[3] > 0 && val.value > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'doc' :
                  iregx.compile('^[a-z0-9\-_]+\.(doc|zip|pdf|xls|txt|pps|ppt|avi)$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'email' :
                  iregx.compile('^.+@.+[.].{2,}$','');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'hexa' :
                  iregx.compile('^(#?[0-9|a-f]{0,6})?$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'hour' :
                  iregx.compile('^[0-9]{1,2}:[0-5][0-9]$','');
                  if(!iregx.test(val)){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  else {
                     if(val.length == 4) { val = '0' + val; }
                     var hour = val.substr(0,2);
                     var min = val.substr(3,2);
                     if( (hour < 0 || hour > 24) || (min < 0 || min >59) ) {
                        if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                        nbrerr += 1;
                        if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                     };
                  }
                  break;
               case 'img' :
                  iregx.compile('^[a-z0-9\-_]+\.(gif|jpg|jpeg|png)$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'multi' :
                  iregx.compile('^[a-z0-9\-_]+\.(swf|rm|ram|mp3)$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'passwd' :
                  eval('val_confirm = iform.' + valname + '_confirmation.value;');
                  if(val != val_confirm || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'user' :
                  iregx.compile('^[a-z|0-9|_|.|-]*$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               default : break;
            }
         }
      }
   }

   if(err == ''){ return true; }
   else{
      alert(errBase + err + '\n\n'); 
      if( fieldfocus != '' && focus ) { eval('document.' + iform.name + '.' + fieldfocus + '.focus();'); };
      return false;
   }
}


/**
  Mnu, un petit objet tres simplet
  et quelques methodes de over/out

  tester avec ie6 et op7
  @todo - Rendre ceci cross browser full compatible
*/

var mlstimeout = 300
var timeoutpopup = null   //NE DOIT PAS ETRE GLOBAL !!!
var collerOff = '<span class="mnu_option_off">Coller</span>'

function Mnu(id){
   this.id = id
   this.page = null
   this.idc = null
   this.ordre = null
   this.type = null
   this.typeMsg = null
   this.imgSrc = null
   this.nbrc = null
   this.section = null

   this.getMnu = function(){
      var out = ''
      priv = arguments
      addType = (this.type == 'Menu') ? 'Menu' : '';
      var btn = new Array(
         new Array(
            new Array('Ajouter','element_modify.cgi?CMS_1page=' + this.page + '&CMS_1idc=' + this.idc + '&CMS_1ordre=' + this.ordre + '&CMS_1aed=a&CMS_1section=' + this.section + '&CMS_1type=' + addType,''),
            new Array('Modifier','element_modify.cgi?CMS_1page=' + this.page + '&CMS_1idc=' + this.idc + '&CMS_1ordre=' + this.ordre + '&CMS_1type=' + this.type + '&CMS_1aed=e&CMS_1section=' + this.section,''),
            new Array('Supprimer','#','if(GetCookie(\'ec\') == ' + this.ordre + '){SetCookie(\'ec\',\'\')}; validDel(\'element_aed.cgi?CMS_1page=' + this.page + '&CMS_1idc=' + this.idc + '&CMS_1ordre=' + this.ordre + '&CMS_1type=' + this.type + '&CMS_1aed=d&CMS_1section=' + this.section + '&CMS_1nbrc=' + this.nbrc + '\', ' + this.nbrc + ', \'' + this.type + '\');return false;')
         ),
         new Array(
            new Array('Copier','#','SetCookie(\'ecpage\',\'' + this.page + '\');SetCookie(\'ec\',\'' + this.ordre + '\');showHide(\'mnu_' + this.id + '\',\'hidden\');return false;'),
            new Array('Coller','element_copy.cgi?ppage=' + this.page + '&idc=' + this.idc + '&paste=' + this.ordre + '&section=' + this.section,'' )
         )
      )

      var mnuid = 'mnu_' + this.id

      if(priv.length > 0){
         out += '<table id="' + mnuid + '" class="mnu">'
         if(this.typeMsg != ''){ out += '<tr><td class="mnu_title" onmouseover="overCell(\'' + mnuid + '\',this);" onmouseout="outCell(\'' + mnuid + '\',this);">' + this.typeMsg + '</td></tr>'; }
         for(i=0;i<priv.length;i++){
            got = 0
            for(j=0;j<priv[i].length;j++){
               if(priv[i][j]){
                  out += '<tr><td id="' + mnuid + '_' + btn[i][j][0] + '" class="mnu_option" onmouseover="this.className=\'mnu_option_over\';overCell(\'' + mnuid + '\',this);" onmouseout="this.className=\'mnu_option\';outCell(\'' + mnuid + '\',this);"><a href="' + btn[i][j][1] + '" onclick="' + btn[i][j][2] + '">' + btn[i][j][0] + '</a></td></tr>'
                  got = 1
               }
            }
            if(i!=priv.length-1 && got) out += '<tr><td class="mnu_separateur"></td></tr>'
         }
         out += '</table>'

      }
      return out
   }
   return this
}

//L'objet par défaut est créer.
mnu = new Mnu();


function showHide(mnuid,visibility){
   eval('clearTimeout(timeoutpopup' + mnuid + ')')
   eval('timeoutpopup' + mnuid + ' = setTimeout(\'document.all.' + mnuid + '.style.visibility = "' + visibility + '"\', mlstimeout)')
}

function overCell(mnuid, cell){
   eval('clearTimeout(timeoutpopup' + mnuid + ')')
}

function outCell(mnuid, cell){
   eval('timeoutpopup' + mnuid + ' = setTimeout("showHide(\'' + mnuid + '\',\'hidden\')", mlstimeout)')
}


