#!/usr/bin/perl -w
use Term::ANSIColor qw(:constants);
print(RED,"    SlideShow Bob\n");
print("The PNG File Animator\n");
print(GREEN,"V0.0.1 by Graham Lee\n");
print("--------------------\n\n");
#gather information
print(WHITE,"Please enter the title of the animation: ");
$title=<STDIN>;
chomp($title);
print("This program takes filenames of the form fname[i].png, where i is an index number.\n");
print("The index i must start at 0 (otherwise you waste too much memory)!\n");
print("Maximum value of i: ");
$imax=<STDIN>;
chomp($imax);
$numimgs=$imax+1;
print("File prefix (the fname part): ");
$fname=<STDIN>;
chomp($fname);
print("Do you have another set of images to add (such as images of the unit cell)?(Y/N) ");
$anymore=<STDIN>;
if ($anymore =~ /[yY]/i) {
    print("What is the file prefix of these png images? ");
    $fname2=<STDIN>;
    chomp($fname2);
    print("How many slices through the unit cell? ");
    $slices=<STDIN>;
    chomp($slices);
}
else
{
    $fname2="";
}
print("Name of HTML file to generate: ");
$html1name=<STDIN>;
chomp($html1name);
print(BLUE,"\n\nWORKING...\n");
print(WHITE);
$htmlname=">".$html1name;
open(OUTFILE,$htmlname) or die("Error $! received.\n");
select(OUTFILE);
#create HTML
print("<HTML>\n<HEAD>\n<TITLE>$title</TITLE>\n");
#generate JavaScript
print("<SCRIPT>\n");
print("var images = new Array($numimgs);\n");
unless ($fname2 eq "") {
    print("var depth = new Array($numimgs);\n");
}
print("var old_position=0;\nvar frame=0;");
print("for(var i=0;i<$numimgs;i++) {\n");
print("   images[i]=new Image();\n");
print("   images[i].src=\"$fname\" + i + \".png\";\n");
unless ($fname2 eq "") {
    print("   depth[i]=new Image();\n");
    print("   depth[i].src=\"$fname2\" + i + \".png\";\n");
}
print("}\n\n");

print("function step_forward()\n{\n");
print("   frame=++frame;\n");
print("   if (frame>$imax) frame=0;\n");
print("   document.animation.src=images[frame].src;\n");
print("   new_position=frame;\n");
print("   if(document.images) {\n");
print("      document.images['img'+old_position].src='black.png';\n");
print("      document.images['img'+new_position].src='white.png';\n");
print("   }\n");
print("   old_position=new_position;\n");
unless ($fname2 eq "") {
    print("   document.depthguage.src=depth[frame].src;\n");
    print("   document.depthform.zvalue.value=frame/$slices;\n");
}
print("}\n\n");

print("function step_backward()\n{\n");
print("   frame=--frame;\n");
print("   if (frame<0) frame=$imax;\n");
print("   document.animation.src=images[frame].src;\n");
print("   new_position=frame;\n");
print("   if(document.images) {\n");
print("      document.images['img'+old_position].src='black.png';\n");
print("      document.images['img'+new_position].src='white.png';\n");
print("   }\n");
print("   old_position=new_position;\n");
unless ($fname2 eq "") {
    print("   document.depthguage.src=depth[frame].src;\n");
    print("   document.depthform.zvalue.value=frame/$slices;\n");
}
print("}\n\n");

print("function scrollbar(new_position)\n{\n");
print("   frame=new_position;\n");
print("   if(document.images) {\n");
print("      document.images['img'+old_position].src='black.png';\n");
print("      document.images['img'+new_position].src='white.png';\n");
print("   }\n");
print("   document.animation.src=images[frame].src;\n");
print("   old_position=new_position;\n");
unless ($fname2 eq "") {
    print("   document.depthguage.src=depth[frame].src;\n");
    print("   document.depthform.zvalue.value=frame/$slices;\n");
}
print("}\n\n");
print("</SCRIPT>\n");
#end of JavaScript
print("<STYLE>\n");
print("img {border-left:0; border-right:0; border-top:0; border-bottom:0; margin-left:0; margin-right:0; padding-left:0; padding-right:0}\n");
print("a {border-left:0; border-right:0; margin-left:0; margin-right:0; word-spacing:0; letter-spacing:0}\n");
print("</STYLE>\n</HEAD>\n\n");
print("<BODY TEXT=\"#FFFFCC\" BGCOLOR=\"#006633\" LINK=\"#EAEAEA\" ALINK=\"#FFCCFF\" VLINK=\"#00FFFF\">\n\n");
print("<CENTER><H1>$title</H1>\n\n");
unless ($fname2 eq "") {
    print("<FORM NAME=depthform>\n");
    print("Depth (z): <INPUT READONLY=\"readonly\" type=text name=zvalue value=\"0\">\n");
    print("</FORM>\n\n");
}
print("<BR>\n");
print("<IMG SRC=\"".$fname."0.png\" NAME=animation>");
unless ($fname2 eq ""){
    print("<IMG SRC=\"".$fname2."0.png\" NAME=depthguage>");
}
print("\n<BR>\n");
print("<A OnClick=\"step_backward()\">[-]</A>&nbsp;");
print("<A OnClick=\"return false\" OnMouseOver=\"scrollbar(0);\">");
print("<IMG SRC=\"white.png\" NAME=img0></A>");
for($i=1;$i<$numimgs;$i++) {
    print("<A OnClick=\"return false\" OnMouseOver=\"scrollbar($i);\">");
    print("<IMG SRC=\"black.png\" NAME=img$i></A>");
}
print("&nbsp;<A OnClick=\"step_forward()\">[+]</A>\n");
print("<BR>\n");
print("Hover the mouse over the scrollbar to jump to a position in the series.\n");
print("Click on the +/- buttons to skip forward or backward one frame.\n");
print("</CENTER>\n</BODY>\n</HTML>\n");
#finished generating HTML
select(STDOUT);
close(OUTFILE);
print(BLUE,"Finished generating $html1name!\n");
print(WHITE,"SlideShow Bob Complete.\n");
