<?php
// tutorial_to_animated_gif.php
// RJM Programming
// September, 2015
// Thanks to http://www.jeroenvanwissen.nl/weblog/php/howto-generate-animated-gif-with-php


if (isset($_GET['urlminus']) && isset($_GET['icnt']) && isset($_GET['lastioid']) && isset($_GET['incis']) && isset($_GET['upprefix']) && isset($_GET['upsuffix']) && isset($_GET['upto']) && isset($_GET['thisto'])) {
  $it=0;
  $upit=0;
  $upsuffix=str_replace("+"," ",urldecode($_GET['upsuffix']));
  $thisto=str_replace("+"," ",urldecode($_GET['thisto']));
  $upto=str_replace("+"," ",urldecode($_GET['upto']));
  if (substr(($upto . " "), 0, 1) == ",") {
    $spare=$upto;
    $upto=$thisto . $spare;
  }
  $upsuffixes=explode(",",$upsuffix);
  $uptoes=explode(",",$upto);
  $urlminus=str_replace("+"," ",urldecode($_GET['urlminus']));
  $upprefix=str_replace("+"," ",urldecode($_GET['upprefix']));
  $lastioid=str_replace("+"," ",urldecode($_GET['lastioid']));
  $incis=str_replace("+"," ",urldecode($_GET['incis']));
  $icnt=str_replace("+"," ",urldecode($_GET['icnt']));
  $scris="";
  $cis=file_get_contents(str_replace('https:','http:',str_replace('Https:','http:',$urlminus)));
  if ($cis != "") {
  $scris.="\n<scr" . "ipt type='text/javascript'>\n";
  $scris.="\n var icnt=eval(-1 + " . $icnt . "), lastio='" . $lastioid . "', fo=null, newi=null; \n function dothis() { \n";
  for ($iit=2; $iit<=(sizeof($upsuffixes) + sizeof($uptoes)); $iit++) {
  //if (file_exists('a.aa')) {
  // file_put_contents('a.aa', '' . file_get_contents('a.aa') . ' here with iit=' . $iit . ' ' . strlen($cis) . ' ... ' . $urlminus . ' ... iit=' . $iit . ' vs ' . (sizeof($upsuffixes) + sizeof($uptoes)));
  //}
  $scris.="\n if (icnt == 1) { \n";
  $scris.="\n   parent.document.getElementById('slideshow').value='" . $urlminus . "'; \n } else if (lastio != '') {  parent.document.getElementById(lastio).value='" . $urlminus . "'; \n   }   \n";
  if (("$icnt" == "2" || "$lastioid" != "") && $iit == 2) { $urlminus="";    }
  while ($cis != "") {
  $sc=strlen($cis);
  $scris.="\n if ('" . $sc . "' != '1') { \n"; 
  $scris.="\n fo=parent.document.getElementById('fdiv' + icnt); \n";
  $scris.="\n icnt++; \n";
  $scris.="\n newi=parent.document.getElementById('slideshow' + icnt); \n";
  $scris.="\n if (newi) { if (newi.innerHTML.length == 0) {  newi=null; } } \n";
  
  $scris.="\n if (fo != null && newi == null) { \n";
  $scris.="\n  if (fo.id == 'slideshow') { fo.value='" . $urlminus . "'; } else { fo.innerHTML+=\"Tutorial Slideshow Image \" + icnt + \" <input title='Please note a minus between numericals can define a URL range of image URLs' onblur='maybemore(this.value, this.id, this);' style='width:70%;' type='text' id='slideshow\" + icnt + \"' name='slideshow\" + icnt + \"' value='" . $urlminus . "'></input><br><br><div id='fdiv\" + icnt + \"'></div>\"; } \n";
  $scris.="\n  }   \n";
  $scris.="\n  }   \n";
  if ("$thisto" == explode(",",$upto)[0] || ((-1 + $thisto) < explode(",",$upto)[0] && "$incis" == "-1") || ((1 + $thisto) > explode(",",$upto)[0] && "$incis" != "-1")) {
    $cis="";
  } else {
  if ("$incis" == "-1") {
    $thisto--;
    $urlminus=$upprefix . $thisto . explode(",",$upsuffix)[0];
    $cis=file_get_contents(str_replace('https:','http:',str_replace('Https:','http:',$urlminus)));
    if (explode(",",$upto)[0] != "" && $cis == "") { $cis=" "; }
  } else {
    $thisto++;
    $urlminus=$upprefix . $thisto . explode(",",$upsuffix)[0];
    $cis=file_get_contents(str_replace('https:','http:',str_replace('Https:','http:',$urlminus)));
    if (explode(",",$upto)[0] != "" && $cis == "") { $cis=" "; }
  }
  }
  
  } //?
  
  //if ($cis == "") {
  
  if (6 == 6) {
   //file_put_contents('a.aa', '' . file_get_contents('a.aa') . ' again ' . ($iit - 2 + 1) . '<' . sizeof($uptoes) . '? '  . ($iit + 2) . '<' . (sizeof($uptoes) + sizeof($upsuffixes)) . ' ');
  if (($iit - 2 + 1) < sizeof($uptoes)) { 
    $scris.="\n lastio=''; \n"; //   parent.document.getElementById('slideshow').value=''; \n";
    $it++;  
    $lastio=''; 
    $icnt++; 
    $xx=$uptoes[$iit - 2 + 1];
   //file_put_contents('a.aa', '' . file_get_contents('a.aa') . ' whyxx=' . $xx . ' ');
    if (strpos($xx, "-") !== false) {
    $thisto=explode("-", $xx)[0];
    $upto=explode("-", $xx)[1];
    if ($thisto != $upto) {
      if ("$incis" == "-1") {
        if ($upto > $thisto) { $incis=1; }
      } else {
        if ($upto < $thisto) { $incis=-1; }
      }
    }
    $urlminus=$upprefix . $thisto . explode(",",$upsuffix)[0];
    $cis=file_get_contents(str_replace('https:','http:',str_replace('Https:','http:',$urlminus)));
   //file_put_contents('a.aa', '' . file_get_contents('a.aa') . ' tHiSTo=' . $thisto . ' urlminus=' . $urlminus . ' ');
    //file_put_contents('a.aa', ' ' . strlen($cis) . ' ... ' . $urlminus . ' ... iit=' . $iit . ' vs ' . (sizeof($upsuffixes) + sizeof($uptoes)));
    if (explode(",",$upto)[0] != "" && $cis == "" && $iit < (sizeof($upsuffixes) + sizeof($uptoes))) { $cis=" "; }

    } else {
    $thisto=$xx;
    $upto=$xx;
    $urlminus=$upprefix . $thisto . explode(",",$upsuffix)[0];
    $cis=file_get_contents(str_replace('https:','http:',str_replace('Https:','http:',$urlminus)));
   //file_put_contents('a.aa', '' . file_get_contents('a.aa') . ' thiSTo=' . $thisto . ' urlminus=' . $urlminus . ' ');
    //file_put_contents('a.aa', file_get_contents('a.aa') . ' ' . strlen($cis) . ' ... ' . $urlminus . ' ... iit=' . $iit . ' vs ' . (sizeof($upsuffixes) + sizeof($uptoes)));
    if (explode(",",$upto)[0] != "" && $cis == "" && $iit < (sizeof($upsuffixes) + sizeof($uptoes))) { $cis=" "; }
    }
  //} elseif (($iit + 2) < (sizeof($uptoes) + sizeof($upsuffixes))) { 
  } elseif (($iit - 2 + 1) < (sizeof($uptoes) + sizeof($upsuffixes))) { 
    $scris.="\n lastio=''; \n"; //    parent.document.getElementById('slideshow').value=''; \n";
    $lastio=''; 
    $icnt++; 
    //$upit++;  
    $xx=$upsuffixes[$iit - sizeof($uptoes)];
   //file_put_contents('a.aa', '' . file_get_contents('a.aa') . ' xx=' . $xx . ' ');
    if (strpos($xx, "-") !== false) {
    $thisto=explode("-", $xx)[0];
    $upto=explode("-", $xx)[1];
    if ($thisto != $upto) {
      if ("$incis" == "-1") {
        if ($upto > $thisto) { $incis=1; }
      } else {
        if ($upto < $thisto) { $incis=-1; }
      }
    }
    $urlminus=$upprefix . $thisto . explode(",",$upsuffix)[0];
    $cis=file_get_contents(str_replace('https:','http:',str_replace('Https:','http:',$urlminus)));
   //file_put_contents('a.aa', '' . file_get_contents('a.aa') . ' thisTo=' . $thisto . ' urlminus=' . $urlminus . ' ');
    } else {
    $thisto=$xx;
    $upto=$xx;
    $urlminus=$upprefix . $thisto . explode(",",$upsuffix)[0];
    $cis=file_get_contents(str_replace('https:','http:',str_replace('Https:','http:',$urlminus)));
   //file_put_contents('a.aa', '' . file_get_contents('a.aa') . ' thisto=' . $thisto . ' urlminus=' . $urlminus . ' ');
    $cis=file_get_contents(str_replace('https:','http:',str_replace('Https:','http:',$urlminus)));
    //file_put_contents('a.aa', file_get_contents('a.aa') . ' ' . strlen($cis) . ' ... ' . $urlminus . ' ... iit=' . $iit . ' vs ' . (sizeof($upsuffixes) + sizeof($uptoes)));
    if (explode(",",$upto)[0] != "" && $cis == "" && $iit < (sizeof($upsuffixes) + sizeof($uptoes))) { $cis=" "; }
    }
  }
  
  }
  //}
  
  // }   // ?
  
  
  //}
  }
  $scris.="\n } \n </scr" . "ipt>\n";
    //file_put_contents('a.aa', $scris);
  }
  if ($scris != "") {
    //file_put_contents('a.aa', $scris);
    echo "<!doctype html><html><head>" . $scris . "</head><body onload=dothis();>&nbsp;</body></html>";
  }
  exit;
}

