//window.alert("kalender!");
 var aktTag = false; // aktuellen Tag markieren?
 var Zellbreite = 30;
 var Zellhoehe = 30;
 var Hintergrund = '#ffffff';
 var Hintergrund2 = '#ffffff';
 var Shift = 0;
 var dok = document.Datumsauswahl;
 var montag;        // recolor füllt array montag mit key:tagnr, val:id

 if (document.layers) {
        var my_calendar = document.calendar;
        var my_slide = document.calendar.document.slide;
        var my_day29 = document.calendar.document.day29;
        var my_day30 = document.calendar.document.day30;
        var my_day31 = document.calendar.document.day31;
        var my_circle = document.calendar.document.circle;
 } else if (document.all) {
        var my_calendar = document.all['calendar'].style;
        var my_slide = document.all['slide'].style;
        var my_circle = document.all['circle'].style;
        var my_day29 = document.all['day29'].style;
        var my_day30 = document.all['day30'].style;
        var my_day31 = document.all['day31'].style;
        my_slide.top = document.all['slide'].offsetTop;
        my_slide.left = document.all['slide'].offsetLeft;
 } else {
        var my_calendar = document.getElementById('calendar').style;
        var my_slide = document.getElementById('slide').style;
        my_slide.top = 30; my_slide.left=0;
        var my_day29 = document.getElementById('day29').style;
        var my_day30 = document.getElementById('day30').style;
        var my_day31 = document.getElementById('day31').style;
        var my_circle = document.getElementById('circle').style;
 }

 my_calendar.width = 1 + 7 * Zellbreite;
 my_calendar.height = 1 + 7 * Zellhoehe;
 if (document.layers) {
        my_calendar.clip.width = my_calendar.width;
        my_calendar.clip.height = my_calendar.height;
 } else {
        my_calendar.clip = "rect(0px " + (1 + 7 * Zellbreite) + "px " + (1 + 7 * Zellhoehe) + "px 0px)";
 }

 
 
 
 if(recol_exists)   recolor();
 
