// 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; }