

function fnTestDate(s) { if (s.match(/(19[0-9]{2}|20[0-9]{2})((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01])|(0[469]|11)(0[1-9]|[12][0-9]|30)|(02)(0[1-9]|[12][0-9]))/)==null) return false; else return true; }


// m is an abbreviation for "missing"

var mPrefix = "Vous n'avez pas entré une valeur dans le champ "
var mSuffix = " C'est un champ obligatoire, veuillez entrer une valeur maintenant."

// s is an abbreviation for "string"

var sEmail = "Email"
var sOtherInfo = "Autre Information"
// i is an abbreviation for "invalid"

var iEmail = "Ce champ doir avoir une adresse email valide (i.e: foo@bar.com)."
var iDay = "Le jour doit être compris entre 1 and 31"
var iMonth = "Le mois doit être compris entre 1 and 12"
var iYear = "Année doit être de 4 caractères de long"
var iDatePrefix = ""
var iDateSuffix = ""


// p is an abbreviation for "prompt"

var pEntryPrompt = "Veuillez entrez une"
var pEmail = "valide addresse email  (comme foo@bar.com)."
var pDay = "numéro de jour compris entre 1 et 31."
var pMonth = "numéro de mois compris entre 1 and 12."
var pYear = "année sur 2 ou 4 chiffres."


function makeArray(n) {
   for (var i = 1; i <= n; i++) {
      this[i] = 0
   }
   return this
}


function isEmpty(s)
{  return ((s == null) || (s.length == 0))
}

function isWhitespace (s)
{
    var i = 0;
    var sLength = s.length;
    if (sLength==0) return true;
    while ((i < sLength) && (s.charAt(i++) != " "));
    if (i==sLength) return false;
        else return true;
}

function isEmail (s)
{
    if (isEmpty(s))
       if (isEmail.arguments.length == 1) return false;
       else return (isEmail.arguments[1] == true);

    // is s whitespace?
    if (isWhitespace(s)) return false;

    // there must be >= 1 character before @, so we
    // start looking at character position 1
    // (i.e. second character)
    var i = 1;
    var sLength = s.length;

    // look for @
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    // look for .
    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }

    // there must be at least one character after the .
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}



function isYear (s)
{
if (isEmpty(s))
       if (isYear.arguments.length == 1) return false;
       else return (isYear.arguments[1] == true);
    //if (!isNonnegativeInteger(s)) return false;
    //return ((s.length == 2) || (s.length == 4));
    return (s.length == 4);
}
function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

// isInteger (STRING s [, BOOLEAN emptyOK])
function isInteger (s)

{   var i;

    if (isEmpty(s))
       if (isInteger.arguments.length == 1) return false;
       else return (isInteger.arguments[1] == true);

    // Search through string's characters one by one
    // until we find a non-numeric character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {
        // Check that current character is number.
        var c = s.charAt(i);

        if (!isDigit(c)) return false;
    }

    // All characters are numbers.
    return true;
}



function isIntegerInRange (s, a, b)
{   if (isEmpty(s))
       if (isIntegerInRange.arguments.length == 1) return false;
       else return (isIntegerInRange.arguments[1] == true);

    // Catch non-integer strings to avoid creating a NaN below,
    // which is not available on JavaScript 1.0 for Windows.
    if (!isInteger(s, false)) return false;

    // Now, explicitly change the type to integer via parseInt
    // so that the comparison code below will work both on
    // JavaScript 1.2 (which typechecks in equality comparisons)
    // and JavaScript 1.1 and before (which does not).
    var num = parseInt (s);
    return ((num >= a) && (num <= b));
}

function isMonth (s)
{
if( s.charAt(0) == "0" && s.length>1 )
   s = s.charAt(1);
   if (isEmpty(s))
       if (isMonth.arguments.length == 1) return false;
       else return (isMonth.arguments[1] == true);
    return isIntegerInRange (s, 1, 12);
}


function isDay (s)
{
// (JLM) Bug Javascript:Supprimer les '0' inutiles dans les mois et jours
  if( s.charAt(0) == "0" && s.length>1 )
    s = s.charAt( 1 );
  if (isEmpty(s))
       if (isDay.arguments.length == 1) return false;
       else return (isDay.arguments[1] == true);
    return isIntegerInRange (s, 1, 31);
}