function recolor()
 {
 // einfaerben des Kalenders, setzen der Marker in der Terminliste fuer den aktuellen Monat
  var markid = 0;
  var dok = document.Datumsauswahl;
  var st_jahr, st_mond, st_tag, dauer, ed_jahr, ed_mond, ed_tag;
  var cell, startfeld, feld, id, starttime, tagtime, endtime, first, last, tagms;
    // felder einfärben
      // "t_kal[$i][0]=".$kal_entry['ID'];
      // "t_kal[$i][1]= '".$kal_entry['start']."'";
      // "t_kal[$i][2]= '".$kal_entry['ende']."'";
      // "t_kal[$i][3]= '".$kal_entry['dauer']."'";
      tagms = 1*24*60*60*1000;                    // ms je tag
      next = dok.DerMonat.value*1 + 1;            // folgender monat
      first = new Date(dok.DasJahr.value,dok.DerMonat.value,1);    // der 1. des aktuellen Monats
      last = new Date(dok.DasJahr.value,next,1);                   // der 1. des Folgemonats
      lastday = new Date();
      lastday.setTime(last.getTime()-tagms);                 // ziehe 1 Tag ab
      decolor(lastday.getDate()*1);
      choosen = new Date(dok.DasJahr.value,dok.DerMonat.value,dok.DerTag.value);  // aktueller Tag
  if(!Shift) Shift = getShift(dok.DasJahr.value,dok.DerMonat.value);

  // Termine eintragen
  for(i=0;i<t_kal.length;i++)
  {
    // geht alle termine durch, prüft, ob sie im aktuellen Monat liegen und setzt ggf. farben und marker 
     if(t_kal[i][1])
     {
      id = t_kal[i][0];

      starttime = t_kal[i][1]*1000;      // in ms umrechnen
      start = new Date();
      start.setTime(starttime);
      st_tag = start.getDate();

      endtime = t_kal[i][2]*1000;
      ende = new Date();
      ende.setTime(endtime);
      ed_tag = ende.getDate();

      dauer = t_kal[i][3]*1;

      if (start>=first && start<last)
      {
        // start-Datum liegt im aktuellen Monat
        feld = st_tag + 6 - Shift;
        tagtime = starttime;
        markerfarbe(id);
	// tag fuer tag pruefen
        while(tagtime < last.getTime() && tagtime <= endtime )
        {
           feldfarbe(feld,id);
           tagmon = Math.floor((tagtime-first.getTime())/tagms)+1;
           montag[tagmon] = id;
         
           if(t_sub[id]) 
           {
            // subtermine markieren
                for(si=0;si<t_sub[id].length;si++)
                {	
                    if(tagtime==t_sub[id][si]['dat']) 
                    {
                           setmark(feld,markid);
                           // für diesen Tag besondere Div-ID
                           if(t_sub[id][si]['ID']>0)
                               montag[tagmon] = t_sub[id][si]['ID'];
                           markid++;
                    }
                }
            }
          
            tagtime += tagms;
            feld++;
        }
      }      // end start between first and last
      else if (ende>=first && ende<last)
      {
        // nur das ende-Datum liegt im aktuellen Monat
        feld = 1 + 6 - Shift;
        tagtime = first.getTime();
        markerfarbe(id);
        while(tagtime < last.getTime() && tagtime <= endtime )
        {
           feldfarbe(feld,id);
           tagmon = Math.floor((tagtime-first.getTime())/tagms)+1;
           montag[tagmon] = id;
	   if(t_sub[id]) 
	   {
            // subtermine markieren
            for(si=0;si<t_sub[id].length;si++)
            {	
                if(tagtime==t_sub[id][si]['dat']) 
                {
                    setmark(feld,markid);
                    // für diesen Tag besondere Div-ID
                    if(t_sub[id][si]['ID']>0)
                        montag[tagmon] = t_sub[id][si]['ID'];
                    markid++;
                }
            }
        }
	   tagtime += tagms;
           feld++;
         }
      }      // end end between first and last
      else if (start<first && ende>lastday)
      {
        // start liegt vor dem ersten, ende nach dem letzten des Monats:
        // termin umfasst alle tage des Monats
        feld = 1 + 6 - Shift;
        tagtime = first.getTime();
        markerfarbe(id);
        while(tagtime <= lastday.getTime() && tagtime <= endtime )
        {
		   feldfarbe(feld,id);
           tagmon = Math.floor((tagtime-first.getTime())/tagms)+1;
		   montag[tagmon] = id;
		if(t_sub[id]) 
		   {
            // subtermine markieren
            for(si=0;si<t_sub[id].length;si++)
            {	
                if(tagtime==t_sub[id][si]['dat']) 
                {
                    setmark(feld,markid);
                    // für diesen Tag besondere Div-ID
                    if(t_sub[id][si]['ID']>0)
                        montag[tagmon] = t_sub[id][si]['ID'];
                    markid++;
                }
            }
		   }          
		   tagtime += tagms;
		   feld++;
        }
      }      // end start before first and end after last
     } // end if t_kal
  }   // end for

 }  // end recolor
 
 

