function constructDate(date, format) {
  var day   = date.getDate();
  var month = date.getMonth()+1;
  var year  = date.getYear() < 999 ? date.getYear() + 1900 : date.getYear();

  month = String(month);
  if (month.length == 1) {
    month = '0' + month;
  }
  day = String(day);
  if (day.length == 1) {
    day = '0' + day;
  }

  format = format.replace(/%d/, day);
  format = format.replace(/%m/, month);
  format = format.replace(/%Y/, year);

  return format;
}

function setDate(fromDateId, toDateId, fromDateFormat, toDateFormat, nightsId) {
  var fromDate = document.getElementById(fromDateId).value;
  var fromDay = fromDate.substr(fromDateFormat.indexOf("%d"), 2);
  var fromMonth = fromDate.substr(fromDateFormat.indexOf("%m"), 2);
  var fromYear = fromDate.substr(fromDateFormat.indexOf("%Y"), 4);
  var fromDateObj = new Date(fromYear, fromMonth - 1, fromDay);

  var todayDate = new Date();

  if (fromDateObj.getTime() < todayDate.getTime()) {
    document.getElementById(fromDateId).value = constructDate(fromDateObj, fromDateFormat);
  }
  setNights(fromDateId, toDateId, fromDateFormat, toDateFormat, nightsId)
}  // end function setDate

function setToDate(fromDateId, toDateId, fromDateFormat, toDateFormat, nightsId) {
  var fromDate = document.getElementById(fromDateId).value;
  var fromDay = fromDate.substr(fromDateFormat.indexOf("%d"), 2);
  var fromMonth = fromDate.substr(fromDateFormat.indexOf("%m"), 2);
  var fromYear = fromDate.substr(fromDateFormat.indexOf("%Y"), 4);

  var toDate = document.getElementById(toDateId).value;
  var toDay = toDate.substr(toDateFormat.indexOf("%d"), 2);
  var toMonth = toDate.substr(toDateFormat.indexOf("%m"), 2);
  var toYear = toDate.substr(toDateFormat.indexOf("%Y"), 4);

  var fromDateObj = new Date(fromYear, fromMonth - 1, fromDay);
  var toDateObj = new Date(toYear, toMonth - 1, toDay);

  if (toDateObj.getTime() < fromDateObj.getTime()) {
    // Set to date to from date
    document.getElementById(toDateId).value = constructDate(fromDateObj, toDateFormat);
    // Set nights
    document.getElementById(nightsId).value = '0';
  } else {
    // Set nights - todate minus fromdate (calculate days)
    nights = (toDateObj.getTime() - fromDateObj.getTime()) / (1000 * 60 * 60 * 24);
    document.getElementById(nightsId).value = Math.floor(nights);
  }
  setDate(fromDateId, toDateId, fromDateFormat, toDateFormat, nightsId);
}

function setNights(fromDateId, toDateId, fromDateFormat, toDateFormat, nightsId) {

  var nights = parseInt(document.getElementById(nightsId).value, 10);
  if (isNaN(nights) || nights < 0) {
    nights = 0;
  }
  // Set the date to nights intervall
  var fromDate = document.getElementById(fromDateId).value;
  var fromDay = fromDate.substr(fromDateFormat.indexOf("%d"), 2);
  var fromMonth = fromDate.substr(fromDateFormat.indexOf("%m"), 2);
  var fromYear = fromDate.substr(fromDateFormat.indexOf("%Y"), 4);

  var newToDate = new Date(fromYear, fromMonth - 1, fromDay);
  // date + nights + one our (winter and summer time)
  var newToTime = newToDate.getTime() + (nights*60*60*24*1000) + (60*60*1000);
  newToDate.setTime(newToTime);

  document.getElementById(toDateId).value = constructDate(newToDate, toDateFormat);
}
