// TSCalendarCtrl Zucchetti S.p.A.
//Vers: 1.4
//Author: Daniele Baldi

// TSCalendarCtrl
ZtVWeb.TSCalendarCtrl=function(form,ctrlid,name,x,y,w,h,font,font_size,Month,navbar){  //name--->id
	// Metodi
	this.FillData=function(datasource){	
		this.datasource=datasource;
		var dFrom=new Date(0);
		var dTo=new Date(0);
		var idxFieldFrom=datasource.getFldIdx(this.field_from);
		var idxFieldTo=datasource.getFldIdx(this.field_to);
		this.aTaskDate[0]= new Array();
		this.aTaskDate[1]= new Array();
		for (var i=0; i<datasource.nRecs; i++) {
			dFrom.setFullYear(datasource.Data[i][idxFieldFrom].substr(0,4),datasource.Data[i][idxFieldFrom].substr(5,2)-1,datasource.Data[i][idxFieldFrom].substr(8,2));
			dFrom.setHours(0,0,0,0);
			dTo.setFullYear(datasource.Data[i][idxFieldTo].substr(0,4),datasource.Data[i][idxFieldTo].substr(5,2)-1,datasource.Data[i][idxFieldTo].substr(8,2));
			dTo.setHours(23,59,59,999);
			this.aTaskDate[0].push(new Date(dFrom));
			this.aTaskDate[1].push(new Date(dTo));
		}
		//Aggiorno la visualizzazione del calendario
		this.fUpdateCal(this.Month,this.Year);

	}
	
	this.setRowsCols=function(from,to){
		this.field_from=from;
		this.field_to=to;
	}
	
	this.UpdateCurRec=function(datasource){
	/*	this.curRec=datasource.curRec;
		this.FillData(datasource);*/
        }
	
	//Controllo se il giorno è impegnato
	this.isBusyDay=function(d){
		var i=0;
		var b=false;
		if (this.aTaskDate.length==2) {
			for (i=0; i<this.aTaskDate[0].length; i++) {
			       	if (this.aTaskDate[0][i] <= d && d <= this.aTaskDate[1][i]) {
					b=true;
					break;
				}
			}
		}
		return b;
	}
	//Ritorno i giorni del mese;
	this.getDaysMonth=function(iYear,iMonth){
		// Parametri opzionali
		if (typeof(iYear)=='undefined') iYear=this.Year;
		if (typeof(iMonth)=='undefined') iMonth=this.Month;
		return new Date(iYear,iMonth,0).getDate();
	}
	//Ritorno il primo giorno della visualizzazione
	this.getFirstDay=function(){
		var iMonth=this.Month;
		var iYear=this.Year;		
		var d= new Date(iYear, iMonth-1, 1);
		return d;
	}
	//Ritorno l'ultimo giorno della visualizzazione
	this.getLastDay=function(){
		var iMonth=this.Month;
		var iYear=this.Year;
		if(this.nMonth>1){
			if (++iMonth>12){
				iYear++;
				iMonth=1;
			}
		}		
		var d=new Date(iYear, iMonth-1, this.getDaysMonth(iYear,iMonth));
		d.setHours(23,59,59,999);
		return d;
	}
	//Inizializzo il componente
	this.Init=function(font,font_size,x,y,w,h){	
            
		this.setCtrlPos(this.Ctrl,x,y,w,h);		
		this.addToForm(this.form,this);
		this.fDrawCal(font,font_size);		
	}
	// Ritorna un array che contiene un mese
	this.fBuildCal=function(iYear, iMonth) {
		var aMonth = new Array();
		aMonth[0] = new Array(7);
		aMonth[1] = new Array(7);
		aMonth[2] = new Array(7);
		aMonth[3] = new Array(7);
		aMonth[4] = new Array(7);
		aMonth[5] = new Array(7);
		aMonth[6] = new Array(7);
		var dCalDate = new Date(iYear, iMonth-1, 1);
		//Variabile che contiene l'indice del giorno della settimana
		var iDayOfFirst = dCalDate.getDay()-1;
		iDayOfFirst = (iDayOfFirst < 0) ?  6 : iDayOfFirst;
		var iDaysInMonth = this.getDaysMonth(iYear,iMonth);
		var iVarDate = 1;	
		// nella prima riga i nomi dei giorni
		aMonth[0][0] = FormatMsg(TSDiaryLib._SDN[1]);
		aMonth[0][1] = FormatMsg(TSDiaryLib._SDN[2]);
		aMonth[0][2] = FormatMsg(TSDiaryLib._SDN[3]);
		aMonth[0][3] = FormatMsg(TSDiaryLib._SDN[4]);
		aMonth[0][4] = FormatMsg(TSDiaryLib._SDN[5]);
		aMonth[0][5] = FormatMsg(TSDiaryLib._SDN[6]);
		aMonth[0][6] = FormatMsg(TSDiaryLib._SDN[0]);
		
		// MB 16/3 x Mozilla: svuoto i giorni
		for (var w = 1; w < 7; w++) {
			for (var d = 0; d < 7; d++) {
				aMonth[w][d] = 0;
			}
		}	
		// riempie anche i giorni nel posto opportuno
		for (var d = iDayOfFirst; d < 7; d++) {
			aMonth[1][d] = iVarDate;
			iVarDate++;
		}
		for (var w = 2; w < 7; w++) {
			for (var d = 0; d < 7; d++) {
				if (iVarDate <= iDaysInMonth) {
				  aMonth[w][d] = iVarDate;
				  iVarDate++;
				}
			}
		}
		return aMonth;
	}
		
	// Disegna un calendario
	this.fDrawCal=function(font,font_size) {
		var sDateTextSize='9px';
		if(font_size!=null) sDateTextSize=font_size;
	
		var myMonth;
		var sIdtbSelMonth=this.ctrlid+"_tbSelMonth";
		var sIdtbSelYear=this.ctrlid+"_tbSelYear";
		iYear=this.Year;
		iMonth=this.Month;
		var str='<table class=tscalendar_table style="width:100%;height:100%;" border="0" cellpadding="0px" cellspacing="0px"><tr>';
		for (var j=0; j<this.nMonth; j++) {
			// Prepara Calendario
			myMonth = this.fBuildCal(iYear, iMonth);
			str+='<td class="tscalendar_month">';
			// Fix IE 8.0 standard mode
			str+='<table style="width:100%;height:100%" border="0" cellpadding="1px" cellspacing="1px">';
			// Header Mese e Anno
			str+='<tr><td colspan="7">'+		
				'<table style="width:100%;height:100%" border="0" cellpadding="0px" cellspacing="0px"><tr class="tscalendar_header_row">';
			if (j==0&&this.navbar) str+='<td class="tscalendar_header_cell" style="width:=20px;text-align:right;cursor:pointer;" onclick="javascript:'+this.form.formid+'.'+this.name+'.selectMonth(-1)"><img src="../visualweb/images/TSCalendar_prev.gif"/></td>';
			str+='<td class="tscalendar_header_cell" width=100%  style="text-align:center;">'+
			'<span onmouseover=\'LibJavascript.CssClassNameUtils.addClass(this,"tscalendar_header_cell_over")\' onmouseout=\'LibJavascript.CssClassNameUtils.removeClass(this,"tscalendar_header_cell_over")\' style="cursor:pointer;" onclick="javascript:'+this.form.formid+'.'+this.name+'.fPopUpMonth(event,'+j+')" id="'+sIdtbSelMonth+'" name="'+sIdtbSelMonth+'">'+this.monthName[iMonth-1]+'</span>&nbsp;'+
			'<span onmouseover=\'LibJavascript.CssClassNameUtils.addClass(this,"tscalendar_header_cell_over")\' onmouseout=\'LibJavascript.CssClassNameUtils.removeClass(this,"tscalendar_header_cell_over")\' style="cursor:pointer;" onclick="javascript:'+this.form.formid+'.'+this.name+'.fPopUpYear(event)" id="'+sIdtbSelYear+'" name="'+sIdtbSelYear+'">'+iYear+'</span></td>';			
			if (j==(this.nMonth-1)&&this.navbar) str+='<td class="tscalendar_header_cell" style="width:20px;text-align:left;cursor:pointer" onclick="javascript:'+this.form.formid+'.'+this.name+'.selectMonth(+1)"><img src="../visualweb/images/TSCalendar_next.gif"/></td>';
			str+='</tr></table></td></tr>';		
			// Calendario
			str+="<tr class='tscalendar_weekday_row'>";
			var std="<td class='tscalendar_weekday_cell' style='text-align:center;'>"			
			str+=std + myMonth[0][0] + "</td>"+
				std + myMonth[0][1] + "</td>"+
				std + myMonth[0][2] + "</td>"+
				std + myMonth[0][3] + "</td>"+
				std + myMonth[0][4] + "</td>"+
				std + myMonth[0][5] + "</td>"+
				std + myMonth[0][6] + "</td></tr>";
			for (var w = 1; w < 7; w++) {
				std="<tr class='tscalendar_day_row'>"
				for (var d = 0; d < 7; d++) {
					std+="<td onmouseover='LibJavascript.CssClassNameUtils.addClass(this,\"tscalendar_day_cell_over\");' onmouseout='LibJavascript.CssClassNameUtils.removeClass(this,\"tscalendar_day_cell_over\");' onclick="+this.form.formid+"."+this.name+".fSetSelectedDay(this,true,"+j+") class='tscalendar_day_cell' id='"+this.ctrlid+"_calCell_"+j+"_"+w+"_"+d+"' style='vertical-align:middle;text-align:center;'>";
					if (myMonth[w][d] != 0) {
						std+="<span id='"+this.ctrlid+"_calDateText_"+j+"_"+w+"_"+d+"' style='cursor:pointer;font-family:"+font+";font-size:" + sDateTextSize + "px;'>" + myMonth[w][d] + "</span>";
					} else {
						std+="<span id='"+this.ctrlid+"_calDateText_"+j+"_"+w+"_"+d+"' style='font-family:"+font+";font-size:" + sDateTextSize + "px;'>&nbsp;</span>";
					}
					std+="</td>";
				}
				str+=std+"</tr>";
			}
			str+="</table>"+
				"</td>";
				
			if(j==0&&this.nMonth>1)
				str+="<td>&nbsp;</td>";
			if (++iMonth>12){
				iYear++;
				iMonth=1;
			}
		}	
		str+="</tr></table>";
		this.Ctrl.innerHTML=str;
	}
	
	//Funzione che visualizza il popup per la selezione del mese
	this.fPopUpMonth=function(evt,index){
		if (!this.containerMonth) {
			//Preparo le zone per agganciarci la selezione del mese
			var container = document.createElement('div');
			container.id = this.ctrlid + '_selectMonth';
			container.style.position = 'absolute';
			container.style.display = 'none';
			//Aggancio il contenitore al body
			document.getElementsByTagName('BODY')[0].appendChild(container);
			this.containerMonth = true;
		}	
		if(typeof(evt)=='undefined')
			evt = window.event;
		this.fConstructMonth(index);
		var ctrl=document.getElementById(this.ctrlid+'_selectMonth');
  		ctrl.style.top=(evt.clientY+10)+"px";
		ctrl.style.left=evt.clientX+"px";
		ctrl.style.display='block';
	}
	//Funzione che costruisce il popup per la selezione del mese
	this.fConstructMonth=function(index){
		this.fPopDownYear();
		if (!this.monthConstructed){
    		var sHTML="";
    		for (var i=0;i<12;i++){
      			var sName=this.monthName[i];
      			if (i==this.Month-1){
        			sName="<B>"+sName+"</B>";
      			}
      			sHTML+="<tr><td style='cursor:pointer;' onclick='javascript:"+this.form.formid+"."+this.name+".fChangeMonth("+(i+1-index)+");event.cancelBubble=true'>&nbsp;"+sName+"&nbsp;</td></tr>";
    		}
			var ctrl=document.getElementById(this.ctrlid+'_selectMonth');
    		ctrl.innerHTML="<table class='tscalendar_popup_month' onmouseover='clearTimeout("+this.form.formid+"."+this.name+".timeoutID1)' onmouseout='clearTimeout("+this.form.formid+"."+this.name+".timeoutID1);"+this.form.formid+"."+this.name+".timeoutID1=setTimeout(\""+this.form.formid+"."+this.name+".fPopDownMonth()\",100)'>"+sHTML+"</table>";
    		this.monthConstructed=true;
  		}
	}
	//Funzione richiamata al cambio del mese
	this.fChangeMonth=function(month){
		this.monthConstructed=false;
		this.selectMonth(month-this.Month);
		this.fPopDownMonth();
	}
	//Funzione che nasconde il popup del mese
	this.fPopDownMonth=function(){
		var ctrl=document.getElementById(this.ctrlid+'_selectMonth');
		if(ctrl)
			ctrl.style.display='none';
	}
	//Funzione che visualizza il popup per la selezione dell'anno
	this.fPopUpYear=function(evt){
		if (!this.containerYear) {
			//Preparo le zone per agganciarci la selezione del mese
			var container = document.createElement('div');
			container.id = this.ctrlid + '_selectYear';
			container.style.position = 'absolute';
			container.style.display = 'none';
			//Aggancio il contenitore al body
			document.getElementsByTagName('BODY')[0].appendChild(container);
			this.containerYear = true;
		}	
		if(typeof(evt)=='undefined')
			evt = window.event;
		this.fConstructYear();
		var ctrl=document.getElementById(this.ctrlid+'_selectYear');
  		ctrl.style.top=(evt.clientY+10)+"px";
		ctrl.style.left=evt.clientX+"px";
		ctrl.style.display='block';
	}
	//Funzione che costruisce il popup per la selezione dell'anno
	this.fConstructYear=function(){
		 this.fPopDownMonth();
  		 var sHTML="";
  		 if (!this.yearConstructed){
    		sHTML="<tr><td style='cursor:pointer;text-align:center;' onmouseout='clearInterval("+this.form.formid+"."+this.name+".intervalID1)' onmousedown='clearInterval("+this.form.formid+"."+this.name+".intervalID1);"+this.form.formid+"."+this.name+".intervalID1=setInterval(\""+this.form.formid+"."+this.name+".fDecYear()\",30)' onmouseup='clearInterval("+this.form.formid+"."+this.name+".intervalID1)'>-</td></tr>"
    		var j=0
    		this.startingYear=this.Year-3;
    		for (var i=(this.Year-3);i<=(this.Year+3);i++){
      			var sName=i;
      			if (i==this.Year){
        			sName="<B>"+sName+"</B>";
      			}
     			sHTML+="<tr><td id='"+this.ctrlid+"_y"+j+"' style='text-align:center;cursor:pointer' onclick='javascript:"+this.form.formid+"."+this.name+".fChangeYear("+j+")'>&nbsp;"+sName+"&nbsp;</td></tr>"
      			j++;
    		}
    		sHTML+="<tr><td style='cursor:pointer;text-align:center' onmouseout='clearInterval("+this.form.formid+"."+this.name+".intervalID2)' onmousedown='clearInterval("+this.form.formid+"."+this.name+".intervalID2);"+this.form.formid+"."+this.name+".intervalID2=setInterval(\""+this.form.formid+"."+this.name+".fIncYear()\",30)' onmouseup='clearInterval("+this.form.formid+"."+this.name+".intervalID2)'>+</td></tr>"
			var ctrl=document.getElementById(this.ctrlid+'_selectYear');
    		ctrl.innerHTML="<table class='tscalendar_popup_year' onmouseover='clearTimeout("+this.form.formid+"."+this.name+".timeoutID2)' onmouseout='clearTimeout("+this.form.formid+"."+this.name+".timeoutID2);"+this.form.formid+"."+this.name+".timeoutID2=setTimeout(\""+this.form.formid+"."+this.name+".fPopDownYear()\",100)' width='44' cellspacing='0'>"+sHTML+"</table>"
    		this.yearConstructed=true
  		}
	}
	//Funzione richiamata al cambio dell'anno
	this.fChangeYear=function(index){
		this.Year=parseInt(index+this.startingYear);
		this.yearConstructed=false;
		//Rinfresco i consumatori
		this.refreshParamConsumers();
		this.fPopDownYear();
	}
	//Funzione che nasconde il popup dell'anno
	this.fPopDownYear=function(){
		var ctrl=document.getElementById(this.ctrlid+'_selectYear');
		if(ctrl)
			ctrl.style.display='none';
	}
	//Funzione che decrementa gli anni del popup
	this.fDecYear=function(){
		var txtYear="";
		for (var i=0;i<7;i++){
    		var newYear=(i+this.startingYear)-1;
    		if (newYear==this.Year){
      			txtYear="&nbsp;<B>"+newYear+"</B>&nbsp;"
    		}
    		else{
      			txtYear="&nbsp;"+newYear+"&nbsp;"
    		}
			var ctrl=document.getElementById(this.ctrlid+"_y"+i);
    		ctrl.innerHTML=txtYear;
  		}
  		this.startingYear--;
	}
	//Funzione che incrementa gli anni del popup
	this.fIncYear=function(){
		var txtYear="";
		for (var i=0;i<7;i++){
    		var newYear=(i+this.startingYear)+1;
    		if (newYear==this.Year){
      			txtYear="&nbsp;<B>"+newYear+"</B>&nbsp;"
    		}
    		else{
      			txtYear="&nbsp;"+newYear+"&nbsp;"
    		}
			var ctrl=document.getElementById(this.ctrlid+"_y"+i);
    		ctrl.innerHTML=txtYear;
  		}
  		this.startingYear++;
	}
	
	// Aggiorna la visualizzazione del calendario
	this.fUpdateCal=function(iMonth,iYear) {		
		// Parametri varianti
		if (typeof(iMonth)=='string') iMonth=parseInt(iMonth);
		if (typeof(iYear)=='string') iYear=parseInt(iYear);
		
		var dCurrent=new Date();
		var objIdtbSelMonth=document.getElementsByName(this.ctrlid+"_tbSelMonth");
		var objIdtbSelYear=document.getElementsByName(this.ctrlid+"_tbSelYear");
		
		for (var j=0; j<this.nMonth; j++) {
			// Aggiorna Mese e Anno	
			objIdtbSelMonth[j].innerHTML=this.monthName[iMonth-1];
			objIdtbSelYear[j].innerHTML=iYear;	
			myMonth = this.fBuildCal(iYear,iMonth);
			var dCalDate = new Date(iYear, iMonth-1, 1);
			var iDayOfFirst = dCalDate.getDay()-1;
			var rowToday=Math.floor((this.DayToday+iDayOfFirst)/7);
			for (var w = 1; w < 7; w++) {
				for (var d = 0; d < 7; d++) {
					var oCalDateText=document.getElementById(this.ctrlid+'_calDateText_'+j+'_'+w+'_'+d);
					var parNode = (oCalDateText.parentNode) ? oCalDateText.parentNode : oCalDateText.parentElement;
					if (myMonth[w][d] != 0) {
						dCurrent.setFullYear(iYear,iMonth-1,myMonth[w][d]);
						dCurrent.setHours(0,0,0,0);
						//Riscrivo il valore del nuovo mese
						oCalDateText.innerHTML= myMonth[w][d];
						//Rimetto il cursore nei posti opportuni
						oCalDateText.style.cursor="pointer";
						if (!this.isBusyDay(dCurrent)) {							
							LibJavascript.CssClassNameUtils.removeClass(parNode,'tscalendar_day_cell_busy');	
						}else{
							LibJavascript.CssClassNameUtils.addClass(parNode,'tscalendar_day_cell_busy');	  
						}
						// Evidenza Today
						if ((rowToday+1)==w && this.MonthToday == iMonth && this.YearToday == iYear) {
							if(myMonth[w][d] == this.DayToday)
								LibJavascript.CssClassNameUtils.addClass(parNode,'tscalendar_day_cell_today');
							else
								LibJavascript.CssClassNameUtils.addClass(parNode,'tscalendar_day_cell_weektoday');
						}
						else{
							LibJavascript.CssClassNameUtils.removeClass(parNode,'tscalendar_day_cell_today');
							LibJavascript.CssClassNameUtils.removeClass(parNode,'tscalendar_day_cell_weektoday');
						}
					} else {
						oCalDateText.innerHTML = "&nbsp;";
						//Elimino il cursore
						oCalDateText.style.cursor="default";
					}
				}
			}
			if (++iMonth>12){
				iYear++;
				iMonth=1;
			}
		}
	}
	
	this.selectMonth=function(n){
		var nTmp=this.Year*12+this.Month+n;
		this.Year=Math.floor((nTmp-1)/12);
		this.Month=nTmp-(this.Year*12);
		if(this.datasource){
			//Rinfresco i consumatori
			this.refreshParamConsumers();
		}
		else{
			this.fUpdateCal(this.Month,this.Year);
		}
	}
	
	// Seleziona un giorno specifico
	this.fSetSelectedDay=function(myElement, bUpdate, nCalendar){
		var dayClick =myElement.childNodes[0].innerHTML;
		if(!isNaN(parseInt(dayClick))){
			if (!IsNull(this.objPrevElement)) LibJavascript.CssClassNameUtils.removeClass(this.objPrevElement,"tscalendar_day_cell_selected");
			this.objPrevElement = myElement;
			LibJavascript.CssClassNameUtils.addClass(myElement,"tscalendar_day_cell_selected");
			if (bUpdate) {
				var nTmp=this.Year*12+this.Month+nCalendar;
				this.Year=Math.floor((nTmp-1)/12);
				this.Month=nTmp-(this.Year*12);
				this.Day=parseInt(dayClick);	
				this.dispatchEvent("Click");					
			}
		}
	}
	//Ritorna una stringa rapresentante la data di oggi
	this.getToday=function(){
		var s='';
		s+=this.DayToday+' '+this.monthName[this.MonthToday-1]+' '+this.YearToday;
		return s;	
	}	
	
	//Valore calendario
	this.Value=function(v){
	// Value(): ritorna Date() calendario;
	// Value(1): imposta e ritorna data corrente;
	// Value(dt): imposta e ritorna dt;
		if (typeof(v)!='undefined'){
			// --- Aggiunto per poter pilotare da fuori il calendario ----
			if(typeof(v)=='object') {
				var bKeepCal=false;
				var j;
				for(j=0; j <this.nMonth; j++)  // Controllo se la data selezionata appartiene ai mesi visualizzati
					// MB 10/3/05
					if((v.getMonth()+1)==(this.FirstCalMonth+j) && v.getFullYear()==this.FirstCalYear) {
						bKeepCal=true;
						break;
					}
				if(bKeepCal) { // Evidenzio il giorno selezionato (appartiene ai mesi visualizzati
					var i=v.getDate();
					v.setDate(1);
					i+=((v.getDay()-1 < 0 ? 6 : v.getDay()-1) -1+ j*42);
					i=i>42?i-42:i;
					var week = parseInt(i/7)+1;
					var day = i%7;
					var ctrlObj=document.getElementById(this.ctrlid+'_calCell_'+j+'_'+week+'_'+day).parentNode;
					this.fSetSelectedDay(ctrlObj,true,j);
				} else  {// Aggiorno il calendario
					var offset=(v.getMonth()+1-this.Month);
					this.Day=v.getDate();
					this.Month=v.getMonth()+1;
					this.Year=v.getFullYear();
					this.FirstCalYear=this.Year;
					this.FirstCalMonth=this.Month;
					//Rinfresco i consumatori
					this.refreshParamConsumers();
				}
			} else {   
				// --- Fine dell'aggiunta ---
				var dCurDate=new Date();
				this.Day=dCurDate.getDate();
				this.Month=dCurDate.getMonth()+1;
				this.Year=dCurDate.getFullYear();
				//Rinfresco i consumatori
				this.refreshParamConsumers();
			}
		}
		v=new Date(this.Year, this.Month-1, this.Day);
		return v;
	}
	
	//Posizionamento sul mese/i successivo/i
	this.NextMonth=function(){
		this.selectMonth(+1);
	}
	
	//Posizionamento sul mese/i precedente/i
	this.PrevMonth=function(){
		this.selectMonth(-1);
	}
	
	this.addParmConsumer=function(ctrl){
		this.paramConsumers.push(ctrl);
	}
	
	this.refreshParamConsumer=function(paramconsumer){
		paramconsumer.paramUpdated();
	}
	
	this.refreshParamConsumers=function(){
		for(var i=0;i<this.paramConsumers.length;i++){
			this.refreshParamConsumer(this.paramConsumers[i]);
		}
	}
	
	this.getParam=function(fld){
		var res="";
		var aParam=fld.split(".");
		var ctrlname=aParam[0];
		if(ctrlname==this.name){
			var param=aParam[1];
			if(param== 'FIRST'){
			    res=DateTimeToChar(this.getFirstDay());
			}
			else if(param == 'LAST'){
				res=DateTimeToChar(this.getLastDay());
			}
			res=CharToDateTime(res);
			return res;
		}
	}

	// Properties
	this.name=name;									// Nome del control
	this.form=form; 								// Reference al form
	this.ctrlid=ctrlid;      						// Id del control
	this.Ctrl=document.getElementById(ctrlid);		// Reference al contol
	
	this.field_from="";
	this.field_to="";
	
	this.objPrevElement=null;						// Riferimento alla cella selezionata precedentemente
	
	this.navbar=navbar;								// Booleano che indica se si vuole o meno la barra di navigazione in alto
	this.nMonth=parseInt(Month)						// Numero mesi che verranno visualizzati sul calendario
	
	// Select Day
	var dCurDate=new Date();
	this.Day=dCurDate.getDate();
	this.Month=dCurDate.getMonth()+1;
	this.Year=dCurDate.getFullYear();
	
	// Today
	this.DayToday=this.Day;
	this.MonthToday=this.Month;						// Valori da [1,12]
	this.YearToday=this.Year;
	
	this.aTaskDate=new Array();
	
	// Internal
	this.FirstCalMonth=this.Month;					// Mese e Anno del primo calendario - Valori da [1,12]
	this.FirstCalYear=this.Year;
	
	//Vettore che contiene i consumatori dei parametri
	this.paramConsumers=new Array();
	
	this.datsource;
	
	//Variabili di gestione per la visualizzazione dei popup che permettono la selezione del mese e dell'anno
	this.monthConstructed=false;
	this.yearConstructed=false;
	this.containerMonth=false;
	this.containerYear=false;
	this.startingYear;
	this.intervalID1;
	this.intervalID2;
	this.timeoutID1;
	this.timeoutID2;
	this.monthName=new Array(FormatMsg(TSDiaryLib._MN[0]),FormatMsg(TSDiaryLib._MN[1]),FormatMsg(TSDiaryLib._MN[2]),FormatMsg(TSDiaryLib._MN[3]),FormatMsg(TSDiaryLib._MN[4]),FormatMsg(TSDiaryLib._MN[5]),FormatMsg(TSDiaryLib._MN[6]),FormatMsg(TSDiaryLib._MN[7]),FormatMsg(TSDiaryLib._MN[8]),FormatMsg(TSDiaryLib._MN[9]),FormatMsg(TSDiaryLib._MN[10]),FormatMsg(TSDiaryLib._MN[11]))
	
	// Init
	this.Init(font,font_size,x,y,w,h);
}

ZtVWeb.TSCalendarCtrl.prototype=new ZtVWeb.StdControl;

