/*** Konstanten ***/
var STRING_SUBST = new Array ();
STRING_SUBST["frei"] = "<i>- frei -</i>";
STRING_SUBST["unbekannt"] = "<i>angefragt</i>";

var DEFAULT_CONTENT_TABLE_WIDTH = 750;

var TYPE_BG_STYLES = new Array();
TYPE_BG_STYLES["Segen"] = "contentSegen";
TYPE_BG_STYLES["Meditation"] = "contentMedi";
TYPE_BG_STYLES["Konzert"] = "contentKonzert";
TYPE_BG_STYLES["Ritual"] = "contentMedi";

var TYPE_BG_DETAIL_PROG_STYLES = new Array();
TYPE_BG_DETAIL_PROG_STYLES["Erlebnisvortrag"] = "contentVortrag";
TYPE_BG_DETAIL_PROG_STYLES["Workshop"] = "contentWorkshop";
TYPE_BG_DETAIL_PROG_STYLES["Seminar"] = "contentSeminar";
TYPE_BG_DETAIL_PROG_STYLES["Heilen live"] = "contentHeilen";
TYPE_BG_DETAIL_PROG_STYLES["Messestand"] = "contentMessestand";


var TYPE_BG_TABLE_COLORS = new Array();
TYPE_BG_TABLE_COLORS["Segen"] = "#c9af4b";
TYPE_BG_TABLE_COLORS["Meditation"] = "#C0FF78";
TYPE_BG_TABLE_COLORS["Konzert"] = "#fda48a";
TYPE_BG_TABLE_COLORS["Ritual"] = "#C0FF78";

TYPE_BG_TABLE_COLORS["Erlebnisvortrag"] = "#ffce9d";
TYPE_BG_TABLE_COLORS["Workshop"] = "#ffa74f";
TYPE_BG_TABLE_COLORS["Heilen live"] = "#d9cda4";
TYPE_BG_TABLE_COLORS["Seminar"] = "#eeeeee";
TYPE_BG_TABLE_COLORS["Messestand"] = "#bfbced";

var TYPE_BG_HEADER_COLORS = new Array();
TYPE_BG_HEADER_COLORS["Segen"] = TYPE_BG_TABLE_COLORS["Segen"]
TYPE_BG_HEADER_COLORS["Meditation"] = TYPE_BG_TABLE_COLORS["Meditation"]
TYPE_BG_HEADER_COLORS["Konzert"] = TYPE_BG_TABLE_COLORS["Konzert"]
TYPE_BG_HEADER_COLORS["Ritual"] = TYPE_BG_TABLE_COLORS["Ritual"]
TYPE_BG_HEADER_COLORS["Heilen live"] = "#E3E1F6";
TYPE_BG_HEADER_COLORS["Kinder"] = "#E3E1F6";
TYPE_BG_HEADER_COLORS["Lesung"] = "#E3E1F6";
TYPE_BG_HEADER_COLORS["Seminar"] = "#E3E1F6";
TYPE_BG_HEADER_COLORS["Vortrag"] = "#E3E1F6";
TYPE_BG_HEADER_COLORS["Workshop"] = "#E3E1F6";


var TYPES = new Array();
TYPES["Erlebnisvortrag"] 	= 1;
TYPES["Heilen live"] 		= 2;
TYPES["Konzert"] 			= 3;
TYPES["Meditation"] 		= 4;
TYPES["Ritual"] 			= 5;
TYPES["Segen"] 				= 6;
TYPES["Seminar"] 			= 7;
TYPES["Workshop"] 			= 8;


ROOM_BG_HEADER_COLOR = "#E3E1F6";
PERSON_BG_HEADER_COLOR = "#E3E1F6";

var ROOM_PREPOSITIONS = new Array();
ROOM_PREPOSITIONS["SR 2"] = "im";
ROOM_PREPOSITIONS["SR 3"] = "im";
ROOM_PREPOSITIONS["Tempel"] = "im";
ROOM_PREPOSITIONS["Scheune"] = "in der";
ROOM_PREPOSITIONS["Dhuniplatz"] = "am";
ROOM_PREPOSITIONS["draußen"] = "";
ROOM_PREPOSITIONS["Kristallzimmer"] = "im";
ROOM_PREPOSITIONS["Workshop Zelt"] = "im";


