
/* Fonctions afin de vérifier les formulaires */

// Expressions régulières de test de longueur
var regExpEmpty=/^$/g;			                // Accepte une chaine vide
var regExp8Chars=/^[0-9a-zA-Z]{8,}$/g;	                // Accepte une chaine d'au moins 8 carctères alphanumeriques (pour un mot de passe par exemple).


// Expressions régulières de test de type de caractère
var regExpAlphanumeric=/[0-9a-zA-Z]+/g;			// Accepte une chaine alphanumérique
var regExpAlphanumericWithWhitespace=/[0-9a-zA-Z ]+/g;	// Accepte une chaine alphanumérique + ' '
var regExpAlphabetic=/[a-zA-Z]+/g;			// Accepte une chaine alphabétique
var regExpNumeric=/[0-9]+/g;				// Accepte une chaine numérique


// Expressions régulières de test de type
var regExpInt=/^[0-9]+$/g;				// Accepte une chaine de type 'int'
var regExpDouble=/^[-+]?[0-9]+(\.[0-9]+)?$/g;		// Accepte une chaine de type 'double'
var regExpFloat=/^[-+]?[0-9]+(\.[0-9]+)?([eE][-+]?[0-9]+)?$/g;	// Accepte une chaine de type 'float'
var regExpTime=/^([01][0-9]|2[0123])\:([012345][0-9])(\:([012345][0-9])(.([0-9]{3})+)?)?$/g;		 // Accepte une chaine de type 'time'. Ex : 12:51 ou 21:45:35.654
var regExpFrenchDate=/^(0[1-9]|[12][0-9]|3[01])[\- \/\.](0[1-9]|1[012])[\- \/\.](19|20)\d\d$/g;  // date au format jj/mm/aaaa ou jj-mm-aaaa ou jj mm aaaa ou jj.mm.aaaa avec aaaa compris entre 1900 et 2099.
var regExpEnglishDate=/^(19|20)\d\d[\- \/\.](0[1-9]|1[012])[\- \/\.](0[1-9]|[12][0-9]|3[01])$/g; // idem ci-dessus mais format anglais (Ex : aaaa/mm/jj)
var regExpBoolean=/^true|false$/g;			// Accepte une chaine de type 'boolean'


