function createCalFor(y,m,dates){
	var date = new Date(y,m);
	var now = new Date();
	var corr = (now.getYear()<1000?1900:0); // wtf getYear = 109 in Browser außer IE ?? 
	now = new Date((corr+now.getYear()), now.getMonth(), now.getDate());
	var months = new Array("Januar", "Februar", "M&auml;rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
	var cal = (6*7);	
		
	var lastDay = getLastDay(date.getYear(), date.getMonth());			
	var lastDayLastMonth = getLastDay(date.getYear(), date.getMonth()-1);
	var weekDayOfFirstDay = (date.getDay()==0?7:date.getDay()); // wochentag# des 1. des monats
	var daysFromLastMonth = weekDayOfFirstDay-1; // restliche wochentage von altem monat anzeigen			
	if(daysFromLastMonth == 0){ daysFromLastMonth=7; } // wenn 01. montag, trotzdem letzte vormonat woche anzeigen
	
	var today = new Date();
	today = new Date((corr+today.getYear()), today.getMonth(), today.getDate()); // today nochmal zusammenbauen ohne Uhrzeit
	
	// Bis zum Monatsletzen
	var nowL = today.getDate();
	var yearL = today.getYear();
	var monthL = today.getMonth();
	var leftL;		

	var output = "";
	output += '<div id="calhead"><a class="ar_l" href="javascript:void(0);" onclick="javascript:setCalFor(' + (date.getYear()+corr) + ',' + (date.getMonth()-1) + ');">&nbsp;</a>&nbsp;&nbsp;' + months[date.getMonth()] + ' ' + (date.getYear()+corr) + '&nbsp;&nbsp;<a  class="ar_r" href="#" onclick="javascript:setCalFor(' + (date.getYear()+corr) + ',' + (date.getMonth()+1) + ')">&nbsp;</a></div>';
	output += '<table id="caltab" border="0" cellspacing="1" cellpadding="0"><tr><td class="gr">KW</td><td>Mo</td><td>Di</td><td>Mi</td><td>Do</td><td>Fr</td><td>Sa</td><td>So</td></tr><tr>';
				
	var counter = lastDayLastMonth-daysFromLastMonth+1;
	var comparison = lastDayLastMonth;
	var curMonth = false;
	var mrange = 0;
	
	for(var i=0;i<cal;i++){
		var y = (corr+date.getYear());
		var m = (mrange==0?(date.getMonth()-1):(mrange==2?(date.getMonth()+1):date.getMonth()));				
		var d = counter;
		var act = new Date(y,m,d);				
		if(i==0 || i % 7 == 0){ output += '<td class="gr">' + kalw(y,m,d) + '</td>'; }
		output += '<td ';
		var clas = "";
		var tooltip = "";
		/********* Zellenfarben *************/
	
		/****** Vorheriges + nächstes Monat .gr (grau) */
		var clas = 'calCenterCell ' + (!curMonth?'gr':'');		
		var tooltip_clas = "";
		var tooltip_date = ((d.toString().length==1)?("0"+d):d) + "." + ((m.toString().length==1)?("0"+(m+1)):m+1) + "." + y;
		var tooltipAlreadySet = false;
		var evLink = "";
		
		/***** Daten *********************/
		for(var j=0;j<dates.length;j++){
			if(compDate(act,dates[j][1]) && !tooltipAlreadySet){
				/*clas += ' ' + dates[j][0];
				tooltip_clas = clas + '_TT';
												
				if (compDate(act, today) && clas != " today") clas += ' today';				
				
				tooltip_date+= (dates[j][4] != ".." && dates[j][4] != null)?" - "+dates[j][4]:"";								
				
				if (dates[j][5] != "" && dates[j][5] != null) {
					tooltip = tooltip + '<div class="calTooltip ' + tooltip_clas + '">' + tooltip_date + "<br />" + dates[j][5] + "<br />" + dates[j][3] + '</div>';
					tooltipAlreadySet = true;
					evLink = "p-"+dates[j][6]+".html?y="+y+"&m="+(m+1*1)+"#ter"+dates[j][7];
				}	*/
				if (tooltip == "") {
					clas += ' ' + dates[j][0];
					tooltip_clas = clas + '_TT';
													
					if (compDate(act, today) && clas != " today") clas += ' today';
					tooltip+= "<div class='calTooltip'>";
				}
				
				if (dates[j][5] != "" && dates[j][5] != null) {
					var tooltip_date = ((d.toString().length==1)?("0"+d):d) + "." + ((m.toString().length==1)?("0"+(m+1)):m+1) + "." + y;
					tooltip_date+= (dates[j][4] != ".." && dates[j][4] != null)?" - "+dates[j][4]:"";
					
					evLink = "p-"+dates[j][6]+".html?y="+y+"&m="+(m+1*1)+"#ter"+dates[j][7];
					
					if (act >= now) tooltip = tooltip + '<a href="' + evLink + '">';
					tooltip = tooltip + '<div class="' + dates[j][0] + '_TT" style="border-bottom:1px solid white"><b>' + tooltip_date + "</b><br />" + dates[j][5] + "<br />" + dates[j][3] + '</div>';
					if (act >= now) tooltip = tooltip + '</a>';
				}
			}
		}
		
		if (tooltip != "") tooltip += '</div>';
		
		output += (clas?' class="' + trim(clas) + '"':'');
		output += '>';

		//output += (clas!="gr" && clas!="" && clas!=" today"?'<a href="' + evLink + '">' + counter + '</a>' + tooltip:counter);
		output += (clas!="gr" && clas!="" && clas!=" today"?'<a href="#">' + counter + '</a>' + tooltip:counter);
		output += '</td>';
		
		if(counter==comparison){ 
			counter=0;
			mrange++;
			curMonth=!curMonth;
			comparison=lastDay;
		}
		counter++;
		if((i+1) % 7 == 0){
			output += '</tr><tr>';
		}
	}

	output += '</table>'; // daysFromLastMonth ' + daysFromLastMonth + '<br/>weekDayOfFirstDay ' + weekDayOfFirstDay;
	
	if (document.getElementById("calbody") != null)	document.getElementById("calbody").innerHTML = output;
}

function compDate(date1, date2){ // == vergleich funktioniert nicht
	return (date1.getYear()==date2.getYear() && date1.getMonth()==date2.getMonth() && date1.getDate()==date2.getDate())?true:false;
}

function getLastDay(Year, Month){
	return(new Date((new Date(Year, Month+1,1))-1)).getDate();
}

function kalw(j,m,t){
	var date=new Date(j,m,t);
	var doDate=donnerstag(date);
	var kwjahr=doDate.getFullYear();
	var doKW1=donnerstag(new Date(kwjahr,0,4));
	kw=Math.floor(1.5+(doDate.getTime()-doKW1.getTime())/86400000/7);
	return kw;
}

function donnerstag(datum) {
  var Do=new Date();
  Do.setTime(datum.getTime() + (3-((datum.getDay()+6) % 7)) * 86400000);
  return Do;
}