
var daysAMonth = new Array (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var months = new Array ("januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december");
var monthsAbbr = new Array ('jan', 'feb', 'maa', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec');
var weekdays = new Array ("zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag");

function getDaysAMonth (dt)
{
  m = dt.getMonth ();

  if (m != 1 || dt.getFullYear () % 4 != 0)
    return daysAMonth [m];
  else
    return 29;
}

function getDateIndex (day, month, year)
{
  return day + 32 * (month + 16 * year);
}

function writeDate (a)
{
  calendarTxt = calendarTxt + a;
}

function getDayID (day, month, year)
{
  tm = year * 100;
  tm = (tm + month)*100;
  tm = tm + day;
  return "Dt" + tm;
}

function showDayInfo (day, month, year, className)
{
  return "<td name=\"calendarDate\" class=\"" + className + "\" ID=\"" + getDayID (day, month, year) + "\" >" + day + "</td>";
}

function MarkDay (date)
{
  var obj = GetObjectByRef (date);
  if (obj)
  {
    var n = GetClassName (obj);
    if (n.substr (n.length - 8, 8) != "Activity")
      SetClassName (obj, n + "Activity");
  }
}

function MarkDays (fromDate, toDate)
{
//window.alert (fromDate + " " + toDate);
  var dt = new Date (fromDate.getFullYear (), fromDate.getMonth (), fromDate.getDate ());
  while (dt.valueOf () <= toDate.valueOf ())
  {
    var s = getDayID (dt.getDate (), dt.getMonth () + 1, dt.getFullYear ());
    MarkDay (s);
    dt.setHours (24);
  }
}

function doParseInt (s, defaultValue)
{
  var i = parseInt (s, 10);
  if (isNaN (i))
   return defaultValue;
  return i;
}

function CalendarParseDate (sDate)
{
  var re = /\s*([^\s].*)\s*/g;
  sDate = sDate.replace (re, "$1");
  var year = doParseInt (sDate.substr (0, 4), 2009);
  var month = doParseInt (sDate.substr (5, 2), 1);
  var day = doParseInt (sDate.substr (8, 2), 1);
  var hour = doParseInt (sDate.substr (11, 2), 0);
  var min = doParseInt (sDate.substr (14, 2), 0);
  return new Date (year, month - 1, day, hour, min);
}

function CalenderShowString (nr)
{
  if (nr < 10)
    return "0" + nr;
  return nr;
}

function CalenderShowHours (dt)
{
  if (dt.getHours () != 0 || dt.getMinutes () != 0)
  {
    var rturn = dt.getHours ();
    if (dt.getMinutes () == 0)
      rturn += ":00";
    else
      rturn += ":" + dt.getMinutes ();
    return rturn;
  }
  return "";
}

function showCalendarInfo (a)
{
  var obj = GetObjectByRef ("CalendarInfo");
  if (obj == null)
    obj = GetObjectByRef ("SmallCalendarInfo");
  var pos = getObjectRect (obj);
  if (GetAttribute (obj, "ID") == "SmallCalendarInfo")
    pos = {left: pos.left-320, top: pos.top};
  var obj = GetObjectByRef ("CalendarDetail2");
  obj.innerHTML = a;
  var obj = GetObjectByRef ("CalendarDetail");
  obj.style.display="block";
  SetObjectPos (obj, pos);
}

function closeCalendarInfo ()
{
  var obj = GetObjectByRef ("CalendarDetail");
  obj.style.display = "none";
}

function GetFullInfo (fromDate, toDate, shortInfo, location, remarks)
{
  if (location == "")
    var rowSpanCount = 2;
  else
    var rowSpanCount = 3;
  var result = "<tr class=\"CalendarInfo\"><th rowspan="+ rowSpanCount +" class=\"CalendarTag\">";
  var beginA = "";
  var eindA = "";
  var datum = geefDatum (fromDate, toDate);
  var locationText = "";
  if (location != "")
    locationText += "Locatie: " + location + "; ";
  if (remarks != "")
  {
    var re = /&/g;
    var r = remarks.replace (re, "&amp;");
    var re = /\"/g;
    var r = remarks.replace (re, "&quot;");
    re = /\'/g;
    r = r.replace (re, "&rsquo");
    re = /\n/g;
    r = r.replace (re, "<br />");
    re = /\r/g;
    r = r.replace (re, "");
    beginA = "<a href=\"javascript:showCalendarInfo('<h1>" + shortInfo + " <span class=geenVet>(" + locationText + datum + ")</span></h1>" + r + "')\">";
    result += beginA;
  }
  //result += "<img src=\"images/page.gif\" height=\"26\" border=\"0\" />";
  if (remarks != "")
  {
    eindA = "</a>";
    result += eindA;
  }
  result += "</th>";
  result += "<td class=\"CalendarTitle\">" + beginA + shortInfo + eindA + "</td></tr>";
  if (location != "")
    result += "<tr class=\"CalendarInfo\"><td class=\"CalendarLocation\">Locatie: " + location + "</td></tr>";
  result += "<tr class=\"CalendarInfo\"><td class=\"CalendarDate eindCalendarItem\">";
  result += datum;
  result += "</td></tr>";
  return result;
}

function geefDatum (fromDate, toDate)
{
 var result = "";
 if (fromDate.getFullYear () == toDate.getFullYear ())
  {
    if (fromDate.getMonth () == toDate.getMonth ())
    {
      if (fromDate.getDate () == toDate.getDate ())
        result += weekdays [fromDate.getDay ()] + " " + fromDate.getDate ();
      else
        result += fromDate.getDate () + "-" + toDate.getDate ();
      result += " " + months [fromDate.getMonth ()] + " " + fromDate.getFullYear ();
      if (fromDate.getHours () != 0 || fromDate.getMinutes () != 0)
      {
        result += " " + CalenderShowHours (fromDate)
        if (fromDate.getHours () != toDate.getHours () || fromDate.getMinutes () != toDate.getMinutes ())
          result += " - " + CalenderShowHours (toDate);
      } // if
    }
    else
    {
      result += " " + fromDate.getDate () + " " + months [fromDate.getMonth ()];
      if (fromDate.getHours () != 0 || fromDate.getMinutes () != 0)
        result += " " + CalenderShowHours (fromDate);
      result += " - " + toDate.getDate () + " " + months [toDate.getMonth ()];
      if (toDate.getHours () != 0 || toDate.getMinutes () != 0)
        result += " " + CalenderShowHours (toDate);
    }
  }
  else
  {
    result += fromDate.getDate () + " " + months [fromDate.getMonth ()] + " " + fromDate.getFullYear ();
    if (fromDate.getHours () != 0 || fromDate.getMinutes () != 0)
      result += " " + CalenderShowHours (fromDate);
    result += " - " + toDate.getDate () + " " + months [toDate.getMonth ()] + " " + toDate.getFullYear ();
    if (toDate.getHours () != 0 || toDate.getMinutes () != 0)
      result += " " + CalenderShowHours (toDate);
  }
  return result
}

var calendarRequest = null;

function updateCalendar ()
{
  try
  {
    if (calendarRequest)
    {
      if (calendarRequest.request.readyState == 4  && calendarRequest.request.status == 200)
      {
        var days = GetElementsByName ("calendarDate");
        for (var daysIndex in days)
        {
          var daysItem = days [daysIndex];
          if (typeof (daysItem) == "object" && HasClassName (daysItem))
            SetClassName (daysItem, GetClassName (daysItem).replace ("Activity",""));
        } // for
        var result = calendarRequest.request.responseText;
        var fullInfo = "";
        var parts = result.split ("\1");
        var frame = parts [0];
        for (var i = 1; i + 5 <= parts.length;i+=5)
        {
          var fromDate = CalendarParseDate (parts [i]);
          var toDate = CalendarParseDate (parts [i + 1]);
          MarkDays (fromDate, toDate);
          //window.alert (fromDate, toDate);
          fullInfo += GetFullInfo (fromDate, toDate, parts [i + 2], parts [i + 3], parts [i + 4]);
        } // for
        var info = GetObjectByRef (frame + "Info");
        if (info)
          info.innerHTML = "<table class=\"" + frame + "Info\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" >" + fullInfo + "</table>";
        calendarRequest = null;
      }
    }
  }
  catch (e)
  {
    alert (e.toString ());
  }
}


function retrieveCalendar (frame, month, year)
{
  calendarRequest = new CAjax ();
  calendarRequest.Get (updateCalendar, "code/calendar/getCalendar.php?Month=" + (year * 100 + month) + "&Frame=" + frame);
}

function showMonth (frame, month, year)
{
  calendarTxt = "";
  toDay = new Date ();
  thisMonth = new Date (year, month - 1, 1);
  if (month <= 11)
    nextMonth = new Date (year, month, 1);
  else
    nextMonth = new Date (year + 1, 0, 1);
  if (month > 0)
    prevMonth = new Date (year, month - 2, 1);
  else
    prevMonth = new Date (year - 1, 11, 1);

  writeDate ("<table border=\"0\" class=\"" + frame + "MonthHead\" cellpadding=\"0\" ><tr>");
  writeDate ("<td class=\"calendarMonthPrev\"><a href=\"javascript:showMonth('"+ frame + "', " + (prevMonth.getMonth () + 1) + "," + prevMonth.getFullYear () + ");\" class=\"calendarMonth\" >&lt;" + monthsAbbr [prevMonth.getMonth()]);
  if (frame == "Calendar")
     writeDate (" " + prevMonth.getFullYear ());
  writeDate ("</a></td>");
  writeDate ("<td align=\"center\" class=\"calendarMonthTitle\">" + months [thisMonth.getMonth ()]);
  if (frame == "Calendar")
    writeDate (" " + thisMonth.getFullYear ());
  writeDate ("</td>");
  writeDate ("<td align=\"right\" class=\"calendarMonthPrev\"><a href=\"javascript:showMonth('"+ frame + "', " + (nextMonth.getMonth () + 1) + "," + nextMonth.getFullYear () + ");\" class=\"calendarMonth\" >" + monthsAbbr [nextMonth.getMonth ()]);
  if (frame == "Calendar")
    writeDate (" " + nextMonth.getFullYear ())
  writeDate ("&gt;</a></td>");
  writeDate ("</tr></table>\n");

  firstday = thisMonth.getDay ();
  if (firstday == 0)
    firstday = 6;
  else
    --firstday;

  days = getDaysAMonth (thisMonth);
  lastday = nextMonth.getDay () - 1;
  if (lastday < 0)
    lastday = 6;
  
  writeDate ("<table border=\"0\" cellpadding=\"0\" class=\"" + frame + "\"><tr><td class=\"" + frame + "Head\" >Ma</td><td class=\"calendarHead\" >Di</td><td class=\"calendarHead\" >Wo</td><td class=\"calendarHead\" >Do</td><td class=\"calendarHead\" >Vr</td><td class=\"calendarHead\" >Za</td><td class=\"calendarHead\" >Zo</td></tr>\n");
  writeDate ("<tr>");
  dayMonth = getDaysAMonth (prevMonth) - firstday + 1;
  prevMon = prevMonth.getMonth () + 1; prevYear = prevMonth.getFullYear ();
  nextMon = nextMonth.getMonth () + 1; nextYear = nextMonth.getFullYear ();
  for (day = 0; day < firstday; ++day, ++dayMonth)
    writeDate (showDayInfo (dayMonth, prevMon, prevYear, "PrevMonth"));
  dayMonth = 1;
  for (;day <= 6; ++day, ++dayMonth)
    if (toDay.getDate () == dayMonth && toDay.getMonth () + 1 == month && toDay.getFullYear () == year)
      writeDate (showDayInfo (dayMonth, month, year, "ThisDay"));
    else
      writeDate (showDayInfo (dayMonth, month, year, "ThisMonth"));
  writeDate ("</tr>\n");
  for (;dayMonth <= days;)
  {
    writeDate ("<tr>\n");
    for (day = 0; day <= 6 && dayMonth <= days; ++dayMonth, ++day)
      if (toDay.getDate () == dayMonth && toDay.getMonth () + 1 == month && toDay.getFullYear () == year)
        writeDate (showDayInfo (dayMonth, month, year, "ThisDay"));
      else
        writeDate (showDayInfo (dayMonth, month, year, "ThisMonth"));
    prevMon = nextMonth.getMonth () + 1; prevYear = nextMonth.getFullYear ();
    for (dayMonthL = 1; day <= 6; ++day, ++dayMonthL)
    {
      writeDate (showDayInfo (dayMonthL, nextMon, nextYear, "NextMonth"));
    }
    writeDate ("</tr>\n");
  }
  writeDate ( "</table>\n");
  GetObjectByRef (frame).innerHTML = calendarTxt;
  retrieveCalendar (frame, month, year);
}


