#!/usr/bin/perl
use strict;
use warnings;
use CGI qw( param header );
use LWP::UserAgent ();
use Data::Dumper qw( Dumper );
use XML::Simple();
####################
# LWP::UserAgent
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
##########
####################
# XML::Simple
my $xmls = new XML::Simple(
	AttrIndent	=> 0,
	ContentKey	=> 'content',
	ForceArray	=> 1,
	KeepRoot	=> 1,
	NoAttr		=> 0,
	NoEscape	=> 1,
	NoIndent	=> 0,
	NoSort		=> 1,
	NormaliseSpace	=> 0,
	NSExpand	=> 1,
	NumericEscape	=> 0,
	RootName	=> 'xml',
	SuppressEmpty	=> undef,
	XMLDecl		=> '',
);
##########
####################
# localtime.
my @lt = localtime; $lt[5]+=1900; $lt[4]+=1;
##########
####################
# Verfügbare Klassen.
if( param('mode') eq 'klassen' ) {
	my $klassen = {};
	my $xml_hash = {'mmbbs' => [{'xmlns' => 'uri:de.dev5-media.mmbbs.stundenplan','klassen'=>[{'klasse'=>[]}]}]};
	
	####################
	# Lade Navigationsleiste vom Stundenplanprogramm.
	my $response = $ua->get('http://www.bbs-h.de/plan0910/klassen/frames/navbar.htm');
	my $navbar_html = $response->decoded_content;
	##########
	####################
	# Sind Klassen im Quelltext eingetragen?
	if( $navbar_html =~ m'var classes = \[([^\]]*)\];' ) {
		my $classes_html = $1; # Klassen als JavaScript Code.
		my $i = 0; # Zählindex für Klassen-IDs.
		
		####################
		# Für jede Klasse...
		foreach my $class_html (split ',', $classes_html) {
			if( $class_html =~ m'"([^"]+)"' ) {
				$klassen->{"$1"} = int($i);
			}
			$i++;
		}
		##########
	}
	else {
		print header( -type => 'text/plain', -status => '500 Internal Server Error' );
		print 'Klassen konnten nicht ermittelt werden.';
		exit 1;
	}
	##########
	
	####################
	# Daten aufbereiten.
	foreach my $klasse (sort keys %$klassen) {
		my $tmp = {};
		$tmp->{'id'} = "$klassen->{$klasse}";
		$tmp->{'content'} = "$klasse";
		
		# Für alle Klassen, die es gitb...
		if( $klasse !~ m/^CCNA|DR\w+|MB|BSFHR$/ ) {
			$tmp->{'email'} = lc("$klasse").'@mmbbs.eduplaza.de';
		}
		
		push @{ $xml_hash->{'mmbbs'}->[0]->{'klassen'}->[0]->{'klasse'} }, $tmp;
	}
	##########
	
# 	print header('text/plain'), Dumper($xml_hash);
	
	####################
	# Ergebnis ausgeben und Ende.
	print header( -type => 'text/xml', -status => '200 OK' );
	print $xmls->XMLout($xml_hash);
	exit 0;
	##########
}
##########
####################
# Verfügbare Kalenderwochen.
elsif( param('mode') eq 'wochen' ) {
	my $wochen = {};
	my $xml_hash = {'mmbbs' => [{'xmlns' => 'uri:de.dev5-media.mmbbs.stundenplan'}]};
	
	####################
	# Lade Navigationsleiste vom Stundenplanprogramm.
	my $response = $ua->get('http://www.bbs-h.de/plan0910/klassen/frames/navbar.htm');
	my $navbar_html = $response->decoded_content;
	##########
	####################
	# Sind Wochen im Quelltext eingetragen?
	if( $navbar_html =~ m~~s ) {
			last unless $_;
			$_ =~ m~^(.*)~s
		}
		my $weeks_html = $1;
		$weeks_html =~ s/\s+$//g;
		$weeks_html =~ s/[\r\n]+$/\n/g;
		##########
		
		####################
		# Für jede Woche...
		foreach my $week_html (split /\n/, $weeks_html) {
			if( $week_html =~ m'