/* Gestione di calendario */
var imgDir             = "../images/calendar/";
var fixedX             = -1   // Posizione x (-1 automatico)
var fixedY             = -1   // Posizione y (-1 automatico)
var startAt            = 1    // 0 - Sabato       1 - Luned́
var showWeekNumber     = 1    // 0 - Non visibile 1 - Visibile
var todayString        = ""
var scrollLeftMessage  = ""
var scrollRightMessage = ""
var selectMonthMessage = ""
var selectYearMessage  = ""
var selectDateMessage  = ""
var crossobj
var crossMonthObj
var crossYearObj
var monthSelected
var yearSelected
var dateSelected
var omonthSelected
var oyearSelected
var odateSelected
var monthConstructed
var yearConstructed
var intervalID1
var intervalID2
var timeoutID1
var timeoutID2
var ctlToPlaceValue
var ctlNow
var dateFormat
var nStartingYear
var bPageLoaded = false
var ie          = document.all
var dom         = document.getElementById
var ns4         = document.layers
var today       = new Date()
var dateNow     = today.getDate()
var monthNow    = today.getMonth()
var yearNow     = today.getYear()
var imgsrc      = new Array("drop1.gif","drop2.gif","left1.gif","left2.gif","right1.gif","right2.gif")
var img         = new Array()
var bShow       = false;
var topElement  = ie ? 'HTML' : 'BODY';

/* Hides <select> and <applet> objects (for IE only) */
function hideElement(elmID, overDiv) {
 if (ie) {
  for (i=0; i<document.all.tags(elmID).length; i++) {
   obj = document.all.tags(elmID)[i];
   if (!obj || !obj.offsetParent) {
    continue;
   }

   objLeft   = obj.offsetLeft;
   objTop    = obj.offsetTop;
   objParent = obj.offsetParent;

   while (objParent.tagName.toUpperCase() != topElement) {
    objLeft  += objParent.offsetLeft;
    objTop   += objParent.offsetTop;
    objParent = objParent.offsetParent;
   }

   objHeight = obj.offsetHeight;
   objWidth = obj.offsetWidth;

   if ((overDiv.offsetLeft + overDiv.offsetWidth) <= objLeft);
   else if ((overDiv.offsetTop + overDiv.offsetHeight) <= objTop);
   else if (overDiv.offsetTop >= (objTop + objHeight));
   else if (overDiv.offsetLeft >= (objLeft + objWidth));
   else {
    obj.style.visibility = "hidden";
   }
  }
 }
}

/* Unhides <select> and <applet> objects (for IE only) */
function showElement(elmID) {
 if (ie) {
  for (i = 0; i < document.all.tags(elmID).length; i++) {
   obj = document.all.tags(elmID)[i];
   if (!obj || !obj.offsetParent) {
    continue;
   }
   obj.style.visibility = "";
  }
 }
}

function HolidayRec (d, m, y, desc) {
 this.d = d
 this.m = m
 this.y = y
 this.desc = desc
}

var HolidaysCounter = 0
var Holidays = new Array()

function addHoliday (d, m, y, desc) {
 Holidays[HolidaysCounter++] = new HolidayRec (d, m, y, desc);
}

if (dom) {
 for (i=0; i<imgsrc.length; i++) {
  img[i] = new Image;
  img[i].src = imgDir + imgsrc[i];
 }
 document.write ("<div onclick='bShow=true' id='calendar' style='z-index:+999; position:absolute; visibility:visible; border :1px solid #F8B641;'><table border='0' width=" + ((showWeekNumber==1) ? 250 : 220) + " style='font-family:arial; font-size:9px;' BGColor='#FFFFFF'><tr BGColor='#0000AA'><td><table Border='0' width='" + ((showWeekNumber==1) ? 248 : 218) + "'><tr><td style='padding:2px; font-family:arial; font-size:11px;'><font color='#FFFFFF'><b><span id='caption'></span></b></font></td><td align='right'><a class='calendarAA' href='javascript:hideCalendar();'><img src='" + imgDir + "close.gif' alt=' Chiudi il calendario ' Border='0' Height='13' width='15'/></a></td></tr></table></td></tr><tr><td style='padding:5px' BGColor='#FFFFFF'><span id='content'></span></td></tr>");
 document.write ("<tr BGColor='#F0F0F0'><td style='padding:5px; text-align:center;'><span id='lblToday'></span></td></tr>");
 document.write ("</table></div><div id='selectMonth' style='z-index:+999;position:absolute;visibility:visible;'></div><div id='selectYear' style='z-index:+999;position:absolute;visibility:visible;'></div>");
}

