
var CAL_DAYLENGTHS = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var CAL_CUR_MONTH;
var CAL_CUR_YEAR;
var CAL_ON_CHOOSE_DATE;
var CAL_ON_CLOSE;

function Calendar_Show(year, month, left, top) {
   var el_kalender         = document.getElementById('kalender');
   var el_kalender_iframe  = document.getElementById('kalender_iframe');
   el_kalender.style.top         = top + 'px';
   el_kalender.style.left        = left + 'px';
   el_kalender.style.visibility  = 'visible';

   el_kalender_iframe.style.top        = top + 'px';
   el_kalender_iframe.style.left       = left + 'px'; 
   el_kalender_iframe.style.visibility = 'visible';
   
   document.getElementById('day0_0').focus();
   Calendar_Redraw(year, month);
}

function Calendar_Hide() {
   var el_kalender = document.getElementById('kalender');
   var el_kalender_iframe = document.getElementById('kalender_iframe');

   el_kalender.style.visibility = 'hidden';
   el_kalender_iframe.style.visibility = 'hidden';

   if (CAL_ON_CLOSE) {
      CAL_ON_CLOSE();
   }
   return false;
}


function Calendar_Redraw(year, month) {
   CAL_CUR_MONTH = month;
   CAL_CUR_YEAR = year;
   document.getElementById('cal_month').innerHTML = month;
   document.getElementById('cal_year').innerHTML = year;
   month--;
   CAL_DAYLENGTHS[1] = ((year % 4==0) && ((year % 100!= 0) || (year % 400==0))) ? 29 : 28;
   //der erste Tag des Monats
   var start_date = new Date(year, month, 1);
   //der Wochentag 0 = sonntag, 1 = montag, 2 = dienstag, ...
   var start_weekday = start_date.getDay() - 1;
   start_weekday = (start_weekday == -1) ? 6 : start_weekday;
   for (var row = 0; row <=5; row++) {
      for (var col=0; col<=6; col++) {
         Calendar_SetDayValue(row,col,'');
      }
   }
   var row = 0;
   var today = new Date();
   for (var i=1; i<=CAL_DAYLENGTHS[month]; i++) {
      var index = i + start_weekday - 1;
      var row = parseInt(index / 7);
      var col = index % 7;
      Calendar_SetDayValue(row, col, i);
      if ( ( i     == today.getDate() ) &&
           ( month == today.getMonth()) ) {
         document.getElementById('tag' + row + '_' + col).className = 'tag_heute';    
      }
      else {
         document.getElementById('tag' + row + '_' + col).className = 'tag';
      }
   }
}

function Calendar_SetDayValue(row, col, value) {
   var elid = 'day' + row + '_' + col;
   document.getElementById(elid).innerHTML = value;
}

function Calendar_DecYear() {
   CAL_CUR_YEAR--;
   Calendar_Redraw(CAL_CUR_YEAR, CAL_CUR_MONTH);
   return false;
}
function Calendar_DecMonth() {
   CAL_CUR_MONTH--;
   if (CAL_CUR_MONTH == 0) {
      CAL_CUR_MONTH = 12;
      CAL_CUR_YEAR--;
   }
   Calendar_Redraw(CAL_CUR_YEAR, CAL_CUR_MONTH);
   return false;
}

function Calendar_IncMonth() {
   CAL_CUR_MONTH++;
   if (CAL_CUR_MONTH == 13) {
      CAL_CUR_MONTH = 1;
      CAL_CUR_YEAR++;
   }
   Calendar_Redraw(CAL_CUR_YEAR, CAL_CUR_MONTH);
   return false;
}

function Calendar_IncYear() {
   CAL_CUR_YEAR++;
   Calendar_Redraw(CAL_CUR_YEAR, CAL_CUR_MONTH);
   return false;
}

function Calendar_OnDayClick(ahrefel) {
   var s = ahrefel.innerHTML + '.' + CAL_CUR_MONTH + '.' + CAL_CUR_YEAR;
   if (CAL_ON_CHOOSE_DATE)  {
      CAL_ON_CHOOSE_DATE(s);
   }
   return false;
}

function Calendar_OnKeyDown(event, ael) {
   if (event.keyCode == CONST_KEY_ESCAPE) {
      Calendar_Hide();      
   }
}


