

function user_date(udate)
{
  if (udate == null)
    return null;
  var vSpl = udate.split("/");
  if (vSpl.length != 3)
    vSpl = udate.split(".");
  if (vSpl.length != 3)
    vSpl = udate.split("-");
  if (vSpl.length != 3)
    return null;
  
  var vDay = parseInt(vSpl[0], 10);
  var vMonth = parseInt(vSpl[1], 10);
  var vYear = parseInt(vSpl[2], 10);
  
  if (isNaN(vDay)) return null;
  if (isNaN(vMonth)) return null;
  if (isNaN(vYear)) return null;
  
  //
  // Autocorrect 2 digit year
  //
  
  if (vYear > 9999) return null;
  if (vYear < 100)
    vYear += (vYear < 30) ? 2000 : 1900;
  if (vYear < 1760) return null;
  
  //
  // Check month input
  //
  
  if (vMonth < 1) return null;
  if (vMonth > 12) return null;
  vMonth--;
  
  //
  // Check date
  //
  
  if (vDay < 1) return null;
  var vLastDay = 32 - new Date(vYear, vMonth, 32).getDate();
  
  //
  // Autocut down month end values between 29 and 31
  //
  
  if (vDay > vLastDay && vDay < 32 && vDay > 28)
    vDay = vLastDay;
    
  //
  // Assume wrong input
  //
  
  if (vDay > vLastDay) return null;
  
  return new Date(vYear, vMonth, vDay);
}


function date_to_string(vDate)
{
   if (vDate == null) return null;
   
   var vDay = vDate.getDate().toString();
   var vMonth = (vDate.getMonth() + 1).toString();
   var vYear = vDate.getFullYear().toString();
   
   if (vDate.getFullYear() < 200)
     vYear = vDate.getFullYear() + 1900;
   
   while(vDay.length < 2) vDay = "0" + vDay;
   while(vMonth.length < 2) vMonth = "0" + vMonth;
   while(vYear.length < 4) vYear = "0" + vYear;
 
   return vDay + "/" + vMonth + "/" + vYear;
}


function user_date_iso(udate)
{
   var vDate = user_date(udate);
   if (vDate == null) return null;
   
   var dSplit = date_to_string(vDate).split("/");
 
   return dSplit[2] + dSplit[1] + dSplit[0];
}

function user_date_correct()
{
  if (arguments[0] == null)
    return;
    
  var dobj = arguments[0];
  var defdate = dobj.value;
  if (arguments[1] != null)
    defdate = arguments[1];
    
  var vSpl = dobj.value.split("/");
  if (vSpl.length != 3)
    vSpl = dobj.value.split(".");
  if (vSpl.length != 3)
    vSpl = dobj.value.split("-");
  
  //
  // First of all change to default
  //
  
  dobj.value = defdate;
  if (vSpl.length != 3) return;
   
  var vDay = parseInt(vSpl[0], 10);
  var vMonth = parseInt(vSpl[1], 10);
  var vYear = parseInt(vSpl[2], 10);
  
  //
  // Do not alter if entry
  // is definitivly wrong
  //
  
  if (isNaN(vDay)) return;
  if (isNaN(vMonth)) return;
  if (isNaN(vYear)) return;
  
  if (vYear > 9999) vYear = 9999;
  if (vYear < 100)
    vYear += (vYear < 30) ? 2000 : 1900;
  if (vYear < 1760) vYear = 1760; //Sybase problem
  if (vMonth < 1) vMonth = 1;
  if (vMonth > 12) vMonth = 12;
  vMonth--;
  if (vDay < 1) vDay = 1;
  var vLastDay = 32 - new Date(vYear, vMonth, 32).getDate();
  if (vDay > vLastDay) vDay = vLastDay;
  
  //
  // Alter to corrected value
  //
  
  var res = "";
  if (vDay < 10) res += "0";
  res += vDay + "\/";
  if (vMonth < 9) res += "0";
  res += (vMonth + 1) + "\/";
  res += vYear;
  
  dobj.value = res;       
  return;
}
