<!--
// Events Calendar V1.4, 24.3.2006 /// überarbeitung für PHP
// Copyright Notice:
// (C) by M. Fautz (michael@inline-karlsruhe.de). The use and modification of this code is prohibited.

  var months = ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"];
  var daycounts = [0,0,0,0,0,0,0,0,0,0,0,0]; //for leap years, remember to set february to 29 days
  var eventsToday;					// actual events of today
  var calendarMonthYear;				// month.year   actually being displayed

// Enter the events in this format:
// [ "link name", "short event Name", "event name", "short additional Info", 
//   [ [day, month], [day, month, today, tomonth, repeat], ... ] ]
/*
  var events = [
    ["ksn", "Karlsruher SkateNite", "Karlsruher SkateNite", "Beginn 20 Uhr", 
      [[1,5, 1,9, 14], [5,7]]
     ],
    ["lt_xy", "xy-Lauftreff", "Lafutreff der BlaBlaBla", "Start 18 Uhr, Europahalle Karlsruhe", 
      [[1,4, 30,10, 7]]
      ]
  ];
*/

//! Scan the events and generate an event list for each day of #monthNo.
function ScanEvents(monthNo)
{
  var calendar = new Array(32);			// adds for each day (=1..31) an Array with the event numbers
  for (var day=0; day<32; day++) {
    calEntry = new Array();
    calendar[day] = calEntry;
  }

  for (var ev = 0; ev < events.length; ev++) {	// the events
    dates = events[ev][4];
    //alert(dates);

    for (var d=0; d<dates.length; d++) {	// the dates
      // *** one time event entry
      if (dates[d].length == 2) {
	if (monthNo+1 == dates[d][1]) {		// the month matches
	  _day = dates[d][0];
	  calendar[_day].push(ev);
	}
      }
      // *** process repeating event entry
      else if (dates[d].length == 5) {
	if ((monthNo+1 >= dates[d][1]) && 
	    (monthNo+1 <= dates[d][3])) {	// the month matches
	  _month = dates[d][1];
	  _day = dates[d][0];
	  do {
	    if (monthNo+1 == _month)		// the month matches
	      calendar[_day].push(ev);
	    // *** repeat the event
	    _day += dates[d][4];
	    if (_day > daycounts[_month-1]) {
	      _day = _day - daycounts[_month-1];
	      _month++;
	    }
	    
	    if ((_month == dates[d][3]) && (_day > dates[d][2]))
	      break;
	    if (_month > dates[d][3])
	      break;
	  } while (_month <= monthNo+1);
	}
      }
    } // end: processing the dates of 1 event

  }
  return calendar;
}


//! Print one week of the calendar.
/*!
  \param start - Monday's date
  \param min   - firstday of this month
  \param max   - numerof days this month
 */
function PrintWeek(monthno,start,min,max, calendar)
{
   var d;
   var desc;

   for (var j = 0; j < 7; j++) {
     document.write("<td>");
     d = start + j;
     if (d >= min && d < max + min) {
       day = d - min +1;
       month = monthno+1;
       title = "";
       eventList = "";

       if (calendar[day].length == 0)
	 desc = "<div class='noDate'>" + day + "</div>";	// empty calendar entry
       else for (i=0; i<calendar[day].length; i++) {
	 eventNo = calendar[day][i];
	 if (title != "") {
	   title = title + ", ";
	   eventList = eventList + ",";
	 }
	 title = title + events[eventNo][1];		// short title
	 eventList = eventList + eventNo;
	 desc = "<div class='Date' title='" + title + "'>" + 
	   "<a class='cal' href=\"Javascript:ShowDate('" + day + "." + month + "', '" + eventList + "')\">" 
	   + day + "</a>" + "</div>";
       }

       //desc = CheckDate(monthno,d - min + 1);
       document.write(desc);
     }
     document.write("</td>");
   }
}


