var GLB_ID_CALENDARIO = 'calendario';

// giorni della settimana
var GLB_DAY = new Array('dom','lun','mar','mer','gio','ven','sab');
// month names
var GLB_MON = new Array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');
//var GLB_MON = new Array('Gen','Feb','Mar','Apr','Mag','Giu','Lug','Ago','Set','Ott','Nov','Dic');
var GLB_MONL = new Array(31,28,31,30,31,30,31,31,30,31,30,31);


var cal;
//var txtfld;
var txtfldGiorno,txtfldMese,txtfldAnno;

// solo una prova con finestra
/*
function mostraCalendario_TODEL(id_campo_txt) {
  var wcal = window.open('','cal','width=200,height=200');
  wcal.document.write('<html><HEAD></HEAD><BODY><H1>Esempio</H1></BODY></HTML>');
  wcal.document.close();
}
*/

/* Funzione principale di interfaccia
    Parametri:
    - id_calendario: id del contenitore dove finira' il calendario
    - id_campo_txt: id del campo testo, destinazione della data selezionata
    - evento: evento 'click' che ha scatenato la funzione */
function mostraCalendario(id_calendario,id_campo_giorno,id_campo_mese,id_campo_anno,evento,param_x,param_y) {
  cal = document.getElementById(id_calendario); // accedo al contenitore del calendario
  //txtfld = document.getElementById(id_campo_txt); // accedo al campo testo
  txtfldGiorno = document.getElementById(id_campo_giorno); // accedo al campo testo giorno
  txtfldMese = document.getElementById(id_campo_mese);  // accedo al campo testo mese
  txtfldAnno = document.getElementById(id_campo_anno);  // accedo al campo testo anno
  showCalendar(evento,param_x,param_y);
}

/* Mostra il calendario
    Parametri:
    - evento: evento 'click' che ha scatenato la funzione */
function showCalendar(evento,param_x,param_y) {
  var a_px; 
  var spx = new String(evento.clientX); // stringa della posizione in pixel in cui si è scatenato l'evento
  /*
  var data = (txtfld.value==''?
              new Date():
              new Date(String(txtfld.value).substring(6,10), String(txtfld.value).substring(3,5)-1, String(txtfld.value).substring(0,2)));
  */
  var data = ((txtfldGiorno.value=='' || txtfldMese.value=='' || txtfldAnno.value=='')?
              new Date():
              new Date(txtfldAnno.value,txtfldMese.value-1,txtfldGiorno.value) );
  buildCalendar(data.getFullYear(),data.getMonth());
  //for (var e in cal) cal.innerHTML += ('<DIV>'+e+'</DIV>\n');
  cal.style.position = 'absolute'; // posizionamento assoluto del calendario
      
    if (param_x!=""){
    cal.style.left = param_x;
    } else {
    cal.style.left = evento.clientX; // coordinata x
    a_px = spx.split("px",1);
    cal.style.left = a_px[0]-100+"px"; 
    }
    if (param_y!=""){
    cal.style.top = param_y;
    } else {
    cal.style.top = evento.clientY; // coordinata y
    }  
   
  //cal.style.borderStyle = 'solid';    //DEBUG
  cal.style.zIndex = 1;
  cal.style.visibility = 'visible'; // visibilita'
  //cal.onclick=hideCalendar;
}

/* Nasconde il calendario */
function hideCalendar() {
  //parser_data();  // Formatta la data con i campi giorno mese anno
  cal.style.visibility = 'hidden';
}

