function LeapYear(yr)
{
/* Is it a leap year?
   1.Years divisible by 4 are leap years, but
   2.Years divisible by 100 are not leap years, but
   3.Years divisible by 400 are leap years. */

if (((yr % 4 == 0) && yr % 100 != 0) || yr % 400 == 0)
   return true;
else
   return false;
}

function IsDate(InString)
{
/* Note: Date must be in the format dd/jj/aaaa */

/* Allow empty fields as dates. */

   if (InString.value.length >0)
   {

      Slashes   = 0;
      Month     = 0;
      Day       = 0;
      Year      = 0;
      RefString = "01234567890/";

      for (i=0; i<InString.value.length; i++)
      {
         TempChar = InString.value.substring(i, i +1);

         /* Invalid character? */

         if (RefString.indexOf(TempChar,0) == -1) { /*alert ( "Caractère invalide dans la date.  Le format doit être: jj/mm/aaaa." );*/ return (false); }

         /* Must have two slashes */

         if ( TempChar == "/" ) { Slashes++; }

      } /* end for */

      if ( Slashes != 2 ) { /*alert ( "La Date doit contenir seulement deux slashes.  Le format doit être: jj/mm/aaaa." );*/ return (false); }


      /* Parse out the date pieces */

      i =  0;
      x = "";

      /* Day */

      while ((InString.value.charAt(i) != "/") && (i <= InString.value.length))
      {
        x = x +  InString.value.charAt(i);
        i++;
      }
      Day = Day + x;

      if (( Day < 1 ) || ( Day > 31 )) { /*alert ( "Le Jour doit être entre 1 et 31." );*/ return (false); }

      /* Month */

      i++; // Skip the slash
      x = "";
      while ((InString.value.charAt(i) != "/") && (i <= InString.value.length))
      {
        x = x +  InString.value.charAt(i);
        i++;
      }
      Month = Month + x;  // Rely on implicit conversion of char string x to a number

      if (( Month < 1 ) || ( Month > 12 )) { /*alert ( "Le Mois doit être entre 1 et 12." );*/ return (false); }

      /* Year */

      i++;
      x = "";
      while ((InString.value.charAt(i) != "/") && (i <= InString.value.length))
      {
        x = x +  InString.value.charAt(i);
        i++;
      }
      Year = Year + x;

      if (( Year < 1000 ) || ( Year > 9999 )) { /*alert ( "L'Année doit être entre 1000 et 9999." );*/ return (false); }

      /* Check Day a bit more closely */

      if (( Month == 4 || Month == 6 || Month == 9 || Month == 11 ) && ( Day > 30 ))
      {
         //alert( "Le mois " + Month + " ne peut pas avoir plus que 30 jours." );
         return ( false );
      }

      if ( Month == 2)
      /* Check leap year */
      {
         /* Is it a leap year?
            1.Years divisible by 4 are leap years, but
            2.Years divisible by 100 are not leap years, but
            3.Years divisible by 400 are leap years. */

         if ( LeapYear(Year) )
         {
            if ( Day > 29 ) { /*alert( "Février ne peut pas avoir plus que 29 jours en " + Year + "." );*/ return ( false ); }
         }
         else
         {
            if ( Day > 28 ) { /*alert( "Février ne peut pas avoir plus que 28 jours en " + Year + "." );*/ return ( false ); }
         }

      }
   }
   return ( true );
}

