Date.prototype.addMonth=function(month){
  if(typeof(month)=='undefined') month=1;
  month = parseInt(month);
  var years=Math.floor(month/12);
  this.addYear(years);
  month = month%12;
  if((this.getMonth()+month)>11){
    this.addYear();
    this.setMonth((this.getMonth()+month)%12);
  }else{
    this.setMonth(this.getMonth()+month);
  }
}

Date.prototype.addYear=function(years){
  if(typeof(years)=='undefined') years=1;
  years = parseInt(years);
  var aktYear = this.getFullYear();
  this.setYear(aktYear+years);
}

function twoDigit(val){
  val = parseInt(val,10);
  return val<10?"0"+val:val;
}

function GetTage(strDate,hin)
{
  //funktion zum ermitteln, wieviele Tage hat der Monat
  var myDate = new Date(strDate.split(".")[2],parseInt(strDate.split(".")[1],10),1);
  myDate.setDate(0);
  //alert(hin+" - "+myDate);
  var nTage = myDate.getDate();
  //bei rückreise,endet z.B. mit 5, wenn die Angebote bis 05. gehen
  lts=(hin)?(letzter_termin_hin.split(".")):(letzter_termin_rueck.split("."));
  if(twoDigit(lts[1])==twoDigit(myDate.getMonth()+1) && lts[2]==myDate.getFullYear()){
    nTage=parseInt(lts[0],10);
  }
  return nTage;
}

function ChangeRueck()
{
  var lts=letzter_termin_rueck.split(".");
  var lDate = new Date(lts[2],parseInt(lts[1]-1,10),parseInt(lts[0]),10);
  var d=getValue('ktag');
  var lMon=getValue('kmonat').split(".");
  d = new Date(lMon[1],lMon[0]-1,d);
  var nTime = d.getTime()+(22*86400000);
  if(nTime>lDate.getTime())
    d.setTime(lDate.getTime());
  else
    d.setTime(nTime);
  nMon=twoDigit(parseInt(d.getMonth(),10)+1);
  nDay=twoDigit(parseInt(d.getDate(),10));
  SetDatum(nDay+"."+nMon+"."+d.getFullYear(),"",2);
}

function getValue(name){
  com=eval("document.bengine2."+name);
  return com.options[com.selectedIndex].value;
}

function UpdateTermine(kenner,y,m,d){
  var date=new Date(y,m-1,d);
  dn=date.getTime()/1000;

  if(kenner=="k"){
    ts_termin=dn;
    document.bengine2.termin.value=dn;
  }else{
    ts_ruecktermin=dn;
  }
}

function SetDatum(strDate, strRKenner, noMon, form)
{
  var myDate = new Date(strDate.split(".")[2],parseInt(strDate.split(".")[1],10)-1,parseInt(strDate.split(".")[0],10));
  nTage=GetTage(strDate,strRKenner!="");
  //funktion setzt aktuelles Datum + 3 Tage und füllt die select-Box für die Tage
  var com=(strRKenner)?document.bengine2.ktag:document.bengine2.rueckktag;
  var comMon=(strRKenner)?document.bengine2.kmonat:document.bengine2.rueckkmonat;

  len=com.length;
  nMax=(len>nTage)?len:nTage;

  for(i=0;i<nMax;i++){
    if(i<nTage){
      if(i>=len){
        com.options[i]=new Option();
      }
      com.options[i].text=i+1;
      com.options[i].value=i+1;
    }else{
      com[nTage] = null;
    }
  }
  nSel=myDate.getDate();
  if(nSel>nTage)
    nSel = nTage;

  com.value = nSel;
  UpdateTermine(((strRKenner!="")?"k":""),strDate.split(".")[2],strDate.split(".")[1],nSel);

  if(noMon!=1){
    comMon.value = twoDigit(myDate.getMonth()+1)+"."+myDate.getFullYear();
  }
  if(noMon!=2 && strRKenner!="") ChangeRueck();
}

function UpdateDate(strKenner)
{
  nTag=getValue(strKenner+"tag");
  strMon=getValue(strKenner+"monat");
  SetDatum(nTag+"."+strMon,(strKenner=="rueckk")?"":"dummy",2);
}

function SetDay(strKenner)
{
  nTag=getValue(strKenner+"tag");
  cMon=eval("document.bengine2."+strKenner+"monat");
  strMon=getValue(strKenner+"monat");
  ets=erster_termin.split(".");

  if(ets[1]+"."+ets[2]==strMon && nTag < parseInt(ets[0],10)){
    cMon.selectedIndex=1;
    strMon=getValue(strKenner+"monat");
    SetDatum(nTag+"."+strMon,(strKenner=="rueckk")?"":"dummy",1);
    nTag=getValue(strKenner+"tag");
  }
  if(strKenner=="k"){
    ChangeRueck();
  }
  UpdateTermine(strKenner,strMon.split(".")[1],strMon.split(".")[0],nTag);
}

function SetMonth(strKenner)
{
  //funktion setzt Tag und Monat, wenn man in der select-Box auswählt
  nTag=getValue(strKenner+"tag");
  strMonat=getValue(strKenner+"monat");
  ets=erster_termin.split(".");
  if(ets[1]+"."+ets[2]==strMonat && nTag<parseInt(ets[0],10)){
    nTag=ets[0];
  }
  strDate=nTag+"."+strMonat;
  SetDatum(strDate,(strKenner=="rueckk")?"":"dummy",1);
}

function InitDays(hin){
  nTage=GetTage((hin)?termin_hin:termin_rueck,hin);
  SelTag=(hin)?termin_hin.split(".")[0]:termin_rueck.split(".")[0];
  for(i=1;i<=nTage;i++){
    sel=(i==SelTag)?" Selected":"";
    document.write("<option value="+i+sel+">"+i+"</option>\n");
  }
}

function InitMonth(hin)
{
  var m    = new Array("Jan.","Feb.","März","April","Mai","Juni","Juli","Aug.","Sep.","Okt.","Nov.","Dez.");
  var ets  = erster_termin.split(".");
  var lts  = (hin)?(letzter_termin_hin.split(".")):(letzter_termin_rueck.split("."));
  var sels = (hin)?(termin_hin.split(".")):(termin_rueck.split("."));
  var strRes  = "";
  var aktDate = new Date(ets[2],parseInt(ets[1],10)-1,1);
  var selDate = new Date(sels[2],parseInt(sels[1],10)-1,1);
  var maxDate = new Date(lts[2],parseInt(lts[1],10)-1,1);
  var selSet  = false;
  while(aktDate.getTime()<=maxDate.getTime()){
    sel = aktDate.getTime()==selDate.getTime()?" selected":"";
    if(!selSet && sel!="") selSet = true;
    if(!selSet && !hin && aktDate.getTime()>=maxDate.getTime()){
      sel = "selected";selSet = true;
    }
    var val = (aktDate.getMonth()+1)<10?"0"+(aktDate.getMonth()+1):(aktDate.getMonth()+1);
    strRes += '<option value="'+val+'.'+aktDate.getFullYear()+'"'+sel+'>'+m[aktDate.getMonth()]+' '+String(aktDate.getFullYear()).substr(2,2)+'</option>';
    aktDate.addMonth();
  }
  document.write(strRes);
}