var TYPE_HEADLINES = new Array();
TYPE_HEADLINES["Kinder"] = "Veranstaltungen für Kinder";
TYPE_HEADLINES["Seminar"] = "Seminare";
TYPE_HEADLINES["Erlebnisvortrag"] = "Erlebnisvorträge";
TYPE_HEADLINES["Workshop"] = "Workshops";
TYPE_HEADLINES["Ritual"] = "Rituale";
TYPE_HEADLINES["Meditation"] = "Meditationen";
TYPE_HEADLINES["Messestand"] = "Messestände";

var NO_PERSON_TYPES = new Array();
//NO_PERSON_TYPES["Kinder"] = true;
NO_PERSON_TYPES["Konzert"] = true;
NO_PERSON_TYPES["Meditation"] = true;

var TEXT = new Array();
TEXT["veranstaltungen_am"] = "Veranstaltungen am";
TEXT["veranstaltungen"] = "Veranstaltungen";
TEXT["angeboten_von"] = "angeboten von";
TEXT["Veranstaltungen_aller_Anbieter"] = "Veranstaltungen aller Anbieter";
TEXT["am"] = "am";
TEXT["im"] = "im";

var PERSON_ALL = "- alle Anbieter -";
var PERSON_NONE = "-1";

/*** Ende Konstanten ***/

/*** Globale Variablen ***/

var contentTableWidth = DEFAULT_CONTENT_TABLE_WIDTH;
var events = new Array();

/*** Ende globale Variablen ***/

/*** Klassendefinition Event ***/
function Event( date, start, end, type, title, eventDesc, person, personDesc, www, room, place, price )
{
	var dateArr = date.split(".");
	dateArr[0] = parseInt(dateArr[0]);
	dateArr[1] = parseInt(dateArr[1])-1;
	dateArr[2] = parseInt(dateArr[2]);
	var startArr = start.split(":");
	startArr[0] = parseInt(startArr[0]);
	startArr[1] = parseInt(startArr[1]);
	var endArr = null;
	if ( end!="" ) {
		endArr = end.split(":");
		endArr[0] = parseInt(endArr[0]);
		endArr[1] = parseInt(endArr[1]);
	}
	
	this.start = new Date( dateArr[2], dateArr[1], dateArr[0], startArr[0], startArr[1], 0 );
	this.startDate = date;
	this.end = (endArr!=null) ? new Date( dateArr[2], dateArr[1], dateArr[0], endArr[0], endArr[1], 0 ) : null;
	this.type = type;
	this.title = title;
	this.eventDesc = eventDesc;
	this.person = person;
	this.personDesc = personDesc;
	this.www = www;
	this.room = room;
	this.place = place;
	this.price = price;

	this.getTableView = Event_getTableView;
}


