var monthNames = ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"]; var monthNbDays = [31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; var weekDaysAbrev = "LMMJVSD"; var Calendar_dateFormat = "dd/MM/yyyy"; var Calendar_dateFormatMonth = "MM/yyyy"; //var Calendar_dateFormatWeek = "ww/yyyy"; var titleText = "Choisissez une date"; var todayText = "Aujourd'hui:"; var mimsCalendar; /** * Affiche un calendrier dans une fenêtre popup. * @param targetObject l'objet dans lequel affecter la date sélectionnée. * @param anchorName l'ancre qui servira de référence pour le positionnement de la fenêtre popup. * @param inTypeCalendar : 0 -> calendrier jour * 1 -> calendrier semaine * 2 -> calendrier mois */ // PUBLIC function MimsCalendarPopup(targetObject, anchorName, inTypeCalendar) { var typeCalendar; if(typeof inTypeCalendar == 'boolean' || typeof inTypeCalendar == 'Boolean'){ if(inTypeCalendar) typeCalendar = 2; else typeCalendar = 0; } else typeCalendar= inTypeCalendar; mimsCalendar = new PopupWindow(); mimsCalendar.setSize(250, typeCalendar == 2 ? 60 : 191); mimsCalendar.offsetX = 0; mimsCalendar.offsetY = 0; mimsCalendar.autoHide(); // Method mappings mimsCalendar.hideCalendar = Calendar_closeCalendar; mimsCalendar.refreshCalendar = Calendar_refreshCalendar; mimsCalendar.getCalendar = Calendar_getCalendarHtmlCode; mimsCalendar.createCalendar = Calendar_createCalendar; mimsCalendar.selectDate = Calendar_selectDate; window.Calendar_targetInput = null; var today = new Date(); mimsCalendar.year = today.getFullYear(); mimsCalendar.month = today.getMonth() + 1; mimsCalendar.typeCalendar = typeCalendar; // Affiche le calendrier. mimsCalendar.createCalendar(targetObject, anchorName); } /** * Ferme la popup du calendrier. * @param index l'index de la fenêtre popup contenant le calendrier. */ // PRIVATE function Calendar_closeCalendar() { this.hidePopup(); } /** * Rafraichit le calendrier avec l'année et le mois spécifié. * @param year l'année à sélectionner. * @param month le mois à sélectionner. */ // PRIVATE function Calendar_refreshCalendar(year, month) { this.month = month; this.year = year; this.populate(this.getCalendar()); this.refresh(); } /** * Crée et affiche le calendrier. * @param targetObject l'objet dans lequel affecter la date sélectionnée. * @param anchorName l'ancre qui servira de référence pour le positionnement de la fenêtre popup. */ // PRIVATE function Calendar_createCalendar(targetObject, anchorName) { var date; // Vérifie que le script date.js est accessible. if (!window.getDateFromFormat) { alert("calendar.select: To use this method you must also include 'date.js' for date formatting"); return; } // Vérifie le type de la variable qui contiendra le résultat du choix de la date. if (targetObject.type != "text" && targetObject.type != "hidden" && targetObject.type != "textarea" && targetObject.type != "button") { alert("calendar.select: Input object passed is not a valid form input object"); window.Calendar_targetInput = null; return; } if (targetObject.disabled) { return; } window.Calendar_targetInput = targetObject; if (targetObject.value != "") { if(this.typeCalendar == 1){ date = new Date(); } else if(this.typeCalendar == 2) date = new Date(getDateFromFormat(targetObject.value, Calendar_dateFormat)); else date = new Date(getDateFromFormat(targetObject.value, Calendar_dateFormatMonth)); if (targetObject.value != "" && date.getFullYear() != 1970 && date.getMonth() != 0 && date.getDate() != (this.typeCalendar == 2 ? 0 : 1)) { this.month = date.getMonth() + 1; this.year = date.getFullYear(); } } this.populate(this.getCalendar()); this.showPopup(anchorName); } /** * Crée et renvoit le code html contenant le calendrier. * @param aYear l'année de départ. */ // PRIVATE function Calendar_getCalendarHtmlCode() { var aMonth = this.month; var aYear = this.year; var oD = new Date(aYear, aMonth - 1, 1); oD.od = oD.getDay(); //Si le premier jour du mois est un dimanche alors commencer en 7 positions (au lieu de 0) if(oD.od == 0) oD.od = 7; var today = new Date() var scanfortoday = (aYear == today.getFullYear() && aMonth == today.getMonth() + 1) ? today.getDate() : 0; monthNbDays[1] = (((oD.getFullYear() % 100 != 0) && (oD.getFullYear() %4 == 0)) || (oD.getFullYear() % 400 == 0)) ? 29 : 28; var html = "" + titleText + "            "; html += "            "; html+= " "; html += ""; html += ""; // Ligne contenant l'année. html += ""; if(this.typeCalendar == 1) html += ""; if(aYear > 1909) { html += ""; } else html += ""; if(aYear > 1900) { html += ""; } else html += ""; html += ""; if(aYear < 2100) { html += ""; } else html += ""; if(aYear < 2091) { html += ""; } else html += ""; html += ""; // Ligne contenant le mois. html += ""; if(this.typeCalendar == 1) html += ""; if(aMonth > 1) { html += ""; } else html += ""; if(aMonth > 1) { html += ""; } else html += ""; if(this.typeCalendar == 2){ html += ""; } else html += ""; if(aMonth < 12) { html += ""; } else html += ""; if(aMonth < 12) { html += ""; } else html += ""; html += ""; if(this.typeCalendar != 2) { // Ligne contenant les jours de semaine. html += ""; if(this.typeCalendar == 1) html += ""; for(s = 0; s < 7; s++) html += ""; html += ""; // Lignes contenants les jours. var newWeek = true; var lastDate = null; var addLinkOnWeek = false; for(i = 1; i <= 42; i++) { var x = ((i - oD.od >= 0) && (i - oD.od < monthNbDays[aMonth - 1])) ? i - oD.od + 1 : 0; var aDate = ""; var classDay = "calendar-days"; if (x == scanfortoday) { classDay = "calendar-today"; } else if(this.typeCalendar == 1) { classDay = "calendar-daysForWeek"; } var style = "\" onmouseover = \"className='calendar-daysover';\" onmouseout = \"className='" + classDay + "';\""; var tmp = new Date(aYear, aMonth - 1, x); aDate = (tmp.getDate() < 10 ? "0" : "") + tmp.getDate() + "/" + ((tmp.getMonth() + 1) < 10 ? "0" : "") + (tmp.getMonth() + 1) + "/" + tmp.getFullYear(); if(newWeek && lastDate < tmp && this.typeCalendar == 1) html += ""; else if(newWeek) html += ""; //Affiche le numéro de la semaine if(newWeek && this.typeCalendar == 1){ var newNumWeek = tmp.getWeek(); if(lastDate == null || lastDate < tmp){ html += ""; addLinkOnWeek = true; } else{ html += ""; addLinkOnWeek = false; } } if(x == 0 && addLinkOnWeek) { html += ""; } else if(x == 0) { html += ""; } else { html += ""; } if(((i) % 7 == 0) && ( i < 36)){ newWeek = true; html += ""; } else newWeek = false; lastDate = tmp; } html += ""; } // Ligne contenant le bouton Today. var todayAsString = "" if(this.typeCalendar != 2) todayAsString = (today.getDate() < 10 ? "0" : "") + today.getDate() + " "; todayAsString += monthNames[today.getMonth()] + " " + today.getFullYear(); var nbrCols = (this.typeCalendar == 1 ? 8 : 7); html += "" + " " + ""; html += "
 << < " + aYear + "> >> 
 << < "; html += monthNames[aMonth - 1] + "" + monthNames[aMonth - 1] + "> >> 
 " + weekDaysAbrev.substr(s, 1) + "
" + tmp.getWeek() +"   " + x + "
" + todayText + "" + todayAsString + "" + "
"; html += ""; return html; } /** * Initialise le champ de retour avec la date sélectionnée. */ // PRIVATE function Calendar_selectDate(year, month, day) { if (window.Calendar_targetInput != null) { if(this.typeCalendar == 1){ var dt = new Date(year, month-1, day); window.Calendar_targetInput.value = dt.getWeek() +"/" + dt.getYearWeek() ; } else if(this.typeCalendar == 2) { var dt = new Date(year, month-1, 1); window.Calendar_targetInput.value = formatDate(dt, Calendar_dateFormatMonth); } else { var dt = new Date(year, month-1, day); window.Calendar_targetInput.value = formatDate(dt, Calendar_dateFormat); } } else { alert('Use setReturnFunction() to define which function will get the clicked results!'); } this.hideCalendar(); }