/**************************************************************
* calendar.js by Bernard Schulthess and Label Technologies SA *
*                                                             *
* this is not a shareware or a freeware                       *
* (c) 2006 Label Technologies SA - www.labeltechnologies.com  *
**************************************************************/

var __Cal = new Array();

function Calendar(idContainer) {
  this.id = __Cal.length;
  this.container = document.getElementById(idContainer);
  if(!this.container)
    return alert("No container for calendar");
  var today = new Date();
  this.day = today.getDate();
  this.month = this.displayedMonth = today.getMonth();
  this.year = this.displayedYear = today.getFullYear();
  if(arguments[1])
    this.onclick = arguments[1];
  this.lang = arguments[2] ? arguments[2].toLowerCase() : "fr";
  __Cal[this.id] = this;
}

Calendar.prototype.displayMonth = function(y, m) {
  this.displayedYear = y;
  this.displayedMonth = m - 1;
  this.drawCalendar();
}

Calendar.prototype.drawCalendar = function() {
  var table, tr, td, d, dat, nbD;
  
  this.container.innerHTML = '';
  
  table = document.createElement('TABLE');
  tr = table.insertRow(-1);
  for(var i=0; i<7; i++) {
    td = tr.insertCell(-1);
    td.style.textAlign = "center";
    td.style.fontWeight = "bold";
    td.innerHTML = this.arrDays[this.lang][i];
  }
  
  dat = new Date(this.displayedYear, this.displayedMonth, 1);
  d = dat.getDay();
  if(d == 0)
    d = 7;
  d = -d + 2;
  nbD = dat.getLastDateOfMonth();
  
  while(d <= nbD) {
    tr = table.insertRow(-1);
    for(var i=0; i<7; i++) {
      td = tr.insertCell(-1);
      td.style.textAlign = "right";
      if(d < 1 || d > nbD) {
        td.innerHTML = '&nbsp;';
      } else {
        td.style.cursor = "pointer";
        td.name = this.id;
        if(this.onclick) {
          td.onclick = function(ev) {
            var td = ev ? ev.target : window.event.srcElement;
            if(td.nodeType == 3)
              td = td.parentNode;
            var obj = __Cal[td.name];
            void(obj.onclick(obj.displayedYear, obj.displayedMonth + 1, parseInt(td.innerHTML)));
          };
        }
        if(d == this.day && this.year == this.displayedYear && this.month == this.displayedMonth)
          td.style.backgroundColor = "#D0EAD0";
        td.innerHTML = d;
      }
      d++;
    }
  }
  
  this.container.appendChild(table);
}

Calendar.prototype.arrDays = new Array();
Calendar.prototype.arrDays.en = ['M', 'T', 'W', 'T', 'F', 'S', 'S'];
Calendar.prototype.arrDays.fr = ['L', 'M', 'M', 'J', 'V', 'S', 'D'];

Date.prototype.isLeapYear = function() {
  var y = this.getFullYear();
  if(y % 4 == 0) {
    if(y % 400 == 0)
      return true;
    return (y % 100 == 0) ? false : true;
  }
  return false;
}

Date.prototype.getLastDateOfMonth = function() {
  switch(this.getMonth()) {
    case 1:
      return this.isLeapYear() ? 29 : 28;
    case 3:
    case 5:
    case 8:
    case 10:
      return 30;
    default:
      return 31;
  }
}

