<%pre>
#include <vdr/plugin.h>
#include <vdr/channels.h>
#include <vdr/epg.h>
#include <vdr/config.h>
#include <vdr/device.h>
#include "exception.h"
#include "livefeatures.h"
#include "setup.h"
#include "tools.h"
#include "epg_events.h"
#include "i18n.h"

using namespace std;
using namespace vdrlive;

</%pre>
<%args>
	int channel = -1;
</%args>
<%session scope="global">
bool logged_in(false);
</%session>
<%request scope="page">
	cChannel* Channel;
</%request>
<%include>page_init.eh</%include>
<%cpp>
if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html");
</%cpp>
<%cpp>
	pageTitle = trVDR("Schedule");

	cSchedulesLock schedulesLock;
	cSchedules const* schedules = cSchedules::Schedules( schedulesLock );

	ReadLock channelsLock( Channels );
	if ( !channelsLock )
		throw HtmlError( tr("Couldn't aquire access to channels, please try again later.") );

	// cChannel* Channel; (see %request above)
	if ( channel > 0 ) {
		Channel = Channels.GetByNumber( channel );
	}
	else {
		if (cDevice::CurrentChannel()) {
			Channel = Channels.GetByNumber(cDevice::CurrentChannel());
		}
		else {
			Channel = Channels.Get( Channels.GetNextNormal( -1 ) );
		}
	}
	if ( Channel == 0 )
		throw HtmlError( tr("Couldn't find channel or no channels available. Maybe you mistyped your request?") );

	cSchedule const* Schedule = schedules->GetSchedule( Channel );
</%cpp>
<& pageelems.doc_type &>
<html>
	<head>
		<title>VDR Live - <$ pageTitle $></title>
		<& pageelems.stylesheets &>
		<& pageelems.ajax_js &>
	</head>
	<body>
		<& pageelems.logo &>
		<& menu active=("schedule") component=("schedule.channel_selection") &>
		<div class="inhalt">
<%cpp>
	if ( Schedule == 0 ) {
</%cpp>
			<$ tr("No schedules available for this channel") $>.
<%cpp>
	}
	else {
</%cpp>
		<table class="listing" cellspacing="0" cellpadding="0">
<%cpp>
		string current_day = "";
		const cEvent* PresentEvent = Schedule->GetPresentEvent();
		time_t now = time(NULL) - ::Setup.EPGLinger * 60;
		// tChannelID channel_id(Channel->GetChannelID());
		// int evntNr = 0;
		for (const cEvent *Event = Schedule->Events()->First(); Event; Event = Schedule->Events()->Next(Event)) {
			if (Event->EndTime() <= now && Event != PresentEvent)
				continue;

			EpgInfoPtr epgEvent = EpgEvents::CreateEpgInfo(Channel, Event);

			string title(epgEvent->Title());
			string short_description(epgEvent->ShortDescr());
			string description(epgEvent->LongDescr());
			string start(epgEvent->StartTime(tr("%I:%M %p")));
			string end(epgEvent->EndTime(tr("%I:%M %p")));
			string day(epgEvent->StartTime(tr("%A, %b %d %Y")));
			string epgid = EpgEvents::EncodeDomId(Channel->GetChannelID(), Event->EventID());
			// string strEventID = lexical_cast<string>(Event->EventID());

			bool truncated = false;
			bool lastEventCurrentDay = false;
			{
				cEvent* NextEvent = Schedule->Events()->Next(Event);
				if (!NextEvent) {
					lastEventCurrentDay = true;
				}
				else {
					string nday(NextEvent->StartTime() ? FormatDateTime(tr("%A, %b %d %Y"), NextEvent->StartTime()) : "");
					lastEventCurrentDay = (day != nday);
				}
			}

			if (current_day != day) {
				if (current_day != "") {
</%cpp>
				<tr class="spacer">
					<td colspan="5"/>
				</tr>
<%cpp>
				}
</%cpp>
	   			<tr class="head">
	   				<td colspan="5"><div class="boxheader"><div><div><$ day $></div></div></div></td>
				</tr>
<%cpp>
	   			current_day = day;
			}
</%cpp>
				<tr>
	   				<td class="action leftcol <? lastEventCurrentDay ? "bottomrow" ?>"><& pageelems.event_timer epgid=(epgid) &></td>
					<td class="action <? lastEventCurrentDay ? "bottomrow" ?>"><%cpp>if (LiveFeatures<features::epgsearch>().Recent() ) { </%cpp><a href="searchresults.html?searchplain=<$ StringUrlEncode(title) $>"><img src="<$ LiveSetup().GetThemedLink("img", "search.png") $>" alt="" <& tooltip.hint text=(tr("Search for repeats.")) &>></img></a><%cpp> } else { </%cpp><img src="img/transparent.png" width="16" height="16"><%cpp> } </%cpp></td>
					<td class="action <? lastEventCurrentDay ? "bottomrow" ?>"><& pageelems.imdb_info_href title=(title) &></td>
					<td class="topaligned <? lastEventCurrentDay ? "bottomrow" ?>"><div class="withmargin nowrap"><$ start $> - <$ end $></div></td>
					<td class="<? (Event == PresentEvent) ? "current" ?> topaligned rightcol <? lastEventCurrentDay ? "bottomrow" ?>"><div class="more withmargin"><a <& tooltip.hint text=(StringEscapeAndBreak(StringWordTruncate(description, 300, truncated)) + "<br />" + tr("Click to view details.")) &><& tooltip.display domId=(epgEvent->Id()) &>><span class="title"><$ title $></span><br /><span class="short"><%cpp>if (short_description.empty()) { </%cpp>&nbsp;<%cpp> } </%cpp><$ short_description $></span></a></div></td>
				</tr>
<%cpp>
		}
</%cpp>
			</table>
<%cpp>
	}
</%cpp>
		</div>
	</body>
</html>
<%include>page_exit.eh</%include>

<%def channel_selection>
<form action="schedule.html" method="get" id="channels">
   <span>
     <label for="channel"><$ tr("Channel") $>:&nbsp;<span class="bold"><$ Channel->Number() $></span></label>
     <& channels_widget name=("channel") selected=(Channel ? *Channel->GetChannelID().ToString() : "") onchange=("document.forms.channels.submit()") &>
     <& pageelems.ajax_action_href action="switch_channel" tip=(tr("Switch to this channel.")) param=(Channel->GetChannelID()) image="zap.png" alt="" &>
     <& pageelems.vlc_stream_channel channelId=(Channel->GetChannelID()) &>
   </span>
</form>
</%def>