$hoerzuRating{1}="Schwach";
$hoerzuRating{2}="";
$hoerzuRating{3}="Annehmbar";
$hoerzuRating{4}="Gelungen";
$hoerzuRating{5}="Großartig";

$hoerzuTipp{1}="Spartentipp";
$hoerzuTipp{2}="Tipp";
$hoerzuTipp{3}="Tagestipp";

# 1:Spartentip => Pro Sparte (außer Spielfilm) einen Tip täglich
# 2:weitere Tips => Pro Sparte diverse weitere Tips
# 3:Tagestip => fast Immer Spielfilm, 1x täglich

$hoerzuKategory{100}="Spielfilm";
$hoerzuKategory{200}="Serie";
$hoerzuKategory{300}="Sport";
$hoerzuKategory{400}="Show";
$hoerzuKategory{500}="Information";
$hoerzuKategory{600}="Musik";
$hoerzuKategory{700}="Kinder";

# Die erste Ziffer beschreibt die Kategorie
# 102 ist also Spielfilm => Abenteuer
# 202 ist dementsprechend Serie => Abenteuer
# usw.

$hoerzuGenre{101}="Verschiedenes";
$hoerzuGenre{102}="Abenteuer";
$hoerzuGenre{103}="Action";
$hoerzuGenre{104}="Dokumentarfilm";
$hoerzuGenre{105}="Drama";
$hoerzuGenre{106}="Erotik";
$hoerzuGenre{108}="Fantasy";
$hoerzuGenre{109}="Heimat";
$hoerzuGenre{110}="Humor";
$hoerzuGenre{112}="Krimi";
$hoerzuGenre{113}="Kultur";
$hoerzuGenre{114}="Kurzfilm";
$hoerzuGenre{115}="Musik";
$hoerzuGenre{116}="Mystery";
$hoerzuGenre{117}="Romantik/Liebe";
$hoerzuGenre{119}="Science Fiction";
$hoerzuGenre{121}="Thriller";
$hoerzuGenre{122}="Western";
$hoerzuGenre{123}="Zeichentrick";
$hoerzuGenre{201}="Verschiedenes";
$hoerzuGenre{202}="Abenteuer";
$hoerzuGenre{203}="Action";
$hoerzuGenre{205}="Drama";
$hoerzuGenre{206}="Erotik";
$hoerzuGenre{207}="Familie";
$hoerzuGenre{208}="Fantasy";
$hoerzuGenre{209}="Heimat";
$hoerzuGenre{210}="Humor";
$hoerzuGenre{211}="Krankenhaus";
$hoerzuGenre{212}="Krimi";
$hoerzuGenre{213}="Kultur";
$hoerzuGenre{215}="Musik";
$hoerzuGenre{216}="Mystery";
$hoerzuGenre{217}="Romantik/Liebe";
$hoerzuGenre{218}="Reality";
$hoerzuGenre{219}="Science Fiction";
$hoerzuGenre{220}="Soap";
$hoerzuGenre{221}="Thriller";
$hoerzuGenre{222}="Western";
$hoerzuGenre{223}="Zeichentrick";
$hoerzuGenre{301}="Verschiedenes";
$hoerzuGenre{330}="Basketball";
$hoerzuGenre{331}="Boxen";
$hoerzuGenre{332}="Eishockey";
$hoerzuGenre{333}="Formel 1";
$hoerzuGenre{334}="Fussball";
$hoerzuGenre{335}="Olympia";
$hoerzuGenre{336}="Golf";
$hoerzuGenre{337}="Gymnastik";
$hoerzuGenre{338}="Handball";
$hoerzuGenre{339}="Motorsport";
$hoerzuGenre{340}="Radsport";
$hoerzuGenre{341}="Tennis";
$hoerzuGenre{342}="Wassersport";
$hoerzuGenre{343}="Wintersport";
$hoerzuGenre{401}="Verschiedenes";
$hoerzuGenre{406}="Erotik";
$hoerzuGenre{418}="Reality";
$hoerzuGenre{450}="Comedy";
$hoerzuGenre{451}="Familien-Show";
$hoerzuGenre{452}="Spielshows";
$hoerzuGenre{453}="Talkshows";
$hoerzuGenre{501}="Verschiedenes";
$hoerzuGenre{560}="Geschichte";
$hoerzuGenre{561}="Gesellschaft";
$hoerzuGenre{562}="Interview";
$hoerzuGenre{563}="Kultur";
$hoerzuGenre{564}="Gesundheit";
$hoerzuGenre{565}="Motor+Verkehr";
$hoerzuGenre{566}="Nachrichten";
$hoerzuGenre{567}="Natur";
$hoerzuGenre{568}="Politik";
$hoerzuGenre{569}="Ratgeber";
$hoerzuGenre{570}="Reise";
$hoerzuGenre{571}="Wirtschaft";
$hoerzuGenre{572}="Wissen";
$hoerzuGenre{601}="Verschiedenes";
$hoerzuGenre{680}="Jazz";
$hoerzuGenre{681}="Klassik";
$hoerzuGenre{682}="Musical";
$hoerzuGenre{683}="Rock";
$hoerzuGenre{684}="Volksmusik";
$hoerzuGenre{701}="Verschiedenes";
$hoerzuGenre{790}="Kinderfilme";
$hoerzuGenre{791}="Kindernachrichten";
$hoerzuGenre{792}="Kinderserien";
$hoerzuGenre{793}="Kindershows";
$hoerzuGenre{794}="Kindersport";
$hoerzuGenre{454}="Gerichtsshow";


