#!/usr/bin/perl


$nextpage = "next page";
$prevpage = "prev page";
$showpage = "show page";

print "Content-type:text/html\n\n";
&chugCGI(*input);



$url = $input{"url"};

$perpage = $input{"perpage"};
if($perpage eq ""){
    $perpage = 100;
}

$currentpage = $input{"currentpage"};
if($currentpage eq ""){
    $currentpage = 0;
}

if($input{"task"} eq $nextpage) {$currentpage++;}
if($input{"task"} eq $prevpage) {$currentpage--;}
if($input{"task"} eq $showpage) {$currentpage = 0;}





$inlineall = $input{"inlineall"};


if($url ne ""){
    if($currentpage > 1){
	$buttons .= qq(<input type="submit" name="task" value="$prevpage">);
    }
    $buttons .= qq(<input type="submit" name="task" value="$nextpage">);
    $buttons .= "<br>";
}

print <<__EOQ__;
<head><title>skiplinks</title></head>
<body >
<a href="/">kisrael.com</a> | <a href="/tools/">tools</a> |
<b>skiplinks</b><br>
Show contents of links for a URL inline, on one page....


<form>
$buttons

<input type="hidden" name="currentpage" value="$currentpage">
URL:<input size=80 name="url" value="$url">
<input type="checkbox" name="inlineall" $inlineall value="CHECKED">inline non-img<br>
per page <input name="perpage" value="$perpage"> <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="submit" name="task" value="$showpage">

<hr><hr>



__EOQ__


if($url ne ""){





use LWP::UserAgent;
use HTML::LinkExtor;
use URI::URL;

my $ua = LWP::UserAgent->new(agent => "my agent V1.00");

my $request  = HTTP::Request->new('GET', $url);
my $response = $ua->request($request);

unless ($response->is_success) {
	print $response->error_as_HTML . "\n";
	exit(1);
}

my $res = $response->content(); # content without HTTP header

my @imgs  = ();
my @hrefs = ();

# Make the parser.  Unfortunately, we don't know the base yet
# (it might be diffent from $url)
my $p = HTML::LinkExtor->new(\&callback);

$p->parse($res);


# Expand all image URLs to absolute ones
my $base = $response->base;
@imgs = map { $_ = url($_, $base)->abs; } @imgs;
@hrefs = map { $_ = url($_, $base)->abs; } @hrefs;

#print "Images:\n";
#foreach (@imgs) { print "----> $_\n" }

# @hrefs = @hrefs[($currentpage * $perpage) .. (($currentpage+1) *$perpage) ];

print "hrefs is @hrefs";

foreach $href (@hrefs) { 
if($href =~ /.gif/i ||
$href =~ /.png/i ||
$href =~ /.jpg/i ||
$href =~ /.jpeg/i){
	print<<__EOQ__;
<h2><a href="$href">$href</a></h2>
<img src="$href">
<hr>
__EOQ__
} else {
    if($inlineall ne ""){
       
	my $request  = HTTP::Request->new('GET', $href);
	my $response = $ua->simple_request($request);
	my $content = $response->content;
	print<<__EOQ__;

#TODO: should be smart and try and embed href in src=" when not starting http...


<h2><a href="$href">$href</a></h2>
$content
<hr>
__EOQ__


} else {
    print<<__EOQ__;
<font color="red"><h2>Skipping Link <a href="$href">$href</a></h2></font>
<hr>
__EOQ__
}
}



}

sub callback {
     my($tag, %attr) = @_;

     push(@imgs , values %attr) if $tag eq 'img';
     push(@hrefs, values %attr) if $tag eq 'a';
}




}

print qq(<br><br>$buttons</form>);
print "</body>";


sub chugCGI { local (*in) = @_ if @_; local ($i, $key, $val);
if($ENV{'REQUEST_METHOD'}eq"POST") { read(STDIN,$in,$ENV{'CONTENT_LENGTH'});
 }else {$in = $ENV{'QUERY_STRING'};} @in = split(/&/,$in);
foreach $i (0 .. $#in) { $in[$i] =~ s/\+/ /g;
($key, $val) = split(/=/,$in[$i],2);$key =~ s/%(..)/pack("c",hex($1))/ge;
$val =~ s/%(..)/pack("c",hex($1))/ge; $in{$key}.= $val;}return length($in);}
