// Librairie jQuery de sélection de date par calendrier pop-up.
// Version 1.5
// Créer par Marc-André Lamothe
// Copyright 2009 Vortex Solution.
/*
Content-Type: multipart/related; boundary="-"
---
Content-Location:left
Content-Transfer-Encoding:base64
R0lGODlhCgALAIAAAP///wAAACH5BAAAAAAALAAAAAAKAAsAAAIXjI8By2utonIRPPskzpjW22nMNzVechQAOw%3D%3D
---
Content-Location:right
Content-Transfer-Encoding:base64
R0lGODlhCgALAIAAAP///wAAACH5BAAAAAAALAAAAAAKAAsAAAIYjI8By2ugFHtRwnglzRVmhz2gZ11Nk6QFADs%3D
---
Content-Location:down
Content-Transfer-Encoding:base64
R0lGODlhDAAKAIAAAP///wAAACH5BAAAAAAALAAAAAAMAAoAAAIWjI8Hy22Q1IszrHhtftnp3oRcyFBRAQA7
*/
var calendarMonths = null;
var calendarWeekdays = null;
var calendarField = '';
var calendarCallback = null;
var calendarMonth = null;
var calendarYear = null;
var calendarTimeout = null;
function getFullYear(date)
{
if (date.getFullYear)
return date.getFullYear();
var Year = date.getYear() % 100;
return Year + (Year < 38 ? 2000 : 1900);
}
function getSelectedDate(fieldId)
{
var strings = $('#'+fieldId).val().split("-");
var date = new Date();
date.setFullYear(parseInt(strings[0],10));
date.setMonth(parseInt(strings[1],10)-1);
date.setDate(parseInt(strings[2],10));
return date;
}
function daysInMonth(date)
{
var Year = getFullYear(date);
var Month = date.getMonth();
var Values = [31,28,31,30,31,30,31,31,30,31,30,31];
if (Month == 1 && ((Year % 4 == 0 && Year % 100 != 0) || (Year % 4 == 0 && Year % 100 == 0 && Year % 400 == 0)))
return 29;
return Values[Month];
}
function gotoMonth(Year,Month)
{
calendarMonth = Month;
calendarYear = Year;
// Update the calendar
$('#month').html(calendarMonths[calendarMonth]);
$('#year').html(calendarYear);
loadCalendarContent();
// Hide the menus
$('#CalendarYears').hide();
$('#CalendarMonths').hide();
}
function gotoNextMonth()
{
gotoMonth((calendarMonth < 11 ? calendarYear : calendarYear+1),(calendarMonth < 11 ? calendarMonth+1 : 0));
}
function gotoPreviousMonth()
{
gotoMonth((calendarMonth > 0 ? calendarYear : calendarYear-1),(calendarMonth > 0 ? calendarMonth-1 : 11));
}
function hideCalendar(callback)
{
calendarMonths = null;
calendarweekdays = null;
clearTimeout(calendarTimeout);
// Hide the calendar
if (callback != null && typeof callback == "function")
$('#Calendar').fadeOut(100,callback);
else
$('#Calendar').fadeOut(100);
// Hide the menus
$('#CalendarYears').hide();
$('#CalendarMonths').hide();
}
function loadCalendarContent()
{
var content = $('#CalendarContent');
if (content.length && calendarMonth && calendarYear)
{
content.empty();
// Calendar weekdays
var weekdays = $("
").addClass('weekdays').css('margin','0px auto').css('padding','1px 0 0 1px').width(22*7+(jQuery.support.boxModel ? 0 : 1));
for (var i=0; i < 7; i++)
weekdays.append($("").html(calendarWeekdays[i]).css('float','left').css('margin','0 1px 1px 0').css('text-align','center').width(21));
weekdays.append($("
").attr('clear','all'));
content.append(weekdays);
weekdays = null;
// Calendar days
var today = new Date();
var nbOfDays = daysInMonth(new Date(calendarYear, calendarMonth, 1));
var paddingLeft = new Date(calendarYear, calendarMonth, 1).getDay();
var paddingRight = Math.max(7-(paddingLeft+nbOfDays)%7, 0);
if (paddingRight == 7)
paddingRight = 0;
var days = $("").addClass('days').css('margin','0px auto').css('padding','1px 0 0 1px').width(22*7+(jQuery.support.boxModel ? 0 : 1));
for (var i = 1-paddingLeft; i <= nbOfDays+paddingRight; i++)
if (i <= 0 || i > nbOfDays)
days.append($("").html(' ').css('float','left').css('margin','0 1px 1px 0').css('padding','3px 0 3px 0').width(21));
else
days.append($("").attr('href','javascript:selectDate(\''+calendarYear+'-'+((calendarMonth+1) < 10 ? '0'+(calendarMonth+1) : (calendarMonth+1))+'-'+(i < 10 ? '0'+i : i)+'\')').text(i).addClass(calendarYear == getFullYear(today) && calendarMonth == today.getMonth() && i == today.getDate() ? 'today' : '').css('float','left').css('margin','0 1px 1px 0').css('padding','3px 0 3px 0').css('text-align','center').css('vertical-align','middle').width(21));
days.append($("
").attr('clear','all'));
content.append(days);
days = null;
today = null;
}
content = null;
}
function showMonthsMenu()
{
// Find or create the menu container
var menu = $('#CalendarMonths');
if (menu.length == 0)
{
menu = $("").addClass('menu').attr('id','CalendarMonths').css('display','none').css('padding','1px 3px 1px 3px').css('position','absolute').css('z-index','1000');
var list = $("").css('list-style','none').css('margin','0').css('padding','0');
for (var i = 0; i < 12; i++)
list.append($("").css('margin','0').css('padding','0').append($("").addClass(i == calendarMonth ? 'selected' : '').attr('href','javascript:gotoMonth('+calendarYear+','+i+')').html(calendarMonths[i])));
menu.append(list);
list = null;
$('#Calendar').append(menu);
}
// Toggle the menu display
if (menu.is(":hidden"))
menu.css('top',($('#month').position().top+$('#month').outerHeight())+'px').css('left',$('#month').position().left+'px');
menu.toggle();
menu = null;
// Hide the other menu
$('#CalendarYears').hide();
}
function showYearsMenu()
{
// Find or create the menu container
var menu = $('#CalendarYears');
if (menu.length == 0)
{
menu = $("").addClass('menu').attr('id','CalendarYears').css('display','none').css('overflow','auto').css('padding','1px 3px 1px 3px').css('position','absolute').css('width','5em').css('z-index','1000').height(140);
var list = $("").css('list-style','none').css('margin','0').css('padding','0');
var scrollTop = 0;
for (var i = 1980; i < 2080; i++)
list.append($("").append($("").addClass(i == calendarYear ? 'selected' : '').attr('href','javascript:gotoMonth('+i+','+calendarMonth+')').html(i)));
menu.append(list);
list = null;
$('#Calendar').append(menu);
}
// Toggle the menu display
if (menu.is(":hidden"))
menu.css('top',($('#year').position().top+$('#year').outerHeight())+'px').css('left',$('#year').position().left+'px');
menu.toggle();
if (menu.is(":visible"))
menu.scrollTop(Math.max((calendarYear-1980)*menu.children(':first').children(':first').height(),0));
menu = null;
// Hide the other menu
$('#CalendarMonths').hide();
}
function selectDate(date)
{
// Change the value of the calendar's field
$('#'+calendarField).val(date);
// Hide the calendar
hideCalendar(calendarCallback);
}
function toggleCalendar(fieldId,lang,placementFieldId,callbackFunction)
{
// Find or create the calendar container
var calendar = $('#Calendar');
if (calendar.length == 0)
{
// Calendar
calendar = $("").attr('id','Calendar').css('display','none').css('padding','3px').css('position','absolute').css('z-index','1000').width((22*7)+3);
calendar.mouseenter(function(){ clearTimeout(calendarTimeout); }).mouseleave(function(){ calendarTimeout = setTimeout("hideCalendar()",5000); });
// Calendar controls
var form = $("").addClass('controls').css('margin','0 0 5px 0').css('text-align','center');
form.append($("").css('float','left').attr('href','javascript:gotoPreviousMonth();').append($("
").attr('src','data:image/gif;base64,R0lGODlhCgALAIAAAP///wAAACH5BAAAAAAALAAAAAAKAAsAAAIXjI8By2utonIRPPskzpjW22nMNzVechQAOw%3D%3D').css('border','none').css('margin','0')));
form.append($("").css('float','right').attr('href','javascript:gotoNextMonth();').append($("
").attr('src','data:image/gif;base64,R0lGODlhCgALAIAAAP///wAAACH5BAAAAAAALAAAAAAKAAsAAAIYjI8By2ugFHtRwnglzRVmhz2gZ11Nk6QFADs%3D').css('border','none').css('margin','0')));
form.append($("").attr('id','month').css('display','inline').css('margin','0 3px 0 6px'));
form.append($("").attr('href','javascript:showMonthsMenu();').append($("
").attr('src','data:image/gif;base64,R0lGODlhDAAKAIAAAP///wAAACH5BAAAAAAALAAAAAAMAAoAAAIWjI8Hy22Q1IszrHhtftnp3oRcyFBRAQA7').css('border','none')));
form.append($("").attr('id','year').css('display','inline').css('margin','0 3px 0 6px'));
form.append($("").attr('href','javascript:showYearsMenu();').append($("
").attr('src','data:image/gif;base64,R0lGODlhDAAKAIAAAP///wAAACH5BAAAAAAALAAAAAAMAAoAAAIWjI8Hy22Q1IszrHhtftnp3oRcyFBRAQA7').css('border','none')));
calendar.append(form);
form = null;
// Calendar content
calendar.append($("").attr('id','CalendarContent'));
$(document.body).append(calendar);
}
if (fieldId != calendarField && calendar.is(":visible"))
hideCalendar(function(){ toggleCalendar(fieldId,lang,placementFieldId,callbackFunction) });
else if (calendar.is(":hidden"))
{
// Set calendar variables
if (lang == 'fr')
{
calendarMonths = new Array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
calendarWeekdays = new Array('D','L','M','M','J','V','S');
}
else
{
calendarMonths = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
calendarWeekdays = new Array('S','M','T','W','T','F','S');
}
calendarField = fieldId;
calendarCallback = callbackFunction;
var d = getSelectedDate(fieldId);
if (isNaN(d))
d = new Date();
gotoMonth(getFullYear(d),d.getMonth());
d = null;
// Open the calendar
if (placementFieldId == null || placementFieldId.length == 0)
placementFieldId = fieldId;
calendar.css('top',($('#'+placementFieldId).offset().top+$('#'+placementFieldId).outerHeight())+'px').css('left',$('#'+placementFieldId).offset().left+'px');
calendar.fadeIn(100, function() { calendarTimeout = setTimeout("hideCalendar()",5000) });
}
else
hideCalendar();
calendar = null;
}