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

  function ourstr_replace($fromone, $toone, $instrg) {
    $cstrg="";
    $cdelim="";
    $outstrg=trim(str_replace($fromone, $toone, $instrg));
    for ($iuy=0; $iuy<strlen($outstrg); $iuy++) {
      $thisc=substr(substr($outstrg, $iuy), 0, 1);
      if ($thisc == '-' || ($thisc >= '0' && $thisc <= '9')) {
        $cstrg.=$cdelim . $thisc;
        $cdelim="";
      } else {
        $cdelim=",";
      }
    }
    if ($cstrg != "") { return $cstrg; } 
    return $outstrg;
  }

$xred="255";
$xgreen="0";
$xblue="0";
$fontname="";
$xangle="0.0";
$xleft="5";
$xtop="5";
$xsize="14px";
$xttfprefix="";
$opac="";

$zris=0;
$zrtot=1;
$zristwo=0;

$huhis="";

  if (isset($_POST['fred'])) {
    $xred=urldecode($_POST['fred']);
    $huhis.=" red=" . $xred;
  }
  if (isset($_POST['fgreen'])) {
    $xgreen=urldecode($_POST['fgreen']);
    $huhis.=" green=" . $xgreen;
  }
  if (isset($_POST['fblue'])) {
    $xblue=urldecode($_POST['fblue']);
    $huhis.=" blue=" . $xblue;
  }
  if (isset($_POST['fontname'])) {
    $fontname=str_replace("+"," ",urldecode($_POST['fontname']));
    if ($fontname != "" && strpos(strtolower($fontname), ".ttf") === false) { 
      if (strpos(("~" . $fontname), "~/") === false) {
       // Set the environment variable for GD ... thanks to https://www.php.net/manual/en/function.imagettftext.php
       putenv('GDFONTPATH=' . realpath('.'));
       if (!file_exists(str_replace(".ttf","",$fontname) . ".ttf")) {
         foreach (glob(dirname(__FILE__) . "/*.ttf") as $filename) {
           if (strpos(strtolower("/" . $filename), strtolower("/" . str_replace(".ttf","",$fontname) . ".ttf")) !== false) {
             $fontname=str_replace(".ttf","",str_replace(dirname(__FILE__) . "/","",str_replace(dirname(__FILE__) . "","",$filename)));
           }
         }
       }
      } 
      //$fontname.=".ttf"; 
    } 
    $huhis.=" fontname=" . $fontname;
    $xttfprefix=" \$thisw=imagesx(\$image);  \$thish=imagesy(\$image); ";
    $huhis.=" xttfprefix=" . $xttfprefix;
  }
  if (isset($_POST['fangle'])) {
    $xangle=str_replace("+"," ",urldecode($_POST['fangle']));
    if ($xangle > 1.0 && strpos(('' . $xangle), '.') !== false) {
      $opac="0." . explode('.', ('' . $xangle))[1];
      $xangle=explode('.', ('' . $xangle))[0];
    }
    $huhis.=" angle=" . $xangle;
  }
  if (isset($_POST['fleft'])) {
    $xleft=str_replace("px","",strtolower(str_replace("+"," ",urldecode($_POST['fleft']))));
    if (strpos($xleft, "%") !== false) {
      $xttfprefix=" \$thisw=imagesx(\$image);  \$thish=imagesy(\$image); ";
      $xleft="round(\$thisw * " . str_replace("%","",$xleft) . " / 100.0)";
    }
    $huhis.=" left=" . $xleft;
  }
  if (isset($_POST['ftop'])) {
    $xtop=str_replace("px","",strtolower(str_replace("+"," ",urldecode($_POST['ftop']))));
    if (strpos($xtop, "%") !== false) {
      $xttfprefix=" \$thisw=imagesx(\$image);  \$thish=imagesy(\$image); ";
      $xtop="round(\$thish * " . str_replace("%","",$xtop) . " / 100.0)";
    }
    $huhis.=" top=" . $xtop;
  }
  if (isset($_POST['fsize'])) {
    $xsize=str_replace("px","",strtolower(str_replace("+"," ",urldecode($_POST['fsize']))));
    $huhis.=" size=" . $xsize;
  }


  //if ($huhis != "") { echo $huhis; exit; }

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'])) {
  if (isset($_GET['fred'])) {
    $xred=urldecode($_GET['fred']);
  }
  if (isset($_GET['fgreen'])) {
    $xgreen=urldecode($_GET['fgreen']);
  }
  if (isset($_GET['fblue'])) {
    $xblue=urldecode($_GET['fblue']);
  }
  if (isset($_GET['fontname'])) {
    $fontname=str_replace("+"," ",urldecode($_GET['fontname']));
    if (strpos(("~" . $fontname), "~/") === false) {
       // Set the environment variable for GD
       putenv('GDFONTPATH=' . realpath('.'));
       if (!file_exists(str_replace(".ttf","",$fontname) . ".ttf")) {
         foreach (glob(dirname(__FILE__) . "/*.ttf") as $filename) {
           if (strpos(strtolower("/" . $filename), strtolower("/" . str_replace(".ttf","",$fontname) . ".ttf")) !== false) {
             $fontname=str_replace(".ttf","",str_replace(dirname(__FILE__) . "/","",str_replace(dirname(__FILE__) . "","",$filename)));
           }
         }
       }
    } 
    //$fontname.=".ttf"; 
    $xttfprefix=" \$thisw=imagesx(\$image);  \$thish=imagesy(\$image); ";
  }
  if (isset($_GET['fangle'])) {
    $xangle=str_replace("+"," ",urldecode($_GET['fangle']));
    if ($xangle > 1.0 && strpos(('' . $xangle), '.') !== false) {
      $opac="0." . explode('.', ('' . $xangle))[1];
      $xangle=explode('.', ('' . $xangle))[0];
    }
  }
  if (isset($_GET['fleft'])) {
    $xleft=str_replace("px","",strtolower(str_replace("+"," ",urldecode($_GET['fleft']))));
    if (strpos($xleft, "%") !== false) {
      $xttfprefix=" \$thisw=imagesx(\$image);  \$thish=imagesy(\$image); ";
      $xleft="round(\$thisw * " . str_replace("%","",$xleft) . " / 100.0)";
    }
  }
  if (isset($_GET['ftop'])) {
    $xtop=str_replace("px","",strtolower(str_replace("+"," ",urldecode($_GET['ftop']))));
    if (strpos($xleft, "%") !== false) {
      $xttfprefix=" \$thisw=imagesx(\$image);  \$thish=imagesy(\$image); ";
      $xtop="round(\$thish * " . str_replace("%","",$xtop) . " / 100.0)";
    }
  }
  if (isset($_GET['fsize'])) {
    $xsize=str_replace("px","",strtolower(str_replace("+"," ",urldecode($_GET['fsize']))));
  }
  $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><meta charset='utf-8'/>" . $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="";

// imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
// imagestring ( resource $image , int $font , int $x , int $y , string $string , int $color )

$agifphp="<?php

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

function utf8(\$num)
{
    if(\$num<=0x7F)       return chr(\$num);
    if(\$num<=0x7FF)      return chr((\$num>>6)+192).chr((\$num&63)+128);
    if(\$num<=0xFFFF)     return chr((\$num>>12)+224).chr(((\$num>>6)&63)+128).chr((\$num&63)+128);
    if(\$num<=0x1FFFFF)   return chr((\$num>>18)+240).chr(((\$num>>12)&63)+128).chr(((\$num>>6)&63)+128).chr((\$num&63)+128);
    return '';
}

function uniord(\$c)
{
    \$ord0 = ord(\$c{0}); if (\$ord0>=0   && \$ord0<=127) return \$ord0;
    \$ord1 = ord(\$c{1}); if (\$ord0>=192 && \$ord0<=223) return (\$ord0-192)*64 + (\$ord1-128);
    \$ord2 = ord(\$c{2}); if (\$ord0>=224 && \$ord0<=239) return (\$ord0-224)*4096 + (\$ord1-128)*64 + (\$ord2-128);
    \$ord3 = ord(\$c{3}); if (\$ord0>=240 && \$ord0<=247) return (\$ord0-240)*262144 + (\$ord1-128)*4096 + (\$ord2-128)*64 + (\$ord3-128);
    return false;
}

 function retemoji(\$stringin) {
   return utf8(hexdec(str_replace(\"U+\",\"\", \$stringin))); //html_entity_decode(preg_replace(\"/U\+([0-9A-F]{4})/\", \"&#x\\\\1;\", \$stringin), ENT_NOQUOTES, 'UTF-8');
 }
 
";

$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><meta charset='utf-8'/> \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) {
global $xred,$xgreen,$xblue,$fontname,$xangle,$xleft,$xtop,$xsize,$xttfprefix,$opac,$zris,$zristwo,$zrtot;
 //$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=ourstr_replace("+","",urldecode($_GET['delay']));
 if (isset($_POST['delay'])) $delay=ourstr_replace("+","",urldecode($_POST['delay']));
 $videocmd=$videopath . "ffmpeg -r " . (1000 / explode(",",$delay)[0]) . " -i " . dirname(__FILE__) . DIRECTORY_SEPARATOR . "%03d.jpg " . dirname(__FILE__) . DIRECTORY_SEPARATOR . "video.mp4 2> " . dirname(__FILE__) . DIRECTORY_SEPARATOR . "video.bad";
 $svideocmd="ffmpeg -r " . (1000 / explode(",",$delay)[0]) . " -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;", "[]=" . explode(",",$delay)[$zris] . ";", $eachone);
 $eachonestring=str_replace("[]=40;", "[]=" . explode(",",$delay)[$zris] . ";", $eachonestring);
 if (strpos($delay, ",") !== false) {
   //$zris++;
   $zrtot=sizeof(explode(",",$delay));
 }
 $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(explode('#',$url)[0]));
    }
   }
   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(explode('#',$url)[0]));
     }
   }
   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(explode('#',$url)[0]));
     }
   }
   $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) {
   $aa_to="\" . retemoji('U+' . '";
   $aato="') . \"";
   $atext=str_replace("}",$aato,str_replace("{",$aa_to,$agtext));
   $wasprefix=$prefix;
   $bplus="";
   $yangle=$xangle;
   for ($io=1; $io<sizeof($photos); $io++) {
    if (strpos(explode('"', $photos[$io])[0], "#") !== false) {
      if ($io == 1) {
      if ($atext != "") {  $atext.=" ... ";  }
      $atext.=str_replace("}","') . \"",str_replace("{","\" . retemoji('U+' . '",str_replace("~","\\n",str_replace('"','`',str_replace('_',' ',explode("#", explode('"', $photos[$io])[0])[1])))));
      
      if ("$xangle" != "0.0" && $xangle >= 0.0 && $xangle <= 1.0) {
       $bplus=", " . round((1.0 - $xangle) * 127.0);
       $eachone=str_replace("imagecolorallocate(", "imagecolorallocatealpha(", $eachone); 
       $eachonestring=str_replace("imagecolorallocate(", "imagecolorallocatealpha(", $eachonestring); 
       $yangle="0.0";
      } else if ("$opac" != "") {
       $bplus=", " . round((1.0 - $opac) * 127.0);
       $eachone=str_replace("imagecolorallocate(", "imagecolorallocatealpha(", $eachone); 
       $eachonestring=str_replace("imagecolorallocate(", "imagecolorallocatealpha(", $eachonestring); 
      }

      $eachone=str_replace(", 200, 200, 200)", ", " . $xred . ", " . $xgreen . ", " . $xblue . $bplus . ")", $eachone); 
      $eachonestring=str_replace(", 200, 200, 200)", ", " . $xred . ", " . $xgreen . ", " . $xblue . $bplus . ")", $eachonestring); 
      
      if ($fontname != '') {
      
       $eachone=str_replace(", 5, 5, 5,", ", " . $xsize . ", " . $yangle . ", " . $xleft . ", " . $xtop . ",", $eachone);
       $eachonestring=str_replace(", 5, 5, 5,", ", " . $xsize . ", " . $yangle . ", " . $xleft . ", " . $xtop . ",", $eachonestring);
       $eachone=str_replace("text_colour","text_color",str_replace("text_color)","text)",str_replace("text, ", "text_colour, '" . $fontname . "',", $eachone)));
       $eachonestring=str_replace("text_colour","text_color",str_replace("text_color)","text)",str_replace("text, ", "text_colour, '" . $fontname . "',", $eachonestring)));
       $eachone=str_replace("imagestring", $xttfprefix . " imagettftext", $eachone);
       $eachonestring=str_replace("imagestring", $xttfprefix . " imagettftext", $eachonestring);
       
       //echo $eachone . "\n\n" . $eachonestring;
       //exit;
      
// imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
// imagestring ( resource $image , int $font , int $x , int $y , string $string , int $color )
       } else if ($xleft != "5" || $xtop != "5") {
       $eachone=str_replace("imagestring", $xttfprefix . " imagestring", $eachone);
       $eachonestring=str_replace("imagestring", $xttfprefix . " imagestring", $eachonestring);
       $eachone=str_replace(", 5, 5, 5,", ", 5, " . $xleft . ", " . $xtop . ",", $eachone);
       $eachonestring=str_replace(", 5, 5, 5,", ", 5, " . $xleft . ", " . $xtop . ",", $eachonestring);
       //echo $eachone . "\n\n" . $eachonestring;
       //exit;
       }
      
      } else {
      $atext.=str_replace("}","') . \"",str_replace("{","\" . retemoji('U+' . '",str_replace("~","\\n",str_replace('"','`',str_replace('_',' ',explode("#", explode('"', $photos[$io])[0])[1])))));
      }
    if ($zrtot > 1) {
     if ($zris >= sizeof(explode(",", $delay))) {
       $delay.="," . explode(",",$delay)[$zristwo];
       $zristwo++;
       if ($zristwo >= $zrtot) {
         $zristwo=0;
       }
     }
     if ($zris > 0) {
     $eachone=str_replace("[]=" . explode(",",$delay)[-1 + $zris] . ";", "[]=" . explode(",",$delay)[$zris] . ";", $eachone);
     $eachonestring=str_replace("[]=" . explode(",",$delay)[-1 + $zris] . ";", "[]=" . explode(",",$delay)[$zris] . ";", $eachonestring);
     }
     $zris++;
    }
    }
    $aphoto=explode("#", explode('"', $photos[$io])[0]);
    $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><meta charset='utf-8'/>
<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='';

var bcols=['red','#ff0000',
'black','#000000',
'white','#ffffff',
'yellow','#ffff00',
'green','#00ff00',
'blue','#0000ff',
'cyan','#00ffff',
'magenta','#ff00ff',
'pink','#ffc0cb',
'lightblue','#add8e6',
'lightgreen','#90ee90',
'pink','#ffc0cb',
'lightpink','#ffb6c1'
,'hotpink','#ff69b4'
,'deeppink','#ff1493'
,'palevioletred','#db7093'
,'mediumvioletred','#c71585'
,'lightsalmon','#ffa07a'
,'salmon','#fa8072'
,'darksalmon','#e9967a'
,'lightcoral','#f08080'
,'indianred','#cd5c5c'
,'crimson','#dc143c'
,'firebrick','#b22222'
,'darkred','#8b0000'
,'red','#ff0000'
,'orangered','#ff4500'
,'tomato','#ff6347'
,'coral','#ff7f50'
,'darkorange','#ff8c00'
,'orange','#ffa500'
,'yellow','#ffff00'
,'lightyellow','#ffffe0'
,'lemonchiffon','#fffacd'
,'lightgoldenrodyellow','#fafad2'
,'papayawhip','#ffefd5'
,'moccasin','#ffe4b5'
,'peachpuff','#ffdab9'
,'palegoldenrod','#eee8aa'
,'khaki','#f0e68c'
,'darkkhaki','#bdb76b'
,'gold','#ffd700'
,'cornsilk','#fff8dc'
,'blanchedalmond','#ffebcd'
,'bisque','#ffe4c4'
,'navajowhite','#ffdead'
,'wheat','#f5deb3'
,'burlywood','#deb887'
,'tan','#d2b48c'
,'rosybrown','#bc8f8f'
,'sandybrown','#f4a460'
,'goldenrod','#daa520'
,'darkgoldenrod','#b8860b'
,'peru','#cd853f'
,'chocolate','#d2691e'
,'saddlebrown','#8b4513'
,'sienna','#a0522d'
,'brown','#a52a2a'
,'maroon','#800000'
,'olive','#808000'
,'olivedrab','#6b8e23'
,'yellowgreen','#9acd32'
,'limegreen','#32cd32'
,'lime','#00ff00'
,'lawngreen','#7cfc00'
,'chartreuse','#7fff00'
,'greenyellow','#adff2f'
,'springgreen','#00ff7f'
,'mediumspringgreen','#00fa9a'
,'lightgreen','#90ee90'
,'palegreen','#98fb98'
,'darkseagreen','#8fbc8f'
,'mediumseagreen','#3cb371'
,'seagreen','#2e8b57'
,'forestgreen','#228b22'
,'green','#008000'
,'darkgreen','#006400'
,'mediumaquamarine','#66cdaa'
,'aqua','#00ffff'
,'cyan','#00ffff'
,'lightcyan','#e0ffff'
,'paleturquoise','#afeeee'
,'aquamarine','#7fffd4'
,'turquoise','#40e0d0'
,'mediumturquoise','#48d1cc'
,'darkturquoise','#00ced1'
,'lightseagreen','#20b2aa'
,'cadetblue','#5f9ea0'
,'darkcyan','#008b8b'
,'teal','#008080'
,'lightsteelblue','#b0c4de'
,'powderblue','#b0e0e6'
,'lightblue','#add8e6'
,'skyblue','#87ceeb'
,'lightskyblue','#87cefa'
,'deepskyblue','#00bfff'
,'dodgerblue','#1e90ff'
,'cornflowerblue','#6495ed'
,'steelblue','#4682b4'
,'royalblue','#4169e1'
,'blue','#0000ff'
,'mediumblue','#0000cd'
,'darkblue','#00008b'
,'navy','#000080'
,'midnightblue','#191970'
,'thistle','#d8bfd8'
,'plum','#dda0dd'
,'violet','#ee82ee'
,'orchid','#da70d6'
,'fuchsia','#ff00ff'
,'magenta','#ff00ff'
,'mediumorchid','#ba55d3'
,'mediumpurple','#9370db'
,'blueviolet','#8a2be2'
,'darkviolet','#9400d3'
,'darkorchid','#9932cc'
,'darkmagenta','#8b008b'
,'purple','#800080'
,'indigo','#4b0082'
,'darkslateblue','#483d8b'
,'rebeccapurple','#663399'
,'slateblue','#6a5acd'
,'mediumslateblue','#7b68ee'
,'snow','#fffafa'
,'honeydew','#f0fff0'
,'mintcream','#f5fffa'
,'azure','#f0ffff'
,'aliceblue','#f0f8ff'
,'ghostwhite','#f8f8ff'
,'whitesmoke','#f5f5f5'
,'seashell','#fff5ee'
,'beige','#f5f5dc'
,'oldlace','#fdf5e6'
,'floralwhite','#fffaf0'
,'ivory','#fffff0'
,'antiquewhite','#faebd7'
,'linen','#faf0e6'
,'lavenderblush','#fff0f5'
,'mistyrose','#ffe4e1'
,'gainsboro','#dcdcdc'
,'lightgrey','#d3d3d3'
,'silver','#c0c0c0'
,'darkgray','#a9a9a9'
,'gray','#808080'
,'dimgray','#696969'
,'lightslategray','#778899'
,'slategray','#708090'
,'darkslategray','#2f4f4f'];

function hexdec (hexString) {  // thanks to https://locutus.io/php/math/hexdec/
  //  discuss at: https://locutus.io/php/hexdec/
  // original by: Philippe Baumann
  //   example 1: hexdec('that')
  //   returns 1: 10
  //   example 2: hexdec('a0')
  //   returns 2: 160

  hexString = (hexString + '').replace(/[^a-f0-9]/gi, '');
  return parseInt(hexString, 16);
}

function hex2dec(couleur, inopac) {  // thanks to http://wikkawiki.org/FpdfIntegration/raw
    var dolR = couleur.toLowerCase().replace('#','').substring(0,2);
    var dolrouge = hexdec(dolR);
    var dolV = couleur.toLowerCase().replace('#','').replace(dolR,'').substring(0,2);
    var dolvert = hexdec(dolV);
    var dolB = couleur.toLowerCase().replace('#','').replace(dolR,'').replace(dolV,'').substring(0,2);
    var dolbleu = hexdec(dolB);
    document.getElementById('fred').value='' + dolrouge;
    document.getElementById('fgreen').value='' + dolvert;
    document.getElementById('fblue').value='' + dolbleu;
    if (inopac != '') {
      return 'rgba(' + dolrouge + ',' + dolvert + ',' + dolbleu + ',' + inopac + ')';
    } else {
      return couleur.toLowerCase();
    }
}

function opacitymaybe(incvalo) {
  var incval=incvalo.value;
  var ttfstuff=incval.split('#');
  if (ttfstuff.length == 1) { return incval; }
  incval=incval.replace(ttfstuff[0] + '#', '');
  var origincval=incval.toLowerCase();
  var opac='';
  var colwords=incval.split(' ');
  if (colwords.length >= 1) {
  for (var idf=0; idf<colwords.length; idf++) {
    if ((colwords[idf] + ' ').toLowerCase().indexOf('px') == -1 && ((colwords[idf] + ' ').substring(0,1) == '.' || ((colwords[idf] + ' ').substring(0,1) >= '0' && (colwords[idf] + ' ').substring(0,1) <= '9'))) {
     document.getElementById('fangle').value=colwords[idf];
    } else if ((colwords[idf] + ' ').substring(0,1) == '#') {
     hex2dec(colwords[idf], '');
    } else if ((colwords[idf] + ' ').substring(0,1) == '(') {
     document.getElementById('fleft').value=colwords[idf].substring(1).split(',')[0].split(')')[0];
     document.getElementById('ftop').value=colwords[idf].substring(1).split(',')[1].split(',')[0].split(')')[0];
     //alert(document.getElementById('fleft').value + ',' + document.getElementById('ftop').value);
    } else if (bcols.indexOf((colwords[idf] + ' ').toLowerCase().replace(/\ /g,'')) != -1) {
     hex2dec(bcols[eval(1 + bcols.indexOf((colwords[idf] + ' ').toLowerCase().replace(/\ /g,'')))], '');
    } else if ((colwords[idf] + ' ').indexOf('_') != -1) {
     document.getElementById('fontname').value=colwords[idf].replace(/\_/g,' ');
    } else if ((colwords[idf] + ' ').toLowerCase().indexOf('px') != -1) {
     document.getElementById('fsize').value=colwords[idf];
    } else {
     document.getElementById('fontname').value=colwords[idf].replace(/\_/g,' ');
    }
  }
  }
  incvalo.value=ttfstuff[0];
  return ttfstuff[0];
}



function isimage(tvl) {
  var retval=false, look=true, alin=0, cae='';
  if (tvl != tvl.trim() && tvl.trim().length < 20 && tvl.trim() != '' && (tvl + ' ').substring(0,1) >= '0' && (tvl + ' ').substring(0,1) <= '9' && ('x' + tvl).trim().slice(-1) >= '0' && ('x' + tvl).trim().slice(-1) <= '9') {
    return true;
  }
  if (tvl.replace('data:image/','.').toLowerCase().indexOf('.jpeg,') != -1) cae='.jpeg';
  if (tvl.replace('data:image/','.').toLowerCase().indexOf('.jpg,') != -1) cae='.jpg';
  if (tvl.replace('data:image/','.').toLowerCase().indexOf('.gif,') != -1) cae='.gif';
  if (tvl.replace('data:image/','.').toLowerCase().indexOf('.png,') != -1) cae='.png';
  if (tvl.replace('data:image/','.').toLowerCase().indexOf('.bmp,') != -1) cae='.bmp';
  if (tvl.replace('data:image/','.').toLowerCase().indexOf('.tiff,') != -1) cae='.tiff';
  if (tvl.replace('data:image/','.').toLowerCase().indexOf('.tif,') != -1) cae='.tif';
  if (tvl.replace('data:image/','.').toLowerCase().indexOf('.jp') != -1) retval=true;
  if (tvl.replace('data:image/','.').toLowerCase().indexOf('.gif') != -1) retval=true;
  if (tvl.replace('data:image/','.').toLowerCase().indexOf('.png') != -1) retval=true;
  if (tvl.replace('data:image/','.').toLowerCase().indexOf('.bmp') != -1) retval=true;
  if (tvl.replace('data:image/','.').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' placeholder='Append #comment[~second line] for animated GIF watermarks (that are red if first slide has such a comment) ... {[unicode]} for some emojis' 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' placeholder='Append #comment[~second line] for animated GIF watermarks (that are red if first slide has such a comment) ... {[unicode]} for some emojis' 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' placeholder='Append #comment[~second line] for animated GIF watermarks (that are red if first slide has such a comment) ... {[unicode]} for some emojis' 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' placeholder='Append #comment[~second line] for animated GIF watermarks (that are red if first slide has such a comment) ... {[unicode]} for some emojis' 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' placeholder='Append #comment[~second line] for animated GIF watermarks (that are red if first slide has such a comment) ... {[unicode]} for some emojis' 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' placeholder='Append #comment[~second line] for animated GIF watermarks (that are red if first slide has such a comment) ... {[unicode]} for some emojis' 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 . " ... or ... <div style='display:inline-block;width:90px;height:30px;overflow:hidden;border-top:2px solid yellow;border-left:2px solid yellow;border-right:2px solid yellow;'><iframe style='width:150px;height:228px;margin-top:-198px;' src='../../HTMLCSS/client_browsing.htm?d=" . rand(0,18765432) . "'></iframe></div></h1>
<div align='center'>
<form id='myform' action='./tutorial_to_animated_gif.php' method='POST'>" . $prestfle . $stfle . "
<input name=fred id=fred value='255' type=hidden></input><input name=fgreen id=fgreen value='0' type=hidden></input><input name=fblue id=fblue value='0' type=hidden></input>
<input name=fontname id=fontname value='' type=hidden></input><input name=fangle id=fangle value='0' type=hidden></input>
<input name=fleft id=fleft value='5' type=hidden></input><input name=ftop id=ftop value='5' type=hidden></input>
<input name=fsize id=fsize value='14px' type=hidden></input>
Tutorial Slideshow Title <input onblur='opacitymaybe(this);' style='width:70%;' type='text' title='To supplement # delimited comments below you can append to the title # delimited (left,top) or FontColour or Font_name or FontSize_px or AngleDegrees[.Opacity] configurations allowed here' placeholder='To supplement # delimited comments below you can append to the title # delimited (left,top) or FontColour or Font_name or FontSize_px or AngleDegrees[.Opacity] configurations allowed here' id='stitle' name='stitle' value='" . $agtext . "'></input><br><br>
Tutorial Slideshow Delay(s) <input style='width:70%;' type='text' 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' placeholder='Append #comment[~second line] for animated GIF watermarks (that are red if first slide has such a comment) ... {[unicode]} for some emojis' 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>";

//}


?>