var datePickerDivID = "datepicker";
var iFrameDivID = "datepickeriframe";
/* INGLESE
var dayArrayShort = new Array('Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa');
var dayArrayMed = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
var dayArrayLong = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
var monthArrayShort = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
var monthArrayMed = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec');
var monthArrayLong = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
*/
/** ITALIANO **/
var dayArrayShort = new Array('D', 'L', 'M', 'M', 'G', 'V', 'S');
var dayArrayMed = new Array('Do', 'Lu', 'Ma', 'Me', 'Gi', 'Ve', 'Sa');
/*var dayArrayLong = new Array('Domenica', 'Lunedi', 'Martedi', 'Mercoledi', 'Giovedi', 'Venerdi', 'Sabato');*/
var monthArrayShort = new Array('Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic');
var monthArrayMed = new Array('Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic');
var monthArrayLong = new Array('Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre');

var defaultDateSeparator = "/";        // common values would be "/" or "."
var defaultDateFormat = "dmy"    	// valid values are "mdy", "dmy", and "ymd"
var dateSeparator = defaultDateSeparator;
var dateFormat = defaultDateFormat;


//da mettere nel file se va indicato un altro percorso
var img_src='http://banner.partners.expediaitalia.it/cal/';
/** CALCOLO DEL GIORNO + 1 **/
var day = new Date ();
day.setTime(day.getTime() + 1 * 24 * 3600 * 1000);
//365 * 24 * 3600 * 1000 calcola un anno in millesimi di secondo (1 anno e' composto da 365 giorni. 1 giorno e' composto da 24 ore. 1 ora e' composta da 3600 secondi, 1 secondo e' composto da 1000 millesimi di secondo). In breve ottieni la data del prossimo anno in millesimi di secondo. Cioe' questo cookie scadra' esattamente tra un anno.

function displayDatePicker(dateFieldName, displayBelowThisObject,  dtFormat, dtSep){
	var targetDateField = document.getElementsByName (dateFieldName).item(0);
	if (!displayBelowThisObject) displayBelowThisObject = targetDateField;
	if (dtSep) dateSeparator = dtSep; else dateSeparator = defaultDateSeparator;
	if (dtFormat) dateFormat = dtFormat; else dateFormat = defaultDateFormat;
	var x = displayBelowThisObject.offsetLeft;
	var y = displayBelowThisObject.offsetTop + displayBelowThisObject.offsetHeight ;
	var parent = displayBelowThisObject;
	while (parent.offsetParent) {
		parent = parent.offsetParent;
		x += parent.offsetLeft;
		y += parent.offsetTop;
	}
	drawDatePicker(targetDateField, x, y);
	return 
}

function drawDatePicker(targetDateField, x, y){
	
	var dt = getFieldDate(targetDateField.value );
	
	if (!document.getElementById(datePickerDivID)) {
		var newNode = document.createElement("div");
		newNode.setAttribute("id", datePickerDivID);
		newNode.setAttribute("class", "dpDiv");
		newNode.setAttribute("style", "visibility: hidden;");
		document.body.appendChild(newNode);
	}
	
	var pickerDiv = document.getElementById(datePickerDivID);
	pickerDiv.style.position = "absolute";
	pickerDiv.style.left = x + "px";
	pickerDiv.style.top = y + "px";
	pickerDiv.style.visibility = (pickerDiv.style.visibility == "visible" ? "hidden" : "visible");
	pickerDiv.style.display = (pickerDiv.style.display == "block" ? "none" : "block");
	pickerDiv.style.zIndex = 10000;
	// draw the datepicker table
	refreshDatePicker(targetDateField.name, dt.getFullYear(), dt.getMonth(), dt.getDate());

}

