]> source.dussan.org Git - jquery-ui.git/commitdiff
More datepicker demonstrations
authorKeith Wood <kbwood.au@gmail.com>
Wed, 11 Jun 2008 10:27:39 +0000 (10:27 +0000)
committerKeith Wood <kbwood.au@gmail.com>
Wed, 11 Jun 2008 10:27:39 +0000 (10:27 +0000)
20 files changed:
demos/functional/images/calendar.gif [deleted file]
demos/functional/index.html
demos/functional/templates/images/ar.gif [new file with mode: 0644]
demos/functional/templates/images/au.gif [new file with mode: 0644]
demos/functional/templates/images/br.gif [new file with mode: 0644]
demos/functional/templates/images/calendar.gif [new file with mode: 0644]
demos/functional/templates/images/cn.gif [new file with mode: 0644]
demos/functional/templates/images/id.gif [new file with mode: 0644]
demos/functional/templates/images/ie.gif [new file with mode: 0644]
demos/functional/templates/images/ke.gif [new file with mode: 0644]
demos/functional/templates/images/lb.gif [new file with mode: 0644]
demos/functional/templates/images/nz.gif [new file with mode: 0644]
demos/functional/templates/images/se.gif [new file with mode: 0644]
demos/functional/templates/images/us.gif [new file with mode: 0644]
demos/functional/templates/images/za.gif [new file with mode: 0644]
demos/functional/templates/ui.datepicker.dbd.html [new file with mode: 0644]
demos/functional/templates/ui.datepicker.dlg.html [new file with mode: 0644]
demos/functional/templates/ui.datepicker.html
demos/functional/templates/ui.datepicker.sel.html [new file with mode: 0644]
demos/functional/templates/ui.datepicker.two.html [new file with mode: 0644]

diff --git a/demos/functional/images/calendar.gif b/demos/functional/images/calendar.gif
deleted file mode 100644 (file)
index d0abaa7..0000000
Binary files a/demos/functional/images/calendar.gif and /dev/null differ
index a2c54176ddefff9dbf8ecf22c294c0950483b84a..950dac84ea9d52a424fa9f3278c4e3824820a775 100644 (file)
                        <script type="text/javascript" src="../../ui/ui.core.js"></script>
                        <script type="text/javascript" src="../../ui/ui.accordion.js"></script>
                        <script type="text/javascript" src="../../ui/ui.datepicker.js"></script>
-                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-zh-CN.js"></script>
-                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-zh-TW.js"></script>
-                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-id.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-ar.js"></script>
                        <script type="text/javascript" src="../../ui/i18n/ui.datepicker-bg.js"></script>
                        <script type="text/javascript" src="../../ui/i18n/ui.datepicker-ca.js"></script>
                        <script type="text/javascript" src="../../ui/i18n/ui.datepicker-cs.js"></script>
                        <script type="text/javascript" src="../../ui/i18n/ui.datepicker-da.js"></script>
                        <script type="text/javascript" src="../../ui/i18n/ui.datepicker-de.js"></script>
                        <script type="text/javascript" src="../../ui/i18n/ui.datepicker-es.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-fi.js"></script>
                        <script type="text/javascript" src="../../ui/i18n/ui.datepicker-fr.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-he.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-hu.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-hy.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-id.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-is.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-it.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-ja.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-ko.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-lt.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-lv.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-nl.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-no.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-pl.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-pt-BR.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-ro.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-ru.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-sk.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-sv.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-th.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-tr.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-uk.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-zh-CN.js"></script>
+                       <script type="text/javascript" src="../../ui/i18n/ui.datepicker-zh-TW.js"></script>
                        <script type="text/javascript" src="../../ui/ui.dialog.js"></script>
                        <script type="text/javascript" src="../../ui/ui.draggable.js"></script>
                        <script type="text/javascript" src="../../ui/ui.droppable.js"></script>
 
                                                  <ul class="component-links">
                                                                <li><a href="#ui.accordion" title="Goto Accordion's Component Page">Accordion</a></li>
-                                                               <li><a href="#ui.tabs" title="Goto Tabs Component Page">Tabs</a></li>
-                                                               <li><a href="#ui.slider" title="Goto Slider Component Page">Slider</a></li>
-                                                               <li><a href="#ui.dialog" title="Goto Dialog's Component Page">Dialog</a></li>
                                                                <li><a href="#ui.datepicker" title="Goto Datepicker's Component Page">Datepicker</a></li>
+                                                               <li><a href="#ui.dialog" title="Goto Dialog's Component Page">Dialog</a></li>
+                                                               <li><a href="#ui.slider" title="Goto Slider Component Page">Slider</a></li>
+                                                               <li><a href="#ui.tabs" title="Goto Tabs Component Page">Tabs</a></li>
                                                        </ul>
                                        </div>
 