function PrintCalendar(year, month)
{
  var done = false;
  var day  = 0;
  var date = new Date();
  if (year < 999)
    year += 1900;

  // *** do year corrections
  while (month >= 12) {
    year++;
    month -= 12;
  }

  var date2 = new Date(year, month, 1);	// Date(year, month - 1, 1);
  var firstDay = date2.getDay();
  if (firstDay > 0) {
    firstDay--;
  } else {
    firstDay = 6;
  }
  // *** daycounts[month]
  for (mon=0; mon<12; mon++) {
    var numDays = 31;
    if (mon== 3 || mon == 5 || mon == 8 || mon == 10)
      --numDays;
    if (mon == 1) {
      numDays = numDays - 3;
      if (year % 4 == 0)
        numDays++;
      if (year % 100 == 0)
        numDays--;
      if (year % 400 == 0)
        numDays++;
    }
    daycounts[mon] = numDays;
  }

  calendar = ScanEvents(month);
  
  document.write("<table class='inner'>");
  // *** Month and Year selection
  var href;
  href = this.location.href.split("?")[0];		// URL without search key
  href = href.split("#")[0];				// URL without anchor
  if (month == 0)
    var hrefLastMonth = href+"?date="+(Number(year)-1)+"-12";
  else
    var hrefLastMonth = href+"?date="+year+"-"+month;
  if (month == 11)
    var hrefNextMonth = href+"?date="+(Number(year)+1)+"-1";
  else
    var hrefNextMonth = href+"?date="+year+"-"+(Number(month)+2);
  var hrefLastYear  = href+"?date="+(Number(year)-1)+"-"+(Number(month)+1);
  var hrefNextYear  = href+"?date="+(Number(year)+1)+"-"+(Number(month)+1);
  document.write("<caption><b>");
  document.write("<a href=\""+hrefLastMonth+"\"><<</a> " + months[month] +
                 " <a href=\""+hrefNextMonth+"\">>></a>");
  document.write(" &nbsp; ");
  document.write("<a href=\""+hrefLastYear+"\"><<</a> " + year +
                 " <a href=\""+hrefNextYear+"\">>></a>");		 
  document.write("</b></caption>");

  
  document.write("<th>Mo</th><th>Di</th><th>Mi</th><th>Do</th><th>Fr</th><th>Sa</th><th>So</th>");
  while(day <= firstDay+daycounts[month]) {
    document.write("<tr>");
    PrintWeek(month,day, firstDay, daycounts[month], calendar);
    document.write("</tr>");
    day = day + 7;
  }
  document.write("</table><p>");

  // *** today's events
  day = date.getDate();
  calendarMonthYear = (month+1)+"."+year;
  if ( (month == date.getMonth()) && (year == date.getFullYear()) ) {
    eventsToday = "";
    for (ev=0; ev<calendar[day].length; ev++) {
      if (eventsToday != "")
	eventsToday = eventsToday + ",";
      eventsToday = eventsToday + calendar[day][ev];
    }
  }
}

//! Writes all events of the denoted day into the document element Id 'dayEvents'.
/*!
  \param dateText	date as a string, e.g. '24.3.2005'
  \param eventsText	comma seperated list of indexes. Each index idx refers to an event: events[idx]. May be undefined if no event exists.
*/
function ShowDate(dateText, eventsText)
{
  IE = (document.all) ? 1 : 0;				// Browser Erkennung
  //alert("Browser IE="+IE);
  
  // *** remove all old entries
  var calDOM = document.getElementById("dayEvents");
  while (calDOM.childNodes.length != 0) {
    /*
    var text;
    text = "nodeName: " + calDOM.firstChild.nodeName;
    if (calDOM.firstChild.attributes) {
      //alert("kennt attributes");
      for(i=0; i<calDOM.firstChild.attributes.length; i++)
        text = text + " /  attrib: " + calDOM.firstChild.attributes[i].nodeName + " = " + calDOM.firstChild.attributes[i].nodeValue;
    }
    alert(text);*/
    calDOM.removeChild(calDOM.firstChild);
  }
  
  if (eventsText) {
    // Datum anzeigen
    var newB = document.createElement("b");
    newB.appendChild( document.createTextNode( dateText ) );
    calDOM.appendChild(newB);
    
    var eventList = eventsText.split(",");   
    for (ev = 0; ev < eventList.length; ev++) {
      eventNo = eventList[ev];
      // events[eventNo][2];	// long title
      // events[eventNo][0];	// link
      // events[eventNo][3];	// Infos
       var newDiv = document.createElement("div");
      if (IE)
        newDiv.setAttribute("className", "iDotNarrow");
      else
        newDiv.setAttribute("class", "iDotNarrow");
      calDOM.appendChild(newDiv);

      var newA = document.createElement("a");
      var newText = document.createTextNode(events[eventNo][2]);	// long event text as link name
      newA.setAttribute("href", "#"+events[eventNo][0]);		// link to the event description
      newA.appendChild(newText);
      newDiv.appendChild(newA);
  
      newDiv.appendChild( document.createElement("br") );
 
      var newText = document.createTextNode(events[eventNo][3]);	// start time and infos
      newDiv.appendChild(newText);
    }
  }
  else {
    // *** if the current month is displayed then show the skate events for 'today'
    var today = new Date();
    var thisMonth = (today.getMonth()+1)+"."+today.getFullYear();
    //alert(thisMonth +"  "+ calendarMonthYear);
    if (thisMonth == calendarMonthYear) {
      // Datum anzeigen
      var newB = document.createElement("b");
      newB.appendChild( document.createTextNode( dateText ) );
      calDOM.appendChild(newB);

      calDOM.appendChild( document.createElement("br") );
      calDOM.appendChild( document.createTextNode("Für heute ist leider kein Skate-Termin eingetragen.") );
    }
  }
}

//! Shows the todays events.
function InitCalendar()
{
  var today = new Date();
  //ShowDate(today.getDate()+"."+(today.getMonth()+1)+"."+today.getFullYear(), eventsToday);
  ShowDate(today.getDate()+"."+(today.getMonth()+1)+".", eventsToday);
}
-->