function refreshDatePicker(dateFieldName, year, month, day){

  var thisDay = new Date();
  
  if ((month >= 0) && (year > 0)) {
    thisDay = new Date(year, month, 1);
  }else{
    day = thisDay.getDate();
    thisDay.setDate(1);
  }
  
  var crlf = "\r\n";
  
  var TABLE_root = "<table cols='3' class='dpTable_root' valign='top' cellpadding='0' cellspacing='0'>" + crlf;
  var TABLE = "<table cols='7' class='dpTable' valign='top'>" + crlf;
  var xTABLE = "</table>" + crlf;
  
  var TR = "<tr class='dpTR'>";
  var TR_title = "<tr class='dpTitleTR'>";
  var TR_days = "<tr class='dpDayTR'>";
  var TR_todaybutton = "<tr class='dpTodayButtonTR'>";
  var xTR = "</tr>" + crlf;
  
  var TD = "<td class='dpTD' onMouseOut='this.className=\"dpTD\";' onMouseOver=' this.className=\"dpTDHover\";' ";    // leave this tag open, because we'll be adding an onClick event
  var TD3 = "<td class='dpTD3'>";
  var TD2 = "<td class='dpTD2'>";
  
  var TD_title = "<td class='dpTitleTD'>";
  var TD_cont = "<td colspan='3' valign='top' class='dpContTD'>"
  var TD_buttons = "<td class='dpButtonTD'>";
  var TD_buttons2 = "<td class='dpButtonTD2'>";
  var TD_todaybutton = "<td colspan='3' class='dpTodayButtonTD'>";
  var TD_days = "<td class='dpDayTD'>";
  var TD_selected = "<td class='dpDayHighlightTD' onMouseOut='this.className=\"dpDayHighlightTD\";' onMouseOver='this.className=\"dpTDHover\";' ";    // leave this tag open, because we'll be adding an onClick event
  var xTD = "</td>" + crlf;
  
  var DIV_title = "<div class='dpTitleText'>";
  var DIV_selected = "<div class='dpDayHighlight'>";
  var xDIV = "</div>";
  
  // start generating the code for the calendar table
  var html = TABLE_root;
  
  // this is the title bar, which displays the month and the buttons to
  
  // go back to a previous month or forward to the next month
  html += TR_title;
  var tgif ='<img src="'+img_src+'t.gif" width="18" height="14">';
  var prev = new Date ();
  prev.setTime(prev.getTime() + 1 * 24 * 3600 * 1000);
  //365 * 24 * 3600 * 1000 calcola un anno in millesimi di secondo (1 anno e' composto da 365 giorni. 1 giorno e' composto da 24 ore. 1 ora e' composta da 3600 secondi, 1 secondo e' composto da 1000 millesimi di secondo). In breve ottieni la data del prossimo anno in millesimi di secondo. Cioe' questo cookie scadra' esattamente tra un anno.
  
  if (prev.getMonth()<9){var arrow_prev ='0'+(prev.getMonth()+1);}else{var arrow_prev = (prev.getMonth()+1);}
  var arrow_prev = parseInt(prev.getYear()+""+arrow_prev);
  
  if (thisDay.getMonth()<9){var arrow_next ='0'+(thisDay.getMonth()+1);}else{var arrow_next = (thisDay.getMonth()+1);}
  var arrow_next = parseInt(thisDay.getYear()+""+arrow_next);
  
  if (arrow_prev<arrow_next){
	  var img_prew=img_src+'prev.gif';
	  html += TD_buttons + getButtonCode2(dateFieldName, thisDay, -1, img_prew) + xTD;
  }else{
	  html += TD_buttons2 + tgif + xTD;
  }
  html += TD_title + DIV_title + monthArrayMed[ thisDay.getMonth()] + " " + thisDay.getFullYear() + xDIV + xTD;
  var img_next=img_src+'next.gif';
  html += TD_buttons + getButtonCode2(dateFieldName, thisDay, 1, img_next) + xTD;
  html += xTR;
  
  
  // this is the row that indicates which day of the week we're on
  html += TR_days;
  html += TD_cont;
  html += TABLE;
  html += TR_days;
  for(i = 0; i < dayArrayShort.length; i++)
  html += TD_days + dayArrayShort[i] + xTD;
  html += xTR;
  
  // now we'll start populating the table with days of the month
  html += TR;
  
  // first, the leading blanks
  for (i = 0; i < thisDay.getDay(); i++)
  html += TD3 + "&nbsp;" + xTD;
  
  // now, the days of the month
  do {
    dayNum = thisDay.getDate();
    
    var x = new Date(thisDay.getTime());
    var y = new Date();
    y.setTime(y.getTime());
    //if (x==y)document.write(x+'-'+y+'<br>');
    TD_onclick = " onclick=\"updateDateField('" + dateFieldName + "', '" + getDateString(thisDay) + "');\">";
    
    if (dayNum == day) html += TD_selected + TD_onclick + DIV_selected + dayNum + xDIV + xTD;
    else if (x < y) html += TD2 + dayNum + xTD;
    else html += TD + TD_onclick + dayNum + xTD;
    
    // if this is a Saturday, start a new row
    if (thisDay.getDay() == 6)
      html += xTR + TR;
    
    // increment the day
    thisDay.setDate(thisDay.getDate() + 1);
  } while (thisDay.getDate() > 1)
 
  // fill in any trailing blanks
  if (thisDay.getDay() > 0) {
    for (i = 6; i > thisDay.getDay(); i--)
      html += TD3 + "&nbsp;" + xTD;
  }
  html += xTR;
  html += xTABLE;
  html += xTD;
  html += xTR;
  
  // add a button to allow the user to easily return to today, or close the calendar
  TD_close = " onclick=\"closeDatePicker('" + dateFieldName + "', '" + getDateString(thisDay) + "');\">";
  var today = new Date();
  var todayString = "Today is " + dayArrayMed[today.getDay()] + ", " + monthArrayMed[ today.getMonth()] + " " + today.getDate();
  html += TR_todaybutton + TD_todaybutton + '<button class="dpButton"'+TD_close+'Chiudi</button>';
  html += xTD + xTR;
  html += xTABLE;
  
  document.getElementById(datePickerDivID).innerHTML = html;
  adjustiFrame();
}
function closeDatePicker(dateFieldName, dateString){
	var targetDateField = document.getElementsByName (dateFieldName).item(0);
	
	
	var pickerDiv = document.getElementById(datePickerDivID);
	pickerDiv.style.visibility = "hidden";
	pickerDiv.style.display = "none";
	
	adjustiFrame();
	targetDateField.focus();
 
	if ((dateString) && (typeof(datePickerClosed) == "function"))
	datePickerClosed(targetDateField)
}