$ris=0;
$gis=0;
$bis=0;
$zzz=",0,0,0,";
$stfle="";
$prestfle="";
$extras="";
$ismulti=[];
$ismultidatauri=[];
$icnt=1;
$moreh1="";
$imagegif="";
$imagegifandthen="";
$delay=40;  // 1000 / 40
$videopath="/opt/local/bin/";
//$aret=[];
//$videopaths=exec("which ffmpeg 2>&1",$aret,$retv);
//$videopath=explode("ffmpeg",explode("\n",$videopaths)[-1 + sizeof(explode("\n",$videopaths))])[0]; //      $videopaths[-1 + sizeof($videopaths)]; //$aret[0];
//echo $retv . "~" . $videopaths . "*" . $videopath . "^" . $aret[0];
//exit;
$videocmd=$videopath . "ffmpeg -r " . (1000 / $delay) . " -i " . dirname(__FILE__) . DIRECTORY_SEPARATOR . "%03d.jpg " . dirname(__FILE__) . DIRECTORY_SEPARATOR . "video.mp4 2> " . dirname(__FILE__) . DIRECTORY_SEPARATOR . "video.bad";
$svideocmd="ffmpeg -r " . (1000 / $delay) . " -i " . "%03d.jpg " . "video.mp4";
$videohtml="<video controls id=ivideo type='video/mp4'><source src='video.mp4'></source></video>";
$videosuffix="";
$ipis="";
$agifphp="<?php

header ('Content-type:image/gif');
include('GIFEncoder.class.php');
";

$eachone="

\$text='';

// Open the first source image and add the text.
\$image = imagecreatefromjpeg('source01.jpg');
\$text_color = imagecolorallocate(\$image, 200, 200, 200);
imagestring(\$image, 5, 5, 5,  \$text, \$text_color);

// Generate GIF from the $image
// We want to put the binary GIF data into an array to be used later,
//  so we use the output buffer.
ob_start();
imagegif(\$image);
\$frames[]=ob_get_contents();
\$framed[]=40; // Delay in the animation.
ob_end_clean();

// And again..
";

$eachonestring="

\$text='';

// Open the first source image and add the text.
\$underimage = imagecreatefromjpeg('source01.jpg');
\$old_width  = imagesx(\$underimage);
\$old_height = imagesy(\$underimage);
\$image = imagecreatetruecolor(\$old_width, \$old_height);
\$black = imagecolorallocatealpha(\$image, 254, 254, 254, 0);
imagefill(\$image, 0, 0, \$black);
imagecopyresampled(\$image, \$underimage, 0, 0, 0, 0, \$old_width, \$old_height, \$old_width, \$old_height); 
imagecolortransparent(\$image, \$black);
\$text_color = imagecolorallocate(\$image, 200, 200, 200);
imagestring(\$image, 5, 5, 5,  \$text, \$text_color);

// Generate GIF from the $image
// We want to put the binary GIF data into an array to be used later,
//  so we use the output buffer.
ob_start();
imagegif(\$image);
\$frames[]=ob_get_contents();
\$framed[]=40; // Delay in the animation.
ob_end_clean();

// And again..
";

if (isset($_GET['red']) && isset($_GET['green']) && isset($_GET['blue'])) {
$prestfle="<input type=hidden name=red value='" . $_GET['red'] . "'></input><input type=hidden name=green value='" . $_GET['green'] . "'></input><input type=hidden name=blue value='" . $_GET['blue'] . "'></input>";
$zzz="," . $_GET['red'] . "," . $_GET['green'] . "," . $_GET['blue'] . ",";
$lastbit="
// Generate the animated gif and output to screen.
\$gif = new GIFEncoder(\$frames,\$framed,0,2" . $zzz . "'bin');
echo \$gif->GetAnimation();

?>
"; 
} else if (isset($_POST['red']) && isset($_POST['green']) && isset($_POST['blue'])) {
$prestfle="<input type=hidden name=red value='" . $_POST['red'] . "'></input><input type=hidden name=green value='" . $_POST['green'] . "'></input><input type=hidden name=blue value='" . $_POST['blue'] . "'></input>";
$zzz="," . $_POST['red'] . "," . $_POST['green'] . "," . $_POST['blue'] . ",";
$lastbit="
// Generate the animated gif and output to screen.
\$gif = new GIFEncoder(\$frames,\$framed,0,2" . $zzz . "'bin');
echo \$gif->GetAnimation();

?>
"; 
} else if (isset($_GET['background-color'])) {
$colis=str_replace('#','',urldecode($_GET['background-color']));
if ($colis != "") {
$cn=color_name_to_hex($colis);
if ((strcmp(substr($colis,0,1),'0') < 0 || strcmp(substr($colis,0,1),'9') > 0) && $cn != $colis) {
$prestfle="<input type=hidden name=background-color value='" . urldecode($_GET['background-color']) . "'></input>";
$zzz="," . $ris . "," . $gis . "," . $bis . ",";
$lastbit="
// Generate the animated gif and output to screen.
\$gif = new GIFEncoder(\$frames,\$framed,0,2" . $zzz . "'bin');
echo \$gif->GetAnimation();

?>
"; 
} else if (strlen($colis) == 6) {
$prestfle="<input type=hidden name=background-color value='" . urldecode($_GET['background-color']) . "'></input>";
$zzz="," . hexdec(substr($colis,0,2)) . "," . hexdec(substr($colis,2,2)) . "," . hexdec(substr($colis,4,2)) . ",";
$lastbit="
// Generate the animated gif and output to screen.
\$gif = new GIFEncoder(\$frames,\$framed,0,2" . $zzz . "'bin');
echo \$gif->GetAnimation();

?>
"; 
} else if (strpos(strtolower($colis),'rgb') !== false) {
$prestfle="<input type=hidden name=background-color value='" . urldecode($_GET['background-color']) . "'></input>";
$zzz="," . explode(",",str_replace(")",",",str_replace("rgb(","",str_replace("rgba(","",strtolower($colis)))))[0] . "," . explode(",",str_replace("rgb(","",str_replace("rgba(","",strtolower($colis))))[1] . "," . explode(",",str_replace("rgb(","",str_replace("rgba(","",strtolower($colis))))[2] . ",";
$lastbit="
// Generate the animated gif and output to screen.
\$gif = new GIFEncoder(\$frames,\$framed,0,2" . $zzz . "'bin');
echo \$gif->GetAnimation();

?>
"; 
} else {
$lastbit="
// Generate the animated gif and output to screen.
\$gif = new GIFEncoder(\$frames,\$framed,0,2,0,0,0,'bin');
echo \$gif->GetAnimation();

?>
"; 
}
}

} else if (isset($_POST['background-color'])) {
$colis=str_replace('#','',urldecode($_POST['background-color']));
if ($colis != "") {
$cn=color_name_to_hex($colis);
if ((strcmp(substr($colis,0,1),'0') < 0 || strcmp(substr($colis,0,1),'9') > 0) && $cn != $colis) {
$prestfle="<input type=hidden name=background-color value='" . urldecode($_POST['background-color']) . "'></input>";
$zzz="," . $ris . "," . $gis . "," . $bis . ",";
$lastbit="
// Generate the animated gif and output to screen.
\$gif = new GIFEncoder(\$frames,\$framed,0,2" . $zzz . "'bin');
echo \$gif->GetAnimation();

?>
"; 
} else if (strlen($colis) == 6) {
$prestfle="<input type=hidden name=background-color value='" . urldecode($_POST['background-color']) . "'></input>";
$zzz="," . hexdec(substr($colis,0,2)) . "," . hexdec(substr($colis,2,2)) . "," . hexdec(substr($colis,4,2)) . ",";
$lastbit="
// Generate the animated gif and output to screen.
\$gif = new GIFEncoder(\$frames,\$framed,0,2" . $zzz . "'bin');
echo \$gif->GetAnimation();

?>
"; 


} else if (strpos(strtolower($colis),'rgb') !== false) {
$prestfle="<input type=hidden name=background-color value='" . urldecode($_POST['background-color']) . "'></input>";
$zzz="," . explode(",",str_replace(")",",",str_replace("rgb(","",str_replace("rgba(","",strtolower($colis)))))[0] . "," . explode(",",str_replace("rgb(","",str_replace("rgba(","",strtolower($colis))))[1] . "," . explode(",",str_replace("rgb(","",str_replace("rgba(","",strtolower($colis))))[2] . ",";
$lastbit="
// Generate the animated gif and output to screen.
\$gif = new GIFEncoder(\$frames,\$framed,0,2" . $zzz . "'bin');
echo \$gif->GetAnimation();

?>
"; 



} else {
$lastbit="
// Generate the animated gif and output to screen.
\$gif = new GIFEncoder(\$frames,\$framed,0,2,0,0,0,'bin');
echo \$gif->GetAnimation();

?>
"; 
}
}
} else {
$lastbit="
// Generate the animated gif and output to screen.
\$gif = new GIFEncoder(\$frames,\$framed,0,2,0,0,0,'bin');
echo \$gif->GetAnimation();

?>
"; 
}

