var daysTable=new Array ("31", "28", "31", "30", "31","30", "31", "31", "30", "31", "30", "31");
var i=1;
 
   function setDays(dayCheck,monthCheck,yearCheck)
   {
 	var leapYear=false;
 	leapYear=( ( (yearCheck%4==0) && (yearCheck%100!=0) ) || (yearCheck%400==0) )
 
 	if (leapYear) daysTable[1]=29;
 		 else daysTable[1]=28;
 
 	with(dayCheck){
 
 		if (length>daysTable[monthCheck])
 
 			for(i=length-1;i>=daysTable[monthCheck];i--)
 				options[i]=null
 
 		else if (length<daysTable[monthCheck])
 
 			for(i=length;i<daysTable[monthCheck];i++)
 
 				options[i]=new Option(""+(i+1),""+(i+1),false,false)
 	}
   
   //if(navigator.appName=="Netscape") dayCheck.selectedIndex=dayCheck.length-1-daysTable[monthCheck]+dayCheck.selectedIndex+1;
   return true;
 
 }

function addYear ( oDatum )
{
 var oDatumI;
 
   // --- Initialize
   oDatumI = new Date();

   // --- Nächster Monat, inkl. Jahreswechsel
   oDatumI.setFullYear ( oDatum.getFullYear()+1, oDatum.getMonth(),  oDatum.getDate() );
   
 return oDatumI;
}

function addMonth ( oDatum )
{
 var oDatumI;
 
   // --- Initialize
   oDatumI = new Date();

   // --- Nächster Monat, inkl. Jahreswechsel
   oDatumI.setFullYear ( oDatum.getFullYear(), oDatum.getMonth()+1, oDatum.getDate() );
   
 return oDatumI;
}

function addDay ( oDatum, nCount )
{
 var oDatumI;
 
   // --- Initialize
   oDatumI = new Date();
   if ( nCount == null )
      nCount = 1;

   // --- Nächster Tag, inkl. Monats / Jahreswechsel
   oDatumI.setFullYear ( oDatum.getFullYear(), oDatum.getMonth(),  oDatum.getDate()+nCount );
   
 return oDatumI;
}

// --- Globale Variablen
var g_bModifiedB = false;
var g_bModifiedE = false;

