
//input: date in format "dd.mm.yyyy"
//returns a date object
function getDateObject(date)
{ 
   return new Date(date.substr(6,4), date.substr(3,2)-1, date.substr(0,2));
}

/*
  formats the input date. rules:
  1.1.04     -> 01.01.2004
  05-13-04   -> 13.05.2004
  05/13/04   -> 13.05.2004
  2004-12-13 -> 13.12.2004
*/
function formatDate(date)
{
  var formatSeparator = '.';       //separator for the formatted date
  var formattedDate = '';          //formatted date;

  var fractions = new Array(3);    //array of date fractions
  fractions[0] = '';
  fractions[1] = '';
  fractions[2] = '';

  findex=0;                        //fractionIndex
  var separator ='';               //separator from the input date

  //divide the date in 3 fractions
  for(i= 0; i < date.length && findex < 3;i++)
  {
    if(date.charAt(i) != '.' && date.charAt(i) != '-' && date.charAt(i) != '/')
    {
      fractions[findex]= fractions[findex] + date.charAt(i);
    }
    else
    {
      separator = date.charAt(i);
      findex++;
    }
  }
  if(fractions[0]!='' && fractions[1]!='' && fractions[2]!='')
  {
     if(fractions[0].length == 4)   //format 2004-12-13
     {
       fractions[1] = fillLeading0(fractions[1],2);
       fractions[2] = fillLeading0(fractions[2],2);

       formattedDate = fractions[2] + formatSeparator + fractions[1] + formatSeparator + fractions[0];
     }
     else
     {
       fractions[0] = fillLeading0(fractions[0],2);
       fractions[1] = fillLeading0(fractions[1],2);
       if(fractions[2].length < 4)
       {
         fractions[2] = '2' + fillLeading0(fractions[2],3);
       }
       if(separator != '.')   //if the separator is not a dot -> format is MM-DD-YYYY or MM/DD/YYYY
       {
         formattedDate = fractions[1] + formatSeparator + fractions[0] + formatSeparator + fractions[2];
       }
       else
       {
         formattedDate = fractions[0] + formatSeparator + fractions[1] + formatSeparator + fractions[2];
       }
     }
  }
  else
  {
     formattedDate = date;
  }
  return formattedDate;
}

/*
  Validate if fields value is a correct date format.
  @return true, if format is dd.dd.dddd; false, else
*/
function validateValidDateFormat(field) {
  var regexp = /\d\d\.\d\d\.\d\d\d\d/;  
  // format first
  var formattedDate = formatDate(field.value);
  // then validate
  return regexp.test(formattedDate);
}

/*
  Validate if fields value is a valid date.
  Correct Date: 12.05.2008
  Incorrect Dates: 00.05.2008 32.05.2008 01.00.2008 01.13.2008 01.05.0000
  @return true, if date is valid; false, else
*/
function validateValidDate(field) {
  var day = field.value.substr(0,2);
  var month = field.value.substr(3,2);
  var year = field.value.substr(6,4);
  
  var createdDateObj = getDateObject(field.value);
  var createdDay = createdDateObj.getDate();
  var createdMonth = createdDateObj.getMonth()+1;
  var createdYear = createdDateObj.getFullYear();

  return ((createdYear == year) && (createdMonth == month) && (createdDay == day));
}

function validateIsDateInPast(field) {
  //var now = new Date();
  var now = getDateObject(today);
  now = setDateToMidnight(now);

  var date = getDateObject(field.value);
  date = setDateToMidnight(date);
	
  return (now.getTime() > date.getTime());
}

function isSameDay(date1String, date2String){
  var date1 = getDateObject(date1String);
  var date2 = getDateObject(date2String);
  return (date1.getDate() == date2.getDate() && date1.getMonth() == date2.getMonth() && date1.getFullYear() == date2.getFullYear()); 
}

function setDateToMidnight(dateObj) {
  dateObj.setHours(0);
  dateObj.setMinutes(0);
  dateObj.setSeconds(0);
  dateObj.setMilliseconds(0);	
  return dateObj;
}

function isBefore(date1, date2) {
  var dateObj1 = getDateObject(date1);
  var dateObj2 = getDateObject(date2);
  return isDateObjectBefore(dateObj1, dateObj2);
}

function isDateObjectBefore(date1, date2) {
  var dateObj1 = setDateToMidnight(date1);
  var dateObj2 = setDateToMidnight(date2);
  return dateObj1.getTime() < dateObj2.getTime();
}