function getButtonCode(dateFieldName, dateVal, adjust, label){
  var newMonth = (dateVal.getMonth () + adjust) % 12;
  var newYear = dateVal.getFullYear() + parseInt((dateVal.getMonth() + adjust) / 12);
  if (newMonth < 0) {
    newMonth += 12;
    newYear += -1;
  }
  return "<button class='dpButton' onClick='refreshDatePicker(\"" + dateFieldName + "\", " + newYear + ", " + newMonth + ");'>" + label + "</button>";
}

function getButtonCode2(dateFieldName, dateVal, adjust, label){
  var newMonth = (dateVal.getMonth () + adjust) % 12;
  var newYear = dateVal.getFullYear() + parseInt((dateVal.getMonth() + adjust) / 12);
  if (newMonth < 0) {
    newMonth += 12;
    newYear += -1;
  }
  return "<img onClick='refreshDatePicker(\"" + dateFieldName + "\", " + newYear + ", " + newMonth + ");' src='"+label+"'>";
}

function getDateString(dateVal){
  var dayString = "00" + dateVal.getDate();
  var monthString = "00" + (dateVal.getMonth()+1);
  dayString = dayString.substring(dayString.length - 2);
  monthString = monthString.substring(monthString.length - 2);
 
  switch (dateFormat) {
    case "dmy" :
      return dayString + dateSeparator + monthString + dateSeparator + dateVal.getFullYear();
    case "ymd" :
      return dateVal.getFullYear() + dateSeparator + monthString + dateSeparator + dayString;
    case "mdy" :
    default :
      return monthString + dateSeparator + dayString + dateSeparator + dateVal.getFullYear();
  }
}