function buildCalendar(anno,mese) {
  var fieldset, legend, tabella, corpo, riga, cella, comboanni, combomesi ,giorno;
  var data = new Date();
  var i, md, c;
  var data_oggi = new Date();
  var next_m, prev_m, next_a, prev_a; // mese/anno adiacenti
  
  aggiustaMONL(anno); // correggo la durata di febbraio
  data.setFullYear(anno); // setto l'anno
  data.setMonth(mese); // setto il mese
  
  prev_a = next_a = anno;
  prev_m = mese-1; if (prev_m<0) {prev_m=11; --prev_a;}
  next_m = mese+1; if (next_m>=12) {next_m = 0; ++next_a;}

  // legend del fieldset
  legend = '<SPAN style="font-family:Verdana,Arial; font-size:8pt; font-weight:bold; color:#000000; background-color:#c0c0f0; padding: 2px 5px 2px 5px;">';
  legend += '<INPUT type="button" value="&lt;" title="' + GLB_MON[prev_m] + ' ' + prev_a + '" style="width:20px; height:18px; font-family:Verdana,Arial; font-size:8pt;" onclick="buildCalendar(' + prev_a + ',' + prev_m + ');" />';
  
  combomesi = '<SELECT id="cmbmesi" style="font-family:Verdana,Arial; font-size:8pt;" onchange="buildCalendar(' + anno + ', this.options[this.selectedIndex].value);">'; //String(GLB_MON[mese]).substring(0,3);
  for (i=0; i<GLB_MON.length; ++i) combomesi += '<option value="' + i + '"' + (i==mese?' selected':'') + '>' + String(GLB_MON[i]).substring(0,3) + '</OPTION>';
  combomesi += '</SELECT>';

  comboanni = '<SELECT id="cmbanni" style="font-family:Verdana,Arial; font-size:8pt;" onchange="buildCalendar(this.options[this.selectedIndex].value,' + mese + ');">'; //anno;
  for (i=data_oggi.getFullYear(); 1900<=i; --i) comboanni += '<option value="' + i + '"' + (i==anno?' selected':'') + '>' + i + '</OPTION>';
  //for (i=1900; i<=data_oggi.getFullYear(); ++i) comboanni += '<option value="' + i + '"' + (i==anno?' selected':'') + '>' + i + '</OPTION>';
  comboanni += '</SELECT>';

  legend += combomesi + ' ' + comboanni;
  legend += '<INPUT type="button" value="&gt;" title="' + GLB_MON[next_m] + ' ' + next_a + '" style="width:20px; height:18px; font-family:Verdana,Arial; font-size:8pt;" onclick="buildCalendar(' + next_a + ',' + next_m + ');" />';
  legend += '</SPAN> ';
  //legend += '<A href="#" onclick="hideCalendar();return false;" title="chiudi" style="text-decoration: none; font-family:Arial; font-size:10pt; font-weight:bolder; color:#ffffff; background-color:#a0a0c0; padding: 0px 3px 0px 3px; border:solid;">x</A>';
  legend += '<INPUT type="button" value="x" onclick="hideCalendar();return false;" title="chiudi" style="width:30px; height:18px; font-family:Verdana,Arial; font-size:8pt; font-weight:bolder; color:#c0c0f0;">';

  // Costruzione tabella-calendario
  tabella = '<TABLE cellpadding=0 style="color:#000000; background-color:#ffffff; text-align:right; font-family:Verdana,Arial; font-size:10pt;">';
  // Riga di intestazione: i giorni
  riga = '<TR style="color:#000000; background-color:#f0f0f0; font-weight:normal;">';
  for (i=1; i<GLB_DAY.length; ++i) riga += '<td>' + GLB_DAY[i] + '</td>'; // da lun a sab
  riga += '<TD style="color:#ff0000;">' + GLB_DAY[0] + '</TD>'; // dom
  riga += '</TR>';
  tabella += riga;

  // righe dei giorni
  // NOTA. OCCORRE VISUALIZZARLE IN MODO CORRETTO!!!
  riga = '<TR>';
  odierno = data.getDate(); 
  data.setDate(1);
  md = data.getDay();
  for (i=0; i<(md+6)%7; ++i) riga += '<td></td>';
  for (i=1; i<=GLB_MONL[mese]; ++i) {
    data.setDate(i);
    md=data.getDay();
    if (md==0) c = '#ff0000';
    else c = '#000000';
    //alert (giorno +' - '+ i);
    if( odierno==i) c = '#ababab';
    cella = '<span style="width:100%" onmouseover="a_over(this,\'' + c + '\');" onmouseout="a_out(this,\'' + c + '\');" onclick="gg_selezionato('+i+','+mese+','+anno+');">' + i + '</SPAN>';
    riga += '<TD style="color:' + c + ';">' + cella + '</TD>';
    if (md==0) {
      riga += '</TR>';
      tabella += riga;
      riga = '<TR>';
    }
  }
  for (; md%7>0; ++md) riga += '<TD></TD>';
  riga += '</TR>';
  tabella += riga;

  // Fine tabella-calendario
  tabella += '</TABLE>';
  
  // Corpo del fieldset
  corpo = tabella;
  
  // Fieldset
  fieldset = '<FIELDSET><LEGEND align="right">' + legend + '</LEGEND>' + corpo + '</FIELDSET>';
  
  cal.innerHTML = fieldset;
}

// Corregge la durata di febbraio
function aggiustaMONL(anno) {
  var bisestile;
  if (anno%4==0) bisestile = true;
  if (anno%100==0) bisestile = false;
  if (anno%1000==0) bisestile = true;
  if (bisestile) GLB_MONL[1] = 29;
  else GLB_MONL[1] = 28; // Imposto nuovamente i giorni di febbraio a 28
}

function a_over(obj,colore) {
  obj.style.backgroundColor = colore;
  obj.style.color = '#ffffff';
  // pamela 6 Aprile - modifica del cursore ---------------------------------------------------
  obj.style.cursor = 'hand';
}
function a_out(obj,colore) {
  obj.style.backgroundColor = '#ffffff';
  obj.style.color = colore;
}

function twoDigit(n) {
  if (n<10) return '0'+n;
  else return n;
}

function gg_selezionato(g,m,a) {
  // ------------------------------------------------------------------------------------------
  // Modificato il 22 febbraio 2005 
  //var d = new Date();
  //d.setFullYear(a,m+1,g);
  //txtfld.value = twoDigit(d.getDate()) + '-' + twoDigit(d.getMonth()) + '-' + d.getFullYear();
  // ------------------------------------------------------------------------------------------
  //txtfld.value = twoDigit(g) + '-' + twoDigit(m+1) + '-' + a;
  
  txtfldGiorno.value = twoDigit(g);
  txtfldMese.value = twoDigit(m+1);
  txtfldAnno.value = a;
  hideCalendar();
}

