close();
}
+/*
+ Normalize date format using previous input value to guess missing date elements.
+ Helps fast date input field change with only single or double numbers (for day or day-and-month fragments)
+*/
+function fix_date(date, last)
+{
+ var dat = last.split(user.datesep);
+ var cur = date.split(user.datesep);
+ var day, month, year;
+
+// TODO: user.date as default?
+// TODO: user.datesys
+ if (date == "" || date == last) // should we return an empty date or should we return last?
+ return date;
+ if (user.datefmt == 0 || user.datefmt == 3) // set defaults
+ {
+ day = dat[1]; month = dat[0]; year = dat[2];
+ } else if (user.datefmt == 1 || user.datefmt == 4){
+ day = dat[0]; month = dat[1]; year = dat[2];
+ } else {
+ day = dat[2]; month = dat[1]; year = dat[0];
+ }
+ if (cur[1] != undefined && cur[1] != "") // day or month entered, could be string 3
+ {
+ if (user.datefmt == 0 || user.datefmt == 3 || ((user.datefmt == 2 || user.datefmt == 5) && (cur[2] == undefined || cur[2] == "")))
+ day = cur[1];
+ else
+ month = cur[1];
+ }
+ if (cur[0] != undefined && cur[0] != "") // day or month entered. could be string 3
+ {
+ if (cur[1] == undefined || cur[1] == "")
+ day = cur[0];
+ else if (user.datefmt == 0 || user.datefmt == 3 || ((user.datefmt == 2 || user.datefmt == 5) && (cur[2] == undefined || cur[2] == "")))
+ month = cur[0];
+ else if (user.datefmt == 2 || user.datefmt == 5)
+ year = cur[0];
+ else
+ day = cur[0];
+ }
+ if (cur[2] != undefined && cur[2] != "") // year,
+ {
+ if (user.datefmt == 2 || user.datefmt == 5)
+ day = cur[2];
+ else
+ year = cur[2];
+ }
+ if (user.datefmt<3) {
+ if (day<10) day = '0'+parseInt(day, 10);
+ if (month<10) month = '0'+parseInt(month, 10);
+ }
+ if (year<100) year = year<60 ? (2000+parseInt(year,10)) : (1900+parseInt(year,10));
+
+// console.info(day,month,year)
+ if (user.datefmt == 0 || user.datefmt==3)
+ return month+user.datesep+day+user.datesep+year;
+ if (user.datefmt == 1 || user.datefmt==4)
+ return day+user.datesep+month+user.datesep+year;
+ return year+user.datesep+month+user.datesep+day;
+}
+
/*
Behaviour definitions
*/
}
}
},
+ '.date':
+ function(e) {
+ e.setAttribute('_last_val', e.value);
+ e.setAttribute('autocomplete', 'off');
+ e.onblur = function() {
+ var val = this.getAttribute('_last_val');
+ if (val != this.value) {
+ this.value = fix_date(this.value, val);
+ this.setAttribute('_last_val', this.value);
+ if (e.className.match(/\bactive\b/))
+ JsHttpRequest.request('_'+this.name+'_changed', this.form);
+ }
+ }
+ },
'button[aspect*selector], button[aspect*abort], input[aspect*selector]': function(e) {
e.onclick = function() {
passBack(this.getAttribute('rel'));
ev.returnValue = false;
return false;
}
- window.location = e.href;
+ if (_hotkeys.alt) // ommit Chrome accesskeys
+ return false;
+ window.location = e.href;
}
},
'ul.ajaxtabs': function(ul) {
// ? var modifiedurl=ulistlink.getAttribute("href").replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
var url = tab.form.action
tab.onclick=function(){
- _expand(this);
+ if (!_hotkeys.alt && !tab.disabled)
+ _expand(this);
return false;
}
}
for (var i=0; i<cnt; i++) {
n = (n+1)%cnt;
// check also if the link is visible
- if (l[n].accessKey==key && l[n].scrollWidth) {
+ if (l[n].accessKey==key && (l[n].offsetWidth || l[n].offsetHeight)) {
_hotkeys.focus = n;
// The timeout is needed to prevent unpredictable behaviour on IE.
var tmp = function() {l[_hotkeys.focus].focus();};
ev.returnValue = false;
return false;
}
- if (editors && editors[key]) {
+ if (editors!=='undefined' && editors[key]) {
callEditor(key);
return stopEv(ev); // prevent default binding
}