--- /dev/null
+/* ***** BEGIN LICENSE BLOCK *****\r
+ * Copyright (c) 2008-2009 EADS DEFENCE AND SECURITY - All rights reserved.\r
+ * ximfmail is under the triple license MPL 1.1/GPL 2.0/LGPL 2.1.\r
+ *\r
+ *\r
+ * Redistribution and use, in source and binary forms, with or without modification,\r
+ * are permitted provided that the following conditons are met :\r
+ *\r
+ * 1. Redistributions of source code must retain the above copyright notice,\r
+ * 2. MPL 1.1/GPL 2.0/LGPL 2.1. license agreements must be attached\r
+ * in the redistribution of the source code.\r
+ * 3. Neither the names of the copyright holders nor the names of any contributors\r
+ * may be used to endorse or promote products derived from this software without specific\r
+ * prior written permission from EADS Defence and Security.\r
+ *\r
+ * Alternatively, the contents of this file may be used under the terms of\r
+ * either of the GNU General Public License Version 2 or later (the "GPL"),\r
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),\r
+ * in which case the provisions of the GPL or the LGPL are applicable instead\r
+ * of those above. If you wish to allow use of your version of this file only\r
+ * under the terms of either the GPL or the LGPL, and not to allow others to\r
+ * use your version of this file under the terms of the MPL, indicate your\r
+ * decision by deleting the provisions above and replace them with the notice\r
+ * and other provisions required by the GPL or the LGPL. If you do not delete\r
+ * the provisions above, a recipient may use your version of this file under\r
+ * the terms of any one of the MPL, the GPL or the LGPL.\r
+ *\r
+ * REMINDER :\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\r
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ *\r
+ * EADS Defence and Security - 1 Boulevard Jean Moulin -\r
+ * ZAC de la Clef Saint Pierre - 78990 Elancourt - FRANCE (IDDN.FR.001.480012.002.S.P.2008.000.10000)\r
+ * ***** END LICENSE BLOCK ***** */\r
+var gJSLoader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].createInstance(Components.interfaces.mozIJSSubScriptLoader);\r
+var gConsole = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);\r
+gJSLoader.loadSubScript("chrome://ximfmail/content/jquery.js");\r
+gJSLoader.loadSubScript("chrome://ximfmail/content/ximfmail.js");\r
+\r
+var gDlgTreeXimf_maxItem = null;\r
+var gDlgTreeXimf_current_selection = null;\r
+var gDlgTreeXimf_current_separator = null;\r
+var gXmlDatasFilePath = null;\r
+var gRdfTempo = null;\r
+var gSelectedDate = null;\r
+var gSelectedDayItem = null;\r
+var gSelectedMonthItem = null;\r
+var gSelectedHourItem = null;\r
+var gSelectedMinItem = null;\r
+var gTitleDlg = null;\r
+/*\r
+ window.arguments = [];\r
+ args[0] id de la textbox à enrichir\r
+ args[1] date courant affichee\r
+*/\r
+// gBoxOpener : display date\r
+var gBoxOpener = null;\r
+$(document).ready(function(){\r
+ var gArgs = window.arguments;\r
+ if (gArgs[0].length <= 0) {\r
+ return;\r
+ }\r
+ // load background datas\r
+ gBoxOpener = gArgs[0][0];\r
+ gTitleDlg = gArgs[0][2];\r
+ if(gBoxOpener){\r
+ gSelectedDate = parseDate(gArgs[0][1]);\r
+ }else{\r
+ adjustCurrentDate();\r
+ }\r
+ UpdateCalendar();\r
+});\r
+/*\r
+ *\r
+ */\r
+function clickOk(){\r
+ var date = ConvertDateForDisplay();\r
+ window.opener.document.getElementById(gBoxOpener).value = date;\r
+ window.opener.document.getElementById(gBoxOpener).setAttribute("ximfvalue", gSelectedDate.toGMTString());\r
+ window.close();\r
+ return true;\r
+}\r
+/*\r
+ *\r
+ */\r
+function clickCancel(){\r
+ window.close();\r
+ return false;\r
+}\r
+/*\r
+ *\r
+ */\r
+function adjustCurrentDate(){\r
+ gSelectedDate = new Date();\r
+ // minutes %5\r
+ gSelectedDate.setMinutes(parseInt(Math.round(gSelectedDate.getMinutes()/5)*5, 10));\r
+ UpdateCalendar();\r
+}\r
+function ConvertDateForDisplay(){\r
+ var displayDate = null;\r
+ var date = new Date();\r
+ if ( gSelectedDate ) {\r
+ date = gSelectedDate;\r
+ }\r
+ try{\r
+ // day\r
+ if(date.getDate()>=10){\r
+ displayDate = date.getDate();\r
+ }else{\r
+ displayDate = "0"+date.getDate();\r
+ }\r
+ //month\r
+ if((date.getMonth()+1)>=10){\r
+ displayDate += "/" + (date.getMonth()+1);\r
+ }else{\r
+ displayDate += "/0" + (date.getMonth()+1);\r
+ }\r
+ //year\r
+ displayDate += "/" + date.getFullYear() + " ";\r
+ // hour\r
+ if(date.getHours()>=10){\r
+ displayDate += "" + date.getHours();\r
+ }else{\r
+ displayDate += "0" + date.getHours();\r
+ }\r
+ //minutes\r
+ displayDate += ":";\r
+ if(date.getMinutes()>=10){\r
+ displayDate += date.getMinutes();\r
+ }else{\r
+ displayDate += "0" + date.getMinutes();\r
+ }\r
+ }catch( e ){\r
+ }\r
+ return displayDate;\r
+}\r
+function UpdateCalendar(){\r
+ try{\r
+ // Set up the picker, called when the popup pops\r
+ // get the start date from the popup value attribute and select it\r
+ var startDate = gSelectedDate;\r
+ if(startDate){\r
+ gOriginalDate = new Date( startDate );\r
+ gSelectedDate = new Date( startDate );\r
+ }else{\r
+ gOriginalDate = new Date();\r
+ gSelectedDate = new Date();\r
+ gSelectedDate.setMinutes(Math.round((gSelectedDate.getMinutes()/5))*5);\r
+ gOriginalDate.setMinutes(Math.round((gOriginalDate.getMinutes()/5))*5);\r
+ }\r
+ // draw the year based on the selected date\r
+ redrawYear();\r
+ // draw the month based on the selected date\r
+ var month = gSelectedDate.getMonth() + 1;\r
+ var selectedMonthBoxItem = document.getElementById("oe-date-picker-year-month-" + month + "-box" );\r
+ selectMonthItem( selectedMonthBoxItem );\r
+ // draw in the days for the selected date\r
+ redrawDays();\r
+ //EADS - draw in hours and minutes for selected date\r
+ var hour = gSelectedDate.getHours();\r
+ var selectedHoursBoxItem = document.getElementById("ximfmail-date-picker-hour-box-" + hour );\r
+ selectHoursItem(selectedHoursBoxItem);\r
+ var min = gSelectedDate.getMinutes();\r
+ var selectedMinutesBoxItem = null;\r
+ if(min%5 !== 0){\r
+ selectedMinutesBoxItem = document.getElementById("ximfmail-date-picker-min-box-" + (Math.round(min/5)*5) );\r
+ }else{\r
+ selectedMinutesBoxItem = document.getElementById("ximfmail-date-picker-min-box-" + min );\r
+ }\r
+ selectMinutesItem(selectedMinutesBoxItem);\r
+ // title calendar\r
+ $("#ximf-date-picker-title").attr("value", gTitleDlg.substring(0,gTitleDlg.lastIndexOf(":")));\r
+ }catch(e){}\r
+}\r
+function clickDay(newDayItem, newDayItemNumber){\r
+ // Called when a day is clicked, close the picker and call the client's oncommand\r
+ // get the clicked day\r
+ if( gSelectedDayItem === newDayItem ) {\r
+ return;\r
+ }\r
+ // update new selection\r
+ newDayItem.setAttribute("selected",true);\r
+ if(gSelectedDayItem){\r
+ gSelectedDayItem.removeAttribute("selected");\r
+ }\r
+ gSelectedDayItem = newDayItem;\r
+ var dayNumberItem = document.getElementById("oe-date-picker-month-day-text-" + newDayItemNumber );\r
+ var dayNumber = dayNumberItem.getAttribute( "value" );\r
+ // they may have clicked an unfilled day, if so ignore it and leave the picker up\r
+ if( dayNumber !== "" ){\r
+ selectDayItem(newDayItem);\r
+ // set the selected date to what they cliked on\r
+ gSelectedDate.setDate( dayNumber );\r
+ }\r
+}\r
+/*\r
+ *\r
+ */\r
+function clickMonth(newMonthItem, newMonthNumber){\r
+ // Called when a month box is clicked\r
+ // already selected, return\r
+ if( gSelectedMonthItem === newMonthItem ) {\r
+ return;\r
+ }\r
+ // update new selection\r
+ newMonthItem.setAttribute("selected",true);\r
+ if(gSelectedMonthItem){\r
+ gSelectedMonthItem.removeAttribute("selected");\r
+ }\r
+ gSelectedMonthItem = newMonthItem;\r
+ // Avoid problems when changing months if the date is at the end of the month\r
+ // i.e. if date is 31 march and you do a setmonth to april, the month would\r
+ // actually be set to may, beacause april only has 30 days.\r
+ // This is why we keep the original date around.\r
+ var oldDate = gSelectedDate.getDate();\r
+ var yearNumber = gSelectedDate.getFullYear();\r
+ var pastLastDate = new Date( yearNumber, newMonthNumber-1, 32 );\r
+ var lastDayOfMonth = 32 - pastLastDate.getDate();\r
+ if( oldDate > lastDayOfMonth ){\r
+ gSelectedDate.setDate(lastDayOfMonth);\r
+ }\r
+ // update the selected date\r
+ gSelectedDate.setMonth( newMonthNumber - 1 );\r
+ // select Month\r
+ selectMonthItem( newMonthItem );\r
+ // redraw days\r
+ redrawDays();\r
+}\r
+/*\r
+ *\r
+ */\r
+function previousYearCommand(increment){\r
+ // Called when previous Year button is clicked\r
+ // update the selected date\r
+ var oldYear = gSelectedDate.getFullYear();\r
+ gSelectedDate.setFullYear( oldYear - increment );\r
+ // redraw the year and the days\r
+ redrawYear();\r
+ redrawDays();\r
+}\r
+/*\r
+ *\r
+ */\r
+function nextYearCommand(increment){\r
+ // Called when next Year button is clicked\r
+ // update the selected date\r
+ var oldYear = gSelectedDate.getFullYear();\r
+ gSelectedDate.setFullYear( oldYear + increment );\r
+ // redraw the year and the days\r
+ redrawYear();\r
+ redrawDays();\r
+}\r
+/*\r
+ *\r
+ */\r
+function redrawYear(){\r
+ var yearTitleItem = document.getElementById("oe-date-picker-year-title-text");\r
+ yearTitleItem.setAttribute( "value", gSelectedDate.getFullYear() );\r
+}\r
+/*\r
+ *\r
+ */\r
+function selectMonthItem(newMonthItem){\r
+ // Select a month box\r
+ // clear old selection, if there is one\r
+ if( gSelectedMonthItem !== null ){\r
+ gSelectedMonthItem.removeAttribute("selected");\r
+ }\r
+ // Set the selected attribute, used to give it a different style\r
+ newMonthItem.setAttribute( "selected" , true );\r
+ // Remember new selection\r
+ gSelectedMonthItem = newMonthItem;\r
+}\r
+/*\r
+ *\r
+ */\r
+function selectDayItem(newDayItem){\r
+ // Select a day box\r
+ // clear old selection, if there is one\r
+ if( gSelectedDayItem !== null ){\r
+ gSelectedDayItem.removeAttribute("selected");\r
+ }\r
+ if( newDayItem !== null ){\r
+ // Set the selected attribute, used to give it a different style\r
+ newDayItem.setAttribute( "selected" , true );\r
+ }\r
+ // Remember new selection\r
+ gSelectedDayItem = newDayItem;\r
+}\r
+/*\r
+ *\r
+ */\r
+function redrawDays(){\r
+ // Redraw day numbers based on the selected date\r
+ // Write in all the day numbers\r
+ var firstDate = new Date( gSelectedDate.getFullYear(), gSelectedDate.getMonth(), 1 );\r
+ var firstDayOfWeek = firstDate.getDay();\r
+ //get last Day Of Month\r
+ var pastLastDate = new Date( gSelectedDate.getFullYear(), gSelectedDate.getMonth(), 32 );\r
+ var lastDayOfMonth = 32 - pastLastDate.getDate();\r
+ // clear the selected day item\r
+ selectDayItem( null );\r
+ // redraw each day bax in the 7 x 6 grid\r
+ var dayNumber = 1;\r
+ for( var dayIndex = 0; dayIndex < 42; ++dayIndex ){\r
+ // get the day text box\r
+ var dayNumberItem = document.getElementById("oe-date-picker-month-day-text-" + (dayIndex + 1) );\r
+ // if it is an unfilled day ( before first or after last ), just set its value to "",\r
+ // and don't increment the day number.\r
+ if( dayIndex < firstDayOfWeek || dayNumber > lastDayOfMonth )\r
+ {\r
+ dayNumberItem.setAttribute( "value" , "" );\r
+ }else{\r
+ // set the value to the day number\r
+ dayNumberItem.setAttribute( "value" , dayNumber );\r
+ // draw the day as selected\r
+ if( dayNumber === gSelectedDate.getDate() ){\r
+ var dayNumberBoxItem = document.getElementById( "oe-date-picker-month-day-" + (dayIndex + 1) + "-box" );\r
+ selectDayItem( dayNumberBoxItem );\r
+ }\r
+ // advance the day number\r
+ ++dayNumber;\r
+ }\r
+ }\r
+}\r
+/*\r
+ *\r
+ */\r
+function parseDate(datestr){\r
+ try{\r
+ if( datestr !== "" ){\r
+ var reg=new RegExp("[ / :]+", "g"); //eads\r
+ var parts = datestr.split(reg);\r
+ if( parts.length >= 5 ){\r
+ var new_date = new Date();\r
+ new_date.setDate(parseInt(parts[0], 10));\r
+ new_date.setMonth(parseInt(parts[1]-1, 10));\r
+ new_date.setFullYear(parseInt(parts[2], 10));\r
+ new_date.setHours(parseInt(parts[3], 10));\r
+ new_date.setMinutes(parseInt(parts[4], 10));\r
+ new_date.setSeconds(0);\r
+ return new_date;\r
+ }\r
+ }\r
+ }catch(e){}\r
+ return null;\r
+}\r
+/*\r
+ *\r
+ */\r
+function clickHour(newHoursItem,newHourItemNumber){\r
+ if( gSelectedHourItem === newHoursItem ) {\r
+ return;\r
+ }\r
+ selectHoursItem(newHoursItem);\r
+ gSelectedDate.setHours(parseInt(newHourItemNumber, 10));\r
+}\r
+/*\r
+ *\r
+ */\r
+function selectHoursItem(newHoursItem){\r
+ // Select a month box\r
+ // clear old selection, if there is one\r
+ if( gSelectedHourItem !== null ){\r
+ gSelectedHourItem.removeAttribute( "selected" );\r
+ }\r
+ // Set the selected attribute, used to give it a different style\r
+ newHoursItem.setAttribute( "selected" , true );\r
+ // Remember new selection\r
+ gSelectedHourItem = newHoursItem;\r
+}\r
+/*\r
+ *\r
+ */\r
+function clickMin(newMinItem,newMinItemNumber){\r
+ if ( gSelectedMinItem === newMinItem ) {\r
+ return;\r
+ }\r
+ // update new selection\r
+ selectMinutesItem(newMinItem);\r
+ gSelectedDate.setMinutes(parseInt(newMinItemNumber, 10));\r
+}\r
+/*\r
+ *\r
+ */\r
+function selectMinutesItem(newMinutesItem){\r
+ // Select a month box\r
+ // clear old selection, if there is one\r
+ if( gSelectedMinItem !== null ){\r
+ gSelectedMinItem.removeAttribute( "selected" );\r
+ }\r
+ // Set the selected attribute, used to give it a different style\r
+ newMinutesItem.setAttribute( "selected" , true );\r
+ // Remember new selection\r
+ gSelectedMinItem = newMinutesItem;\r
+}
\ No newline at end of file