function checkDate ( oObj ) {
   var oInput;
   var oDatumAkt;
   var oDatumB;
   var oDatumE;
   var oDatumAbreise;

   // --- Initialize
   oInput        = document.reisedaten;
   oDatumAkt     = new Date();
   oDatumAbreise = new Date();
   
   // --- default Abreise
   oDatumAbreise.setFullYear ( 
           oDatumAkt.getFullYear(), oDatumAkt.getMonth(), oDatumAkt.getDate()+1 ); 
   
   with ( oInput ) {
      //alert ( b_tag.selectedIndex + ',' + b_monat.selectedIndex + ','  + b_jahr.selectedIndex );   
      //alert ( b_tag.options[b_tag.selectedIndex].value + b_monat.options[b_monat.selectedIndex].value + b_jahr.options[b_jahr.selectedIndex].value );

      // --- Datum Selektboxen auslesen
	  oDatumB = new Date ( b_jahr.options[b_jahr.selectedIndex].value, 
		              b_monat.options[b_monat.selectedIndex].value-1, 
		              b_tag.options[b_tag.selectedIndex].value );
      oDatumE = new Date ( e_jahr.options[e_jahr.selectedIndex].value, 
		              e_monat.options[e_monat.selectedIndex].value-1, 
		              e_tag.options[e_tag.selectedIndex].value );
	
      //alert (oDatumB + ', ' +oDatumE);
	  // --- Element auswerten
	  switch ( oObj.name ) {
	   case 'b_tag': // --- Starttag wurde verändert
		   if ( oDatumB.getTime() < oDatumAkt.getTime() ) {
		      // --- Wechsel zum nächsten Monat
		      oDatumB = addMonth ( oDatumB );
			 
	          // --- Abreisedatum ggf. auch noch anpassen
	          if (    oDatumE.getTime() == oDatumAbreise.getTime() 
		           || oDatumE.getTime() < oDatumB.getTime() )
			 oDatumE = addDay ( oDatumB );
		   }
		   
		   // --- Nur einmal erlauben
		   g_bModifiedB = true;
	       break;

	   case 'e_tag': // --- Endetag wurde verändert
		   time_diff = oDatumAbreise.getTime() - oDatumE.getTime();
		   // Falls die Zeitdifferenz > 1 Tag ist, dann Monat erhöhen 
		   if ( time_diff > 1000*60*60*24  ) {
	           // --- Wechsel zum nächsten Monat
			   // --- evtl. Logic Fehler: Wenn der Abreisetag um eins erhoeht wird , anschliessend wieder um eins reduziert wird,
			   //  --- erhoeht sich der Monat um eins. Mit der Auskommentierung eruebrigt sich das Problem. aw - 20031126
		       oDatumE = addMonth ( oDatumE );
		      
		       // --- Wechsel auf nächsten Monat (Anreise)
		       if (    oDatumB.getDate()     == oDatumAkt.getDate() 
		           && oDatumB.getMonth()    == oDatumAkt.getMonth() 
		           && oDatumB.getFullYear() == oDatumAkt.getFullYear() 
		           && g_bModifiedB == false )
		         // --- Abreisedatum minus 1
			     oDatumB = addDay ( oDatumE, -1 );
		       }
		   
		    // --- Nur einmal erlauben
		    g_bModifiedE = true;
	        break;

	   case 'b_monat': // --- Startmonat wurde verändert
		if ( oDatumB.getMonth() < oDatumAkt.getMonth() ) {
		   // --- Wechsel auf das nächste Jahr
		   if ( oDatumB.getFullYear() == oDatumAkt.getFullYear() ) {
		      // --- Wechsel zum nächsten Jahr
		      oDatumB = addYear ( oDatumB );

		      // --- Endemonat ggf. auch noch anpassen
	              if ( oDatumB.getTime() > oDatumE.getTime() && oDatumE.getMonth() == oDatumAkt.getMonth() )
			 oDatumE = addMonth ( oDatumE );
		   }
		}
	        else
	        {
		   // --- Endemonat ggf. auch noch anpassen
	           if ( oDatumB.getTime() > oDatumE.getTime() && oDatumE.getMonth() == oDatumAkt.getMonth() )
		      oDatumE = addMonth ( oDatumE );
		}
	       break;

	   case 'e_monat': // --- Endemonat wurde verändert
		   if ( oDatumE.getTime() < oDatumAkt.getTime() )
		   {
		      // --- Wechsel auf das nächste Jahr
		      if ( oDatumE.getFullYear() == oDatumAkt.getFullYear() )
			 // --- Wechsel zum nächsten Jahr
			 oDatumE = addYear ( oDatumE );
		   }
	       break;

	   case 'b_jahr':
	       break;

	   case 'e_jahr':  // --- Endejahr wurde verändert
	       if ( oDatumE.getFullYear() == oDatumAkt.getFullYear() )
		  oDatumB.setFullYear ( oDatumAkt.getFullYear() );
	       break;
	   }

//	alert (oDatumB + ', ' +oDatumE);
	   // --- Startdatum nie kleiner als der aktuelle Tag
	   if ( oDatumB.getTime() < oDatumAkt.getTime() )
	      oDatumB = oDatumAkt;

	   // --- Endedatum immer mind. einen Tag größer als Startdatum
	   if ( oDatumE.getTime() <= oDatumB.getTime() )
	      oDatumE = addDay ( oDatumB );
//	alert (oDatumB + ', ' +oDatumE);

           // --- Comboboxen (Anzahl Tage) anpassen
           setDays ( b_tag, oDatumB.getMonth(), oDatumB.getFullYear() ); 
           setDays ( e_tag, oDatumE.getMonth(), oDatumE.getFullYear() ); 
            
	   // --- Datums-Selektboxen wieder initialisieren
           e_tag.selectedIndex   = oDatumE.getDate()-1;
	   b_tag.selectedIndex   = oDatumB.getDate()-1;
           e_monat.selectedIndex = oDatumE.getMonth();
	   b_monat.selectedIndex = oDatumB.getMonth();
	   e_jahr.selectedIndex  = oDatumE.getFullYear() - oDatumAkt.getFullYear();
           b_jahr.selectedIndex  = oDatumB.getFullYear() - oDatumAkt.getFullYear();
           
           
   } // --- with ( oInput ) 
 
 return true;
}

