/* ----------------- Für das Ermitteln von 'JedenMonat' Terminen -------------------- */
/* Parameter: TagInWoche_gesucht: 0:Sonntag - 6:Samstag                               */ 
/*            Nter              : 1:erster  XX Tag des Monats - 4:vierter XX Tag ...  */ 
/*                              :-1:letzter XX Tag des Monats                         */ 
/*            Option            : 'Datum' oder 'Tage'  - bestellt den Rückgabewert:   */ 
/*                                             'Datum' im Format des Date() Objekts   */ 
/*                                             'Tage'  bis zu diesem Datum            */ 

function JedenMonat( TagInWoche_gesucht, Nter, Option) {
       var TagInMonat_gesucht, Differenz = 0, ms_pro_Tag = 24*60*60*1000;

       if (TagInWoche_gesucht < 0 || TagInWoche_gesucht > 6)   
         { alert("Der Wochentag muss zwischen 0 und 6 liegen! " + TagInWoche_gesucht + " ist nicht möglich!");
           return(0);
         } 
       if (Nter != -1 && (Nter < 1 || Nter > 4))
         { alert("Es kann nur das Auftreten 1 - 4 oder -1 verlangt werden! " + Nter + " ist nicht möglich!");
           return(0);
         }

       var jetzt  = new Jetzt(), spaeter = new Date(1970, 01-1, 01);
       var absolutjetzt  = jetzt.getTime(), absolutspaeter = absolutjetzt;
       spaeter.setTime( absolutspaeter);
       var TagInWoche = jetzt.getDay();
       var TagInMonat = jetzt.getDate();

       spaeter.setDate(1);                                                      // Monatsanfang
       if (Nter == -1) {spaeter.setMonth( spaeter.getMonth()+1);}		//   --  dann .. des kommenden Monats
       TagInWoche = spaeter.getDay();						// Wochentag des Monatsanfangs
       Differenz = TagInWoche_gesucht - TagInWoche;
       TagInMonat_gesucht = (Differenz >= 0) ? Differenz + 1 : Differenz + 8;	// Erstes Vorkommen des gewünschten Wochentags 

       if (Nter != -1) 
       { TagInMonat_gesucht += 7 * ( Nter - 1);					// Gewünschtes Auftreten
         if (TagInMonat_gesucht < TagInMonat) {					// Zu spät für diesen Monat!
           spaeter.setDate(1); spaeter.setMonth( spaeter.getMonth()+1);		// Also die gleiche Übung im nächsten Monat
           TagInWoche = spaeter.getDay();
           Differenz = TagInWoche_gesucht - TagInWoche;
           TagInMonat_gesucht = (Differenz >= 0) ? Differenz + 1 : Differenz + 8; 
           TagInMonat_gesucht += 7 * (Nter - 1);
         }
         spaeter.setDate( TagInMonat_gesucht);
         absolutspaeter = spaeter.getTime();

       } else {   // Gesucht ist letztes Auftreten des Wochentags im Monat
         spaeter.setDate( TagInMonat_gesucht);
         absolutspaeter = spaeter.getTime() - 7 * ms_pro_Tag;                   // Vom ersten Auftreten eine Woche zurück
         spaeter.setTime( absolutspaeter);
         if ( absolutspaeter < absolutjetzt) {                                  // Zu spät für diesen Monat!
           spaeter.setDate(1); spaeter.setMonth( spaeter.getMonth()+2);		// Also die gleiche Übung im nächsten Monat
           TagInWoche = spaeter.getDay();
           Differenz = TagInWoche_gesucht - TagInWoche;
           TagInMonat_gesucht = (Differenz >= 0) ? Differenz + 1 : Differenz + 8;
           spaeter.setDate( TagInMonat_gesucht);
           absolutspaeter = spaeter.getTime() - 7 * ms_pro_Tag;
           spaeter.setTime( absolutspaeter);
         }
       }
       Differenz = Math.ceil((absolutspaeter - absolutjetzt)/ms_pro_Tag);
       switch(Option) {
         case "Tage":  return(Differenz);
         break;
         case "Datum": return(spaeter);
         break;
         default: alert("Die Option " + Option + " ist nicht vorgesehen!"); 
       }
}; 
/* -----------------       Ende der  'JedenMonat' Funktion       -------------------- */