diff --git a/demos/functional/templates/images/ar.gif b/demos/functional/templates/images/ar.gif
new file mode 100644 (file)
index 0000000..f34c90f
Binary files /dev/null and b/demos/functional/templates/images/ar.gif differ
diff --git a/demos/functional/templates/images/au.gif b/demos/functional/templates/images/au.gif
new file mode 100644 (file)
index 0000000..db005b4
Binary files /dev/null and b/demos/functional/templates/images/au.gif differ
diff --git a/demos/functional/templates/images/br.gif b/demos/functional/templates/images/br.gif
new file mode 100644 (file)
index 0000000..8b8bf14
Binary files /dev/null and b/demos/functional/templates/images/br.gif differ
diff --git a/demos/functional/templates/images/calendar.gif b/demos/functional/templates/images/calendar.gif
new file mode 100644 (file)
index 0000000..d0abaa7
Binary files /dev/null and b/demos/functional/templates/images/calendar.gif differ
diff --git a/demos/functional/templates/images/cn.gif b/demos/functional/templates/images/cn.gif
new file mode 100644 (file)
index 0000000..5482753
Binary files /dev/null and b/demos/functional/templates/images/cn.gif differ
diff --git a/demos/functional/templates/images/id.gif b/demos/functional/templates/images/id.gif
new file mode 100644 (file)
index 0000000..d7f4ab8
Binary files /dev/null and b/demos/functional/templates/images/id.gif differ
diff --git a/demos/functional/templates/images/ie.gif b/demos/functional/templates/images/ie.gif
new file mode 100644 (file)
index 0000000..827c498
Binary files /dev/null and b/demos/functional/templates/images/ie.gif differ
diff --git a/demos/functional/templates/images/ke.gif b/demos/functional/templates/images/ke.gif
new file mode 100644 (file)
index 0000000..e352177
Binary files /dev/null and b/demos/functional/templates/images/ke.gif differ
diff --git a/demos/functional/templates/images/lb.gif b/demos/functional/templates/images/lb.gif
new file mode 100644 (file)
index 0000000..f204918
Binary files /dev/null and b/demos/functional/templates/images/lb.gif differ
diff --git a/demos/functional/templates/images/nz.gif b/demos/functional/templates/images/nz.gif
new file mode 100644 (file)
index 0000000..86b89cb
Binary files /dev/null and b/demos/functional/templates/images/nz.gif differ
diff --git a/demos/functional/templates/images/se.gif b/demos/functional/templates/images/se.gif
new file mode 100644 (file)
index 0000000..7301c59
Binary files /dev/null and b/demos/functional/templates/images/se.gif differ
diff --git a/demos/functional/templates/images/us.gif b/demos/functional/templates/images/us.gif
new file mode 100644 (file)
index 0000000..39c472e
Binary files /dev/null and b/demos/functional/templates/images/us.gif differ
diff --git a/demos/functional/templates/images/za.gif b/demos/functional/templates/images/za.gif
new file mode 100644 (file)
index 0000000..197cbd8
Binary files /dev/null and b/demos/functional/templates/images/za.gif differ
diff --git a/demos/functional/templates/ui.datepicker.dbd.html b/demos/functional/templates/ui.datepicker.dbd.html
new file mode 100644 (file)
index 0000000..39bc6ff
--- /dev/null
@@ -0,0 +1,35 @@
+<input type="text" size="10" value="" id="dayByDay"/>\r
+<style type="text/css">\r
+.ar_day { color: white !important; background: #eee url(templates/images/ar.gif) no-repeat center !important; }\r
+.au_day { color: blue !important; background: #eee url(templates/images/au.gif) no-repeat center !important; }\r
+.br_day { color: green !important; background: #eee url(templates/images/br.gif) no-repeat center !important; }\r
+.cn_day { color: red !important; background: #eee url(templates/images/cn.gif) no-repeat center !important; }\r
+.id_day { color: white !important; background: #eee url(templates/images/id.gif) no-repeat center !important; }\r
+.ie_day { color: white !important; background: #eee url(templates/images/ie.gif) no-repeat center !important; }\r
+.ke_day { color: red !important; background: #eee url(templates/images/ke.gif) no-repeat center !important; }\r
+.lb_day { color: white !important; background: #eee url(templates/images/lb.gif) no-repeat center !important; }\r
+.nz_day { color: blue !important; background: #eee url(templates/images/nz.gif) no-repeat center !important; }\r
+.se_day { color: blue !important; background: #eee url(templates/images/se.gif) no-repeat center !important; }\r
+.us_day { color: white !important; background: #eee url(templates/images/us.gif) no-repeat center !important; }\r
+.za_day { color: green !important; background: #eee url(templates/images/za.gif) no-repeat center !important; }\r
+</style>\r
+<script type="text/javascript">\r
+var natDays = [[1, 26, 'au'], [2, 6, 'nz'], [3, 17, 'ie'], [4, 27, 'za'], [5, 25, 'ar'], [6, 6, 'se'], \r
+    [7, 4, 'us'], [8, 17, 'id'], [9, 7, 'br'], [10, 1, 'cn'], [11, 22, 'lb'], [12, 12, 'ke']]; \r
\r
+function nationalDays(date) { \r
+    for (i = 0; i < natDays.length; i++) { \r
+        if (date.getMonth() == natDays[i][0] - 1 && date.getDate() == natDays[i][1]) { \r
+            return [false, natDays[i][2] + '_day']; \r
+        } \r
+    } \r
+    return [true, '']; \r
+}\r
+\r
+function highlightToday(date, inst) { \r
+    var today = new Date(); \r
+    today = new Date(today.getFullYear(), today.getMonth(), today.getDate()); \r
+    return $.datepicker.dateStatus(date, inst) + \r
+        (today.getTime() == date.getTime() ? ' (today)' : ''); \r
+} \r
+</script>
\ No newline at end of file
diff --git a/demos/functional/templates/ui.datepicker.dlg.html b/demos/functional/templates/ui.datepicker.dlg.html
new file mode 100644 (file)
index 0000000..cf30239
--- /dev/null
@@ -0,0 +1,6 @@
+<input type="text" size="10" value="" id="dialog" readonly="readonly"/> <button id="dialogButton">Open dialog</button>\r
+<script type="text/javascript">\r
+function setDateFromDialog(date) { \r
+    $('#dialog').val(date); \r
+}\r
+</script>
\ No newline at end of file
index c53acfbda55eecf7157abb938e7fac0de92f906f..00b3a3e0373740c50e1492d4e99bcfe9e3098aee 100644 (file)
 
                        {
                                title: 'Datepicker Basics',
-                               desc: 'A date picker can easily be added to an input field with default settings.<br/>' +
-                                       'You can also use keystrokes to drive the datepicker:<br/>' +
-                                       '<ul><li>page up/down - previous/next month</li>' +
+                               desc: 'A datepicker can easily be added to an input field with default settings:' +
+                                       '<ul style="list-style: disc; padding-left: 2em;"><li>Datepicker appears on focus</li>' +
+                                       '<li>Text is in English</li>' +
+                                       '<li>Date format is mm/dd/yyyy</li>' +
+                                       '<li>Clear/Close controls show at the top</li>' +
+                                       '<li>Month and year are selectable directly</li>' +
+                                       '<li>10 years before and after the selected year are shown</li>' +
+                                       '<li>Show a single month</li>' +
+                                       '<li>Select a single date</li>' +
+                                       '<li>Week starts on Sunday</li>' +
+                                       '<li>Day names are clickable to change the first day of the week</li>' +
+                                       '<li>Days in other months are not displayed</li>' +
+                                       '<li>No date restrictions</li>' +
+                                       '<li>Clicking elsewhere closes the date picker</li></ul>',
+                               html: '<input type="text" size="30" value="click to show datepicker" id="basics"/>\n' + 
+                                       '<style type="text/css">.embed + img { position: relative; left: -21px; top: -1px; }</style>',
+                               destroy: '$("#basics").datepicker("destroy").removeClass();',
+
+                               options: [
+                                       {       desc: 'Default datepicker - open on focus',     source: '$("#basics").datepicker();' },
+                                       {       desc: 'Open on button only',    source: '$("#basics").datepicker({showOn: "button"});' },
+                                       {       desc: 'Open on image button only',      source: '$("#basics").datepicker({showOn: "button", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Open on focus or button',        source: '$("#basics").datepicker({showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Embed the button in the input (with CSS)',       source: '$("#basics").datepicker({showOn: "button", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}).addClass("embed");' },
+                                       {       desc: 'Disabled datepicker',    source: '$("#basics").datepicker({showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}).datepicker("disable");' }
+                               ]
+                       },
+
+                       {
+                               title: 'Keystrokes',
+                               desc: 'You can use the keyboard to enter dates and to control the datepicker:' +
+                                       '<ul style="list-style: disc; padding-left: 2em;"><li>page up/down - previous/next month</li>' +
                                        '<li>ctrl+page up/down - previous/next year</li>' +
                                        '<li>ctrl+home - current month or open when closed</li>' +
                                        '<li>ctrl+left/right - previous/next day</li>' +
                                        '<li>ctrl+up/down - previous/next week</li>' +
                                        '<li>enter - accept the selected date</li>' +
                                        '<li>ctrl+end - close and erase the date</li>' +
-                                       '<li>escape - close the date picker without selection</li></ul>',
-                               html: '<input type="text" size="30" value="click to show datepicker" id="basics"/>',
-                               destroy: '$("#basics").datepicker("destroy");',
+                                       '<li>escape - close the datepicker without selection</li></ul>',
+                               html: '<input type="text" size="10" value="" id="keys"/>',
+                               destroy: '$("#keys").datepicker("destroy").attr("readonly", "");',
 
                                options: [
-                                       {       desc: 'Default datepicker - open on focus',     source: '$("#basics").datepicker();' },
-                                       {       desc: 'Open on button only',    source: '$("#basics").datepicker({showOn: "button"});' },
-                                       {       desc: 'Open on image button only',      source: '$("#basics").datepicker({showOn: "button", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: 'Open on focus or button',        source: '$("#basics").datepicker({showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: 'Disabled datepicker',    source: '$("#basics").datepicker({showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true}).datepicker("disable");' }
+                                       {       desc: 'Default datepicker',     source: '$("#keys").datepicker({showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'No keystroke entry',     source: '$("#keys").datepicker({showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}).attr("readonly", "readonly");' }
                                ]
                        },
 
                        {
                                title: 'Restricting Datepicker',
-                               desc: 'A date picker can have its basic functionality restricted in various ways.',
+                               desc: 'A datepicker can have its basic functionality restricted in various ways.',
                                html: '<input type="text" size="10" value="" id="restricting"/>',
                                destroy: '$("#restricting").datepicker("destroy");',
 
                                options: [
-                                       {       desc: 'First day of week is Monday and can\'t change it',       source: '$("#restricting").datepicker({firstDay: 1, changeFirstDay: false, showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: 'Can\'t change month/year from dropdowns',        source: '$("#restricting").datepicker({changeMonth: false, changeYear: false, showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: 'Dates from Jan 26 2005 to Jan 26 2007 only',     source: '$("#restricting").datepicker({minDate: new Date(2005, 1 - 1, 26), maxDate: new Date(2007, 1 - 1, 26), showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: 'Dates within the next 365 days only',    source: '$("#restricting").datepicker({minDate: 0, maxDate: 365, showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: 'Dates from yesterday to 6 years away only',      source: '$("#restricting").datepicker({minDate: "-1d", maxDate: "6y", showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' }
+                                       {       desc: 'First day of week is Monday and can\'t change it',       source: '$("#restricting").datepicker({firstDay: 1, changeFirstDay: false, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Can\'t change month/year from dropdowns',        source: '$("#restricting").datepicker({changeMonth: false, changeYear: false, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Year dropdown shows last 20 years',      source: '$("#restricting").datepicker({yearRange: "-20:+0", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Year dropdown shows 2000 to 2010',       source: '$("#restricting").datepicker({yearRange: "2000:2010", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Dates from Jan 26 2005 to Jan 26 2007 only',     source: '$("#restricting").datepicker({minDate: new Date(2005, 1 - 1, 26), maxDate: new Date(2007, 1 - 1, 26), showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Dates within the next 365 days only',    source: '$("#restricting").datepicker({minDate: 0, maxDate: 365, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Dates from yesterday to 6 years away only',      source: '$("#restricting").datepicker({minDate: "-1d", maxDate: "6y", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' }
                                ]
                        },
 
                        {
-                               title: 'Datepicker Formats',
-                               desc: 'A date picker can display its value in numerous formats, with the default being "mm/dd/yy".',
+                               title: 'Date Formats',
+                               desc: 'A datepicker can display its value in numerous formats, with the default being "mm/dd/yy". ' +
+                                       'The formatting codes are:' +
+                                       '<ul style="list-style: disc; padding-left: 2em;"><li>d - day of month (no leading zero)</li>' +
+                                       '<li>dd - day of month (two digit)</li>' +
+                                       '<li>D - day name short</li>' +
+                                       '<li>DD - day name long</li>' +
+                                       '<li>m - month of year (no leading zero)</li>' +
+                                       '<li>mm - month of year (two digit)</li>' +
+                                       '<li>M - month name short</li>' +
+                                       '<li>MM - month name long</li>' +
+                                       '<li>y - year (two digit)</li>' +
+                                       '<li>yy - year (four digit)</li>' +
+                                       '<li>\'...\' - literal text</li>' +
+                                       '<li>\'\' - single quote</li></ul>',
                                html: '<input type="text" size="30" value="" id="formatted"/>',
                                destroy: '$("#formatted").datepicker("destroy");',
 
                                options: [
-                                       {       desc: 'Medium format',  source: '$("#formatted").datepicker({dateFormat: "M d, yy", showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: 'Long format',    source: '$("#formatted").datepicker({dateFormat: "MM d, yy", showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: 'Full format',    source: '$("#formatted").datepicker({dateFormat: "DD, MM d, yy", showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: 'With no century',        source: '$("#formatted").datepicker({dateFormat: "dd/mm/y", showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: 'French full format',     source: '$("#formatted").datepicker($.datepicker.regional["fr"]).datepicker("change", {dateFormat: "DD, MM d, yy", showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' }
+                                       {       desc: 'Medium format',  source: '$("#formatted").datepicker({dateFormat: "M d, yy", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Long format',    source: '$("#formatted").datepicker({dateFormat: "MM d, yy", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Full format',    source: '$("#formatted").datepicker({dateFormat: "DD, MM d, yy", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'ISO format',     source: '$("#formatted").datepicker({dateFormat: "yy-mm-dd", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'With no century',        source: '$("#formatted").datepicker({dateFormat: "dd/mm/y", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'French full format',     source: '$("#formatted").datepicker($.extend({}, $.datepicker.regional["fr"], {dateFormat: "DD, MM d, yy", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));' }
+                               ]
+                       },
+
+                       {
+                               title: 'Day-by-day Modifications',
+                               desc: 'You have several mechanisms for modifying the datepicker\'s appearance on a day-by-day basis.',
+                               html: { url: 'templates/ui.datepicker.dbd.html' },
+                               destroy: '$("#dayByDay").datepicker("destroy");',
+
+                               options: [
+                                       {       desc: 'Weekends are not selectable',    source: '$("#dayByDay").datepicker({beforeShowDay: $.datepicker.noWeekends, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Highlight some national days (via CSS)', source: '$("#dayByDay").datepicker({beforeShowDay: nationalDays, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Customise status line for today',        source: '$("#dayByDay").datepicker({showStatus: true, statusForDate: highlightToday, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' }
+                               ]
+                       },
+
+                       {
+                               title: 'Date Ranges',
+                               desc: 'Choose a range of dates instead of a single one by clicking firstly on the starting date, then on the ending date.',
+                               html: '<input type="text" size="24" value="" id="ranges"/>',
+                               destroy: '$("#ranges").datepicker("destroy");',
+
+                               options: [
+                                       {       desc: 'Range select with a single month',       source: '$("#ranges").datepicker({rangeSelect: true, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Range select showing two months',        source: '$("#ranges").datepicker({rangeSelect: true, numberOfMonths: 2, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Range select showing six months (moving three at a time)',       source: '$("#ranges").datepicker({rangeSelect: true, numberOfMonths: [2, 3], stepMonths: 3, prevText: "<< Previous Months", nextText: "Next Months >>", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' }
+                               ]
+                       },
+
+                       {
+                               title: 'Another Date Range',
+                               desc: 'Synchronise two datepickers to together select a date range.',
+                               html: { url: 'templates/ui.datepicker.two.html' },
+                               destroy: '$("#startDate,#endDate").datepicker("destroy");',
+
+                               options: [
+                                       {       desc: 'Range select with two datepickers',      source: '$("#startDate,#endDate").datepicker({beforeShow: customRange, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' }
+                               ]
+                       },
+
+                       {
+                               title: 'Inline Datepicker',
+                               desc: 'A datepicker can also be shown inline, rather than popping-up, by targetting a division instead of an input field. ' +
+                                       'Use the <i>onSelect</i> callback to be notified of date selections.',
+                               html: '<div id="inline"></div><p style="clear: both;"></p>',
+                               destroy: '$("#inline").datepicker("destroy");',
+
+                               options: [
+                                       {       desc: 'Single month inline',    source: '$("#inline").datepicker();' },
+                                       {       desc: 'Range select inline',    source: '$("#inline").datepicker({rangeSelect: true});' },
+                                       {       desc: 'Range select showing two months inline', source: '$("#inline").datepicker({rangeSelect: true, numberOfMonths: 2}).children("div").css("width", "370px");' }
+                               ]
+                       },
+
+                       {
+                               title: 'Datepicker in a Dialog',
+                               desc: 'A datepicker can also be opened within a "dialog" box.',
+                               html: { url: 'templates/ui.datepicker.dlg.html' },
+                               destroy: '',
+
+                               options: [
+                                       {       desc: 'Open in a dialog',       source: '$("#dialogButton").click(function() { $(this).datepicker("dialog", $("#dialog").val(), setDateFromDialog, {prompt: "Choose a date", speed: ""}) });' }
+                               ]
+                       },
+
+                       {
+                               title: 'Datepicker Linked to Dropdowns',
+                               desc: 'With a bit of wiring code, you can link the datepicker with three dropdowns for date selection.',
+                               html: { url: 'templates/ui.datepicker.sel.html' },
+                               destroy: '',
+
+                               options: [
+                                       {       desc: 'Linked to dropdowns',    source: '$("#linkedDates").datepicker({minDate: new Date(2001, 1 - 1, 1), maxDate: new Date(2010, 12 - 1, 31), beforeShow: readLinked, onSelect: updateLinked, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}); $("#selectMonth, #selectYear").change(checkLinkedDays);' }
+                               ]
+                       },
+
+                       {
+                               title: 'Callbacks',
+                               desc: 'Custom functions may be invoked when certain events occur within the datepicker.',
+                               html: '<input type="text" size="10" value="" id="callbacks"/>',
+                               destroy: '$("#callbacks").datepicker("destroy");',
+
+                               options: [
+                                       {       desc: 'On select',      source: '$("#callbacks").datepicker({onSelect: function(date) { alert("The chosen date is " + date); }, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'On close',       source: '$("#callbacks").datepicker({onClose: function(date) { alert("Closed with date " + date); }, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' }
+                               ]
+                       },
+
+                       {
+                               title: 'Default Date',
+                               desc: 'Control which date is shown if the datepicker is opened with no value. The default is today.',
+                               html: '<input type="text" size="10" value="" id="defaultDate"/>',
+                               destroy: '$("#defaultDate").datepicker("destroy");',
+
+                               options: [
+                                       {       desc: 'January 1, 2007',        source: '$("#defaultDate").datepicker({defaultDate: new Date(2007, 1 - 1, 1), showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: '7 days from today',      source: '$("#defaultDate").datepicker({defaultDate: +7, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: '2 weeks from today',     source: '$("#defaultDate").datepicker({defaultDate: "+2w", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' }
+                               ]
+                       },
+
+                       {
+                               title: 'Miscellaneous',
+                               desc: 'There are many other miscellaneous settings you can apply.',
+                               html: '<input type="text" size="10" value="" id="misc"/>',
+                               destroy: '$("#misc").datepicker("destroy");',
+
+                               options: [
+                                       {       desc: 'Append text to the datepicker',  source: '$("#misc").datepicker({appendText: "(format mm/dd/yyyy)", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Show days from other months',    source: '$("#misc").datepicker({showOtherMonths: true, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Show week of the year (ISO 8601)',       source: '$("#misc").datepicker({showWeeks: true, firstDay: 1, changeFirstDay: false, showOtherMonths: true, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Move Clear/Close controls to the bottom',        source: '$("#misc").datepicker({closeAtTop: false, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Make the datepicker mandatory (no Clear)',       source: '$("#misc").datepicker({mandatory: true, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Hide Prev/Next links if not applicable', source: '$("#misc").datepicker({hideIfNoPrevNext: true, minDate: new Date(2008, 1 - 1, 26), maxDate: new Date(2008, 3 - 1, 26), showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Show a status bar with more explanation',        source: '$("#misc").datepicker({showStatus: true, showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' }
+                               ]
+                       },
+
+                       {
+                               title: 'Inline Configuration',
+                               desc: 'You can configure each input field inline by adding attributes with the same name '+
+                                       'as the datepicker settings and a "date:" prefix.',
+                               html: '<input type="text" size="10" value="" id="config" \n' +
+                                       'date:closeAtTop="false" date:firstDay="1" date:appendText="(pick a date)"/>',
+                               destroy: '$("#config").datepicker("destroy");',
+
+                               options: [
+                                       {       desc: 'Inline configuration - see source',      source: '$("#config").datepicker({showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' }
+                               ]
+                       },
+
+                       {
+                               title: 'Animations',
+                               desc: 'You can control how the datepicker appears - both its style and speed. The default is a medium speed animation expanding from the top-left (show).',
+                               html: '<input type="text" size="10" value="" id="anim"/>',
+                               destroy: '$("#anim").datepicker("destroy");',
+
+                               options: [
+                                       {       desc: 'Show at slow speed',     source: '$("#anim").datepicker({speed: "slow", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Show at medium speed (default)', source: '$("#anim").datepicker({speed: "normal", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Show at fast speed',     source: '$("#anim").datepicker({speed: "fast", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Show immediately',       source: '$("#anim").datepicker({speed: "", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Fade in at medium speed',        source: '$("#anim").datepicker({showAnim: "fadeIn", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' },
+                                       {       desc: 'Slide down at medium speed',     source: '$("#anim").datepicker({showAnim: "slideDown", showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true});' }
                                ]
                        },
 
                        {
                                title: 'International Datepickers',
                                desc: 'Numerous international packs are available for the datepicker.',
-                               html: '<input type="text" size="10" value="" id="i18n"/>',
+                               html: '<input type="text" size="10" value="" id="i18n"/> thanks to <span id="contrib"><span>',
                                destroy: '$("#i18n").datepicker("destroy");',
 
                                options: [
-                                       {       desc: '&#31616;&#20307;&#20013;&#25991; (Chinese Simplified)',  source: '$("#i18n").datepicker($.datepicker.regional["zh-CN"]).datepicker("change", {showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: '&#31777;&#39636;&#20013;&#25991; (Chinese Traditional)', source: '$("#i18n").datepicker($.datepicker.regional["zh-TW"]).datepicker("change", {showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: 'Bahasa Indonesia (Indonesian)',  source: '$("#i18n").datepicker($.datepicker.regional["id"]).datepicker("change", {showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: '&#1073;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080; &#1077;&#1079;&#1080;&#1082; (Bulgarian)',       source: '$("#i18n").datepicker($.datepicker.regional["bg"]).datepicker("change", {showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: 'Catal&agrave; (Catalan)',        source: '$("#i18n").datepicker($.datepicker.regional["ca"]).datepicker("change", {showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: '&#268;e&#353;tina (Czech)',      source: '$("#i18n").datepicker($.datepicker.regional["cs"]).datepicker("change", {showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: 'Dansk (Danish)', source: '$("#i18n").datepicker($.datepicker.regional["da"]).datepicker("change", {showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: 'Deutsch (German)',       source: '$("#i18n").datepicker($.datepicker.regional["de"]).datepicker("change", {showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: 'Espa&ntilde;ol (Spanish)',       source: '$("#i18n").datepicker($.datepicker.regional["es"]).datepicker("change", {showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' },
-                                       {       desc: 'Fran&ccedil;ais (French)',       source: '$("#i18n").datepicker($.datepicker.regional["fr"]).datepicker("change", {showOn: "both", buttonImage: "images/calendar.gif", buttonImageOnly: true});' }
+                                       {       desc: '&#31616;&#20307;&#20013;&#25991; (Chinese Simplified)',  source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["zh-CN"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Cloudream");' },
+                                       {       desc: '&#31777;&#39636;&#20013;&#25991; (Chinese Traditional)', source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["zh-TW"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Ressol");' },
+                                       {       desc: 'Bahasa Indonesia (Indonesian)',  source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["id"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Deden Fathurahman");' },
+                                       {       desc: '&#1073;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080; &#1077;&#1079;&#1080;&#1082; (Bulgarian)',       source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["bg"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Stoyan Kyosev");' },
+                                       {       desc: 'Catal&agrave; (Catalan)',        source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["ca"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Joan Leon");' },
+                                       {       desc: '&#268;e&#353;tina (Czech)',      source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["cs"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Tomas Muller");' },
+                                       {       desc: 'Dansk (Danish)', source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["da"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Jan Christensen");' },
+                                       {       desc: 'Deutsch (German)',       source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["de"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Milian Wolff");' },
+                                       {       desc: 'Espa&ntilde;ol (Spanish)',       source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["es"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Vester");' },
+                                       {       desc: 'Fran&ccedil;ais (French)',       source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["fr"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("St&eacute;phane Nahmani");' },
+                                       {       desc: '&#54620;&#44397;&#50612; (Korean)',      source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["ko"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("DaeKwon Kang");' },
+                                       {       desc: '&#1344;&#1377;&#1397;&#1381;&#1408;&#1381;&#1398; (Armenian)',   source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["hy"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Levon Zakaryan");' },
+                                       {       desc: '&Iacute;slenska (Icelandic)',    source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["is"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Haukur H. Thorsson");' },
+                                       {       desc: 'Italiano (Italian)',     source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["it"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Apaella");' },
+                                       {       desc: 'Magyar (Hungarian)',     source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["hu"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Istvan Karaszi");' },
+                                       {       desc: 'Nederlands (Dutch)',     source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["nl"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("???");' },
+                                       {       desc: '&#26085;&#26412;&#35486; (Japanese)',    source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["ja"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Milly");' },
+                                       {       desc: 'Latvie\9au Valoda (Latvian)',      source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["lv"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Arturas Paleicikas");' },
+                                       {       desc: 'lietuvi&#371; kalba (Lithuanian)',       source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["lt"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Arturas Paleicikas");' },
+                                       {       desc: 'Norsk (Norwegian)',      source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["no"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Naimdjon Takhirov");' },
+                                       {       desc: 'Phasa thai (Thai)',      source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["th"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("pipo");' },
+                                       {       desc: 'Polski (Polish)',        source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["pl"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Jacek Wysocki");' },
+                                       {       desc: 'Portugu&ecirc;s (Portuguese/Brazilian)', source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["pt-BR"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Leonildo Costa Silva");' },
+                                       {       desc: 'Rom&acirc;n&#259; (Romanian)',   source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["ro"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Edmond L.");' },
+                                       {       desc: '&#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081; (Russian)',    source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["ru"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Andrew Stromnov");' },
+                                       {       desc: 'Sloven&#269;ina (Slovak)',       source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["sk"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Vojtech Rinik");' },
+                                       {       desc: 'suomi (Finnish)',        source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["fi"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Harri Kilpi&ouml;");' },
+                                       {       desc: 'Svenska (Swedish)',      source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["sv"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Anders Ekdahl");' },
+                                       {       desc: 'T&uuml;rk&ccedil;e (Turkish)',   source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["tr"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Izzet Emre Erkan");' },
+                                       {       desc: '&#1059;&#1082;&#1088;&#1072;&#1111;&#1085;&#1089;&#1100;&#1082;&#1072; (Ukranian)',      source: '$("#i18n").datepicker($.extend({}, $.datepicker.regional["uk"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib").html("Maxim Drogobitskiy");' }
+                               ]
+                       },
+
+                       {
+                               title: 'International Datepickers Right-to-left',
+                               desc: 'Some international packs change the orientation of the datepicker to right-to-left.',
+                               html: '<input type="text" size="10" value="" id="i18nrtl"/> thanks to <span id="contrib2"></span>',
+                               destroy: '$("#i18nrtl").datepicker("destroy");',
+
+                               options: [
+                                       {       desc: '&#8235;&#1575;&#1604;&#1593;&#1585;&#1576;&#1610;&#1577; (Arabic)',      source: '$("#i18nrtl").datepicker($.extend({}, $.datepicker.regional["ar"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib2").html("Khaled Al Horani");' },
+                                       {       desc: '&#8235;&#1506;&#1489;&#1512;&#1497;&#1514; (Hebrew)',    source: '$("#i18nrtl").datepicker($.extend({}, $.datepicker.regional["he"], {showOn: "both", buttonImage: "templates/images/calendar.gif", buttonImageOnly: true}));$("#contrib2").html("Amir Hardon");' }
                                ]
                        }
 
diff --git a/demos/functional/templates/ui.datepicker.sel.html b/demos/functional/templates/ui.datepicker.sel.html
new file mode 100644 (file)
index 0000000..cc8ff25
--- /dev/null
@@ -0,0 +1,54 @@
+<select id="selectMonth"><option value="01">Jan</option><option value="02">Feb</option>\r
+       <option value="03">Mar</option><option value="04">Apr</option>\r
+       <option value="05">May</option><option value="06">Jun</option>\r
+       <option value="07">Jul</option><option value="08">Aug</option>\r
+       <option value="09">Sep</option><option value="10">Oct</option>\r
+       <option value="11">Nov</option><option value="12">Dec</option></select>\r
+<select id="selectDay"><option value="01">1</option><option value="02">2</option>\r
+       <option value="03">3</option><option value="04">4</option>\r
+       <option value="05">5</option><option value="06">6</option>\r
+       <option value="07">7</option><option value="08">8</option>\r
+       <option value="09">9</option><option value="10">10</option>\r
+       <option value="11">11</option><option value="12">12</option>\r
+       <option value="13">13</option><option value="14">14</option>\r
+       <option value="15">15</option><option value="16">16</option>\r
+       <option value="17">17</option><option value="18">18</option>\r
+       <option value="19">19</option><option value="20">20</option>\r
+       <option value="21">21</option><option value="22">22</option>\r
+       <option value="23">23</option><option value="24">24</option>\r
+       <option value="25">25</option><option value="26">26</option>\r
+       <option value="27">27</option><option value="28">28</option>\r
+       <option value="29">29</option><option value="30">30</option>\r
+       <option value="31">31</option></select>\r
+<select id="selectYear"><option value="2001">2001</option><option value="2002">2002</option>\r
+       <option value="2003">2003</option><option value="2004">2004</option>\r
+       <option value="2005">2005</option><option value="2006">2006</option>\r
+       <option value="2007">2007</option><option value="2008">2008</option>\r
+       <option value="2009">2009</option><option value="2010">2010</option></select>\r
+<input type="hidden" size="10" id="linkedDates" disabled="disabled"/></p>\r
+<script type="text/javascript">\r
+// Prepare to show a date picker linked to three select controls\r
+function readLinked() {\r
+       $('#linkedDates').val($('#selectMonth').val() + '/' +\r
+               $('#selectDay').val() + '/' + $('#selectYear').val());\r
+       return {};\r
+}\r
+\r
+// Update three select controls to match a date picker selection\r
+function updateLinked(date) {\r
+       $('#selectMonth').val(date.substring(0, 2));\r
+       $('#selectDay').val(date.substring(3, 5));\r
+       $('#selectYear').val(date.substring(6, 10));\r
+}\r
+\r
+// Prevent selection of invalid dates through the select controls\r
+function checkLinkedDays() {\r
+       var daysInMonth = 32 - new Date($('#selectYear').val(),\r
+               $('#selectMonth').val() - 1, 32).getDate();\r
+       $('#selectDay option').attr('disabled', '');\r
+       $('#selectDay option:gt(' + (daysInMonth - 1) +')').attr('disabled', 'disabled');\r
+       if ($('#selectDay').val() > daysInMonth) {\r
+               $('#selectDay').val(daysInMonth);\r
+       }\r
+}\r
+</script>\r
diff --git a/demos/functional/templates/ui.datepicker.two.html b/demos/functional/templates/ui.datepicker.two.html
new file mode 100644 (file)
index 0000000..639aa05
--- /dev/null
@@ -0,0 +1,7 @@
+<input type="text" size="10" value="" id="startDate"/> to <input type="text" size="10" value="" id="endDate"/>\r
+<script type="text/javascript">\r
+function customRange(input) {\r
+       return {minDate: (input.id == "endDate" ? $("#startDate").datepicker("getDate") : null),\r
+               maxDate: (input.id == "startDate" ? $("#endDate").datepicker("getDate") : null)};\r
+}\r
+</script>
\ No newline at end of file