/*--------------------------------------------------------------------------
  FICHIER:       functions.js
  DESCRIPTION:   Banque de fonctions javascript
  DATE:          25 juillet 2001
---------------------------------------------------------------------------*/

/* --------------------------------------------------------------------
    FONCTION:   popup
    OBJECTIF:   ouvrir un popup
    ENTREE:     mypage : nom de la page
                myname : titre de la page
                w :      width
                h :      height
                scroll : yes/no
                menubar: yes/no
-------------------------------------------------------------------- */
function popup(mypage,myname,w,h,scroll,menubar){
	LeftPosition = (screen.width) ? (screen.width-w)/2 : 0;
	TopPosition = (screen.height) ? (screen.height-h)/2 : 0;
	settings = 'height='+h+',width='+w+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+scroll+',resizable=yes,menubar='+menubar+',toolbar=no,directories=no,statut=no,location=no,status=no';

	win = window.open(mypage,myname,settings);
	if( win.focus ) {
		win.focus();
	}
}

/* --------------------------------------------------------------------
    FONCTION:   isDecimal
    OBJECTIF:   Vérifier si une chaîne de caractère représente un
                nombre décimal sous le format demandé
    ENTREE:     valeur:  Chaîne de caractères à vérifier  (STRING)
                gauche:  Nombre de chiffre avant le point (INT)
                droite:  Nombre de chiffre après le point (INT)
    SORTIE:     TRUE:   Si c'est un nombre decimal
                FALSE:  Si ce n'est pas un nombre decimal
-------------------------------------------------------------------- */

function isDecimal(valeur, gauche, droite)
  {
    if (isNaN(valeur))
        return false;

    if (valeur.indexOf('.') >= 0)
      {
        if ((valeur.substring(valeur.indexOf('.') + 1,valeur.length)).length > droite)
          {
            return false;
          }

        if ((valeur.substring(0,valeur.indexOf('.'))).length > gauche)
          {
            return false;
          }

      }

    else
      {
        if (valeur.length > gauche)
          {
            return false;
          }
      }

  return true;
}


/* --------------------------------------------------------------------
    FONCTION:   isNumrTel
    OBJECTIF:   Vérifier si une chaîne de caractère a le bon format de
                numéro de téléphone (999-9999)
    ENTREE:     valeur:  Chaîne de caractères à vérifier 

    SORTIE:     TRUE:   chaine est composé comme ceci 999-9999
                FALSE:  sinon
-------------------------------------------------------------------- */
function isNumrTel(chaine) 
{
	
	var accpt = false;
	var cpt   = 0;

	
	if (chaine.length == 8)
	{
		accpt = true;
		
		if (chaine.indexOf("-") != 3)
		{
			accpt = false;
		}	
		else
		{
			while(cpt < chaine.indexOf("-") && accpt)
			{
				if ((chaine.charAt(cpt) < "0"  ||
				     chaine.charAt(cpt) > "9"))
				{
					accpt = false;
				}
				cpt++;
			}
			
			cpt = chaine.indexOf("-") + 1;
			
	   
			while(cpt < chaine.length && accpt)
	    {
				if ((chaine.charAt(cpt) < "0"  ||
				     chaine.charAt(cpt) > "9"))
				{
					accpt = false;
				}
				cpt++;
	    }
		}		
	}
	
	return accpt;

}


/* --------------------------------------------------------------------
    FONCTION:   isUserCode
    OBJECTIF:   Vérifier si une chaîne de caractère est valide comme
    		username et qu'elle est composée au maximum de 16
  		caractères.

                Vérifier que seulement des chiffres et/ou des lettres
    						sont entrés.

    ENTREE:     valeur:  Chaîne de caractères à vérifier 

    SORTIE:     TRUE: si valide
                FALSE  si pas valide
-------------------------------------------------------------------- */
function isUserCode(chaine) {

    var accept = false;

    /* le code doit avoir au maximum 16 de long. */

    if (chaine.length <= 16)
     {
       var accept = true;

       /* Et avoir des caractères valides */

       for (var cpt=0; cpt < chaine.length; cpt++)
        {
           if ((chaine.charAt(cpt) < "0"  ||
                chaine.charAt(cpt) > "9") &&
               (chaine.charAt(cpt) < "A"  ||
                chaine.charAt(cpt) > "Z") &&
               (chaine.charAt(cpt) < "a"  ||
                chaine.charAt(cpt) > "z") &&
                chaine.charAt(cpt) != " ")
            {
              accept = false;
            }
        }
     }

    if (accept)
     {
       return true;
     }

    return false;
}