function Event_getTableView( printFields, even, skipPlaceAtTitle )
{
	var showRoom = false;
	for ( i in printFields ) {
		if ( printFields[i] == "room" ) {
			showRoom = true;
			break;
		}
	}
	
	var fields = new Array();
	fields["startDate"]	= this.startDate;
	fields["start"] 	= formatTime( this.start.getHours(), this.start.getMinutes()) + 
							((this.end!=null) ? ( "-" + formatTime( this.end.getHours(), this.end.getMinutes())) : "");
	fields["type"] 		= this.type;
	
	if (STRING_SUBST[this.title]!=null) {
		this.title = STRING_SUBST[this.title];
	}
	
	fields["title"] 	= "<b>" + this.title + "</b>" + ((!skipPlaceAtTitle && !showRoom && this.place!='') ? " <nobr>("+this.place+ ")</nobr>" : "") + 
							( (this.eventDesc != '') ? "<br><i>" + this.eventDesc	+ "</i>" : "" );
	fields["person"] 	= ((this.person!='') ? this.person : "&nbsp;")		+ 
							( (this.personDesc != '') ? "<br><i>" + this.personDesc	+ "</i>" : "" );
	fields["www"]		= (this.www!='') ? '<a class="www" href="' + this.www + '" target="_blank">&nbsp;www&nbsp;</a>' : '';
	
	fields["room"] 		= "<nobr>" + this.room + "\n" + 
							( (this.place != '') ? " - " + this.place : "" ) + "</nobr>";
	fields["place"] 	= this.place;
	fields["price"] 	= ( (STRING_SUBST[this.price]!=null) ? "<nobr>" + STRING_SUBST[this.price]  + "</nobr>" : "<b>" + this.price + "</b>");

	printStr = "<tr class=";
	if ( TYPE_BG_STYLES[this.type] != null ) {
		printStr += "\"" + TYPE_BG_STYLES[this.type] + "\" onMouseOut=\"this.style.backgroundColor='" + TYPE_BG_TABLE_COLORS[this.type] + "';this.style.color='#333333';\"";
	} else {
		if ( even ) {
			printStr += "\"contentEven\" onMouseOut=\"this.style.backgroundColor='#FFFFFF';this.style.color='#333333';\"";
		} else {
			if ( TYPE_BG_DETAIL_PROG_STYLES[this.type] != null ) 
				printStr += "\"" + TYPE_BG_DETAIL_PROG_STYLES[this.type] + "\"  onMouseOut=\"this.style.backgroundColor='" + TYPE_BG_TABLE_COLORS[this.type] + "';this.style.color='#333333';\"";
			else
				printStr += "\"contentOdd\"  onMouseOut=\"this.style.backgroundColor='#ffffff';this.style.color='#333333';\"";
		}
	}
	printStr += "onMouseOver=\"this.style.backgroundColor='#8fa6d3';this.style.color='#ffffff';\">\n";

	for ( i in printFields ) {
		if ( printFields[i] == "price" )
			printStr += "<td class=\"price\">";
		else
			printStr += "<td class=\"program\">";

		printStr += fields[printFields[i]] + "</td>\n";
	}

	printStr += "</tr>\n";
	
	return printStr;
}

/*** Ende - Klassendefinition Event ***/

/*** Funktionen ***/

function setContentTableWidth( width )
{
	contentTableWidth = width;
}

function setDefaultContentTableWidth()
{
	contentTableWidth = DEFAULT_CONTENT_TABLE_WIDTH;
}


function compareObjects ( o1, o2 )
{
	return (o1>o2) ? 1 : ((o1<o2) ? -1 : 0);
}

function sortEvents( eventList, func )
{
	eventList.sort( func );
}

function sortEventsByStartTime( e1, e2 )
{
	var res = e1.start.getTime() - e2.start.getTime();
	
	if ( res == 0 ) {
		res = compareObjects( e1.room, e2.room );

		if ( res == 0 ) {
			res = compareObjects( e1.place, e2.place );
		}
	}

	return res;
}

function sortEventsByType( e1, e2 )
{
	var res = TYPES[e1.type] - TYPES[e2.type];

	if ( res == 0 ) {
		res = e1.start.getTime() - e2.start.getTime(); 
		if ( res == 0 ) {
			res = compareObjects( e1.room, e2.room );
			if ( res == 0 ) {
				res = compareObjects( e1.place, e2.place );
			}
		}
	}

	return res;
}

/*
function sortEventsByType( e1, e2 )
{
	var res = compareObjects( e1.type, e2.type );

	if ( res == 0 ) {
		res = e1.start.getTime() - e2.start.getTime(); 
		if ( res == 0 ) {
			res = compareObjects( e1.room, e2.room );
			if ( res == 0 ) {
				res = compareObjects( e1.place, e2.place );
			}
		}
	}

	return res;
}
*/
function sortEventsByRoom( e1, e2 )
{
	var res = compareObjects( e1.room, e2.room );
	
	if ( res == 0 ) {
		res = compareObjects( e1.startDate, e2.startDate );
		if ( res == 0 ) {
			if ( compareObjects( e1.place, e2.place ) != 0 ) {
				if ( e1.place == '' ) {
					res = 1;
				} else {
					res = -1;
				}
			} else {
				res = e1.start.getTime() - e2.start.getTime();
			}
		}
	}

	return res;
}

