Bug 1428849 - Remove datetimepicker.xml bindings. r=mconley draft
authorTim Nguyen <ntim.bugs@gmail.com>
Tue, 09 Jan 2018 19:39:30 +0000
changeset 717876 8a2c329fab9b90746af9a09877be049479459b75
parent 717360 7210063b2d2477847dceea089dbfd6d5432bdad0
child 745375 8719e43a8361140f07dba2a14974318c1a0e5031
push id94808
push userbmo:ntim.bugs@gmail.com
push dateTue, 09 Jan 2018 19:39:59 +0000
reviewersmconley
bugs1428849
milestone59.0a1
Bug 1428849 - Remove datetimepicker.xml bindings. r=mconley MozReview-Commit-ID: LhfabvhJP5d
testing/marionette/doc/api/interaction.js.html
testing/marionette/interaction.js
toolkit/content/jar.mn
toolkit/content/tests/chrome/chrome.ini
toolkit/content/tests/chrome/test_datepicker.xul
toolkit/content/tests/chrome/test_timepicker.xul
toolkit/content/widgets/datetimepicker.xml
toolkit/content/xul.css
toolkit/locales/en-US/chrome/global/datetimepicker.dtd
toolkit/locales/jar.mn
toolkit/themes/osx/global/arrow/arrow-lft-hov.gif
toolkit/themes/osx/global/arrow/arrow-lft.gif
toolkit/themes/osx/global/arrow/arrow-rit-hov.gif
toolkit/themes/osx/global/datetimepicker.css
toolkit/themes/osx/global/jar.mn
toolkit/themes/shared/non-mac.jar.inc.mn
toolkit/themes/windows/global/datetimepicker.css
toolkit/themes/windows/global/jar.mn
--- a/testing/marionette/doc/api/interaction.js.html
+++ b/testing/marionette/doc/api/interaction.js.html
@@ -53,17 +53,16 @@ this.EXPORTED_SYMBOLS = ["interaction"];
 
 /** XUL elements that support disabled attribute. */
 const DISABLED_ATTRIBUTE_SUPPORTED_XUL = new Set([
   "ARROWSCROLLBOX",
   "BUTTON",
   "CHECKBOX",
   "COLORPICKER",
   "COMMAND",
-  "DATEPICKER",
   "DESCRIPTION",
   "KEY",
   "KEYSET",
   "LABEL",
   "LISTBOX",
   "LISTCELL",
   "LISTHEAD",
   "LISTHEADER",
@@ -76,17 +75,16 @@ const DISABLED_ATTRIBUTE_SUPPORTED_XUL =
   "RADIO",
   "RADIOGROUP",
   "RICHLISTBOX",
   "RICHLISTITEM",
   "SCALE",
   "TAB",
   "TABS",
   "TEXTBOX",
-  "TIMEPICKER",
   "TOOLBARBUTTON",
   "TREE",
 ]);
 
 /** XUL elements that support checked property. */
 const CHECKED_PROPERTY_SUPPORTED_XUL = new Set([
   "BUTTON",
   "CHECKBOX",
--- a/testing/marionette/interaction.js
+++ b/testing/marionette/interaction.js
@@ -27,17 +27,16 @@ this.EXPORTED_SYMBOLS = ["interaction"];
 
 /** XUL elements that support disabled attribute. */
 const DISABLED_ATTRIBUTE_SUPPORTED_XUL = new Set([
   "ARROWSCROLLBOX",
   "BUTTON",
   "CHECKBOX",
   "COLORPICKER",
   "COMMAND",
-  "DATEPICKER",
   "DESCRIPTION",
   "KEY",
   "KEYSET",
   "LABEL",
   "LISTBOX",
   "LISTCELL",
   "LISTHEAD",
   "LISTHEADER",
@@ -50,17 +49,16 @@ const DISABLED_ATTRIBUTE_SUPPORTED_XUL =
   "RADIO",
   "RADIOGROUP",
   "RICHLISTBOX",
   "RICHLISTITEM",
   "SCALE",
   "TAB",
   "TABS",
   "TEXTBOX",
-  "TIMEPICKER",
   "TOOLBARBUTTON",
   "TREE",
 ]);
 
 /**
  * Common form controls that user can change the value property
  * interactively.
  */
--- a/toolkit/content/jar.mn
+++ b/toolkit/content/jar.mn
@@ -66,17 +66,16 @@ toolkit.jar:
    content/global/bindings/autocomplete.xml    (widgets/autocomplete.xml)
    content/global/bindings/browser.xml         (widgets/browser.xml)
    content/global/bindings/button.xml          (widgets/button.xml)
    content/global/bindings/calendar.js         (widgets/calendar.js)
    content/global/bindings/checkbox.xml        (widgets/checkbox.xml)
    content/global/bindings/colorpicker.xml     (widgets/colorpicker.xml)
    content/global/bindings/datekeeper.js       (widgets/datekeeper.js)
    content/global/bindings/datepicker.js       (widgets/datepicker.js)
-   content/global/bindings/datetimepicker.xml  (widgets/datetimepicker.xml)
    content/global/bindings/datetimepopup.xml   (widgets/datetimepopup.xml)
    content/global/bindings/datetimebox.xml     (widgets/datetimebox.xml)
    content/global/bindings/datetimebox.css     (widgets/datetimebox.css)
 *  content/global/bindings/dialog.xml          (widgets/dialog.xml)
    content/global/bindings/editor.xml          (widgets/editor.xml)
    content/global/bindings/filefield.xml       (widgets/filefield.xml)
 *  content/global/bindings/findbar.xml         (widgets/findbar.xml)
    content/global/bindings/general.xml         (widgets/general.xml)
--- a/toolkit/content/tests/chrome/chrome.ini
+++ b/toolkit/content/tests/chrome/chrome.ini
@@ -98,17 +98,16 @@ fail-if = (os == 'win' && ccov) # Bug 14
 skip-if = (os == 'mac' && os_version == '10.10') # Unexpectedly perma-passes on OSX 10.10
 [test_bug792324.xul]
 [test_bug1048178.xul]
 skip-if = toolkit == "cocoa"
 [test_button.xul]
 [test_closemenu_attribute.xul]
 [test_colorpicker_popup.xul]
 [test_contextmenu_list.xul]
-[test_datepicker.xul]
 [test_deck.xul]
 [test_dialogfocus.xul]
 [test_findbar.xul]
 fail-if = (os == 'win' && ccov) # Bug 1423667
 subsuite = clipboard
 [test_findbar_entireword.xul]
 [test_findbar_events.xul]
 [test_focus_anons.xul]
@@ -172,17 +171,16 @@ support-files = window_preferences_onsyn
 [test_showcaret.xul]
 [test_subframe_origin.xul]
 [test_tabbox.xul]
 [test_tabindex.xul]
 [test_textbox_dictionary.xul]
 [test_textbox_emptytext.xul]
 [test_textbox_number.xul]
 [test_textbox_search.xul]
-[test_timepicker.xul]
 [test_titlebar.xul]
 skip-if = os == "linux"
 [test_toolbar.xul]
 [test_tooltip.xul]
 skip-if = (os == 'mac' && os_version == '10.10') || (os == 'win') # Bug 1141245, frequent timeouts on OSX 10.10, Windows
 [test_tooltip_noautohide.xul]
 [test_tree.xul]
 [test_tree_hier.xul]
deleted file mode 100644
--- a/toolkit/content/tests/chrome/test_datepicker.xul
+++ /dev/null
@@ -1,415 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
-<!--
-  XUL Widget Test for datepicker
-  -->
-<window title="datepicker" width="500" height="600"
-        onload="setTimeout(testtag_datepickers, 0);"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
-
-<hbox onpopupshown="testtag_datepicker_UI_popup()"
-      onpopuphidden="testtag_finish()">
-<datepicker id="datepicker"/>
-<datepicker id="datepicker-popup" type="popup"/>
-<hbox onDOMMouseScroll="mouseScrolled = event.defaultPrevented;">
-  <datepicker id="datepicker-grid" type="grid" value="2007-04-21"/>
-</hbox>
-</hbox>
-
-<!-- Test-only key bindings, but must not conflict with the application. -->
-<keyset id="mainKeyset">
-  <key id="key_alt_z" key="Z" oncommand="return" modifiers="alt"/>
-  <key id="key_ctrl_q" key="Q" oncommand="return" modifiers="control"/>
-  <key id="key_meta_e" key="E" oncommand="return" modifiers="meta"/>
-</keyset>
-
-<body xmlns="http://www.w3.org/1999/xhtml">
-<p id="display"></p>
-<div id="content" style="display: none">
-</div>
-<pre id="test">
-</pre>
-</body>
-
-<script>
-<![CDATA[
-
-var mouseScrolled = false;
-
-SimpleTest.waitForExplicitFinish();
-
-function testtag_datepickers()
-{
-  var dppopup = document.getElementById("datepicker-popup");
-  testtag_datepicker(document.getElementById("datepicker"), "", "datepicker");
-  testtag_datepicker(dppopup, "popup", "datepicker popup");
-
-  var gridpicker = document.getElementById("datepicker-grid");
-  is(gridpicker.monthField.selectedIndex, "3", "datepicker grid correct month is initially selected");
-  testtag_datepicker(gridpicker, "grid", "datepicker grid");
-  dppopup.open = true;
-}
-
-function testtag_finish()
-{
-  ok(!document.getElementById("datepicker-popup").open, "datepicker popup open false again");
-
-  var dpgrid = document.getElementById("datepicker-grid");
-  synthesizeWheel(dpgrid, 5, 5, { deltaY: 10.0,
-                                  deltaMode: WheelEvent.DOM_DELTA_LINE });
-  is(mouseScrolled, true, "mouse scrolled");
-  is(dpgrid.displayedMonth, 2, "mouse scroll changed month");
-
-  SimpleTest.finish();
-}
-
-function testtag_datepicker(dp, type, testid)
-{
-  testid += " ";
-
-  var today = new Date();
-  var tyear = today.getFullYear();
-  var tmonth = today.getMonth();
-  var tdate = today.getDate();
-
-  // testtag_comparedate(dp, testid + "initial", tyear, tmonth, tdate);
-
-  // check that setting the value property works
-  dp.value = testtag_getdatestring(tyear, tmonth, tdate);
-  testtag_comparedate(dp, testid + "set value", tyear, tmonth, tdate);
-
-  // check that setting the dateValue property works
-  dp.dateValue = today;
-  testtag_comparedate(dp, testid + "set dateValue", tyear, tmonth, tdate);
-  ok(dp.value !== today, testid + " set dateValue different date");
-
-  ok(!dp.readOnly, testid + "readOnly");
-  dp.readOnly = true;
-  ok(dp.readOnly, testid + "set readOnly");
-  dp.readOnly = false;
-  ok(!dp.readOnly, testid + "clear readOnly");
-
-  var setDateField = function(field, value, expectException,
-                              expectedYear, expectedMonth, expectedDate)
-  {
-    var exh = false;
-    try {
-      dp[field] = value;
-    } catch (ex) { exh = true; }
-    is(exh, expectException, testid + "set " + field + " " + value);
-    testtag_comparedate(dp, testid + "set " + field + " " + value,
-                        expectedYear, expectedMonth, expectedDate);
-  }
-
-  // check the value property
-  setDateField("value", "2003-1-27", false, 2003, 0, 27);
-  setDateField("value", "2002-11-8", false, 2002, 10, 8);
-  setDateField("value", "2001-07-02", false, 2001, 6, 2);
-  setDateField("value", "2002-10-25", false, 2002, 9, 25);
-
-  // check that the year, month and date fields can be set properly
-  setDateField("year", 2002, false, 2002, 9, 25);
-  setDateField("year", 0, true, 2002, 9, 25);
-
-  setDateField("month", 6, false, 2002, 6, 25);
-  setDateField("month", 9, false, 2002, 9, 25);
-  setDateField("month", 10, false, 2002, 10, 25);
-  setDateField("month", -1, true, 2002, 10, 25);
-  setDateField("month", 12, true, 2002, 10, 25);
-
-  setDateField("date", 9, false, 2002, 10, 9);
-  setDateField("date", 10, false, 2002, 10, 10);
-  setDateField("date", 15, false, 2002, 10, 15);
-  setDateField("date", 0, true, 2002, 10, 15);
-  setDateField("date", 32, true, 2002, 10, 15);
-
-  // check leap year handling
-  setDateField("value", "1600-2-29", false, 1600, 1, 29);
-  setDateField("value", "2000-2-29", false, 2000, 1, 29);
-  setDateField("value", "2003-2-29", false, 2003, 2, 1);
-  setDateField("value", "2004-2-29", false, 2004, 1, 29);
-  setDateField("value", "2100-2-29", false, 2100, 2, 1);
-
-  // check invalid values for the value and dateValue properties
-  dp.value = "2002-07-15";
-  setDateField("value", "", true, 2002, 6, 15);
-  setDateField("value", "2-2", true, 2002, 6, 15);
-  setDateField("value", "2000-5-6-6", true, 2002, 6, 15);
-  setDateField("value", "2000-a-19", true, 2002, 6, 15);
-  setDateField("dateValue", "none", true, 2002, 6, 15);
-
-  // grid and popup types can display a different month than the current one
-  var isGridOrPopup = (type == "grid" || type == "popup");
-  dp.displayedMonth = 3;
-  testtag_comparedate(dp, testid + "set displayedMonth",
-                      2002, isGridOrPopup ? 6 : 3, 15, 3);
-
-  dp.displayedYear = 2009;
-  testtag_comparedate(dp, testid + "set displayedYear",
-                      isGridOrPopup ? 2002 : 2009, isGridOrPopup ? 6 : 3, 15, 3, 2009);
-
-  if (isGridOrPopup) {
-    dp.value = "2008-02-29";
-    dp.displayedYear = 2009;
-    is(dp.displayedMonth, 1, "set displayedYear during leap year");
-  }
-
-  is(dp.open, false, testid + "open false");
-  if (type != "popup") {
-    dp.open = true;
-    ok(!dp.open, testid + "open still false");
-  }
-
-  // check the fields
-  if (type != "grid") {
-    ok(dp.yearField instanceof HTMLInputElement, testid + "yearField");
-    ok(dp.monthField instanceof HTMLInputElement, testid + "monthField");
-    ok(dp.dateField instanceof HTMLInputElement, testid + "dateField");
-
-    testtag_datepicker_UI_fields(dp, testid);
-
-    dp.readOnly = true;
-
-    // check that keyboard usage doesn't change the value when the datepicker
-    // is read only
-    testtag_datepicker_UI_key(dp, testid + "readonly ", "2003-01-29",
-                              dp.yearField, 2003, 0, 29, 2003, 0, 29);
-    testtag_datepicker_UI_key(dp, testid + "readonly ", "2003-04-29",
-                              dp.monthField, 2003, 3, 29, 2003, 3, 29);
-    testtag_datepicker_UI_key(dp, testid + "readonly ", "2003-06-15",
-                              dp.dateField, 2003, 5, 15, 2003, 5, 15);
-
-    dp.readOnly = false;
-  }
-  else {
-    testtag_datepicker_UI_grid(dp, "grid", testid);
-  }
-}
-
-function testtag_datepicker_UI_fields(dp, testid)
-{
-  testid += "UI";
-  dp.focus();
-
-  // test adjusting the date with the up and down keys
-  testtag_datepicker_UI_key(dp, testid, "2003-01-29", dp.yearField, 2004, 0, 29, 2003, 0, 29);
-  testtag_datepicker_UI_key(dp, testid, "1600-02-29", dp.yearField, 1601, 1, 28, 1600, 1, 28);
-  testtag_datepicker_UI_key(dp, testid, "2000-02-29", dp.yearField, 2001, 1, 28, 2000, 1, 28);
-  testtag_datepicker_UI_key(dp, testid, "2004-02-29", dp.yearField, 2005, 1, 28, 2004, 1, 28);
-
-  testtag_datepicker_UI_key(dp, testid, "2003-04-29", dp.monthField, 2003, 4, 29, 2003, 3, 29);
-  testtag_datepicker_UI_key(dp, testid, "2003-01-15", dp.monthField, 2003, 1, 15, 2003, 0, 15);
-  testtag_datepicker_UI_key(dp, testid, "2003-12-29", dp.monthField, 2003, 0, 29, 2003, 11, 29);
-  testtag_datepicker_UI_key(dp, testid, "2003-03-31", dp.monthField, 2003, 3, 30, 2003, 2, 30);
-
-  testtag_datepicker_UI_key(dp, testid, "2003-06-15", dp.dateField, 2003, 5, 16, 2003, 5, 15);
-  testtag_datepicker_UI_key(dp, testid, "2003-06-01", dp.dateField, 2003, 5, 2, 2003, 5, 1);
-  testtag_datepicker_UI_key(dp, testid, "2003-06-30", dp.dateField, 2003, 5, 1, 2003, 5, 30);
-  testtag_datepicker_UI_key(dp, testid, "1600-02-28", dp.dateField, 1600, 1, 29, 1600, 1, 28);
-  testtag_datepicker_UI_key(dp, testid, "2000-02-28", dp.dateField, 2000, 1, 29, 2000, 1, 28);
-  testtag_datepicker_UI_key(dp, testid, "2003-02-28", dp.dateField, 2003, 1, 1, 2003, 1, 28);
-  testtag_datepicker_UI_key(dp, testid, "2004-02-28", dp.dateField, 2004, 1, 29, 2004, 1, 28);
-  testtag_datepicker_UI_key(dp, testid, "2100-02-28", dp.dateField, 2100, 1, 1, 2100, 1, 28);
-
-  synthesizeKeyExpectEvent('Z', { altKey: true }, $("key_alt_z"), "command", testid + " alt shortcut");
-  synthesizeKeyExpectEvent('Q', { ctrlKey: true }, $("key_ctrl_q"), "command", testid + " ctrl shortcut");
-  synthesizeKeyExpectEvent('E', { metaKey: true }, $("key_meta_e"), "command", testid + " meta shortcut");
-}
-
-function testtag_datepicker_UI_grid(dp, type, testid)
-{
-  testid += "UI ";
-
-  // check that pressing the cursor keys moves the date properly. For grid
-  // types, focus the grid first. For popup types, the grid should be focused
-  // automatically when opening the popup.
-  var ktarget = dp;
-  if (type == "grid")
-    dp.focus();
-  else
-    ktarget = dp.attachedControl;
-
-  dp.value = "2003-02-22";
-
-  synthesizeKeyExpectEvent("VK_LEFT", { }, ktarget, "change", testid + "key left");
-  is(dp.value, "2003-02-21", testid + "key left");
-
-  synthesizeKeyExpectEvent("VK_RIGHT", { }, ktarget, "change", testid + "key right");
-  is(dp.value, "2003-02-22", testid + "key right");
-  synthesizeKeyExpectEvent("VK_RIGHT", { }, ktarget, "change", testid + "key right next week");
-  is(dp.value, "2003-02-23", testid + "key right next week");
-  synthesizeKeyExpectEvent("VK_LEFT", { }, ktarget, "change", testid + "key left previous week");
-  is(dp.value, "2003-02-22", testid + "key left previous week");
-
-  synthesizeKeyExpectEvent("VK_UP", { }, ktarget, "change", testid + "key up");
-  is(dp.value, "2003-02-15", testid + "key up");
-  synthesizeKeyExpectEvent("VK_DOWN", { }, ktarget, "change", testid + "key down");
-  is(dp.value, "2003-02-22", testid + "key down");
-  synthesizeKeyExpectEvent("VK_DOWN", { }, ktarget, "change");
-  is(dp.value, "2003-03-01", testid + "key down next month", testid + "key down next month");
-  synthesizeKeyExpectEvent("VK_UP", { }, ktarget, "change");
-  is(dp.value, "2003-02-22", testid + "key up previous month", testid + "key up previous month");
-
-  // the displayed month may be changed with the page up and page down keys,
-  // however this only changes the displayed month, not the current value.
-  synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down");
-  is(dp.value, "2003-02-22", testid + "key page down");
-
-  // the monthchange event is fired when the displayed month is changed
-  synthesizeKeyExpectEvent("VK_UP", { }, ktarget, "monthchange", testid + "key up after month change");
-  is(dp.value, "2003-02-15", testid + "key up after month change");
-
-  synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up");
-  is(dp.value, "2003-02-15", testid + "key page up");
-
-  // check handling at the start and end of the month
-  dp.value = "2010-10-01";
-  synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up 2010-10-01");
-  is(dp.displayedMonth, 8, testid + "key page up 2010-10-01 displayedMonth");
-  is(dp.displayedYear, 2010, testid + "key page up 2010-10-01 displayedYear");
-
-  dp.value = "2010-10-01";
-  synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down 2010-10-01");
-  is(dp.displayedMonth, 10, testid + "key page down 2010-10-01 displayedMonth");
-  is(dp.displayedYear, 2010, testid + "key page down 2010-10-01 displayedYear");
-
-  dp.value = "2010-10-31";
-  synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up 2010-10-31");
-  is(dp.displayedMonth, 8, testid + "key page up 2010-10-31 displayedMonth");
-  is(dp.displayedYear, 2010, testid + "key page up 2010-10-01 displayedYear");
-  dp.value = "2010-10-31";
-  synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down 2010-10-31");
-  is(dp.displayedMonth, 10, testid + "key page down 2010-10-31 displayedMonth");
-  is(dp.displayedYear, 2010, testid + "key page up 2010-10-31 displayedYear");
-
-  // check handling at the end of february
-  dp.value = "2010-03-31";
-  synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up 2010-03-31");
-  is(dp.displayedMonth, 1, testid + "key page up 2010-03-31 displayedMonth");
-  is(dp.displayedYear, 2010, testid + "key page up 2010-03-31 displayedYear");
-  synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up 2010-02-28");
-  is(dp.displayedMonth, 0, testid + "key page up 2010-02-28 displayedMonth");
-  is(dp.displayedYear, 2010, testid + "key page up 2010-02-28 displayedYear");
-
-  dp.value = "2010-01-31";
-  synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down 2010-01-31");
-  is(dp.displayedMonth, 1, testid + "key page down 2010-01-31 displayedMonth");
-  is(dp.displayedYear, 2010, testid + "key page up 2010-01-31 displayedYear");
-  synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down 2010-02-28");
-  is(dp.displayedMonth, 2, testid + "key page down 2010-02-28 displayedMonth");
-  is(dp.displayedYear, 2010, testid + "key page up 2010-02-28 displayedYear");
-
-  // check handling at the end of february during a leap year
-  dp.value = "2008-01-31";
-  synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down 2008-01-31");
-  is(dp.displayedMonth, 1, testid + "key page down 2008-01-31 displayedMonth");
-  is(dp.displayedYear, 2008, testid + "key page up 2008-01-31 displayedYear");
-  dp.value = "2008-03-31";
-  synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up 2008-03-31");
-  is(dp.displayedMonth, 1, testid + "key page up 2008-03-31 displayedMonth");
-  is(dp.displayedYear, 2008, testid + "key page up 2008-03-31 displayedYear");
-
-  // the value of a read only datepicker cannot be changed
-  dp.value = "2003-02-15";
-
-  dp.readOnly = true;
-  synthesizeKeyExpectEvent("VK_LEFT", { }, ktarget, "!change", testid + "key left read only");
-  is(dp.value, "2003-02-15", testid + "key left read only");
-  synthesizeKeyExpectEvent("VK_RIGHT", { }, ktarget, "!change", testid + "key right read only");
-  is(dp.value, "2003-02-15", testid + "key right read only");
-  synthesizeKeyExpectEvent("VK_DOWN", { }, ktarget, "!change", testid + "key down read only");
-  is(dp.value, "2003-02-15", testid + "key down read only");
-  synthesizeKeyExpectEvent("VK_UP", { }, ktarget, "!change", testid + "key up read only");
-  is(dp.value, "2003-02-15", testid + "key up read only");
-
-  // month can still be changed even when readonly
-  synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange",
-                           testid + "key page up read only");
-  synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange",
-                           testid + "key page down read only");
-
-  dp.readOnly = false;
-  synthesizeKeyExpectEvent("VK_LEFT", { }, ktarget, "change", testid + "key left changeable again");
-  is(dp.value, "2003-02-14", testid + "key left changeable again");
-
-  // the value of a disabled datepicker cannot be changed
-  dp.disabled = true;
-  synthesizeKeyExpectEvent("VK_LEFT", { }, ktarget, "!change", testid + "key left disabled");
-  is(dp.value, "2003-02-14", testid + "key left disabled");
-  synthesizeKeyExpectEvent("VK_RIGHT", { }, ktarget, "!change", testid + "key right disabled");
-  is(dp.value, "2003-02-14", testid + "key right disabled");
-  synthesizeKeyExpectEvent("VK_DOWN", { }, ktarget, "!change", testid + "key down disabled");
-  is(dp.value, "2003-02-14", testid + "key down disabled");
-  synthesizeKeyExpectEvent("VK_UP", { }, ktarget, "!change", testid + "key up disabled");
-  is(dp.value, "2003-02-14", testid + "key up disabled");
-
-  // month cannot be changed even when disabled
-  synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "!monthchange",
-                           testid + "key page down disabled");
-  synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "!monthchange",
-                           testid + "key page up disabled");
-
-  dp.disabled = false;
-  synthesizeKeyExpectEvent("VK_RIGHT", { }, ktarget, "change", testid + "key right enabled again");
-  is(dp.value, "2003-02-15", testid + "key right enabled again");
-}
-
-function testtag_datepicker_UI_popup()
-{
-  var dppopup = document.getElementById("datepicker-popup");
-  is(dppopup.open, true, "datepicker popup after open");
-  testtag_datepicker_UI_grid(dppopup, "popup", "datepicker popup ");
-  dppopup.open = false;
-}
-
-function testtag_datepicker_UI_key(dp, testid, value, field,
-                                   uyear, umonth, udate,
-                                   dyear, dmonth, ddate)
-{
-  dp.value = value;
-  field.focus();
-
-  synthesizeKey("VK_UP", { });
-  testtag_comparedate(dp, testid + " " + value + " key up", uyear, umonth, udate);
-
-  synthesizeKey("VK_DOWN", { });
-  testtag_comparedate(dp, testid + " " + value + " key down", dyear, dmonth, ddate);
-}
-
-function testtag_getdatestring(year, month, date)
-{
-  month = (month < 9) ? ("0" + ++month) : month + 1;
-  if (date < 10)
-    date = "0" + date;
-  return year + "-" + month + "-" + date;
-}
-
-function testtag_comparedate(dp, testid, year, month, date, displayedMonth, displayedYear)
-{
-  is(dp.value, testtag_getdatestring(year, month, date), testid + " value");
-  if (testid.indexOf("initial") == -1)
-    is(dp.getAttribute("value"),
-                  testtag_getdatestring(year, month, date),
-                  testid + " value attribute");
-
-  var dateValue = dp.dateValue;
-  ok(dateValue.getFullYear() == year &&
-                dateValue.getMonth() == month &&
-                dateValue.getDate() == date,
-                testid + " dateValue");
-
-  is(dp.year, year, testid + " year");
-  is(dp.month, month, testid + " month");
-  is(dp.displayedMonth, displayedMonth ? displayedMonth : month, testid + " displayedMonth");
-  is(dp.displayedYear, displayedYear ? displayedYear : year, testid + " displayedYear");
-  is(dp.date, date, testid + " date");
-}
-
-]]>
-
-</script>
-
-</window>
deleted file mode 100644
--- a/toolkit/content/tests/chrome/test_timepicker.xul
+++ /dev/null
@@ -1,207 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
-<!--
-  XUL Widget Test for timepicker
-  -->
-<window title="timepicker" width="500" height="600"
-        onload="setTimeout(testtag_timepicker, 0);"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>  
-  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>  
-
-<timepicker id="timepicker"/>
-
-<body xmlns="http://www.w3.org/1999/xhtml">
-<p id="display"></p>
-<div id="content" style="display: none">
-</div>
-<pre id="test">
-</pre>
-</body>
-
-<script>
-<![CDATA[
-
-SimpleTest.waitForExplicitFinish();
-
-function testtag_timepicker()
-{
-  var tp = document.getElementById("timepicker");
-  
-  var testid = "timepicker ";
-
-  var today = new Date();
-  var thour = today.getHours();
-  var tminute = today.getMinutes();
-  var tsecond = today.getSeconds();
-
-  // testtag_comparetime(tp, testid + "initial", thour, tminute, tsecond);
-
-  // check that setting the value property works
-  tp.value = testtag_gettimestring(thour, tminute, tsecond);
-  testtag_comparetime(tp, testid + "set value", thour, tminute, tsecond);
-
-  var numberOrder = /^(\D*)\s*(\d+)(\D*)(\d+)(\D*)(\d+)\s*(\D*)$/;
-  var locale = Intl.DateTimeFormat().resolvedOptions().locale + "-u-ca-gregory-nu-latn";
-  var fdt = new Date(2000,0,1,16,7,9).toLocaleTimeString(locale);
-  is(tp.is24HourClock, Number(fdt.match(numberOrder)[2]) > 12, "is24HourClock");
-
-  // check that setting the dateValue property works
-  tp.dateValue = today;
-  testtag_comparetime(tp, testid + "set dateValue", thour, tminute, tsecond);
-  ok(tp.value !== today, testid + " set dateValue different time");
-
-  ok(!tp.readOnly, testid + "readOnly");
-  tp.readOnly = true;
-  ok(tp.readOnly, testid + "set readOnly");
-  tp.readOnly = false;
-  ok(!tp.readOnly, testid + "clear readOnly");
-
-  function setTimeField(field, value, expectException,
-                        expectedHour, expectedMinute, expectedSecond)
-  {
-    var exh = false;
-    try {
-      tp[field] = value;
-    } catch (ex) { exh = true; }
-    is(exh, expectException, testid + "set " + field + " " + value);
-    testtag_comparetime(tp, testid + "set " + field + " " + value,
-                        expectedHour, expectedMinute, expectedSecond);
-  }
-
-  // check the value property
-  setTimeField("value", "0:0:0", false, 0, 0, 0);
-  setTimeField("value", "21:1:40", false, 21, 1, 40);
-  setTimeField("value", "7:11:8", false, 7, 11, 8);
-  setTimeField("value", "04:07:02", false, 4, 7, 2);
-  setTimeField("value", "10:42:20", false, 10, 42, 20);
-
-  // check that the hour, minute and second fields can be set properly
-  setTimeField("hour", 7, false, 7, 42, 20);
-  setTimeField("hour", 0, false, 0, 42, 20);
-  setTimeField("hour", 21, false, 21, 42, 20);
-  setTimeField("hour", -1, true, 21, 42, 20);
-  setTimeField("hour", 24, true, 21, 42, 20);
-
-  setTimeField("minute", 0, false, 21, 0, 20);
-  setTimeField("minute", 9, false, 21, 9, 20);
-  setTimeField("minute", 10, false, 21, 10, 20);
-  setTimeField("minute", 35, false, 21, 35, 20);
-  setTimeField("minute", -1, true, 21, 35, 20);
-  setTimeField("minute", 60, true, 21, 35, 20);
-
-  setTimeField("second", 0, false, 21, 35, 0);
-  setTimeField("second", 9, false, 21, 35, 9);
-  setTimeField("second", 10, false, 21, 35, 10);
-  setTimeField("second", 51, false, 21, 35, 51);
-  setTimeField("second", -1, true, 21, 35, 51);
-  setTimeField("second", 60, true, 21, 35, 51);
-
-  // check when seconds is not specified
-  setTimeField("value", "06:05", false, 6, 5, 0);
-  setTimeField("value", "06:15", false, 6, 15, 0);
-  setTimeField("value", "16:15", false, 16, 15, 0);
-
-  // check that times overflow properly
-  setTimeField("value", "5:65:21", false, 6, 5, 21);
-  setTimeField("value", "5:25:72", false, 5, 26, 12);
-
-  // check invalid values for the value and dateValue properties
-  tp.value = "14:25:48";
-  setTimeField("value", "", true, 14, 25, 48);
-  setTimeField("value", "1:5:6:6", true, 14, 25, 48);
-  setTimeField("value", "2:a:19", true, 14, 25, 48);
-  setTimeField("dateValue", "none", true, 14, 25, 48);
-
-  // check the fields
-  ok(tp.hourField instanceof HTMLInputElement, testid + "hourField");
-  ok(tp.minuteField instanceof HTMLInputElement, testid + "minuteField");
-  ok(tp.secondField instanceof HTMLInputElement, testid + "secondField");
-
-  testtag_timepicker_UI(tp, testid);
-
-  tp.readOnly = true;
-
-  // check that keyboard usage doesn't change the value when the timepicker
-  // is read only
-  testtag_timepicker_UI_key(tp, testid + "readonly ", "14:25:48",
-                            tp.hourField, 14, 25, 48, 14, 25, 48);
-  testtag_timepicker_UI_key(tp, testid + "readonly ", "14:25:48",
-                            tp.minuteField, 14, 25, 48, 14, 25, 48);
-  testtag_timepicker_UI_key(tp, testid + "readonly ", "14:25:48",
-                            tp.secondField, 14, 25, 48, 14, 25, 48);
-
-  SimpleTest.finish();
-}
-
-function testtag_timepicker_UI(tp, testid)
-{
-  testid += "UI";
-
-  // test adjusting the time with the up and down keys
-  testtag_timepicker_UI_key(tp, testid, "0:12:25", tp.hourField, 1, 12, 25, 0, 12, 25);
-  testtag_timepicker_UI_key(tp, testid, "11:12:25", tp.hourField, 12, 12, 25, 11, 12, 25);
-  testtag_timepicker_UI_key(tp, testid, "7:12:25", tp.hourField, 8, 12, 25, 7, 12, 25);
-  testtag_timepicker_UI_key(tp, testid, "16:12:25", tp.hourField, 17, 12, 25, 16, 12, 25);
-  testtag_timepicker_UI_key(tp, testid, "23:12:25", tp.hourField, 0, 12, 25, 23, 12, 25);
-
-  testtag_timepicker_UI_key(tp, testid, "15:23:46", tp.minuteField, 15, 24, 46, 15, 23, 46);
-  testtag_timepicker_UI_key(tp, testid, "15:0:46", tp.minuteField, 15, 1, 46, 15, 0, 46);
-  testtag_timepicker_UI_key(tp, testid, "15:59:46", tp.minuteField, 15, 0, 46, 15, 59, 46);
-
-  testtag_timepicker_UI_key(tp, testid, "11:50:46", tp.secondField, 11, 50, 47, 11, 50, 46);
-  testtag_timepicker_UI_key(tp, testid, "11:50:0", tp.secondField, 11, 50, 1, 11, 50, 0);
-  testtag_timepicker_UI_key(tp, testid, "11:50:59", tp.secondField, 11, 50, 0, 11, 50, 59);
-}
-
-function testtag_timepicker_UI_key(tp, testid, value, field,
-                                   uhour, uminute, usecond,
-                                   dhour, dminute, dsecond)
-{
-  tp.value = value;
-  field.focus();
-
-  var eventTarget = tp.readOnly ? null : tp;
-
-  var testname = testid + " " + value + " key up";
-  synthesizeKeyExpectEvent("VK_UP", { }, eventTarget, "change", testname);
-  testtag_comparetime(tp, testname, uhour, uminute, usecond);
-
-  testname = testid + " " + value + " key down";
-  synthesizeKeyExpectEvent("VK_DOWN", { }, eventTarget, "change", testname);
-  testtag_comparetime(tp, testname, dhour, dminute, dsecond);
-}
-
-function testtag_gettimestring(hour, minute, second)
-{
-  if (minute < 10)
-    minute = "0" + minute;
-  if (second < 10)
-    second = "0" + second;
-  return hour + ":" + minute + ":" + second;
-}
-
-function testtag_comparetime(tp, testid, hour, minute, second)
-{
-  is(tp.value, testtag_gettimestring(hour, minute, second), testid + " value");
-  is(tp.getAttribute("value"),
-                testtag_gettimestring(hour, minute, second),
-                testid + " value attribute");
-
-  var dateValue = tp.dateValue;
-  ok(dateValue.getHours() == hour &&
-                dateValue.getMinutes() == minute &&
-                dateValue.getSeconds() == second,
-                testid + " dateValue");
-
-  is(tp.hour, hour, testid + " hour");
-  is(tp.minute, minute, testid + " minute");
-  is(tp.second, second, testid + " second");
-}
-
-]]>
-
-</script>
-
-</window>
deleted file mode 100644
--- a/toolkit/content/widgets/datetimepicker.xml
+++ /dev/null
@@ -1,1282 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE bindings [
-  <!ENTITY % datetimepickerDTD SYSTEM "chrome://global/locale/datetimepicker.dtd">
-  %datetimepickerDTD;
-]>
-
-<bindings id="timepickerBindings"
-   xmlns="http://www.mozilla.org/xbl"
-   xmlns:html="http://www.w3.org/1999/xhtml"
-   xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-   xmlns:xbl="http://www.mozilla.org/xbl">
-
-  <binding id="datetimepicker-base"
-           extends="chrome://global/content/bindings/general.xml#basecontrol">
-
-    <resources>
-      <stylesheet src="chrome://global/content/textbox.css"/>
-      <stylesheet src="chrome://global/skin/textbox.css"/>
-      <stylesheet src="chrome://global/skin/dropmarker.css"/>
-      <stylesheet src="chrome://global/skin/datetimepicker.css"/>
-    </resources>
-
-    <content align="center">
-      <xul:hbox class="datetimepicker-input-box" align="center"
-                xbl:inherits="context,disabled,readonly">
-        <xul:hbox class="textbox-input-box datetimepicker-input-subbox" align="center">
-          <html:input class="datetimepicker-input textbox-input" anonid="input-one"
-                      size="2" maxlength="2"
-                      xbl:inherits="disabled,readonly"/>
-        </xul:hbox>
-        <xul:label anonid="sep-first" class="datetimepicker-separator" value=":"/>
-        <xul:hbox class="textbox-input-box datetimepicker-input-subbox" align="center">
-          <html:input class="datetimepicker-input textbox-input" anonid="input-two"
-                      size="2" maxlength="2"
-                      xbl:inherits="disabled,readonly"/>
-        </xul:hbox>
-        <xul:label anonid="sep-second" class="datetimepicker-separator" value=":"/>
-        <xul:hbox class="textbox-input-box datetimepicker-input-subbox" align="center">
-          <html:input class="datetimepicker-input textbox-input" anonid="input-three"
-                      size="2" maxlength="2"
-                      xbl:inherits="disabled,readonly"/>
-        </xul:hbox>
-        <xul:hbox class="textbox-input-box datetimepicker-input-subbox" align="center">
-          <html:input class="datetimepicker-input textbox-input" anonid="input-ampm"
-                      size="2" maxlength="2"
-                      xbl:inherits="disabled,readonly"/>
-        </xul:hbox>
-      </xul:hbox>
-      <xul:spinbuttons anonid="buttons" xbl:inherits="disabled"
-                       onup="this.parentNode._increaseOrDecrease(1);"
-                       ondown="this.parentNode._increaseOrDecrease(-1);"/>
-    </content>
-
-    <implementation>
-      <field name="_dateValue">null</field>
-      <field name="_fieldOne">
-        document.getAnonymousElementByAttribute(this, "anonid", "input-one");
-      </field>
-      <field name="_fieldTwo">
-        document.getAnonymousElementByAttribute(this, "anonid", "input-two");
-      </field>
-      <field name="_fieldThree">
-        document.getAnonymousElementByAttribute(this, "anonid", "input-three");
-      </field>
-      <field name="_fieldAMPM">
-        document.getAnonymousElementByAttribute(this, "anonid", "input-ampm");
-      </field>
-      <field name="_separatorFirst">
-        document.getAnonymousElementByAttribute(this, "anonid", "sep-first");
-      </field>
-      <field name="_separatorSecond">
-        document.getAnonymousElementByAttribute(this, "anonid", "sep-second");
-      </field>
-      <field name="_lastFocusedField">null</field>
-      <field name="_hasEntry">true</field>
-      <field name="_valueEntered">false</field>
-      <field name="attachedControl">null</field>
-
-      <property name="_currentField" readonly="true">
-        <getter>
-          var focusedInput = document.activeElement;
-          if (focusedInput == this._fieldOne ||
-              focusedInput == this._fieldTwo ||
-              focusedInput == this._fieldThree ||
-              focusedInput == this._fieldAMPM)
-            return focusedInput;
-          return this._lastFocusedField || this._fieldOne;
-        </getter>
-      </property>
-
-      <property name="dateValue" onget="return new Date(this._dateValue);">
-        <setter>
-          <![CDATA[
-            if (!(val instanceof Date))
-              throw "Invalid Date";
-
-            this._setValueNoSync(val);
-            if (this.attachedControl)
-              this.attachedControl._setValueNoSync(val);
-            return val;
-          ]]>
-        </setter>
-      </property>
-
-      <property name="readOnly" onset="if (val) this.setAttribute('readonly', 'true');
-                                       else this.removeAttribute('readonly'); return val;"
-                                onget="return this.getAttribute('readonly') == 'true';"/>
-
-      <method name="_fireEvent">
-        <parameter name="aEventName"/>
-        <parameter name="aTarget"/>
-        <body>
-          var event = document.createEvent("Events");
-          event.initEvent(aEventName, true, true);
-          return !aTarget.dispatchEvent(event);
-        </body>
-      </method>
-
-      <method name="_setValueOnChange">
-        <parameter name="aField"/>
-        <body>
-          <![CDATA[
-            if (!this._hasEntry)
-              return;
-
-            if (aField == this._fieldOne ||
-                aField == this._fieldTwo ||
-                aField == this._fieldThree) {
-              var value = Number(aField.value);
-              if (isNaN(value))
-                value = 0;
-
-              value = this._constrainValue(aField, value, true);
-              this._setFieldValue(aField, value);
-            }
-          ]]>
-        </body>
-      </method>
-
-      <method name="_init">
-        <body/>
-      </method>
-
-      <constructor>
-        this._init();
-
-        var cval = this.getAttribute("value");
-        if (cval) {
-          try {
-            this.value = cval;
-            return;
-          } catch (ex) { }
-        }
-        this.dateValue = new Date();
-      </constructor>
-
-      <destructor>
-        if (this.attachedControl) {
-          this.attachedControl.attachedControl = null;
-          this.attachedControl = null;
-        }
-      </destructor>
-
-    </implementation>
-
-    <handlers>
-      <handler event="focus" phase="capturing">
-        <![CDATA[
-          var target = event.originalTarget;
-          if (target == this._fieldOne ||
-              target == this._fieldTwo ||
-              target == this._fieldThree ||
-              target == this._fieldAMPM)
-            this._lastFocusedField = target;
-        ]]>
-      </handler>
-
-      <handler event="keypress">
-        <![CDATA[
-          if (this._hasEntry && event.charCode &&
-              this._currentField != this._fieldAMPM &&
-                !(event.altKey || event.ctrlKey || event.metaKey) &&
-              (event.charCode < 48 || event.charCode > 57))
-            event.preventDefault();
-        ]]>
-      </handler>
-
-      <handler event="keypress" keycode="VK_UP">
-        if (this._hasEntry)
-          this._increaseOrDecrease(1);
-      </handler>
-      <handler event="keypress" keycode="VK_DOWN">
-        if (this._hasEntry)
-          this._increaseOrDecrease(-1);
-      </handler>
-
-      <handler event="input">
-        this._valueEntered = true;
-      </handler>
-
-      <handler event="change">
-        this._setValueOnChange(event.originalTarget);
-      </handler>
-    </handlers>
-
-  </binding>
-
-  <binding id="timepicker"
-           extends="chrome://global/content/bindings/datetimepicker.xml#datetimepicker-base">
-
-    <implementation>
-      <field name="is24HourClock">false</field>
-      <field name="hourLeadingZero">false</field>
-      <field name="minuteLeadingZero">true</field>
-      <field name="secondLeadingZero">true</field>
-      <field name="amIndicator">"AM"</field>
-      <field name="pmIndicator">"PM"</field>
-
-      <field name="hourField">null</field>
-      <field name="minuteField">null</field>
-      <field name="secondField">null</field>
-
-      <property name="value">
-        <getter>
-          <![CDATA[
-            var minute = this._dateValue.getMinutes();
-            if (minute < 10)
-              minute = "0" + minute;
-
-            var second = this._dateValue.getSeconds();
-            if (second < 10)
-              second = "0" + second;
-            return this._dateValue.getHours() + ":" + minute + ":" + second;
-          ]]>
-        </getter>
-        <setter>
-          <![CDATA[
-            var items = val.match(/^([0-9]{1,2})\:([0-9]{1,2})\:?([0-9]{1,2})?$/);
-            if (!items)
-              throw "Invalid Time";
-
-            var dt = this.dateValue;
-            dt.setHours(items[1]);
-            dt.setMinutes(items[2]);
-            dt.setSeconds(items[3] ? items[3] : 0);
-            this.dateValue = dt;
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="hour" onget="return this._dateValue.getHours();">
-        <setter>
-          <![CDATA[
-            var valnum = Number(val);
-            if (isNaN(valnum) || valnum < 0 || valnum > 23)
-              throw "Invalid Hour";
-            this._setFieldValue(this.hourField, valnum);
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="minute" onget="return this._dateValue.getMinutes();">
-        <setter>
-          <![CDATA[
-            var valnum = Number(val);
-            if (isNaN(valnum) || valnum < 0 || valnum > 59)
-              throw "Invalid Minute";
-            this._setFieldValue(this.minuteField, valnum);
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="second" onget="return this._dateValue.getSeconds();">
-        <setter>
-          <![CDATA[
-            var valnum = Number(val);
-            if (isNaN(valnum) || valnum < 0 || valnum > 59)
-              throw "Invalid Second";
-            this._setFieldValue(this.secondField, valnum);
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="isPM">
-        <getter>
-          <![CDATA[
-            return (this.hour >= 12);
-          ]]>
-        </getter>
-        <setter>
-          <![CDATA[
-            if (val) {
-              if (this.hour < 12)
-                this.hour += 12;
-            } else if (this.hour >= 12)
-              this.hour -= 12;
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="hideSeconds">
-        <getter>
-          return (this.getAttribute("hideseconds") == "true");
-        </getter>
-        <setter>
-          if (val)
-            this.setAttribute("hideseconds", "true");
-          else
-            this.removeAttribute("hideseconds");
-          if (this.secondField)
-            this.secondField.parentNode.collapsed = val;
-          this._separatorSecond.collapsed = val;
-          return val;
-        </setter>
-      </property>
-      <property name="increment">
-        <getter>
-          <![CDATA[
-            var increment = this.getAttribute("increment");
-            increment = Number(increment);
-            if (isNaN(increment) || increment <= 0 || increment >= 60)
-              return 1;
-            return increment;
-          ]]>
-        </getter>
-        <setter>
-          <![CDATA[
-            if (typeof val == "number")
-              this.setAttribute("increment", val);
-            return val;
-          ]]>
-        </setter>
-      </property>
-
-      <method name="_setValueNoSync">
-        <parameter name="aValue"/>
-        <body>
-          <![CDATA[
-            var dt = new Date(aValue);
-            if (!isNaN(dt)) {
-              this._dateValue = dt;
-              this.setAttribute("value", this.value);
-              this._updateUI(this.hourField, this.hour);
-              this._updateUI(this.minuteField, this.minute);
-              this._updateUI(this.secondField, this.second);
-            }
-          ]]>
-        </body>
-      </method>
-      <method name="_increaseOrDecrease">
-        <parameter name="aDir"/>
-        <body>
-          <![CDATA[
-            if (this.disabled || this.readOnly)
-              return;
-
-            var field = this._currentField;
-            if (this._valueEntered)
-              this._setValueOnChange(field);
-
-            if (field == this._fieldAMPM) {
-              this.isPM = !this.isPM;
-              this._fireEvent("change", this);
-            } else {
-              var oldval;
-              var change = aDir;
-              if (field == this.hourField) {
-                oldval = this.hour;
-              } else if (field == this.minuteField) {
-                oldval = this.minute;
-                change *= this.increment;
-              } else if (field == this.secondField) {
-                oldval = this.second;
-              }
-
-              var newval = this._constrainValue(field, oldval + change, false);
-
-              if (field == this.hourField)
-                this.hour = newval;
-              else if (field == this.minuteField)
-                this.minute = newval;
-              else if (field == this.secondField)
-                this.second = newval;
-
-              if (oldval != newval)
-                this._fireEvent("change", this);
-            }
-            field.select();
-          ]]>
-        </body>
-      </method>
-      <method name="_setFieldValue">
-        <parameter name="aField"/>
-        <parameter name="aValue"/>
-        <body>
-          <![CDATA[
-            if (aField == this.hourField)
-              this._dateValue.setHours(aValue);
-            else if (aField == this.minuteField)
-              this._dateValue.setMinutes(aValue);
-            else if (aField == this.secondField)
-              this._dateValue.setSeconds(aValue);
-
-            this.setAttribute("value", this.value);
-            this._updateUI(aField, aValue);
-
-            if (this.attachedControl)
-              this.attachedControl._setValueNoSync(this._dateValue);
-          ]]>
-        </body>
-      </method>
-      <method name="_updateUI">
-        <parameter name="aField"/>
-        <parameter name="aValue"/>
-        <body>
-          <![CDATA[
-            this._valueEntered = false;
-
-            var prependZero = false;
-            if (aField == this.hourField) {
-              prependZero = this.hourLeadingZero;
-              if (!this.is24HourClock) {
-                if (aValue >= 12) {
-                  if (aValue > 12)
-                    aValue -= 12;
-                  this._fieldAMPM.value = this.pmIndicator;
-                } else {
-                  if (aValue == 0)
-                    aValue = 12;
-                  this._fieldAMPM.value = this.amIndicator;
-                }
-              }
-            } else if (aField == this.minuteField) {
-              prependZero = this.minuteLeadingZero;
-            } else if (aField == this.secondField) {
-              prependZero = this.secondLeadingZero;
-            }
-
-            if (prependZero && aValue < 10)
-              aField.value = "0" + aValue;
-            else
-              aField.value = aValue;
-          ]]>
-        </body>
-      </method>
-      <method name="_constrainValue">
-        <parameter name="aField"/>
-        <parameter name="aValue"/>
-        <parameter name="aNoWrap"/>
-        <body>
-          <![CDATA[
-            // aNoWrap is true when the user entered a value, so just
-            // constrain within limits. If false, the value is being
-            // incremented or decremented, so wrap around values
-            var max = (aField == this.hourField) ? 24 : 60;
-            if (aValue < 0)
-              return aNoWrap ? 0 : max + aValue;
-            if (aValue >= max)
-              return aNoWrap ? max - 1 : aValue - max;
-            return aValue;
-          ]]>
-        </body>
-      </method>
-      <method name="_init">
-        <body>
-          <![CDATA[
-            this.hourField = this._fieldOne;
-            this.minuteField = this._fieldTwo;
-            this.secondField = this._fieldThree;
-
-            var numberOrder = /^(\D*)\s*(\d+)(\D*)(\d+)(\D*)(\d+)\s*(\D*)$/;
-
-            var locale = Intl.DateTimeFormat().resolvedOptions().locale + "-u-ca-gregory-nu-latn";
-
-            var pmTime = new Date(2000, 0, 1, 16, 7, 9).toLocaleTimeString(locale);
-            var numberFields = pmTime.match(numberOrder);
-            if (numberFields) {
-              this._separatorFirst.value = numberFields[3];
-              this._separatorSecond.value = numberFields[5];
-              if (Number(numberFields[2]) > 12)
-                this.is24HourClock = true;
-              else
-                this.pmIndicator = numberFields[1] || numberFields[7];
-            }
-
-            var amTime = new Date(2000, 0, 1, 1, 7, 9).toLocaleTimeString(locale);
-            numberFields = amTime.match(numberOrder);
-            if (numberFields) {
-              this.hourLeadingZero = (numberFields[2].length > 1);
-              this.minuteLeadingZero = (numberFields[4].length > 1);
-              this.secondLeadingZero = (numberFields[6].length > 1);
-
-              if (!this.is24HourClock) {
-                this.amIndicator = numberFields[1] || numberFields[7];
-                if (numberFields[1]) {
-                  var mfield = this._fieldAMPM.parentNode;
-                  var mcontainer = mfield.parentNode;
-                  mcontainer.insertBefore(mfield, mcontainer.firstChild);
-                }
-                var size = (numberFields[1] || numberFields[7]).length;
-                if (this.pmIndicator.length > size)
-                  size = this.pmIndicator.length;
-                this._fieldAMPM.size = size;
-                this._fieldAMPM.maxLength = size;
-              } else {
-                this._fieldAMPM.parentNode.collapsed = true;
-              }
-            }
-
-            this.hideSeconds = this.hideSeconds;
-          ]]>
-        </body>
-      </method>
-    </implementation>
-
-    <handlers>
-      <handler event="keypress">
-        <![CDATA[
-          // just allow any printable character to switch the AM/PM state
-          if (event.charCode && !this.disabled && !this.readOnly &&
-              this._currentField == this._fieldAMPM) {
-            this.isPM = !this.isPM;
-            this._fieldAMPM.select();
-            this._fireEvent("change", this);
-            event.preventDefault();
-          }
-        ]]>
-      </handler>
-    </handlers>
-
-  </binding>
-
-  <binding id="datepicker"
-           extends="chrome://global/content/bindings/datetimepicker.xml#datetimepicker-base">
-
-    <implementation>
-      <field name="yearLeadingZero">false</field>
-      <field name="monthLeadingZero">true</field>
-      <field name="dateLeadingZero">true</field>
-
-      <field name="yearField"/>
-      <field name="monthField"/>
-      <field name="dateField"/>
-
-      <property name="value">
-        <getter>
-          <![CDATA[
-            var month = this._dateValue.getMonth();
-            month = (month < 9) ? month = "0" + ++month : month + 1;
-
-            var date = this._dateValue.getDate();
-            if (date < 10)
-              date = "0" + date;
-            return this._dateValue.getFullYear() + "-" + month + "-" + date;
-          ]]>
-
-        </getter>
-        <setter>
-          <![CDATA[
-            var results = val.match(/^([0-9]{1,4})\-([0-9]{1,2})\-([0-9]{1,2})$/);
-            if (!results)
-              throw "Invalid Date";
-
-            this.dateValue = new Date(results[1] + "/" + results[2] + "/" + results[3]);
-            this.setAttribute("value", this.value);
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="year" onget="return this._dateValue.getFullYear();">
-        <setter>
-          <![CDATA[
-            var valnum = Number(val);
-            if (isNaN(valnum) || valnum < 1 || valnum > 9999)
-              throw "Invalid Year";
-            this._setFieldValue(this.yearField, valnum);
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="month" onget="return this._dateValue.getMonth();">
-        <setter>
-          <![CDATA[
-            var valnum = Number(val);
-            if (isNaN(valnum) || valnum < 0 || valnum > 11)
-              throw "Invalid Month";
-            this._setFieldValue(this.monthField, valnum);
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="date" onget="return this._dateValue.getDate();">
-        <setter>
-          <![CDATA[
-            var valnum = Number(val);
-            if (isNaN(valnum) || valnum < 1 || valnum > 31)
-              throw "Invalid Date";
-            this._setFieldValue(this.dateField, valnum);
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="open" onget="return false;" onset="return val;"/>
-
-      <property name="displayedMonth" onget="return this.month;"
-                onset="this.month = val; return val;"/>
-      <property name="displayedYear" onget="return this.year;"
-                onset="this.year = val; return val;"/>
-
-      <method name="_setValueNoSync">
-        <parameter name="aValue"/>
-        <body>
-          <![CDATA[
-            var dt = new Date(aValue);
-            if (!isNaN(dt)) {
-              this._dateValue = dt;
-              this.setAttribute("value", this.value);
-              this._updateUI(this.yearField, this.year);
-              this._updateUI(this.monthField, this.month);
-              this._updateUI(this.dateField, this.date);
-            }
-          ]]>
-        </body>
-      </method>
-      <method name="_increaseOrDecrease">
-        <parameter name="aDir"/>
-        <body>
-          <![CDATA[
-            if (this.disabled || this.readOnly)
-              return;
-
-            var field = this._currentField;
-            if (this._valueEntered)
-              this._setValueOnChange(field);
-
-            var oldval;
-            if (field == this.yearField)
-              oldval = this.year;
-            else if (field == this.monthField)
-              oldval = this.month;
-            else if (field == this.dateField)
-              oldval = this.date;
-
-            var newval = this._constrainValue(field, oldval + aDir, false);
-
-            if (field == this.yearField)
-              this.year = newval;
-            else if (field == this.monthField)
-              this.month = newval;
-            else if (field == this.dateField)
-              this.date = newval;
-
-            if (oldval != newval)
-              this._fireEvent("change", this);
-            field.select();
-          ]]>
-        </body>
-      </method>
-      <method name="_setFieldValue">
-        <parameter name="aField"/>
-        <parameter name="aValue"/>
-        <body>
-          <![CDATA[
-            if (aField == this.yearField) {
-              let oldDate = this.date;
-              this._dateValue.setFullYear(aValue);
-              if (oldDate != this.date) {
-                this._dateValue.setDate(0);
-                this._updateUI(this.dateField, this.date);
-              }
-            } else if (aField == this.monthField) {
-              let oldDate = this.date;
-              this._dateValue.setMonth(aValue);
-              if (oldDate != this.date) {
-                this._dateValue.setDate(0);
-                this._updateUI(this.dateField, this.date);
-              }
-            } else if (aField == this.dateField) {
-              this._dateValue.setDate(aValue);
-            }
-
-            this.setAttribute("value", this.value);
-            this._updateUI(aField, aValue);
-
-            if (this.attachedControl)
-              this.attachedControl._setValueNoSync(this._dateValue);
-          ]]>
-        </body>
-      </method>
-      <method name="_updateUI">
-        <parameter name="aField"/>
-        <parameter name="aValue"/>
-        <body>
-          <![CDATA[
-            this._valueEntered = false;
-
-            var prependZero = false;
-            if (aField == this.yearField) {
-              if (this.yearLeadingZero) {
-                aField.value = ("000" + aValue).slice(-4);
-                return;
-              }
-            } else if (aField == this.monthField) {
-              aValue++;
-              prependZero = this.monthLeadingZero;
-            } else if (aField == this.dateField) {
-              prependZero = this.dateLeadingZero;
-            }
-            if (prependZero && aValue < 10)
-              aField.value = "0" + aValue;
-            else
-              aField.value = aValue;
-          ]]>
-        </body>
-      </method>
-      <method name="_constrainValue">
-        <parameter name="aField"/>
-        <parameter name="aValue"/>
-        <parameter name="aNoWrap"/>
-        <body>
-          <![CDATA[
-            // the month will be 1 to 12 if entered by the user, so subtract 1
-            if (aNoWrap && aField == this.monthField)
-              aValue--;
-
-            if (aField == this.dateField) {
-              if (aValue < 1)
-                return new Date(this.year, this.month + 1, 0).getDate();
-
-              var currentMonth = this.month;
-              var dt = new Date(this.year, currentMonth, aValue);
-              return (dt.getMonth() != currentMonth ? 1 : aValue);
-            }
-            var min = (aField == this.monthField) ? 0 : 1;
-            var max = (aField == this.monthField) ? 11 : 9999;
-            if (aValue < min)
-              return aNoWrap ? min : max;
-            if (aValue > max)
-              return aNoWrap ? max : min;
-            return aValue;
-          ]]>
-        </body>
-      </method>
-      <method name="_init">
-        <body>
-          <![CDATA[
-            // We'll default to YYYY/MM/DD to start.
-            var yfield = "input-one";
-            var mfield = "input-two";
-            var dfield = "input-three";
-            var twoDigitYear = false;
-            this.yearLeadingZero = true;
-            this.monthLeadingZero = true;
-            this.dateLeadingZero = true;
-
-            var numberOrder = /^(\D*)\s*(\d+)(\D*)(\d+)(\D*)(\d+)\s*(\D*)$/;
-
-            var locale = Intl.DateTimeFormat().resolvedOptions().locale + "-u-ca-gregory-nu-latn";
-
-            var dt = new Date(2002, 9, 4).toLocaleDateString(locale);
-            var numberFields = dt.match(numberOrder);
-            if (numberFields) {
-              this._separatorFirst.value = numberFields[3];
-              this._separatorSecond.value = numberFields[5];
-
-              var yi = 2, mi = 4, di = 6;
-
-              function fieldForNumber(i) {
-                if (i == 2)
-                  return "input-one";
-                if (i == 4)
-                  return "input-two";
-                return "input-three";
-              }
-
-              for (var i = 1; i < numberFields.length; i++) {
-                switch (Number(numberFields[i])) {
-                  case 2:
-                    twoDigitYear = true; // fall through
-                  case 2002:
-                    yi = i;
-                    yfield = fieldForNumber(i);
-                    break;
-                  case 9, 10:
-                    mi = i;
-                    mfield = fieldForNumber(i);
-                    break;
-                  case 4:
-                    di = i;
-                    dfield = fieldForNumber(i);
-                    break;
-                }
-              }
-
-              this.yearLeadingZero = (numberFields[yi].length > 1);
-              this.monthLeadingZero = (numberFields[mi].length > 1);
-              this.dateLeadingZero = (numberFields[di].length > 1);
-            }
-
-            this.yearField = document.getAnonymousElementByAttribute(this, "anonid", yfield);
-            if (!twoDigitYear)
-              this.yearField.parentNode.classList.add("datetimepicker-input-subbox", "datetimepicker-year");
-            this.monthField = document.getAnonymousElementByAttribute(this, "anonid", mfield);
-            this.dateField = document.getAnonymousElementByAttribute(this, "anonid", dfield);
-
-            this._fieldAMPM.parentNode.collapsed = true;
-            this.yearField.size = twoDigitYear ? 2 : 4;
-            this.yearField.maxLength = twoDigitYear ? 2 : 4;
-          ]]>
-        </body>
-      </method>
-    </implementation>
-
-  </binding>
-
-  <binding id="datepicker-grid"
-           extends="chrome://global/content/bindings/datetimepicker.xml#datepicker">
-
-    <content>
-      <vbox class="datepicker-mainbox"
-            xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-        <hbox class="datepicker-monthbox" align="center">
-          <button class="datepicker-previous datepicker-button" type="repeat"
-                  xbl:inherits="disabled"
-                  oncommand="document.getBindingParent(this)._increaseOrDecreaseMonth(-1);"/>
-          <spacer flex="1"/>
-          <deck anonid="monthlabeldeck">
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-          </deck>
-          <label anonid="yearlabel" class="datepicker-gridlabel"/>
-          <spacer flex="1"/>
-          <button class="datepicker-next datepicker-button" type="repeat"
-                  xbl:inherits="disabled"
-                  oncommand="document.getBindingParent(this)._increaseOrDecreaseMonth(1);"/>
-        </hbox>
-        <grid class="datepicker-grid" role="grid">
-          <columns>
-            <column class="datepicker-gridrow" flex="1"/>
-            <column class="datepicker-gridrow" flex="1"/>
-            <column class="datepicker-gridrow" flex="1"/>
-            <column class="datepicker-gridrow" flex="1"/>
-            <column class="datepicker-gridrow" flex="1"/>
-            <column class="datepicker-gridrow" flex="1"/>
-            <column class="datepicker-gridrow" flex="1"/>
-          </columns>
-          <rows anonid="datebox">
-            <row anonid="dayofweekbox">
-              <label class="datepicker-weeklabel" role="columnheader"/>
-              <label class="datepicker-weeklabel" role="columnheader"/>
-              <label class="datepicker-weeklabel" role="columnheader"/>
-              <label class="datepicker-weeklabel" role="columnheader"/>
-              <label class="datepicker-weeklabel" role="columnheader"/>
-              <label class="datepicker-weeklabel" role="columnheader"/>
-              <label class="datepicker-weeklabel" role="columnheader"/>
-            </row>
-            <row>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-            </row>
-            <row>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-            </row>
-            <row>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-            </row>
-            <row>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-            </row>
-            <row>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-            </row>
-            <row>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-            </row>
-          </rows>
-        </grid>
-      </vbox>
-    </content>
-
-    <implementation>
-      <field name="_hasEntry">false</field>
-      <field name="_weekStart">&firstdayofweek.default;</field>
-      <field name="_displayedDate">null</field>
-      <field name="_todayItem">null</field>
-
-      <field name="yearField">
-        document.getAnonymousElementByAttribute(this, "anonid", "yearlabel");
-      </field>
-      <field name="monthField">
-        document.getAnonymousElementByAttribute(this, "anonid", "monthlabeldeck");
-      </field>
-      <field name="dateField">
-        document.getAnonymousElementByAttribute(this, "anonid", "datebox");
-      </field>
-
-      <field name="_selectedItem">null</field>
-
-      <property name="selectedItem" onget="return this._selectedItem">
-        <setter>
-          <![CDATA[
-            if (!val.value)
-              return val;
-            if (val.parentNode.parentNode != this.dateField)
-              return val;
-
-            if (this._selectedItem)
-              this._selectedItem.removeAttribute("selected");
-            this._selectedItem = val;
-            val.setAttribute("selected", "true");
-            this._displayedDate.setDate(val.value);
-            return val;
-          ]]>
-        </setter>
-      </property>
-
-      <property name="displayedMonth">
-        <getter>
-          return this._displayedDate.getMonth();
-        </getter>
-        <setter>
-          this._updateUI(this.monthField, val, true);
-          return val;
-        </setter>
-      </property>
-      <property name="displayedYear">
-        <getter>
-          return this._displayedDate.getFullYear();
-        </getter>
-        <setter>
-          this._updateUI(this.yearField, val, true);
-          return val;
-        </setter>
-      </property>
-
-      <method name="_init">
-        <body>
-          <![CDATA[
-            var locale = Intl.DateTimeFormat().resolvedOptions().locale + "-u-ca-gregory";
-            var dtfMonth = Intl.DateTimeFormat(locale, {month: "long", timeZone: "UTC"});
-            var dtfWeekday = Intl.DateTimeFormat(locale, {weekday: "narrow"});
-
-            var monthLabel = this.monthField.firstChild;
-            var tempDate = new Date(Date.UTC(2005, 0, 1));
-            for (var month = 0; month < 12; month++) {
-              tempDate.setUTCMonth(month);
-              monthLabel.setAttribute("value", dtfMonth.format(tempDate));
-              monthLabel = monthLabel.nextSibling;
-            }
-
-            var fdow = Number(this.getAttribute("firstdayofweek"));
-            if (!isNaN(fdow) && fdow >= 0 && fdow <= 6)
-              this._weekStart = fdow;
-
-            var weekbox = document.getAnonymousElementByAttribute(this, "anonid", "dayofweekbox").childNodes;
-            var date = new Date();
-            date.setDate(date.getDate() - (date.getDay() - this._weekStart));
-            for (var i = 0; i < weekbox.length; i++) {
-              weekbox[i].value = dtfWeekday.format(date);
-              date.setDate(date.getDate() + 1);
-            }
-          ]]>
-        </body>
-      </method>
-      <method name="_setValueNoSync">
-        <parameter name="aValue"/>
-        <body>
-          <![CDATA[
-            var dt = new Date(aValue);
-            if (!isNaN(dt)) {
-              this._dateValue = dt;
-              this.setAttribute("value", this.value);
-              this._updateUI();
-            }
-          ]]>
-        </body>
-      </method>
-      <method name="_updateUI">
-        <parameter name="aField"/>
-        <parameter name="aValue"/>
-        <parameter name="aCheckMonth"/>
-        <body>
-          <![CDATA[
-            var date;
-            var currentMonth;
-            if (aCheckMonth) {
-              if (!this._displayedDate)
-                this._displayedDate = this.dateValue;
-
-              var expectedMonth = aValue;
-              if (aField == this.monthField) {
-                this._displayedDate.setMonth(aValue);
-              } else {
-                expectedMonth = this._displayedDate.getMonth();
-                this._displayedDate.setFullYear(aValue);
-              }
-
-              if (expectedMonth != -1 && expectedMonth != 12 &&
-                  expectedMonth != this._displayedDate.getMonth()) {
-                // If the month isn't what was expected, then the month overflowed.
-                // Setting the date to 0 will go back to the last day of the right month.
-                this._displayedDate.setDate(0);
-              }
-
-              date = new Date(this._displayedDate);
-              currentMonth = this._displayedDate.getMonth();
-            } else {
-              var samemonth = (this._displayedDate &&
-                               this._displayedDate.getMonth() == this.month &&
-                               this._displayedDate.getFullYear() == this.year);
-              if (samemonth) {
-                var items = this.dateField.getElementsByAttribute("value", this.date);
-                if (items.length)
-                  this.selectedItem = items[0];
-                return;
-              }
-
-              date = this.dateValue;
-              this._displayedDate = new Date(date);
-              currentMonth = this.month;
-            }
-
-            if (this._todayItem) {
-              this._todayItem.removeAttribute("today");
-              this._todayItem = null;
-            }
-
-            if (this._selectedItem) {
-              this._selectedItem.removeAttribute("selected");
-              this._selectedItem = null;
-            }
-
-            // Update the month and year title
-            this.monthField.selectedIndex = currentMonth;
-            this.yearField.setAttribute("value", date.getFullYear());
-
-            date.setDate(1);
-            var firstWeekday = (7 + date.getDay() - this._weekStart) % 7;
-            date.setDate(date.getDate() - firstWeekday);
-
-            var today = new Date();
-            var datebox = this.dateField;
-            for (var k = 1; k < datebox.childNodes.length; k++) {
-              var row = datebox.childNodes[k];
-              for (var i = 0; i < 7; i++) {
-                var item = row.childNodes[i];
-
-                if (currentMonth == date.getMonth()) {
-                  item.value = date.getDate();
-
-                  // highlight today
-                  if (this._isSameDay(today, date)) {
-                    this._todayItem = item;
-                    item.setAttribute("today", "true");
-                  }
-
-                  // highlight the selected date
-                  if (this._isSameDay(this._dateValue, date)) {
-                    this._selectedItem = item;
-                    item.setAttribute("selected", "true");
-                  }
-                } else {
-                  item.value = "";
-                }
-
-                date.setDate(date.getDate() + 1);
-              }
-            }
-
-            this._fireEvent("monthchange", this);
-          ]]>
-        </body>
-      </method>
-      <method name="_increaseOrDecreaseDateFromEvent">
-        <parameter name="aEvent"/>
-        <parameter name="aDiff"/>
-        <body>
-          <![CDATA[
-            if (aEvent.originalTarget == this && !this.disabled && !this.readOnly) {
-              var newdate = this.dateValue;
-              newdate.setDate(newdate.getDate() + aDiff);
-              this.dateValue = newdate;
-              this._fireEvent("change", this);
-            }
-            aEvent.stopPropagation();
-            aEvent.preventDefault();
-          ]]>
-        </body>
-      </method>
-      <method name="_increaseOrDecreaseMonth">
-        <parameter name="aDir"/>
-        <body>
-          <![CDATA[
-            if (!this.disabled) {
-              var month = this._displayedDate ? this._displayedDate.getMonth() :
-                                                this.month;
-              this._updateUI(this.monthField, month + aDir, true);
-            }
-          ]]>
-        </body>
-      </method>
-      <method name="_isSameDay">
-        <parameter name="aDate1"/>
-        <parameter name="aDate2"/>
-        <body>
-          <![CDATA[
-            return (aDate1 && aDate2 &&
-                    aDate1.getDate() == aDate2.getDate() &&
-                    aDate1.getMonth() == aDate2.getMonth() &&
-                    aDate1.getFullYear() == aDate2.getFullYear());
-          ]]>
-        </body>
-      </method>
-
-    </implementation>
-
-    <handlers>
-      <handler event="click">
-        <![CDATA[
-          if (event.button != 0 || this.disabled || this.readOnly)
-            return;
-
-          var target = event.originalTarget;
-          if (target.classList.contains("datepicker-gridlabel") &&
-              target != this.selectedItem) {
-            this.selectedItem = target;
-            this._dateValue = new Date(this._displayedDate);
-            if (this.attachedControl)
-              this.attachedControl._setValueNoSync(this._dateValue);
-            this._fireEvent("change", this);
-
-            if (this.attachedControl && "open" in this.attachedControl)
-              this.attachedControl.open = false; // close the popup
-          }
-        ]]>
-      </handler>
-      <handler event="MozMousePixelScroll" preventdefault="true"/>
-      <handler event="DOMMouseScroll" preventdefault="true">
-        <![CDATA[
-          this._increaseOrDecreaseMonth(event.detail < 0 ? -1 : 1);
-        ]]>
-      </handler>
-      <handler event="keypress" keycode="VK_LEFT"
-               action="this._increaseOrDecreaseDateFromEvent(event, -1);"/>
-      <handler event="keypress" keycode="VK_RIGHT"
-               action="this._increaseOrDecreaseDateFromEvent(event, 1);"/>
-      <handler event="keypress" keycode="VK_UP"
-               action="this._increaseOrDecreaseDateFromEvent(event, -7);"/>
-      <handler event="keypress" keycode="VK_DOWN"
-               action="this._increaseOrDecreaseDateFromEvent(event, 7);"/>
-      <handler event="keypress" keycode="VK_PAGE_UP" preventdefault="true"
-               action="this._increaseOrDecreaseMonth(-1);"/>
-      <handler event="keypress" keycode="VK_PAGE_DOWN" preventdefault="true"
-               action="this._increaseOrDecreaseMonth(1);"/>
-    </handlers>
-  </binding>
-
-  <binding id="datepicker-popup" display="xul:menu"
-           extends="chrome://global/content/bindings/datetimepicker.xml#datepicker">
-    <content align="center">
-      <xul:hbox class="textbox-input-box datetimepicker-input-box" align="center"
-                allowevents="true" xbl:inherits="context,disabled,readonly">
-        <xul:hbox class="datetimepicker-input-subbox" align="baseline">
-          <html:input class="datetimepicker-input textbox-input" anonid="input-one"
-                      size="2" maxlength="2"
-                      xbl:inherits="disabled,readonly"/>
-        </xul:hbox>
-        <xul:label anonid="sep-first" class="datetimepicker-separator" value=":"/>
-        <xul:hbox class="datetimepicker-input-subbox" align="baseline">
-          <html:input class="datetimepicker-input textbox-input" anonid="input-two"
-                      size="2" maxlength="2"
-                      xbl:inherits="disabled,readonly"/>
-        </xul:hbox>
-        <xul:label anonid="sep-second" class="datetimepicker-separator" value=":"/>
-        <xul:hbox class="datetimepicker-input-subbox" align="center">
-          <html:input class="datetimepicker-input textbox-input" anonid="input-three"
-                      size="2" maxlength="2"
-                      xbl:inherits="disabled,readonly"/>
-        </xul:hbox>
-        <xul:hbox class="datetimepicker-input-subbox" align="center">
-          <html:input class="datetimepicker-input textbox-input" anonid="input-ampm"
-                      size="2" maxlength="2"
-                      xbl:inherits="disabled,readonly"/>
-        </xul:hbox>
-      </xul:hbox>
-      <xul:spinbuttons anonid="buttons" xbl:inherits="disabled" allowevents="true"
-                       onup="this.parentNode._increaseOrDecrease(1);"
-                       ondown="this.parentNode._increaseOrDecrease(-1);"/>
-      <xul:dropmarker class="datepicker-dropmarker" xbl:inherits="disabled"/>
-      <xul:panel onpopupshown="this.firstChild.focus();" level="top">
-        <xul:datepicker anonid="grid" type="grid" class="datepicker-popupgrid"
-                        xbl:inherits="disabled,readonly,firstdayofweek"/>
-      </xul:panel>
-    </content>
-    <implementation>
-      <constructor>
-        var grid = document.getAnonymousElementByAttribute(this, "anonid", "grid");
-        this.attachedControl = grid;
-        grid.attachedControl = this;
-        grid._setValueNoSync(this._dateValue);
-      </constructor>
-      <property name="open" onget="return this.hasAttribute('open');">
-        <setter>
-          <![CDATA[
-            if (this.boxObject instanceof MenuBoxObject)
-              this.boxObject.openMenu(val);
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="displayedMonth">
-        <getter>
-          return document.getAnonymousElementByAttribute(this, "anonid", "grid").displayedMonth;
-        </getter>
-        <setter>
-          document.getAnonymousElementByAttribute(this, "anonid", "grid").displayedMonth = val;
-          return val;
-        </setter>
-      </property>
-      <property name="displayedYear">
-        <getter>
-          return document.getAnonymousElementByAttribute(this, "anonid", "grid").displayedYear;
-        </getter>
-        <setter>
-          document.getAnonymousElementByAttribute(this, "anonid", "grid").displayedYear = val;
-          return val;
-        </setter>
-      </property>
-    </implementation>
-  </binding>
-
-</bindings>
--- a/toolkit/content/xul.css
+++ b/toolkit/content/xul.css
@@ -1026,34 +1026,16 @@ richlistbox {
 richlistitem {
   -moz-binding: url('chrome://global/content/bindings/richlistbox.xml#richlistitem');
 }
 
 richlistbox > listheader {
   -moz-box-ordinal-group: 1;
 }
 
-/********** datepicker and timepicker ********/
-
-datepicker {
-  -moz-binding: url('chrome://global/content/bindings/datetimepicker.xml#datepicker');
-}
-
-datepicker[type="popup"] {
-  -moz-binding: url('chrome://global/content/bindings/datetimepicker.xml#datepicker-popup');
-}
-
-datepicker[type="grid"] {
-  -moz-binding: url('chrome://global/content/bindings/datetimepicker.xml#datepicker-grid');
-}
-
-timepicker {
-  -moz-binding: url('chrome://global/content/bindings/datetimepicker.xml#timepicker');
-}
-
 
 /*********** findbar ************/
 findbar {
   -moz-binding: url('chrome://global/content/bindings/findbar.xml#findbar');
   overflow-x: hidden;
 }
 
 .findbar-textbox {
deleted file mode 100644
--- a/toolkit/locales/en-US/chrome/global/datetimepicker.dtd
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!-- first day of week to display in datepicker, a value from 0 to 6,
-     0 = Sunday, 1 = Monday, etc. -->
-<!ENTITY firstdayofweek.default "0">
--- a/toolkit/locales/jar.mn
+++ b/toolkit/locales/jar.mn
@@ -34,17 +34,16 @@
   locale/@AB_CD@/global/config.dtd                      (%chrome/global/config.dtd)
   locale/@AB_CD@/global/config.properties               (%chrome/global/config.properties)
   locale/@AB_CD@/global/contentAreaCommands.properties  (%chrome/global/contentAreaCommands.properties)
 #ifndef MOZ_FENNEC
   locale/@AB_CD@/global/customizeToolbar.dtd            (%chrome/global/customizeToolbar.dtd)
   locale/@AB_CD@/global/customizeToolbar.properties     (%chrome/global/customizeToolbar.properties)
 #endif
   locale/@AB_CD@/global/datetimebox.dtd                 (%chrome/global/datetimebox.dtd)
-  locale/@AB_CD@/global/datetimepicker.dtd              (%chrome/global/datetimepicker.dtd)
   locale/@AB_CD@/global/dialogOverlay.dtd               (%chrome/global/dialogOverlay.dtd)
 #ifndef MOZ_FENNEC
   locale/@AB_CD@/global/editMenuOverlay.dtd             (%chrome/global/editMenuOverlay.dtd)
 #endif
   locale/@AB_CD@/global/extensions.properties           (%chrome/global/extensions.properties)
   locale/@AB_CD@/global/fallbackMenubar.properties      (%chrome/global/fallbackMenubar.properties)
   locale/@AB_CD@/global/filefield.properties            (%chrome/global/filefield.properties)
 #ifdef MOZ_GTK
deleted file mode 100644
index 3367bde3123df49622ac6e93bb3af8db110fe0e5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c5c362d89b19dadd509869efa700a2dedcbffa3e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 5010921adc6cdd64d5d2a489ac8f989e5127d40c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/toolkit/themes/osx/global/datetimepicker.css
+++ /dev/null
@@ -1,126 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-@namespace html url("http://www.w3.org/1999/xhtml");
-
-datepicker, timepicker {
-  padding: 0 0 1px;
-  margin: 4px;
-  border: none;
-}
-
-.datetimepicker-input-box {
-  -moz-appearance: textfield;
-  cursor: text;
-  margin-right: 4px;
-  margin-bottom: 2px;
-  border: 3px solid;
-  -moz-border-top-colors: transparent #888888 #000000;
-  -moz-border-right-colors: transparent #FFFFFF #000000;
-  -moz-border-bottom-colors: transparent #FFFFFF #000000;
-  -moz-border-left-colors: transparent #888888 #000000;
-  border-top-right-radius: 2px;
-  border-bottom-left-radius: 2px;
-  padding: 0px;
-  background-color: -moz-Field;
-  color: -moz-FieldText;
-}
-
-.datetimepicker-input-subbox {
-  width: 1.6em;
-}
-
-html|*.datetimepicker-input {
-  text-align: end;
-}
-
-.datetimepicker-separator {
-  margin: 0 !important;
-}
-
-.datetimepicker-year {
-  width: 3.2em;
-}
-
-.datepicker-dropmarker {
-  margin-bottom: 2px;
-}
-
-datepicker[readonly="true"],
-timepicker[readonly="true"] {
-  background-color: -moz-Dialog;
-  color: -moz-DialogText;
-}
-
-datepicker[disabled="true"],
-timepicker[disabled="true"] {
-  cursor: default;
-  -moz-border-top-colors: transparent ThreeDShadow -moz-Dialog;
-  -moz-border-right-colors: transparent ThreeDShadow -moz-Dialog;
-  -moz-border-bottom-colors: transparent ThreeDShadow -moz-Dialog;
-  -moz-border-left-colors: transparent ThreeDShadow -moz-Dialog;
-  background-color: -moz-Dialog;
-  color: GrayText;
-} 
-
-.datepicker-mainbox {
-  margin: 2px 4px;
-  border: 2px solid;
-  -moz-border-top-colors: ThreeDShadow ThreeDDarkShadow;
-  -moz-border-right-colors: ThreeDHighlight ThreeDLightShadow;
-  -moz-border-bottom-colors: ThreeDHighlight ThreeDLightShadow;
-  -moz-border-left-colors: ThreeDShadow ThreeDDarkShadow;
-  background-color: #EEEEEE;
-  color: -moz-DialogText;
-}
-
-.datepicker-popupgrid > .datepicker-mainbox {
-  margin: 0;
-  border: none;
-}
-
-.datepicker-gridlabel, .datepicker-weeklabel {
-  text-align: center;
-}
-
-.datepicker-gridlabel[today="true"] {
-  background-color: darkgrey;
-  color: white;
-}
-
-.datepicker-gridlabel[selected="true"] {
-  background-color: Highlight;
-  color: HighlightText;
-}
-
-.datepicker-button {
-  -moz-appearance: none;
-  min-width: 8px;
-  padding: 0px;
-}
-
-.datepicker-previous {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft.gif");
-}
-
-.datepicker-next {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit.gif");
-}
-
-.datepicker-previous:hover {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft-hov.gif");
-}
-
-.datepicker-next:hover {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit-hov.gif");
-}
-
-.datepicker-previous[disabled="true"] {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft-dis.gif");
-}
-
-.datepicker-next[disabled="true"] {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit-dis.gif");
-}
--- a/toolkit/themes/osx/global/jar.mn
+++ b/toolkit/themes/osx/global/jar.mn
@@ -31,33 +31,29 @@ toolkit.jar:
   skin/classic/global/richlistbox.css
   skin/classic/global/scrollbars.css                                 (nativescrollbars.css)
   skin/classic/global/scrollbox.css
   skin/classic/global/spinbuttons.css
   skin/classic/global/splitter.css
   skin/classic/global/tabprompts.css
   skin/classic/global/tabbox.css
   skin/classic/global/textbox.css
-  skin/classic/global/datetimepicker.css
   skin/classic/global/toolbar.css
   skin/classic/global/toolbarbutton.css
 * skin/classic/global/tree.css
   skin/classic/global/wizard.css
 * skin/classic/global/alerts/alert.css                               (alerts/alert.css)
   skin/classic/global/arrow/arrow-dn-dis.gif                         (arrow/arrow-dn-dis.gif)
   skin/classic/global/arrow/arrow-dn-dis.png                         (arrow/arrow-dn-dis.png)
   skin/classic/global/arrow/arrow-dn-sharp.gif                       (arrow/arrow-dn-sharp.gif)
   skin/classic/global/arrow/arrow-dn.gif                             (arrow/arrow-dn.gif)
   skin/classic/global/arrow/arrow-dn.png                             (arrow/arrow-dn.png)
   skin/classic/global/arrow/arrow-lft-dis.gif                        (arrow/arrow-lft-dis.gif)
-  skin/classic/global/arrow/arrow-lft-hov.gif                        (arrow/arrow-lft-hov.gif)
   skin/classic/global/arrow/arrow-lft-sharp.gif                      (arrow/arrow-lft-sharp.gif)
-  skin/classic/global/arrow/arrow-lft.gif                            (arrow/arrow-lft.gif)
   skin/classic/global/arrow/arrow-rit-dis.gif                        (arrow/arrow-rit-dis.gif)
-  skin/classic/global/arrow/arrow-rit-hov.gif                        (arrow/arrow-rit-hov.gif)
   skin/classic/global/arrow/arrow-rit-sharp.gif                      (arrow/arrow-rit-sharp.gif)
   skin/classic/global/arrow/arrow-rit.gif                            (arrow/arrow-rit.gif)
   skin/classic/global/arrow/arrow-up-dis.gif                         (arrow/arrow-up-dis.gif)
   skin/classic/global/arrow/arrow-up-sharp.gif                       (arrow/arrow-up-sharp.gif)
   skin/classic/global/arrow/arrow-up.gif                             (arrow/arrow-up.gif)
   skin/classic/global/arrow/panelarrow-horizontal.svg                (arrow/panelarrow-horizontal.svg)
   skin/classic/global/arrow/panelarrow-vertical.svg                  (arrow/panelarrow-vertical.svg)
   skin/classic/global/checkbox/cbox-check.gif                        (checkbox/cbox-check.gif)
--- a/toolkit/themes/shared/non-mac.jar.inc.mn
+++ b/toolkit/themes/shared/non-mac.jar.inc.mn
@@ -6,33 +6,28 @@
 # by the shared jar manifest, which in turn is included by the os-specific
 # manifests.
 # As a result, the source file paths are relative to the location of the
 # actual manifests.
 
 #include jar.inc.mn
 
   skin/classic/global/customizeToolbar.css                 (../../windows/global/customizeToolbar.css)
-  skin/classic/global/datetimepicker.css                   (../../windows/global/datetimepicker.css)
   skin/classic/global/dialog.css                           (../../windows/global/dialog.css)
   skin/classic/global/filefield.css                        (../../windows/global/filefield.css)
   skin/classic/global/progressmeter.css                    (../../windows/global/progressmeter.css)
   skin/classic/global/resizer.css                          (../../windows/global/resizer.css)
   skin/classic/global/richlistbox.css                      (../../windows/global/richlistbox.css)
   skin/classic/global/scrollbars.css                       (../../windows/global/xulscrollbars.css)
   skin/classic/global/spinbuttons.css                      (../../windows/global/spinbuttons.css)
   skin/classic/global/tabprompts.css                       (../../windows/global/tabprompts.css)
   skin/classic/global/wizard.css                           (../../windows/global/wizard.css)
 
   skin/classic/global/arrow/arrow-dn.gif                   (../../windows/global/arrow/arrow-dn.gif)
   skin/classic/global/arrow/arrow-dn-dis.gif               (../../windows/global/arrow/arrow-dn-dis.gif)
-  skin/classic/global/arrow/arrow-lft.gif                  (../../windows/global/arrow/arrow-lft.gif)
-  skin/classic/global/arrow/arrow-lft-dis.gif              (../../windows/global/arrow/arrow-lft-dis.gif)
-  skin/classic/global/arrow/arrow-rit.gif                  (../../windows/global/arrow/arrow-rit.gif)
-  skin/classic/global/arrow/arrow-rit-dis.gif              (../../windows/global/arrow/arrow-rit-dis.gif)
   skin/classic/global/arrow/arrow-up.gif                   (../../windows/global/arrow/arrow-up.gif)
   skin/classic/global/arrow/arrow-up-dis.gif               (../../windows/global/arrow/arrow-up-dis.gif)
   skin/classic/global/arrow/panelarrow-horizontal.svg      (../../windows/global/arrow/panelarrow-horizontal.svg)
   skin/classic/global/arrow/panelarrow-vertical.svg        (../../windows/global/arrow/panelarrow-vertical.svg)
 
 * skin/classic/global/dirListing/dirListing.css            (../../windows/global/dirListing/dirListing.css)
   skin/classic/global/icons/error-16.png                   (../../windows/global/icons/error-16.png)
   skin/classic/global/icons/question-16.png                (../../windows/global/icons/question-16.png)
@@ -67,11 +62,9 @@
   skin/classic/mozapps/update/downloadButtons.png            (../../windows/mozapps/update/downloadButtons.png)
 * skin/classic/mozapps/xpinstall/xpinstallConfirm.css        (../../windows/mozapps/extensions/xpinstallConfirm.css)
 
 #if MOZ_BUILD_APP == browser
 [browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
 #elif MOZ_SEPARATE_MANIFEST_FOR_THEME_OVERRIDES
 [extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
 #endif
-% override chrome://global/skin/arrow/arrow-lft-hov.gif           chrome://global/skin/arrow/arrow-lft.gif
-% override chrome://global/skin/arrow/arrow-rit-hov.gif           chrome://global/skin/arrow/arrow-rit.gif
 % override chrome://mozapps/skin/xpinstall/xpinstallItemGeneric.png       chrome://mozapps/skin/extensions/extensionGeneric.svg
deleted file mode 100644
--- a/toolkit/themes/windows/global/datetimepicker.css
+++ /dev/null
@@ -1,147 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* ===== datetimepicker.css =============================================
-  == Styles used by the XUL datepicker and timepicker elements.
-  ======================================================================= */
-  
-@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-@namespace html url("http://www.w3.org/1999/xhtml");
-
-datepicker, timepicker {
-  margin: 2px 4px;
-  padding: 0;
-  border: none;
-  background: none;
-  cursor: default;
-}
-
-.datetimepicker-input-box {
-  -moz-appearance: textfield;
-  cursor: text;
-  margin-inline-end: 2px;
-  border: 2px solid;
-  -moz-border-top-colors: ThreeDShadow ThreeDDarkShadow;
-  -moz-border-right-colors: ThreeDHighlight ThreeDLightShadow;
-  -moz-border-bottom-colors: ThreeDHighlight ThreeDLightShadow;
-  -moz-border-left-colors: ThreeDShadow ThreeDDarkShadow;
-  padding: 2px 0 3px 0;
-  padding-inline-start: 4px;
-  padding-inline-end: 2px;
-  background-color: -moz-Field;
-  color: -moz-FieldText;
-}
-
-.datetimepicker-input-subbox {
-  width: 1.6em;
-}
-
-html|*.datetimepicker-input {
-  text-align: end;
-}
-
-.datetimepicker-separator {
-  margin: 0 !important;
-}
-
-.datetimepicker-year {
-  width: 3.2em;
-}
-
-datepicker[readonly="true"],
-timepicker[readonly="true"] {
-  background-color: -moz-Dialog;
-  color: -moz-DialogText;
-}
-
-datepicker[disabled="true"],
-timepicker[disabled="true"] {
-  cursor: default;
-  background-color: -moz-Dialog;
-  color: GrayText;
-} 
-
-.datepicker-mainbox {
-  margin: 2px 4px;
-  border: 2px solid;
-  -moz-border-top-colors: ThreeDShadow ThreeDDarkShadow;
-  -moz-border-right-colors: ThreeDHighlight ThreeDLightShadow;
-  -moz-border-bottom-colors: ThreeDHighlight ThreeDLightShadow;
-  -moz-border-left-colors: ThreeDShadow ThreeDDarkShadow;
-  background-color: -moz-Field;
-  color: -moz-FieldText;
-}
-
-.datepicker-popupgrid > .datepicker-mainbox {
-  margin: 0;
-  border: none;
-}
-
-.datepicker-gridlabel, .datepicker-weeklabel {
-  text-align: center;
-}
-
-.datepicker-gridlabel[today="true"] {
-  background-color: darkgrey;
-  color: white;
-}
-
-.datepicker-gridlabel[selected="true"] {
-  background-color: Highlight;
-  color: HighlightText;
-}
-
-.datepicker-button {
-  -moz-appearance: none;
-  min-width: 8px;
-  padding: 0px;
-}
-
-.datepicker-previous {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft.gif");
-}
-
-.datepicker-next {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit.gif");
-}
-
-.datepicker-previous:hover {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft-hov.gif");
-}
-
-.datepicker-next:hover {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit-hov.gif");
-}
-
-.datepicker-previous[disabled="true"] {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft-dis.gif");
-}
-
-.datepicker-next[disabled="true"] {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit-dis.gif");
-}
-
-.datepicker-previous:-moz-locale-dir(rtl) {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit.gif");
-}
-
-.datepicker-next:-moz-locale-dir(rtl) {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft.gif");
-}
-
-.datepicker-previous:-moz-locale-dir(rtl) {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit-hov.gif");
-}
-
-.datepicker-next:-moz-locale-dir(rtl):hover {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft-hov.gif");
-}
-
-.datepicker-previous[disabled="true"]:-moz-locale-dir(rtl) {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit-dis.gif");
-}
-
-.datepicker-next[disabled="true"]:-moz-locale-dir(rtl) {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft-dis.gif");
-}
--- a/toolkit/themes/windows/global/jar.mn
+++ b/toolkit/themes/windows/global/jar.mn
@@ -27,16 +27,20 @@ toolkit.jar:
   skin/classic/global/printPageSetup.css
   skin/classic/global/printPreview.css
   skin/classic/global/scrollbox.css
   skin/classic/global/splitter.css
   skin/classic/global/toolbar.css
   skin/classic/global/toolbarbutton.css
 * skin/classic/global/tree.css
 * skin/classic/global/alerts/alert.css                     (alerts/alert.css)
+  skin/classic/global/arrow/arrow-lft.gif                  (arrow/arrow-lft.gif)
+  skin/classic/global/arrow/arrow-lft-dis.gif              (arrow/arrow-lft-dis.gif)
+  skin/classic/global/arrow/arrow-rit.gif                  (arrow/arrow-rit.gif)
+  skin/classic/global/arrow/arrow-rit-dis.gif              (arrow/arrow-rit-dis.gif)
   skin/classic/global/dirListing/folder.png                (dirListing/folder.png)
   skin/classic/global/dirListing/up.png                    (dirListing/up.png)
   skin/classic/global/icons/blacklist_favicon.png          (icons/blacklist_favicon.png)
   skin/classic/global/icons/blacklist_large.png            (icons/blacklist_large.png)
   skin/classic/global/icons/Error.png                      (icons/Error.png)
   skin/classic/global/icons/collapse.png                   (icons/collapse.png)
   skin/classic/global/icons/expand.png                     (icons/expand.png)
   skin/classic/global/icons/folder-item.png                (icons/folder-item.png)
@@ -49,18 +53,18 @@ toolkit.jar:
   skin/classic/global/icons/resizer.png                    (icons/resizer.png)
   skin/classic/global/icons/sslWarning.png                 (icons/sslWarning.png)
   skin/classic/global/icons/Warning.png                    (icons/Warning.png)
   skin/classic/global/icons/warning-large.png              (icons/warning-large.png)
   skin/classic/global/icons/windowControls.png             (icons/windowControls.png)
 * skin/classic/global/in-content/common.css                (in-content/common.css)
 * skin/classic/global/in-content/info-pages.css            (in-content/info-pages.css)
   skin/classic/global/toolbar/spring.png                   (toolbar/spring.png)
-  skin/classic/global/tree/twisty.svg                            (tree/twisty.svg)
-  skin/classic/global/tree/twisty-preWin10.svg                   (tree/twisty-preWin10.svg)
+  skin/classic/global/tree/twisty.svg                      (tree/twisty.svg)
+  skin/classic/global/tree/twisty-preWin10.svg             (tree/twisty-preWin10.svg)
 
 #if MOZ_BUILD_APP == browser
 [browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
 #elif MOZ_SEPARATE_MANIFEST_FOR_THEME_OVERRIDES
 [extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
 #endif
 
 % override chrome://global/skin/tree/twisty.svg#clsd              chrome://global/skin/tree/twisty-preWin10.svg#clsd           osversion<=6.3