// JavaScript Routinen zur Anzeige von ical daten by Stefan Schnegg, COPROZESSSOR, alle Rechte vorbehalten
// var icalProvider = "/cgi-bin/ical/ical2xml.pl?";
var icalProvider = "/cgi-bin/ical/ical2xml.pl?";
var icalCatProvider = "/cgi-bin/ical/ical_cat.pl?";
var eventCalProviders = new Array("url=http://www.berlin-international-school.de/ical/bis-all.ics");
var eventCalProvider = "";
var calendarLabel = "";
var language = new Array('&lang=de','&lang=en');
var categories = new Array();
var cal = new Array();
cal["cols"] = ["Start","End","Location","Summary","Description"];
var langSelector = 0;
var o1 = new Array (new Array('Ereigniskalender der ', 'B.I.S. event calendar'), new Array('Schulkalender der ', 'School calendar of '));
var o2 = new Array (new Array('Jan', 'Jan'), new Array('Feb', 'Feb'), new Array('März', 'Mar'), new Array('Apr', 'Apr'), new Array('Mai', 'May'), new Array('Jun', 'Jun'), new Array('Jul', 'Jul'), new Array('Aug', 'Aug'), new Array('Sep', 'Sep'), new Array('Okt', 'Oct'), new Array('Nov', 'Nov'), new Array('Dez', 'Dec'));

var o3 = new Array (new Array("Alle", "All"), new Array("Aug 11", "Aug 11"), new Array("Sep 11", "Sep 11"), new Array("Okt 11", "Oct 11"),
                    new Array("Nov 11", "Nov 11"), new Array("Dez 11", "Dec 11"), new Array("Jan 12", "Jan 12"), new Array("Feb 12", "Feb 12"),
                    new Array("März 12", "Mar 12"), new Array("Apr 12", "Apr 12"), new Array("Mai 12", "May 12"), new Array("Jun 12",
                            "Jun 12"), new Array("Jul 12", "Jul 12"), new Array("Aug 12", "Aug 12"));
var o4 = new Array ('Monatsauswahl: ','Month selection: ','Suchergebnis','Search result');	

var b1 = new Array('suchen', 'search');
var b2 = new Array ('Kalender drucken', 'Print calendar');
var l2 = new Array('Ereignis&nbsp;suchen:&nbsp;', 'Search&nbsp;event:&nbsp;');
var err1 = new Array ("Nichts zum Suchen eingegeben!?", "Please enter a search phrase.");
var err2 = new Array ("Keine Kalenderdaten gefunden.", "No calendar entries found.");
var err3 = new Array ('da ist nichts zum Drucken.', 'There is nothing to print.');
var iCalXML = null;
// ############################################
function switchCalendar(calIndex, month)
{
	// if (iCalXML) 
	emptyTable('calendarTable');
	eventCalProvider = icalProvider + eventCalProviders[calIndex] + language[langSelector]
	document.getElementById("searchval").value = '';
	c = document.getElementById('calselect');
	m = document.getElementById('monthselect');
	calendarLabel=o1[calIndex][langSelector] + '&nbsp;-&nbsp;' + o4[0+langSelector] + m.options[m.selectedIndex].text;
	// getIcal(month);
}

function switchCat(catIndex,m){
	emptyTable('calendarTable');
	getIcal(m,catIndex);
}

function getCats (callContent) { 
	var p = icalCatProvider + eventCalProviders[0];
	AjaxRequest.get(
	    {
        'url': p
        , 'onSuccess': function(req){
						categories = req.responseText.split("\n");
						categories.unshift('all categories');
						s = document.getElementById("catselect");
						if (s) {
								while (s.length > 0)
								s.remove(s.length - 1);
								for (var i = 0; i < categories.length; i++) {
									
									n = document.createElement("option");
									n.text = categories[i];
									n.value = i;
									if (document.all)
										s.add(n)
									else
										s.add(n, null);
									}
								s.selectedIndex=0;
						}
						if (callContent) getIcal(0,0); //
			}
        , 'onError': function(req){
		        alert('Error!\nStatusText=' + req.statusText + '\nContents=' + req.responseText);
		        return false;
	        }
	    }
	)
}

function getIcal(m,c)
{
	(c==0) ? p = eventCalProvider + "&categories=" + c + "&month=" + m : p = eventCalProvider + "&categories=" + categories[c] + "&month=" + m;
	
	if (m==0) {
		var now = new Date();
		var y = now.getFullYear();
		var mo = now.getMonth()+1;
		start = "&start=";
		(mo<10) ? start=start + y + '0' + mo : start=start + y + mo;
		p = p + start;
	}
	// alert(p); return;
	AjaxRequest.get(
	    {
        'url': p

        , 'onSuccess': function(req){
				e=req.responseXML.documentElement.getAttribute("errormsg");
				if (e==''){
					iCalXML = req.responseXML;
					writeIcal();
				} else alert(e);
	        }

        , 'onError': function(req){
		        alert('Error!\nStatusText=' + req.statusText + '\nContents=' + req.responseText);
		        return false;
	        }
	    }
	)
}

function searchIcal(w)
{
	if (w=="") { alert (err1[langSelector]); document.getElementById("searchval").focus();return false;} // no search phrase
	emptyTable('calendarTable');
	AjaxRequest.get(
	    {
        'url': eventCalProvider + "&month=0&search=" + w
        , 'onSuccess': function(req){
		        iCalXML = req.responseXML;
		        writeIcal();
	        }
        , 'onError': function(req){
		        alert('Error!\nStatusText=' + req.statusText + '\nContents=' + req.responseText);
		        return false;
	        }
	    }
	)
}

