function getMonthName(index){
	switch(index){
		case 0: return 'Januar';	
		case 1: return 'Februar';
		case 2: return 'März';
		case 3: return 'April';
		case 4: return 'Mai';	
		case 5: return 'Juni';	
		case 6: return 'Juli';
		case 7: return 'August';
		case 8: return 'September';
		case 9: return 'Oktober';
		case 10: return 'November';
		case 11: return 'Dezember';
	}
}

function getMaxDaysOfMonth(index,year){
	switch(index){
		case 0: return 31;	
		case 1: if(isLeapYear(year)){ return 29; }else{ return 28; }
		case 2: return 31;
		case 3: return 30;
		case 4: return 31;	
		case 5: return 30;	
		case 6: return 31;
		case 7: return 31;
		case 8: return 30;
		case 9: return 31;
		case 10: return 30;
		case 11: return 31;
	}		
}

function isLeapYear(year){
	var leapYear = false;
	if(year%4 == 0){
		leapYear = true;
		if(year%100 == 0){
			leapYear = false;
			if(year%400 == 0){
				leapYear = true;	
			}
		}
	}
	return leapYear;
}

function position(xx){
  browser = navigator.appName.toUpperCase();
  if(typeof window.innerWidth == 'undefined'){
    if(document.body.clientWidth - xx.clientX >= (document.getElementById('message').offsetWidth+10)){
      document.getElementById('message').style.right = document.body.clientWidth - xx.clientX - document.getElementById('message').offsetWidth+'px';
    }else{
      document.getElementById('message').style.right = document.body.clientWidth - xx.clientX + 'px';
    }
    document.getElementById('message').style.top = xx.clientY + 20 + document.documentElement.scrollTop + 'px';
  }else{
    if(window.innerWidth - xx.clientX >= (document.getElementById('message').offsetWidth+10)){
      document.getElementById('message').style.right = window.innerWidth - xx.clientX - document.getElementById('message').offsetWidth + 'px';
    }else{
      document.getElementById('message').style.right = window.innerWidth - xx.clientX + 'px';
    }
    document.getElementById('message').style.top = xx.clientY + 20 + window.pageYOffset + 'px';
  }
}

function formatDay(day,month,year,markCurrentDate,today){
	var istTermin = false;
	month += 1;
	for(k=0;k<termine.length;k++){
		if(year == termine[k]['year']){
			if(month ==	termine[k]['month']){
				if(day == termine[k]['day']){
					istTermin = true;
					if(day == today && markCurrentDate){
						return '<td class="aktTagMarkiert" onmousemove="position(event);" onmouseout="hideNote();" onmouseover="showNote('+day+','+month+','+year+');"><strong>'+day+'</strong></td>';
						break;
					}else{
						return '<td class="vollerTagMarkiert" onmousemove="position(event);" onmouseout="hideNote();" onmouseover="showNote('+day+','+month+','+year+');">'+day+'</td>';					
						break;
					}					
				}
			}
		}
	}
	if(!istTermin){
		if(day == today && markCurrentDate){
			return '<td class="aktTag"><strong>'+day+'</strong></td>';	
		}else{
			return '<td class="vollerTag">'+day+'</td>';					
		}
	}
}

function formatDayNoEvents(day,markCurrentDate,today){
	if(day == today && markCurrentDate){
		return '<td class="aktTag"><strong>'+day+'</strong></td>';	
	}else{
		return '<td class="vollerTag">'+day+'</td>';					
	}
}

function showNote(day, month, year){
	var content = '';
	for(var k=0;k<termine.length;k++){
		if(year == termine[k]['year']){
			if(month ==	termine[k]['month']){
				if(day == termine[k]['day']){
				   content += '<strong><em>'+termine[k]['what']+'</em></strong>, ';
				   content += termine[k]['day']+'. '+getMonthName(termine[k]['month']-1)+' '+termine[k]['year'];
				   if(termine[k]['hour'] != ''){
						  content += ' '+termine[k]['hour'];
				   }
				   if(termine[k]['minute'] != ''){
						  content += ':'+termine[k]['minute'];
				   }
				   if(termine[k]['hour'] != ''){
						  content += ' Uhr';
				   }					 
				   content += '<br />';
				   content += termine[k]['where'];
				   if(termine[k]['whereEx'] != ''){ 
					  content += ', '+termine[k]['whereEx'];
				   }
				}
			}
		}
	}
	document.getElementById('message').innerHTML = content;
	document.getElementById('message').style.visibility = 'visible';	
}

function hideNote(){
	document.getElementById('message').style.visibility = 'hidden';	
}

