var calColors = new Object();

function buildCal(m, y, cM, cH, cW, cDW, cD, active, colors)
{
	//var mn=['Januar','Februar','M&auml;rz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'];
	var dim=[31,0,31,30,31,30,31,31,30,31,30,31];

	var oD = new Date(y, m-1, 1); //DD replaced line to fix date bug when current day is 31st
	oD.od=oD.getDay(); //DD replaced line to fix date bug when current day is 31st

	var todaydate=new Date() //DD added
	var scanfortoday=(y==todaydate.getFullYear() && m==todaydate.getMonth()+1)? todaydate.getDate() : 0 //DD added

	dim[1]=(((oD.getFullYear()%100!=0)&&(oD.getFullYear()%4==0))||(oD.getFullYear()%400==0))?29:28;
	var t='<div class="'+cM+'"><table class="'+cM+'" cols="8" cellpadding="0" border="0" cellspacing="0"><tr align="center">';
	t+='<td colspan="8" align="center" class="'+cH+'">'+mn[m-1]+' - '+y+'</td></tr><tr align="center">';

	for(s=0;s<8;s++) t+='<td class="'+cDW+'">'+"wMDMDFSS".substr(s,1)+'</td>';
	
	t+='</tr><tr align="center">';
	
	for(i=1;i<=42;i++)
	{
	  var x=((i-oD.od>=0)&&(i-oD.od<dim[m-1]))? i-oD.od+1 : '&nbsp;';
	  var datestr = oD.getFullYear() + "-" + (oD.getMonth()+1) + "-" + x; 
	  if((i-1)%7==0) t+='<td class="'+cW+'">'+buildCalgetWeek(oD.getFullYear(),oD.getMonth(),i-oD.od+7)+'</td>';
	  if (calColors[datestr]) x='<div style="background-color: '+calColors[datestr]+';">'+x+'</div>';
	  if (x==scanfortoday) x='<span id="today">'+x+'</span>';
	  t+='<td class="'+cD+'" onclick="loadcontent(\'calcontent\', ajxbackend, {\'date\':\''+datestr+'\'}); buildCalHighlight(this, \''+active+'\')">'+x+'</td>';
	  if(((i)%7==0)&&(i<36)) t+='</tr><tr align="center">';
	}
	
	return t+='</tr></table></div>';
}
function buildCalHighlight(o, active)
{
  var cur = document.getElementById(active);
  if (cur) cur.id = '';
	o.id = active;
}
function buildCalgetWeek(year,month,day){
    //lets calc weeknumber the cruel and hard way :D
    //Find JulianDay 
    month += 1; //use 1-12
    var a = Math.floor((14-(month))/12);
    var y = year+4800-a;
    var m = (month)+(12*a)-3;
    var jd = day + Math.floor(((153*m)+2)/5) + 
                 (365*y) + Math.floor(y/4) - Math.floor(y/100) + 
                 Math.floor(y/400) - 32045;      // (gregorian calendar)
    //var jd = (day+1)+Math.Round(((153*m)+2)/5)+(365+y) + 
    //                 Math.round(y/4)-32083;    // (julian calendar)
    
    //now calc weeknumber according to JD
    var d4 = (jd+31741-(jd%7))%146097%36524%1461;
    var L = Math.floor(d4/1460);
    var d1 = ((d4-L)%365)+L;
    NumberOfWeek = Math.floor(d1/7) + 1;
    return NumberOfWeek;        
}



var calactive;
function updateCal (curmonth, curyear)
{
    
        calactive = curmonth+'-'+curyear;
    document.getElementById('cal').innerHTML = buildCal(curmonth ,curyear, "main", "month", "week", "daysofweek", "days", "daysactive");

        AjaxRequest.get(
          {
            'url':'/index.php?view='+ajxbackend+'-colors.ajx'+'&month='+curmonth+'&year='+curyear,
            'onSuccess':function(req){
                                            var xmldoc = req.responseXML;
                                            var node_content = xmldoc.getElementsByTagName('content')[0];
		        var lines = node_content.firstChild.data.split("\n");
                                            for (var i=0; i<lines.length;i++)
                                            {
                                              var line = lines[i].split('=');
                                              if (line.length == 2)
                                              {
                                                calColors[line[0]] = line[1];
                                              }
                                            }
                                            if (calactive == curmonth+'-'+curyear)
		        {
                                    	document.getElementById('cal').innerHTML = buildCal(curmonth ,curyear, "main", "month", "week", "daysofweek", "days", "daysactive");
                                            }
                                      }
          }
        );


    
    var prevmonth=curmonth-1;
    var prevyear=curyear;
    if (prevmonth < 1) { prevyear = prevyear-1; prevmonth = 12; }

    document.getElementById('calnavprev').innerHTML = '<a href="javascript:void(updateCal('+prevmonth+','+prevyear+'))">' + mn[prevmonth-1] + '</a>';

    var nextmonth=curmonth+1;
    var nextyear=curyear;
    if (nextmonth > 12) { nextyear = nextyear+1; nextmonth = 1; }
    
    document.getElementById('calnavnext').innerHTML = '<a href="javascript:void(updateCal('+nextmonth+','+nextyear+'))">' + mn[nextmonth-1] + '</a>';

}

var mn=['Januar','Februar','M&auml;rz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'];

var todaydate=new Date()
var curmonth=todaydate.getMonth()+1 //get current month (1-12)
var curyear=todaydate.getFullYear() //get current year


updateCal (curmonth, curyear)

