// ******************************************
// *  checkDate (Validierung eines Datums)  *
// ******************************************
// *  (c) 24.02.2005 by Cynapsis/Sitepark   *
// *                    (Frank Legge)       *
// ******************************************

function checkDate(field)
{
   var DateOK = 1;
   var newval = "";
   MonthLong  = new Array (1, 3, 5, 7, 8, 10, 12);
   MonthShort = new Array (4, 6, 9, 11);
   
   if (field.value != '')
   {
      // fuehrende und nachfolgende Leerzeichen entfernen und mehrfache Leerzeichen durch einfache erstezen
      val  = field.value.replace(/\s+/,' ').replace(/^\s+/g,'').replace(/\s+$/g,'');
      vals = val.split(' ');
      
      // Datum pruefen ...
      values = vals[0].split('.');
      
      if (values.length == 3)
      {
         if (values[0].length > 2 || values[0].length < 1 || isNaN(values[0]) || values[0] < 1)
         {
            DateOK = 0;
         }
         else if (values[1].length > 2 || values[1].length < 1 || isNaN(values[1]) || values[1] > 12 || values[1] < 1) 
         {
            DateOK = 0;
         }
         else if ((values[2].length != 2 && values[2].length != 4) || isNaN(values[2]))
         {
            DateOK = 0;
         }
         
         for (c = 0; c < MonthLong.length; c++)
         {
            if (values[1] == MonthLong[c])
            {
               if (values[0] > 31)
               {
                  DateOK = 0;
               }
            }
         }
         
         for (c = 0; c < MonthShort.length; c++)
         {
            if (values[1] == MonthShort[c])
            {
               if (values[0] > 30)
               {
                  DateOK = 0;
               }
            }
         }
         
         if (values[0].length == 1) values[0] =  "0" + values[0];
         if (values[1].length == 1) values[1] =  "0" + values[1];
         if (values[2].length == 2) values[2] = ((values[2]<30) ? "20" : "19") + values[2];
         
         // ... und jetzt noch den Februar ueberpruefen
         
         if (values[1] == 2)
         {
            if (values[2] % 4 == 0 && ((values[2] % 100 != 0) || (values[2] % 400 == 0)))
            {
               if (values[0] > 29)
               {
                  DateOK = 0;
               }
            }
            else
            {
               if (values[0] > 28)
               {
                  DateOK = 0;
               }
            }
         }
      }
      else
      {
         DateOK = 0;
      }
      
      if (DateOK) newval = values[0] + "." + values[1] + "." + values[2];
      
      // ... und ggf. noch Zeitangabe pruefen
      if (vals.length == 2)
      {
         values = vals[1].split(':');
         
         if (values.length == 2 || values.length == 3)
         {
            if (values[0].length > 2 || values[0].length < 1 || isNaN(values[0]) || values[0] > 23 || values[0] < 0)
            {
               DateOK = 0;
            }
            else if (values[1].length > 2 || values[1].length < 1 || isNaN(values[1]) || values[1] > 59 || values[1] < 0) 
            {
               DateOK = 0;
            }
            
            if (values[0].length == 1) values[0] = "0"  + values[0];
            if (values[1].length == 1) values[1] = "0"  + values[1];
            
            time = values[0] + ":" + values[1];
            
            if (values.length == 3)
            {
               if (values[2].length > 2 || values[2].length < 1 || isNaN(values[2]) || values[2] > 59 || values[2] < 0)
               {
                  DateOK = 0;
               }
               
               if (values[2].length == 1) values[2] = "0"  + values[2];
               
               time = time + ":" + values[2];
            }
         }
         else
         {
            DateOK = 0;
         }
         
         if (DateOK) newval = newval + " " + time;
      }
   }
   
   if (!DateOK)
   {
      alert ('Ihre Eingabe ist kein gültiges Datum: ' + field.value);
      field.focus();
      field.select();
      return false;
   }
   else
   {
      field.value = newval;
      return true;
   }
}
