/* Main javascript for HTML::Tag::Date and HTML::Tag::Datetime */
var MonthDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var MonthNames = new Array('Gennaio','Febbraio','Marzo','Aprile','Maggio',
'Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');
var ver4 = (document.layers || document.all) ? 1 : 0;
var justKeyPressed;
var append_func = new Array(append_years,append_months,append_days,append_hours,
append_minutes);
window.onload = onLoad;
function onLoad() {
var elements = document.getElementsByTagName('input');
for (var i=0; i' + k + '
' + visibleElement.id;
mustSwitch =
(visibleType == 'SELECT' || (visibleElement.value == '') || datetime_validate(visibleElement,visibleDateItem)) &&
(
(((k>47 && k<58) ||(k>95 && k<106)) && visibleType == 'SELECT') ||
((k == 9 || k == 0) && visibleType == 'INPUT') ||
(k == 13 || k == 27)
);
if (mustSwitch) {
visibleType == "INPUT" ? showCombo(visibleElement,k) : showInput(visibleElement,k);
}
syncHidden(hiddenElement);
justKeyPressed = false;
}
function showCombo(element,k) {
var visibleDateItem = element.id.substr(0,1);
var value = element.value;
if (visibleDateItem == 'y') {
if (value.toString().length == 2) value = '20' + value.toString();
} else {
if (value.toString().length == 1) value = '0' + value.toString();
}
// create SELECT ELEMENT
var el = getSelect();
el.id = element.id;
element.parentNode.replaceChild(el,element);
append_func[visibleDateItem](el,value);
el.focus();
attachEventForIE(el);
}
function showInput(element,k) {
// get currentValue
var value = element.value;
var dateItem = element.id.substr(0,1);
// create INPUT ELEMENT
var el = getInput();
if (dateItem == '0') {
el.setAttribute("size","4");
el.setAttribute("maxlength","4");
}
el.id = element.id;
element.parentNode.replaceChild(el,element);
el.focus();
el.value = value;
el.select()
attachEventForIE(el);
}
function attachEventForIE(element) {
// IE seems not to like setAttribute("on..") to attach event to dynamic controls
// and set correctly events only after control has been added to page
if (element.attachEvent) {
element.attachEvent('onblur',datetime_keydown);
element.attachEvent('onkeydown',datetime_keydown);
}
}
function syncHidden(hiddenElement) {
var giorno_obj = $("2_" + hiddenElement.id);
var mese_obj = $("1_" + hiddenElement.id);
var anno_obj = $("0_" + hiddenElement.id);
var ohour = $('3_' + hiddenElement.id);
var omin = $('4_' + hiddenElement.id);
setHidden(hiddenElement,false,anno_obj.value,mese_obj.value,giorno_obj.value,
ohour.value,omin.value)
}
function setToday(hiddenElement) {
var today = new Date;
setHidden(hiddenElement,true,today.getFullYear(),today.getMonth()+1,
today.getDate(),today.getHours(),today.getMinutes());
}
function setHidden(hiddenElement,syncV,year,month,day,hour,min) {
var value;
if (month.toString() != '' && (month.toString().length == 1)) month = '0' + month.toString();
if (day.toString() != '' && (day.toString().length == 1)) day = '0' + day.toString();
if (hour.toString() != '' && (hour.toString().length == 1)) hour = '0' + hour.toString();
if (min.toString() != '' && (min.toString().length == 1)) min = '0' + min.toString();
if (year != '') {
value = year + '-' + month + '-' + day;
if (hour.toString() != '') value += ' ';
}
if (hour.toString() != '') {
value += hour +':'+min + ':00';
}
$(hiddenElement).value = value;
if (syncV) syncVisible(hiddenElement);
}
function syncVisible(txtHiddenElementName) {
var hfield = $(txtHiddenElementName)
var dta = hfield.value.split('-');
var time;
if (dta.length == 3) {
// date(time)?
time = dta[2].split(' ');
if (time.length == 2) {
// date and time
dta[2] = time[0];
if (dta[0] == '0000' && dta[1] == '00' && dta[2] == '00') {
time[0] = time[1] = null;
} else {
time = time[1].split(':');
}
}
setDateVisibleElement(txtHiddenElementName,dta[2],dta[1],dta[0],time[0],time[1]);
} else if (dta.length == 1) {
// time
time = hfield.value.split(':');
setDateVisibleElement(txtHiddenElementName,null,null,null,time[0],time[1]);
}
}
function setDateVisibleElement(txtHiddenElementName,giorno,mese,anno,hour,min) {
var giorno_obj = $("2_" + $(txtHiddenElementName).id);
var mese_obj = $("1_" + $(txtHiddenElementName).id);
var anno_obj = $("0_" + $(txtHiddenElementName).id);
var ohour = $('3_' + $(txtHiddenElementName).id);
var omin = $('4_' + $(txtHiddenElementName).id);
if (mese && mese.toString() != '' && (mese.toString().length == 1)) mese = '0' + mese.toString();
if (giorno && giorno.toString() != '' && (giorno.toString().length == 1)) giorno = '0' + giorno.toString();
if (hour && hour.toString() != '' && (hour.toString().length == 1)) hour = '0' + hour.toString();
if (min && min.toString() != '' && (min.toString().length == 1)) min = '0' + min.toString();
if (giorno_obj) giorno_obj.value=giorno;
if (mese_obj) mese_obj.value=mese;
if (anno_obj) anno_obj.value=anno;
if (ohour) ohour.value = hour;
if (omin) omin.value = min;
}
// This function gets called when the end-user clicks on some date.
function selected(cal, date) {
cal.sel.value = date; // just update the date in the input field.
if (cal.dateClicked ) {
var y = cal.date.getFullYear();
var m = cal.date.getMonth(); // integer, 0..11
var d = cal.date.getDate(); // integer, 1..31
var h = cal.date.getHours();
var n = cal.date.getMinutes();
m=m+1;
if (m.toString().length == 1) m = '0' + m;
if (d.toString().length == 1) d = '0' + d;
if (h.toString().length == 1) h = '0' + h;
if (n.toString().length == 1) n = '0' + n;
setDateVisibleElement(_dynarch_popupCalendar.sel.id,d,m,y,h,n);
cal.callCloseHandler();
}
}
// And this gets called when the end-user clicks on the _selected_ date,
// or clicks on the "Close" button. It just hides the calendar without
// destroying it.
function closeHandler(cal) {
cal.hide(); // hide the calendar
_dynarch_popupCalendar = null;
}
// This function shows the calendar under the element having the given id.
// It takes care of catching "mousedown" signals on document and hiding the
// calendar if the click was outside.
function showCalendar(button,id, format, showsTime, showsOtherMonths) {
var el = $(id);
if (_dynarch_popupCalendar != null) {
// we already have some calendar created
_dynarch_popupCalendar.hide(); // so we hide it first.
} else {
// first-time call, create the calendar.
var cal = new Calendar(1, null, selected, closeHandler);
// uncomment the following line to hide the week numbers
// cal.weekNumbers = false;
if (typeof showsTime == "number") {
cal.showsTime = true;
cal.time24 = (showsTime == 24);
}
if (showsOtherMonths) {
cal.showsOtherMonths = true;
}
_dynarch_popupCalendar = cal; // remember it in the global var
cal.setRange(1900, 2070); // min/max year allowed.
cal.create();
}
_dynarch_popupCalendar.setDateFormat(format); // set the specified date format
_dynarch_popupCalendar.parseDate(el.value); // try to parse the text in field
_dynarch_popupCalendar.sel = el; // inform it what input field we use
// the reference element that we pass to showAtElement is the button that
// triggers the calendar. In this example we align the calendar bottom-right
// to the button.
_dynarch_popupCalendar.showAtElement(button, "Br"); // show the calendar
return false;
}
function append_days(element,checked_value) {
var oOption = document.createElement("OPTION");
oOption.value = '';
oOption.text = '';
//oOption.selected = (checked_value == '');
element.options.add(oOption);
for (var num=1;num<32;num++) {
var oOption = document.createElement("OPTION");
element.options.add(oOption); // Don't move...IE problems else :-D
var val = (num.toString().length == 1) ? '0' + num : num;
var checked = (checked_value == val || checked_value == num) ? true : false;
oOption.value = val;
oOption.text = val;
if (checked) oOption.selected = checked;
}
}
function append_months(element,checked_value) {
var oOption = document.createElement("OPTION");
oOption.value = '';
oOption.text = '';
//oOption.selected = (checked_value == '');
element.options.add(oOption);
for (var num=1;num<13;num++) {
var oOption = document.createElement("OPTION");
element.options.add(oOption); // Don't move...IE problems else :-D
var key = (num.toString().length == 1) ? '0' + num : num;
var val = MonthNames[num-1];
var checked = (checked_value == val || checked_value == num) ? true : false;
oOption.value = key;
oOption.text = val;
if (checked) oOption.selected = checked;
}
}
function append_years(element,checked_value) {
var cyear = (new Date()).getFullYear();
var oOption = document.createElement("OPTION");
oOption.value = '';
oOption.text = '';
//oOption.selected = (checked_value == '');
element.options.add(oOption);
for (var num=cyear-100;num)((\n|\r|.)*?)(?:<\/script>)',
extractScripts: function() {
var matchAll = new RegExp(this.ScriptFragment, 'img');
var matchOne = new RegExp(this.ScriptFragment, 'im');
return (this.match(matchAll) || []).map(function(scriptTag) {
return (scriptTag.match(matchOne) || ['', ''])[1];
});
}
} );