function Event(title, desc, url, author, date) {
	this.title = title;
	this.desc = desc;
	this.url = url;
	this.author = author;
	var tmp = new Array();
	tmp = date.split(";");
	this.d = tmp[0];
	this.m = tmp[1];
	this.y = tmp[2];
	this.th = tmp[3];
	this.tm = tmp[4];
}

var dd = new Date();
var dt;
var dm;
var dy;
var fixt;
var fixm;
var fixy;
var eventdate = new Array(31);
var eventlink = './ajax.php?t=events';
var language = 'de';

function setEventlink(url)
{
	eventlink=url;
}	
function setLanguage(lang)
{
	language = lang;
}

function getDatum(url)
{
	var xmlHttp = false;
	try{xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");}
	catch(e){
		try{xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");}
		catch(e){xmlHttp  = false;}
	}
	if (!xmlHttp  && typeof XMLHttpRequest != 'undefined'){xmlHttp = new XMLHttpRequest();}
	try 
	{
		if (xmlHttp)
		{
			xmlHttp.open('GET', url, true);
			xmlHttp.onreadystatechange = function ()
			{
				if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
				{
					var tmp=new Array();
					tmp = xmlHttp.responseText.split(";");
					initKalender(parseInt(tmp[0]),parseInt(tmp[1]),parseInt(tmp[2]));
				}
			};
			xmlHttp.send(null);
		}
	}
	catch(e){}
}
function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}
function newMonth(offset)
{
	dm = dm + offset;
	if(dm > 11) {
		dm = 0;
		dy++;
	} else if(dm < 0) {
		dm = 11;
		dy--;
	}
}

function GetXmlHttpObject()
{ 
	var objXMLHttp=null;
	if (window.XMLHttpRequest)
	{
		objXMLHttp=new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	return objXMLHttp;
}

function getEvents(url,offset)
{
	newMonth(offset);
	document.getElementById("monat").innerHTML = '<img src="./img/load.gif" alt="Loading..." />';
	var xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null)
	{
		alert ("Browser does not support HTTP Request");
		return
	}
	xmlHttp.onreadystatechange=function () 
	{ 
		if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
		{
			xmlDoc=xmlHttp.responseXML.getElementsByTagName("channel")[0].getElementsByTagName("item");
			for(var i=0;i<31;i++)eventdate[i]=null;
			var ausgabe = '';
			for(var i = 0; i < xmlDoc.length; i++)
			{
				var itemdate = new String(xmlDoc[i].getElementsByTagName("date")[0].childNodes[0].nodeValue);
				var tmp = new Array();
				tmp = itemdate.split(";");
				if(tmp[1]==dm+1)
				{
					eventdate[tmp[0]-1]=new Event(
						xmlDoc[i].getElementsByTagName("title")[0].childNodes[0].nodeValue,
						xmlDoc[i].getElementsByTagName("description")[0].childNodes[0].nodeValue,
						xmlDoc[i].getElementsByTagName("link")[0].childNodes[0].nodeValue,
						xmlDoc[i].getElementsByTagName("author")[0].childNodes[0].nodeValue,
						xmlDoc[i].getElementsByTagName("date")[0].childNodes[0].nodeValue);
				}
			}
			kalender(offset);
		}
	};
	xmlHttp.open("GET",url+'&m='+(dm+1)+'&y='+dy,true);
	xmlHttp.send(null);
}
function showEvent(day)
{
	document.location.href='event.php?kalendersend='+day+"."+(dm+1)+"."+dy;
}
function initKalender(t, m, y)
{
	dt = t;
	dm = m;
	dy = y;
	fixt = t;
	fixm = m;
	fixy = y;
	getEvents(eventlink,0);
}

function kalender(offset)
{
	if(language == 'de')
		var Monatsname = new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
	document.getElementById("monat").innerHTML = Monatsname[dm] + " " + dy;
	var ausgabe = "";
	var d = new Date();
	d.setDate(1);
	d.setMonth(dm);
	d.setYear(dy);
	ausgabe += '<table class="kalendertable" cellspacing="0" cellpadding="0">';
	ausgabe += '<tr class="wochentage">';
	ausgabe += '<td>Mo</td><td>Di</td><td>Mi</td><td>Do</td><td>Fr</td><td>Sa</td><td>So</td>';
	ausgabe += '</tr>';
	var start = d.getDay();
	var count = 1;
	if(start == 0) start = 7;
	ausgabe += '<tr>';
	for(i = 1; i < start; i++)ausgabe += '<td class="leer"></td>';
	for(i = start; i < 8; i++, count++)
	{
		ausgabe += '<td';
		if(count == fixt && dm == fixm && dy == fixy) ausgabe += ' id="heute"';
		else if(eventdate[count-1]!=null){ausgabe += ' class="event"';}
		ausgabe += '><a href="javascript:showEvent('+count+');">';
		if(count < 10) ausgabe += '0';
		ausgabe += count + '</a></td>';
	}
	ausgabe += '</tr>';
	
	for(j = 0; j < 5 && count < 32; j++)
	{
		ausgabe += '<tr>';
			for(i = 0; i < 7 && count <= getDaysOfMonth(dm, dy); i++, count++)
			{
				ausgabe += '<td';
				if(count == fixt && dm == fixm && dy == fixy){ ausgabe += ' id="heute"';}
				else if(eventdate[count-1]!=null){ ausgabe += ' class="event"';}
				ausgabe += '><a href="javascript:showEvent('+count+');">';
				if(count < 10) ausgabe += '0';
				ausgabe += count+'</a></td>';
			}
		ausgabe += '</tr>';
	}
	
	ausgabe += '</table>';
	document.getElementById("kalendertable").innerHTML = ausgabe;
}

function getDaysOfMonth(m, y)
{
	var daysPerMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31)
	if(m == 1)
	{
		if(isLeapYear(y))return 29;
		else return 28;
	}
	else return daysPerMonth[m];
}

function isLeapYear(y)
{
	if(y % 4 == 0)
	{
		if( (y % 100 > 0) || (y % 400 == 0) )return true;
	}
	else return false;
}

