//var plFile = "http://coli.lili.uni-bielefeld.de/cgi-bin/calendar.pl";
var plFile = "/cgi-bin/calendar.pl";

var xmlHttp = false;
var jetzt = new Date();
var DieserMonat = jetzt.getMonth() + 1;
var DiesesJahr = jetzt.getYear();
if (DiesesJahr < 999){ DiesesJahr += 1900; };
var DieserTag = jetzt.getDate();
var beschreibung = new Array();
	



//*******************************************************************

// Mozilla, Opera, Safari sowie Internet Explorer 7
if (typeof(XMLHttpRequest) != 'undefined') {
   xmlHttp = new XMLHttpRequest();
   xmlHttp.overrideMimeType('text/xml; charset=ISO-8859-1');
}

//*******************************************************************

if (!xmlHttp) {
  // Internet Explorer 6 und älter
  try {
    xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
  } catch(e) {
    try {
      xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
    } catch(e) {
      xmlHttp  = false;
    };
  };
}

//*******************************************************************

function sendRequest(thisMonth, thisYear, direction) {

    if(navigator.appName == "Microsoft Internet Explorer"){
	var body = document.getElementsByTagName("body")[0];
	body.removeChild(document.getElementById("calendar"));
	
	var newP = document.createElement("p");
	var pText = document.createTextNode("Calendar not available in IE.");
	newP.appendChild(pText);
	var newCal = document.createElement("div");
	newCal.setAttribute("id","calendar");
	newCal.appendChild(newP);
	body.appendChild(newCal);

	return "";
    };

    deleteButtons();

    if(isNaN(thisMonth)){ thisMonth = translateMonth(thisMonth) };
    thisYear = parseInt(thisYear);
    
    var nextMonth = thisMonth+1;
    var previousMonth = thisMonth-1;
    var nextYear = thisYear;
    var previousYear = thisYear;

    if(thisMonth == 1){
	previousMonth = 12;
	previousYear = thisYear-1;
    };
    if(thisMonth == 12){
	nextMonth = 1;
	nextYear = thisYear+1;
    };


    if(direction == "backward"){
	buildCalendar(previousMonth,previousYear);
	xmlHttp.open('get', plFile+'?month='+previousMonth+'&year='+previousYear);
    } 
    else{
	if(direction == "forward"){
		buildCalendar(nextMonth,nextYear);
		xmlHttp.open('get', plFile+'?month='+nextMonth+'&year='+nextYear);
    	} else{
    		buildCalendar(thisMonth,thisYear);
		xmlHttp.open('get', plFile+'?month='+thisMonth+'&year='+thisYear);
    	};
    };
  

    //**********XML-Dokument wird durch Perl-Skript erstellt**********
    
    xmlHttp.onreadystatechange = handleResponse;
    xmlHttp.send(null);

        
}


//*******************************************************************

function handleResponse () {
	
    if(xmlHttp.readyState == 4){
	response = xmlHttp.responseXML;
	analyseXML(response);
    };

}


//*******************************************************************

function analyseXML (XMLdoc) {
    
/*****Informationen aus dem durch Perl-Skript erstellten XML-Dokument ziehen *******/

	
	var dateN = XMLdoc.getElementsByTagName("DATUM").length;

	
	for(var x=0; x<dateN; x++){
	    var datum = XMLdoc.getElementsByTagName("DATUM")[x];
	    var tag = datum.getAttribute("tag");
	    var monat = datum.getAttribute("monat");
	    var jahr = datum.getAttribute("jahr");

		var titel = XMLdoc.getElementsByTagName("DATUM")[x].getElementsByTagName("TITEL")[0].firstChild.data;
		
		var anzKinder = XMLdoc.getElementsByTagName("DATUM")[x].getElementsByTagName("BESCHREIBUNG")[0].childNodes.length;

		var newP = document.createElement("p");

		for(var i=0;i<anzKinder;i++){
			newP.appendChild(XMLdoc.getElementsByTagName("DATUM")[x].getElementsByTagName("BESCHREIBUNG")[0].childNodes[i]);
		};
		
		beschreibung[x] = newP;
		
		var oldTdContent = document.getElementById("td"+tag).firstChild;
		document.getElementById("td"+tag).removeChild(oldTdContent);
		
		if(tag==DieserTag && monat==DieserMonat && jahr==DiesesJahr){
		    document.getElementById("td"+tag).setAttribute("style","background-color: #D2FF00;text-align:center;cursor:pointer;");
		} else{
		    document.getElementById("td"+tag).setAttribute("style","background-color: #BEFFBE;text-align:center;cursor:pointer;");	
		};
		
		
		var aNewText = document.createTextNode(tag);
		document.getElementById("td"+tag).appendChild(aNewText); 
		document.getElementById("td"+tag).setAttribute("title",titel);
		document.getElementById("td"+tag).setAttribute("onclick","showDate('"+tag+"','"+titel+"','"+x+"');");

	};

	printButtons();
}