var monthName = new Array(getMessageDefault("gennaio","gennaio"), getMessageDefault("febbraio","febbraio"), getMessageDefault("marzo","marzo"), getMessageDefault("aprile","aprile"), getMessageDefault("maggio","maggio"), getMessageDefault("giugno","giugno"),
                          getMessageDefault("luglio","luglio"), getMessageDefault("agosto","agosto"), getMessageDefault("settembre","settembre"), getMessageDefault("ottobre","ottobre"), getMessageDefault("novembre","novembre"), getMessageDefault("dicembre","dicembre"));
if (startAt==0) {
 shortDayName = new Array (getMessageDefault("domenica_short","Dom."), getMessageDefault("lunedi_short","Lun."), getMessageDefault("martedi_short","Mar."),
                           getMessageDefault("mercoledi_short","Mer."), getMessageDefault("giovedi_short","Gio."), getMessageDefault("venerdi_short","Ven."), getMessageDefault("sabato_short","Sab."));
 longDayName  = new Array (getMessageDefault("domenica","domenica"), getMessageDefault("lunedi","lunedi"), getMessageDefault("martedi","martedi"),
                           getMessageDefault("mercoledi","mercoledi"), getMessageDefault("giovedi","giovedi"), getMessageDefault("venerdi","venerdi"), getMessageDefault("sabato","sabato"));
} else {
 shortDayName = new Array (getMessageDefault("lunedi_short","Lun."), getMessageDefault("martedi_short","Mar."), getMessageDefault("mercoledi_short","Mer."),
                           getMessageDefault("giovedi_short","Gio."), getMessageDefault("venerdi_short","Ven."), getMessageDefault("sabato_short","Sab."), getMessageDefault("domenica_short","Dom."));
 longDayName = new Array  (getMessageDefault("lunedi","lunedi"), getMessageDefault("martedi","martedi"), getMessageDefault("mercoledi","mercoledi"),
                           getMessageDefault("giovedi","giovedi"), getMessageDefault("venerdi","venerdi"), getMessageDefault("sabato","sabato"), getMessageDefault("domenica","domenica"));
}

var styleAnchor      = "text-decoration: none; color: #000000;"
var styleLightBorder = "border: 1px solid #A0A0A0;"

function swapImage(srcImg, destImg) {
 if (ie) { document.getElementById(srcImg).setAttribute("src", imgDir + destImg) }
}