# Process info from XML file / channels.conf 
sub ReadExternalEPG_hoerzu
{

	&Date_Init("Language=German","DateFormat=non-US");
	$uheute = UnixDate($heute, "%s");
	our $datum,$start,$stop="";
	my $anzahl =0;
        foreach $sender (keys(%chan)) {
		if ($chan_wanted{$sender} eq "3") {
			$anzahl++;
		}
	}

	return unless $anzahl;

	if ($anzahl) {
		eval 'use XML::Simple::DTDReader';
		eval 'use Archive::Zip qw( :ERROR_CODES :CONSTANTS )';
		eval 'use Text::Iconv';
		}
		
	#hoerzu downloads a fixed set of 7 days
	if ($days2download >7) {
		$days2download=7;
	}
	our @events="";
	my %hoerzuchannels = "";

	# zuerst alle hoerzukanäle in ein Hash, etwas schneller ...
	foreach $sender (keys(%chan)) {
		if ($chan_wanted{$sender} eq "3") {
			$hoerzuchannels{$chan{$sender}[4]} = $sender;
		}
	}

	$converter = Text::Iconv->new("utf-8", "latin1");


	# jeden einzelnen Tag abarbeiten
	for ($days=0;$days < $days2download ;$days++) {
		doexit() if $please_exit;

		$now_string  = DateCalc($heute,"+ $days tage",\$err,0);
		$now_string  = UnixDate($now_string, "%Y%m%d");
		$filenamezip = "hoerzu_$now_string.zip";

		print "downloading $filenamezip\n";
		my $dummy=GetContent("$hoerzuurl$days"."&pin=$hoerzupin","$downloadprefix$filenamezip",0,0);
		eval 'use Archive::Zip qw( :ERROR_CODES :CONSTANTS )';
		my $zip = Archive::Zip->new();

		die 'read error' unless $zip->read("$downloadprefix$filenamezip") == AZ_OK;
		my @xmlfiles = $zip->membersMatching( "$now_string_.*\.xml" );
		$xmlfile=shift(@xmlfiles)->fileName;
		doexit() if $please_exit;

		print "unzipping ..\n";
		$xmlfile=$zip->contents($xmlfile);
		
		$dtdfilename = $1 if $xmlfile =~ m|<!DOCTYPE pack SYSTEM "(.*\.dtd)">|i;
		print "found dtd $dtdfilename\n";
		$dtdfile=$zip->contents($dtdfilename);
		$dtdfile=~s|pack \(data\)\+|pack \(data\+\)|g;
		open DTD, ">$dtdfilename";
		print DTD $dtdfile;
		close DTD;

		# Speicher explizit freigeben
		unless ($writeimages) {
			undef $zip;
			eval 'no Archive::Zip';
			}

		doexit() if $please_exit;

		eval 'use XML::Simple::DTDReader';
		my $xs = new XML::Simple::DTDReader(ForceArray => 0, KeyAttr => [ ]);
		print "parsing ..\n";
		my $xmlref = $xs->XMLin($xmlfile);
		my $xmlc = $xmlref->{data};
		doexit() if $please_exit;

		foreach $index (0 .. @$xmlc) {
			doexit() if $please_exit;
			# ist der Sender fuer hoerzu konfiguriert?			
			next if $hoerzuchannels{$xmlc->[$index]->{d2}} eq "";
			next if $xmlc->[$index]->{d3} ne 0; #Regionalsendung
			
			# ok, das Parsen kann losgehen
			$start=$duration=$eventid=$title=$subtitle=$summary=$genre="";
			$kategory=$fsk=$audio=$flags=$episode=$rating=$tipp=$country="";
			$year=$regie=$cast=$rating2=$image=$imagename="";
			$format = "4:3";

			$start		=$xmlc->[$index]->{d4};
			$start =~ s/[- ]//g;
			$start = UnixDate($start, "%s");
			$duration	=$xmlc->[$index]->{d7};
			$eventid	=$xmlc->[$index]->{d0}%65536;
			$title		=$converter->convert($xmlc->[$index]->{d19});
			$subtitle	=$converter->convert($xmlc->[$index]->{d20});
			$summary	=$converter->convert($xmlc->[$index]->{d21});
			$genre		=$hoerzuGenre{$xmlc->[$index]->{d25}};
			$kategory	=$hoerzuKategory{$xmlc->[$index]->{d10}};
			$fsk		=$converter->convert($xmlc->[$index]->{d16});
			$audio="Dolby"	if $xmlc->[$index]->{d28} eq 1;
			$audio="Stereo"	if $xmlc->[$index]->{d27} eq 1;
			$audio.=" Hoerfilm" if $xmlc->[$index]->{d15} eq 1;
			$format="16:9"  if $xmlc->[$index]->{d29} eq 1;

			$flags .= " [SchwarzWeiß]" 	if $xmlc->[$index]->{d11} eq 1;
			$flags .= " [VT150]"		if $xmlc->[$index]->{d13} eq 1;
			$flags .= " [Live]"		if $xmlc->[$index]->{d18} eq 1; #0=nicht, 1=live, 2=aufzeichnung

			$episode	=$converter->convert($xmlc->[$index]->{d26});
			$rating		=$hoerzuRating{$xmlc->[$index]->{d30}};
			$rating2	=$converter->convert($xmlc->[$index]->{d31});
			
			$tipp		= $converter->convert($hoerzuTipp{$xmlc->[$index]->{d18}});
			$tipp .= " " . $hoerzuKategory{$xmlc->[$index]->{d10}} if $xmlc->[$index]->{d18} eq 1;
			$country	=$converter->convert($xmlc->[$index]->{d32});
			$year 		=$converter->convert($xmlc->[$index]->{d33});
			$summary .="|Thema:".$converter->convert($xmlc->[$index]->{d24}) if $xmlc->[$index]->{d24};
			$summary .="|Moderator:".$converter->convert($xmlc->[$index]->{d34}) if $xmlc->[$index]->{d34};
			$summary .="|Gast:".$converter->convert($xmlc->[$index]->{d35}) if $xmlc->[$index]->{d35};
			$regie		=$converter->convert($xmlc->[$index]->{d36});
			$cast		=$converter->convert($xmlc->[$index]->{d37});

			$imagename	=$converter->convert($xmlc->[$index]->{d40});

			if ($imagename && $writeimages && !-e "$imagepath/$eventid$imagetype") {
				print "schreibe $imagename nach $imagepath/$eventid$imagetype ..\n";
				$image=$zip->contents($imagename);
				open IMAGE, ">$imagepath/$eventid.jpg" || warn "cannot write file!";
				print IMAGE $image;
				close IMAGE;

				if (length($image)) {
					open(IMAGE, "$imagepath/$eventid.jpg");
					our $ckimage = Image::Magick->new;
					$ckimage->Read(file=>\*IMAGE);
					close(IMAGE);
					unlink "$imagepath/$eventid.jpg";

					$ckimage->Resize($imagesize);
					$ckimage->Write(filename=>"$imagepath/$eventid$imagetype");
					}
					
				# Speicher explizit freigeben
				undef $ckimage;
				undef $image;
				}

			$flags .= " [$tipp]" if $tipp;
			$rating .= " $rating2" if $rating2;
			$duration *= 60;

			makeEPGevent($eventid,$start,$duration,$title,$subtitle,$eventid,"original",
				$summary,$regie,$cast,$genre,$kategory,$country,
				$year,$audio,$format,$flags,"",$fsk,$episode,
				$rating,$hoerzuchannels{$xmlc->[$index]->{d2}},"","");
                                                                                                                                                                                                                
		} # foreach $index
	# Speicher explizit freigeben
	undef $xmlc;
	undef $xmlref;
	undef $xs;
	eval 'no XML::Simple::DTDReader';
	if ($writeimages) {
		undef $zip;
		eval 'no Archive::Zip';
		}
	} # for ($days=0;$days

	foreach $sender (keys(%chan)) {
		if ($chan_wanted{$sender} eq "3") {
	print "sorting $sender ... \n";
			$last = 0;
			my(@temp);
			for(sort({ $a->{start} <=> $b->{start} } @events)) {
				doexit() if $please_exit;
				next if($last eq $_->{start});
				next if($_->{channel} ne $sender);
				push(@temp, $_); 
				$last = $_->{start};
			}
			$XML{$sender} = [ @temp ];
		}
	}
} # sub ProcessEpg
	
		


return 1;