//*******************************************************************

function translateMonth(monat){

	Months = new Object();

	Months["January"] = 1;
	Months["February"] = 2;
	Months["March"] = 3;
	Months["April"] = 4;
	Months["May"] = 5;
	Months["June"] = 6;
	Months["July"] = 7;
	Months["August"] = 8;
	Months["September"] = 9;
	Months["October"] = 10;
	Months["November"] = 11;
	Months["December"] = 12;
	
	if(isNaN(monat)){
		return parseInt(Months[monat]);	
	} else{
		for(var monthName in Months){
			if(Months[monthName] == monat){
				return monthName;
			};
		};
	};
	
}


//*******************************************************************

function buildCalendar(Monat, Jahr) {


	//**********Ausgabe des Kalenders startet**********
	var start = 0;
    	var monatLaenge = document.getElementById("monatsname").firstChild.nodeValue.length;
    	var monatText = translateMonth(Monat);
    	document.getElementById("monatsname").firstChild.replaceData(start, monatLaenge, monatText);

    	var jahrLaenge = document.getElementById("jahr").firstChild.nodeValue.length;    	
    	document.getElementById("jahr").firstChild.replaceData(start, jahrLaenge, Jahr);


	
  	var Zeit = new Date(Jahr, Monat - 1, 1);
  	var Start = Zeit.getDay();
  	if (Start > 0) {
    		Start--;
  	} else {
    		Start = 6;
  	};
  	var Stop = 31;
  	if (Monat == 4 || Monat == 6 || Monat == 9 || Monat == 11){ --Stop; };
	
  	if (Monat == 2) {
    		Stop = Stop - 3;
    		if (Jahr % 4 == 0){ Stop++; };
    		if (Jahr % 100 == 0){ Stop--; };
    		if (Jahr % 400 == 0){ Stop++; };
  	};

  	var Tageszahl = 1;
  	for (var i = 0; i<=5; i++) {
 
		/********gewünschtes TR (Tabellenzeile wird angesprochen)*********/
		var trNum = i+1;
		var diesTr = document.getElementById("row"+trNum); 


		/**********erstmal Kindelemente des TR-Elements löschen********/
		var nChilds = document.getElementById("row"+trNum).childNodes.length; 
		for(var x=0;x<nChilds;x++){
			var aktChild = document.getElementById("row"+trNum).childNodes[0];
			diesTr.removeChild(aktChild);
		};
		

		/*********Schleife für die Wochentage***********/
    		for (var j = 0; j <= 5; j++) {
      			if ((i == 0) && (j < Start)) {
				newTd = bildeZelle(" ",0,i+1);
				diesTr.appendChild(newTd);
      			} else {
        			if (Tageszahl > Stop) {
        	  			newTd = bildeZelle(" ",0,i+1);
					diesTr.appendChild(newTd);
        			} else {
        	  			if ((Jahr == DiesesJahr) && (Monat == DieserMonat) && (Tageszahl == DieserTag)) {
       		     				newTd = bildeZelle(Tageszahl,"true",i+1);
						diesTr.appendChild(newTd);
        	  			} else {
        	    				newTd = bildeZelle(Tageszahl,0,i+1);
						diesTr.appendChild(newTd);
        	  			}
        	  			Tageszahl++;
        			}
      			}
    		}

		/********hier werden die Sonntage eingetragen************/
    		if (Tageszahl > Stop) {
      			newTd = bildeZelle(" ",0,7);
			diesTr.appendChild(newTd);
    		} else {
      			if ((Jahr == DiesesJahr) && (Monat == DieserMonat) && (Tageszahl == DieserTag)) {
      	  			newTd = bildeZelle(Tageszahl,"true",7);
				diesTr.appendChild(newTd);
      			} else {
        			newTd = bildeZelle(Tageszahl,0,7);
				diesTr.appendChild(newTd);
      			}
      			Tageszahl++;
    		}
  	}

}


