diff --git a/htdocs/html.form.class.php b/htdocs/html.form.class.php index e942b7c0086..3f28875e060 100644 --- a/htdocs/html.form.class.php +++ b/htdocs/html.form.class.php @@ -2278,19 +2278,19 @@ class Form // Calendrier popup version eldy if ("$conf->use_popup_calendar" == "eldy") // Laisser conf->use_popup_calendar entre quote { - // Zone de saisie manuelle de la date - print ''; + // Zone de saisie manuelle de la date + print ''; // Icone calendrier - print ''; - - print ''."\n"; - print ''."\n"; - print ''."\n"; + print ''; + + print ''."\n"; + print ''."\n"; + print ''."\n"; } else { @@ -2304,16 +2304,16 @@ class Form print ''; print ' '; + print '> '; print ''."\n"; - print ''."\n"; - print ''."\n"; + print ''."\n"; + print ''."\n"; if($form_name =="") print ''.img_cal().''; else print ''.img_cal().''; } - } + } /* * Affiche date en select diff --git a/htdocs/includes/modules/commande/pdf_einstein.modules.php b/htdocs/includes/modules/commande/pdf_einstein.modules.php index 42bca33d132..25435197bc4 100644 --- a/htdocs/includes/modules/commande/pdf_einstein.modules.php +++ b/htdocs/includes/modules/commande/pdf_einstein.modules.php @@ -257,14 +257,14 @@ class pdf_einstein extends ModelePDFCommandes $pdf->SetFont('Arial','', 9); // Dans boucle pour gérer multi-page - if ($conf->fckeditor->enabled) + if ($conf->fckeditor->enabled && $conf->global->FCKEDITOR_ENABLE_DETAILS) { $pdf->writeHTMLCell(108, 4, $this->posxdesc-1, $curY, $libelleproduitservice, 0, 1); } else { $pdf->SetXY ($this->posxdesc-1, $curY); - $pdf->MultiCell(108, 4, $libelleproduitservice, 0, 'J'); + $pdf->MultiCell(108, 4, dol_entity_decode($libelleproduitservice), 0, 'J'); } $nexY = $pdf->GetY(); diff --git a/htdocs/includes/modules/facture/pdf_crabe.modules.php b/htdocs/includes/modules/facture/pdf_crabe.modules.php index f7da7891eaf..a6c136aaf6d 100644 --- a/htdocs/includes/modules/facture/pdf_crabe.modules.php +++ b/htdocs/includes/modules/facture/pdf_crabe.modules.php @@ -259,14 +259,14 @@ class pdf_crabe extends ModelePDFFactures $pdf->SetFont('Arial','', 9); // Dans boucle pour gérer multi-page - if ($conf->fckeditor->enabled) + if ($conf->fckeditor->enabled && $conf->global->FCKEDITOR_ENABLE_DETAILS) { $pdf->writeHTMLCell(108, 4, $this->posxdesc-1, $curY, $libelleproduitservice, 0, 1); } else { $pdf->SetXY ($this->posxdesc-1, $curY); - $pdf->MultiCell(108, 4, $libelleproduitservice, 0, 'J'); + $pdf->MultiCell(108, 4, dol_entity_decode($libelleproduitservice), 0, 'J'); } $nexY = $pdf->GetY(); diff --git a/htdocs/includes/modules/propale/pdf_propale_azur.modules.php b/htdocs/includes/modules/propale/pdf_propale_azur.modules.php index f7b11347ace..dcdbb264f8c 100644 --- a/htdocs/includes/modules/propale/pdf_propale_azur.modules.php +++ b/htdocs/includes/modules/propale/pdf_propale_azur.modules.php @@ -256,14 +256,14 @@ class pdf_propale_azur extends ModelePDFPropales $pdf->SetFont('Arial','', 9); // Dans boucle pour gérer multi-page - if ($conf->fckeditor->enabled) + if ($conf->fckeditor->enabled && $conf->global->FCKEDITOR_ENABLE_DETAILS) { $pdf->writeHTMLCell(108, 4, $this->posxdesc-1, $curY, $libelleproduitservice, 0, 1); } else { $pdf->SetXY ($this->posxdesc-1, $curY); - $pdf->MultiCell(108, 4, $libelleproduitservice, 0, 'J'); + $pdf->MultiCell(108, 4, dol_entity_decode($libelleproduitservice), 0, 'J'); } $nexY = $pdf->GetY(); diff --git a/htdocs/lib/functions.inc.php b/htdocs/lib/functions.inc.php index a29bb01230f..19fb1e29777 100644 --- a/htdocs/lib/functions.inc.php +++ b/htdocs/lib/functions.inc.php @@ -2298,14 +2298,25 @@ function weight_units_string($unit) } /** - \brief Nettoie le code HTML + \brief Decode le code html + \param string StringHtml + \return string DecodeString +*/ +function dol_entity_decode($StringHtml) +{ + $DecodeString = html_entity_decode($StringHtml); + return $DecodeString; +} + +/** + \brief Supprime le code html \param string StringHtml \return string CleanString */ function clean_html($StringHtml) { $pattern = "<[^>]+>"; - $temp = html_entity_decode($StringHtml); + $temp = dol_entity_decode($StringHtml); $temp = ereg_replace($pattern,"",$temp); // Supprime aussi les retours $temp=str_replace("\n"," ",$temp); diff --git a/htdocs/lib/lib_calendar.js b/htdocs/lib/lib_calendar.js index f8c39057de8..48f2d193f4b 100755 --- a/htdocs/lib/lib_calendar.js +++ b/htdocs/lib/lib_calendar.js @@ -1,911 +1,911 @@ -// -// JavaScript Calendar Component -// Author: Robert W. Husted (robert.husted@iname.com) -// Date: 8/22/1999 -// Modified Date: 11/30/1999 -// Modified By: Robert W. Husted -// Notes: Added frameset support (changed reference for "newWin" to "top.newWin") -// Also changed Spanish "March" from "Marcha" to "Marzo" -// Fixed JavaScript Date Anomaly affecting days > 28 -// -// -// -// Usage: Add the following lines of code to your page to enable the Calendar -// component. -// -// -// // THIS LINE LOADS THE JS LIBRARY FOR THE CALENDAR COMPONENT -// -// -// -// -// -// // THIS LINE IS USED IN CONJUNCTION WITH A FORM FIELD (myDateField) IN A FORM (myForm). -// // Replace "myForm" and "myDateField" WITH THE NAME OF YOUR FORM AND INPUT FIELD RESPECTIVELY -// // WINDOW OPTIONS SET THE WIDTH, HEIGHT, AND X/Y POSITION OF THE CALENDAR WINDOW -// // WITH TITLEBAR ON, ALL OTHER OPTIONS (TOOLBARS, ETC) ARE DISABLED BY DEFAULT -// -// -// Popup Calendar -// -// -// -// Required Files: -// -// calendar.js - contains all JavaScript functions to make the calendar work -// -// calendar.html - frameset document (not required if you call the showCalendar() -// function. However, calling showCalendar() directly causes -// the Java Virtual Machine (JVM) to start which slows down the -// loading of the calendar.) -// -// -// Files Generally Included: -// -// calendar.gif - image that looks like a little calendar -// -// yourPage.html - page that contains a form and a date field which implements -// the calendar component -// - - - -// BEGIN USER-EDITABLE SECTION ----------------------------------------------------- - - - -// SPECIFY DATE FORMAT RETURNED BY THIS CALENDAR -// (THIS IS ALSO THE DATE FORMAT RECOGNIZED BY THIS CALENDAR) - -// DATE FORMAT OPTIONS: -// -// dd = 1 or 2-digit Day -// DD = 2-digit Day -// mm = 1 or 2-digit Month -// MM = 2-digit Month -// yy = 2-digit Year -// YY = 4-digit Year -// yyyy = 4-digit Year -// month = Month name in lowercase letters -// Month = Month name in initial caps -// MONTH = Month name in captital letters -// mon = 3-letter month abbreviation in lowercase letters -// Mon = 3-letter month abbreviation in initial caps -// MON = 3-letter month abbreviation in uppercase letters -// weekday = name of week in lowercase letters -// Weekday = name of week in initial caps -// WEEKDAY = name of week in uppercase letters -// wkdy = 3-letter weekday abbreviation in lowercase letters -// Wkdy = 3-letter weekday abbreviation in initial caps -// WKDY = 3-letter weekday abbreviation in uppercase letters -// -// Examples: -// -// calDateFormat = "mm/dd/yy"; -// calDateFormat = "Weekday, Month dd, yyyy"; -// calDateFormat = "wkdy, mon dd, yyyy"; -// calDateFormat = "DD.MM.YY"; // FORMAT UNSUPPORTED BY JAVASCRIPT -- REQUIRES CUSTOM PARSING -// - -calDateFormat = "dd/mm/yyyy"; - - -// CALENDAR COLORS -topBackground = "#dee7ec"; // BG COLOR OF THE TOP FRAME -bottomBackground = "white"; // BG COLOR OF THE BOTTOM FRAME -tableBGColor = "#7699A9"; // BG COLOR OF THE BOTTOM FRAME'S TABLE -cellColor = "lightgrey"; // TABLE CELL BG COLOR OF THE DATE CELLS IN THE BOTTOM FRAME -headingCellColor = "white"; // TABLE CELL BG COLOR OF THE WEEKDAY ABBREVIATIONS -headingTextColor = "black"; // TEXT COLOR OF THE WEEKDAY ABBREVIATIONS -dateColor = "black"; // TEXT COLOR OF THE LISTED DATES (1-28+) -focusColor = "#ff0000"; // TEXT COLOR OF THE SELECTED DATE (OR CURRENT DATE) -hoverColor = "darkred"; // TEXT COLOR OF A LINK WHEN YOU HOVER OVER IT -fontStyle = "10pt arial,tahoma,verdana,helvetica;"; // TEXT STYLE FOR DATES -headingFontStyle = "bold 12pt arial, helvetica"; // TEXT STYLE FOR WEEKDAY ABBREVIATIONS - -// FORMATTING PREFERENCES -bottomBorder = false; // TRUE/FALSE (WHETHER TO DISPLAY BOTTOM CALENDAR BORDER) -tableBorder = 0; // SIZE OF CALENDAR TABLE BORDER (BOTTOM FRAME) 0=none - - - -// END USER-EDITABLE SECTION ------------------------------------------------------- - - - -// DETERMINE BROWSER BRAND -var isNav = false; -var isIE = false; - -// ASSUME IT'S EITHER NETSCAPE OR MSIE -if (navigator.appName == "Netscape") { - isNav = true; -} -else { - isIE = true; -} - -// GET CURRENTLY SELECTED LANGUAGE -// selectedLanguage = navigator.language; -if(selectedLanguage == "") - selectedLanguage = navigator.language; - -// PRE-BUILD PORTIONS OF THE CALENDAR WHEN THIS JS LIBRARY LOADS INTO THE BROWSER -buildCalParts(); - - - -// CALENDAR FUNCTIONS BEGIN HERE --------------------------------------------------- - - - -// SET THE INITIAL VALUE OF THE GLOBAL DATE FIELD -function setDateField(dateField) { - - // ASSIGN THE INCOMING FIELD OBJECT TO A GLOBAL VARIABLE - calDateField = dateField; - - // GET THE VALUE OF THE INCOMING FIELD - inDate = dateField.value; - // SET calDate TO THE DATE IN THE INCOMING FIELD OR DEFAULT TO TODAY'S DATE - setInitialDate(); - - // THE CALENDAR FRAMESET DOCUMENTS ARE CREATED BY JAVASCRIPT FUNCTIONS - calDocTop = buildTopCalFrame(); - calDocBottom = buildBottomCalFrame(); -} - - -// SET THE INITIAL CALENDAR DATE TO TODAY OR TO THE EXISTING VALUE IN dateField -function setInitialDate() { - - // CREATE A NEW DATE OBJECT (WILL GENERALLY PARSE CORRECT DATE EXCEPT WHEN "." IS USED AS A DELIMITER) - // (THIS ROUTINE DOES *NOT* CATCH ALL DATE FORMATS, IF YOU NEED TO PARSE A CUSTOM DATE FORMAT, DO IT HERE) - - if(inDate.indexOf("/") > -1) - { - inDate = inDate.split("/"); - if(inDate[1].indexOf("0") > -1) - inDate[1] = inDate[1].replace("0",""); - if(inDate[0].indexOf("0") > -1) - inDate[0] = inDate[0].replace("0",""); - calDate = new Date(inDate[2],inDate[1]-1,inDate[0]); - } - else - calDate = new Date(inDate); - - // IF THE INCOMING DATE IS INVALID, USE THE CURRENT DATE - if (isNaN(calDate)) { - - // ADD CUSTOM DATE PARSING HERE - // IF IT FAILS, SIMPLY CREATE A NEW DATE OBJECT WHICH DEFAULTS TO THE CURRENT DATE - calDate = new Date(); - } - - // KEEP TRACK OF THE CURRENT DAY VALUE - calDay = calDate.getDate(); - - // SET DAY VALUE TO 1... TO AVOID JAVASCRIPT DATE CALCULATION ANOMALIES - // (IF THE MONTH CHANGES TO FEB AND THE DAY IS 30, THE MONTH WOULD CHANGE TO MARCH - // AND THE DAY WOULD CHANGE TO 2. SETTING THE DAY TO 1 WILL PREVENT THAT) - calDate.setDate(1); -} - - -// POPUP A WINDOW WITH THE CALENDAR IN IT -function showCalendar(dateField) { - - // SET INITIAL VALUE OF THE DATE FIELD AND CREATE TOP AND BOTTOM FRAMES - setDateField(dateField); - - // USE THE JAVASCRIPT-GENERATED DOCUMENTS (calDocTop, calDocBottom) IN THE FRAMESET - calDocFrameset = - "JavaScript Calendar\n" + - "\n" + - " \n" + - " \n" + - "\n"; - - // DISPLAY THE CALENDAR IN A NEW POPUP WINDOW - l= eval(screen.width / 2); - h=eval(screen.height / 2); - top.newWin = window.open("javascript:parent.opener.calDocFrameset", "calWin", 'directories=no,menubar=no,status=no,location=no,scrollbars=yes,resizable=yes,height=234,width=194,left='+l+'px,top='+h+'px'); - top.newWin.focus(); - -} - - -// CREATE THE TOP CALENDAR FRAME -function buildTopCalFrame() { - var today_trans = "Today"; - // CREATE THE TOP FRAME OF THE CALENDAR - if (selectedLanguage == "fr") - today_trans = "Aujourd'hui"; - // IF GREMAN - else if (selectedLanguage == "de") - today_trans = "Heute "; - // IF SPANISH - else if (selectedLanguage == "es") - today_trans = "Hoy "; - var calDoc = - "" + - "" + - "" + - "" + - "" + - - "
" + - "" + - "" + - "" + - "" + - "" + - "" + - "
" + - "
" + - "
" + - getMonthSelect() + - "" + - "
" + - "
" + - "" + - "" + - "
" + - "
" + - - "" + - ""; - - return calDoc; -} - - -// CREATE THE BOTTOM CALENDAR FRAME -// (THE MONTHLY CALENDAR) -function buildBottomCalFrame() { - - // START CALENDAR DOCUMENT - var calDoc = calendarBegin; - - // GET MONTH, AND YEAR FROM GLOBAL CALENDAR DATE - month = calDate.getMonth(); - year = calDate.getFullYear(); - - - // GET GLOBALLY-TRACKED DAY VALUE (PREVENTS JAVASCRIPT DATE ANOMALIES) - day = calDay; - - var i = 0; - - // DETERMINE THE NUMBER OF DAYS IN THE CURRENT MONTH - var days = getDaysInMonth(); - - // IF GLOBAL DAY VALUE IS > THAN DAYS IN MONTH, HIGHLIGHT LAST DAY IN MONTH - if (day > days) { - day = days; - } - - // DETERMINE WHAT DAY OF THE WEEK THE CALENDAR STARTS ON - var firstOfMonth = new Date (year, month, 1); - - // GET THE DAY OF THE WEEK THE FIRST DAY OF THE MONTH FALLS ON - var startingPos = firstOfMonth.getDay(); - days += startingPos; - - // KEEP TRACK OF THE COLUMNS, START A NEW ROW AFTER EVERY 7 COLUMNS - var columnCount = 0; - - // MAKE BEGINNING NON-DATE CELLS BLANK - for (i = 0; i < startingPos; i++) { - - calDoc += blankCell; - columnCount++; - } - - // SET VALUES FOR DAYS OF THE MONTH - var currentDay = 0; - var dayType = "weekday"; - - // DATE CELLS CONTAIN A NUMBER - for (i = startingPos; i < days; i++) { - - var paddingChar = " "; - - // ADJUST SPACING SO THAT ALL LINKS HAVE RELATIVELY EQUAL WIDTHS - if (i-startingPos+1 < 10) { - padding = "  "; - } - else { - padding = " "; - } - - // GET THE DAY CURRENTLY BEING WRITTEN - currentDay = i-startingPos+1; - - // SET THE TYPE OF DAY, THE focusDay GENERALLY APPEARS AS A DIFFERENT COLOR - if (currentDay == day) { - dayType = "focusDay"; - } - else { - dayType = "weekDay"; - } - - // ADD THE DAY TO THE CALENDAR STRING - calDoc += "" + - "" + padding + currentDay + paddingChar + ""; - - columnCount++; - - // START A NEW ROW WHEN NECESSARY - if (columnCount % 7 == 0) { - calDoc += ""; - } - } - - // MAKE REMAINING NON-DATE CELLS BLANK - for (i=days; i<42; i++) { - - calDoc += blankCell; - columnCount++; - - // START A NEW ROW WHEN NECESSARY - if (columnCount % 7 == 0) { - calDoc += ""; - if (i<41) { - calDoc += ""; - } - } - } - - // FINISH THE NEW CALENDAR PAGE - calDoc += calendarEnd; - - // RETURN THE COMPLETED CALENDAR PAGE - return calDoc; -} - - -// WRITE THE MONTHLY CALENDAR TO THE BOTTOM CALENDAR FRAME -function writeCalendar() { - - // CREATE THE NEW CALENDAR FOR THE SELECTED MONTH & YEAR - calDocBottom = buildBottomCalFrame(); - - // WRITE THE NEW CALENDAR TO THE BOTTOM FRAME - top.newWin.frames['bottomCalFrame'].document.open(); - top.newWin.frames['bottomCalFrame'].document.write(calDocBottom); - top.newWin.frames['bottomCalFrame'].document.close(); -} - - -// SET THE CALENDAR TO TODAY'S DATE AND DISPLAY THE NEW CALENDAR -function setToday() { - - // SET GLOBAL DATE TO TODAY'S DATE - calDate = new Date(); - - // SET DAY MONTH AND YEAR TO TODAY'S DATE - var month = calDate.getMonth(); - var year = calDate.getFullYear(); - - // SET MONTH IN DROP-DOWN LIST - top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex = month; - - // SET YEAR VALUE - top.newWin.frames['topCalFrame'].document.calControl.year.value = year; - - - // DISPLAY THE NEW CALENDAR - writeCalendar(); -} - - -// SET THE GLOBAL DATE TO THE NEWLY ENTERED YEAR AND REDRAW THE CALENDAR -function setYear() { - - // GET THE NEW YEAR VALUE - var year = top.newWin.frames['topCalFrame'].document.calControl.year.value; - - // IF IT'S A FOUR-DIGIT YEAR THEN CHANGE THE CALENDAR - if (isFourDigitYear(year)) { - calDate.setFullYear(year); - writeCalendar(); - } - else { - // HIGHLIGHT THE YEAR IF THE YEAR IS NOT FOUR DIGITS IN LENGTH - top.newWin.frames['topCalFrame'].document.calControl.year.focus(); - top.newWin.frames['topCalFrame'].document.calControl.year.select(); - } -} - - -// SET THE GLOBAL DATE TO THE SELECTED MONTH AND REDRAW THE CALENDAR -function setCurrentMonth() { - - // GET THE NEWLY SELECTED MONTH AND CHANGE THE CALENDAR ACCORDINGLY - var month = top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex; - - calDate.setMonth(month); - writeCalendar(); -} - - -// SET THE GLOBAL DATE TO THE PREVIOUS YEAR AND REDRAW THE CALENDAR -function setPreviousYear() { - - var year = top.newWin.frames['topCalFrame'].document.calControl.year.value; - - if (isFourDigitYear(year) && year > 1000) { - year--; - calDate.setFullYear(year); - top.newWin.frames['topCalFrame'].document.calControl.year.value = year; - writeCalendar(); - } -} - - -// SET THE GLOBAL DATE TO THE PREVIOUS MONTH AND REDRAW THE CALENDAR -function setPreviousMonth() { - - var year = top.newWin.frames['topCalFrame'].document.calControl.year.value; - if (isFourDigitYear(year)) { - var month = top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex; - - // IF MONTH IS JANUARY, SET MONTH TO DECEMBER AND DECREMENT THE YEAR - if (month == 0) { - month = 11; - if (year > 1000) { - year--; - calDate.setFullYear(year); - top.newWin.frames['topCalFrame'].document.calControl.year.value = year; - } - } - else { - month--; - } - calDate.setMonth(month); - top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex = month; - writeCalendar(); - } -} - - -// SET THE GLOBAL DATE TO THE NEXT MONTH AND REDRAW THE CALENDAR -function setNextMonth() { - - var year = top.newWin.frames['topCalFrame'].document.calControl.year.value; - - if (isFourDigitYear(year)) { - var month = top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex; - - // IF MONTH IS DECEMBER, SET MONTH TO JANUARY AND INCREMENT THE YEAR - if (month == 11) { - month = 0; - year++; - calDate.setFullYear(year); - top.newWin.frames['topCalFrame'].document.calControl.year.value = year; - } - else { - month++; - } - calDate.setMonth(month); - top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex = month; - writeCalendar(); - } -} - - -// SET THE GLOBAL DATE TO THE NEXT YEAR AND REDRAW THE CALENDAR -function setNextYear() { - - var year = top.newWin.frames['topCalFrame'].document.calControl.year.value; - if (isFourDigitYear(year)) { - year++; - calDate.setFullYear(year); - top.newWin.frames['topCalFrame'].document.calControl.year.value = year; - writeCalendar(); - } -} - - -// GET NUMBER OF DAYS IN MONTH -function getDaysInMonth() { - - var days; - var month = calDate.getMonth()+1; - var year = calDate.getFullYear(); - - // RETURN 31 DAYS - if (month==1 || month==3 || month==5 || month==7 || month==8 || - month==10 || month==12) { - days=31; - } - // RETURN 30 DAYS - else if (month==4 || month==6 || month==9 || month==11) { - days=30; - } - // RETURN 29 DAYS - else if (month==2) { - if (isLeapYear(year)) { - days=29; - } - // RETURN 28 DAYS - else { - days=28; - } - } - return (days); -} - - -// CHECK TO SEE IF YEAR IS A LEAP YEAR -function isLeapYear (Year) { - - if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) { - return (true); - } - else { - return (false); - } -} - - -// ENSURE THAT THE YEAR IS FOUR DIGITS IN LENGTH -function isFourDigitYear(year) { - - if (year.length != 4) { - top.newWin.frames['topCalFrame'].document.calControl.year.value = calDate.getFullYear(); - top.newWin.frames['topCalFrame'].document.calControl.year.select(); - top.newWin.frames['topCalFrame'].document.calControl.year.focus(); - } - else { - return true; - } -} - - -// BUILD THE MONTH SELECT LIST -function getMonthSelect() { - - // BROWSER LANGUAGE CHECK DONE PREVIOUSLY (navigator.language()) - // FIRST TWO CHARACTERS OF LANGUAGE STRING SPECIFIES THE LANGUAGE - // (THE LAST THREE OPTIONAL CHARACTERS SPECIFY THE LANGUAGE SUBTYPE) - // SET THE NAMES OF THE MONTH TO THE PROPER LANGUAGE (DEFAULT TO ENGLISH) - - // IF FRENCH - if (selectedLanguage == "fr") { - monthArray = new Array('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', - 'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Décembre'); - } - // IF GERMAN - else if (selectedLanguage == "de") { - monthArray = new Array('Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', - 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'); - } - // IF SPANISH - else if (selectedLanguage == "es") { - monthArray = new Array('Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', - 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'); - } - // DEFAULT TO ENGLISH - else { - monthArray = new Array('January', 'February', 'March', 'April', 'May', 'June', - 'July', 'August', 'September', 'October', 'November', 'December'); - } - - // DETERMINE MONTH TO SET AS DEFAULT - var activeMonth = calDate.getMonth(); - - // START HTML SELECT LIST ELEMENT - monthSelect = "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + + "" + + ""; + + return calDoc; +} + + +// CREATE THE BOTTOM CALENDAR FRAME +// (THE MONTHLY CALENDAR) +function buildBottomCalFrame() { + + // START CALENDAR DOCUMENT + var calDoc = calendarBegin; + + // GET MONTH, AND YEAR FROM GLOBAL CALENDAR DATE + month = calDate.getMonth(); + year = calDate.getFullYear(); + + + // GET GLOBALLY-TRACKED DAY VALUE (PREVENTS JAVASCRIPT DATE ANOMALIES) + day = calDay; + + var i = 0; + + // DETERMINE THE NUMBER OF DAYS IN THE CURRENT MONTH + var days = getDaysInMonth(); + + // IF GLOBAL DAY VALUE IS > THAN DAYS IN MONTH, HIGHLIGHT LAST DAY IN MONTH + if (day > days) { + day = days; + } + + // DETERMINE WHAT DAY OF THE WEEK THE CALENDAR STARTS ON + var firstOfMonth = new Date (year, month, 1); + + // GET THE DAY OF THE WEEK THE FIRST DAY OF THE MONTH FALLS ON + var startingPos = firstOfMonth.getDay(); + days += startingPos; + + // KEEP TRACK OF THE COLUMNS, START A NEW ROW AFTER EVERY 7 COLUMNS + var columnCount = 0; + + // MAKE BEGINNING NON-DATE CELLS BLANK + for (i = 0; i < startingPos; i++) { + + calDoc += blankCell; + columnCount++; + } + + // SET VALUES FOR DAYS OF THE MONTH + var currentDay = 0; + var dayType = "weekday"; + + // DATE CELLS CONTAIN A NUMBER + for (i = startingPos; i < days; i++) { + + var paddingChar = " "; + + // ADJUST SPACING SO THAT ALL LINKS HAVE RELATIVELY EQUAL WIDTHS + if (i-startingPos+1 < 10) { + padding = "  "; + } + else { + padding = " "; + } + + // GET THE DAY CURRENTLY BEING WRITTEN + currentDay = i-startingPos+1; + + // SET THE TYPE OF DAY, THE focusDay GENERALLY APPEARS AS A DIFFERENT COLOR + if (currentDay == day) { + dayType = "focusDay"; + } + else { + dayType = "weekDay"; + } + + // ADD THE DAY TO THE CALENDAR STRING + calDoc += "" + + "" + padding + currentDay + paddingChar + ""; + + columnCount++; + + // START A NEW ROW WHEN NECESSARY + if (columnCount % 7 == 0) { + calDoc += ""; + } + } + + // MAKE REMAINING NON-DATE CELLS BLANK + for (i=days; i<42; i++) { + + calDoc += blankCell; + columnCount++; + + // START A NEW ROW WHEN NECESSARY + if (columnCount % 7 == 0) { + calDoc += ""; + if (i<41) { + calDoc += ""; + } + } + } + + // FINISH THE NEW CALENDAR PAGE + calDoc += calendarEnd; + + // RETURN THE COMPLETED CALENDAR PAGE + return calDoc; +} + + +// WRITE THE MONTHLY CALENDAR TO THE BOTTOM CALENDAR FRAME +function writeCalendar() { + + // CREATE THE NEW CALENDAR FOR THE SELECTED MONTH & YEAR + calDocBottom = buildBottomCalFrame(); + + // WRITE THE NEW CALENDAR TO THE BOTTOM FRAME + top.newWin.frames['bottomCalFrame'].document.open(); + top.newWin.frames['bottomCalFrame'].document.write(calDocBottom); + top.newWin.frames['bottomCalFrame'].document.close(); +} + + +// SET THE CALENDAR TO TODAY'S DATE AND DISPLAY THE NEW CALENDAR +function setToday() { + + // SET GLOBAL DATE TO TODAY'S DATE + calDate = new Date(); + + // SET DAY MONTH AND YEAR TO TODAY'S DATE + var month = calDate.getMonth(); + var year = calDate.getFullYear(); + + // SET MONTH IN DROP-DOWN LIST + top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex = month; + + // SET YEAR VALUE + top.newWin.frames['topCalFrame'].document.calControl.year.value = year; + + + // DISPLAY THE NEW CALENDAR + writeCalendar(); +} + + +// SET THE GLOBAL DATE TO THE NEWLY ENTERED YEAR AND REDRAW THE CALENDAR +function setYear() { + + // GET THE NEW YEAR VALUE + var year = top.newWin.frames['topCalFrame'].document.calControl.year.value; + + // IF IT'S A FOUR-DIGIT YEAR THEN CHANGE THE CALENDAR + if (isFourDigitYear(year)) { + calDate.setFullYear(year); + writeCalendar(); + } + else { + // HIGHLIGHT THE YEAR IF THE YEAR IS NOT FOUR DIGITS IN LENGTH + top.newWin.frames['topCalFrame'].document.calControl.year.focus(); + top.newWin.frames['topCalFrame'].document.calControl.year.select(); + } +} + + +// SET THE GLOBAL DATE TO THE SELECTED MONTH AND REDRAW THE CALENDAR +function setCurrentMonth() { + + // GET THE NEWLY SELECTED MONTH AND CHANGE THE CALENDAR ACCORDINGLY + var month = top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex; + + calDate.setMonth(month); + writeCalendar(); +} + + +// SET THE GLOBAL DATE TO THE PREVIOUS YEAR AND REDRAW THE CALENDAR +function setPreviousYear() { + + var year = top.newWin.frames['topCalFrame'].document.calControl.year.value; + + if (isFourDigitYear(year) && year > 1000) { + year--; + calDate.setFullYear(year); + top.newWin.frames['topCalFrame'].document.calControl.year.value = year; + writeCalendar(); + } +} + + +// SET THE GLOBAL DATE TO THE PREVIOUS MONTH AND REDRAW THE CALENDAR +function setPreviousMonth() { + + var year = top.newWin.frames['topCalFrame'].document.calControl.year.value; + if (isFourDigitYear(year)) { + var month = top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex; + + // IF MONTH IS JANUARY, SET MONTH TO DECEMBER AND DECREMENT THE YEAR + if (month == 0) { + month = 11; + if (year > 1000) { + year--; + calDate.setFullYear(year); + top.newWin.frames['topCalFrame'].document.calControl.year.value = year; + } + } + else { + month--; + } + calDate.setMonth(month); + top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex = month; + writeCalendar(); + } +} + + +// SET THE GLOBAL DATE TO THE NEXT MONTH AND REDRAW THE CALENDAR +function setNextMonth() { + + var year = top.newWin.frames['topCalFrame'].document.calControl.year.value; + + if (isFourDigitYear(year)) { + var month = top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex; + + // IF MONTH IS DECEMBER, SET MONTH TO JANUARY AND INCREMENT THE YEAR + if (month == 11) { + month = 0; + year++; + calDate.setFullYear(year); + top.newWin.frames['topCalFrame'].document.calControl.year.value = year; + } + else { + month++; + } + calDate.setMonth(month); + top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex = month; + writeCalendar(); + } +} + + +// SET THE GLOBAL DATE TO THE NEXT YEAR AND REDRAW THE CALENDAR +function setNextYear() { + + var year = top.newWin.frames['topCalFrame'].document.calControl.year.value; + if (isFourDigitYear(year)) { + year++; + calDate.setFullYear(year); + top.newWin.frames['topCalFrame'].document.calControl.year.value = year; + writeCalendar(); + } +} + + +// GET NUMBER OF DAYS IN MONTH +function getDaysInMonth() { + + var days; + var month = calDate.getMonth()+1; + var year = calDate.getFullYear(); + + // RETURN 31 DAYS + if (month==1 || month==3 || month==5 || month==7 || month==8 || + month==10 || month==12) { + days=31; + } + // RETURN 30 DAYS + else if (month==4 || month==6 || month==9 || month==11) { + days=30; + } + // RETURN 29 DAYS + else if (month==2) { + if (isLeapYear(year)) { + days=29; + } + // RETURN 28 DAYS + else { + days=28; + } + } + return (days); +} + + +// CHECK TO SEE IF YEAR IS A LEAP YEAR +function isLeapYear (Year) { + + if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) { + return (true); + } + else { + return (false); + } +} + + +// ENSURE THAT THE YEAR IS FOUR DIGITS IN LENGTH +function isFourDigitYear(year) { + + if (year.length != 4) { + top.newWin.frames['topCalFrame'].document.calControl.year.value = calDate.getFullYear(); + top.newWin.frames['topCalFrame'].document.calControl.year.select(); + top.newWin.frames['topCalFrame'].document.calControl.year.focus(); + } + else { + return true; + } +} + + +// BUILD THE MONTH SELECT LIST +function getMonthSelect() { + + // BROWSER LANGUAGE CHECK DONE PREVIOUSLY (navigator.language()) + // FIRST TWO CHARACTERS OF LANGUAGE STRING SPECIFIES THE LANGUAGE + // (THE LAST THREE OPTIONAL CHARACTERS SPECIFY THE LANGUAGE SUBTYPE) + // SET THE NAMES OF THE MONTH TO THE PROPER LANGUAGE (DEFAULT TO ENGLISH) + + // IF FRENCH + if (selectedLanguage == "fr") { + monthArray = new Array('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', + 'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Décembre'); + } + // IF GERMAN + else if (selectedLanguage == "de") { + monthArray = new Array('Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', + 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'); + } + // IF SPANISH + else if (selectedLanguage == "es") { + monthArray = new Array('Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', + 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'); + } + // DEFAULT TO ENGLISH + else { + monthArray = new Array('January', 'February', 'March', 'April', 'May', 'June', + 'July', 'August', 'September', 'October', 'November', 'December'); + } + + // DETERMINE MONTH TO SET AS DEFAULT + var activeMonth = calDate.getMonth(); + + // START HTML SELECT LIST ELEMENT + monthSelect = "