function initCalendar() {
 addHoliday (1, 1, 0, '')
 addHoliday (6, 1, 0, ' Epifania ')
 addHoliday (25, 4, 0, ' Festa della Liberazione ')
 addHoliday (1, 5, 0, ' Festa del Lavoro ')
 addHoliday (2, 6, 0, ' Anniversario della Repubblica ')
 addHoliday (15, 8, 0, ' Ferragosto ')
 addHoliday (1, 11, 0, ' Tutti i Santi ')
 addHoliday (8, 12, 0, ' Immacolata Concezione ')
 addHoliday (25, 12, 0, ' Natale ')
 addHoliday (26, 12, 0, ' S. Stefano ')
 if (!ns4) {
  if (!ie) {
   yearNow += 1900
  }
  crossobj = (dom) ? document.getElementById("calendar").style : (ie ? document.all.calendar : document.calendar)
  hideCalendar();
  crossMonthObj    = (dom)?document.getElementById("selectMonth").style : ie? document.all.selectMonth : document.selectMonth
  crossYearObj     = (dom)?document.getElementById("selectYear").style : ie? document.all.selectYear : document.selectYear
  monthConstructed = false;
  yearConstructed  = false;
  document.getElementById("lblToday").innerHTML = todayString + " <a class='calendarAA' onmouseover='window.status=\"" + getMessageDefault('oggi','Oggi') + "\"; return true;' onmouseout='window.status=\"\"' title='" + getMessageDefault('oggi','Oggi') + "' style='" + styleAnchor + "' href='javascript:monthSelected=monthNow; yearSelected=yearNow; constructCalendar();'>" + longDayName[(today.getDay()-startAt==-1) ? 6 : (today.getDay()-startAt)] + ", " + dateNow + " " + monthName[monthNow] + " " + yearNow + "</a>"
  sHTML1  = "<span id='spanLeft' style='border: 1px solid #3366FF; cursor: pointer' onmouseover='swapImage(\"changeLeft\", \"left2.gif\"); this.style.borderColor=\"#88AAFF\"; window.status=\"" + scrollLeftMessage  + "\"; return true;' onclick='javascript:decMonth()' onmouseout='clearInterval(intervalID1); swapImage(\"changeLeft\", \"left1.gif\"); this.style.borderColor=\"#3366FF\"; window.status=\"\"' onmousedown='clearTimeout(timeoutID1); timeoutID1=setTimeout(\"StartDecMonth()\", 500)' onmouseup='clearTimeout(timeoutID1); clearInterval(intervalID1)'>&nbsp<img id='changeLeft'  Src='" + imgDir + "left1.gif'  alt=' Mese Precedente ' Border='0' Height='11' width='10'/>&nbsp</span>&nbsp;"
  sHTML1 += "<span id='spanRight' style='border: 1px solid #3366FF; cursor: pointer' onmouseover='swapImage(\"changeRight\", \"right2.gif\"); this.style.borderColor=\"#88AAFF\"; window.status=\"" + scrollRightMessage + "\"; return true;' onclick='incMonth()' onmouseout='clearInterval(intervalID1); swapImage(\"changeRight\", \"right1.gif\"); this.style.borderColor=\"#3366FF\"; window.status=\"\"' onmousedown='clearTimeout(timeoutID1); timeoutID1=setTimeout(\"StartIncMonth()\", 500)' onmouseup='clearTimeout(timeoutID1); clearInterval(intervalID1)'>&nbsp<img id='changeRight' Src='" + imgDir + "right1.gif' alt=' Mese Successivo ' Border='0' Height='11' width='10'/>&nbsp</span>&nbsp;"
  sHTML1 += "<span id='spanMonth' style='border: 1px solid #3366FF; cursor: pointer' onmouseover='swapImage(\"changeMonth\", \"drop2.gif\"); this.style.borderColor=\"#88AAFF\"; window.status=\"" + selectMonthMessage + "\"; return true;' onmouseout='swapImage(\"changeMonth\", \"drop1.gif\"); this.style.borderColor=\"#3366FF\"; window.status=\"\"' onclick='popUpMonth()'></span>&nbsp;"
  sHTML1 += "<span id='spanYear' style='border: 1px solid #3366FF; cursor: pointer' onmouseover='swapImage(\"changeYear\", \"drop2.gif\"); this.style.borderColor=\"#88AAFF\"; window.status=\"" + selectYearMessage  + "\"; return true;' onmouseout='swapImage(\"changeYear\", \"drop1.gif\");  this.style.borderColor=\"#3366FF\"; window.status=\"\"' onclick='popUpYear()'></span>&nbsp;"
  document.getElementById("caption").innerHTML  = sHTML1
  bPageLoaded = true
 }
}

function hideCalendar() {
 crossobj.visibility = "hidden"
 if (crossMonthObj != null) {
  crossMonthObj.visibility = "hidden"
 }
 if (crossYearObj != null) {
  crossYearObj.visibility = "hidden"
 }
 showElement('SELECT');
 showElement('APPLET');
}

function padZero(num) {
 return (num < 10)? '0' + num : num;
}

