﻿//Creazione namespace ldg
var lgd=lgd?lgd:new Object();
lgd.getElementLeft=function(elem){
var obj=elem;
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
  alert(curleft);  
//    return curleft;
}

//*********************************************************************************************
//* Namespace: lgd
//* Oggetto: Calendar
//* Autore: ing. Pierluigi Moschetti
//* Data: 16.12.2009
//* Ver. 0.1
//*********************************************************************************************
lgd.Calendar = function(options) {

  var d, cbMese, cbAnno, tb, divWrapper;


  //Costruisco l'oggetto _options 
  //(sintassi JSON: la "={...};" equivale a =new Object();
  //i singoli "xxxxx":yyyyy equivalgono a dichiarazioni e inizializzazioni di membri pubblici
  var _options = {
    //Layout e posizione
    "position": options.position ? options.position : null
        , "top": options.top ? options.top : 0
        , "left": options.left ? options.left : 0
        , "parent": options.parent ? options.parent : null
        , "cellWidth": options.cellWidth ? options.cellWidth : null
        , "headerCellHeight": options.headerCellHeight ? options.headerCellHeight : null
        , "daysCellHeight": options.daysCellHeight ? options.daysCellHeight : null
        , "margin": options.margin ? options.margin : "auto"
        , "divWrap": typeof (options.divWrap) != 'undefined' ? options.divWrap : false
    //Colori
        , "backgroundColor": options.backgroundColor ? options.backgroundColor : "white"
        , "highlightColor": options.highlightColor ? options.highlightColor : "#CCFF99"
        , "headerBgColor": options.headerBgColor ? options.headerBgColor : "gray"
        , "daysBgColor": options.daysBgColor ? options.daysBgColor : "#CCFFFF"
        , "daysDisabledBgColor": options.daysDisabledBgColor ? options.daysDisabledBgColor : "#CCCCCC"
        , "scrollArrowsHighlightColor": options.scrollArrowsHighlightColor ? options.scrollArrowsHighlightColor : "gray"
        , "scrollArrowsBgColor": options.scrollArrowsBgColor ? options.scrollArrowsBgColor : "white"
        , "initialDateBgColor": options.initialDateBgColor ? options.initialDateBgColor : "#00FF99"
        , "sundayBgColor": options.sundayBgColor ? options.sundayBgColor : "#CC6622"
        , "todayBgColor": options.todayBgColor ? options.todayBgColor : "#CC6666"
        //>>>>>highlightIntervals<<<<<
        //> Array di array a 2 elementi:[Data_Start, Data_End]
        , "highlightIntervals": options.highlightIntervals ? options.highlightIntervals : null
        //>>>>highlightIntervalsColors<<<<<
        //> Array di stringhe: tanti elementi quante sono gli intervalli indicati in
        //> highlightIntervals
        , "highlightIntervalsColors": options.highlightIntervalsColors ? options.highlightIntervalsColors : null
        //>>>>intervalDescriptions<<<<<
        //> Array di array ciascuno contenente 4 elementi:
        //> [0]=Data_Start di validità della legenda (null=vale sempre)
        //> [1]=Data_end di validitià della legenda
        //> [2]=colore della legenda
        //> [3]=testo della legenda
        , "intervalDescriptions": options.intervalDescriptions ? options.intervalDescriptions : null
    //Padding, spacing e bordi
        , "cellPadding": options.cellPadding ? options.cellPadding : "3px"
        , "cellSpacing": options.cellSpaging ? options.cellSpaging : "0px"
        , "headerBorder": options.headerBorder ? options.headerBorder : "1px solid black"
        , "daysBorder": options.daysBorder ? options.daysBorder : "1px solid black"
    //Fonts
    /*fontStyle fontVariant fontWeight fontSize/lineHeight fontFamily*/
        , "selectFont": options.selectFont ? options.selectFont : "normal normal normal 10pt Verdana"
        , "headerFont": options.headerFont ? options.headerFont : "normal normal normal 9pt Verdana"
        , "daysFont": options.daysFont ? options.daysFont : "normal normal normal 9pt Verdana"
        , "staticViewFont": options.staticViewFont ? options.staticViewFont : "normal normal normal 9pt Verdana"
        , "strikeYesterday": typeof (options.strikeYesterday) != 'undefined' ? options.strikeYesterday : false
        , "strikeBeforeInitial": typeof (options.strikeBeforeInitial) != 'undefined' ? options.strikeBeforeInitial : false
    //Features
        , "canScroll": typeof (options.canScroll) != 'undefined' ? options.canScroll : false
        , "canSelectMonthYear": typeof (options.canSelectMonthYear) != 'undefined' ? options.canSelectMonthYear : false
        , "canSelectDay": typeof (options.canSelectDay) != 'undefined' ? options.canSelectDay : false
        , "canSelectYesterday": typeof (options.canSelectYesterday) != 'undefined' ? options.canSelectYesterday : false
        , "canSelectBeforeInitial": typeof (options.canSelectBeforeInitial) != 'undefined' ? options.canSelectBeforeInitial : false
        , "canClose": typeof (options.canClose) != 'undefined' ? options.canClose : false
        , "language": options.language ? options.language : "it"
        , "initialDate": options.initialDate ? options.initialDate : new Date()
        , "nrOfYears": options.nrOfYears ? options.nrOfYears : 4
    //Callbacks
        , "onDaySelect": options.onDaySelect ? options.onDaySelect : null
        , "onClose": options.onClose ? options.onClose : null
  };

  //Costruzione array nomi mesi e giorni
  switch (_options.language) {
    case "en": /* English */
      var monthArray = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
      var monthArrayShort = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
      var dayArray = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
      var weekString = 'Week';
      var todayString = 'Select today';
      break;
    case "de": /* German */
      var monthArray = ['Januar', 'Februar', 'Maerz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'];
      var monthArrayShort = ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'];
      var dayArray = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So'];
      var weekString = 'Woche';
      var todayString = 'Heute w&auml;hlen';
      break;
    case "it": /* Italian*/
      var monthArray = ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'];
      var monthArrayShort = ['Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lugl', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'];
      var dayArray = ['Lu', 'Ma', 'Me', 'Gi', 'Ve', 'Sa', 'Do'];
      var weekString = 'Settimana';
      var todayString = 'Vai a oggi';
      break;
  }

  //Footer
  var tf;

  var trLegenda;
  
  var daysPerMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

  var selectedYear = _options.initialDate.getFullYear();
  var selectedMonth = _options.initialDate.getMonth() + 1; //1-12
  _options.initialDate = new Date(selectedMonth + "/" + _options.initialDate.getDate() + "/" + selectedYear);
  var oggi = new Date();
  oggi = new Date((oggi.getMonth() + 1) + "/" + oggi.getDate() + "/" + oggi.getFullYear());

  var testLeapYear = function() {
    if (selectedYear % 4 == 0) {
      daysPerMonth[1] = 29;
    } else {
      daysPerMonth[1] = 28;
    }

  }

  var dayOfWeek = function(anno, mese, giorno) {

    var auxDate = new Date(mese + "/" + giorno + "/" + anno);
    switch (auxDate.getDay()) {
      case 0:
        return 6;
        break;
      default:
        return auxDate.getDay() - 1;
    }

  }


  var isInitialDate = function(anno, mese, giorno) {
    var auxDate = new Date(mese + "/" + giorno + "/" + anno);
    return auxDate.getTime() == _options.initialDate.getTime();
  }

  var isToday = function(anno, mese, giorno) {
    var auxDate = new Date(mese + "/" + giorno + "/" + anno);
    return auxDate.getTime() == oggi.getTime();
  }

  //Controllo che la data rappresentata da anno,mese,giorno si trovi fra
  //startDate e endDate compresi
  var isInInterval = function(anno, mese, giorno, startDate, endDate) {
    var auxDate = new Date(anno, mese - 1, giorno);
    var auxDateTime = auxDate.getTime();
    if (auxDateTime >= startDate && auxDateTime <= endDate) return true
    else return false
  }

  //Ritorno il colore da attribuire ad ogni cella con la seguente priorità:
  //- giorno in un highlightInterval specificato come parametro (se questo parametro è stato specificato)
  //- il giorno è oggi
  //- il giorno è la data iniziale
  //- il giorno è Domenica
  //- il giorno è un giorno qualunque
  var getDayBgColor = function(anno, mese, giorno) {
    var start, end;
    if (_options.highlightIntervals != null) {
      for (j = 0; j < _options.highlightIntervals.length; j++) {
        if (isInInterval(
                        anno, mese, giorno,
                        _options.highlightIntervals[j][0],
                        _options.highlightIntervals[j][1]))
          return _options.highlightIntervalsColors[j]
      }
    }
    if (isToday(anno, mese, giorno)) return _options.todayBgColor
    else if (isInitialDate(anno, mese, giorno)) return _options.initialDateBgColor
    else if (dayOfWeek(anno, mese, giorno) == 6) return _options.sundayBgColor
    else return _options.daysBgColor;

  }



  //Ritorno la stringa barrata o no per il giorno corrente con la seguente logica:
  //- nessuna barratura richiesta
  //- barratura richiesta per giorno prima di oggi AND giorno prima di initial: valuto quale
  //data è più recente fra oggi e initialDate e barro tutti i giorni prima della data ricavata
  //- barratura richiesta per giorno prima di oggi
  //- barratura richiesta per giorno prima di initialDate
  var getDayString = function(anno, mese, giorno) {

    var auxDate = new Date(anno, mese - 1, giorno);
    if (!_options.strikeYesterday && !_options.strikeBeforeInitial) return giorno
    else if (_options.strikeYesterday && _options.strikeBeforeInitial) {
      //Determino quale data fra oggi e initialDate è la più recente
      var limitDate = (oggi.getTime() > _options.initialDate.getTime()) ? oggi : _options.initialDate;
      return (auxDate.getTime() < limitDate.getTime()) ? giorno.strike() : giorno;
    } else if (_options.strikeYesterday) return (auxDate.getTime() < oggi.getTime()) ? giorno.strike() : giorno;
    else if (_options.strikeBeforeInitial) return (auxDate.getTime() < _options.initialDate.getTime()) ? giorno.strike() : giorno;
    else return giorno;
  }

  var populateDays = function() {
    var dayStrings = new Array();
    testLeapYear();
    for (k = 0; k < daysPerMonth[selectedMonth - 1]; k++) {
      dayStrings[k] = String(k + 1);
    }
    var firstDay = //firstDayOfMonth();
            dayOfWeek(selectedYear, selectedMonth, 1)
    for (k = 0; k < firstDay; k++) {
      dayStrings.unshift("");
    }
    var day = 0;
    var tr, tc;
    for (h = 0; h < tb.rows.length; h++) {
      tr = tb.rows[h];
      //            tr=d.tBodies[0].rows[h];
      for (k = 0; k < tr.cells.length; k++) {
        tc = tr.cells[k];
        if (dayStrings[day]) {
          //                    tc.innerHTML=dayStrings[day];
          tc.innerHTML = getDayString(selectedYear, selectedMonth, dayStrings[day]);
          tc.style.backgroundColor = getDayBgColor(selectedYear, selectedMonth, dayStrings[day]);
          if (_options.canSelectDay) {
            tc.style.cursor = "pointer";
            tc.onmouseover = onMouseOver;
            tc.onmouseout = onMouseOut;
            tc.onmouseup = onDayClick;
          }
        } else {
          tc.innerHTML = "&nbsp;";
          tc.onmouseover = null;
          tc.onmouseout = null;
          tc.onmouseup = null;
          tc.style.backgroundColor = _options.daysDisabledBgColor;
          tc.style.cursor = "auto";
        }
        day++;
      }
    }
  }


  SayHello = function() {
    alert('hello');
  }

  var cbOnChange = function() {
    selectedMonth = cbMese.value;
    selectedYear = cbAnno.value;
    populateDays();
  }

  var onMouseOver = function() {
    this.style.backgroundColor = _options.highlightColor;
  }
  var onMouseOut = function() {
    this.style.backgroundColor = //_options.daysBgColor;
                    getDayBgColor(selectedYear, selectedMonth, getSelectedDay(this.innerHTML));

  }

  var onScrollArrowOver = function() {
    this.style.backgroundColor = _options.scrollArrowsHighlightColor;
  }
  var onScrollArrowOut = function() {
    this.style.backgroundColor = _options.scrollArrowsBgColor;
  }

  var onIncrementMonth = function() {
    if (_options.canSelectMonthYear) {
      if (cbMese.value == 12) {
        if (cbAnno.selectedIndex < 4) {
          cbMese.value = 1;
          cbAnno.value++;
        }
      } else {
        cbMese.value++;
      }
      selectedMonth = cbMese.value;
      selectedYear = cbAnno.value;
    } else {
      selectedMonth++;
      if (selectedMonth > 12) {
        selectedMonth = 1;
        selectedYear++;
      }
      d.tHead.rows[0].cells[_options.canScroll ? 1 : 0].innerHTML =
                                        monthArray[selectedMonth - 1] + " " + selectedYear;

    }
    populateDays();
	  addLegenda();

  }

  var onDecrementMonth = function() {
    if (_options.canSelectMonthYear) {
      if (cbMese.value == 1) {
        if (cbAnno.selectedIndex > 0) {
          cbMese.value = 12;
          cbAnno.value--;
        }
      } else {
        cbMese.value--;
      }
      selectedMonth = cbMese.value;
      selectedYear = cbAnno.value;
    } else {
      selectedMonth--;
      if (selectedMonth < 1) {
        selectedMonth = 12;
        selectedYear--;
      }
      d.tHead.rows[0].cells[_options.canScroll ? 1 : 0].innerHTML =
                                        monthArray[selectedMonth - 1] + " " + selectedYear;
    }
    populateDays();
    addLegenda();

  }

  var onCloseClick = function() {
    if (_options.canClose) {

      if (_options.parent != null) {
        _options.parent.removeChild(_options.divWrap ? divWrapper : d);
      } else {
        document.body.removeChild(_options.divWrap ? divWrapper : d);
      }
      if (_options.onClose != null) {
        _options.onClose();
      }
    }
  }

  var onDayClick = function() {
    var selectedDay = getSelectedDay(this.innerHTML);
    if (validatedSelectedDay(selectedYear, selectedMonth, selectedDay)) {
      if (_options.onDaySelect != null) {
        _options.onDaySelect(new Date(String(selectedMonth) + "/" + selectedDay + "/" + String(selectedYear)));
      }
      onCloseClick();
    }

  }

  var getSelectedDay = function(selInnerHTML) {
    selInnerHTML = selInnerHTML.replace(/\D/g, " ");

    return selInnerHTML;

  }

  var validatedSelectedDay = function(anno, mese, giorno) {
    var auxDate = new Date(anno, mese - 1, giorno);
    if (_options.canSelectYesterday && _options.canSelectBeforeInitial) return true
    else if (auxDate.getTime() < _options.initialDate.getTime()
                                    && !_options.canSelectBeforeInitial) {
      alert('Data selezionata precedente a iniziale');
      return false
    } else if (auxDate.getTime() < oggi.getTime()
                                    && !_options.canSelectYesterday) {
      alert('Data selezionata precedente a oggi');
      return false
    } else return true

  }

  var onTodayClick = function() {
    selectedYear = oggi.getFullYear();
    selectedMonth = oggi.getMonth() + 1;
    if (_options.canSelectMonthYear) {
      cbMese.value = selectedMonth;
      cbAnno.value = selectedYear;
    } else {
      d.tHead.rows[0].cells[_options.canScroll ? 1 : 0].innerHTML =
                                        monthArray[selectedMonth - 1] + " " + selectedYear;
    }
    populateDays();
  }


  
  var getTblLegenda=function(selYear,selMonth){
  var tblLeg,trLeg;

		var descr=_options.intervalDescriptions;
    var h;
    var auxDate=new Date(selYear,selMonth-1,1);
    var startDate,endDate;
		var bAddLegRow=false;
  
		tblLeg=document.createElement('table');
		tblLeg.style.width="100%";
    tblLeg.style.font = "normal normal normal 9pt Verdana";
		tblLeg.appendChild(document.createElement('tbody'));

    if (descr!=null){
        for (h=0;h<descr.length;h++){
						bAddLegRow=false;   
            
            if (descr[h][0]==null){
							bAddLegRow=true;   
            }
            else {
                descr[h][0].setDate(1);
                descr[h][1].setDate(1);
                if (auxDate>=descr[h][0] && auxDate<=descr[h][1]){
									bAddLegRow=true;   
                }
            }
            if (bAddLegRow){
							trLeg=document.createElement('tr');
							tblLeg.tBodies[0].appendChild(trLeg);
							trLeg.appendChild(document.createElement('td'));
							trLeg.appendChild(document.createElement('td'));
              trLeg.cells[0].style.backgroundColor=descr[h][2];
              trLeg.cells[0].style.width="10%";
              trLeg.cells[1].innerHTML=descr[h][3];
            }

        }
    }
  
    return tblLeg;
  }

	var addLegenda=function(){
		if (_options.intervalDescriptions) {
			trLegenda.cells[0].innerHTML="";
			trLegenda.cells[0].appendChild(getTblLegenda(selectedYear,selectedMonth));
		}
  }


  //*****************************************************************
  //*                 COSTRUZIONE INTERFACCIA
  //*****************************************************************

  //>>Costruzione DOM della table Calendar
  d = document.createElement('table');
  d.setAttribute("cellPadding", _options.cellPadding);
  d.setAttribute("cellSpacing", _options.cellSpacing);
  d.style.margin = _options.margin;
  //tHead: conterrà i combobox di selezione
  d.appendChild(document.createElement('thead'));
  d.tHead.style.font = _options.headerFont;
  d.tHead.appendChild(document.createElement('tr'));
  //Frecce di scorrimento mesi
  if (_options.canScroll) {
    d.tHead.rows[0].appendChild(document.createElement('td'));
    d.tHead.rows[0].appendChild(document.createElement('td'));
    d.tHead.rows[0].appendChild(document.createElement('td'));
    d.tHead.rows[0].cells[0].innerHTML = "&lt;";
    d.tHead.rows[0].cells[2].innerHTML = "&gt;";
    d.tHead.rows[0].cells[0].style.textAlign = "center";
    d.tHead.rows[0].cells[2].style.textAlign = "center";
    d.tHead.rows[0].cells[0].style.font = _options.selectFont;
    d.tHead.rows[0].cells[2].style.font = _options.selectFont;
    d.tHead.rows[0].cells[0].style.fontWeight = "bolder";
    d.tHead.rows[0].cells[2].style.fontWeight = "bolder";
    d.tHead.rows[0].cells[0].style.backgroundColor = _options.scrollArrowsBgColor;
    d.tHead.rows[0].cells[2].style.backgroundColor = _options.scrollArrowsBgColor;
    d.tHead.rows[0].cells[0].onmouseover = onScrollArrowOver;
    d.tHead.rows[0].cells[2].onmouseover = onScrollArrowOver;
    d.tHead.rows[0].cells[0].onmouseout = onScrollArrowOut;
    d.tHead.rows[0].cells[2].onmouseout = onScrollArrowOut;
    d.tHead.rows[0].cells[0].style.cursor = "pointer";
    d.tHead.rows[0].cells[2].style.cursor = "pointer";
    d.tHead.rows[0].cells[1].colSpan = 5;
    d.tHead.rows[0].cells[0].onclick = onDecrementMonth;
    d.tHead.rows[0].cells[2].onclick = onIncrementMonth;
  } else {
    d.tHead.rows[0].appendChild(document.createElement('td'));
    d.tHead.rows[0].cells[0].colSpan = 7;
  }

  if (_options.canSelectMonthYear) {
    //Combobox di selezione del mese
    cbMese = document.createElement('select');
    cbMese.style.font = _options.selectFont;
    for (k = 0; k <= 11; k++) {
      var o = document.createElement('option');
      o.appendChild(document.createTextNode(monthArrayShort[k]));
      o.value = k + 1;
      cbMese.appendChild(o);
    }
    cbMese.value = selectedMonth;
    cbMese.onchange = cbOnChange;
    //Aggiungo comboBox all'intestazione tabella: cella 0 se no scroll
    d.tHead.rows[0].cells[_options.canScroll ? 1 : 0].appendChild(cbMese);

    //Combobox di selezione dell'anno
    cbAnno = document.createElement('select');
    cbAnno.style.font = _options.selectFont;
    for (k = 0; k < _options.nrOfYears; k++) {
      var o = document.createElement('option');
      o.appendChild(document.createTextNode(selectedYear + k));
      o.value = selectedYear + k;
      cbAnno.appendChild(o);
    }
    cbAnno.onchange = cbOnChange;
    cbAnno.value = selectedYear;
    //Aggiungo comboBox all'intestazione tabella: cella 0 se no scroll
    d.tHead.rows[0].cells[_options.canScroll ? 1 : 0].appendChild(document.createTextNode(" "));
    d.tHead.rows[0].cells[_options.canScroll ? 1 : 0].appendChild(cbAnno);
    d.tHead.rows[0].cells[_options.canScroll ? 1 : 0].style.textAlign = "center";
    d.tHead.rows[0].cells[_options.canScroll ? 1 : 0].style.whiteSpace = "nowrap";
  } else {
    d.tHead.rows[0].cells[_options.canScroll ? 1 : 0].appendChild(document.createTextNode(
       monthArray[selectedMonth - 1] + " " + selectedYear));
    //       monthArray[_options.initialDate.getMonth()]+" "+_options.initialDate.getFullYear())); 
    d.tHead.rows[0].cells[_options.canScroll ? 1 : 0].style.font = _options.staticViewFont;
    d.tHead.rows[0].cells[_options.canScroll ? 1 : 0].style.whiteSpace = "nowrap";
    d.tHead.rows[0].cells[_options.canScroll ? 1 : 0].style.textAlign = "center";
  }

  //Intestazione dei giorni
  d.tHead.appendChild(document.createElement('tr'));
  d.tHead.rows[1].style.backgroundColor = _options.headerBgColor;
  for (k = 0; k < 7; k++) {
    var dayName = d.tHead.rows[1].appendChild(document.createElement('td'));
    dayName.innerHTML = dayArray[k];
    dayName.style.font = _options.headerFont;
    dayName.style.border = _options.headerBorder;
    dayName.style.textAlign = "right";
    if (_options.cellWidth != null) {
      dayName.style.width = _options.cellWidth;
    }
    if (_options.headerCellHeight != null) {
      dayName.style.height = _options.headerCellHeight;
    }
    if (k != 0) {
      dayName.style.borderLeftStyle = "none";
    }
  }

  //Riga di separazione
  d.tHead.appendChild(document.createElement('tr'));
  d.tHead.rows[2].style.height = "2px";

  //Righe e celle contenenti i giorni del mese
  tb = document.createElement('tbody');
  tb.style.backgroundColor = _options.daysBgColor;
  d.appendChild(tb);
  for (k = 0; k <= 5; k++) {
    var r = document.createElement('tr');
    for (h = 0; h <= 6; h++) {
      var c = document.createElement('td');
      c.innerHTML = String(k);
      c.style.textAlign = "right";
      c.style.font = _options.daysFont;
      c.style.border = _options.daysBorder;
      if (_options.cellWidth != null) {
        c.style.width = _options.cellWidth;
      }
      if (_options.daysCellHeight != null) {
        c.style.height = _options.daysCellHeight;
      }
      if (k != 0) {
        c.style.borderTopStyle = "none";
      }
      if (h != 6) {
        c.style.borderRightStyle = "none";
      }
      r.appendChild(c);
    }
    tb.appendChild(r);
  }

  //Riga contenente comando Oggi e tasto di chiusura
  if (_options.canScroll || _options.canSelectMonthYear || _options.canClose || _options.intervalDescriptions) {
    tf = document.createElement('tfoot');
    d.appendChild(tf);
  }

		if (_options.intervalDescriptions) {
			trLegenda=document.createElement('tr');
			d.tFoot.appendChild(trLegenda);
			trLegenda.appendChild(document.createElement('td'));
			trLegenda.cells[0].colSpan = 7;
		}
  
  var trClose;
  if (_options.canScroll || _options.canSelectMonthYear || _options.canClose) {
    trClose=document.createElement('tr');
    d.tFoot.appendChild(trClose);
    trClose.appendChild(document.createElement('td'));
    trClose.appendChild(document.createElement('td'));
    trClose.cells[0].colSpan = 5;
    trClose.cells[1].colSpan = 2;
    trClose.cells[1].style.textAlign = "right";
  }


  if (_options.canScroll || _options.canSelectMonthYear) {
    var spanOggi = document.createElement('span');
    //    spanOggi.appendChild(document.createTextNode(todayString));
    spanOggi.innerHTML = todayString;
    spanOggi.style.font = "normal normal normal 9pt Verdana";
    trClose.cells[0].appendChild(spanOggi);
    spanOggi.onmouseup = onTodayClick;
    spanOggi.style.cursor = "pointer";
  }

  if (_options.canClose) {
    var spanClose = document.createElement('span');
    spanClose.appendChild(document.createTextNode("chiudi"));
    spanClose.style.font = "normal normal normal 9pt Verdana";
    trClose.cells[1].appendChild(spanClose);
    spanClose.onmouseup = onCloseClick;
    spanClose.style.cursor = "pointer";
  }




  populateDays();
  addLegenda();

  if (_options.position != null) {
    d.style.position = _options.position;
    d.style.top = _options.top;
    d.style.left = _options.left;
  }
  d.style.backgroundColor = _options.backgroundColor;
  if (_options.divWrap) {
    divWrapper = document.createElement('div');
    divWrapper.appendChild(d);
  }
  if (_options.parent != null) {
    //        _options.parent.appendChild(d);
    _options.parent.appendChild(_options.divWrap ? divWrapper : d);
  } else {
    document.body.appendChild(_options.divWrap ? divWrapper : d);
  }
  //    lgd.getElementLeft(d);
  if (_options.onSelect != null) {
    _options.onSelect('marameo');
  }
  if (!_options.divWrap) return d;
  else return divWrapper;
}