// Expressions régulières de test de types administratifs français
var regExpCodePostal=/^([A-Z]+[A-Z]?\-)?[0-9]{1,2} ?[0-9]{3}$/g;							// Accepte une chaine de type 'code postal'. Ex : F-33370 ou 33 370 ou 33370 ou F-1 370
var regExpTelephoneFixe=/^(01|02|03|04|05)[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/g;		// Accepte un numero de téléphone de type 'fixe'. Ex : 01.34.12.52.30 ou 0134125230
var regExpTelephonePortable=/^(06)[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/g;			// Accepte un numero de téléphone de type 'portable'.
var regExpTelephoneNational=/^(0[1234568])[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/g;		// Accepte un numero de téléphone de type 'national' y compris numéros en '08'.
var regExpTelephoneInternational=/^(\(\+[0-9]{2}\))[ \.\-]?[0-9][ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/g; // Accepte un numero de téléphone de type 'international'. Ex : (+33) 1 34 12 52 30

var regExpNumeroSecuriteSociale=/^[12][ \.\-]?[0-9]{2}[ \.\-]?(0[1-9]|[1][0-2])[ \.\-]?([0-9]{2}|2A|2B)[ \.\-]?[0-9]{3}[ \.\-]?[0-9]{3}[ \.\-]?[0-9]{2}$/g; // Accepte un numero de sécurité sociale français. Ex : 1 85 34 33 354 450 45

var regExpTVAIntracommunautaire=/^[A-Z]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{3}[ \.\-]?[0-9]{3}[ \.\-]?[0-9]{3}$/g;		// Accepte un numero de TVA Intra-communautaire. Ex : FR 02 254 254 254
var regExpNumeroSiren=/^[0-9]{3}[ \.\-]?[0-9]{3}[ \.\-]?[0-9]{3}$/g;							// Accepte un numero SIREN. Ex : 254 254 254
var regExpNumeroSiret=/^[0-9]{3}[ \.\-]?[0-9]{3}[ \.\-]?[0-9]{3}[ \.\-]?[0-9]{5}$/g;					// Accepte un numero SIRET. Ex : 254 254 254 12345
var regExpCodeApe=/^[0-9]{2}[ \.\-]?[0-9]{1} ?[a-zA-Z]$/g;								// Accepte un code APE. Ex : 25.4Z


// Expressions régulières de test de types liés à internet
var regExpEmailAdress=/^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$/g;										// Accepte une adresse email. Ex : toto@toto.com
var regExpIpAdress=/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g;	// Accepte une adresse ip. Ex : 192.168.0.1
var regExpDomainName=/^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$/g;													// Accepte un nom de domaine. Ex : toto.com
var regExpUrl=/^(((ht|f)tp(s?))\:\/\/)?(([a-zA-Z0-9]+([@\-\.]?[a-zA-Z0-9]+)*)(\:[a-zA-Z0-9\-\.]+)?@)?(www.|ftp.|[a-zA-Z]+.)?[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,})(\:[0-9]+)?\/?/g;			// Accepte une url ftp, http ou https, avec ou sans login/mot de passe, avec ou sans numero de port. Ex : http://www.toto.com, ftp://toto:toto@ftp.toto.com:21/

var regExpHexColor=/^#[0-9A-Fa-f]{6}$/g; // Accepte une couleur hexadécimale


// fonctions pour compter le nombre de caractères en minuscule, majuscule ou chiffre dans une chaine de caractères
var regExpAlphabeticMinuscule=/[a-z]+/g; // Accepte une chaine alphabétique en minuscules
var regExpAlphabeticMajuscule=/[A-Z]+/g; // Accepte une chaine alphabétique en majuscules
var regExpNumeric=/[0-9]+/g; // Accepte une chaine numérique


// fonctions servant à identifier si une chaine de caractère est compatible avec une expression régulière
function matchRegularExpression (val, regularExpression)
{
  var resultat = val.match(regularExpression);
  if (resultat!=null && resultat.length==1) return true;
  else return false;
}


function doesntMatchRegularExpression (val, regularExpression)
{
  if (matchRegularExpression(val, regularExpression)) return false;
  else return true;
}


// Fonctions de contrôle qui vérifie la "value" d'un champ
// de type "text" ou "password"
function isEmpty (val)
{
  return matchRegularExpression(val, regExpEmpty);
}


function isNotEmpty (val)
{
  return doesntMatchRegularExpression(val, regExpEmpty);
}


function isNot8CharsLength (val)
{
  return doesntMatchRegularExpression(val, regExp8Chars);
}


function isNotAlphanumeric (val)
{
  return doesntMatchRegularExpression(val, regExpAlphanumeric);
}


function isNotAlphanumericWithWhitespace (val)
{
  return doesntMatchRegularExpression(val, regExpAlphanumericWithWhitespace);
}


function isNotAlphabetic (val)
{
  return doesntMatchRegularExpression(val, regExpAlphabetic);
}


function isNotNumeric (val)
{
  return doesntMatchRegularExpression(val, regExpNumeric);
}


function isNotInt (val)
{
  return doesntMatchRegularExpression(val, regExpInt);
}


function isNotDouble (val)
{
  return doesntMatchRegularExpression(val, regExpDouble);
}


function isNotFloat (val)
{
  return doesntMatchRegularExpression(val, regExpInt);
}


function isNotBoolean (val)
{
  return doesntMatchRegularExpression(val, regExpBoolean);
}


function isNotTime (val)
{
  return doesntMatchRegularExpression(val, regExpTime);
}


function isNotDate (val, mode)
{
  switch (mode)
  {
    case "fr" :
      return doesntMatchRegularExpression(val, regExpFrenchDate);
      break;
    case "en" :
      return doesntMatchRegularExpression(val, regExpEnglishDate);
      break;
    default :
      return doesntMatchRegularExpression(val, regExpFrenchDate);
      break;
  }
}


function isNotCodePostal (val)
{
  return doesntMatchRegularExpression(val, regExpCodePostal);
}


function isNotTelephone (val, mode)
{
  switch (mode)
  {
    case "fixe" :
      return doesntMatchRegularExpression(val, regExpTelephoneFixe);
      break;
    case "port" :
      return doesntMatchRegularExpression(val, regExpTelephonePortable);
      break;
    case "nati" :
      return doesntMatchRegularExpression(val, regExpTelephoneNational);
      break;
    case "inte" :
      return doesntMatchRegularExpression(val, regExpTelephoneInternational);
      break;
    default :
      return doesntMatchRegularExpression(val, regExpTelephoneNational);
      break;
  }
}


function isNotNumeroSecuriteSociale (val)
{
  return doesntMatchRegularExpression(val, regExpNumeroSecuriteSociale);
}


function isNotTVAIntracommunautaire (val)
{
  return doesntMatchRegularExpression(val, regExpTVAIntracommunautaire);
}


function isNotNumeroSiren (val)
{
  return doesntMatchRegularExpression(val, regExpNumeroSiren);
}


function isNotNumeroSiret (val)
{
  return doesntMatchRegularExpression(val, regExpNumeroSiret);
}


function isNotCodeApe (val)
{
  return doesntMatchRegularExpression(val, regExpCodeApe);
}


function isNotEmailAdress (val)
{
  return doesntMatchRegularExpression(val, regExpEmailAdress);
}


function isNotIpAdress (val)
{
  return doesntMatchRegularExpression(val, regExpIpAdress);
}


function isNotDomainName (val)
{
  return doesntMatchRegularExpression(val, regExpDomainName);
}


function isNotUrl (val)
{
  return doesntMatchRegularExpression(val, regExpUrl);
}


function isNotHexColor (val)
{
  return doesntMatchRegularExpression (val, regExpHexColor);
}


// les fonctions suivantes retournent le nombre de caractères spécifiques contenus dans la chaine "val"
function NombreCaracteresNumériques (val)
{
  var nb= 0;
  var resultat = val.match(regExpNumeric);

  if (resultat)
    for (i=0; i<resultat.length; ++i)
      nb += ((resultat[i]).length);

  return(nb);
}


function NombreCaracteresAlphabeticMinuscule (val)
{
  var nb= 0;
  var resultat = val.match(regExpAlphabeticMinuscule);

  if (resultat)
    for (i=0; i < resultat.length; ++i)
      nb += ((resultat[i]).length);

  return(nb);
}


function NombreCaracteresAlphabeticMajuscule (val)
{
  var nb= 0;
  var resultat = val.match(regExpAlphabeticMajuscule);
  if (resultat)
    for (i=0; i<resultat.length; ++i)
      nb += ((resultat[i]).length);

  return(nb);
}


// Auto-complétion du champ Pseudo (identification)
function cu (t, n)
{
  if (n == 1)
  {
    if (t.value == '')
    {
      t.value = 'Pseudo';
    }
  }
  else if (n == 0)
  {
    var u = 'Pseudo';
    if (t.value == u)
    {
      t.value = '';
    }
  }
}


// Auto-complétion du champ Password (identification)
function cp (t, n)
{
  if (n == 1)
  {
    if (t.value == '')
    {
      t.value = 'd2modsrock';
    }
  }
  else if (n == 0)
  {
    if (t.value == 'd2modsrock')
    {
      t.value = '';
    }
  }
}


// Open new window
function opnews(url)
{
  window.open(url, "CandiULB_news", "width=350,height=350,scrollbars" );
}


// Open new window 
function ophtml(url)
{
  window.open(url, "CandiULB_concours", "width=550,height=350,scrollbars" );
}


// Vérification du code postal (4 chiffres)
function verifZipCode (zipcode)
{
  var reg     = /^\d{4}$/;
  // var zipcode = document.getElementById("ZipCode").value;

  if (reg.exec(zipcode) == null)
  {
    alert('Veuillez introduire un code postal à 4 chiffres...');

    return false;
  }
}