//*******************************************************************

function bildeZelle(Tageszahl,heuteBool,zellenZahl){

	var newTd = document.createElement("td");

	newTd.style.backgroundColor = "transparent";
	newTd.style.textAlign = "center";


	if(zellenZahl==7){
	    newTd.style.backgroundColor = "#FFC8C8";
	};

	if(heuteBool == "true"){ 
	    newTd.style.backgroundColor = "#FFFF00";
	    newTd.setAttribute("title","today"); 
	};


	var newTdChild = document.createTextNode(Tageszahl);
	newTd.setAttribute("id", "td"+Tageszahl);
	newTd.appendChild(newTdChild);

	return newTd;
}



function showDate(date,titel,beschreibungX) {

  var monat = document.getElementById("monatsname").firstChild.data;
  var jahr = document.getElementById("jahr").firstChild.data;  

  var dateInfo = document.getElementById("dateInfo");

  var state = dateInfo.style.display;

  if(state == 'block'){
	dateInfo.style.display = "none";
  } else{	
  	if(document.getElementById("dateInfoText")){ dateInfo.removeChild(document.getElementById("dateInfoText")); };
 	var newDateInfoDiv = document.createElement("div");
 	newDateInfoDiv.setAttribute("id","dateInfoText");
  	var newTitle = document.createElement("h1");
  	var newTitleText = document.createTextNode(titel);
  	newTitle.appendChild(newTitleText);
  	newDateInfoDiv.appendChild(newTitle);
  	var newDate = document.createElement("h2");
  	var newDateText = document.createTextNode(jahr+", "+monat+", "+date+":");
  	newDate.appendChild(newDateText);
  	newDateInfoDiv.appendChild(newDate);
  	newDateInfoDiv.appendChild(beschreibung[beschreibungX]);
  	dateInfo.appendChild(newDateInfoDiv);
  	dateInfo.style.display = "block";  	
  };

  /*******Variante, die mit Frames nicht funktioniert******** 
  newWindow = window.open("about:blank", "Date: "+date, "width=400,height=200,left=80,top=100");
  parent.newWindow.document.write('<html>\n\t<head>\n\t\t<title>' + titel + '</title>\n\t</head>\n\t<body>\n\t\t<h4>'+jahr+', '+monat+', '+date+':</h4>\n\t\t<p>'+ titel + '</p>\n\t</body>\n</html>');
  newWindow.document.getElementsByTagName("body")[0].appendChild(beschreibung[beschreibungX]);
  newWindow.document.close();
  ************/
  
}


function printButtons(){

	var backImg = document.createElement("img");
	backImg.setAttribute("src","images/arrow_left_white.gif");
	backImg.setAttribute("title","previous month");
	backImg.setAttribute("id","monthBack");
	backImg.setAttribute("onclick","sendRequest(document.getElementById('monatsname').firstChild.data, document.getElementById('jahr').firstChild.data, 'backward')");
	backImg.setAttribute("style","cursor:pointer;");
	backImg.setAttribute("alt","previous");
	document.getElementById("backTh").appendChild(backImg);

	var nextImg = document.createElement("img");
	nextImg.setAttribute("src","images/arrow_right_white.gif");
	nextImg.setAttribute("title","next month");
	nextImg.setAttribute("id","monthNext");
	nextImg.setAttribute("onclick","sendRequest(document.getElementById('monatsname').firstChild.data, document.getElementById('jahr').firstChild.data, 'forward')");
	nextImg.setAttribute("style","cursor:pointer;");
	nextImg.setAttribute("alt","next");
	document.getElementById("nextTh").appendChild(nextImg);

}

function deleteButtons(){

	if(document.getElementById("monthBack")){
		document.getElementById("backTh").removeChild(document.getElementById("monthBack"));
   	};
 	if(document.getElementById("monthNext")){
		document.getElementById("nextTh").removeChild(document.getElementById("monthNext"));
    	};

}

function getStatus(text){

	
	var newText = document.createTextNode(text);
	document.getElementById("status").appendChild(newText);

}
