#!/usr/local/bin/perl
require "weblib.lib";
use Time::Local;
use DB_File;
require "/home/todd/private/toddweb.env";
%inputtype=("Date","input","Title","textarea","Source","textarea","Time","input",
	"Date Added","input","Track List","textarea","Note","textarea");
$editicon=qq{<img src="/trc/icons/edit.gif" border=0 alt="Edit">};
%cantedit=("Date",1);
dbmopen(%DB,"/home/todd/private/db/arogerscd-r.db",undef);
&ReadParse;
&htmlopen("Warren's CD-R List|");
&getparams;
if($in){
	if($in{Password}&&$in{Password} eq $DB{Password}){$key=&doupdate;}
	else{print "You must supply a valid password";}
}
$beginedit=$param{edit}?"<div style='background-color: #eeeeee'>\n<A href=$weblib::URL/edit=Title>$editicon</a>\n":"";
$endedit=$param{edit}?"</div>\n":"";
if($param{edit} eq "Title"){
	print <<EOF;
<form action="$weblib::URL/edit=Title" method=POST>
<!-- input name=Title size=100 value="$DB{Title}"><br -->
<textarea name=Title rows=5 cols=80>$DB{Title}</textarea><br>
<b>Password</b> <input type=password name=Password><br>
<input type=submit value="Update Title">
</form>
EOF
}
else{print $beginedit,"<center><h1>$DB{Title}</h1></center>\n",$endedit;}
$beginedit=$param{edit}?"<div style='background-color: #eeeeee'>\n<A href=$weblib::URL/edit=Intro>$editicon</a>\n":"";
$endedit=$param{edit}?"</div>\n":"";
if($param{edit} eq "Intro"){
	print <<EOF;
<form action="$weblib::URL/edit=Intro" method=POST>
<textarea name=Intro rows=25 cols=80>$DB{Intro}</textarea><br>
<b>Password</b> <input type=password name=Password><br>
<input type=submit value="Update Intro">
</form>
EOF
}
else{print $beginedit,$DB{Intro},$endedit;}
$oldyear="";
@fullkeys=grep(s/^Date%%//,sort keys %DB);
if($param{full}){@keys=@fullkeys;}
elsif($param{newest}){
	$param{newest}=30 if $param{newest}<1;
	foreach $key(@fullkeys){
		next unless $date=$DB{"Date Added%%$key"};
		($month,$day,$year)=split(m#/#,$date);
		$time=timelocal(0,0,12,$day,$month-1,$year-1900);
		next if time-(86400*$param{newest}) > $time;
		push(@keys,$key);
	}
}
elsif($param{year}){
	foreach $key(@fullkeys){
		$year=substr($key,0,4);
		next unless $year eq $param{year};
		push(@keys,$key);
	}
}
elsif($param{decade}){
	foreach $key(@fullkeys){
		$decade=substr($key,0,3);
		next unless $decade eq $param{decade};
		push(@keys,$key);
	}
}
if($param{edit} && $param{edit} ne "-1"){@keys=($param{edit});}
if($param{edit} eq "Title" || $param{edit} eq "Intro"){@keys=();}
if(@fullkeys){
	foreach $key(@fullkeys){
		$year=substr($key,0,4);
		if($year !~ /\d\d\d\d/){($year)=$key=~/^(\D+)/;}
		push(@year,$year) if $year ne $oldyear;
		$oldyear=$year;
	}
	print "<hr>";
	$unadornedURL=$weblib::URL;
	$weblib::URL.="/edit" if $param{edit};
	print "List only items added in last ";
	print "<a href=$weblib::URL/newest=15>15 days</a>\n";
	print "(<a href=$weblib::URL/newest=30>30 days</a>)\n";
	print "(<a href=$weblib::URL/newest=45>45 days</a>)\n";
	print "(<a href=$weblib::URL/newest=60>60 days</a>)\n";
	print "<A href=$weblib::URL/full>Print full list</a><br>\n";
	$olddecade="";
	foreach $year(@year){
		next if $year eq " ";
		$decade=substr($year,0,3);
		if($decade ne $olddecade){
			print "<br>";
			if($decade =~ /\d\d\d/){print "<b>${decade}0s:</b> ";}
			else{print "<b>$decade:</b> ";}
		}
		$olddecade=$decade;
		print "<a href=$weblib::URL/year=",substr($year,0,4),">$year</a>\n";
	}
	print "<br><a href=$unadornedURL/edit=new>Create New Entry</a>\n" if $param{edit};
	print "<br><A href=$unadornedURL>Exit Edit Mode</a>\n" if $param{edit};
	print "<hr>\n";
}
if(@keys){
	$oldyear="";
	foreach $key(@keys){
		$year=substr($key,0,4);
		if($year ne $oldyear){
			print "</table>\n"if $oldyear;
			&printheader;
		}
		&printrow;
		$oldyear=$year;
	}
	print "</table>\n";
}
print $PAGETAIL;
&htmlclose;
sub printheader{
	print "<form action=$weblib::URL=$key method=POST>\n<input type=hidden name=Key value=\"$key\">\n"
		if $param{edit} eq $key;
	print "<p>\n";
	print "<table border>\n";
	print "<tr>\n";
	foreach $type("Date","Title","Source","Time"){print "<th>$type</th>\n";}
	print "</tr>\n";
}
sub printrow{
	print "<tr>\n";
	foreach $type("Date","Title","Source","Time"){
		print "<td bgcolor=cyan>";
		$edit=$param{edit}&&$type eq "Date"?"<A href=$unadornedURL/edit=$key>$editicon</a>\n":"";
		if(($value=$DB{"$type%%$key"}) || ($value=$in{$type}) || $key eq "new"){
			if($param{edit} eq $key){
				if($cantedit{$type} && $key ne "new"){
					print $DB{"$type%%$key"};
					print qq{<br><input type=submit name=Delete value="Delete Entry">};
				}
				elsif($inputtype{$type} eq "input"){	
					print qq{<input name="$type" value="$value">};
				}
				else{
					print qq{<textarea name="$type" cols=40 rows=5>$value</textarea>};
				}
			}
			else{print $edit,$DB{"$type%%$key"};}
		}
		else{print "<br>\n";}
		print "</td>\n";
	}
	print "</tr>\n";
	print "<tr><td colspan=4>";
	if($param{edit} eq $key){
		@date=localtime;
		$dateupdated=sprintf("%d/%d/%d",$date[4]+1,$date[3],$date[5]+1900);
		$dateadded=$DB{"Date Added%%$key"};
		$dateadded="Unknown" unless $dateadded;
		print qq{<b>Date Originally Added:</b> $dateadded<br>},
			qq{<input type=checkbox name="DoNotUpdateDate Added" checked> Do not update "Date Added"<br>\n}
			unless $key eq "new" && $in{Date} eq "";
		print qq{<input type=hidden name="Date Added" value="$dateupdated">\n};
		@typelist=("Track List","Note");
	}
	else{
		@typelist=("Date Added","Track List","Note");
	}
	foreach $type(@typelist){
		if(($value=$DB{"$type%%$key"}) || ($value=$in{$type}) || $key eq "new"){
			if($param{edit} eq $key){
				if($inputtype{$type} eq "input"){
					print qq{<b>$type</b><input name="$type" value="$value"><br>\n};
				}
				else{
					print qq{<b>$type</b><br><textarea name="$type" cols=80 rows=20>$value</textarea><br>\n};
				}
			}
			else{print "<b>$type:</b>",$DB{"$type%%$key"},"<br>\n" if $DB{"$type%%$key"};}
		}
	}
	if($param{edit} eq $key){
		print "<b>Password</b> <input type=password name=Password><br>\n";
		print "<input type=submit value=\"Update Entry\">\n</form>";
	}
	print "</td>\n</tr>\n";
}
sub doupdate{
	local($key)=delete $in{Key};
	local($type);
	delete $in{Password};
	if(delete $in{Delete}){
		$in{Date}=$DB{"Date%%$key"};
		foreach $type(keys %inputtype){delete $DB{"$type%%$key"};}
		$param{edit}=$key="new";
		return($key);
	}
	if($key eq "new"){
		$key=&makekey($in{Date});
		if($key eq ""){
			print "<hr>Unable to construct key. Please ensure that date is in proper format<hr>";
			return;
		}
		$param{edit}=$key;
	}
	foreach $field(keys %in){
		next if $field =~ /^DoNotUpdate/;
		$fieldkey=$key?"$field%%$key":"$field";
		$DB{$fieldkey}=$in{$field} unless $in{"DoNotUpdate$field"};
	}
	return $key;
}
sub makekey{
	local($date)=shift;
	local($key,$month,$day,$year,$month2,$day2,$year2);
	if($date=~m#^(\d+)/(\d+)/(\d+)$#){($month,$day,$year)=($1,$2,$3);}
	elsif($date=~m#^(\d{4})[-/](\d{4})$#){$year=$2;}
	elsif($date=~m#^(\d+)/(\d+)$#){($month,$year)=($1,$2);}
	elsif($date=~m#^(\d+)$#){$year=$1;}
	elsif($date=~m#^(\d+)/(\d+)/(\d+) and (\d+)/(\d+)/(\d+)$#){
		($month,$day,$year)=($1,$2,$3);
		($month2,$day2,$year2)=($4,$5,$6);
	}
	if($year ne "" && $year < 60){$year+=2000;}
	if($year ne "" && $year <100){$year+=1900;}
	if($month&&$day&&$year){$key=sprintf("%4d%02d%02d00",$year,$month,$day);}
	elsif($month&&$year){$key=sprintf("%4d%02d0000",$year,$month);}
	elsif($year){$key=sprintf("%4d000000",$year);}
	elsif($date =~ /various/i){$key="Various00";}
	if($key){while($DB{"Date%%$key"}){$key++;}}
	return $key;
}
