function Kalender(date,month,year,action)
{
  this.name = "";
  this.winopen = false;
  this.debug = false;
  this.lang = "nl";
  this.date = date;
  this.month = month;
  this.year = year;
  this.action = action;
  this.monthDays = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
  if ((this.year%4==0||this.year%100==0)&&(this.year%400==0))
    this.monthDays[1] = 29;
  else
    this.monthDays[1] = 28;
}
Kalender.dayName = new Array();
Kalender.dayName["en"] = new Array("S","M","Tu","W","Th","F","S");
Kalender.dayName["nl"] = new Array("Z","M","Di","W","Do","V","Z");
Kalender.dayName["de"] = new Array("So","M","T","M","Do","F","Sa");
Kalender.monthName = new Array();
Kalender.monthName["en"] = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
Kalender.monthName["nl"] = new Array("Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","Oktober","November","December");
Kalender.monthName["de"] = new Array("Januar","Februar","Marz","April","Mai","Juni","Juli","Augustus","September","Oktober","November","Dezember");
Kalender.prototype.GetNode = function() {
  var firstDate = new Date(this.year,this.month,1);
  var firstDay = firstDate.getDay();
  var dayCount = 1;
  var tbody = "";
  var regel = "";
  var kolom = "";
  var anchor = "";
  var span = "";

  var kalenderNode = document.createElement("table");
  kalenderNode.setAttribute("border", "1");
  kalenderNode.setAttribute("cols", "7");
  var tbody = NewElement(kalenderNode, "tbody");
  regel = NewElement(tbody, "tr");
  kolom = NewElement(regel, "td");
  kolom.setAttribute("vAlign", "top");
  anchor = NewAnchorHref(kolom,  "javascript:void(" + this.GetName() + ".PrevMonth())");
  anchor.setAttribute("className", "calnav");
  NewText(anchor, "<");

  kolom = NewElement(regel, "td");
  kolom.setAttribute("colSpan", 5);
  kolom.style.align="center";
  span = NewElement(kolom, "span");
  span.setAttribute("className","caldefault");
  NewText(span, Kalender.monthName[this.lang][this.month].toUpperCase()+" "+this.year);
  kolom = NewElement(regel, "td");
  kolom.setAttribute("vAlign", "top");
  anchor = NewAnchorHref(kolom, "javascript:void(" + this.GetName() + ".NextMonth())");
  anchor.setAttribute("className", "calnav");
  NewText(anchor, ">");
  regel = NewElement(tbody, "tr");
  for (var i=0;i<Kalender.dayName[this.lang].length;i++) {
    kolom = NewElement(regel, "td");
    kolom.style.align = "center";
    span = NewElement(kolom, "span");
    span.setAttribute("className", "caldefault");
    NewText(span, Kalender.dayName[this.lang][i]);
  }
  regel = NewElement(tbody, "tr");
  for (var i=0;i<firstDay;i++) {
    kolom = NewElement(regel, "td");
    NewText(kolom, " ");
  }
  var monthArg = this.month + 1;
  for (var i=0;i<this.monthDays[this.month];i++) {
    var styleStr = (dayCount == this.date) ? "caltoday" : "calday";
    kolom = NewElement(regel, "td");
    kolom.style.align = "center";
    anchor = NewAnchorHref(kolom, "javascript:void("+this.action+"("+dayCount+","+monthArg+","+this.year+"))");
    anchor.setAttribute("className", styleStr);
    span = NewElement(anchor, "span");
    span.setAttribute("className", styleStr);
    NewText(span, dayCount);

    dayCount++;
    if ((i+firstDay+1)%7==0&&(dayCount<this.monthDays[this.month]+1)) {
      regel = NewElement(tbody, "tr");
    }
  }
  var totCells = firstDay+this.monthDays[this.month];
  for (var i=0;i<(totCells>28?(totCells>35?42:35):28)-totCells;i++) {
    kolom = NewElement(regel, "td");
    NewText(kolom, " ");
  }

  return kalenderNode;
}
Kalender.prototype.Clear = function() {
  var calName = this.GetName();
  if (calName != null) {
    calName += "ID";
    var ca = document.getElementById(calName);
    if (ca == null) {
      return;
    }
    else if (ca.hasChildNodes()) {
      ca.replaceChild(document.createTextNode(" "), FirstChild(ca));
    }
  }
}
Kalender.prototype.Reprint = function() {
  var calName = this.GetName();
  if (calName != null) {
    calName += "ID";
    var ca = document.getElementById(calName);
    if (ca == null) {
      return;
    }
    else if (ca.hasChildNodes()) {
      ca.replaceChild(this.GetNode(),FirstChild(ca));
    } else {
      ca.appendChild(this.GetNode());
    }
  }
}
Kalender.prototype.PrevMonth = function() {
  this.month--;
  if (this.month < 0) {
    this.year--;
    this.month = 11;
  }
  this.Reprint();
}
Kalender.prototype.NextMonth = function() {
  this.month++;
  if (11 < this.month) {
    this.year++;
    this.month = 0;
  }
  this.Reprint();
}
Kalender.prototype.SetLang = function(lang) {
  this.lang = lang;
}
Kalender.prototype.GetLang = function()
{
  return this.lang;
}
Kalender.prototype.SetName = function(name) {
  this.name = name;
}
Kalender.prototype.GetName = function() {
  return this.name;
}
Kalender.prototype.SetWinopen = function(winopen) {
  this.winopen = winopen;
}
Kalender.prototype.GetWinopen = function() {
  return this.winopen;
}


