1 var data; var error; var network; var sound;
3 function $(id) { return document.getElementById(id); }
5 function default_focus() { $('cancel_btn').focus(); } // parent interfaces often call this
7 function timestamp_init() {
10 commonStrings = $('commonStrings');
12 if (typeof JSAN == 'undefined') {
14 commonStrings.getString('common.jsan.missing')
18 JSAN.errorLevel = "die"; // none, warn, or die
19 JSAN.addRepository('..');
21 JSAN.use('util.error'); error = new util.error();
22 JSAN.use('util.sound'); sound = new util.sound();
23 JSAN.use('util.date');
25 $('datepicker').value = xul_param('default_date',{'modal_xulG':true}) || util.date.formatted_date(new Date(),'%F');
27 if (xul_param('title',{'modal_xulG':true})) { $('dialogheader').setAttribute('title',xul_param('title',{'modal_xulG':true})); }
28 if (xul_param('description',{'modal_xulG':true})) { $('dialogheader').setAttribute('description',xul_param('description',{'modal_xulG':true})); }
30 var x = $('msg_area');
31 if (x && xul_param('msg',{'modal_xulG':true})) {
32 var d = document.createElement('description');
33 var t = document.createTextNode( xul_param('msg',{'modal_xulG':true}) );
38 if (xul_param('allow_unset',{'modal_xulG':true})) { $('remove_btn').hidden = false; }
40 /* set widget behavior */
41 $('cancel_btn').addEventListener(
42 'command', function() { window.close(); }, false
44 $('apply_btn').addEventListener(
49 $('remove_btn').addEventListener(
51 gen_handle_apply({'remove':true}),
55 $('datepicker').addEventListener(
59 var check = check_date( ev.target.value );
60 if ( ! check.allowed ) { throw( check.reason ); }
61 $('apply_btn').disabled = false;
63 JSAN.use('util.sound'); var sound = new util.sound(); sound.bad();
66 x.setAttribute('value', check.reason);
68 $('apply_btn').disabled = true;
70 dump('util.timestamp.js:date: ' + E + '\n');
78 var err_prefix = 'timestamp.js -> timestamp_init() : ';
79 if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
83 function check_date(value) {
84 if (xul_param('disallow_future_dates',{'modal_xulG':true})) {
85 if ( ev.target.dateValue > new Date() ) { return { 'allowed' : false, 'reason' : $('commonStrings').getString('staff.util.timestamp_dialog.future_date_disallowed') }; }
87 if (xul_param('disallow_past_dates',{'modal_xulG':true})) {
88 if ( util.date.check_past('YYYY-MM-DD', ev.target.value) ) { return { 'allowed' : false, 'reason' : $('commonStrings').getString('staff.util.timestamp_dialog.past_date_disallowed') }; }
90 if (xul_param('disallow_today',{'modal_xulG':true})) {
91 if ( util.date.formatted_date(new Date(),'%F') == value) { return { 'allowed' : false, 'reason' : $('commonStrings').getString('staff.util.timestamp_dialog.today_disallowed') }; }
93 return { 'allowed' : true };
96 function gen_handle_apply(params) {
97 return function handle_apply(ev) {
100 if (!params) { params = {}; }
111 var dp = $('datepicker');
112 var tp = $('timepicker');
114 var check = check_date( dp.value );
115 if ( ! check.allowed ) { alert( check.reason ); $('apply_btn').disabled = true; return; }
117 var tp_date = tp.dateValue;
118 var dp_date = dp.dateValue;
119 tp_date.setFullYear( dp_date.getFullYear() );
120 tp_date.setMonth( dp_date.getMonth() );
121 tp_date.setDate( dp_date.getDate() );
125 'timestamp' : util.date.formatted_date(tp_date,'%{iso8601}'),
133 alert('Error in timestamp.js, handle_apply(): ' + E);