function chooseCell(cellnr)
 {
    // unused
    alert(cellnr);
 }

 function showOnly(typ,nr)      // nr = terminID
 {
 // nur das identifizierte Objekt wird angezeigt
  // alert(typ+":"+nr);
  for(i=0;i<narr.length;i++)
  {
    if(narr[i] != nr)
    {
       obj = typ + String(narr[i]);
       TUD_ShowHide(obj,'','hide');
    }
  }
  obj = typ + String(nr);
  TUD_ShowHide(obj,'','show');
  return false;
 }

 

 function new_day(evt) {
 // nimmt koordinaten des klicks und setzt circle
 // errechnet daraus tag des monats und setzt diesen in document.forms[0] ein
    
        if (document.all) {
                my_x = Math.floor(evt.offsetX/Zellbreite);
                 my_y = Math.floor(evt.offsetY/Zellhoehe);
        } else {
                  my_x = Math.floor(evt.layerX/Zellbreite);
                  my_y = Math.floor(evt.layerY/Zellhoehe);
        }
        my_x = Math.min(6+Shift, my_x);
        my_y = Math.min(6, my_y);
        var day_nr = 7 * my_y + my_x  - 5;
        if ((day_nr > 0) && (day_nr < 32)) {
                my_circle.left = my_x * Zellbreite + parseInt(my_slide.left)+1;
                my_circle.top = my_y * Zellhoehe + parseInt(my_slide.top);
                document.forms[0].DerTag.value = day_nr;
        }
        if(montag[day_nr]>0) { showOnly('t',montag[day_nr]); }

        return false;
 }



 function getShift (Year,Month)  {
        var DasDatum = new Date(Year, Month, 1);
        Shift = (7 - DasDatum.getDay()) % 7;
        return Shift;
 }



 function slide() {
// alert("start sliding");
       var dok =  document.Datumsauswahl;
       Shift = getShift(dok.DasJahr.value, dok.DerMonat.value);
       my_slide.left = -Zellbreite * Shift;
       my_slide.top = Zellhoehe;        // Nötig, um für IE und Opera einen Wert zu erzwingen.
// window.status = "slide "+Shift+" to top: "+ my_slide.top +" / to left: "+my_slide.left;
       DasDatum = new Date(dok.DasJahr.value, dok.DerMonat.value, 31);
       var j = DasDatum.getDate();
       my_day29.top = -1 - Zellhoehe;
       my_day30.top = -1 - Zellhoehe;
       my_day31.top = -1 - Zellhoehe;
//      alert(j+"."+dok.DerMonat.value);
       if (j == 31) {
                var Ultimo = 31;
        } else {
                var Ultimo = 30;
                my_day31.top = Zellhoehe * ((Shift > 1) ? 5 : 6);
                my_day31.left = ((8 - Shift) % 7) * Zellbreite+1;
                if  (document.layers) {
                        my_day31.document.bgColor = ((Shift == 2) || (Shift == 3)) ? Hintergrund2 : Hintergrund;
                } else {
                        my_day31.backgroundColor = ((Shift == 2) || (Shift == 3)) ? Hintergrund2 : Hintergrund;
                }
                if (j > 1) {
                        Ultimo = 29;
                        my_day30.top = Zellhoehe * ((Shift > 0) ? 5 : 6);
                        my_day30.left = ((7 - Shift) % 7) * Zellbreite+1;
                        if  (document.layers) {
                                my_day30.document.bgColor = ((Shift == 1) || (Shift == 2)) ? Hintergrund2 : Hintergrund;
                        } else {
                                my_day30.backgroundColor = ((Shift == 1) || (Shift == 2)) ? Hintergrund2 : Hintergrund;
                        }
                        if (j > 2) {
                                Ultimo = 28;
                                my_day29.top = 5 * Zellhoehe;
                                my_day29.left = (6 - Shift) * Zellbreite+1;
                                if  (document.layers) {
                                        my_day29.document.bgColor = ((Shift == 0) || (Shift == 1)) ? Hintergrund2 : Hintergrund;
                                } else {
                                        my_day29.backgroundColor = ((Shift == 0) || (Shift == 1)) ? Hintergrund2 : Hintergrund;
                                }
                        } // endif j>2

                }   //endif j>1
        }   // endif j != 31
        Ultimo = Math.min(Ultimo, dok.DerTag.value);
        dok.DerTag.value = Ultimo;
                Ultimo += 5 - Shift;
        j = Ultimo % 7;
        Ultimo = Math.floor(Ultimo/7);
        if(aktTag)
        {
            my_circle.left = j * Zellbreite+1;
            my_circle.top = Ultimo * Zellhoehe + Zellhoehe;
        }
        else
        {
            my_circle.left = -100;
            my_circle.top = -100;
        }
 }


function setmark(feldid,markid)
 {
  // setze marker; used by recolor
  var mark = eval("mark_"+markid);
  var my_x = feldid % 7;
  if(my_x == 0) my_x = 7;
  var my_y = (feldid-my_x) / 7;

  mark.left = (my_x-1) * Zellbreite + 1;
  // mark.left =  parseInt(mark.left) + parseInt(my_slide.left) + 1;
    mark.top = my_y * Zellhoehe + parseInt(my_slide.top) - markOffset;
  // alert('setmark '+markid+" to row "+my_y+"("+mark.top+") and col "+my_x+" ("+mark.left+")");
  TUD_ShowHide("marker_"+markid,'','show');

 }


 function new_month(my_month) {
        dok.DerMonat.value = my_month;
        if(dok.Monat.selectedIndex !=  my_month) dok.Monat.selectedIndex =  my_month;
        slide();
//        if(my_month > 1 && my_month < 8) alert(dok.DerTag.value+"."+dok.DerMonat.value+"."+dok.DasJahr.value);
     if(recol_exists)   recolor();
 }
 function new_year(my_year) {
        dok.DasJahr.value = my_year;
        if(dok.Jahr.selectedIndex !=  (my_year - dok.stahr.value) )
           dok.Jahr.selectedIndex =  my_year - dok.stahr.value;
        slide();
     if(recol_exists)   recolor();
 }

 function allValues() {
  var dok =  document.forms[0];
  var Ausgabe = "";
  for(i=0;i<dok.elements.length;i++)
       Ausgabe += " "+i+") "+dok.elements[i].name+": "+dok.elements[i].value;
  return Ausgabe;
 }