$lastbitfrom="echo \$gif->GetAnimation();";
$lastbitto="\$fp = fopen('animegif.gif', 'w'); 
\$data = \$gif->GetAnimation(); 
\$dataUri = 'data:image/gif;base64,' . base64_encode(\$data);
fwrite(\$fp, \$data); 
fclose(\$fp);
\$fp = fopen('animegif.html', 'w'); 
fwrite(\$fp, '<!doctype html><html><body><h1>Data URI version below<h1><br><h4> ... via web browser (Windows right click, Mac OS X two finger gesture) ...</h4><br><img src=' . \"\\n\" . \$dataUri . \"\\n\" . ' title=DataURI></img></body></html>'); 
fclose(\$fp);";
$agtext="";
$url="";

// converts an html color name to a hex color value
// if the input is not a color name, the original value is returned
// http://wpCodeSnippets.info

function color_name_to_hex($color_name) { // thanks to https://stackoverflow.com/questions/2553566/how-to-convert-a-string-color-to-its-hex-code-or-rgb-value
    global $ris, $gis, $bis;
    // standard 147 HTML color names
    $colors  =  array(
        'aliceblue'=>'F0F8FF',
        'antiquewhite'=>'FAEBD7',
        'aqua'=>'00FFFF',
        'aquamarine'=>'7FFFD4',
        'azure'=>'F0FFFF',
        'beige'=>'F5F5DC',
        'bisque'=>'FFE4C4',
        'black'=>'000000',
        'blanchedalmond '=>'FFEBCD',
        'blue'=>'0000FF',
        'blueviolet'=>'8A2BE2',
        'brown'=>'A52A2A',
        'burlywood'=>'DEB887',
        'cadetblue'=>'5F9EA0',
        'chartreuse'=>'7FFF00',
        'chocolate'=>'D2691E',
        'coral'=>'FF7F50',
        'cornflowerblue'=>'6495ED',
        'cornsilk'=>'FFF8DC',
        'crimson'=>'DC143C',
        'cyan'=>'00FFFF',
        'darkblue'=>'00008B',
        'darkcyan'=>'008B8B',
        'darkgoldenrod'=>'B8860B',
        'darkgray'=>'A9A9A9',
        'darkgreen'=>'006400',
        'darkgrey'=>'A9A9A9',
        'darkkhaki'=>'BDB76B',
        'darkmagenta'=>'8B008B',
        'darkolivegreen'=>'556B2F',
        'darkorange'=>'FF8C00',
        'darkorchid'=>'9932CC',
        'darkred'=>'8B0000',
        'darksalmon'=>'E9967A',
        'darkseagreen'=>'8FBC8F',
        'darkslateblue'=>'483D8B',
        'darkslategray'=>'2F4F4F',
        'darkslategrey'=>'2F4F4F',
        'darkturquoise'=>'00CED1',
        'darkviolet'=>'9400D3',
        'deeppink'=>'FF1493',
        'deepskyblue'=>'00BFFF',
        'dimgray'=>'696969',
        'dimgrey'=>'696969',
        'dodgerblue'=>'1E90FF',
        'firebrick'=>'B22222',
        'floralwhite'=>'FFFAF0',
        'forestgreen'=>'228B22',
        'fuchsia'=>'FF00FF',
        'gainsboro'=>'DCDCDC',
        'ghostwhite'=>'F8F8FF',
        'gold'=>'FFD700',
        'goldenrod'=>'DAA520',
        'gray'=>'808080',
        'green'=>'008000',
        'greenyellow'=>'ADFF2F',
        'grey'=>'808080',
        'honeydew'=>'F0FFF0',
        'hotpink'=>'FF69B4',
        'indianred'=>'CD5C5C',
        'indigo'=>'4B0082',
        'ivory'=>'FFFFF0',
        'khaki'=>'F0E68C',
        'lavender'=>'E6E6FA',
        'lavenderblush'=>'FFF0F5',
        'lawngreen'=>'7CFC00',
        'lemonchiffon'=>'FFFACD',
        'lightblue'=>'ADD8E6',
        'lightcoral'=>'F08080',
        'lightcyan'=>'E0FFFF',
        'lightgoldenrodyellow'=>'FAFAD2',
        'lightgray'=>'D3D3D3',
        'lightgreen'=>'90EE90',
        'lightgrey'=>'D3D3D3',
        'lightpink'=>'FFB6C1',
        'lightsalmon'=>'FFA07A',
        'lightseagreen'=>'20B2AA',
        'lightskyblue'=>'87CEFA',
        'lightslategray'=>'778899',
        'lightslategrey'=>'778899',
        'lightsteelblue'=>'B0C4DE',
        'lightyellow'=>'FFFFE0',
        'lime'=>'00FF00',
        'limegreen'=>'32CD32',
        'linen'=>'FAF0E6',
        'magenta'=>'FF00FF',
        'maroon'=>'800000',
        'mediumaquamarine'=>'66CDAA',
        'mediumblue'=>'0000CD',
        'mediumorchid'=>'BA55D3',
        'mediumpurple'=>'9370D0',
        'mediumseagreen'=>'3CB371',
        'mediumslateblue'=>'7B68EE',
        'mediumspringgreen'=>'00FA9A',
        'mediumturquoise'=>'48D1CC',
        'mediumvioletred'=>'C71585',
        'midnightblue'=>'191970',
        'mintcream'=>'F5FFFA',
        'mistyrose'=>'FFE4E1',
        'moccasin'=>'FFE4B5',
        'navajowhite'=>'FFDEAD',
        'navy'=>'000080',
        'oldlace'=>'FDF5E6',
        'olive'=>'808000',
        'olivedrab'=>'6B8E23',
        'orange'=>'FFA500',
        'orangered'=>'FF4500',
        'orchid'=>'DA70D6',
        'palegoldenrod'=>'EEE8AA',
        'palegreen'=>'98FB98',
        'paleturquoise'=>'AFEEEE',
        'palevioletred'=>'DB7093',
        'papayawhip'=>'FFEFD5',
        'peachpuff'=>'FFDAB9',
        'peru'=>'CD853F',
        'pink'=>'FFC0CB',
        'plum'=>'DDA0DD',
        'powderblue'=>'B0E0E6',
        'purple'=>'800080',
        'red'=>'FF0000',
        'rosybrown'=>'BC8F8F',
        'royalblue'=>'4169E1',
        'saddlebrown'=>'8B4513',
        'salmon'=>'FA8072',
        'sandybrown'=>'F4A460',
        'seagreen'=>'2E8B57',
        'seashell'=>'FFF5EE',
        'sienna'=>'A0522D',
        'silver'=>'C0C0C0',
        'skyblue'=>'87CEEB',
        'slateblue'=>'6A5ACD',
        'slategray'=>'708090',
        'slategrey'=>'708090',
        'snow'=>'FFFAFA',
        'springgreen'=>'00FF7F',
        'steelblue'=>'4682B4',
        'tan'=>'D2B48C',
        'teal'=>'008080',
        'thistle'=>'D8BFD8',
        'tomato'=>'FF6347',
        'turquoise'=>'40E0D0',
        'violet'=>'EE82EE',
        'wheat'=>'F5DEB3',
        'white'=>'FFFFFF',
        'whitesmoke'=>'F5F5F5',
        'yellow'=>'FFFF00',
        'yellowgreen'=>'9ACD32');

    $color_name = strtolower($color_name);
    if (isset($colors[$color_name])) {
        $ris = hexdec(substr($colors[$color_name],0,2));
        $gis = hexdec(substr($colors[$color_name],2,2));
        $bis = hexdec(substr($colors[$color_name],4,2));
        return ('#' . $colors[$color_name]);
    } else {
        return ($color_name);
    }
}

function inhouseslideshow($uarray,$uarraydatauri) {
  global $agtext, $videocmd, $videopath;
  if (sizeof($uarray) == 0) return "";
  if (file_exists($videopath . "ffmpeg")) {
   exec($videocmd); // exec("`which ffmpeg` " . explode("ffmpeg",$videocmd)[1]);
  }
  //echo $videocmd;
  //exit;
  $sofar="<html> \n"; 
  $sofar.="<head> \n";
  $sofar.="<title>" . $agtext . " - via RJM Programming Slideshow Presentation</title> \n";
  $sofar.="<script type=\"text/javascript\"> \n";
  $sofar.="var smode = location.search.split('smode=')[1] ? location.search.split('smode=')[1].split('&')[0] : '1'; \n ";
  $sofar.="var ttl = ' ... click to have this slide stay longer'; \n";
  $sofar.="var nextone=0, inextone=1, jnextone=0; \n";
  $sofar.="var lastone=" . (-1 + sizeof($uarray)) . "; \n ";
  $sofar.="var haveseen=0; \n ";
  $sofar.="var aminterested=0, dt=''; \n ";
  $sofar.="var doit=1, uarraydatauri=[]; \n ";
  for ($ipo=0; $ipo<sizeof($uarraydatauri); $ipo++) {
  $sofar.=" uarraydatauri.push('" . $uarraydatauri[$ipo] . "'); \n ";
  }
  $sofar.="function onck(that) { \n ";
  $sofar.="  doit = 0; \n ";
  $sofar.="} \n ";
  $sofar.="function havealook(backto) { \n ";
  $sofar.="  if (smode == '0') { \n ";
  $sofar.="  if (backto == 0) location.href=document.URL.replace('smode=0','smode=1'); \n ";
  $sofar.="  document.getElementById('i' + nextone).src=uarraydatauri[jnextone]; \n";
  $sofar.="  document.title=dt + \" Slide \" + inextone + \" of \" + eval(lastone + 1); \n ";
  $sofar.="  if (dt == '') {  document.getElementById('myh1').innerHTML='Slideshow Data URI version below';  document.getElementById('som').innerHTML='Start of Movie'; dt=document.getElementById('i' + nextone).title; } else if (inextone == 1) { document.getElementById('som').innerHTML='Start of Movie';  } else { document.getElementById('som').innerHTML='';  }  \n ";
  $sofar.="  inextone=eval(eval(inextone % eval(1 + lastone)) + 1); jnextone=eval(-1 + inextone); \n ";
  $sofar.="  } else { \n ";
  $sofar.="  var thissrc=''; \n ";
  $sofar.="  var prefix=''; \n ";
  $sofar.="  if (doit == 0) { \n ";
  $sofar.="  doit = 1; \n ";
  $sofar.="  } else { \n ";
  $sofar.="  if (aminterested != 0 || backto == 0) { \n ";
  $sofar.="  var cit = document.getElementById('s0'); \n ";
  $sofar.="  if (nextone == lastone) { \n ";
  $sofar.="    thissrc = document.getElementById('i' + nextone).src; \n ";
  $sofar.="    cit.innerHTML = prefix + \"<img onclick='onck(this);' id='j\" + nextone + \"' src='\" + thissrc + \"' title='\" + document.getElementById('i' + nextone).title + ttl + \"' />\"; \n ";
  $sofar.="    nextone = 0; \n ";
  $sofar.="  } else { \n ";
  $sofar.="    thissrc = document.getElementById('i' + nextone).src; \n ";
  $sofar.="    if (backto != 0 && nextone == 0) { \n ";
  $sofar.="       prefix = 'Start of Movie: '; \n ";
  $sofar.="    } \n ";
  $sofar.="    cit.innerHTML = prefix + \"<img onclick='onck(this);' id='j\" + nextone + \"' src='\" + thissrc + \"' title='\" + document.getElementById('i' + nextone).title + ttl + \"' />\"; \n ";
  $sofar.="    nextone = nextone + 1; \n ";
  $sofar.="    if (nextone > 1) haveseen = 1; \n ";
  $sofar.="  } \n ";
  $sofar.="  if (backto == 0) { \n ";
  $sofar.="    nextone = backto; \n ";
  $sofar.="    aminterested = 1; \n ";
  $sofar.="  } \n ";
  $sofar.="  } \n ";
  $sofar.="  var nnext = eval(nextone + 0); \n ";
  $sofar.="  var llast = eval(lastone + 1); \n ";
  $sofar.="  if (nnext >= 1 && nnext <= llast) { \n ";
  $sofar.="    nnext = nnext; \n ";
  $sofar.="  } else if (prefix != '') { \n ";
  $sofar.="    nnext = 1;   \n ";
  $sofar.="  } else if (aminterested != 0 && haveseen == 1) { \n ";
  $sofar.="    nnext = llast; \n ";
  $sofar.="  } else if (aminterested != 0) { \n ";
  $sofar.="    nnext = 1; \n ";
  $sofar.="  } else if (nnext == 0) { \n ";
  $sofar.="    nnext = 1; \n ";
  $sofar.="  } \n ";
  $sofar.="  document.title=document.getElementById('i' + nextone).title + \" Slide \" + nnext + \" of \" + llast; \n ";
  $sofar.="  } \n ";
  $sofar.="  } \n ";
  $sofar.="} \n ";
  $sofar.="function ol() { \n ";

for ($iqw=1; $iqw<sizeof($uarray); $iqw++) {
    $sofar.=" if (smode != '0') document.getElementById('row').innerHTML+='<td><span style=\"color:red;font-size:14px;\"><b>--&gt;</b></span></td><td><img onclick=\"onck(this);\" id=\"i" . $iqw . "\" src=\"" . $uarray[$iqw] . "\" title=\"" . $agtext . "\" /></td>'; \n ";
}

  $sofar.="} \n ";
  $sofar.="window.setInterval(function(){havealook(1)},2000);  \n ";
  $sofar.="</script> \n ";
  $sofar.="<title>" . $agtext . "</title> \n ";
  $sofar.="</head> \n ";
  $sofar.="<body onload=\"document.title=document.title + ' ' + lastone; ol(); \"> \n ";
  $sofar.="<h1 id=myh1>Slideshow version below<h1><br><h4> ... optionally get content via web browser (Windows right click, Mac OS X two finger gesture) ... <span id=som></span></h4><br> \n ";
  $sofar.="<table> \n ";
  $sofar.="<tr id=row> \n ";
  $sofar.="<td><span id='s0'><a href='#' title=\"Movie'ize Here vs Follow Red Right Arrows with Bottom Scrollbar\" onclick='havealook(0);'>@</a></span><span style=\"color:red;font-size:14px;\"><b>--&gt;</b></span></td><td><img onclick=\"onck(this);\" id=\"i0\" src=\"" . $uarray[0] . "\" title=\"" . $agtext . "\" /></td> \n ";

//for ($iqw=1; $iqw<sizeof($uarray); $iqw++) {
//    $sofar.="<td><span style=\"color:red;font-size:14px;\"><b>--&gt;</b></span></td><td><img onclick=\"onck(this);\" id=\"i" . $iqw . "\" src=\"" . $uarray[$iqw] . "\" title=\"" . $agtext . "\" /></td> \n ";
//}

return $sofar . "</table>\n</body>\n</html>";
}

function jserver_remote_addr() {
    global $stfle;
    $rma = $_SERVER['REMOTE_ADDR'];
    $ua = strtolower($_SERVER['HTTP_USER_AGENT']);
    // you can add different browsers with the same way ..
    if(preg_match('/(chromium)[ \/]([\w.]+)/', $ua))
            $rma = '000000'.$rma;
    elseif(preg_match('/(chrome)[ \/]([\w.]+)/', $ua))
            $rma = '00000'.$rma;
    elseif(preg_match('/(safari)[ \/]([\w.]+)/', $ua))
            $rma = '0000'.$rma;
    elseif(preg_match('/(opera)[ \/]([\w.]+)/', $ua))
            $rma = '000'.$rma;
    elseif(preg_match('/(msie)[ \/]([\w.]+)/', $ua))
            $rma = '00'.$rma;
    elseif(preg_match('/(mozilla)[ \/]([\w.]+)/', $ua))
            $rma = '0'.$rma;
    return str_replace(":", "_", $rma);
}

function server_remote_addr() {
    global $stfle;
    $rma = $_SERVER['REMOTE_ADDR'];
    $ua = strtolower($_SERVER['HTTP_USER_AGENT']);
    // you can add different browsers with the same way ..
    if(preg_match('/(chromium)[ \/]([\w.]+)/', $ua))
            $rma = '000000'.$rma;
    elseif(preg_match('/(chrome)[ \/]([\w.]+)/', $ua))
            $rma = '00000'.$rma;
    elseif(preg_match('/(safari)[ \/]([\w.]+)/', $ua))
            $rma = '0000'.$rma;
    elseif(preg_match('/(opera)[ \/]([\w.]+)/', $ua))
            $rma = '000'.$rma;
    elseif(preg_match('/(msie)[ \/]([\w.]+)/', $ua))
            $rma = '00'.$rma;
    elseif(preg_match('/(mozilla)[ \/]([\w.]+)/', $ua))
            $rma = '0'.$rma;
    if (isset($_GET['outfile'])) {
      if (urldecode($_GET['outfile']) != "") {
        $stfle='<input type=hidden name=outfile id=outfile value="' . urldecode($_GET['outfile']) . '"></input> ';
        return urldecode($_GET['outfile']);
      }
    } else if (isset($_POST['outfile'])) {
      if (urldecode($_POST['outfile']) != "") {
        $stfle='<input type=hidden name=outfile id=outfile value="' . urldecode($_POST['outfile']) . '"></input> ';
        return urldecode($_POST['outfile']);
      }
    }
    return str_replace(":", "_", $rma);
}

function analyze($url) {
 //$aprefix="../";
 $aprefix="";
 if (strpos($url, "//") === false && strpos($_SERVER['SERVER_NAME'], "rjmprogramming.com.au") !== false) return $aprefix;
 if (strpos($url, "//") === false && strpos($_SERVER['SERVER_NAME'], "localhost") !== false) return $aprefix;
 $aub=$_SERVER['REQUEST_URI'];
 $xubf=explode("?", $aub);
 $xubf[0]=str_replace("tutorial_to_animated_gif.php", "", str_replace("@!@","", str_replace("@!@/","", "@!@" . $xubf[0])));
 $xubff=explode("/", $xubf[0]);
 for ($ih=1; $ih<sizeof($xubff); $ih++) $aprefix .= "../";
 //echo $aprefix;
 if (strpos($xubff[sizeof($xubff) - 1], ".") !== false && (sizeof($xubff) - 1) > 2) {
       $xub=str_replace("/" . $xubff[sizeof($xubff) - 1], "/", $xubf[0]);
 } else {
       $xub=str_replace("@$@", "", str_replace("/@$@", "/", ($xubf[0] . "@$@")));
 }
 $ubf=explode("?", $url);
 
 $ubff=explode("/", $ubf[0]);
 if (strpos($ubff[sizeof($ubff) - 1], ".") !== false && (sizeof($ubff) - 1) > 2) {
       $ub=str_replace("/" . $ubff[sizeof($ubff) - 1], "/", $ubf[0]);
 } else {
       $ub=str_replace("@$@", "", str_replace("/@$@", "/", ($ubf[0] . "@$@")));
 }
 $preubff=explode("rjmprogramming.com.au:80/", $ub);
 if (sizeof($preubff) > 1) {
  $aprefix.=$preubff[1];
 } else {
 $preubff=explode("rjmprogramming.com.au/", $ub);
 if (sizeof($preubff) > 1) {
  $aprefix.=$preubff[1];
 } else {
 $preubff=explode("localhost:8888/", $ub);
 if (sizeof($preubff) > 1) {
  $aprefix.=$preubff[1];
 }
 }
 }
 return $aprefix;
}

if (isset($_GET['slideshow']) || isset($_POST['slideshow'])) {
 if (isset($_GET['slideshow'])) $url=($_GET['slideshow']);
 if (isset($_POST['slideshow'])) $url=($_POST['slideshow']);
 if (strpos($url, ' src="') !== false) {
 $shtml=$url;
 file_put_contents(server_remote_addr() . "_huh.html", $url);
 $moreh1=" ... you have 10 seconds to change delay value as necessary";
 //$imagegifandthen.="document.getElementById('slideshow').value='http://www.rjmprogramming.com.au/PHP/animegif/" . server_remote_addr() . "_huh.html'; setTimeout(and_then,10000); ";
 $imagegifandthen.="document.getElementById('slideshow').value=document.URL.split('/')[0] + '//www.rjmprogramming.com.au/PHP/animegif/" . server_remote_addr() . "_huh.html'; setTimeout(and_then,10000); ";
 $shtml="";
 } else {
 if (isset($_GET['slideshow'])) $shtml=@file_get_contents($_GET['slideshow']);
 if (isset($_POST['slideshow'])) $shtml=@file_get_contents($_POST['slideshow']);
 }
 $prefix=analyze($url);
 if (isset($_GET['delay'])) $delay=($_GET['delay']);
 if (isset($_POST['delay'])) $delay=($_POST['delay']);
 $videocmd=$videopath . "ffmpeg -r " . (1000 / $delay) . " -i " . dirname(__FILE__) . DIRECTORY_SEPARATOR . "%03d.jpg " . dirname(__FILE__) . DIRECTORY_SEPARATOR . "video.mp4 2> " . dirname(__FILE__) . DIRECTORY_SEPARATOR . "video.bad";
 $svideocmd="ffmpeg -r " . (1000 / $delay) . " -i " . "%03d.jpg " . "video.mp4";
 if (!file_exists($videopath . "ffmpeg")) {
 $videohtml="<h4 id=hvideo>No ffmpeg installed, so ... if you have in your local system ... at command line (in download directory, first removing any existant %03d.jpg files such as 001.jpg to 999.jpg) type (to end up with a video.mp4 video) <br><br><b><i>" . $svideocmd . "</i></b><br><br> ... after downloading ... <br><br><br><br><b><i>open video.mp4</i></b><br><br>";
 $videosuffix=" creation advice";
 }
 $eachone=str_replace("[]=40;", "[]=" . $delay . ";", $eachone);
 $eachonestring=str_replace("[]=40;", "[]=" . $delay . ";", $eachonestring);
 $gifphp=$agifphp;
 if (isset($_GET['stitle'])) $agtext=($_GET['stitle']);
 if (isset($_POST['stitle'])) $agtext=($_POST['stitle']);
 if (strpos($shtml, ' src="') === false) {
  $shtml=' src="' . $url . '" ';
  $icnt++;
  $jfilep="00";
  $ijf=1;
  $jf=1;
  while (isset($_GET['slideshow' . $icnt]) || isset($_POST['slideshow' . $icnt])) {
   if (sizeof($ismulti) == 0) { 
    if (strpos($url,".") !== false) {
      $ismulti[sizeof($ismulti)]=$url;
      if (file_exists('video.mp4')) unlink('video.mp4');
      if (1 == 1) {
        if (file_exists('001.jpg')) {
          while (file_exists(substr(($jfilep . $jf),-3) . '.jpg')) {
            unlink(substr(($jfilep . $jf),-3) . '.jpg');
            $jf++;
          }
        }
        if (file_exists($videopath . "ffmpeg")) {
        file_put_contents(substr(($jfilep . $ijf),-3) . '.jpg', file_get_contents($url));
        } else {
        $videohtml=str_replace("<br><br><br><b><i>open", "<br><a download='001.jpg' title='001.jpg' href='" . $url . "'>" . $url . "</a>&nbsp;<br><br><br><b><i>open", $videohtml);
        }
        $ijf++;
      }
      $ismultidatauri[sizeof($ismultidatauri)]='data:image/' . str_replace('jpg','jpeg',strtolower(explode('.',$url)[-1 + sizeof(explode('.',$url))])) . ';base64,' . base64_encode(file_get_contents($url));
    }
   }
   if (isset($_GET['slideshow' . $icnt])) {
     $url=($_GET['slideshow' . $icnt]);
     if (strpos($url,".") !== false) {
      $ismulti[sizeof($ismulti)]=$url;
      if (file_exists($videopath . "ffmpeg")) {
        file_put_contents(substr(($jfilep . $ijf),-3) . '.jpg', file_get_contents($url));
      } else {
        $videohtml=str_replace("<br><br><br><b><i>open", "<br><a download='" . substr(($jfilep . $ijf),-3) . ".jpg' title='" . substr(($jfilep . $ijf),-3) . ".jpg' href='" . $url . "'>" . $url . "</a>&nbsp;<br><br><br><b><i>open", $videohtml);
      }
      $ijf++;
      $ismultidatauri[sizeof($ismultidatauri)]='data:image/' . str_replace('jpg','jpeg',strtolower(explode('.',$url)[-1 + sizeof(explode('.',$url))])) . ';base64,' . base64_encode(file_get_contents($url));
     }
   }
   if (isset($_POST['slideshow' . $icnt])) {
     $url=($_POST['slideshow' . $icnt]);
     if (strpos($url,".") !== false) {
      $ismulti[sizeof($ismulti)]=$url;
      if (file_exists($videopath . "ffmpeg")) {
        file_put_contents(substr(($jfilep . $ijf),-3) . '.jpg', file_get_contents($url));
      } else {
        $videohtml=str_replace("<br><br><br><b><i>open", "<br><a download='" . substr(($jfilep . $ijf),-3) . ".jpg' title='" . substr(($jfilep . $ijf),-3) . ".jpg' href='" . $url . "'>" . $url . "</a>&nbsp;<br><br><br><b><i>open", $videohtml);
      }
      $ijf++;
      $ismultidatauri[sizeof($ismultidatauri)]='data:image/' . str_replace('jpg','jpeg',strtolower(explode('.',$url)[-1 + sizeof(explode('.',$url))])) . ';base64,' . base64_encode(file_get_contents($url));
     }
   }
   $shtml.=' src="' . $url . '" ';
   $icnt++;
  }
if (sizeof($ismulti) > 0) {
$ofp = fopen('slideshow.html', 'w'); 
fwrite($ofp, inhouseslideshow($ismulti,$ismultidatauri));
fclose($ofp);
  $extras="&nbsp;<a href=#iag title=AnimatedGIF>Animated GIF</a>&nbsp;<a href=#hvideo title=Video>Video</a>&nbsp;<a href=#idatauri title=DataURI>Data URI version</a>&nbsp;<a href=#preislideshow title=Slideshow>Slideshow versions</a>";
} else {
  $extras="&nbsp;<a href=#iag title=AnimatedGIF>Animated GIF</a>&nbsp;<a href=#idatauri title=DataURI>Data URI version</a>";
}
 } 

    
    
 $photos=explode(' src="', $shtml);
 if (sizeof($photos) > 1) {
   $atext=$agtext;
   $wasprefix=$prefix;
   for ($io=1; $io<sizeof($photos); $io++) {
    $aphoto=explode('"', $photos[$io]);
    $prefix=analyze($aphoto[0]);
    if (strpos($aphoto[0], "rjmprogramming.com.au/") !== false) {
      $bts=explode("rjmprogramming.com.au/", $aphoto[0]);
      $aphoto[0]=$bts[1];
    //echo "aphoto[0]=" . $aphoto[0] . " and wasprefix=" . $wasprefix . " and prefix=" . $prefix;
    //exit;
      if (strpos($aphoto[0], "/") === false && strpos($aphoto[0], substr("\\",0,1)) === false && str_replace("../","",$prefix) == "" && $wasprefix != "") {
        $prefix.=$wasprefix;
      }
    } else if (strpos($aphoto[0], "rjmprogramming.com.au:80/") !== false) {
      $bts=explode("rjmprogramming.com.au:80/", $aphoto[0]);
      $aphoto[0]=$bts[1];
    //echo "aphoto[0]=" . $aphoto[0] . " and wasprefix=" . $wasprefix . " and prefix=" . $prefix;
    //exit;
      if (strpos($aphoto[0], "/") === false && strpos($aphoto[0], substr("\\",0,1)) === false && str_replace("../","",$prefix) == "" && $wasprefix != "") {
        $huhp=$prefix;
        $prefix.=$wasprefix;
      if (strpos($prefix, "../../") !== false && !file_exists($prefix . $aphoto[0]) && file_exists(str_replace("../../","../",$prefix) . $aphoto[0])) {
        $prefix=str_replace("../../","../",$prefix);
      } else if (!file_exists($prefix . $aphoto[0])) {
        $prefix=$huhp;
      }
      }
    } else if (strpos($aphoto[0], "/") === false && strpos($aphoto[0], substr("\\",0,1)) === false && strpos($url, "rjmprogramming.com.au") !== false) {
      if (strpos($aphoto[0], "/") === false && strpos($aphoto[0], substr("\\",0,1)) === false && str_replace("../","",$prefix) == "" && $wasprefix != "") {
        $huhp=$prefix;
        $prefix.=$wasprefix;
      if (strpos($prefix, "../../") !== false && !file_exists($prefix . $aphoto[0]) && file_exists(str_replace("../../","../",$prefix) . $aphoto[0])) {
        $prefix=str_replace("../../","../",$prefix);
      } else if (!file_exists($prefix . $aphoto[0])) {
        $prefix=$huhp;
      }
      }
    //echo "Aphoto[0]=" . $aphoto[0] . " and wasprefix=" . $wasprefix . " and prefix=" . $prefix;
    //exit;
    }
    $dbits=explode("/", $aphoto[0]);    
    
    
    
    for ($itr=0; $itr<(sizeof($dbits) - 1); $itr++) {
      $dtib=$dbits[$itr] . "/";
      $oy=1;
      if (strpos($prefix, $dtib) !== false) $prefix=str_replace($dtib, "", $prefix, $oy);
    }
    if (strpos(strtolower($aphoto[0]), "//") !== false) $prefix="";
    if (strpos($aphoto[0], ";base64,") !== false) {
      $gifphp.=str_replace("imagecreatefromjpeg('source01.jpg');", "imagecreatefromstring(base64_decode('" . explode(";base64,",$aphoto[0])[1] . "'));", str_replace("\$text='';", "\$text='" . $atext . "';", $eachonestring));
    } else if (strpos(strtolower($aphoto[0]), "//") !== false) {
      $gifphp.=str_replace("imagecreatefromjpeg('source01.jpg');", "imagecreatefromstring(@file_get_contents('" . $prefix . $aphoto[0] . "'));", str_replace("\$text='';", "\$text='" . $atext . "';", $eachone));
    } else if (strpos(strtolower($aphoto[0]), ".jp") !== false) {
      if (strpos($prefix, "../../") !== false && !file_exists($prefix . $aphoto[0]) && file_exists(str_replace("../../","../",$prefix) . $aphoto[0])) {
        $prefix=str_replace("../../","../",$prefix);
      }
      $gifphp.=str_replace("imagecreatefromjpeg('source01.jpg');", "imagecreatefromjpeg('" . $prefix . $aphoto[0] . "');", str_replace("\$text='';", "\$text='" . $atext . "';", $eachone));
    } else if (strpos(strtolower($aphoto[0]), ".png") !== false) {
      if (strpos($prefix, "../../") !== false && !file_exists($prefix . $aphoto[0]) && file_exists(str_replace("../../","../",$prefix) . $aphoto[0])) {
        $prefix=str_replace("../../","../",$prefix);
      }
      $gifphp.=str_replace("imagecreatefromjpeg('source01.jpg');", "imagecreatefrompng('" . $prefix . $aphoto[0] . "');", str_replace("\$text='';", "\$text='" . $atext . "';", $eachone));
    } else if (strpos(strtolower($aphoto[0]), ".gif") !== false) {
      if (strpos($prefix, "../../") !== false && !file_exists($prefix . $aphoto[0]) && file_exists(str_replace("../../","../",$prefix) . $aphoto[0])) {
        $prefix=str_replace("../../","../",$prefix);
      }
      $gifphp.=str_replace("imagecreatefromjpeg('source01.jpg');", "imagecreatefromgif('" . $prefix . $aphoto[0] . "');", str_replace("\$text='';", "\$text='" . $atext . "';", $eachone));
    } else if (strpos(strtolower($aphoto[0]), ".bmp") !== false) {
      if (strpos($prefix, "../../") !== false && !file_exists($prefix . $aphoto[0]) && file_exists(str_replace("../../","../",$prefix) . $aphoto[0])) {
        $prefix=str_replace("../../","../",$prefix);
      }
      $gifphp.=str_replace("imagecreatefromjpeg('source01.jpg');", "imagecreatefrombmp('" . $prefix . $aphoto[0] . "');", str_replace("\$text='';", "\$text='" . $atext . "';", $eachone));
    } 
    $atext="";
   }
   if ($agtext == "") $agtext="slideshow";
   $lastbit=str_replace("framed,0,2" . $zzz, "framed,0," . (sizeof($photos) - 1) . $zzz, $lastbit);
   //file_put_contents(str_replace(" ", "_", $agtext) . "_preview.php", $gifphp . $lastbit);
   //file_put_contents(str_replace(" ", "_", $agtext) . ".php", $gifphp . str_replace($lastbitfrom, str_replace("'animegif.gif'", "'" . server_remote_addr() . ".gif" . "'", $lastbitto), $lastbit));
   //@file_get_contents(str_replace(" ", "_", $agtext) . ".php");
   file_put_contents(server_remote_addr() . "_preview.php", $gifphp . $lastbit);
   file_put_contents(server_remote_addr() . ".php", $gifphp . str_replace($lastbitfrom, str_replace("'animegif.gif'", "'" . server_remote_addr() . ".gif" . "'", $lastbitto), $lastbit));
   //@file_get_contents(server_remote_addr() . ".php?x=" . rand (2,450456));
   //header("Location: " . str_replace(" ", "_", $agtext) . "_preview.php");
   $imagegif="<br><h1 align='center'>Preview Below ... Animated GIF (Later) (Way) Below</h1><br><iframe id=iag frameborder=0 style='width:100%;height:100%;' src='" . server_remote_addr() . "_preview.php?x=" . rand (2,450456) . "' title='" . $agtext . "'></iframe>";
   $imagegif.="<br><br><iframe frameborder=0 style='display:none;' src='" . server_remote_addr() . ".php?x=" . rand (2,450456) . "' title='" . $agtext . "'></iframe>";
   if (sizeof($ismulti) > 0) {
   $imagegifandthen.="document.getElementById('idiv').innerHTML+=\"<br><h1 align='center'>Preview Above ... Animated GIF then Video" . $videosuffix . " Below</h1><br><img src='" . server_remote_addr() . ".gif" . "' title='" . $agtext . "'></img><br><h1 id=hvideo>Video" . $videosuffix . " below ...</h1><br>" . $videohtml . "<br><iframe id=idatauri src='animegif.html?x=" . rand (2,450456) . "' title=DataURI style=width:100%;height:800px;background-color:lightblue;></iframe><br>&nbsp;<a id=preislideshow href=#idatauri title=DataURI>Data URI version</a>&nbsp;<a href=#myh1 title=Top>Top</a>&nbsp;<a href=#iag title=AnimatedGIF>Animated GIF</a>&nbsp;<a href=#prejslideshow title=SlideshowDataURI>Slideshow Data URI</a><br><iframe id=islideshow src='slideshow.html?x=" . rand (2,450456) . "' title=SlideShow style=width:100%;height:800px;;background-color:lightgreen;></iframe><br><a id=prejslideshow href=#preislideshow title=Slideshow>Slideshow</a><br><iframe id=jslideshow src='slideshow.html?smode=0&x=" . rand (2,450456) . "' title=SlideShowDataURI style=width:100%;height:800px;;background-color:lightgreen;></iframe>" . "\";";
   } else {
   $imagegifandthen.="document.getElementById('idiv').innerHTML+=\"<br><h1 align='center'>Preview Above ... Animated GIF Below</h1><br><img src='" . server_remote_addr() . ".gif" . "' title='" . $agtext . "'></img><br>&nbsp;<a href=#myh1 title=Top>Top</a>&nbsp;<a href=#iag title=AnimatedGIF>Animated GIF</a><br><iframe id=idatauri src='animegif.html?x=" . rand (2,450456) . "' title=DataURI style=width:100%;height:800px;;background-color:lightblue;></iframe>" . "\";";
   }
 }
} //else {
  echo "<!doctype html>
<html>
<head>
<link href='//www.rjmprogramming.com.au/PHP/emboss_h1.css' rel='stylesheet' type='text/css'>
<title>Tutorial Slideshow to Animated GIF</title>
<script type='text/javascript'>
var icnt=1, upforgrabs=false, upfor='', origupfor='', upto='', upprefix='', upsuffix='', incis=0, thisto='', lastioid='';
function isimage(tvl) {
  var retval=false, look=true, alin=0, cae='';
  if (tvl.toLowerCase().indexOf('.jpeg,') != -1) cae='.jpeg';
  if (tvl.toLowerCase().indexOf('.jpg,') != -1) cae='.jpg';
  if (tvl.toLowerCase().indexOf('.gif,') != -1) cae='.gif';
  if (tvl.toLowerCase().indexOf('.png,') != -1) cae='.png';
  if (tvl.toLowerCase().indexOf('.bmp,') != -1) cae='.bmp';
  if (tvl.toLowerCase().indexOf('.tiff,') != -1) cae='.tiff';
  if (tvl.toLowerCase().indexOf('.tif,') != -1) cae='.tif';
  if (tvl.toLowerCase().indexOf('.jp') != -1) retval=true;
  if (tvl.toLowerCase().indexOf('.gif') != -1) retval=true;
  if (tvl.toLowerCase().indexOf('.png') != -1) retval=true;
  if (tvl.toLowerCase().indexOf('.bmp') != -1) retval=true;
  if (tvl.toLowerCase().indexOf('.tif') != -1) retval=true;
  if (retval && (tvl.indexOf('-') != -1 || tvl.indexOf(',') != -1)) {
    upforgrabs=true;
    if (tvl.indexOf('-') == -1 && tvl.indexOf(',') != -1) {
     upprefix=tvl.split(',')[0];
     if (cae != '') {  cae=tvl.toLowerCase().split(cae)[0];  upprefix=tvl.substring(0, cae.length);   }
     //alert(upprefix);
     thisto='';
     for (var ijh=eval(-1 + upprefix.length); ijh>=0; ijh--) {
       if (look) {
         if (upprefix.substring(ijh, eval(1 + ijh)) >= '0' && upprefix.substring(ijh, eval(1 + ijh)) <= '9') {
           thisto=upprefix.substring(ijh, eval(1 + ijh)) + thisto;
         } else {
           look=false;
         }
       }
     }
     tvl=tvl.replace(upprefix, upprefix + '-' + thisto);
     alin=upprefix.length;
     alin-=thisto.length;
     upprefix=upprefix.substring(0, alin);
     //alert(upprefix);
    } else if (tvl.indexOf('-') != -1 && tvl.indexOf(',') != -1) {
     if (tvl.indexOf(',') < tvl.indexOf('-')) {
     upprefix=tvl.split(',')[0];
     if (cae != '') {  cae=tvl.toLowerCase().split(cae)[0];  upprefix=tvl.substring(0, cae.length);   }
     //alert(upprefix);
     thisto='';
     for (var ijh=eval(-1 + upprefix.length); ijh>=0; ijh--) {
       if (look) {
         if (upprefix.substring(ijh, eval(1 + ijh)) >= '0' && upprefix.substring(ijh, eval(1 + ijh)) <= '9') {
           thisto=upprefix.substring(ijh, eval(1 + ijh)) + thisto;
         } else {
           look=false;
         }
       }
     }
     tvl=tvl.replace(upprefix, upprefix + '-' + thisto);
     alin=upprefix.length;
     alin-=thisto.length;
     upprefix=upprefix.substring(0, alin);
     }
    }  
    if (tvl.split('-').length > 2) {
    var preupfor=tvl.split('-')[0] + '-';
    upfor=preupfor + tvl.replace(preupfor,'').replace(/-/g,'%2d');
    //upfor=tvl;
    //alert(upfor);
    } else {
    upfor=tvl;
    }
    //alert('upfor=' + upfor);
    try {
    document.getElementById('iproposed').src=tvl;
    } catch(ee) {
    }
  }
  if (!retval) { 
  if (tvl.trim() != '') {
  //document.title='1=' + tvl;
  upforgrabs=false;
  upfor='';
  }
  return retval; 
  }
  return retval;
}
function and_then() {
  document.getElementById('mysubmit').click();
}
function latermaybemore() {
  var tval='', xval='';
  var newi=null, fo=null;
  var newsuffix='';
   //alert('prethere');
  if (upforgrabs) {
   //alert('there');
   if (origupfor == '') { 
     //alert('upfor=' + upfor);
     origupfor=decodeURIComponent(upfor); 
     xval='-' + decodeURIComponent(upfor.split('-')[eval(-1 + upfor.split('-').length)]);
     if (xval.indexOf('.') != -1) {
     upto=xval.substring(1).split('.')[0];
     if (upto.indexOf('*') != -1 || upto.indexOf('?') != -1 || upto.indexOf('%') != -1) { upto=''; }
     upsuffix='.' + decodeURIComponent(xval.split('.')[eval(-1 + xval.split('.').length)]);
     upprefix=decodeURIComponent(upfor).replace(xval, '');
     var look=true;
     thisto='';
     for (var ijh=eval(-1 + upprefix.length); ijh>=0; ijh--) {
       if (look) {
         if (upprefix.substring(ijh, eval(1 + ijh)) >= '0' && upprefix.substring(ijh, eval(1 + ijh)) <= '9') {
           thisto=upprefix.substring(ijh, eval(1 + ijh)) + thisto;
         } else {
           look=false;
         }
       }
     }
     if (thisto == '') {
  //document.title='2';
     upforgrabs=false;
   tval=upfor;
   origupfor='';
   fo=document.getElementById('fdiv' + icnt);
   icnt++;
   newi=document.getElementById('slideshow' + icnt);
   if (fo != null && newi == null) {
    fo.innerHTML+=\"Tutorial Slideshow Image \" + icnt + \" <input title='Please note a minus between numericals can define a URL range of image URLs' onblur='maybemore(this.value, this.id, this);' style='width:70%;' type='text' id='slideshow\" + icnt + \"' name='slideshow\" + icnt + \"' value=''></input><br><br><div id='fdiv\" + icnt + \"'></div>\";
   } 
     } else {
     upprefix=decodeURIComponent(upprefix.substring(0, eval(eval('' + upprefix.length) - eval('' + thisto.length))));
     upfor=decodeURIComponent(upfor).replace(xval, '') + upsuffix;
     if (upto == '') {
       incis=0;
     } else if (eval('' + upto) > eval('' + thisto)) {
       incis=1;
     } else {
       incis=-1;
     }
  var jkh=\"<iframe id=jproposed\" + icnt + \" style=display:none; onerror=upforgrabs=false; onload=checkproposedj(this); src='\" + upfor + \"'></iframe>\";
   jkh=\"<iframe id=jproposed\" + icnt + \" style=display:none; onerror=upforgrabs=false; src='\" + more(upfor) + \"'></iframe>\";
   //alert('About to try ' + jkh);
     document.getElementById('jdiv').innerHTML=jkh;
  //document.title='55';
     upforgrabs=false; // new idea
     //alert('prejtry');
     //setTimeout(jtry, 1000); // document.getElementById('jproposed').src=upfor;
     }
     } else {
  //document.title='3';
     upforgrabs=false;
   tval=upfor;
   origupfor='';
   fo=document.getElementById('fdiv' + icnt);
   icnt++;
   newi=document.getElementById('slideshow' + icnt);
   if (fo != null && newi == null) {
    fo.innerHTML+=\"Tutorial Slideshow Image \" + icnt + \" <input title='Please note a minus between numericals can define a URL range of image URLs' onblur='maybemore(this.value, this.id, this);' style='width:70%;' type='text' id='slideshow\" + icnt + \"' name='slideshow\" + icnt + \"' value=''></input><br><br><div id='fdiv\" + icnt + \"'></div>\";
   } 
     }
   }
   while (upforgrabs) {
     setTimeout(latermaybemore, 2000);
   }
   origupfor='';
   return;
  } else {
   tval=upfor;
   origupfor='';
   fo=document.getElementById('fdiv' + icnt);
   icnt++;
   newi=document.getElementById('slideshow' + icnt);
   if (fo != null && newi == null) {
    fo.innerHTML+=\"Tutorial Slideshow Image \" + icnt + \" <input title='Please note a minus between numericals can define a URL range of image URLs' onblur='maybemore(this.value, this.id, this);' style='width:70%;' type='text' id='slideshow\" + icnt + \"' name='slideshow\" + icnt + \"' value=''></input><br><br><div id='fdiv\" + icnt + \"'></div>\";
   } 
  }
}

function more(what) {
  var purl='', look=true;
  if (what.replace(decodeURIComponent(upsuffix),decodeURIComponent(upsuffix).split(',')[0]).indexOf(',') != -1) {
  var xxx=''; //what.replace(what.replace(decodeURIComponent(upsuffix),decodeURIComponent(upsuffix).split(',')[0]),'').split('.')[0];
  xxx=(',' + what.replace(decodeURIComponent(upsuffix),decodeURIComponent(upsuffix).split(',')[0]).split(',')[1]).split('.')[0];
  upprefix=what.replace(decodeURIComponent(upsuffix),decodeURIComponent(upsuffix).split(',')[0]).split(',')[0];
  if (decodeURIComponent(upsuffix).indexOf(',') != -1) {
    upsuffix=decodeURIComponent(upsuffix).replace(',', xxx + ','); 
  } else {
    upsuffix=decodeURIComponent(upsuffix) + xxx;
  }
  thisto='';
  for (var ijh=eval(-1 + upprefix.length); ijh>=0; ijh--) {
       if (look) {
         if (upprefix.substring(ijh, eval(1 + ijh)) >= '0' && upprefix.substring(ijh, eval(1 + ijh)) <= '9') {
           thisto=upprefix.substring(ijh, eval(1 + ijh)) + thisto;
         } else {
           look=false;
         }
       }
  }
  upprefix=upprefix.substring(0, eval(eval('' + upprefix.length) - eval('' + thisto.length)));
  purl=document.URL.split('#')[0].split('?')[0] + '?urlminus=' + encodeURIComponent(what.replace(decodeURIComponent(upsuffix),decodeURIComponent(upsuffix).split(',')[0]).split(',')[0] + decodeURIComponent(upsuffix).split(',')[0]) + '&lastioid=' + encodeURIComponent(lastioid) + '&upprefix=' + encodeURIComponent(upprefix) + '&upsuffix=' + encodeURIComponent(upsuffix) + '&icnt=' + encodeURIComponent(icnt) + '&incis=' + encodeURIComponent(incis) + '&upto=' + encodeURIComponent(upto) + '&thisto=' + encodeURIComponent(thisto);
  } else {
  purl=document.URL.split('#')[0].split('?')[0] + '?urlminus=' + encodeURIComponent(what.replace(decodeURIComponent(upsuffix),decodeURIComponent(upsuffix).split(',')[0])) + '&lastioid=' + encodeURIComponent(lastioid) + '&upprefix=' + encodeURIComponent(upprefix) + '&upsuffix=' + encodeURIComponent(upsuffix) + '&icnt=' + encodeURIComponent(icnt) + '&incis=' + encodeURIComponent(incis) + '&upto=' + encodeURIComponent(upto) + '&thisto=' + encodeURIComponent(thisto);
  }
  
  //alert(purl);
  return purl; 
}

function jtry() {
     //alert('about to try ' + upfor);
   var jkh=\"<iframe id=jproposed\" + icnt + \" style=display:none; onerror=upforgrabs=false; onload=checkproposedj(this); src='\" + upfor + \"'></iframe>\";
   jkh=\"<iframe id=jproposed\" + icnt + \" style=display:none; onerror=upforgrabs=false; src='\" + more(upfor) + \"'></iframe>\";
   //alert('AboUt to try ' + jkh);
     document.getElementById('jdiv').innerHTML=jkh;
  //document.getElementById('jdiv').innerHTML=\"<iframe id=jproposed style=display:none; onerror=upforgrabs=false; onload=checkproposedj(this); src='\" + upfor + \"'></iframe>\";
  //document.getElementById('jproposed').src=upfor;
}

function maybemore(tval, tid, tis) {
  var newi=null, fo=null;
  lastioid=tis.id;
  if (isimage(tval)) {
   if (upforgrabs) {
   //alert('here');
   setTimeout(latermaybemore, 3000);
   return;
   } else {
   origupfor='';
   fo=document.getElementById('fdiv' + icnt);
   icnt++;
   newi=document.getElementById('slideshow' + icnt);
   if (fo != null && newi == null) {
    fo.innerHTML+=\"Tutorial Slideshow Image \" + icnt + \" <input title='Please note a minus between numericals can define a URL range of image URLs' onblur='maybemore(this.value, this.id, this);' style='width:70%;' type='text' id='slideshow\" + icnt + \"' name='slideshow\" + icnt + \"' value=''></input><br><br><div id='fdiv\" + icnt + \"'></div>\";
   } 
   }
  } else {
   origupfor='';
  }
}

function checkproposed(iois) {
  //var cont='';
  if (iois.src != '') {
    //if (iois.id.indexOf('jproposed') != -1) { alert(0); }
  if (iois != null) {
    //if (iois.id.indexOf('jproposed') != -1) { alert(1); }
    var aconto = (iois.contentWindow || iois.contentDocument);
    //if (iois.id.indexOf('jproposed') != -1) { alert(2); }
    if (aconto != null) {
    //if (iois.id.indexOf('jproposed') != -1) { alert(3); }
     if (aconto.document) { aconto = aconto.document; }
    //if (iois.id.indexOf('jproposed') != -1) { alert(4); }
     if (aconto.body != null) {
    //if (iois.id.indexOf('jproposed') != -1) { alert(5); }
      //cont=aconto.body.innerHTML.replace('<pre>','').replace('</pre>','');
      if (iois.id == 'iproposed') {
        if (aconto.body.innerHTML.toLowerCase().indexOf('not found') != -1) {
        upforgrabs=true;
        } else if (1 == 6) {
  //document.title='4=' + aconto.body.innerHTML;
        upforgrabs=false;
        }
      } else if (iois.id.indexOf('jproposed') != -1) {
        if (aconto.body.innerHTML.toLowerCase().indexOf('not found') != -1) {
  //document.title='66';
     upforgrabs=false;
        } else {
  var newi=null, fo=null;
  var newsuffix='';
   fo=document.getElementById('fdiv' + icnt);
   icnt++;
   newi=document.getElementById('slideshow' + icnt);
   if (fo != null && newi == null) {
    fo.innerHTML+=\"Tutorial Slideshow Image \" + icnt + \" <input title='Please note a minus between numericals can define a URL range of image URLs' onblur='maybemore(this.value, this.id, this);' style='width:70%;' type='text' id='slideshow\" + icnt + \"' name='slideshow\" + icnt + \"' value=''></input><br><br><div id='fdiv\" + icnt + \"'></div>\";
   } 
      if (('' + thisto) == ('' + upto)) {
        if (('' + thisto) != '') {
  //document.title='5=' + thisto + ' and upto=' + upto;
        upforgrabs=false;
        }
      } else {
      thisto='' + eval(incis + eval('' + thisto))
     upfor=upprefix + thisto + upsuffix;
     document.getElementById('jproposed').src=upfor;
      }
      }
      }
     }
    } else if (iois.id.indexOf('jproposed') != -1) {
  //document.title='6';
     upforgrabs=false;
    }
  } else if (iois.id.indexOf('jproposed') != -1) {
  //document.title='7';
    upforgrabs=false;
  }
  }
}

function checkproposedj(iois) {
  //var cont='';
  if (iois.src != '') {
  if (iois != null) {
    var aconto = (iois.contentWindow || iois.contentDocument);
    if (aconto != null) {
     if (aconto.document) { aconto = aconto.document; }
     if (aconto.body != null) {
      //cont=aconto.body.innerHTML.replace('<pre>','').replace('</pre>','');
      if (iois.id == 'iproposed') {
        if (aconto.body.innerHTML.toLowerCase().indexOf('not found') != -1) {
        upforgrabs=true;
        } else if (1 == 6) {
  //document.title='4=' + aconto.body.innerHTML;
        upforgrabs=false;
        }
      } else if (iois.id.indexOf('jproposed') != -1) {
        if (aconto.body.innerHTML.toLowerCase().indexOf('not found') != -1) {
  //document.title='66';
     upforgrabs=false;
        } else {
  var newi=null, fo=null;
  var newsuffix='';
   fo=document.getElementById('fdiv' + icnt);
   icnt++;
   newi=document.getElementById('slideshow' + icnt);
   if (fo != null && newi == null) {
    fo.innerHTML+=\"Tutorial Slideshow Image \" + icnt + \" <input title='Please note a minus between numericals can define a URL range of image URLs' onblur='maybemore(this.value, this.id, this);' style='width:70%;' type='text' id='slideshow\" + icnt + \"' name='slideshow\" + icnt + \"' value=''></input><br><br><div id='fdiv\" + icnt + \"'></div>\";
   } 
      if (('' + thisto) == ('' + upto)) {
        if (('' + thisto) != '') {
  //document.title='5=' + thisto + ' and upto=' + upto;
        upforgrabs=false;
        }
      } else {
      thisto='' + eval(incis + eval('' + thisto))
     upfor=upprefix + thisto + upsuffix;
     document.getElementById('jproposed').src=upfor;
      }
      }
      }
     }
    } else if (iois.id.indexOf('jproposed') != -1) {
  //document.title='6';
     upforgrabs=false;
    }
  } else if (iois.id.indexOf('jproposed') != -1) {
  //document.title='7';
    upforgrabs=false;
  }
  }
}

function andthen() {
" . $imagegifandthen . "
}
</script>
<style>
a { padding: 5px 5px 5px 5px; margin: 5px 5px 5px 5px; border: 1px solid red; background-color: #f0f0f0; } 
</style>
</head>
<body style='background-color:yellow;' onload=' if (top.document.getElementById(\"thegifnamegoeshere\")) { top.document.getElementById(\"thegifnamegoeshere\").value=\"//www.rjmprogramming.com.au/PHP/animegif/" . jserver_remote_addr() . ".gif\";  } setTimeout(andthen, 8000);  '>
<h1 id='myh1' align='center'>Tutorial Slideshow to Animated GIF" . $moreh1 . "</h1>
<div align='center'>
<form id='myform' action='./tutorial_to_animated_gif.php' method='POST'>" . $prestfle . $stfle . "
Tutorial Slideshow Title <input style='width:70%;' type='text' id='stitle' name='stitle' value='" . $agtext . "'></input><br><br>
Tutorial Slideshow Delay <input style='width:70%;' type='number' id='delay' name='delay' value='" . $delay . "'></input><br><br>
Tutorial Slideshow <a style='cursor:pointer;text-decoration:none;' onclick=\" if (document.getElementById('slideshow').value.toLowerCase().indexOf('.htm') != -1) { window.open(document.getElementById('slideshow').value,'_blank'); } \">HTML</a> or Image <input title='Please note a minus between numericals can define a URL range of image URLs' onblur=\"maybemore(this.value, 'slideshow1', this);\" style='width:70%;' type='text' id='slideshow' name='slideshow' value='" . $url . "'></input><br><br>
<div id='fdiv1'></div><input id=\"mysubmit\" type=\"submit\" title='Tutorial Slideshow to Animated GIF' value='Tutorial Slideshow to Animated GIF'></input>" . $extras . "
</form><div id='idiv' align='center' style='background-color:pink;'>" . $imagegif . "</div>
</div>
<input style='position:absolute;top:-200px;left:-200px;' type='text' value=''></input>
<iframe id=iproposed style='display:none;' onerror='upforgrabs=true;' onload='checkproposed(this);' src=></iframe>
<div id=jdiv><iframe id=jproposed style='display:none;' onerror='upforgrabs=false;' onload='checkproposedj(this);' src=></iframe></div>
</body>
</html>";

//}


?>
