var hourslotheights;
var timestamps = null;
var timer = null;

function epgInitPane(scrolltocurrenthour)
{
	try
	{
		// Passe Scroll Pane ggf. an neue Dimensionen an
		$('#listBox01').jScrollPane({
			showArrows:true,
			scrollbarWidth:18,
			verticalDragMinHeight:144,
			verticalDragMaxHeight :144
		});	
		
	}
	catch (Exception)
	{
		;
	}
	
	if(scrolltocurrenthour)
	{
		// Lasse den EPG zur aktuellen Stunde scrollen
		epgShowCurrentHour('#listBox01');
	}
}


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();
				subs.each(function (i, o) { 
					height += $(o).outerHeight();
				});
			}
			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(pane_id)
{
	// 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();
	var currenthour = now.getHours();

	while(currenthour >= 0)
	{
		var elem = $("#epghour_1_" + currenthour);

		if(null != elem && elem.size() > 0)
		{
			var epg_api = $('#listBox01').data('jsp');
			epg_api.scrollToElement(elem,true,true);
			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)
{
	// Erzeuge Dialogbox für Details der gewählten Sendung
    $('#epgDetailBox').dialog({
		autoOpen:  false,
		overlay: {'background-color':'black','opacity':'0.5'},
		modal: true,
		width: 647,
		resizable: false,
		draggable: true,
		position: [150,200]
	});
    // Zeige AJAX Loader als Default
	$('#details_content').hide();
	$('#epg_ajax_loader').html('<img src="/images/ajax-loader.gif" />');
	$('#epg_ajax_loader').show();

	// 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'); } );

	$('#epgDetailBox').dialog('open').show();
	$('#epgDetailBox').parent().addClass('pastell');
}



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 epgWaitForSync()
{
	// Wir berechnen die Anzahl der Millisekunden bis zur nächsten vollen Minute.
	var now = new Date();
	var s = now.getSeconds();
	var ms = now.getMilliseconds();
	var wait = (60 - s) * 1000 - ms;

	if(timer != null)
		clearTimeout(timer);
	
	//timer = setTimeout("epgResetDecorations()", wait); function existiert nicht?
}


function closeCalendar() {
	$('.epgCalender').css('display', 'none');
}

$(document).ready(function(){
	$('#currentshow').click(function(){
		var id = $(this).attr('name');
		epgShowDetailBox(id);
		return false;
	})
	
	$('#nextshow').click(function(){
		var id = $(this).attr('name');
		epgShowDetailBox(id);
		return false;
	})
});