function constructDate(d, m, y) {
 sTmp = dateFormat
 sTmp = sTmp.replace ("dd", "<e>")
 sTmp = sTmp.replace ("d", "<d>")
 sTmp = sTmp.replace ("<e>", padZero(d))
 sTmp = sTmp.replace ("<d>", d)
 sTmp = sTmp.replace ("mmm", "<o>")
 sTmp = sTmp.replace ("mm", "<n>")
 sTmp = sTmp.replace ("m", "<m>")
 sTmp = sTmp.replace ("<m>", m + 1)
 sTmp = sTmp.replace ("<n>", padZero(m + 1))
 sTmp = sTmp.replace ("<o>", monthName[m])
 sTmp = sTmp.replace ("yyyy", y)
 return sTmp
}

function closeCalendar() {
 var sTmp
 hideCalendar();
 if (ctlToPlaceValue.maxLength >11){
     ctlToPlaceValue.value = constructDate(dateSelected, monthSelected, yearSelected)+' '+constructTime();
 }
 else{
     ctlToPlaceValue.value = constructDate(dateSelected, monthSelected, yearSelected);
 }
 if (ctlToPlaceValue.onchange != null)
  ctlToPlaceValue.onchange();
}

function constructTime() {
 var now = new Date();
 var hours = now.getHours();
 var minutes = now.getMinutes();
 var seconds = now.getSeconds()
 var timeValue = ((hours < 10) ? "0" : "") + hours;
 timeValue += ((minutes < 10) ? ":0" : ":") + minutes
 timeValue += ((seconds < 10) ? ":0" : ":") + seconds
 return timeValue;
}


/* --- Combo Mese ------------------------------------ */
function StartDecMonth() {
 intervalID1 = setInterval("decMonth()", 80)
}

function StartIncMonth() {
 intervalID1 = setInterval("incMonth()", 80)
}

function incMonth() {
 monthSelected++
 if (monthSelected > 11) {
  monthSelected = 0
  yearSelected++
 }
 constructCalendar()
}

function decMonth() {
 monthSelected--
 if (monthSelected < 0) {
  monthSelected = 11
  yearSelected--
 }
 constructCalendar()
}

function constructMonth() {
 popDownYear()
 if (!monthConstructed) {
  sHTML = ""
  for (i=0; i<12; i++) {
   sName = monthName[i];
   if (i==monthSelected) {
    sName = "<b>" + sName + "</b>"
   }
   sHTML += "<tr><td id='m" + i + "' onmouseover='this.style.backgroundColor=\"#FFCC99\"' onmouseout='this.style.backgroundColor=\"\"' style='cursor:pointer' onclick='monthConstructed=false; monthSelected=" + i + "; constructCalendar(); popDownMonth(); event.cancelBubble=true'>&nbsp;" + sName + "&nbsp;</td></tr>"
  }
  document.getElementById("selectMonth").innerHTML = "<table width='70' style='font-family:arial; font-size:11px; border :1px solid #A0A0A0;' BGColor='#FFFFDD' CellSpacing='0' onmouseover='clearTimeout(timeoutID1)' onmouseout='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"popDownMonth()\", 100); event.cancelBubble=true'>" + sHTML + "</table>"
  monthConstructed = true
 }
}

function popUpMonth() {
 constructMonth()
 crossMonthObj.visibility = (dom||ie)? "visible" : "show"
 crossMonthObj.left = (parseInt(crossobj.left) + 50) + 'px';
 crossMonthObj.top = parseInt(crossobj.top) + 26 + 'px';
 hideElement('SELECT', document.getElementById("selectMonth"));
 hideElement('APPLET', document.getElementById("selectMonth"));
}

function popDownMonth() {
 crossMonthObj.visibility= "hidden"
}

/* --- Combo Anno ------------------------------------ */
function incYear() {
 for (i=0; i<7; i++) {
  newYear = (i+nStartingYear)+1
  if (newYear==yearSelected)
  { txtYear = "&nbsp;<b>" + newYear + "</b>&nbsp;" }
  else
  { txtYear = "&nbsp;" + newYear + "&nbsp;" }
  document.getElementById("y" + i).innerHTML = txtYear
 }
 nStartingYear ++;
 bShow = true
}