function getFieldDate(dateString){
	
  var dateVal;
  var dArray;
  var d, m, y;
 
  try {
    dArray = splitDateString(dateString);
    if (dArray) {
      switch (dateFormat) {
        case "dmy" :
          d = parseInt(dArray[0], 10);
          m = parseInt(dArray[1], 10) - 1;
          y = parseInt(dArray[2], 10);
          break;
        case "ymd" :
          d = parseInt(dArray[2], 10);
          m = parseInt(dArray[1], 10) - 1;
          y = parseInt(dArray[0], 10);
          break;
        case "mdy" :
        default :
          d = parseInt(dArray[1], 10);
          m = parseInt(dArray[0], 10) - 1;
          y = parseInt(dArray[2], 10);
          break;
      }
      
      if (y<80){if (y<10){y = parseInt('200'+y);} else {y = parseInt('20'+y);}}
      
      if(dateString=='gg/mm/aaaa'){dateVal = new Date(day);} else {dateVal = new Date(y, m, d);}
    } else if (dateString) {
      dateVal = new Date(day);
    } else {
      dateVal = new Date(day);
    }
  } catch(e) {
    dateVal = new Date(day);
  }
 
  return dateVal;
}

function splitDateString(dateString){
  var dArray;
  if (dateString.indexOf("/") >= 0)
    dArray = dateString.split("/");
  else if (dateString.indexOf(".") >= 0)
    dArray = dateString.split(".");
  else if (dateString.indexOf("-") >= 0)
    dArray = dateString.split("-");
  else if (dateString.indexOf("\\") >= 0)
    dArray = dateString.split("\\");
  else
    dArray = false;
 
  return dArray;
}

function updateDateField(dateFieldName, dateString){
  var targetDateField = document.getElementsByName (dateFieldName).item(0);
  if (dateString)
    targetDateField.value = dateString;
 
  var pickerDiv = document.getElementById(datePickerDivID);
  pickerDiv.style.visibility = "hidden";
  pickerDiv.style.display = "none";
 
  adjustiFrame();
  targetDateField.focus();
 
  if ((dateString) && (typeof(datePickerClosed) == "function"))
    datePickerClosed(targetDateField);
}

function adjustiFrame(pickerDiv, iFrameDiv){
  var is_opera = (navigator.userAgent.toLowerCase().indexOf("opera") != -1);
  if (is_opera)
    return;
  
  // put a try/catch block around the whole thing, just in case
  try {
    if (!document.getElementById(iFrameDivID)) {
      var newNode = document.createElement("iFrame");
      newNode.setAttribute("id", iFrameDivID);
      newNode.setAttribute("src", "javascript:false;");
      newNode.setAttribute("scrolling", "no");
      newNode.setAttribute ("frameborder", "0");
      document.body.appendChild(newNode);
    }
    
    if (!pickerDiv) pickerDiv = document.getElementById(datePickerDivID);
    if (!iFrameDiv) iFrameDiv = document.getElementById(iFrameDivID);
    
    try {
      iFrameDiv.style.position = "absolute";
      iFrameDiv.style.width = pickerDiv.offsetWidth;
      iFrameDiv.style.height = pickerDiv.offsetHeight ;
      iFrameDiv.style.top = pickerDiv.style.top;
      iFrameDiv.style.left = pickerDiv.style.left;
      iFrameDiv.style.zIndex = pickerDiv.style.zIndex - 1;
      iFrameDiv.style.visibility = pickerDiv.style.visibility ;
      iFrameDiv.style.display = pickerDiv.style.display;
    } catch(e) {
    }
 
  } catch (ee) {
  }
 
}
