// FormCheck.js
var defaultEmptyOK = false;

// these variables identifies the possible languages
var FR=1; // français
var US=2; // anglais
var SP=3; //espagnol
var DE=4; //allemand

// English is the default language. 
var defaultLanguage = US;
// Current language variable
var LANGUAGE=defaultLanguage;

// base for changing short years into long years
// for instance : 10/10/02 becomes 10/10/2002
var DATEBASE=2000;

// these variable is useful to put in temporary strings for prompting, warning, etc.
var aMessage;
aMessage="";

var aEmptyFields;
aEmptyFields="";
var aErrors;
aErrors="";
var aWarnings;
aWarnings="";

language=FR
// BOI, followed by one lower or uppercase English  and French letter, followed by EOI.
var reLetter;
reLetter = /^[a-zA-Zàâéêèïîôûùç]$/;

// BOI, followed by one or more lower or uppercase English  and French letters, 
// followed by EOI.
var reAlphabetic;
reAlphabetic = /^[a-zA-Zàâéêèïîôûùç'\s\-]+$/;

var reNonSignificantWord=/^(un|une|des|et|comme|tel|le|la|les|de|par|je|tu|il|elle|nous|vous|ils|elles|là|sur|ou|où|que|quel|quels|quelle|quelles|ce|cette|ces|ceci|cela|ceux|celle|celles|avec|moi|toi|lui|te|tes|ses|se|ni|vu|mi|es|ès|si|ai|sa|ta|ma|au|en|on)$/;
// whitespace characters as defined by this sample code 

var reWhitespace = /^\s+$/; 
// Check whether string s is empty. 

var reAlphabetic;
reAlphabetic = /^[a-zA-ZÀÂÆÇÈÉÊËÎÏÔÙÛÜàâçèéêëîïôùûü'\s\-]+$/;
var reSpecialChars;
reSpecialChars = /^['\s\-.]+$/;

// BOI, followed by one or more lower or uppercase English letters
// or digits, followed by EOI.
var reAlphanumeric;
reAlphanumeric = /^[a-zA-ZÀÂÆÇÈÉÊËÎÏÔÙÛÜàâçèéêëîïôùûü0-9'\s\-.]+$/; 

var reAdresse;
reAdresse = /^[a-zA-ZÀÂÆÇÈÉÊËÎÏÔÙÛÜàâçèéêëîïôùûü0-9'\s\-,.]+$/; 
// ATTENTION !!!!!!!!!!!!!!!!!!!!!!!!!! ajout des caractères , et . pour les adresses


var reSeparators;
reSeparators=/['\s\-]/;

var reCaracteresNonSpeciaux=/^[a-zA-Zàâéêèïîôûùç0-9_]+$/;

// BOI, followed by one or more lower or uppercase English  and French letters, 
// followed by EOI.
var reWord;
reWord=/^[a-zA-Zàâéêèïîôûùç]+$/;

// BOI, followed by one lower or uppercase English letter
// or digit, followed by EOI.
var reLetterOrDigit;
reLetterOrDigit = /^([a-zA-Zàâéêèïîôûùç]|\d)$/;


// BOI, followed by one or more digits
// ... followed by EOI
// phone number (without any delimiter) regular expressions to take account of some particularities
var rePhoneNumber;
rePhoneNumber=/^0[1-9](\d+)/

// BOI, followed by one digit, followed by EOI.
var reDigit = /^\d/;


// BOI, followed by one or more digits, followed by EOI.
var reInteger = /^\d+$/;


// BOI, followed by an optional + or -, followed by one or more digits, 
// followed by EOI.
var reSignedInteger = /^(\+|-)?\d+$/

// BOI, followed by one or more characters, followed by @,
// followed by one or more characters, followed by ., 
// followed by one or more characters, followed by EOI.
var reEmail = /^[a-zA-Z_0-9][\.a-zA-Z_0-9-]+\@[a-zA-Z_0-9][a-zA-Z_0-9-\.]+\.[a-zA-Z_0-9-]+$/;

var reUrl = /^(\w+):\/\/([\w.]+)\/(\S*)$/;

var reHttpUrl = /^(http):\/\/([\w.]+)\/(\S*)$/;

var rePicture = /^[\w_0-9]+\.([\w]+)$/;


// whitespace characters as defined by this sample code
var whitespace = " \t\n\r";

var daysInMonth = new Array(0,31,29,31,30,31,30,31,31,30,31,30,31);
// VARIABLE DECLARATIONS

var lowercaseLetters;
lowercaseLetters = "abcdefghijklmnopqrstuvwxyzàâéêèïîôûùç";

var uppercaseLetters;
uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZÀÂÉÊÈÏÎÔÛÙÇ";

// var 
// digits
var digits = "0123456789";

// non-digits characters which are allowed in dates
var dateDelimiters;
dateDelimiters = "/- ";

// non-digits characters which are allowed in hours
var hourDelimiters;
hourDelimiters = ":";


// My preferred date delimiter
var preferredDateDelimiter;
preferredDateDelimiter="/";

// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters;
phoneNumberDelimiters = "()- ";

// characters which are allowed in US  and French phone numbers
var validPhoneChars;
validPhoneChars = digits + phoneNumberDelimiters;

// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars;
validWorldPhoneChars = digits + phoneNumberDelimiters + "+";

// U.S. and French phone numbers have 10 digits.
// They are formatted as 123 456 7890 or (123) 456-7890 for US and 01 45 48 47 96 for French.
var digitsInPhoneNumber;
digitsInPhoneNumber = 10;


// non-digit characters which are allowed in ZIP Codes
var ZIPCodeDelimiters;
ZIPCodeDelimiters = "";


// our preferred delimiter for reformatting ZIP Codes
var ZIPCodePreferredDelimeter;
ZIPCodePreferredDelimeter = "-";
ZIPCodePreferredDelimeter = "";

// characters which are allowed in Social Security Numbers
var validZIPCodeChars;
validZIPCodeChars = digits + ZIPCodeDelimiters;


// U.S. ZIP codes have 5 or 9 digits.
// They are formatted as 12345 or 12345-6789.
// French ones have 5 digit with the folowing format 12345
var digitsInZIPCode1;
var digitsInZIPCode2;
digitsInZIPCode1 = 5;
digitsInZIPCode2 = 5;


// CONSTANT STRING DECLARATIONS
// (grouped for ease of translation and localization)

// m is an abbreviation for "missing"
// FR
var mPrefix;
var mSuffix;
mPrefix = "Vous n'avez pas saisi de valeur dans le champ ";
mSuffix = ". Ce champ est obligatoire..\n";

// s is an abbreviation for "string"
var sLastName;
var sFirstName;
var sWorldLastName;
var sWorldFirstName;
var sTitle;
var sCompanyName;
var sAddress;
var sWorldAddress;
var sCity;
var sStateCode;
var sWorldState;
var sCountry;
var sZIPCode;
var sWorldPostalCode;
var sPhone;
var sFax;
var sDateOfBirth;
var sExpirationDate;
var sEmail;
var sOtherInfo;

// FR
sLastName = "Nom";
sFirstName = "Prénom";
sWorldLastName = "Nom de Famille";
sWorldFirstName = "Nom d'usage";
sTitle = "Titre";
sCompanyName = "Nom de Société";
sAddress = "Adresse";
sWorldAddress = "Adresse";
sCity = "Ville";
sStateCode = "Code d'Etat";
sWorldState = "Etat, Province, or Préfecture";
sCountry = "Pays";
sZIPCode = "Code Postal";
sWorldPostalCode = "Code Postal";
sPhone = "Numéro de Téléphone";
sFax = "Numéro de Fax";
sDateOfBirth = "Date de Naissance";
sExpirationDate = "Date d'Expiration";
sEmail = "Adresse électronique";
sOtherInfo = "Autre Information";



// i is an abbreviation for "invalid"
var iStateCode;
var iZIPCode;
var iPhone;
var iWorldPhone;
var iPicture;
var iEmail;
var iUrl;
var iHttpUrl;
var iDay;
var iMonth;
var iYear;
var iDatePrefix;
var iDateSuffix;
var iDate;
var iHour;
var iFieldLenMax;
var iFieldLenMin;
var iFieldLenBetween;
var iFieldLen;
var iDateModelMismatch ;
var iHourModelMismatch ;
var iEmptyFields;
var iNumber;
var iGreaterThan;
var iLessThan;
var iConjonction;
var iHeadMessage;
var iWarningFields;
var iAlphabetic;
var iWord;
var iAlphanumeric;
var iUndefinedSubType;
var iCaracteresSpeciaux;
var ireCaracteresNonSpeciaux
// FR
ireCaracteresNonSpeciaux= "/" 
ireCaracteresSpeciaux="Le nom de fichier n'est pas valide.\n-   ne pas utiliser des caractères spéciaux du type (&, ‘, #, @, *, -, (, [, ., }, |,….).\n-   remplacer les espaces blancs ( ) par des underscore (_).";
iStateCode = "Ce champ doit contenir un code valide à 2 lettre (comme FR pour France).\n";
iZIPCode = "Ce champ doit contenir un code postal à 5 chiffres (comme 12345). \n";
iPhone = "Ce champ doit contenir un numéro de téléphone à 10 chiffres (comme 01 23 45 67 89).\n";
iWorldPhone = "Ce champ doit contenir un numéro de téléphone international valide.\n";
iPicture = "Ce champ doit contenir un nom de Fichier valide (comme CV.doc).\nLes extensions possibles sont: ";
iEmail = "Ce champ doit contenir une adresse électronique valide(comme abc@def.com).\n";
iUrl = "Ce champ doit contenir une adresse Url valide (comme http://www.google.fr).\n";
iHttpUrl = "Ce champ doit contenir une adresse Url HTTP valide (comme http://www.google.fr).\n";
iDay = "Ce champ doit contenir une valeur de jour compris entre 1 et 31.\n";
iMonth = "Ce champ doit contenir une valeur de mois compris entre 1 et 12.\n";
iYear = "Ce champ doit contenir une valeur d'année à 2 ou 4 chiffres.\n";
iDatePrefix = "Le jour, le mois et l'année de ";
iDateSuffix = " ne forment pas une date valide.\n";
iDate = "Ce champ n'est pas une date valide.\n";
iHour = "Ce champ n'est pas une heure valide.\n";
iFieldLenMax = "La taille maximum (nombre de caractères) pour ce champ est ";
iFieldLenMin = "La taille minimum (nombre de caractères) pour ce champ est ";
iFieldLen = "La taille (nombre de caractères) pour ce champ doit être ";
iFieldLenBetween = "La taille (nombre de caractères) pour ce champ doit être comprise entre ";
iDateModelMismatch = "Format à respecter : ";
iHourModelMismatch = "Et, prenez garde au modèle qui se présente sous la forme: ";
iEmptyFields = "Les champs requis suivants sont vides : ";
iNumber = "Ce champ doit contenir une valeur numérique.\n";
iGreaterThan = " supérieur(e) à ";
iLessThan = " inférieur(e) à ";
iConjonction = " et ";
iHeadMessage = "______________________________________________________________________\n\n";
iHeadMessage += "Ce formulaire n'a pas été envoyé à cause des erreurs suivantes.\n";
iHeadMessage += "Veuillez corriger ces erreurs avant de re-soumettre le formulaire, SVP.\n";
iHeadMessage += "______________________________________________________________________\n\n";
//iWarningFields = "______________________________________________________________________\n\n";
//iWarningFields += "Ce formulaire sera expédié malgré les avertissements suivants.\n";
//iWarningFields += "______________________________________________________________________\n\n";
iAlphabetic= "Ce champ doit contenir des caractères alphabétiques.\n";
iWord= "Ce champ doit contenir un mot sans séparateurs.\n"; 
iAlphanumeric= "Ce champ doit contenir des caractères alphanumériques.\n"; 
iUndefinedSubType= "Ce champ n'est pas typé avec la propriété subType.\n";

// p is an abbreviation for "prompt"
var pEntryPrompt;
var pStateCode;
var pZIPCode;
var pZIPCode;
var pPhone;
var pWorldPhone;
var pEmail;
var pDay;
var pMonth;
var pYear;

// FR
pEntryPrompt = "Saisissez SVP ";
pStateCode = "un code pays à deux lettres (comme FR).";
pZIPCode = "un code postal à 5 chiffres (comme 75000).";
pPhone = "un numéro de téléphone à 10 chiffres.";
pWorldPhone = "un numéro de téléphone international.";
pEmail = "une adresse électronique valide (comme foo@bar.com).";
pDay = "un jour compris entre 1 et 31.";
pMonth = "un mois  compris entre 1 et 12.";
pYear = "une année à 2 or 4 chiffres.";

// Valid U.S. Postal Codes for states, territories, etc.
var StateCodeDelimiter;
var StateCodes;
StateCodeDelimiter = "";
StateCodes = "";

//Date formats
var StandardDateModel;
StandardDateModel = "DD/MM/YYYY or DD/MM/YY";


var ST_ALLDATE=0;
var ST_DATE=1;
var ST_ZIPCODE=2;
var ST_ALPHABETIC =3;
var ST_ALPHANUMERIC =4;
var ST_EMAIL =5;
var ST_PHONE =6;
var ST_WORLDPHONE =7;
var ST_STATECODE =8;
var ST_WORD=9;
var ST_URL =10;
var ST_HTTPURL =11;
var ST_PICTURE =12;
var ST_NUMERIC = 13;
var ST_FILE=14;
var ST_FREE=15;