//
// Returns length of month in days
//
function __cal_get_month_length(sDate,bDepart) {
  var aDateParts=sDate.split(".");
  if(aDateParts[1]==2){
    nDays=(aDateParts[2] & 4) ? 29 : 28;
  } else {
    nDays=((aDateParts[1]<=7) ^ ((aDateParts[1] & 1)!=0)) ? 30 : 31;
  }
  aReturn=(bDepart)?(__cal_settings[2].split(".")):(__cal_settings[3].split("."));
  if(aReturn[1]==aDateParts[1] && aReturn[2]==aDateParts[2]){
    nDays=parseInt(aReturn[0],10);
  }
  return nDays;
}

//
// Returns selected value from options array
//
function __cal_get_value(sName) {
  el = eval("document.forms['search']." + sName);
  return el.options[el.selectedIndex].value;
}

//
// Sets the hidden input field values
//
function __cal_update_dates(sName,nYear,nMonth,nDay) {
  var D = new Date(nYear, nMonth-1, nDay);
  ts = D.getTime()/1000;

  if(sName=="depart") {
    __cal_settings[10] = ts;
    document.forms['search'].VON.value = ts;
  } else {
    __cal_settings[11] = ts;
    document.forms['search'].BIS.value = ts;
  }
}

//
// Fills selection boxes with new dates
//
function __cal_set_date(sDate, sName, nMonth) {
  nDays = __cal_get_month_length(sDate,sName!="");
  
  var elDay = (sName) ? document.forms['search'].elements['depart_day'] : document.forms['search'].elements['return_day'];
  var elMonth = (sName) ? document.forms['search'].elements['depart_month'] : document.forms['search'].elements['return_month'];

  nLen=elDay.length;
  nMax=(nLen>nDays) ? nLen : nDays;
  
  for(i=0;i<nMax;i++){
    if(i<nDays){
    if(i>=nLen){
      elDay.options[i]=new Option();
    }
    elDay.options[i].text=" " + (i+1);
    elDay.options[i].value=i+1;
    } else {
    elDay[nDays] = null;
    }
  }

  nSel=parseInt(sDate.split(".")[0],10);
  if(nSel>nDays) nSel = nDays;
  elDay.options.selectedIndex=nSel-1;
  
  __cal_update_dates(((sName!="")?"depart":""),sDate.split(".")[2],sDate.split(".")[1],nSel);
  
  if(nMonth != 1) {
    firstMon=parseInt(elMonth.options[0].value.split(".")[0],10);
    nSel=sDate.split(".")[1]-firstMon;
    if(nSel<0 || elMonth.options[0].value.split(".")[1]<sDate.split(".")[2])
    nSel+=12;
    elMonth.options.selectedIndex=nSel;
  }
}

//
// OnChange() day handler
//
function __cal_set_day(sName) {
  nDay = __cal_get_value(sName + "_day");
  elMonth = eval("document.forms['search']." + sName + "_month");
  sMonth = __cal_get_value(sName + "_month");
  aDateParts = __cal_settings[0].split(".");
  
  if(aDateParts[1]+"."+aDateParts[2]==sMonth && nDay < parseInt(aDateParts[0],10)) {
    elMonth.selectedIndex = 1;
    sMonth = __cal_get_value(sName + "_month");
    __cal_set_date(nDay + "." + sMonth,(sName=="return") ? "" : "dummy");
    nDay = __cal_get_value(sName + "_day");
  }

  __cal_update_dates(sName, sMonth.split(".")[1], sMonth.split(".")[0], nDay);
}

//
// OnChange() month handler
//
function __cal_set_month(sName) {
  nDay = __cal_get_value(sName + "_day");
  sMonth = __cal_get_value(sName + "_month");
  aDateParts = __cal_settings[0].split(".");
  if(aDateParts[1] + "." + aDateParts[2] == sMonth && nDay<parseInt(aDateParts[0],10)){
    nDay=aDateParts[0];
  }
  sDate = nDay + "." + sMonth;
  __cal_set_date(sDate,(sName=="return") ? "" : "dummy");
}

//
// Set items for the day & month selection boxes
//
function __cal_init(sChooser,bDepart) {
  if (sChooser=='day') {
    nDays = __cal_get_month_length((bDepart) ? __cal_settings[4] : __cal_settings[5], bDepart);
    selDay = (bDepart) ? __cal_settings[4].split(".")[0] : __cal_settings[5].split(".")[0];
    
    for(i=1;i<=nDays;i++) {
      selStr = (i==selDay) ? " selected='selected'" : "";
      document.write("<option value='" + i + "'" + selStr + ">&nbsp;" + i + "</option>\n");
    }
  }

  if (sChooser=='month') {
    var months = new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
  
    aDepart = (bDepart) ? (__cal_settings[0].split(".")) : (__cal_settings[1].split("."));
    aReturn = (bDepart) ? (__cal_settings[2].split(".")) : (__cal_settings[3].split("."));
    aSelect = (bDepart) ? (__cal_settings[4].split(".")) : (__cal_settings[5].split("."));
    
    selMonth=aSelect[1];
    
    minMonth=parseInt(aDepart[1],10);
    maxMonth=parseInt(aReturn[1],10);
    minYear=aDepart[2];
    maxYear=aReturn[2];
    
    if((maxMonth<minMonth) || (minYear!=maxYear)) maxMonth-=(-12);
    if(selMonth<minMonth) selMonth-=(-12);
    
    for(i=minMonth;i<=maxMonth;i++) {
      selStr = (i==selMonth) ? " selected='selected'" : "";
      if(i>12) {
        nMonth = i-12;
        if(nMonth<10) nMonth = "0" + nMonth;
        document.write("<option value='" + nMonth + "." + maxYear + "'" + selStr + ">&nbsp;" + months[i-13] + " " + maxYear.substr(2) + "</option>\n");
      } else {
        nMonth = i;
        if(nMonth<10) nMonth = "0" + nMonth;
        document.write("<option value='" + nMonth + "." + minYear + "'" + selStr + ">&nbsp;" + months[i-1] + " " + minYear.substr(2) + "</option>\n");
      }
    }
  }
}