function decYear() {
 for (i=0; i<7; i++) {
  newYear = (i+nStartingYear)-1
  if (newYear==yearSelected)
  {
   txtYear = "&nbsp;<b>" + newYear + "</b>&nbsp;"
  }
  else
  {
   txtYear = "&nbsp;" + newYear + "&nbsp;"
  }
  document.getElementById("y" + i).innerHTML = txtYear
 }
 nStartingYear --;
 bShow = true
}

function selectYear(nYear) {
 yearSelected = parseInt(nYear+nStartingYear);
 yearConstructed = false;
 constructCalendar();
 popDownYear();
}

function constructYear() {
 popDownMonth()
 sHTML = ""
 if (!yearConstructed) {
  sHTML = "<tr><td align='center' onmouseover='this.style.backgroundColor=\"#FFCC99\"' onmouseout='clearInterval(intervalID1);this.style.backgroundColor=\"\"' style='cursor:pointer' onmousedown='clearInterval(intervalID1);intervalID1=setInterval(\"decYear()\", 30)' onmouseup='clearInterval(intervalID1)'>-</td></tr>"
  j = 0
  nStartingYear = yearSelected-3
  for (i=(yearSelected-3); i<=(yearSelected+3); i++) {
   sName = i;
   if (i==yearSelected) {
    sName = "<b>" + sName + "</b>"
   }
   sHTML += "<tr><td id='y" + j + "' onmouseover='this.style.backgroundColor=\"#FFCC99\"' onmouseout='this.style.backgroundColor=\"\"' style='cursor:pointer' onclick='selectYear(" + j + ");event.cancelBubble=true'>&nbsp;" + sName + "&nbsp;</td></tr>"
   j ++;
  }
  sHTML += "<tr><td align='center' onmouseover='this.style.backgroundColor=\"#FFCC99\"' onmouseout='clearInterval(intervalID2);this.style.backgroundColor=\"\"' style='cursor:pointer' onmousedown='clearInterval(intervalID2);intervalID2=setInterval(\"incYear()\", 30)' onmouseup='clearInterval(intervalID2)'> + </td></tr>"
  document.getElementById("selectYear").innerHTML = "<table width='44' style='font-family:arial; font-size:11px; border-width:1; border :1px solid #A0A0A0;' BGColor='#FFFFDD' onmouseover='clearTimeout(timeoutID2)' onmouseout='clearTimeout(timeoutID2);timeoutID2=setTimeout(\"popDownYear()\", 100)' CellSpacing='0'>" + sHTML + "</table>"
  yearConstructed = true
 }
}

function popDownYear() {
 clearInterval(intervalID1)
 clearTimeout(timeoutID1)
 clearInterval(intervalID2)
 clearTimeout(timeoutID2)
 crossYearObj.visibility= "hidden"
}

function popUpYear() {
 var leftOffset
 constructYear()
 crossYearObj.visibility = (dom||ie)? "visible" : "show"
 leftOffset = parseInt(crossobj.left) + document.getElementById("spanYear").offsetLeft
 if (ie) {
  leftOffset += 6
 }
 crossYearObj.left = leftOffset + 'px';
 crossYearObj.top = parseInt(crossobj.top) + 26 + 'px';
}

function WeekNbr(n) {
 year  = n.getFullYear();
 month = n.getMonth() + 1;
 if (startAt == 0) {
  day = n.getDate() + 1;
 } else {
  day = n.getDate();
 }
 a    = Math.floor((14-month) / 12);
 y    = year + 4800 - a;
 m    = month + 12 * a - 3;
 b    = Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400);
 J    = day + Math.floor((153 * m + 2) / 5) + 365 * y + b - 32045;
 d4   = (((J + 31741 - (J % 7)) % 146097) % 36524) % 1461;
 L    = Math.floor(d4 / 1460);
 d1   = ((d4 - L) % 365) + L;
 week = Math.floor(d1/7) + 1;
 return week;
}

