function M2Calendar(a){this.tableid=a;this.DAYLYMILLISEC=86400000;this.dowlang=['Do','Lu','Ma','Me','Gi','Ve','Sa'];this.dowstartidx=1;this.monthlang=['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'];this.todaylabel='Oggi';this.calendarstyle='m2c';this.dowstyle='m2c_dow';this.barstyle='m2c_barstyle';this.todaystyle='m2c_today';this.selectedstyle='m2c_selected';this.festdaystyle='m2c_festday';this.outstyle='m2c_outa';this.busystyle='m2c_busy';this.hintstyle='m2c_hint';this.monthstyle='m2c_month';this.closestyle='m2c_close';this.hasclose=false;this.startclosed=false;this.onfocus=null;this.onclick=null;this.inputFormat='d/m/y';this.outputFormat='d/m/y';this.RESEPARATOR=/^\s*(.*?)\s+(.*)/;this.eventDays=[];this.festDays=['1/1/* Capodanno','6/1/* Epifania','16/4/6 Pasqua','17/4/6 Lunedi\' dell\'Angelo','25/4/* Festa della liberazione','1/5/* Festa del lavoro','2/6/* Festa delle Repubblica','15/8/* Festa dell\'Assunta (ferragosto)','1/11/* Tutti i Santi','8/12/* Immacolata','25/12/* Natale','26/12/* S.Stefano'];this.EVENT_ITEM=1;this.FEST_ITEM=2;this.selectedDate=null;this.eventDayList=[];this.dayDateMap=null;this.dayEventMap=null}M2Calendar.prototype.build=function(){this.evalEventDays();var b=document.createElement('table');b.id=this.tableid;b.className=this.calendarstyle;if(this.startclosed)b.style.display='none';b.m2c=this;b.onmouseover=function(a){this.m2c.mouseover(a,this)};b.onclick=function(a){this.m2c.click(a,this)};this.rebuild(new Date(),b);return b};M2Calendar.prototype.selectDate=function(a){if(!a)return a;var b=this.sdate2ymd(a);if(!b||b.indexOf('.')!=-1)return a;var c=b.match(/(\d{4})(\d{2})(\d{2})/);this.selectedDate=new Date(c[1],c[2]-1,c[3]);this.rebuild(this.selectedDate,document.getElementById(this.tableid));return this.getSelectedDateAsString()};M2Calendar.prototype.getSelectedDateAsString=function(){var a='';if(!this.selectedDate)return a;for(var b=0;b<this.outputFormat.length;b++){switch(this.outputFormat.charAt(b)){case'd':a+=this.selectedDate.getDate();break;case'm':a+=''+(1+this.selectedDate.getMonth());break;case'y':a+=this.selectedDate.getFullYear();break;default:a+=this.outputFormat.charAt(b)}}return a};M2Calendar.prototype.mouseover=function(a,b){var a=a||window.event;var c=a.target||a.srcElement;var d=a.pageY||a.clientY+document.body.scrollTop;var e=a.pageX||a.clientX+document.body.scrollLeft;if(this.dayEventMap[c.id]){var f=document.getElementById(this.tableid+'_hint');f.innerHTML=this.dayEventMap[c.id];var g=this.getAbsPosition(c);f.style.top=parseInt(g.absTop+c.offsetHeight*75/100)+'px';f.style.left=parseInt(g.absLeft+c.offsetWidth*75/100)+'px';f.style.display='block'}else if(c.id.indexOf(this.tableid)==0&&c.id.indexOf('_hint')<0){var f=document.getElementById(this.tableid+'_hint');f.style.display='none'}};M2Calendar.prototype.click=function(a,b){var a=a||window.event;var c=a.target||a.srcElement;if(!c||!c.id)return;if(c.id==this.tableid+'_close'){var d=document.getElementById(this.tableid);d.style.display='none'}else if(c.id.match(/_\d+$/)){this.selectedDate=this.dayDateMap[c.id];this.rebuild(this.selectedDate,document.getElementById(this.tableid));if(this.onclick)this.onclick(a)}else if(this.dayDateMap[c.id])this.rebuild(this.dayDateMap[c.id],document.getElementById(this.tableid))};M2Calendar.prototype.evalEventDays=function(){var a,ii,jj=0;for(ii=0;ii<this.eventDays.length;ii++){a=this.eventDays[ii].match(this.RESEPARATOR);this.eventDayList[jj]=new Array(3);this.eventDayList[jj][0]=new RegExp(this.sdate2ymd(a[1]));this.eventDayList[jj][1]=a[2];this.eventDayList[jj][2]=this.EVENT_ITEM;jj++}for(ii=0;ii<this.festDays.length;ii++){a=this.festDays[ii].match(this.RESEPARATOR);this.eventDayList[jj]=new Array(3);this.eventDayList[jj][0]=new RegExp(this.sdate2ymd(a[1]));this.eventDayList[jj][1]=a[2];this.eventDayList[jj][2]=this.FEST_ITEM;jj++}};M2Calendar.prototype.rebuild=function(a,b){while(b.firstChild)b.removeChild(b.firstChild);var c=document.createElement('tbody');this.dayDateMap=new Object();this.dayEventMap=new Object();this.buildHeader(a,c);this.buildMonth(a,c);b.appendChild(c)};M2Calendar.prototype.buildHeader=function(a,b){var c,mytr;var d=new Date(a);d.setDate(15);mytr=document.createElement('tr');b.appendChild(mytr);c=document.createElement('td');mytr.appendChild(c);c.colSpan=this.hasclose?6:7;c.className=this.monthstyle;c.innerHTML=''+this.monthlang[d.getMonth()]+' '+d.getFullYear()+'<div id="'+this.tableid+'_hint" class="'+this.hintstyle+'" style="position: absolute; display: none;"></div>';if(this.hasclose){c=document.createElement('td');mytr.appendChild(c);c.innerHTML='x';c.className=this.closestyle;c.id=this.tableid+'_close'}mytr=document.createElement('tr');b.appendChild(mytr);c=document.createElement('td');mytr.appendChild(c);c.id=this.tableid+'_py';c.innerHTML='&lt;&lt;';c.className=this.barstyle;this.dayDateMap[c.id]=new Date(d.getTime()-this.DAYLYMILLISEC*365);c=document.createElement('td');mytr.appendChild(c);c.id=this.tableid+'_pm';c.innerHTML='&lt;';c.className=this.barstyle;this.dayDateMap[c.id]=new Date(d.getTime()-this.DAYLYMILLISEC*31);c=document.createElement('td');mytr.appendChild(c);c.colSpan=3;c.id=this.tableid+'_today';c.innerHTML=''+this.todaylabel;c.className=this.barstyle;this.dayDateMap[c.id]=new Date();c=document.createElement('td');mytr.appendChild(c);c.id=this.tableid+'_nm';c.innerHTML='&gt;';c.className=this.barstyle;this.dayDateMap[c.id]=new Date(d.getTime()+this.DAYLYMILLISEC*31);c=document.createElement('td');mytr.appendChild(c);c.id=this.tableid+'_ny';c.innerHTML='&gt;&gt;';c.className=this.barstyle;this.dayDateMap[c.id]=new Date(d.getTime()+this.DAYLYMILLISEC*365);mytr=document.createElement('tr');b.appendChild(mytr);for(var e=0;e<7;e++){c=document.createElement('td');mytr.appendChild(c);c.innerHTML=this.dowlang[(e+this.dowstartidx)%7];c.className=this.dowstyle}};M2Calendar.prototype.buildMonth=function(a,b){var c,mytr;var d=new Date(a);d.setDate(1);var e=a.getMonth();var f=this.date2ymd(new Date());var g=this.date2ymd(this.selectedDate);d.setTime(d.getTime()-((d.getDay()+7-this.dowstartidx)%7*this.DAYLYMILLISEC));for(ii=0;true;ii++){if(ii%7==0){if(ii>=42)break;mytr=document.createElement('tr');b.appendChild(mytr)}var h=this.date2ymd(d);var i=null;var j=(d.getDay()==0);var k=false;for(var l=0;l<this.eventDayList.length;l++){if(h.match(this.eventDayList[l][0])){if(!i)i=this.eventDayList[l][1];else i+='<br>'+this.eventDayList[l][1];if(!k&&this.eventDayList[l][2]==this.EVENT_ITEM)k=true;if(!j&&this.eventDayList[l][2]==this.FEST_ITEM)j=true}}c=document.createElement('td');mytr.appendChild(c);c.id=this.tableid+'_'+h;if(i)this.dayEventMap[c.id]=i;c.innerHTML=d.getDate();if(h==g)c.className=this.selectedstyle;else if(k)c.className=this.busystyle;else if(j)c.className=this.festdaystyle;else if(d.getMonth()!=e)c.className=this.outstyle;if(h==f)c.className+=' '+this.todaystyle;this.dayDateMap[c.id]=new Date(d);d.setTime(d.getTime()+this.DAYLYMILLISEC)}};M2Calendar.prototype.date2ymd=function(a){if(!a)return null;var b=''+a.getFullYear();b+=('0'+(1+a.getMonth())).replace(/^0*(..)$/,'$1');b+=('0'+a.getDate()).replace(/^0*(..)$/,'$1');return b};M2Calendar.prototype.sdate2ymd=function(a){var b=a.split(/[^\d\*]/);var c=0;var d=new Date();var e=new Array(3);for(var f=0;f<this.inputFormat.length;f++){ctok=b[c];switch(this.inputFormat.charAt(f)){case'd':if(ctok=='*')e[2]='..';else if(ctok>=1&&ctok<10)e[2]='0'+ctok;else if(ctok>=10&&ctok<=31)e[2]=ctok;else e[2]=('0'+d.getDate()).replace(/^0*(..)$/,'$1');c++;break;case'm':if(ctok=='*')e[1]='..';else if(ctok>=1&&ctok<10)e[1]='0'+ctok;else if(ctok>=10&&ctok<=12)e[1]=ctok;else e[1]=('0'+(1+d.getMonth())).replace(/^0*(..)$/,'$1');c++;break;case'y':if(ctok=='*')e[0]='....';else if(ctok>=1&&ctok<10)e[0]='200'+ctok;else if(ctok>=10&&ctok<27)e[0]='20'+ctok;else if(ctok>=27&&ctok<100)e[0]='19'+ctok;else if(ctok>=1000&&ctok<10000)e[0]=ctok;else e[0]=d.getFullYear();c++;break}}return e.join('')};M2Calendar.prototype.getAbsPosition=function(a){var b=0,top=0;while(a){if(getComputedStyle2(a,'position')!='static'||getComputedStyle2(a,'overflow')!='visible')break;b+=parseInt(a.offsetLeft,10);top+=parseInt(a.offsetTop,10);a=a.offsetParent}return{absLeft:b,absTop:top}};function getComputedStyle2(a,b){if(a.style[b])return a.style[b];if(a.currentStyle)return a.currentStyle[b];if(document.defaultView&&document.defaultView.getComputedStyle){var c=b.replace(/([A-Z])/g,"-$1").toLowerCase();return document.defaultView.getComputedStyle(a,null).getPropertyValue(c)}return null};