function sortEventsByPerson( e1, e2 )
{
	var res = compareObjects( e1.person, e2.person );

	if ( res == 0 ) {
		res = e1.start.getTime() - e2.start.getTime(); 
	}

	return res;
}

function sortEventsByPlaceOnly( e1, e2 )
{
	var res = compareObjects( e1.place, e2.place );
	return res;
}


function getEventsByPerson( person )
{
	var foundEvents = new Array();
	
	for ( e in events ) {
		//if ( events[e].person == person ) {
		if ( eval( "events[e].person.search(/" + person + "/)" ) != -1 ) {
			foundEvents[foundEvents.length] = events[e];
		}
	} 

	return foundEvents;
}

function formatTime( hour, min )
{
	var res = (hour<10) ? "0" : "";
	res += hour + ":";
	res += (min<10) ? "0" : "";
	res += min;
	
	return res;
}

function fillPersonSelect( formList, events )
{
	// Personenliste erstellen
	var personHash = new Array();
	
	for ( var e in events ) {
		if ( events[e].person != '' ) {
			personHash[events[e].person] = 1;
		}
	}

	var persons = new Array();

	for ( var p in personHash ) {
		persons[persons.length] = p;
	}

	persons.sort();

	// Personen in Selectliste füllen
	for ( p in persons ) {
		formList.options[formList.options.length] = new Option( persons[p], persons[p], false, false );
	}
}

function getEventListHead( printFields )
{
	var fields = new Array();
	fields["startDate"]	= "Datum";
	fields["start"] 	= "Zeit";
	fields["type"] 		= "Veranst.";
	fields["title"] 	= "Titel";
	fields["person"] 	= "angeboten von";
	fields["www"]		= "";
	fields["room"] 		= "Raum";
	fields["price"] 	= "Preis";

	var headStr = "<table class=\"eventList\" border=\"0\" width=\"" + contentTableWidth + "\">\n<tr>\n";
	
	for ( i in printFields ) {
		headStr += "<td class=\"head\">" + fields[printFields[i]] + "</td>\n";
	}
	
	headStr += "</tr>\n";

	return headStr;
}

function getEventListFooter( pageBreak )
{
	return (pageBreak) ? "</table>" : "</table><br clear=\"all\">";
}

function printEventListSortedByStartTime( eventList, pageBreak )
{
	var printFields = new Array("start","type","title","person","www","room","price");

	sortEvents( eventList, sortEventsByStartTime );

	var lastStartDate = null;
	var line = 1;
	
	for ( var i=0; i<eventList.length; i++ ) {
		if ( lastStartDate != eventList[i].startDate ) {
			if ( lastStartDate != null ) {
				document.write( getEventListFooter(pageBreak) );
				line = 1;
			}
			
			document.write( "<h2>" + TEXT["veranstaltungen_am"] + " " + eventList[i].startDate + "</h2>");
			document.write( getEventListHead( printFields ) );
			lastStartDate = eventList[i].startDate;
		}
		document.write( eventList[i].getTableView( printFields, (line%2==0) ));
		line++;
	}

	document.write( getEventListFooter(pageBreak) );
}

function printEventListSortedByType( eventList )
{
	var printFields = new Array("start","title","person","www","room","price");
	var printFieldsNoPerson = new Array("start","title","room","price"); 
	sortEvents( eventList, sortEventsByType );

	var lastType = null;
	var lastStartDate = null;
	line = 1;
	var curPrintFields = printFields;
	
	for ( var i=0; i<eventList.length; i++ ) {
		if ( (lastType != eventList[i].type) || (lastStartDate != eventList[i].startDate) ) {
			if ( lastType != null ) {
				document.write( getEventListFooter() );
				line = 1;
				curPrintFields = (NO_PERSON_TYPES[eventList[i].type]) ? printFieldsNoPerson : printFields;
			}
			
			document.write( "<h2>" + "<span style=\"background-color:" + TYPE_BG_HEADER_COLORS[eventList[i].type] + ";padding-left:3px;padding-right:3px;\">" + ((TYPE_HEADLINES[eventList[i].type]) ? TYPE_HEADLINES[eventList[i].type] : eventList[i].type) + "</span> " + TEXT["am"] + " " + eventList[i].startDate + "</h2>");
			document.write( getEventListHead( curPrintFields ) );;
			lastType = eventList[i].type;
			lastStartDate = eventList[i].startDate;
		}
		document.write( eventList[i].getTableView( curPrintFields, (line%2==0) ));
		line++;
	}

	document.write( getEventListFooter() );
}

