//the functions getWeekDay and getWeekDay2 uses a global var named giorni
//it is assumed that giorni is already defined in the choosen language otherwise
//it will be created here in english

//create giorni if it is not defined
var giorni;
if (giorni===void(0)) {
	giorni = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
}

//Data e ora corrente
var Now = new Date();

//Setta campo value di un oggetto qualunque di una form
function setValue(obj,v) {
   var t=obj.type;
   if(t.substring(0,6)!="select") {
      obj.value=v;
      return;
   }
   var i,n,j;
   n=obj.options.length;
   for(i=0;i<n;i++) 
      if(obj.options[i].value==v) {
         obj.selectedIndex=i;
         break;
      }
}

//Ritorna il valore di un oggetto (imput o select)
function getValue(obj) {
   var t=obj.type
   if(t.substring(0,6) != "select") return obj.value;
   return obj.options[obj.selectedIndex].value;
}

//Aggiunge un numero di giorni ad una data
function dateAddDays(d,days) {
   return new Date(getFullYear(d),d.getMonth(),d.getDate()+days);
}

//Ritorna l'anno a quattro cifre per una data - Corregge un bachetto di IE 3.01
function getFullYear (date)
{
    var year = date.getYear ();
    if (year < 1000)  year += 1900;
    return (year);
}

//Ritorna il giorno della settimana
function getWeekDay (day, month, year) {
   var d = new Date (year, parseInt(month)-1,  day);
   return (giorni [d.getDay ()]);
 }

//Ritorna il giorno della settimana da un oggetto data
function getWeekDay2(d) { 
   return giorni[d.getDay()];
}

//Imposta una data su elementi dateSelect
//d,m,y : Oggetti che compongono dateSelect
//dt : Data da impostare
function setDateSelect(d,m,y,dt) {
   setValue(d,dt.getDate());
   setValue(m,dt.getMonth()+1);
   setValue(y,getFullYear(dt));
}

//Ritorna la data di DateSelect
//d,m,y : Oggetti che compongono dateSelect
function getDateSelect(d,m,y) {
   var yy=getValue(y);
   var mm=getValue(m);
   var dd=getValue(d);
   //alert(dd+'-'+mm+'-'+yy);
   var dt=new Date(yy,mm-1,dd);
   return dt;
}

//Normalizza la data di un dateSelect (es. 30/2/2000 ==> 1/3/2000)
function normDateSelect(d,m,y) {
   setDateSelect(d,m,y,getDateSelect(d,m,y))
}

//Setta il valore di un campo al giorno della settimana di una dateSelect
function setWeekDay(td,tm,ty,tw) {
   setValue(tw,getWeekDay(getValue(td),getValue(tm),getValue(ty)))
}

var stopConnect=false;

//Setta un dateselect in base ad un altro, con un offset in giorni
function addOffsetDateSelect(d1,m1,y1,d2,m2,y2,offset,ty) {
   if(stopConnect) return;
   var data_from = getDateSelect(d1,m1,y1)
   var data_to = getDateSelect(d2,m2,y2)
   var diff = parseInt((data_to.getTime()-data_from.getTime())/(1000*86400))
   if(ty == "LTE" && diff <= offset) return;
   if(ty == "GTE" && diff >= offset) return;
   if(ty == "EQ" && diff == offset) return;
   data_to = dateAddDays(data_from,offset);
   setDateSelect(d2,m2,y2,data_to);
   /*
      Evita che l'evento vada in loop infinito nel caso di connessione tra date 
      a cavallo del cambio d'ora legale/solare e viceversa
   */
   stopConnect=true;
   d2.onchange();
   stopConnect=false;
}
