var hourslotheights;
var timestamps = null;
var timer = null;

function epgCalcMaxHeights()
{
	hourslotheights = new Array();
	// F�r jede Stunde traversieren wir durch alle drei Spalten und berechnen die maximale H�he des Slots als
	// max(Hi) f�r i=O..2, wobei Hi die H�he des Stundenelements in Spalte i bezeichnet (in Pixel).
	for(var y = 0; y < 24; y++)
	{
		var maxheight = 0;
		for(var x = 0; x < 3; x++)
		{
			var elem = $("#epghour_" + x + "_" + y);
			var height = 0;
			if(null != elem && elem.size() > 0)
			{
				// Die H�he errechnet sich aus den individuellen H�hen der im DIV enthaltenen Sub-DIVs
				var subs = elem.children('div');
				subs.each(function (i, o) { height += $(o).outerHeight(true); });
			}

			if(height > maxheight)
				maxheight = height;
		}
		// "maxheight" beinhaltet nun die maximale H�he f�r den gegenw�rtigen Stundenslot (enthalten in Variable y).
		hourslotheights[y] = maxheight;
	}
}

function epgAdjustHeights()
{
	// F�r jede Spalte merken wir uns jeweils das letzt Stunden-Element in diesem Array
	var lasthourelement = new Array();
	// Wir gehen durch jeden verf�gbaren Stundenslot in allen Spalten und setzen seine H�he auf die maximale H�he;
	for(var y = 0; y < 24; y++)
	{
		var maxheight = hourslotheights[y];
		for(var x = 0; x < 3; x++)
		{
			var elem = $("#epghour_" + x + "_" + y);

			if(null != elem && elem.size() > 0)
			{
				elem.height(maxheight);
				lasthourelement[x] = elem;
			}
			else if(maxheight > 0)
			{
				// Wenn f�r die momentane Spalte und Stunde kein Stundenelement im EPG angelegt wurde, dann m�ssen wir das
				// n�chste dar�berliegende Stundenelement der Spalte (sofern verf�gbar) nochmals erweitern.
				if(null != lasthourelement[x])
				{
					lasthourelement[x].height(lasthourelement[x].height() + maxheight);
				}
			}
		}
	}
}

function epgShowCurrentHour(hour)
{
	// Wir scrollen den Inhalt des EPGs zum Stundenslot, welcher der aktuellen Uhrzeit entspricht. Ist f�r die mittlere Spalte kein
	// solches Element vorhanden, dann fahren wir mit dem Slot dar�ber (vorherige Stunde) fort, usw.
	var now = new Date();
	if(hour) {
		var currenthour = hour;
	} else {
		var currenthour = now.getHours();
	}
	while(currenthour >= 0)
	{
		var elem = $("#epghour_1_" + currenthour);
		if(null != elem && elem.size() > 0)
		{
			$(document).ready(function () {
				$('.epgBox').stop().scrollTo("#epghour_1_" + currenthour);
			});
			break;
		}
		else {
			currenthour--;
		}
	}
}

function epgShowTrailerBox(elem_id)
{
	// Hole die Dokumentkoordinaten, des �bergebenen Elements
	var elem = $('#' + elem_id);
	var pos = elem.offset();
	// Setze Trailerbox auf das Element
	var tb = $('#epgTrailerBox');
	// Hole die Dokumentkoordinaten des Parents der Trailerbox
	var parent = tb.parent();
	var pos2 = parent.offset();
	// Berechne Koordinaten des �bergebenen Elements im Parent
	var x = pos.left - pos2.left;
	var y = pos.top - pos2.top;
	if(y < 0) {
		y = 0;
	}
	tb.css('top', y);
	tb.css('left', x);
	tb.show("slow");
}


function epgHideTrailerBox()
{
	$('#epgTrailerBox').hide();
}

function epgShowDetailBox(sid)
{
	$('#details_content').hide();
	// Lade die Sendungsdetails per AJAX in die Box
	$('#details_content').load('/epg/epgdetail/render/sid/' + sid + '/format/html', null, function() { $('#epg_ajax_loader').hide(); $('#details_content').show('slow'); } );
	showDialog('epgDetailBox','big');
}


function epgDoLayout(contains_today)
{
	// Berechne die maximale H�he f�r jeden Stundenslot im EPG.
	epgCalcMaxHeights();
	// Passe die H�hen der Stundenelemente im EPG ggf. an
	epgAdjustHeights();
}

function epgShowLoadingIndicator()
{
	// Wir ersetzen den Inhalt der Client Area durch einen zentrierten Layer mit Indicator
	var elem = $('.epgHeader');
	var tgtwidth = 940;
	var offset = elem.offset();
	var tgtheight = offset.top;
	elem.prepend('<div id="ajaxspinner" style="position:absolute; text-align: center; padding: 25px; background-color: black; color: white; opacity:0.7;filter: alpha(opacity=70);"><img src="/images/ajax-loader.gif" vspace="5" /><br/><b>Lade Ansicht...bitte warten</b></div>');
	//epgInitPane(false);
	var spinner = $('#ajaxspinner');
	spinner.css({'z-index':1000, 'left' : (tgtwidth - spinner.outerWidth(true)) / 2, 'top' : tgtheight});

}

function showDate(date) {
	epgShowLoadingIndicator();
	// Lade den EPG Container per AJAX neu
	$('#epg').load('/epg/epg/render/date/' + date + '/format/html');
}

function epgFlipForward(current)
{
	epgShowLoadingIndicator();
	var ts = (current + 3 * 24 * 60 * 60) * 1000;	// Bl�ttere drei Tage vorw�rts
	var date = new Date(ts);
	var month = date.getMonth() + 1;
	date = "" + date.getFullYear() + "-" + month + "-" + date.getDate();
	// Lade den EPG Container per AJAX neu
	$('#epg').load('/epg/epg/render/date/' + date + '/format/html');
}

function epgFlipBackward(current)
{
	epgShowLoadingIndicator();
	var ts = (current - (3 * 24 * 60 * 60)) * 1000;	// Bl�ttere drei Tage r�ckw�rts
	var date = new Date(ts);
	var hour = date.getHours();
	if(hour == 23) { var newTS = ts + (60*60*1000); var date = new Date(newTS); }
	var month = date.getMonth() + 1;
	date = "" + date.getFullYear() + "-" + month + "-" + date.getDate();
	// Lade den EPG Container per AJAX neu
	$('#epg').load('/epg/epg/render/date/' + date + '/format/html');
}

function openCalendar(month,year) {
	if(month == undefined) {
		$('.epgCalender').css('display', 'block');
	} else {
		$('#epgCal').load('/epg/epg/calendar/month/' + month + '/year/' + year + '/format/html');
	}
}

function closeCalendar() {
	$('.epgCalender').css('display', 'none');
}