function writeIcal()
{
	r = iCalXML.getElementsByTagName(iCalXML.documentElement.getAttribute("resulttag"));
	h = iCalXML.documentElement.getAttribute("fieldheaders").split("|");
	d = iCalXML.documentElement.getAttribute("displayheaders").split("|");
	t = document.getElementById('calendarTable');
	tablehead = t.tHead;
	tr = tablehead.insertRow(0);
	if (r.length > 0) {
		for (var i = 0; i < cal["cols"].length; i++) {
			th = tr.insertCell(i);
			th.appendChild(document.createTextNode(cal["cols"][i]));
		}
		tablebody = t.tBodies[0];
		for (var i = 0; i < r.length; i++) {
			dr = tablebody.insertRow(tablebody.rows.length);
			var cc = '';
			(i % 2 == 0) ? cc = 'even' : cc = 'odd';
			dr = formatRow(dr, cc);
			k = 0;
			for (var j = 0; j < r[i].childNodes.length; j++) {// Datensatzelemente durchlaufen
				if ((r[i].childNodes[j].tagName != undefined) ) { 
				cal["cols"][r[i].childNodes[j].tagName] = r[i].childNodes[j].firstChild.nodeValue;
					} 
			}
		//	
			for (var j = 0; j < cal["cols"].length; j++) {	
					c = dr.insertCell(k);					
					switch (j) { 					
					case 0 : 				// Datum Start
						a = cal["cols"]["Start"].split('T');
						v = formatDate(a[0]);
						if (a[1])   // Uhrzeit vorhanden ?
						v = v + ' @ ' + formatTime(a[1]);
						n = document.createAttribute("nowrap");
						n.nodeValue = "nowrap";
						c.setAttributeNode(n);
						break;
					case 1 : 				//Datum Ende
						 if(cal["cols"]["End"]!= "-") {  
							b = cal["cols"]["End"].split('T');
							if (b[0] != a[0]) {
								v = formatDate(b[0]);
								if (b[1])  // Uhrzeit vorhanden ?
									v = v + ' @ ' + formatTime(b[1]);
							} else { v = formatTime(b[1]);}	
						} else v="-";
						n = document.createAttribute("nowrap");
						n.nodeValue = "nowrap";
						c.setAttributeNode(n);
						break; 
					case 2 : v = cal["cols"]["Location"]; break;
					case 3 : v = cal["cols"]["Summary"]; break;
					case 4 : v = cal["cols"]["Description"]; break;
					default : // alle anderen Inhalte einfach übernehmen
						v = cal["cols"][j];
					} 
					c.appendChild(document.createTextNode(v));
					k = k + 1;
			} 
			//
		} 
		t.caption.innerHTML = calendarLabel; 	
	}
	else
		t.caption.innerHTML = err2[langSelector]; // no data
	
}
// ###################################################
function emptyTable(id)
{
	t = document.getElementById(id);
	h=t.tHead;
	if (h.rows.length > 0)
		while (h.rows.length > 0)
			h.deleteRow(0);
	b = t.tBodies[0];
	if (b.rows.length > 0)
		while (b.rows.length > 0)
			b.deleteRow(0);	
	if (t.caption)
		t.caption.innerHTML = '';
}

function trim(s)
{
	while (s.substring(0, 1) == ' ') {
		s = s.substring(1, s.length);
	}
	while (s.substring(s.length - 1, s.length) == ' ') {
		s = s.substring(0, s.length - 1);
	}
	return s;
}

function formatRow(r, css)
{
	r.className = css;
	r.oldClassName = css;
	r.onmouseout = function() {
		               this.className = this.oldClassName;
	               }
	               r.onmouseover = function() {
		                               if (this.className == this.oldClassName) {
			                               this.className = "hover";
		                               }
	                               }
	                               return r;
}

function formatDate(d)
{
	// return d;
	return d.substring(6) + '. ' + o2[eval(d.substring(4, 6)) - 1][langSelector] + '. ' + d.substring(2, 4);
}

function formatTime(t)
{
	return t.substring(0, 2) + ':' + t.substring(2, 4);
}
function printTable(tit, tableID)
{
	if ((tableID == '') || (document.getElementById(tableID).rows.length <= 1)) {
		alert(err3[langSelector]);
		return false;
	}

	var titletext = '';
	titletext = unescape(document.getElementById(tableID).caption.innerHTML);
	pw = window.open("print.htm?tid=" + tableID + '&title=' + titletext, tit, "width=500,height=300,left=100,top=200,location=no");
}
function callback(p, d, s, t)
{	// called from table print /print.htm onload
	src = document.getElementById(s);
	v = d.createCaption();
	v.innerHTML = unescape(t);

	if (src.rows.length > 0) {
		for (var i = 0; i < src.rows.length; i++) {
			tk = d.insertRow(d.rows.length);

			if (i % 2 == 0)
				tk.className = "even";

			for (var j = 0; j < src.rows[i].childNodes.length; j++) {
				th = tk.insertCell(j);
				(src.rows[i].childNodes[j].firstChild.tagName == 'A') ? srcT = src.rows[i].childNodes[j].firstChild.firstChild.nodeValue : srcT = src.rows[i].childNodes[j].firstChild.nodeValue;

				if (j < 2) {
					n = p.createAttribute("nowrap");
					n.nodeValue = "nowrap";
					th.setAttributeNode(n);
				}


				th.appendChild(p.createTextNode(srcT));
			}
		}
	}
}
