
function arrayOfDaysInMonth(isLeapYear) {
   this[0]  = 31;
   this[1]  = 28;
   if(isLeapYear) { this[1] = 29; }
   this[2]  = 31;
   this[3]  = 30;
   this[4]  = 31;
   this[5]  = 30;
   this[6]  = 31;
   this[7]  = 31;
   this[8]  = 30;
   this[9]  = 31;
   this[10] = 30;
   this[11] = 31;	
}

function getDaysInMonth(month, year) {
   var isLeapYear = (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0));
   var monthDays = new arrayOfDaysInMonth(isLeapYear);
   return monthDays[month];
}

function getMonthName(month) {
   var monthName = new arrayOfMonthNames();
   return monthName[month];	
}

function getDayName(day) {
   var dayName = new arrayOfDayNames();
   return dayName[day];	
}

function arrayOfMonthNames() {
   this[0]  = 'Januar';
   this[1]  = 'Februar';
   this[2]  = 'März';
   this[3]  = 'April';
   this[4]  = 'Mai';
   this[5]  = 'Juni';
   this[6]  = 'Juli';
   this[7]  = 'August';
   this[8]  = 'September';
   this[9]  = 'Oktober';
   this[10] = 'November';
   this[11] = 'Dezember';
}

function arrayOfDayNames() {
   this[0] = 'Sonntag';
   this[1] = 'Montag';
   this[2] = 'Dienstag';
   this[3] = 'Mittwoch';
   this[4] = 'Donnerstag';
   this[5] = 'Freitag';
   this[6] = 'Samstag';
   this[7] = 'Sonntag';   
}

function getKalender(id,msec,c,name,path,rw,ff) {
   var today = new Date(msec);
     
   return getKalenderTable(id,today,c,name,path,rw,ff);
}

function getNewKalender(id,month,year,c,name,path,rw,ff) {
   if(month == -1) { month = 11; year--; }
   else if(month==12) { month = 0; year++; }
   
   var today = new Date();
   today.setDate(1);
   today.setMonth(month);
   today.setFullYear(year);
   
   var cont = document.getElementById(id).parentNode.parentNode
   cont.getElementsByTagName('div')[0].innerHTML = getKalenderTable(id,today,c,name,path,rw,ff); 
}

function getKalenderTable(id,today,c,name,path,rw,ff) {
   var day   = today.getDate();
   var month = today.getMonth();
   var year  = today.getFullYear();
   
   var firstDay = today;
   firstDay.setDate(1);
   
   var startDay = firstDay.getDay();
   if(startDay==0) { startDay = 7; } 
   
	var numDays = getDaysInMonth(month,year);
   	var monthName = getMonthName(month);
     
   var str = '';
   str += '<table class="wsCalendarChooser" summary="Auswahlkalender für ';
   str += monthName + ' ' + year + '">';
   str += '<tr>';
   str += '<td class="wsPrev">';
   str += getNewKalenderLink(id,month-1,year,c,name,path,rw,ff);
   str += '<img src="' + path + rw + '" alt="&lt;" \/></td>';
   str += '<th colspan="5" id="';
   str += monthName.substr(0,3).toLowerCase() + '">';
   str += monthName + ' ' + year;
   str += '</th>';
   str += '<td class="wsNext">';
   str += getNewKalenderLink(id,month+1,year,c,name,path,rw,ff);   
   str += '<img src="' + path + ff + '" alt="&gt;" \/></a></td>';
   str += '</tr>';
   str += "\n";  
   str += '<tr>';
   for(var i = 1; i <= 7; i++) {   
      str += "\n";  
      str += getWeekDayHeader(i);
      str += "\n";        
   }
   str += '</tr>'
   
   str += "\n";  
      
   str += '<tr>';
   if((startDay-1) > 0) { str += '<td colspan="'+ (startDay-1) + '"></td>'; }
   //else if((startDay-1) == 0) { str += '<td></td>'; }
   
   var column = (startDay-1);
   var j = 0;
   for(var i = 1; i <= numDays; i++) {
      j = i%7;
      str += '<td headers="' + getDayName(j).substr(0,2).toLowerCase() + ' ' + monthName.substr(0,3).toLowerCase() + '"';
      if(column >= 5) { str += 'class="wsWeekendEL" '; }
      str += '>'
      str += getDateLink(c,name,i,month,year);
      str += i + '</a></td>';
      
      if(++column == 7) {
      	column = 0;
      	str += '</tr>';
      	str += "\n";
      	if(i!=numDays) { str += '<tr>'; }
      }
   }
   if(column != 0) { 
      if((7-column) > 1) {
      	str += '<td colspan="' + (7-column) + '">';
      }
      else { str += '<td>'; }   
      str += '</td></tr>';
   }
   str += '<tr><td colspan="7" class="wsCalendarClose"><a href="javascript:void(null);"';
   str += ' onclick="removeKalender(this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode); return false;"'
   str += ' title="Kalender schließen">X</a></td></tr>';
   str += '</table>';
   
   //alert(str);
   //str = '';
   return str;	
}

function getDateLink(c,name,i,month,year) {
   var str = '';
   
   str += '<a href="javascript:void(null)"';
   str += ' onclick="setDateField(';
   str += 'document.forms[' + c + '].elements[\'' + name + '\'],';
   str += '\'' + formatDate(i,month,year) + '\'';
   str += ');';
   str += ' return false;">';
      
   return str;
}
   
function getNewKalenderLink(id,month,year,c,name,path,rw,ff){
   var str = '';
   str += ' <a href="javascript:void(null)"';
   str += ' onclick="getNewKalender(';
   str += '\'' + id + '\',';
   str += month + ',' + year + ',';
   str += c + ',';
   str += '\'' + name + '\',';
   str += '\'' + path + '\',';
   str += '\'' + rw + '\',';
   str += '\'' + ff + '\'';
   str += ')\;"';
   str += ' return false;">';
   return str;
}   

function getWeekDayHeader(day) {
   var title = getDayName(day);
   var str = '';
   str += '<th id="' + title.substr(0,2).toLowerCase() + '">';
   str += '<acronym title="' + title + '">' + title.substr(0,2) + '</acronym>';
   str += '</th>';
   return str;
}

function formatDate(day,month,year) {
   var str = '';
   str += zeroIt(day) + '.' + zeroIt(month+1) + '.' + year;
   return str;
}

function zeroIt(zahl) {
   if(zahl < 10) { zahl = '0' + zahl; }
   return zahl;
}

function setDateField(elem,text) {
   elem.value = text;	
}	

function addKalender(id,stamp,path,rw,ff,elem) {
   var str = ''; var val = elem.value;
   var i = 0;
   for(; i < document.forms.length; i++) {
      if(elem.form == document.forms[i]) { break; }
   }
   str += getKalender(id,stamp,i,elem.name,path,rw,ff);
   //alert(document.getElementById(id).parentNode.parentNode.innerHTML);
   document.getElementById(id).parentNode.parentNode.innerHTML += '<div class="wsKalenderCont">' + str + '</div>';
   document.forms[i].elements[elem.name].value = val;
}

function removeKalender(node) {
  node.removeChild(node.lastChild);
}

function checkKalenderStatus(id) {
 var bool = false;
 bool = (document.getElementById(id).parentNode.parentNode.lastChild == document.getElementById(id).parentNode.parentNode.getElementsByTagName('div')[0])?false:true;
 return bool;  
}

/* Debug
addLoadEvent(
   function() {
      addKalender('wsInp07EL',1163687823000,'/codebase/nav/2006/fff_000/','zurueck.gif','vor.gif',document.forms[2].elements['zeit01']);
   }
);
*/

