#!/usr/bin/perl

use CGI qw(param);
use CGI::Carp qw(fatalsToBrowser);

require "gb/config";

my $b = '::::';
my $html;


sub error {
	my $reason = shift;
	my (@hm, $hm);
	
	open DESIGN, $hm_error or die "Content-Type: text/html\n\n can not open \$hm_error! $!";
	@hm=<DESIGN>;
	close DESIGN;	
	$hm=join '', @hm;
	$hm=~s/<!--#error-->/$reason/ig;
	print "Content-Type: text/html\n\n";
	print $hm;
	exit;
}

sub get_ddmmyyyy {
	my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst);
	($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime(time);
	$year+=1900;
	return $mday.'.'.$mon.'.'.$year;
}

sub get_ascii {
	my $file=$_[0];
	my (@html, $html);

	open ASCII_FILE, $file or error("$err_openascii -- $file");
	@html=<ASCII_FILE>;
	close ASCII_FILE;
	$html=join '', @html;
	return $html;
}

sub kill_message {
	my @id = @_;
	my (@messages, @new_messages, $id, $message, $counter);
	my $mag;
	
	open DATA, $datafile or error($err_opendatafile);
	@messages=<DATA>;
	close DATA;
	
	foreach $message (@messages) {
		foreach $id (@id) {if ($message=~/^$id/) {goto LAB}}
		@new_messages=(@new_messages, $message);
		LAB:		
	}
	
	open DATA, ">$datafile";
	flock DATA, 2;
	print DATA @new_messages;
	flock DATA, 8;
	close DATA;
}

sub add_message {
	my $date=&get_ddmmyyyy();
	my $name = param('name');
	my $email = param('email');
	my $url = param('url');
	my $icq = param('icq');
	my $message = param('message');
	my ($new_message, @messages);
	my $id;
	my ($new_main, $old_main);
	
	$name=~s/</&lt;/g;
	$email=~s/</&lt;/g;
	$icq=~s/</&lt;/g;
	$url=~s/</&lt;/g;
	$message=~s/</&lt;/g;
	$message=~s/\s/\040/g;
	$name=~s/\s/\040/g;
	$email=~s/\s/\040/g;
	$url=~s/\s/\040/g;
	$icq=~s/\s/\040/g;
	$url=~s/http:\/\///g;
	
	if (length($name) > $max_name) {error($err_longname)}
	if (length($email) > $max_email) {error($err_longemail)}
	if (length($url) > $max_url) {error($err_longurl)}
	if (length($icq) > $max_icq) {error($err_longicq)}
	if (length($message) > $max_message) {error($err_longmessage)}
	foreach (split /\s/, $message) {if (length($_) > $max_word) {error($err_longword)}}

	open DATA, $datafile or error($err_opendatafile);
	@messages=<DATA>;
	close DATA;
	
	$id=$#messages+time+length($message);
	$new_message.="$id$b$date$b$name$b$email$b$url$b$icq$b$message\n";
	
	$new_main=$new_message; $new_main=~s/^\d*//;
	$old_main=$messages[0]; $old_main=~s/^\d*//;
	if (($#messages < $max_messages)&&($new_main ne $old_main)) {@messages=($new_message, @messages)}
	
	open DATA, ">$datafile" or ($err_writedatafile);
	flock DATA, 2;
	print DATA @messages;
	flock DATA, 8;
	close DATA;
	
}
	
if (param('page') eq '') {
	
	my ($message_part, $new_part, $part);
	my (@messages, $id, $date, $name, $email, $url, $icq, $message);
	my %message = param;
	my $counter = 0; # for first page

	$html=get_ascii($hm_view);

	if ((param('name') ne '')&&(param('message') ne '')){add_message(%message)}

	open DATA, $datafile or error($err_opendatafile);
	@messages=<DATA>;
	close DATA;

	($message_part)=($html=~/<!--#message-->(.*)<!--#message-->/si);
	
	foreach (@messages) {
		$new_part=$message_part;
		($id, $date, $name, $email, $url, $icq, $message) = split /$b/, $_;
		$new_part=~s/<!--#date-->/$date/ig;
		$new_part=~s/<!--#name-->/$name/ig;
		$new_part=~s/<!--#email-->/$email/ig;
		$new_part=~s/<!--#url-->/<a href="http:\/\/$url">$url<\/a>/ig;
		$new_part=~s/<!--#icq-->/$icq/ig;
		$new_part=~s/<!--#text-->/$message/ig;
		$part.=$new_part;
	}
	
	$html=~s/<!--#message-->(.*)<!--#message-->/$part/is;	
	
	print "Content-Type: text/html\n\n";
	print $html;

}
elsif (param('page') eq 'add') {

        my ($message_part, $new_part, $part);
        my (@messages, $id, $date, $name, $email, $url, $icq, $message);
        my %message = param;
        my $counter = 0; # for first page

        $html=get_ascii($hm_add);
	
        print "Content-Type: text/html\n\n";
        print $html;

}

elsif (param('page') eq 'adm') {
	
   if (param('p_1') eq $password) {

		my (@messages, $id, $date, $name, $email, $url, $icq, $message);
		my ($message_part, $new_part, $part);
	
		if (param('kill') ne '') {kill_message(param('kill'))}

		$html=get_ascii($hm_admin);

		open DATA, $datafile or error($err_opendatafile);
		@messages=<DATA>;
		close DATA;
	
		($message_part)=($html=~/<!--#message-->(.*)<!--#message-->/si);
	
		foreach (@messages) {
			$new_part=$message_part;
			($id, $date, $name, $email, $url, $icq, $message) = split /$b/, $_;
			$new_part=~s/<!--#id-->/$id/ig;
			$new_part=~s/<!--#date-->/$date/ig;
			$new_part=~s/<!--#name-->/$name/ig;
			$new_part=~s/<!--#email-->/$email/ig;
			$new_part=~s/<!--#url-->/<a href="http:\/\/$url">$url<\/a>/ig;
			$new_part=~s/<!--#icq-->/$icq/ig;
			$new_part=~s/<!--#text-->/$message/ig;
			$part.=$new_part;
		}
	
		$html=~s/<!--#message-->(.*)<!--#message-->/$part/is;
		$html=~s/<!--#password-->/$password/is;
		
		print "Content-Type: text/html\n\n";
		print $html;

   }
   else {
	my (@messages, $id, $date, $name, $email, $url, $icq, $message);
	my ($message_part, $new_part, $part);
	$html=get_ascii($hm_adm);
	print "Content-Type: text/html\n\n";
	print $html;
 }
}
else {error($err_badpage)}