function daysInFebruary (year)
{   // February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}

function isDate (year, month, day)
{

  var daysInMonth = makeArray(12);
  daysInMonth[1] = 31;
  daysInMonth[2] = 29;   // must programmatically check this
  daysInMonth[3] = 31;
  daysInMonth[4] = 30;
  daysInMonth[5] = 31;
  daysInMonth[6] = 30;
  daysInMonth[7] = 31;
  daysInMonth[8] = 31;
  daysInMonth[10] = 31;
  daysInMonth[11] = 30;
  daysInMonth[12] = 31;
   daysInMonth[9] = 30;

  var fullDate = ""+day+"/"+month+"/"+year;

  if(fullDate.match(/((0[1-9]|[12][0-9]|3[01])\/(0[13578]|1[02])|(0[1-9]|[12][0-9]|30)\/(0[469]|11)|(0[1-9]|[12][0-9])\/(02))\/(19[0-9]{2}|20[0-9]{2})/)==null){ return false; }


 // catch invalid years (not 4-digit) and invalid months and days.
    if (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) return false;

    // Explicitly change type to integer to make code work in both
    // JavaScript 1.1 and JavaScript 1.2.
    var intYear = parseInt(year);
    var intMonth = parseInt(month);
    var intDay = parseInt(day);


    // catch invalid days, except for February
    if (intDay > daysInMonth[intMonth]) return false;

    if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;

    return true;
}




/* FUNCTIONS TO NOTIFY USER OF INPUT REQUIREMENTS OR MISTAKES. */


// Display prompt string s in status bar.

function prompt (s)
{   window.status = s
}



// Display data entry prompt string s in status bar.

function promptEntry (s)
{   window.status = pEntryPrompt + s
}


function warnEmpty (theField, s)
{   theField.focus()
    //alert(mPrefix + s + mSuffix)
    return false
}

function warnInvalid (theField, s)
{   theField.focus()
    theField.select()
    alert(s)
    return false
}


function checkString (theField, s, emptyOK)
{   // Next line is needed on NN3 to avoid "undefined is not a number" error
    // in equality comparison below.
    if (checkString.arguments.length == 2) emptyOK = false;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value))
       return warnEmpty (theField, s);
    else return true;
}

function checkEmail (theField, emptyOK)
{   if (checkEmail.arguments.length == 1) emptyOK = false;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else if (!isEmail(theField.value, false))
       return warnInvalid (theField, iEmail);
    else return true;
}

function checkYear (theField, emptyOK)
{   if (checkYear.arguments.length == 1) emptyOK = false;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isYear(theField.value, false))
       return warnInvalid (theField, iYear);
    else return true;
}


function checkMonth (theField, emptyOK)
{   if (checkMonth.arguments.length == 1) emptyOK = false;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isMonth(theField.value, false))
       return warnInvalid (theField, iMonth);
    else return true;
}

function checkDay (theField, emptyOK)
{   if (checkDay.arguments.length == 1) emptyOK = false;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isDay(theField.value, false))
       return warnInvalid (theField, iDay);
    else return true;
}

function checkDate (yearField, monthField, dayField, labelString, OKtoOmitDay)
{   // Next line is needed on NN3 to avoid "undefined is not a number" error
    // in equality comparison below.
    /*
    if (checkDate.arguments.length == 4) OKtoOmitDay = false;
    if (!isYear(yearField.value)) return warnInvalid (yearField, iYear);
    if (!isMonth(monthField.value)) return warnInvalid (monthField, iMonth);
    if ( (OKtoOmitDay == true) && isEmpty(dayField.value) ) return true;
    else if (!isDay(dayField.value))
       return warnInvalid (dayField, iDay);
    if (isDate (yearField.value, monthField.value, dayField.value))
       return true;
    alert (iDatePrefix + labelString + iDateSuffix)
    return false
    */
    if (!fnTestDate(yearField.value+monthField.value+dayField.value)){
            alert(labelString);
            return (false);
    } else {
            return (true);
    }
}

function cara_normal1(c)
{
  var digit=0;
  var lower=0;
  var upper=0;

if((c>="0")&&(c<="9"))
  {
  digit=1;
  }

   if((c>="a")&&(c<="z"))
   {
   lower=1;
   }
    if((c>="A")&&(c<="Z"))
   {
   upper=1;
   }
  if((digit==1)||(lower==1)||(upper==1))
  {
  return 1;
  }
  else
  {
   return 0;
  }

}

function cara_normal2(c)
{
  var digit=0;
  var lower=0;
  var upper=0;
  var space=0;

if((c>="0")&&(c<="9"))
  {
  digit=1;
  }

  if(c>=" ")
  {
  space=1;
  }

   if((c>="a")&&(c<="z"))
   {
   lower=1;
   }
    if((c>="A")&&(c<="Z"))
   {
   upper=1;
   }
  if((digit==1)||(space==1)||(lower==1)||(upper==1))
  {
  return 1;
  }
  else
  {
   return 0;
  }

}

function checkchain(valeur)
{
 var ret =0;
 for(var i=0; i<valeur.length; i++)
  {
   var caratere= valeur.substring(i, i+1);
   if( cara_normal1(caratere)==0)
    {
       ret= 1;

       return 0
    }
  }
  if(ret==0)
  {
  return 1;
  }
}
function checkchain2(valeur)
{
 var ret =0;
 for(var i=0; i<valeur.length; i++)
  {
   var caratere= valeur.substring(i, i+1);
   if( cara_normal2(caratere)==0)
    {
       ret= 1;

       return 0
    }
  }
  if(ret==0)
  {
  return 1;
  }
}