/* --------------------------------------------------------------------
    FONCTION:   isPassWord
    OBJECTIF:   Vérifier si une chaîne de caractère est valide comme
    		password et qu'elle est composée au maximum de 20 
   		caractères.

                Vérifier que seulement des chiffres et/ou des lettres
    		et/ou des espaces sont entrés.

    ENTREE:     valeur:  Chaîne de caractères à vérifier 

    SORTIE:     TRUE: si valide
                FALSE  si pas valide
-------------------------------------------------------------------- */
function isPassWord(chaine) {

    var accept = false;

    /* le code doit avoir au maximum 20 de long. */

    if (chaine.length <= 20)
     {
       var accept = true;

       /* Et avoir des caractères valides */

       for (var cpt=0; cpt < chaine.length; cpt++)
        {
           if ((chaine.charAt(cpt) < "0"  ||
                chaine.charAt(cpt) > "9") &&
               (chaine.charAt(cpt) < "A"  ||
                chaine.charAt(cpt) > "Z") &&
               (chaine.charAt(cpt) < "a"  ||
                chaine.charAt(cpt) > "z") &&
                chaine.charAt(cpt) != " ")
            {
              accept = false;
            }
        }
     }

    if (accept)
     {
       return true;
     }

    return false;
}

/*--------------------------------------------------------------------------
   Descr  :  Fonction qui vérifie si le champ passé en paramètre est une 
						 adresse de courriel valide. 
 	 Appel  :  isEmail("moi@lacapitale.com");                                                               
   Retour :  true = succès, false = échec                                                            
--------------------------------------------------------------------------*/
function isEmail(chaine) {
   var accept = true;
   for (var cpt=0; cpt < chaine.length; cpt++) {
      if ((chaine.charAt(cpt) != "." &&
           chaine.charAt(cpt) != "-" &&
           chaine.charAt(cpt) < "0") ||
          (chaine.charAt(cpt) > "9" &&
           chaine.charAt(cpt) < "@") ||
          (chaine.charAt(cpt) != "_" &&
           chaine.charAt(cpt) > "Z" &&
           chaine.charAt(cpt) < "a") ||
          (chaine.charAt(cpt) > "z")) accept = false;
   }

   if ((chaine.indexOf("@") == -1) ||
       (chaine.indexOf(".") == -1) ||
       (chaine.indexOf(".") == 0) ||
       (chaine.indexOf("..") != -1) ||
       (chaine.lastIndexOf("@") == chaine.length - 1) ||
       (chaine.lastIndexOf(".") == chaine.length - 1) ||
       (chaine.indexOf("@") != chaine.lastIndexOf("@")) ||
       (chaine.charAt(chaine.indexOf("@") - 1) == ".") ||
       (chaine.charAt(chaine.indexOf("@") + 1) == ".") ||
       (chaine.length < 9)) accept = false;

   if (accept) return true;
   return false;
}



/* --------------------------------------------------------------------
    FONCTION:   isCodePostal
    OBJECTIF:   Vérifier si une chaîne de caractère représente un
                code postal dans le format demandé.

                Vérifier que les caractères entrés soit des lettres(!isChar)
                ou des chiffres(isNaN) selon le format.

    ENTREE:     valeur:  Chaîne de caractères à vérifier  (X9X9X9)

    SORTIE:     TRUE:   Si c'est un code postal valide
                FALSE:  Si ce n'est pas un code postal valide
-------------------------------------------------------------------- */
function isChar(valeur)
  {
  	if ( ((valeur < String.fromCharCode(65) ) || (valeur > String.fromCharCode(90)) ) &&
         ((valeur < String.fromCharCode(97) ) || (valeur > String.fromCharCode(122) )))
     {
      return false;
     }

   return true;
  }

function IsCodePostal(valeur)
  {
    
    if ( valeur == "") {
    	return false;	
    }	

    a = parseInt(valeur.substring(1,2));
    b = parseInt(valeur.substring(3,4));
    c = parseInt(valeur.substring(5,6));

    d = valeur.substring(0,1);
    e = valeur.substring(2,3);
    f = valeur.substring(4,5);

    if ( isNaN(a) || isNaN(b) || isNaN(c) )
     {
       return false;
     }

    if ( (!isChar(d)) || (!isChar(e)) || (!isChar(f)) )
     {
       return false;
     }

    if (valeur.length < 6)
     {
       return false;
     }

  	return true;
  }