function printEventListSortedByRoom( eventList )
{
	var printFields = new Array("start","type","title","person","www","price");

	sortEvents( eventList, sortEventsByRoom );

	var lastRoom = null;
	var lastStartDate = null;
	var line = 1;

	for ( var i=0; i<eventList.length; i++ ) {
		if ( (lastRoom != eventList[i].room) || (lastStartDate != eventList[i].startDate) ) {
			if ( lastRoom != null ) {
				document.write( getEventListFooter() );
				line = 1;
			}
			document.write( "<h2>" + TEXT["veranstaltungen"] + " " +
							ROOM_PREPOSITIONS[eventList[i].room] + " " + 
							" <span style=\"background-color:" + ROOM_BG_HEADER_COLOR + ";padding-left:3px;padding-right:3px;\">" + 
							eventList[i].room + "</span> " + 
							TEXT["am"] + " " + eventList[i].startDate + "</h2>");
			document.write( getEventListHead( printFields ));
			lastRoom = eventList[i].room;
		}
		document.write( eventList[i].getTableView( printFields, (line%2==0) ));
		lastStartDate = eventList[i].startDate;
		line++;
	}

	document.write( getEventListFooter() );
}

function printEventListSortedByPerson( person, eventList )
{
	var printFieldsAll = new Array("startDate","start","type","title","person","www","room","price");
	var printFieldsSingle = new Array("startDate","start","type","title","room","price");

	var printStr = "";
	if ( person == PERSON_NONE ) {
		// nichts
	} else {
		var resEvents;
		var printFields;
		
		if ( person == PERSON_ALL ) {
			resEvents = eventList;
			printFields = printFieldsAll;
			printStr += "<span class=\"header2\">" + TEXT["Veranstaltungen_aller_Anbieter"] + "</span>";
		} else {
			resEvents = getEventsByPerson( person );
			// www ist nicht der Person sondern dem Event zugeordnet, also aus Event auslesen.
			var www = null;
			for ( var e in resEvents ) {
				if ( resEvents[e].www != "" )
				{
					www = resEvents[e].www;
					break;
				}
			}
			printFields = printFieldsSingle;
			wwwStr = (www!=null) ? '&nbsp;&nbsp;<a class="www" href="' + www + '" target="_blank">&nbsp;www&nbsp;</a>' : '';

			printStr += "<span class=\"header2\">" + TEXT["veranstaltungen"] + " " + TEXT["angeboten_von"] + " " +
						" <span style=\"background-color:" + PERSON_BG_HEADER_COLOR + ";padding-left:3px;padding-right:3px;\">" + 
						person + "</span></span>" + wwwStr;
		}

		printStr += "<br><br>" + getEventListHead( printFields );
		sortEvents( resEvents, sortEventsByPerson );

		var line = 1;
		for ( var e in resEvents ) {
			printStr += resEvents[e].getTableView( printFields, (line%2==0) );
			line++;
		}
		printStr += getEventListFooter();

	}
	document.getElementById("searchResult").innerHTML = printStr;
}

function printEventListMesse( eventList )
{
	var printFields = new Array("place","title","person","www");

	var messeList = new Array();
	var titleHash = new Array();
	
	for (var i=0; i<eventList.length; i++ ) {
		if ( ! titleHash[eventList[i].title] ) {
			titleHash[eventList[i].title] = 1;
			messeList.push( eventList[i] );
		}
	}

	sortEvents( messeList, sortEventsByPlaceOnly );

	var line = 1;
	for ( i=0; i<messeList.length; i++ ) {
		document.write( messeList[i].getTableView( printFields, (line%2==0), true ));
		line++;
	}
}


/*** Ende - Funktionen ***/