function drawCalendar(month, year, markEvents){
	var quelltext;
	var aktDatum = new Date();
	if(month == '-1'){
		month = aktDatum.getMonth(); 
	}else{
		month -= 1;	
	}
	if(year == '-1'){
		year = aktDatum.getFullYear();	
	}
	var markCurrentDate = false;
	var today = aktDatum.getDate();
	if(month == aktDatum.getMonth() && year == aktDatum.getFullYear()){
		markCurrentDate = true;
	}
	var ersterMonatstag = new Date(year,month,1);
	var ersterWochentag = ersterMonatstag.getDay();
	var lastDrawnDay = 0;
	var anzahlTage = getMaxDaysOfMonth(month,year);
	var restliche = 0;
	var backYear;
	var forwardYear;	
	var letzterMonat;
	var naechsterMonat;
	if(month == 0){
		letzterMonat = 11;
		backYear = year - 1;
	}else{
		letzterMonat = month-1;
		backYear = year;
	}
	if(month == 11){
		naechsterMonat = 0;
		forwardYear = year + 1;
	}else{
		naechsterMonat = month+1;
		forwardYear = year;
	}	
	var tageLetzterMonat = getMaxDaysOfMonth(letzterMonat);	
	var letztesJahr = year - 1;
	var naechstesJahr = year + 1;
	quelltext = '<table class="kalenderTable">';
	quelltext += '<tr>'
	quelltext += '<td class="kalenderNav"><a title="Letzter Monat" href="javascript:drawCalendar('+(letzterMonat+1)+','+backYear;
	if(markEvents){
		quelltext += ',true';	
	}else{
		quelltext += ',false';			
	}
	quelltext += ');">&laquo;</a></td>';
	quelltext += '<td class="heading" colspan="5">'+getMonthName(month)+' '+year+'</td>';
	quelltext += '<td class="kalenderNav"><a title="Nächster Monat" href="javascript:drawCalendar('+(naechsterMonat+1)+','+forwardYear;
	if(markEvents){
		quelltext += ',true';	
	}else{
		quelltext += ',false';			
	}																			  
	quelltext += ');">&raquo;</a></td>';	
	quelltext += '</tr>';
	quelltext += '<tr class="tagesnamen"><td>Mo</td><td>Di</td><td>Mi</td><td>Do</td><td>Fr</td><td>Sa</td><td>So</td></tr>';	
	quelltext += '<tr>';
	for(var i=0;i<=5;i++){
		if(i==0){
			if(ersterWochentag == 0){
				var leereAnfangszellen = 6; 	
			}else{
				var leereAnfangszellen = ersterWochentag-1;	
			}
			var ersterTag = tageLetzterMonat-(leereAnfangszellen-1);
			for(var j=ersterTag;j<(ersterTag+leereAnfangszellen);j++){
				quelltext += '<td class="leererTag">'+j+'</td>';	
			}
			for(j=1;j<=7-(leereAnfangszellen);j++){
				if(markEvents){
					quelltext += formatDay(j,month,year,markCurrentDate,today);
				}else{
					quelltext += formatDayNoEvents(j,markCurrentDate,today);
				}
			}
			quelltext += "</tr>";				
			lastDrawnDay = 7-(leereAnfangszellen);
		}else{
			if((anzahlTage-lastDrawnDay) >= 7){
				quelltext += '<tr>';
				for(j=(lastDrawnDay+1);j<=(lastDrawnDay+7);j++){
					if(markEvents){
						quelltext += formatDay(j,month,year,markCurrentDate,today);
					}else{
						quelltext += formatDayNoEvents(j,markCurrentDate,today);
					}	
				}
				lastDrawnDay = lastDrawnDay+7;
				quelltext += '</tr>';
			}else{
				if(lastDrawnDay < anzahlTage){
					quelltext += '<tr>';
					for(j=(lastDrawnDay+1);j<=anzahlTage;j++){
						if(markEvents){
							quelltext += formatDay(j,month,year,markCurrentDate,today);
						}else{
							quelltext += formatDayNoEvents(j,markCurrentDate,today);
						}	
					}
					var restliche = (7-(anzahlTage-lastDrawnDay));
					for(j=1;j<=restliche;j++){
						quelltext += '<td class="leererTag">'+j+'</td>';
					}
					quelltext += '</tr>';
					lastDrawnDay = anzahlTage;
				}else{
					quelltext += '<tr>';			
					for(j=(restliche+1);j<=restliche+7;j++){
						quelltext += '<td class="leererTag">'+j+'</td>';							
					}
					restliche = restliche+7;
					quelltext += '</tr>';					
				}
			}
		}
	}
	quelltext += "<tr style=\"text-align:center;\"><td colspan=\"7\"><a title=\"Kalender ausblenden\" href=\"javascript:hideCal();\"><img src='images/cross2.png' width='20' height='20' alt='Close' style='vertical-align:middle; position:relative; top:-1px; border:none;' /> Schlie&szlig;en</a></td></tr>";
	quelltext += "</table>";
	document.getElementById('calendarDiv').innerHTML = quelltext;
}