function constructCalendar() {
 var startDate = new Date (yearSelected,monthSelected,1)
 var endDate

 endDate = new Date (yearSelected,monthSelected+1,1);
 endDate = new Date (endDate - (24*60*60*1000));
 numDaysInMonth = endDate.getDate()

 datePointer = 0
 dayPointer  = startDate.getDay() - startAt

 if (dayPointer<0) {
  dayPointer = 6
 }

 sHTML = "<table style='font-family: verdana; font-size: 10px; border: none;'><tr>"
 if (showWeekNumber==1) {
  sHTML += "<td align='center' Title='" + getMessageDefault('settimana', 'Settimana') + "' width='30px'>" + getMessageDefault('settimana', 'Set.') + "</td>"
  sHTML += "<td BGColor='#D0D0D0' RowSpan='7' style='padding:0px'><img src='" + imgDir + "divider.gif'/></td>"
 }

 for (i=0; i<7; i++) {
  sHTML += "<td width='30px'>" + shortDayName[i] + "</td>"
 }
 sHTML +="</tr><tr>"

 if (showWeekNumber==1) {
  sHTML += "<td style='text-align: right;'>" + WeekNbr(startDate) + "&nbsp;</td>"
 }

 for (var i=1; i<=dayPointer;i++) {
  sHTML += "<td></td>"
 }

 for (datePointer=1; datePointer<=numDaysInMonth; datePointer++) {
  dayPointer++;
  sHTML += "<td style='text-align: right;'>"
  sStyle = styleAnchor
  if ((datePointer==odateSelected) && (monthSelected==omonthSelected) && (yearSelected==oyearSelected))
  { sStyle += styleLightBorder }

  sHint = ""
  for (k=0; k<HolidaysCounter; k++) {
   if ((parseInt(Holidays[k].d)==datePointer) && (parseInt(Holidays[k].m)==(monthSelected+1))) {
    if ((parseInt(Holidays[k].y)==0) || ((parseInt(Holidays[k].y)==yearSelected) && (parseInt(Holidays[k].y)!=0))) {
     sStyle += "background-color: #FFDDDD;"
     sHint  += sHint=="" ? Holidays[k].desc : "\\n" + Holidays[k].desc
    }
   }
  }

  var regexp = '/\/g'
  sHint = sHint.replace(regexp, "&quot;")

  if ((datePointer == dateNow) && (monthSelected == monthNow) && (yearSelected == yearNow)) {
   sHTML += "<a onmouseover='window.status=\"\"; return true;' class='calendarAA' title='" + sHint + "' style='" + sStyle + "' href='javascript:dateSelected=" + datePointer + "; closeCalendar();'>&nbsp;<font color=#FF0000><b>" + datePointer + "</b></font>&nbsp;</a>";
  } else if (dayPointer % 7 == (startAt * -1) + 1) {
   sHTML += "<a onmouseover='window.status=\"\"; return true;' class='calendarAA' title='" + sHint + "' style='" + sStyle + "' href='javascript:dateSelected=" + datePointer + "; closeCalendar();'>&nbsp;<font color=#909090>" + datePointer + "</font>&nbsp;</a>";
  } else {
   sHTML += "<a onmouseover='window.status=\"\"; return true;' class='calendarAA' title='" + sHint + "' style='" + sStyle + "' href='javascript:dateSelected=" + datePointer + "; closeCalendar();'>&nbsp;" + datePointer + "&nbsp;</a>";
  }

  if ((dayPointer+startAt) % 7 == startAt) {
   sHTML += "</tr><tr>"
   if ((showWeekNumber==1) && (datePointer<numDaysInMonth)) {
    sHTML += "<td  style='text-align: right;'>" + (WeekNbr(new Date(yearSelected,monthSelected,datePointer+1))) + "&nbsp;</td>"
   }
  }
 }
 document.getElementById("content").innerHTML = sHTML
 document.getElementById("spanMonth").innerHTML = "&nbsp;" + monthName[monthSelected] + "&nbsp;<img id='changeMonth' SRC='" + imgDir + "drop1.gif' Border='0' Height='10' width='12'>"
 document.getElementById("spanYear").innerHTML = "&nbsp;" + yearSelected + "&nbsp;<img id='changeYear' SRC='" + imgDir + "drop1.gif' Border='0' Height='10' width='12'>"
}