/* --------------------------------------------------------------------
    FONCTION:   isValidDate
    OBJECTIF:   Vérifier si trois chaines de caractère forme une date 
    						valide.

    ENTREE:     string annee 
    						string mois
    						string jour	

    SORTIE:     TRUE:   Si c'est une date valide
                FALSE:  Si ce n'est pas une date valide
-------------------------------------------------------------------- */
function isValidDate(an, mois, jour )  {
	
	
		var bissextile = false;
		var goodDay  = true; 
    
    if (an == "" || mois == "" || jour == "") {
    
		    return false;
    
    } else {
    
		    /*--- Année ---*/
		    if (!isDecimal(an,4,0) || an.length < 4 ) {
		        return false;
				}

        /*--- Mois ---*/
        if (!isDecimal(mois,2,0) || eval(mois) < 1 || eval(mois) > 12) {
            return false;
				}

        /*--- Jour ---*/
        if (!isDecimal(jour,2,0) || eval(jour) < 1) {
	        	return false;
        
        } else {
                        
        		/*--- février ---*/
            if (eval(mois) == 2) {
			          	
								if(eval(an%4)==0) {
						
						  			if(eval(an%100)==0) {
						
						     				if(eval(an%400)==0) {
						     						bissextile = true;	
						     				} 
						     		} else {
						  					bissextile = true;			
						  		  }
								}
								
								if (bissextile && eval(jour) > 29) {
									 return false;
							  }	else if (!bissextile && eval(jour) > 28) {
									 return false;
								}	

            } else if (eval(mois) == 4 || eval(mois) == 6 || eval(mois) == 9 
            					 || eval(mois) == 11) {
                                
            		if (eval(jour) < 1 || eval(jour) > 30) {
                    return false;
                }
            
            } else {
            	
            		if (eval(jour) < 1 || eval(jour) > 31) {
                		return false;
                }
            }
        }
		} 
		return true;
}		


/* --------------------------------------------------------------------
    FONCTION:   isNum
    OBJECTIF:   Vérifier si une chaine est composée uniquement 
    						de chiffres

    ENTREE:     string chaine

    SORTIE:     TRUE:   si oui
                FALSE:  Si non
-------------------------------------------------------------------- */
function isNum (chaine)  {

	var cpt = 0;
	var code = true;

	if (chaine.length != 0 ) {

		while (cpt < chaine.length && code == true) {
		
			if (chaine.charAt(cpt) < "0" || chaine.charAt(cpt) > "9" ) {
					code = false;
			}		
			cpt++;
		}

	} else { code = false; }
	
	return code;	
}

function strip_all_nondigit(toStrip) {
	var tempstr = "";
	var indx = 0;
	var safe = 0;
	
	while( isNaN(Number(toStrip)) && safe++ < 16 ) {
		var re = new RegExp("[\x00-\x2B]+"); 	// null -> "+"
		toStrip = toStrip.replace(re, "")
		delete re;
		
		re = new RegExp("[\x2C]+");						// ","
		toStrip = toStrip.replace(re, ".");		// Remplacer les "," par des "."
		delete re;
		
		re = new RegExp("[\x2F]+");						// "/"
		toStrip = toStrip.replace(re, "");
		delete re;
		
		re = new RegExp("[\x3A-\xFF]+");			// ":" -> "¦"
		toStrip = toStrip.replace(re, "");
		delete re;
		
		re = new RegExp("^[\x2D]+");					// "-", en début de chaîne
		tempstr = tempstr.replace(re, "-");		// S'assurer qu'il n'y a qu'un seul "-" au début de la chaîne
		delete re;
		indx = toStrip.indexOf("-",1);				// Trouver un 2eme "-"
		if( indx > -1 ) {											// Si trouvé
			tempstr = toStrip.slice(indx);			// Copie la chaîne à partir du 2eme caractère
			toStrip = toStrip.slice(0,indx);		// Retirer la fin de la chaine
			re = new RegExp("[\x2D]+");					// "-", dans la chaîne
			tempstr = tempstr.replace(re, "");
			delete re;
			toStrip = toStrip.concat(tempstr);	// Replacer la fin de la chaîne, corrigée
		}
		
		indx = toStrip.indexOf(".",0);				// ".", 1er de la chaîne
		if( toStrip.lastIndexOf(".") > indx ) {
			tempstr = toStrip.slice(indx+1);		// Copier la fin de la chaîne
			toStrip = toStrip.slice(0,indx+1);	// Retirer la fin de la chaine
			re = new RegExp("[\x2E]+");					// ".", les autres
			tempstr = tempstr.replace(re, "");
			delete re;
			toStrip = toStrip.concat(tempstr);	// Replacer la fin de la chaîne, corrigée
		}
	}

	return toStrip;
}

function rafraichir() {		
	for(j = 0;; j++) {
		if(document.forms[j] == null) {
			return;
		}
		else	{
			for(i = 0; i < document.forms[j].length; i++) {
				if(document.forms[j].elements[i].value != "") {
					document.forms[j].elements[i].value = document.forms[j].elements[i].value;
				}
			}
		}
	}
}