
  function validate_form(){
		var df = parseInt(document.resForm.df.options[document.resForm.df.selectedIndex].value);
		var dt = parseInt(document.resForm.dt.options[document.resForm.dt.selectedIndex].value);
		var mf = parseInt(document.resForm.mf.options[document.resForm.mf.selectedIndex].value);
		var mt = parseInt(document.resForm.mt.options[document.resForm.mt.selectedIndex].value);
		var yf = document.resForm.yf.options[document.resForm.yf.selectedIndex].value;
		var yt = document.resForm.yt.options[document.resForm.yt.selectedIndex].value;
		if(yf.charAt(0)=="0" && yf.length > 1) yf = parseInt(yf.substring(1));
		if(yt.charAt(0)=="0" && yt.length > 1) yt = parseInt(yt.substring(1));
		
		// arrival date is obligatory!
    if(df == false || df == "") {
		  alert(errorMsg["arrivalDay"]);
			return false;
    } else if(mf == false || mf == "") {
		  alert(errorMsg["arrivalMonth"]);
			return false;
    }
		/* Validate dates for logic ... */
		if(!validateDate(df, mf, yf)) {
		  alert(errorMsg["arrivalDate"] + ' date: ' + formatDate(df, mf, yf));
			return false;
		}
		//alert('arrival date valid: ' + formatDate(df, mf, yf));
		
		if(!validateAfterDate(df, mf, yf, false)) {
		  alert(errorMsg["arrivalPast"]);
			return false;
		}
		//alert('arrival date still valid: ' + formatDate(df, mf, yf));
		
		/* departure date (optionally) */ 
		if(dt > 0 && mt > 0 && yt > 0) {
			if(!validateDate(dt, mt, yt)) {
  		  alert(errorMsg["depDate"]);
	  		return false;
		  }
			//alert('dept date valid: ' + formatDate(dt, mt, yt));
		  var testDateRef = new Date((2000+yf), mf, df);
  		if(!validateAfterDate(dt, mt, yt, testDateRef)) {
	  	  alert(errorMsg["depPast"]);
		  	return false;
		  }
		  //alert('dept date still valid: ' + formatDate(dt, mt, yt));
		
		  var dateTo = formatDate(dt, mt, yt); /*zerofill(dt, 2) + '-' + zerofill(mt, 2) + '-20' + zerofill(yt, 2);*/
			document.resForm.fecha_fin.value = dateTo;
			//alert('Set fecha_fin to ' + dateTo);
		} else {
		  var dateToRef = new Date((2000+yf), mf, (df+1));
		  var dateTo = formatDate(dateToRef.getDate(), dateToRef.getMonth(), dateToRef.getFullYear()); /*zerofill(dt, 2) + '-' + zerofill(mt, 2) + '-20' + zerofill(yt, 2);*/
			document.resForm.fecha_fin.value = dateTo;
			//alert('Nothing set: Set fecha_fin to ' + dateTo);
		}
    
		var dateFrom = formatDate(df, mf, yf); /*zerofill(df, 2) + '-' + zerofill(mf, 2) + '-20' + zerofill(yf, 2);*/
	  document.resForm.fecha_ini.value = dateFrom;
		//alert('Set fecha_ini to ' + dateFrom);
		return true;
	}
	

  function validateDate(day, month, year) {
  	year = 2000 + year;
	  if (month < 1 || month > 12){
		  //alert('invalid month ' + month);
			return false;
  	}
	  if (day < 1 || day > 31 || (month == 2 && day > daysInFebruary(year)) || day > daysInMonth(month)){
		  //alert('invalid day ' + day + ' (month: ' + month + ')');
		  return false;
  	}
		return true;
  }
	
  function daysInFebruary (year){
	  // Feb: 29 days in all years div by four,
    // exeption: cent years not as well div by 400 
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
  }
	
  function daysInMonth(month) {
	  var ret = 31;
		if (month == 4 || month == 6 || month == 9 || month == 11) {
		  ret = 30;
		} else if (month == 2) {
		  ret = 29;
		}
		//alert('days in month ' + month + ': ' + ret);
    return ret;
  }

  
  function validateAfterDate(day, month, year, dateRef) {
	  year = 2000 + year;
	  if(!dateRef) {
		  dateRef = new Date();
			var chkMonth = dateRef.getMonth() + 1;
		} else {
		  var chkMonth = dateRef.getMonth();
		}
		var chkYear = dateRef.getFullYear();
		var chkDay = dateRef.getDate();		
		//alert('function validateAfterDate ### dateRef: ' + dateRef + ' ### day='+day+' month='+month+' year='+year+' ### chkDay='+chkDay+' chkMonth='+chkMonth+' chkYear='+chkYear);
		if(year < chkYear || (year == chkYear && month < chkMonth) || (year == chkYear && month == chkMonth && day <= chkDay)) {
			return false;
		}
		return true;
  }

  function formatDate(day, month, year) {
    var ret = zerofill(day, 2) + '-' + zerofill(month, 2) + '-';
		if(year >= 0 && year < 100) {
		  ret += '20' + zerofill(year, 2);
		} else {
		  ret += year.toString();
		}
		return ret;
  }