function popUpCalendar2(positionRefObj, dateInputObjName) {
 popUpCalendar(positionRefObj, document.getElementById(dateInputObjName) ,'dd/mm/yyyy');
}

function popUpCalendar(ctl, ctl2, format) {
 var leftpos = 0;
 var toppos  = 0;
 if (bPageLoaded) {
  if (crossobj.visibility == "hidden") {
   ctlToPlaceValue = ctl2
   dateFormat = format;
   formatChar = " "
   aFormat = dateFormat.split(formatChar)
   if (aFormat.length < 3) {
    formatChar = "/"
    aFormat = dateFormat.split(formatChar)
    if (aFormat.length < 3) {
     formatChar = "."
     aFormat = dateFormat.split(formatChar)
     if (aFormat.length < 3) {
      formatChar = "-"
      aFormat = dateFormat.split(formatChar)
      if (aFormat.length < 3) {
       // Data non valida.
       formatChar = ""
      }
     }
    }
   }

   tokensChanged = 0
   if (formatChar != "") {
    aData = ctl2.value.split(formatChar)
    for (i=0; i<3; i++) {
     if ((aFormat[i]=="d") || (aFormat[i]=="dd")) {
      dateSelected = parseInt(aData[i], 10)
      tokensChanged ++
     } else if ((aFormat[i]=="m") || (aFormat[i]=="mm")) {
      monthSelected = parseInt(aData[i], 10) - 1
      tokensChanged ++
     } else if (aFormat[i]=="yyyy") {
      yearSelected = parseInt(aData[i], 10)
      tokensChanged ++
     } else if (aFormat[i]=="mmm") {
      for (j=0; j<12; j++) {
       if (aData[i] == monthName[j]) {
        monthSelected = j
        tokensChanged ++
       }
      }
     }
    }
   }

   if ((tokensChanged!=3) || isNaN(dateSelected) || isNaN(monthSelected) || isNaN(yearSelected)) {
    dateSelected  = dateNow;
    monthSelected = monthNow;
    yearSelected  = yearNow;
   }

   odateSelected  = dateSelected;
   omonthSelected = monthSelected;
   oyearSelected  = yearSelected;

   // Posizionamento del div
   aTag = ctl;
   do {
    aTag     = aTag.offsetParent;
    leftpos += aTag.offsetLeft;
    toppos  += aTag.offsetTop;
   } while(aTag.tagName != topElement);

   if (aTag.offsetHeight - toppos < 180){
    toppos = toppos - ctl.offsetHeight - 180 - 2;
   }
   crossobj.left = (fixedX==-1 ? ctl.offsetLeft + leftpos : fixedX) + 'px';
   crossobj.top  = (fixedY==-1 ? ctl.offsetTop + toppos + ctl.offsetHeight + 2 : fixedY) + 'px';
   
   constructCalendar (1, monthSelected, yearSelected);
   crossobj.visibility=(dom||ie)? "visible" : "show";
   hideElement('SELECT', document.getElementById("calendar"));
   hideElement('APPLET', document.getElementById("calendar"));
   bShow = true;
  } else {
   hideCalendar();
   if (ctlNow!=ctl) {popUpCalendar(ctl, ctl2, format)}
  }
  ctlNow = ctl
 }
}

document.onkeypress = function hidecal1(e) {
 var key = ie ? event.keyCode : e.which;
 if (key == 27) { // esc (con firefox 'esc' non e' rilevato)
  hideCalendar();
 }
}

document.onclick = function hidecal2() {
 if (!bShow) {
  hideCalendar();
 }
 bShow = false
}

initCalendar();
