function initEditDate (field, initialValue, obligatory)
{
var formName = field.form.name;
var fieldName = field.name;
field.fieldType = DATE;
field.obligatory = obligatory;
field.pattern = datePattern;
if (dateSeparator != "")
field.separator = dateSeparator;
else
{
field.separator = searchSeparator(datePattern);
dateSeparator = field.separator;
}
field.nbCharDay = 0;
field.dayPosition = 0;
field.nbCharMonth = 0;
field.monthPosition = 0;
field.nbCharYear = 0;
field.yearPosition = 0;
parseDatePattern(field);
if (initialValue != null && initialValue != "")
{
field.value = formatEditDate(field, initialValue);
}
field.onfocus = new Function("beginEditDate('" + fieldName +  "','" + formName + "')");
field.onblur = new Function("commitEditDate('" + fieldName +  "','" + formName + "')");
}
function beginEditDate(fieldName, formName)
{
var field = document.forms[formName].elements[fieldName];
var msg = "";
if (formError == "" || formError == fieldName)
{
if (field.error == true)
{
msg = messageFormat(field.errorMsg, field.value, datePattern);
}
else
{
field.helpMsg = dateFormat;
msg = messageFormat(field.helpMsg, datePattern);
}
showMessage(field, msg);
field.select();
field.onkeypress = isDateKeyPress;
}
}
function commitEditDate(fieldName, formName)
{
var field = document.forms[formName].elements[fieldName];
var dateOk = true;
var messageString = "";
if (field.value != "" && (formError == "" || formError == fieldName))
{
validateEditDate(field);
}
else
{
formError = "";
field.error = false;
}
}
function validateEditDate(field)
{
//if (checkEditDate(field))
//{
field.error = false;
formError = "";
return true;
//}
//else
//{
//field.error = true;
//field.errorMsg = invalideDateFormat;
//formError = field.name;
//field.focus();
//return false;
//}
}
function formatEditDate(field, date)
{
var i = 0;
var formatedDate = "";
var day = "";
var month = "";
var year = "";
day = date.substring(6, 8);
month = date.substring(4, 6);
year = date.substring(4-field.nbCharYear, 4);
for (i=0; i<=2; i++)
{
if (field.dayPosition == i)
formatedDate = formatedDate + day;
else if (field.monthPosition == i)
formatedDate = formatedDate + month;
else if (field.yearPosition == i)
formatedDate = formatedDate + year;
}
formatedDate = addSeparator(field, formatedDate);
return formatedDate;
}
function unformatEditDate(field)
{
var standardDate = "";
var date = field.value;
standardDate = date.split(field.separator);
return (formatYear(field, standardDate[field.yearPosition]) + standardDate[field.monthPosition] + standardDate[field.dayPosition]);
}
function checkEditDate(field)
{
var standardDate = "";
var day = "";
var month = "";
var year = "";
var date = "";
if (field.value != "")
{
date = addSeparator(field, field.value);
standardDate = date.split(field.separator);
day = parseInt(standardDate[field.dayPosition], 10);
month = parseInt(standardDate[field.monthPosition], 10);
year = parseInt(standardDate[field.yearPosition], 10);
year = year<10?"0" + year:year;
if (field.nbCharYear == 4 && year < 1000)
{
year = formatYear(field, year);
}
if (isNaN(day) || isNaN(month) || isNaN(year) || String(year).length > field.nbCharYear)
{
return false;
}
else
{
if (checkDate(day, month, year))
{
day = day<10?"0" + day:day;
month = month<10?"0" + month:month;
standardDate[field.dayPosition] = day;
standardDate[field.monthPosition] = month;
standardDate[field.yearPosition] = year;
field.value = standardDate[0] + field.separator + standardDate[1] + field.separator + standardDate[2];
return true;
}
else
{
return false;
}
}
}
return true;
}
function formatYear(field, year)
{
if (year >= 79)
{
if (String(year).length == 2)
year = "19" + year;
else if (String(year).length == 3)
year = "0" + year;
}
else
year = "20" + year;
return year;
}
function parseDatePattern(field)
{
var i = 0;
var count = 0;
var lastCar = "";
for (i=0; i<field.pattern.length; i++)
{
switch (field.pattern.charAt(i))
{
case 'd':
field.nbCharDay++;
if (lastCar != 'd')
field.dayPosition = count++;
break;
case 'M':
field.nbCharMonth++;
if (lastCar != 'M')
field.monthPosition = count++;
break;
case 'y':
field.nbCharYear++;
if (lastCar != 'y')
field.yearPosition = count++;
break;
case 'E':
field.nbCharDayInWeek++;
if (lastCar != 'E')
field.dayInWeekPosition = count++;
break;
default:
break;
}
lastCar = field.pattern.charAt(i);
}
}
function addSeparator(field, date)
{
if (date.indexOf(field.separator) == -1)
{
if (field.yearPosition == 0)
return date.substring(0,field.nbCharYear) + field.separator + date.substring(field.nbCharYear,field.nbCharYear+2) + field.separator + date.substring(field.nbCharYear+2,field.nbCharYear+4);
else if (field.yearPosition == 1)
return date.substring(0,2) + field.separator + date.substring(2,field.nbCharYear+2) + field.separator + date.substring(field.nbCharYear+2,field.nbCharYear+4);
else
return date.substring(0,2) + field.separator + date.substring(2,4) + field.separator + date.substring(4,8);
}
else
{
return date;
}
}
function searchSeparator(pattern)
{
var reg = new RegExp("\\W");
var indexOfChar = pattern.search(reg);
if (indexOfChar == -1)
return "";
else
return ("" + pattern.charAt(indexOfChar));
}
function checkDate(day, month, year)
{
var date = new Date(year, month - 1, day);
return (date.getDate() == day && date.getMonth() == month-1);
}
function isDateKeyPress(e)
{
if (!isDate(getChar(e)))
return false;
else
return true;
}
function isDate(c)
{
var reg = new RegExp("[0-9]|\\" + dateSeparator + "|[\\b]");
return (c.match(reg));
}
function showDisabledDate(date, longFormat)
{
var field = new Object;
var formatedDate = "";
field.fieldType = DATE;
field.pattern = "";
field.separator = "";
field.nbCharDay = 0;
field.dayPosition = 0;
field.nbCharMonth = 0;
field.monthPosition = 0;
field.nbCharYear = 0;
field.yearPosition = 0;
field.nbCharDayInWeek = 0;
field.dayInWeekPosition = 0;
if (longFormat == false)
{
field.pattern = datePattern;
field.separator = searchSeparator(datePattern);
}
else
{
field.pattern = longDatePattern;
}
parseDatePattern(field);
if (longFormat == false)
{
formatedDate = formatEditDate(field, date);
}
else
{
formatedDate = formatEditLongDate(field, date);
}
document.write(formatedDate);
return formatedDate;
}
function formatEditLongDate(field, date)
{
var i = 0;
var formatedDate = "";
var day = "";
var month = "";
var year = "";
var aDate = null;
var nbChar = 0;
var aPattern = "";
day = date.substring(6, 8);
month = date.substring(4, 6);
year = date.substring(4-field.nbCharYear, 4);
aDate = new Date(year, month-1, day);
aPattern = field.pattern;
for (i=0; i<=3; i++)
{
if (field.dayPosition == i)
{
formatedDate = formatedDate + day;
nbChar = field.nbCharDay;
}
else if (field.monthPosition == i)
{
if (field.nbCharMonth <= 2)
formatedDate = formatedDate + aDate.getMonth() + "";
else
formatedDate = formatedDate + monthInYear[aDate.getMonth()];
nbChar = field.nbCharMonth;
}
else if (field.yearPosition == i)
{
formatedDate = formatedDate + year;
nbChar = field.nbCharYear;
}
else if (field.dayInWeekPosition == i)
{
formatedDate = formatedDate + dayInWeek[aDate.getDay()];
nbChar = field.nbCharDayInWeek;
}
aPattern = aPattern.slice(nbChar, aPattern.length);
while (searchSeparator(aPattern.toString().charAt(0)) != "")
{
formatedDate = formatedDate + searchSeparator(aPattern.toString());
aPattern = aPattern.slice(1, aPattern.length);
}
}
return formatedDate;
}
