#-*-Perl-*-

# According to the algorithm below (strips published on www.peterzale.com):
# - the strip 001 was published 1996-Jul-27
# - the strip 579 was published 2000-May-20
# The strips at http://www.comicspage.com/helen/ appeared 2000-Oct-27

$hof{"helen"} = 0;

sub helen_skip_zone {
    my $today = shift @_;
    
    return ( # No strips between :
	     (($today > mkgmtime(0,0,0,30,4,99))
	      && ($today < mkgmtime(0,0,0,16,7,99))) 
	     ||
	     (($today > mkgmtime(0,0,0,5,8,99))
	      && ($today < mkgmtime(0,0,0,20,8,99)))
	     ||
	     (($today > mkgmtime(0,0,0,12,11,99))
	      && ($today < mkgmtime(0,0,0,7,1,100)))
	     );
}

sub helen {
    my ($today, $color) = @_;
    my @lt = gmtime($today);
    $today = mkgmtime(0,0,0,$lt[3], $lt[4], $lt[5]);
    
    my $rec = {
	'title' => "Helen Sweetheart of the Internet",
	'author' => "Peter Zale",
	'type' => 'gif',
    };
    
    if ($today >= mkgmtime(0,0,0,27,9,100)) {
	# 2000-Oct-27 -- ????-???-?? : The comic is at www.comicspage.com
	
	$rec->{'main'} = "http://www.comicspage.com/helen/";
	$rec->{'base'} = "http://www.comicspage.com/daily/cshln";
	
	if ($lt[6] == 0) {
	    $rec->{'page'} = strftime("/%Y%m%dcshln-s.gif",@lt);
	} else {
	    $rec->{'page'} = strftime("/%Y%m%dcshln-a.gif",@lt);
	}
	
	return $rec;

    } elsif (($today >= mkgmtime(0,0,0,27,6,96)) && 
	     ($today <= mkgmtime(0,0,0,20,4,100))) {
	# 1996-Jul-27 -- 2000-May-20 : The comic is at peterzale.com
	
	# 6 strips every 14 days (released on mondays) ...
	# Base data : 15 mars 1999 = 410 to 415
	# (other ref : 532=2-7-00/538=21-2-00)
	# Dispatched as one strip a day ...
	# ex: Monday:410 to Saturday:415. None on sunday and the next week.
	
	my $fourteendays = 24 * 3600 * 14;
	my $sevendays = 24 * 3600 * 7;
	my $sixdays  = 24 * 3600 * 6;
	my $oneday = 24 * 3600;
	my $myvalue = mkgmtime(0,0,0,15,2,99) + $sixdays - $oneday;
	my $myvalue2 = mkgmtime(0,0,0,7,1,100) + $sixdays;
	my $mynumber = 415;
	
	return undef if helen_skip_zone($today);
	return undef if ($today == mkgmtime(0,0,0,17,3,99));
	return undef if ($today == mkgmtime(0,0,0,10,9,99));
	
	if ($today > $myvalue) { 
	    # After the 14th of March 1999
	    my ($addvalue, $addnumber);
	    while ($today > $myvalue) {
		if (($myvalue >=  mkgmtime(0,0,0,9,9,99)) &&
		    ($myvalue < mkgmtime(0,0,0,7,1,100))) {
		    $addnumber = 7;
		    $addvalue = $sevendays;
		} else {
		    $addnumber = 6;
		    $addvalue  = $fourteendays;
		}
		$mynumber += (helen_skip_zone($myvalue)) ? 0 : $addnumber;
		$myvalue  += (helen_skip_zone($myvalue)) ? $sevendays : $addvalue;
	    }
	    return undef if (($myvalue <= mkgmtime(0,0,0,9,9,99)) && 
			     ($today <= ($myvalue - $sixdays)));
	    return undef if (($myvalue > mkgmtime(0,0,0,7,1,100)) &&
			     ($today <= ($myvalue - $sixdays)));
	    while ($today < $myvalue) {
		$myvalue -= $oneday;
		$mynumber--;
	    }
	    $mynumber-- if ($today > mkgmtime(0,0,0,17,3,99));
	    $mynumber-- if ($today > mkgmtime(0,0,0,9,9,99));
	} else { 
	    ## Another time ;)
	    while (($myvalue - $sixdays) > $today) {
		$myvalue -= $fourteendays;
		$mynumber -= 6;
	    }
	    $myvalue -= $sixdays;
	    $mynumber -= 6;
	    return undef if ($myvalue >= $today); 
	    
	    my $inc = 0;
	    while ($myvalue < $today) {
		return undef if ($inc++ == 6);
		$myvalue += $oneday;
		$mynumber++;
	    }
	}
	
	my $ending = "b";
	$ending = "a" if ($mynumber > 477);
	
	# The strips have three digit numbers.
	$mynumber = sprintf "%03d", $mynumber;
	
	$rec->{'main'} = "http://www.peterzale.com/helen/";
	$rec->{'archives'} = "http://www.peterzale.com/helen/";
	$rec->{'base'} = "http://www.peterzale.com/helen-strips/";
	$rec->{'page'} = "${mynumber}$ending.gif";
	$rec->{'size'} = [365,456];
	
	if (($mynumber == 476) || ($mynumber == 477)) {
	    $rec{'func'} = sub { return("${mynumber}a.gif",
					"${mynumber}b.gif") };
	}
	
	#  print strftime("%Y%m%d", @lt), " : ${mynumber}\n"; return undef;
	
	return $rec;
    }
    
    # Date requested was either before Helen started or in the "gap"
    return undef;
}

1;
