<?php
// dot_colour_wheel.php
// RJM Programming
// October, 2024
// Trying out Dot GraphViz package ... thanks to https://graphviz.org/Gallery/neato/color_wheel.html
// cat colour_wheel.dot | sed '/\(\"\)\([^"]*\)\" \[color = /s//\"\2\" \[url = \"https\:\/\/www.google.com\/search\?sca_esv=8957a51bd870705f&sxsrf=ADLYWIL9Z95Y2XILCVHy1Ep_vA8UA0HVLw:1728014294038\&udm=2\&fbs=AEQNm0CrHVBV9axs7YmgJiq-TjYcvrKLYvLdNLLD2b8MCfaxte6rE3yH_shvJRqV-Iqr8JJvO9luGxMyf8tABHRE_ER5WVi_ouuYD0ZGCgonp8RpBmOUpTB-X6dVFbJc8KMdvjlHxs0_OJiYCY4-Y60oHTMiC_1a9mkGkMIYHO4XqP68ipa4P5rJaQCtA4WPne6f0aAKhdyAMTPbTsWJEdFYpNvI5RzOgw\&sa=X\&ved=2ahUKEwjCwabx6vOIAxWJ7DQHHQIOJBoQtKgLegQIDRAB\&biw=1433\&bih=739\&dpr=2\&q=\2\"\, color = /g' > colour_wheel.DOT
// cat colour_wheel.dot | sed '/\(\"\)\([^"]*\)\" \[color = /s//\"\2\" \[url = \"https\:\/\/www.google.com\/search\?udm=2\&sa=X\&biw=1433\&bih=739\&dpr=2\&q=\2\"\, color = /g' > colour_wheel.DOT

// cat colour_wheel.dot | sed '/\(\"\)\([^"]*\)\" \[color = /s//\"\2\" \[url = \"https\:\/\/www.google.com\/search\?sca_esv=8957a51bd870705f&sxsrf=ADLYWIL9Z95Y2XILCVHy1Ep_vA8UA0HVLw:1728014294038\&udm=2\&fbs=AEQNm0CrHVBV9axs7YmgJiq-TjYcvrKLYvLdNLLD2b8MCfaxte6rE3yH_shvJRqV-Iqr8JJvO9luGxMyf8tABHRE_ER5WVi_ouuYD0ZGCgonp8RpBmOUpTB-X6dVFbJc8KMdvjlHxs0_OJiYCY4-Y60oHTMiC_1a9mkGkMIYHO4XqP68ipa4P5rJaQCtA4WPne6f0aAKhdyAMTPbTsWJEdFYpNvI5RzOgw\&sa=X\&ved=2ahUKEwjCwabx6vOIAxWJ7DQHHQIOJBoQtKgLegQIDRAB\&biw=1433\&bih=739\&dpr=2\&q=\2\"\, color = /g' > colour_wheel.DOT

 $txprefix=$_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR;
  
 foreach ( $_GET as $key => $value ) {  $_POST[$key] = $value; } 
  $outel='iframe';
  $fmt='svg';
  $verb='dot'; // python
  $codeext='dot'; // 'py';
  $switch=' -T' . str_replace('html','cmapx',$fmt) . ' ';
  $codeafters=' > ' . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'doctest-output' .  DIRECTORY_SEPARATOR . 'my-colour-wheel.gv.' . $fmt . ' ';
  $tw='';

  $abl=['my_colour_wheel','YoumightfindmeOne','YoumightfindmeTwo','YoumightfindmeThree,YoumightfindmeZeroThree'];
  $abl=['my_colour_wheel','YoumightfindmeOne=YounowfindmeOne','YoumightfindmeTwo=YounowfindmeTwo','YoumightfindmeThree=YounowfindmeThree,YoumightfindmeZeroThree=YounowfindmeZeroThree'];
  $newabl=['my-colour-wheel','YoumightfindmeOne=YounowfindmeOne','YoumightfindmeTwo=YounowfindmeTwo','YoumightfindmeThree=YounowfindmeThree,YoumightfindmeZeroThree=YounowfindmeZeroThree'];
  
  
  $tprefix=$txprefix; //'/tmp/';
  $prefix='';
  $suffix='';
  $plus='<span id=plus>-</span>';
  $minus='<span id=minus>-</span>';
  $plus='<span ondblclick=domore(2); onclick=domore(1); id=plus>-</span>';
  $minus='<span ondblclick=domore(-2); onclick=domore(-1); id=minus>-</span>';
  $yes='n';
  $mode='Graph';
  $shape='';
  $fsize='';
  $bcol='lightblue2';
  $bbcol='#aed8e8';
  $newt='';
  $newablzero='My%20Colour%20Wheel';
  $outfn='';
  $gv='.gv.';
  $none='none';
  
  $addimg='';
  $suffile='';
  
  if (isset($_POST['newablzero']) && isset($_POST['infile'])) {
    $sg='</svg>';
    $infis=str_replace('+',' ',urldecode($_POST['infile']));
    if (file_exists($infis)) {
       if (strpos($infis, 'doctest-output') !== false) {
       $suffile='/doctest-output' . explode('doctest-output', $infis)[1];
       if (strlen($_POST['newablzero']) > 0) {
       //file_put_contents('x1.x1', '' . strlen($_POST['newablzero']));
          $excont=file_get_contents($infis);
       //file_put_contents('x11.x11', '' . strlen($excont));
          if (strpos($excont, '</svg>') !== false) {
             if (strpos($excont, '</g>') !== false) {
                $sgs=explode('</g>', $excont);
                $sg='</g>' . $sgs[-1 + sizeof($sgs)];
             }
    //file_put_contents('x111.x111', '' . strlen($excont));
             $newcont=plusdata(str_replace('+',' ',urldecode($_POST['newablzero'])));
       //file_put_contents('x1111.x1111', '' . strlen($newcont));
             if (strpos($excont, $newcont) === false) {
       //file_put_contents('x11111.x11111', '' . strlen($newcont));
                $newercont=str_replace($sg, $newcont . $sg, $excont);
       //file_put_contents('x111111.x111111', '' . strlen($newercont));
                $outfis=rtrim(dirname(__FILE__), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . str_replace('doctestoutput','doctest-output',str_replace('-','',$infis));
                file_put_contents($outfis, $newercont);
       //file_put_contents('x1111112.x1111112', '' . strlen($newercont) . ' vs ' . $outfis . ' ' . strlen(file_get_contents($outfis)));
                echo "<html><body onload=\" parent.setAVal('saved_colour_wheel_" . server_remote_addr() . str_replace('/','_',$_POST['infile']) . "-' + parent.document.getElementById('ititle').value.replace(/\-/g,'_').replace(/\ /g,'_'), top.document.URL.split(':')[0] + '://' + '" . $_SERVER['SERVER_NAME'] . $suffile .  "'); parent.cookieAVal('saved_colour_wheel_', true); \"></body></html>";
                exit;
             }
          }
       } else {
                $excont=file_get_contents($infis);
                $outfis=rtrim(dirname(__FILE__), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . str_replace('doctestoutput','doctest-output',str_replace('-','',$infis));
                file_put_contents($outfis, $excont);
                echo "<html><body onload=\" parent.setAVal('saved_colour_wheel_" . server_remote_addr() . str_replace('/','_',$_POST['infile']) . "-' + parent.document.getElementById('ititle').value.replace(/\-/g,'_').replace(/\ /g,'_'), top.document.URL.split(':')[0] + '://' + '" . $_SERVER['SERVER_NAME'] . $suffile .  "'); parent.cookieAVal('saved_colour_wheel_', true); \"></body></html>";
                exit;
       }
       }
    }
    exit;
  }
  
  function plusdata($aig) {
   $outig=$aig;
   $dlm='"';
   $outgs=explode('data:', $aig);
   if (sizeof($outgs) > 1) {
     $outig=$outgs[0];
     $dlm=substr($outig,-1,1);
     for ($iop=1; $iop<sizeof($outgs); $iop++) {
       $outig.='data:' . str_replace(explode($dlm,$outgs[$iop])[0],  str_replace('%20','+',str_replace(' ','+',explode($dlm,$outgs[$iop])[0]))  ,$outgs[$iop]); 
     }
   }
   return $outig;
  }

  
  function ourfile_exists($infn) {
   global $outfn, $gv, $tw, $fmt;
   $retv=file_exists($infn);
   if ($retv && $tw != '') {
     if (strpos($infn, "/") === false) {
     $tw='&thewords=' . urlencode("/" . $infn);
     } else {
     $tw='&thewords=' . urlencode(str_replace($_SERVER['DOCUMENT_ROOT'],'',$infn));
     }
   }
   if ($retv && $fmt == 'html') {
     exec('chmod 777 ' . $infn);
     exec('chown rjmprogr ' . $infn);
     exec('chgrp rjmprogr ' . $infn);
     exec('rm -f ' . $infn);
     $tw='&thewords=' . urlencode("//www.rjmprogramming.com.au/doctest-output/d.png");
     file_put_contents($infn, "<html><head/><body><img src='" . 'data:image/png;base64,' . base64_encode(file_get_contents("doctest-output" . DIRECTORY_SEPARATOR . "d.png")) . "' usemap='#Colour_wheel'/>" . str_replace("<area ", "<area onclick=\"if (parent.document.getElementById('hidecol')) { if (('' + this.href).indexOf('#') != -1) { parent.document.getElementById('hidecol').value=decodeURIComponent(this.href.split('#')[1].replace(/\+/g,'%20'));  } else { parent.document.getElementById('hidecol').value=this.title; } }\" ontouchdown=\" if ((this.href + '!').indexOf('&q=!') != -1) { this.href+=encodeURIComponent(this.title);  }\" ontouchstart=\" if ((this.href + '!').indexOf('&q=!') != -1) { this.href+=encodeURIComponent(this.title);  }\" onmouseover=\" if ((this.href + '!').indexOf('&q=!') != -1) { this.href+=encodeURIComponent(this.title);  }\" target='blank' ", str_replace("http:", "", str_replace("https:", "", str_replace("&amp;", "&", file_get_contents("doctest-output" . DIRECTORY_SEPARATOR . "d.map"))))) . "</body></html>");
   }
   if ($retv && strpos($infn, '.svg') !== false && 1 == 2) {
     exec('chmod 777 ' . $infn);
     exec('chown rjmprogr ' . $infn);
     exec('chgrp rjmprogr ' . $infn);
     $retc=file_get_contents($infn);
     $gv='.GV.';
     $outfn=str_replace('.gv.','.GV.',$infn);
     file_put_contents($outfn, str_replace('<g id=', '<g onclick="parent.svgit(this);" id=', $infn));
     exec('chmod 777 ' . $outfn);
     exec('chown rjmprogr ' . $outfn);
     exec('chgrp rjmprogr ' . $outfn);
   }
   return $retv;
  }
  
  $nondefshapes=str_replace("\n","","
  
<option value=box>Box</option>
 

<option value=polygon>Polygon</option>
 

<option value=ellipse>Ellipse</option>
 

<option value=oval>Oval</option>
 

<option value=circle>Circle</option>
 

<option value=point>Point</option>
 

<option value=egg>Egg</option>
 

<option value=triangle>Triangle</option>
 

<option value=plaintext>Plaintext</option>
 

<option value=plain>Plain</option>
 

<option value=diamond>Diamond</option>
 

<option value=trapezium>Trapezium</option>
 

<option value=parallelogram>Parallelogram</option>
 

<option value=house>House</option>
 

<option value=pentagon>Pentagon</option>
 

<option value=hexagon>Hexagon</option>
 

<option value=septagon>Septagon</option>
 

<option value=octagon>Octagon</option>
 

<option value=doublecircle>Doublecircle</option>
 

<option value=doubleoctagon>Doubleoctagon</option>
 

<option value=tripleoctagon>Tripleoctagon</option>
 

<option value=invtriangle>Invtriangle</option>
 

<option value=invtrapezium>Invtrapezium</option>
 

<option value=invhouse>Invhouse</option>
 

<option value=Mdiamond>Mdiamond</option>
 

<option value=Msquare>Wsquare</option>
 

<option value=Mcircle>Mcircle</option>
 

<option value=rect>Rect</option>
 

<option value=rectangle>Rectangle</option>
 

<option value=square>Square</option>
 

<option value=star>Star</option>
 

<option value=none>None</option>
 

<option value=underline>Underline</option>
 

<option value=cylinder>Cylinder</option>
 

<option value=note>Note</option>
 

<option value=tab>Tab</option>
 

<option value=folder>Folder</option>
 

<option value=box3d>Box3d</option>
 

<option value=component>Component</option>
 

<option value=promoter>Promoter</option>
 

<option value=cds>Cds</option>
 

<option value=terminator>Terminator</option>
 

<option value=utr>Utr</option>
 

<option value=primersite>Primersite</option>
 

<option value=restrictionsite>Restrictionsite</option>

<option value=fivepoverhang>Fivepoverhang</option>
 

<option value=threepoverhang>Threepoverhang</option>
 

<option value=noverhang>Noverhang</option>
 

<option value=assembly>Assembly</option>
 

<option value=signature>Signature</option>
 

<option value=insulator>Insulator</option>
 

<option value=ribosite>Ribosite</option>
 

<option value=rnastab>Rnastab</option>
 

<option value=proteasesite>Proteasesite</option>
 

<option value=proteinstab>Proteinstab</option>
 

<option value=rpromoter>Rpromoter</option>
 

<option value=rarrow>Rarrow</option>
 

<option value=larrow>Larrow</option>
 

<option value=lpromoter>Lpromoter</option>");
  
  $pyprefix='';
  $pymidbit='';
  $pysuffix='';
  
function server_remote_addr() {
    $rma = $_SERVER['REMOTE_ADDR'];
    return str_replace('.','_',$rma);
}

  if (!isset($_POST['one']) && !isset($_POST['two']) && !isset($_POST['three']) && !isset($_POST['original'])) {
    $yes='y';
    $newabl[1]='';
    $newabl[2]='';
    $newabl[3]='';
    $_POST['one']=$newabl[1];
    $_POST['two']=$newabl[2];
    $_POST['three']=$newabl[3];
  } else {
    $none='inline-block';
    $plus='<span title=Bigger ondblclick=domore(2); onclick=domore(1); style=cursor:pointer;text-decoration:underline; id=plus>+</span>';
    $minus='<span title=Smaller ondblclick=domore(-2); onclick=domore(-1); style=cursor:pointer;text-decoration:underline; id=minus>-</span>';
  }
  
    
  if (strpos($newabl[0], 'heel') !== false) {
     $parts=explode('-',str_replace('_','-',$newabl[0]));
     $newt='';
     for ($iy=0; $iy<sizeof($parts); $iy++) {
       $newt.=strtoupper(substr($parts[$iy],0,1)) . strtolower(substr($parts[$iy],1)) . ' ';
     }
  }


  if (isset($_POST['fmt'])) {
  $fmt=trim(str_replace('+',' ',urldecode($_POST['fmt'])));
  if ($fmt == 'png' || $fmt == 'jpg') {
    $outel='img draggable=true ';
    $tw='&thewords=';
  }
  
  $switch=' -T' . str_replace('html','cmapx',$fmt) . ' ';
  $codeafters=' > ' . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'doctest-output' .  DIRECTORY_SEPARATOR . 'my-colour-wheel.gv.' . $fmt . ' ';
  } else if (!isset($_POST['original'])) {
  $_POST['fmt']='svg';
  }

  if (isset($_POST['title'])) {
  $newabl[0]=trim(str_replace('+',' ',urldecode($_POST['title'])));
  $newablzero=str_replace('+','%20',urlencode($newabl[0]));
  $switch=' -T' . str_replace('html','cmapx',$fmt) . ' ';
  $codeafters=' > ' . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'doctest-output' .  DIRECTORY_SEPARATOR . $newablzero . '.gv.' . $fmt . ' ';
  } else if (!isset($_POST['original'])) {
  $_POST['title']=$newabl[0];
  }

  if (isset($_POST['addimg'])) {
  $addimg=plusdata(str_replace('+',' ',urldecode($_POST['addimg'])));
  } else if (!isset($_POST['original'])) {
  $_POST['addimg']='';
  }

  if (isset($_POST['mode'])) {
  $mode=trim(str_replace('+',' ',urldecode($_POST['mode'])));
  } else if (!isset($_POST['original'])) {
  $_POST['mode']='Graph';
  }

  if (isset($_POST['back'])) {
  $bcol=trim(str_replace('+',' ',urldecode($_POST['back'])));
  if (strlen($bcol) == 6) { $bcol='#' . trim(str_replace('+',' ',urldecode($_POST['back']))); $bbcol=$bcol;  } else if (strlen($bcol) == 7) { $bbcol=$bcol;  }
  } else if (!isset($_POST['original'])) {
  $_POST['back']='lightblue2';
  }

  if (isset($_POST['shape'])) {
  $shape=trim(str_replace('+',' ',urldecode($_POST['shape'])));
  } else if (!isset($_POST['original'])) {
  $_POST['shape']='';
  }

  if (isset($_POST['fsize'])) {
  $fsize=trim(str_replace('+',' ',urldecode($_POST['fsize'])));
  } else if (!isset($_POST['original'])) {
  $_POST['fsize']='';
  }
   
  if (isset($_POST['one']) && isset($_POST['two']) && isset($_POST['three'])) {
  $prefix=$_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR; //'/tmp/';
  $newabl[1]=str_replace('+',' ',urldecode(str_replace("%2b","%0b",str_replace("%2B","%0b",$_POST['one']))));
  $newabl[2]=str_replace('+',' ',urldecode(str_replace("%2b","%0b",str_replace("%2B","%0b",$_POST['two']))));
  $newabl[3]=str_replace('+',' ',urldecode(str_replace("%2b","%0b",str_replace("%2B","%0b",$_POST['three']))));
  if ($fmt == 'html') {
  if (!file_exists('./colour_wheel.' . strtoupper($codeext))) {
  exec("/usr/bin/dot " . rtrim(dirname(__FILE__), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . "colour_wheel.dot -Tsvg -o " . rtrim(dirname(__FILE__), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . "doctest-output" . DIRECTORY_SEPARATOR . "d.svg");  
  $svghelp=file_get_contents(rtrim(dirname(__FILE__), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . "doctest-output" . DIRECTORY_SEPARATOR . "d.svg");
  //exec("cat " . rtrim(dirname(__FILE__), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . "colour_wheel.dot | sed '/\\(\\\"\\)\\([^\\\"]*\)\\\" \\[color = /s//\\\"\\2\\\" \\[url = \\\"https\\:\\/\\/www.google.com\\/search\\?udm=2\\&sa=X\\&biw=1433\\&bih=739\\&dpr=2\\&q=\\2\\\"\\, color = /g' > " . rtrim(dirname(__FILE__), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . "colour_wheel.DOT");
  $pycont=file_get_contents('./colour_wheel.' . $codeext);
  $bits=explode('" [color = ', $pycont);
  for ($iy=(-1 + sizeof($bits)); $iy>=1; $iy--) {
     $thislab=explode('"', $bits[-1 + $iy])[-1 + sizeof(explode('"', $bits[-1 + $iy]))];
     if (strpos($svghelp, '>' . $thislab . '</title>') !== false) {
     $pycont=str_replace('"' . $thislab . '" [color = ', '"' . $thislab . '" [URL = "https://www.google.com/search?udm=2&sa=X&biw=1433&bih=739&dpr=2&q=' . urlencode($thislab) . str_replace('##','#','#' . urlencode(explode('"', explode(' fill="', explode('>' . $thislab . '</title>', $svghelp)[1])[1])[0])) . '" color = ', $pycont);
     } else {
     $pycont=str_replace('"' . $thislab . '" [color = ', '"' . $thislab . '" [URL = "https://www.google.com/search?udm=2&sa=X&biw=1433&bih=739&dpr=2&q=' . urlencode($thislab) . '" color = ', $pycont);
     }
     $bits=explode('" [color = ', $pycont);
  }
  $bits=explode(' [fillcolor = ', str_replace("\t"," ",$pycont));
  for ($iy=(-1 + sizeof($bits)); $iy>=1; $iy--) {
     $thislab=explode(' ', $bits[-1 + $iy])[-1 + sizeof(explode(' ', $bits[-1 + $iy]))];
     if (strpos($svghelp, '>' . $thislab . '</title>') !== false) {
     $pycont=str_replace('' . $thislab . ' [fillcolor = ', '' . $thislab . ' [URL = "https://www.google.com/search?udm=2&sa=X&biw=1433&bih=739&dpr=2&q=' . urlencode($thislab) . str_replace('##','#','#' . urlencode(explode('"', explode(' fill="', explode('>' . $thislab . '</title>', $svghelp)[1])[1])[0])) . '" fillcolor = ', $pycont);
     } else {
     $pycont=str_replace('' . $thislab . ' [fillcolor = ', '' . $thislab . ' [URL = "https://www.google.com/search?udm=2&sa=X&biw=1433&bih=739&dpr=2&q=' . urlencode($thislab) . '" fillcolor = ', $pycont);
     }
     $bits=explode(' [fillcolor = ', str_replace("\t"," ",$pycont));
  }
  file_put_contents('./colour_wheel.' . strtoupper($codeext), $pycont);
  }
  if (file_exists('./colour_wheel.' . strtoupper($codeext))) {
  $pycont=file_get_contents('./colour_wheel.' . strtoupper($codeext));
  }
  $prefstuff='';
  if (file_exists('doctest-output/d.png')) {
    $prefstuff.="rm -f " . rtrim(dirname(__FILE__), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . "doctest-output" . DIRECTORY_SEPARATOR . "d.png ; ";
  }
  if (file_exists('doctest-output/d.map')) {
    $prefstuff.="rm -f " . rtrim(dirname(__FILE__), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . "doctest-output" . DIRECTORY_SEPARATOR . "d.map ; ";
  }
  exec($prefstuff . "/usr/bin/dot " . rtrim(dirname(__FILE__), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . "colour_wheel.DOT -Tpng -o " . rtrim(dirname(__FILE__), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . "doctest-output" . DIRECTORY_SEPARATOR . "d.png -Tcmapx -o " . rtrim(dirname(__FILE__), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . "doctest-output" . DIRECTORY_SEPARATOR . "d.map");  
  } else {
  $pycont=file_get_contents('./colour_wheel.' . $codeext);
  }

  if (trim($newt) != '') {
     $newablzero=str_replace('+','%20',urlencode(trim($newt)));
     $pycont=str_replace("My Colour Wheel", trim($newt), $pycont);
  }

  if (strpos($pycont, 'u=u') !== false) {
  $pyprefix=explode('u.edge(', $pycont)[0];
  $pysuffix='' . explode('u=u', $pycont)[1];
  //$pysuffix='' . explode('u.view()', $pycont)[1];
  $pycont=$pyprefix . "\n\n" . $pysuffix;
  } else if (strpos($pycont, 'u.view()') !== false) {
  $pyprefix=explode('u.edge(', $pycont)[0];
  $pysuffix='u.view()' . explode('u.view()', $pycont)[1];
  //$pysuffix='' . explode('u.view()', $pycont)[1];
  $pycont=$pyprefix . "\n\n" . $pysuffix;
  }
  
  if ($bcol != 'lightblue2' && trim($bcol) != '') {
    $pycont=str_replace('lightblue2', $bcol, $pycont);
  }
  
  if ($shape != '') {
    $pycont=str_replace("shape = circle", "shape = " . $shape . "", $pycont);
  }
  
  if ($fsize != '') {
    $pycont=str_replace("fontsize = 10]", "fontsize = " . (explode(',',$fsize)[0] == '' ? '10' : explode(',',$fsize)[0]) . "]", $pycont);
    if (strpos($fsize, ',') !== false) {
    $pycont=str_replace("fontsize = 20]", "fontsize = " . (explode(',',$fsize)[1] == '' ? '20' : explode(',',$fsize)[1]) . "]", $pycont);
    }
  }
  
  //$xone=str_replace("\t","+", str_replace('~','',   str_replace('+',' ',str_replace('+|','`|',str_replace('+;','`;',str_replace('+;','`;',str_replace('+,','`,',urldecode(  str_replace("%2b","%0b",str_replace("%2B","%0b",$_POST['one'])) . urlencode('~'))) ))) )));
  //$xtwo=str_replace("\t","+", str_replace('~','',   str_replace('+',' ',str_replace('+|','`|',str_replace('+;','`;',str_replace('+;','`;',str_replace('+,','`,',urldecode(  str_replace("%2b","%0b",str_replace("%2B","%0b",$_POST['two'])) . urlencode('~'))) ))) )));
  //$xthree=str_replace("\t","+", str_replace('~','',   str_replace('+',' ',str_replace('+|','`|',str_replace('+;','`;',str_replace('+;','`;',str_replace('+,','`,',urldecode(  str_replace("%2b","%0b",str_replace("%2B","%0b",$_POST['three'])) . urlencode('~'))) ))) )));
  //$xone=str_replace("\t","+", str_replace('+',' ',(urldecode(  str_replace("%2b","%0b",str_replace("%2B","%0b",$_POST['one']))))));
  //$xtwo=str_replace("\t","+", str_replace('+',' ',(urldecode(  str_replace("%2b","%0b",str_replace("%2B","%0b",$_POST['two']))))));
  //$xthree=str_replace("\t","+", str_replace('+',' ',(urldecode(  str_replace("%2b","%0b",str_replace("%2B","%0b",$_POST['three']))))));
  $xone=str_replace('+',' ',(urldecode(  str_replace("%2b","%0b",str_replace("%2B","%0b",$_POST['one'])))));
  $xtwo=str_replace('+',' ',(urldecode(  str_replace("%2b","%0b",str_replace("%2B","%0b",$_POST['two'])))));
  $xthree=str_replace('+',' ',(urldecode(  str_replace("%2b","%0b",str_replace("%2B","%0b",$_POST['three'])))));
  
  if (strpos($xone, ',') !== false) {
  $xsone=explode(',', $xone);
  for ($iij=0; $iij<sizeof($xsone); $iij++) {
  $xone=$xsone[$iij];
  if (strpos($xone, '=') !== false) {
  $pycont=str_replace(explode('=',$xone)[0], explode('=',$xone)[1], $pycont);
  } else {
  $pycont=str_replace($abl[1], $xone, $pycont);
  }
  }
  } else if (strpos($xone, '=') !== false) {
  $pycont=str_replace(explode('=',$xone)[0], explode('=',$xone)[1], $pycont);
  } else {
  $pycont=str_replace($abl[1], $xone, $pycont);
  }
  
  if (strpos($xtwo, ',') !== false) {
  $xsone=explode(',', $xtwo);
  for ($iij=0; $iij<sizeof($xsone); $iij++) {
  $xtwo=$xsone[$iij];
  if (strpos($xtwo, '=') !== false) {
  $pycont=str_replace(explode('=',$xtwo)[0], explode('=',$xtwo)[1], $pycont);
  } else {
  $pycont=str_replace($abl[2], $xtwo, $pycont);
  }
  }
  } else if (strpos($xtwo, '=') !== false) {
  $pycont=str_replace(explode('=',$xtwo)[0], explode('=',$xtwo)[1], $pycont);
  } else {
  $pycont=str_replace($abl[2], $xtwo, $pycont);
  }
  
  
  if (strpos($xthree, ',') !== false) {
  $xsone=explode(',', $xthree);
  for ($iij=0; $iij<sizeof($xsone); $iij++) {
  $xthree=$xsone[$iij];
  if (strpos($xthree, '=') !== false) {
  $pycont=str_replace(explode('=',$xthree)[0], explode('=',$xthree)[1], $pycont);
  } else {
  $pycont=str_replace($abl[3], $xthree, $pycont);
  }
  }
  } else if (strpos($xthree, '=') !== false) {
  $pycont=str_replace(explode('=',$xthree)[0], explode('=',$xthree)[1], $pycont);
  } else {
  $pycont=str_replace($abl[3], $xthree, $pycont);
  }
    
  $pycont=str_replace($abl[0], $newabl[0], $pycont);
  if ($fmt != 'svg') {
     $pycont=str_replace("format='svg'", "format='" . $fmt . "'", $pycont);
  }
  
  if (strpos($newabl[0], 'heel') !== false) {
     $parts=explode('-',str_replace('_','-',$newabl[0]));
     $newt='';
     for ($iy=0; $iy<sizeof($parts); $iy++) {
       $newt.=strtoupper(substr($parts[$iy],0,1)) . strtolower(substr($parts[$iy],1)) . ' ';
     }
     if (trim($newt) != '') {
     $pycont=str_replace("My Colour Wheel", trim($newt), $pycont);
     }
  }
  
  $pycont=str_replace('doctest-output', $prefix . 'doctest-output', $pycont);
  
  if (strtolower($mode) != 'graph' && trim($mode) != '') {
    $pycont=str_replace('Graph Colour_', '' . strtoupper(substr($mode,0,1)) . strtolower(substr($mode,1)) . '', str_replace('graph Colour_', '' . strtolower($mode) . ' Colour_', $pycont));
  }

  if ($yes != 'y') { // use crontab 
  $suffix='_' . server_remote_addr();
  file_put_contents($tprefix . 'colour_wheel_' . $suffix . '.' . $codeext, $pycont);
  //file_put_contents($prefix . 'colour_wheel0_' . $suffix . '.' . $codeext, $pycont);
 //file_put_contents($prefix . 'colour_wheel_' . $suffix . '.ksh', "#!/bin/ksh\n/usr/bin/" . $verb . $switch . " " . $prefix . "colour_wheel_" . $suffix . "." . $codeext . $codeafters . " 2>> " . $prefix . "colour_wheel.bad \nln -s " . $prefix . "doctest-output" . DIRECTORY_SEPARATOR . $newabl[0] . ".gv.pdf " . $_SERVER['DOCUMENT_ROOT'] .  DIRECTORY_SEPARATOR . "doctest-output" . DIRECTORY_SEPARATOR . $newabl[0] . ".gv.pdf \nrm -f " . $prefix . "colour_wheel_" . $suffix . "." . $codeext . $codeafters . " \nrm -f " . $prefix . "colour_wheel_" . $suffix . ".ksh \nexit");
  file_put_contents($prefix . 'colour_wheel_' .  $suffix . '.ksh', "#!/bin/ksh\n/usr/bin/" . $verb . $switch . " " . $tprefix . "colour_wheel_" . $suffix . "." . $codeext . $codeafters . " 2>> " . $prefix . "colour_wheel.bad \nsleep 5\n\n/usr/bin/" .$verb . $switch . $tprefix . "colour_wheel_" . $suffix . "." . $codeext . $codeafters . " 2>> " . $prefix . "colour_wheel.bad \n\nrm -f " . $tprefix . "colour_wheel_" . $suffix . "." . $codeext . " \nrm -f " . $prefix . "colour_wheel_" . $suffix . ".ksh \nexit");
  //file_put_contents($prefix . 'colour_wheel0_' . $suffix . '.ksh', "#!/bin/ksh\n/usr/bin/" . $verb . $switch . " " . $tprefix . "colour_wheel_" . $suffix . "." . $codeext . $codeafters . " 2>> " . $prefix . "colour_wheel.bad \nsleep 5\n\n/usr/bin/" .$verb . $switch . $tprefix . "colour_wheel_" . $suffix . "." . $codeext . $codeafters . " 2>> " . $prefix . "colour_wheel.bad \n\nrm -f " . $tprefix . "colour_wheel_" . $suffix . "." . $codeext . " \nrm -f " . $prefix . "colour_wheel_" . $suffix . ".ksh \nexit");
  exec('chmod 777 ' . $prefix . 'colour_wheel_' . $suffix . '.ksh');
  exec('ksh ' . $prefix . 'colour_wheel_' . $suffix . '.ksh');
  exec('chown root ' . $prefix . 'colour_wheel_' . $suffix . '.ksh');
  exec('chgrp root ' . $prefix . 'colour_wheel_' . $suffix . '.ksh');
  while (file_exists($prefix . 'colour_wheel_' . $suffix . '.ksh')) {
    sleep(10);
  }
  } else {
  file_put_contents($txprefix . 'colour_wheel.' . $codeext, $pycont);
  exec('chmod 777 ' . $txprefix . 'colour_wheel.' . $codeext);
  exec('chown rjmprogr ' . $txprefix . 'colour_wheel.' . $codeext);
  exec('chgrp rjmprogr ' . $txprefix . 'colour_wheel.' . $codeext);
  //if (file_exists('doctest-output' . DIRECTORY_SEPARATOR . $newabl[0] . '.gv.' . $fmt)) {
    //exec('rm -f ' . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $newabl[0] . '.gv.' . $fmt);
    //exec('rm -f ' . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $newabl[0] . '.gv');
    //unlink('doctest-output' . DIRECTORY_SEPARATOR . $newabl[0] . '.gv.' . $fmt);
    //unlink('doctest-output' . DIRECTORY_SEPARATOR . $newabl[0] . '.gv');
  //}
  //file_put_contents('x.x', '/usr/bin/' .$verb . $switch . $txprefix . 'colour_wheel.' . $codeext . $codeafters . ' 2> colour_wheel.bad');
  exec('/usr/bin/' .$verb . $switch . $txprefix . 'colour_wheel.' . $codeext . $codeafters . ' 2> colour_wheel.bad');
  sleep(8);
  //if (file_exists($prefix . 'doctest-output' . DIRECTORY_SEPARATOR . $newabl[0] . '.gv.pdf')) {
  //exec('ln -s ' . $prefix . 'doctest-output' . DIRECTORY_SEPARATOR . $newabl[0] . '.gv.pdf ' . $_SERVER['DOCUMENT_ROOT'] .  DIRECTORY_SEPARATOR . 'doctest-output' . DIRECTORY_SEPARATOR . $newabl[0] . '.gv.pdf');
  //}
  }
  } else {
  //file_put_contents('xx.xx', '/usr/bin/' . $verb . $switch . ' colour_wheel.' . $codeext . $codeafters);
  exec('/usr/bin/' . $verb . $switch . ' colour_wheel.' . $codeext . $codeafters);
  sleep(8);
  }
    
  if (ourfile_exists($prefix . 'doctest-output' . DIRECTORY_SEPARATOR . $newabl[0] . '.gv.' . $fmt)) {
     exec('chmod 777 ' . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $newabl[0] . $gv . $fmt);
     exec('chmod 777 ' . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $newabl[0] . '.gv');
     exec('chown rjmprogr ' . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $newabl[0] . $gv . $fmt);
     exec('chown rjmprogr ' . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $newabl[0] . '.gv');
     exec('chgrp rjmprogr ' . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $newabl[0] . $gv . $fmt);
     exec('chgrp rjmprogr ' . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $newabl[0] . '.gv');
     echo "<html>
<head>
<title>Trying out Dot GraphViz hosted in PHP - RJM Programming - October, 2024 - Colour Wheel</title>
<scr" . "ipt type=text/javascript>
 var lasturl='', lasttext=null, gzero=null, lastx=0, lasty=0, lastw=0, lasth=0, lastp='', lastwoo=null, lastj=0, lssel='', zerodotsix='0.6', bconto=null, lastiurl='', szero=null, aimg='', lastimgc='', lastsvggeo=null, uselast=false;
 
String.prototype.toHtmlEntities = function() {
  return this.replace(/./gm, function(s) {
    return (s.match(/[a-z0-9\s]+/i)) ? s : '&#' + s.charCodeAt(0) + ';';
  });
};

 function plusdata(aig) {
   var outig=aig, dlm='\"';
   var outgs=aig.split('data:');
   if (eval('' + outgs.length) > 1) {
     outig=outgs[0];
     dlm=outig.slice(-1);
     for (var iop=1; iop<outgs.length; iop++) {
       if (outgs[iop].split(dlm)[0] != outgs[iop].split(dlm)[0].replace(/\ /g,'+').replace(/\%20/g,'+')) {
         alert('Found');
       }
       outig+='data:' + outgs[iop].replace(outgs[iop].split(dlm)[0], outgs[iop].split(dlm)[0].replace(/\ /g,'+').replace(/\%20/g,'+'));
     }
   }
   if (outig != '') {
   document.getElementById('ablnewzero').value=outig;
   document.getElementById('mybutsave').style.display='inline-block';
   }
  return outig;
 }
 
 function ph() {
   var aplace='';
   
   setTimeout(function(){ location.href='#myh1'; }, 15000); 
   
   aimg=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('addimg=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('addimg=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (aimg != '') { document.getElementById('addimg').value=plusdata(aimg);  } 

   document.getElementById('myform').action=document.URL.split('?')[0].split('#')[0];

   cookieAVal('saved_colour_wheel_', true);

   // one
   aplace='" . str_replace("\n", "' + String.fromCharCode(10) + '",$abl[1]) . "';   //'5th Edition;6th Edition,PWB 1.0|6th Edition;LSX,1 BSD,Mini Unix,Wollongong,Interdata|Interdata;Unix/TS 3.0,PWB 2.0,7th Edition';
   document.getElementById('one').placeholder=aplace;
   // two
   aplace='" . str_replace("\n", "' + String.fromCharCode(10) + '",$abl[2]) . "';   //'7th Edition;8th Edition,32V,V7M,Ultrix-11,Xenix,UniPlus+|V7M;Ultrix-11';
   document.getElementById('two').placeholder=aplace;
   // three
   aplace='" . str_replace("\n", "' + String.fromCharCode(10) + '",$abl[3]) . "';   //'8th Edition;9th Edition|1 BSD;2 BSD|2 BSD;2.8 BSD|2.8 BSD;Ultrix-11,2.9 BSD|32V;3 BSD|3 BSD;4 BSD|4 BSD;4.1 BSD|4.1 BSD;4.2 BSD|4.2 BSD;4.3 BSD,Ultrix-32|PWB 1.0;PWB 1.2,USG 1.0|PWB 1.2;PWB 2.0|USG 1.0;CB Unix 1,USG 2.0|CB Unix 1;CB Unix 2|CB Unix 2;CB Unix 3|CB Unix 3;Unix/TS++,PDP-11 Sys V|USG 2.0;USG 3.0|USG 3.0;Unix/TS 3.0|PWB 2.0;Unix/TS 3.0|Unix/TS 1.0;Unix/TS 3.0|Unix/TS 3.0;TS 4.0|Unix/TS++;TS 4.0|CB Unix 3;TS 4.0|TS 4.0;System V.0|System V.0;System V.2|System V.2;System V.3';
   document.getElementById('three').placeholder=aplace;
   
   var asize=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('fsize=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('fsize=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (asize != '') { document.getElementById('fsize').value=asize; } else if ('" . $fsize . "' != '') {  document.getElementById('fsize').value='" . $fsize . "';   } 
   var ashape=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('shape=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('shape=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (ashape != '') { document.getElementById('shape').value=ashape; } else if ('" . $shape . "' != '') {  document.getElementById('shape').value='" . $shape . "';   } 
   var acol=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('back=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('back=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (acol != '') { if (('' + acol.length) == '6') { document.getElementById('back').value='#' + acol; } else { document.getElementById('back').value='' + acol;   }    }
   var amode=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('mode=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('mode=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (amode != '') { document.getElementById('mode').value=amode;   }
   var atitle=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('title=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('title=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (atitle != '') { document.getElementById('ititle').value=atitle;   }
   var aone=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('one=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('one=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (aone != '') { document.getElementById('plus').title='Smaller';  document.getElementById('minus').style.cursor='Pointer'; document.getElementById('minus').style.textDecoration='underline';  document.getElementById('plus').title='Bigger';  document.getElementById('plus').style.cursor='Pointer'; document.getElementById('plus').style.textDecoration='underline';  document.getElementById('plus').innerHTML='+';  while (aone.indexOf(String.fromCharCode(9)) != -1) { aone=aone.replace(String.fromCharCode(9),'+');  }  document.getElementById('one').value=aone;   document.getElementById('none').value=aone;   }
   var atwo=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('two=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('two=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (atwo != '') {  while (atwo.indexOf(String.fromCharCode(9)) != -1) { atwo=atwo.replace(String.fromCharCode(9),'+');  } document.getElementById('two').value=atwo;   document.getElementById('ntwo').value=atwo;   }
   var athree=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('three=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('three=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (athree != '') { while (athree.indexOf(String.fromCharCode(9)) != -1) { athree=athree.replace(String.fromCharCode(9),'+');  }  document.getElementById('three').value=athree;   document.getElementById('nthree').value=athree;   }
   var afmt=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('fmt=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('fmt=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : 'svg';
   if (afmt != '' && document.getElementById('one').value != '') { document.getElementById('fmt').value=afmt;   }
   if (('' + location.hash).indexOf('title=') != -1 && atitle.trim() != '' && aone.trim() != '') {
     animbord(); //document.getElementById('mysub').style.border='3px dotted green';
     setTimeout(function(){ document.getElementById('mysub').click(); }, 2000);
   }
  }
 
function deleteAVal(goodname, aparticularvalue) {
 if (window.localStorage && goodname.indexOf('saved_colour_wheel_') == 0) {
      if (('' + localStorage.getItem(goodname)).replace(/^undefined/g,'').replace(/^null/g,'') != '') {
        if (aparticularvalue == '') {
        localStorage.removeItem(goodname);
        } else {
        if (aparticularvalue.replace('HTTP','http').toLowerCase() == ('' + localStorage.getItem(goodname)).toLowerCase()) {
        localStorage.removeItem(goodname);
        }
        }
      }
 }
}

function setAVal(cName, cVal) {
 if (cName.indexOf('saved_colour_wheel_') == 0) {
   if (window.localStorage) {
    localStorage.setItem(cName, encodeURIComponent(cVal));
    cookieAVal('saved_colour_wheel_', true);
    return ' ';
   }
   return '';
 }
 return '';
}


function gotothis(inu) {
  if (inu.trim() != '') {
   if (inu.indexOf('HttP') == 0) {
     var toe=null;
     if (document.getElementById('sells').innerHTML.indexOf(inu + '\">') != -1) {
      toe=prompt('Please enter email address or SMS number to share ' + document.getElementById('sells').innerHTML.split(inu + '\">')[1].split('<')[0].replace('Email or SMS ','') + ' with.', '');
     } else {
      toe=prompt('Please enter email address or SMS number to share with.', '');
     }
     if (toe == null) { toe=''; }
     if (toe.indexOf('@') != -1) {
        if (document.getElementById('sells').innerHTML.indexOf(inu + '\">') != -1) {
          document.getElementById('myaemailsms').href='mailto:' + toe.trim() + '?subject=' + encodeURIComponent(document.getElementById('sells').innerHTML.split(inu + '\">')[1].split('<')[0].replace('Email or SMS ','')) + '&body=' + encodeURIComponent(inu.replace('HttP','http').split('#')[0].replace(/\-/g,'').replace('doctestoutput','doctest-output'));
          document.getElementById('myaemailsms').click();
        } else {
          document.getElementById('myaemailsms').href='mailto:' + toe.trim() + '?subject=' + encodeURIComponent('Colour Wheel') + '&body=' + encodeURIComponent(inu.replace('HttP','http').split('#')[0].replace(/\-/g,'').replace('doctestoutput','doctest-output'));
          document.getElementById('myaemailsms').click();
        }
     } else if (toe.trim() != '') {
        if (toe.trim().replace(/0/g,'').replace(/1/g,'').replace(/2/g,'').replace(/3/g,'').replace(/4/g,'').replace(/5/g,'').replace(/6/g,'').replace(/7/g,'').replace(/8/g,'').replace(/9/g,'') == '') {
          document.getElementById('myaemailsms').href='sms:' + toe.trim() + '&body=' + encodeURIComponent(inu.replace('HttP','http').split('#')[0].replace(/\-/g,'').replace('doctestoutput','doctest-output'));
          document.getElementById('myaemailsms').click();
        }
     }
     document.getElementById('sells').value='';
   } else if (inu.indexOf('HTTP') == 0) {
     //alert('2:' + inu);
     if (inu.indexOf('#saved_colour_wheel_') != -1) {
     //alert('22:' + inu.split('#')[eval(-1 + inu.split('#').length)]);
       deleteAVal(inu.split('#')[eval(-1 + inu.split('#').length)], encodeURIComponent(inu.replace('#' + inu.split('#')[eval(-1 + inu.split('#').length)], '').replace('HTTP','http')));
     //alert('222:' + inu.split('#')[eval(-1 + inu.split('#').length)]);
       cookieAVal('saved_colour_wheel_', true);
     //alert('2222:' + inu.split('#')[eval(-1 + inu.split('#').length)]);
     }
   } else {
     //woo=window.open(inu, '_blank', 'top=50,left=50,width=800,height=800');
     woo=window.open(inu.replace(/\-/g,'').replace('doctestoutput','doctest-output').replace('http:','').replace('https:',''), '_blank', 'top=50,left=50,width=800,height=800');
   }
  }
}

function rework(what) {
  var outw=what;
  if (what.toLowerCase().indexOf('doctest output ') != -1 && what.toLowerCase().indexOf('.gv.') != -1) {
    outw=what.toLowerCase().split('doctest output ')[1].split('.gv.')[0];
    var outwds=outw.split(' ');
    outw=outwds[0].substring(0,1).toUpperCase() + (outwds[0] + ' ').substring(1).toLowerCase().trim();
    for (var io=1; io<outwds.length; io++) {
      outw+=' ' + outwds[io].substring(0,1).toUpperCase() + (outwds[io] + ' ').substring(1).toLowerCase().trim();
    }
  }
  return outw;
}

function cookieAVal(cName, selize) {
 var key=null;
 if (selize && window.localStorage) {
  lssel=' ';
  for (var i=0; i<localStorage.length; i++) { // thanks to https://stackoverflow.com/questions/41271092/how-to-loop-through-localstorage-values
   key = localStorage.key(i);
   if (('' + key).indexOf(cName) == 0) {
     if (lssel.trim() == '') {
       lssel='<select id=sells onchange=gotothis(this.value);><option value=\"\">Recallable Colour Wheel below ...</option></select>';
     }
     lssel=lssel.replace('</select>', '<option value=\"' + decodeURIComponent(localStorage.getItem('' + key)) + '\">' + rework(('' + key).substring(eval('' + cName.length)).replace(/\_/g,' ').replace(/\-/g,' ')) + '</option>' + '<option value=\"' + decodeURIComponent(localStorage.getItem('' + key).replace('http','HTTP')) + '#saved_colour_wheel_' + ('' + key).substring(eval('' + cName.length)) + '\">Remove ' + rework(('' + key).substring(eval('' + cName.length)).replace(/\_/g,' ').replace(/\-/g,' ')) + '</option>' + '<option value=\"' + decodeURIComponent(localStorage.getItem('' + key).replace('http','HttP')) + '#saved_colour_wheel_' + ('' + key).substring(eval('' + cName.length)) + '\">Email or SMS ' + rework(('' + key).substring(eval('' + cName.length)).replace(/\_/g,' ').replace(/\-/g,' ')) + '</option>' + '</select>');
   }
  }
  if (lssel != '') {
   document.getElementById('ssel').innerHTML=lssel.trim();
  }
 }
 if (cName.indexOf('saved_colour_wheel_') == 0) {
   if (window.localStorage) {
    if (decodeURIComponent(('' + localStorage.getItem(cName)).replace(/^undefined/g,'').replace(/^null/g,'')) != '') {
     return decodeURIComponent(localStorage.getItem(cName));
    }
    if (decodeURIComponent(('' + sessionStorage.getItem(cName)).replace(/^undefined/g,'').replace(/^null/g,'')) != '') {
     return decodeURIComponent(sessionStorage.getItem(cName));
    }
   }
   return '';
 }
 return '';
}  
  
  function phv(tao) {
    if (tao.value == '') {
      tao.value=tao.placeholder;
    }
  }
  
  function various(indi) {
    var outdi=indi;
    return outdi;
  }
  
  function contentfix(inid) {
    document.getElementById('ititle').value=document.getElementById('ititle').value.replace(/\+/g,'-').replace(/\=/g,'-').replace(/\ /g,'-');
    //document.getElementById('one').value=document.getElementById('one').value.replace(/\+/g,'`');
    //document.getElementById('two').value=document.getElementById('two').value.replace(/\+/g,'`');
    //document.getElementById('three').value=document.getElementById('three').value.replace(/\+/g,'`');
    document.getElementById('none').value=various(document.getElementById('one').value.replace(/\+/g,String.fromCharCode(9)));
    document.getElementById('ntwo').value=various(document.getElementById('two').value.replace(/\+/g,String.fromCharCode(9)));
    document.getElementById('nthree').value=various(document.getElementById('three').value.replace(/\+/g,String.fromCharCode(9)));
    document.getElementById('mysub').style.border='3px dotted green';
    return inid;
  }


function emailit(inais) {
   event.stopPropagation();
   var em=null;
   window.focus(); 
   em=prompt('Please enter email address to send output ' + document.getElementById('fmt').value + ' URL link to.  ', '');
   if (em == null) { em=''; }
   if (em.indexOf('@') != -1) {
    document.getElementById('ititle').value=document.getElementById('ititle').value.replace(/\+/g,'-').replace(/\=/g,'-').replace(/\ /g,'-');
    document.getElementById('none').value=various(document.getElementById('one').value.replace(/\+/g,String.fromCharCode(9)));
    document.getElementById('ntwo').value=various(document.getElementById('two').value.replace(/\+/g,String.fromCharCode(9)));
    document.getElementById('nthree').value=various(document.getElementById('three').value.replace(/\+/g,String.fromCharCode(9)));
    //alert(document.getElementById('addimg').value);
     em+='?subject=' + document.getElementById('newablzero').value + '&body=' + encodeURIComponent( (document.URL.split('?')[0].split('#')[0] + '?rand=' + Math.floor(Math.random() * 19897865) + '#title=' + encodeURIComponent(document.getElementById('ititle').value) + '#back=' + encodeURIComponent(document.getElementById('back').value.replace('#','')) + '#fsize=' + encodeURIComponent(document.getElementById('fsize').value) + '#shape=' + encodeURIComponent(document.getElementById('shape').value) + '#mode=' + encodeURIComponent(document.getElementById('mode').value) + '#fmt=' + encodeURIComponent(document.getElementById('fmt').value) + '#one=' + encodeURIComponent(document.getElementById('none').value) + '#two=' + encodeURIComponent(document.getElementById('ntwo').value) + '#three=' + encodeURIComponent(document.getElementById('nthree').value) + '#addimg=' + encodeURIComponent(document.getElementById('addimg').value)).replace('#fmt=svg#one=#','#fmt=pdf#one=#')   );
     document.getElementById('dimap').innerHTML='<a style=display:none; id=theaemail target=_blank href=\"mailto:' + em + '\">Email</a>';
     document.getElementById('theaemail').click();
   } 
   return false;
}

function svghost(svgheo, imgc) {
 if (9 == 8) {
 if (gzero) {
  gzero.innerHTML+=\"<image x='0' y='0' href='/camel.png'></image>\";  
 } else {
  svgheo.innerHTML+=\"<image x='0' y='0' href='/camel.png'></image>\"; 
 }
 }
}

function animbord() {
  var bcolsare=['green','#F0F8FF','#F0FFFF','#F0F0E0','#F0FFF0','#FFFFF0','#FFF0E0','#FFFFE0','#F0FFF0','#FFFFFF','#F0F0F0','#F0F7FF','#FFF8F0','#FFF0F0','#E0FFFF','#FFFFE0'];
  document.getElementById('mysub').style.border='3px dotted ' + bcolsare[lastj];
  lastj++;
  if (lastj >= eval('' + bcolsare.length)) { lastj=0; }
  setTimeout(animbord, 200);
}

function psvgit() {
  svgit(lastsvgeo, lastimgc);
}

function hsvtorgb(hsbh, hsbs, hsbb) { // thanks to https://stackoverflow.com/questions/17242144/javascript-convert-hsb-hsv-color-to-rgb-accurately
    var rgb = { };
    var h = Math.round(hsbh * 255);
    var s = Math.round(hsb.s * 255 / 100);
    var v = Math.round(hsb.b * 255 / 100);

        if (s == 0) {

        rgb.r = rgb.g = rgb.b = v;
        } else {
        var t1 = v;
        var t2 = (255 - s) * v / 255;
        var t3 = (t1 - t2) * (h % 60) / 60;

            if (h == 360) h = 0;

                if (h < 60) { rgb.r = t1; rgb.b = t2; rgb.g = t2 + t3 }
                else if (h < 120) { rgb.g = t1; rgb.b = t2; rgb.r = t1 - t3 }
                else if (h < 180) { rgb.g = t1; rgb.r = t2; rgb.b = t2 + t3 }
                else if (h < 240) { rgb.b = t1; rgb.r = t2; rgb.g = t1 - t3 }
                else if (h < 300) { rgb.b = t1; rgb.g = t2; rgb.r = t2 + t3 }
                else if (h < 360) { rgb.r = t1; rgb.g = t2; rgb.b = t1 - t3 }
                else { rgb.r = 0; rgb.g = 0; rgb.b = 0 }
        }

    return 'rgb(' + Math.round(rgb.r) + ',' + Math.round(rgb.g) + ',' + Math.round(rgb.b) + ')';
}

function svgit(svgeo, imgc) {
  var pres='';
  lastsvgeo=svgeo;
  lastimgc=imgc;
  if (('' + svgeo.outerHTML).indexOf('<text') == 0) {
   if (((' ' + svgeo.innerHTML.toHtmlEntities()).split('&')[0].split('(')[0].split('<')[0]).replace('%20',' ').replace('+',' ').indexOf(' ') != -1 && lasturl != '//thatsthem.com/name/' + encodeURIComponent(svgeo.innerHTML.toHtmlEntities().split('&')[0].split('(')[0].split('<')[0])) {    
     lasturl='//thatsthem.com/name/' + encodeURIComponent(svgeo.innerHTML.toHtmlEntities().split('&')[0].split('(')[0].split('<')[0])
     window.open('//www.google.com/search?sca_esv=8957a51bd870705f&sxsrf=ADLYWIL9Z95Y2XILCVHy1Ep_vA8UA0HVLw:1728014294038&q=' + encodeURIComponent(svgeo.innerHTML) + '&udm=2&fbs=AEQNm0CrHVBV9axs7YmgJiq-TjYcvrKLYvLdNLLD2b8MCfaxte6rE3yH_shvJRqV-Iqr8JJvO9luGxMyf8tABHRE_ER5WVi_ouuYD0ZGCgonp8RpBmOUpTB-X6dVFbJc8KMdvjlHxs0_OJiYCY4-Y60oHTMiC_1a9mkGkMIYHO4XqP68ipa4P5rJaQCtA4WPne6f0aAKhdyAMTPbTsWJEdFYpNvI5RzOgw&sa=X&ved=2ahUKEwjCwabx6vOIAxWJ7DQHHQIOJBoQtKgLegQIDRAB&biw=1433&bih=739&dpr=2', '_blank', 'top=100,left=' + eval(-600 + screen.width) + ',width=600,height=600');
     window.focus();
     uselast=true; 
     setTimeout(psvgit, 2000);
     return '';
   }  
   lasttext=svgeo;
   if (lastiurl.indexOf(\"<image x='\" + svgeo.getAttribute('x') + \"' y='\" + svgeo.getAttribute('y')) == -1 && (imgc == 'ask' || lasturl == '//thatsthem.com/name/' + encodeURIComponent(svgeo.innerHTML.toHtmlEntities().split('&')[0].split('(')[0].split('<')[0]))) {
    if (('' + svgeo.getAttribute('width')).indexOf('null') != -1) {
    lastiurl=\"<image x='\" + eval(-20 + eval('' + svgeo.getAttribute('x'))) + \"' y='\" + eval(-20 + eval('' + svgeo.getAttribute('y'))) + \"' width='45' height='45' opacity='\" + zerodotsix + \"' href=''></image>\"; 
    } else {
    lastiurl=\"<image x='\" + svgeo.getAttribute('x') + \"' y='\" + svgeo.getAttribute('y') + \"' opacity='\" + zerodotsix + \"' width='\" + svgeo.getAttribute('width') + \"' height='\" + svgeo.getAttribute('height') + \"' href=''></image>\"; 
    }
    window.focus();
    pres=null;
    try { 
    if (lastp.indexOf('Regarding ' + svgeo.innerHTML + ' ') == -1) {
    //alert(szero.innerHTML.split(svgeo.innerHTML + '</title>')[1].substring(0,300));
    if (bconto) { document.getElementById('hidecol').value=szero.innerHTML.split('>' + svgeo.innerHTML + '</title>')[1].split(' fill=\"')[1].split('\"')[0]; bconto.setlhifto(szero.innerHTML.split(svgeo.innerHTML + '</title>')[1].split(' fill=\"')[1].split('\"')[0]); }
    //pres=prompt('Regarding ' + svgeo.innerHTML + ' please see the whole node ' + svgeo.outerHTML.substring(0,1) + ' .+. ' + szero.innerHTML.split(svgeo.innerHTML + '</title>')[1].split(' fill=\"')[1].split('\"')[0] + '', '');
    pres='';
    }
    } catch(exc) {
    console.log('error');
    }
    if (pres == null) { console.log('err'); pres=''; if (uselast) { setTimeout(psvgit, 2000);  } } else { uselast=false;  lastp='Regarding ' + svgeo.innerHTML + ' please enter an optional image URL';  }
    if (pres != '') {
      if (pres.indexOf('#') == -1) { zerodotsix='0.6'; } else if (pres.indexOf('#') != -1) { zerodotsix=pres.split('#')[1]; pres=pres.split('#')[0].trim();  if ((zerodotsix + 'z').substring(0,1) < '0' || (zerodotsix + 'z').substring(0,1) > '9') { zerodotsix='0.6';  } }
      if (pres != '') {
      uselast=false;
      lastp='Regarding ' + svgeo.innerHTML + ' please see the whole node ' + svgeo.outerHTML + '';
      lastiurl=lastiurl.replace(\" href=''\", \" href='\" + pres + \"'\");
      if (gzero) {
       //alert(\"<image x='0' y='0' width='45' height='45' href=\" + lastiurl.split('href=')[1]);
       //gzero.innerHTML+=\"<image x='0' y='0' width='45' height='45' href=\" + lastiurl.split('href=')[1]; //.replace(/\-/g,'');  
       //if (document.getElementById('addimg').value == '') {
       //  document.getElementById('addimg').value=' gzero.innerHTML+=\"\"; ';
       //} 
       document.getElementById('addimg').value+=lastiurl;
       gzero.innerHTML+=lastiurl;
      }
      }      
    }
   }
   if (lasturl != '//thatsthem.com/name/' + encodeURIComponent(svgeo.innerHTML.toHtmlEntities().split('&')[0].split('(')[0].split('<')[0])) {
    lasturl='//thatsthem.com/name/' + encodeURIComponent(svgeo.innerHTML.toHtmlEntities().split('&')[0].split('(')[0].split('<')[0])
    if (('' + svgeo.innerHTML.toHtmlEntities().split('&')[0].split('(')[0].split('<')[0]).replace('%20',' ').replace('+',' ').indexOf(' ') == -1) {
    if (1 == 2) { setTimeout(function(){ window.open(lasturl, '_blank', 'top=100,left=' + eval(-600 + screen.width) + ',width=600,height=600'); }, 3000); }
    } else {
    lasturl+=' ';
    }
    //svgeo.innerHTML+='</text><text>+';
   }
  }
  if (1 == 2) {
   svgeo.innerHTML+='+';
   alert('' + svgeo.outerHTML);
  }
}

function naz(intvo) {
  var intv=intvo.value;
  if (intv.replace(' ','-').replace('_','-').indexOf('-') == -1 && intv.trim() != '') {
    intvo.value='a-' + intv;
    intv=intvo.value;
  }
  var retval='My%20%Colour%20Wheel';
  var jntv=intv.replace(/\ /g,'-').replace(/\_/g,'-');
  var jst=jntv.split('-');
  if (jntv.indexOf('heel') != -1) {
    retval=jst[0].substring(0,1).toUpperCase() + jst[0].substring(1).toLowerCase() + ' ';
    for (var ij=1; ij<jst.length; ij++) {
      retval+=jst[ij].substring(0,1).toUpperCase() + jst[ij].substring(1).toLowerCase() + ' ';
    }
    retval=encodeURIComponent(retval.trim());
  }
  document.getElementById('newablzero').value=retval;
  if (document.getElementById('addimg').value != '') {
  document.getElementById('ablnewzero').value=document.getElementById('addimg').value;
  }
  document.getElementById('mybutsave').style.display='inline-block';
  return retval;
}

function smsit(inais) {
   event.stopPropagation();
   var em=null;
   window.focus(); 
   em=prompt('Please enter SMS number to send output ' + document.getElementById('fmt').value + ' URL link to.', '');
   if (em == null) { em=''; }
   if (em.trim() != '') {
     if (em.trim() != '') {
    document.getElementById('ititle').value=document.getElementById('ititle').value.replace(/\+/g,'-').replace(/\=/g,'-').replace(/\ /g,'-');
    document.getElementById('none').value=various(document.getElementById('one').value.replace(/\+/g,String.fromCharCode(9)));
    document.getElementById('ntwo').value=various(document.getElementById('two').value.replace(/\+/g,String.fromCharCode(9)));
    document.getElementById('nthree').value=various(document.getElementById('three').value.replace(/\+/g,String.fromCharCode(9)));
     em+='&body=' + encodeURIComponent( (document.URL.split('?')[0].split('#')[0] + '?rand=' + Math.floor(Math.random() * 19897865) + '#title=' + encodeURIComponent(document.getElementById('ititle').value) + '#back=' + encodeURIComponent(document.getElementById('back').value.replace('#','')) + '#fsize=' + encodeURIComponent(document.getElementById('fsize').value) + '#shape=' + encodeURIComponent(document.getElementById('shape').value) + '#mode=' + encodeURIComponent(document.getElementById('mode').value) + '#fmt=' + encodeURIComponent(document.getElementById('fmt').value) + '#one=' + encodeURIComponent(document.getElementById('none').value) + '#two=' + encodeURIComponent(document.getElementById('ntwo').value) + '#three=' + encodeURIComponent(document.getElementById('nthree').value) + '#addimg=' + encodeURIComponent(document.getElementById('addimg').value)).replace('#fmt=svg#one=#','#fmt=pdf#one=#')    );
     document.getElementById('dimap').innerHTML='<a style=display:none; id=theasms target=_blank href=\"sms:' + em + '\">SMS</a>';
     if (!document.getElementById('theasms') && document.getElementById('psms')) {
     document.getElementById('psms').click();
     } else {
     document.getElementById('theasms').click();
     }
     }
   }
   return false;
}

function sz(inum) {
  var uni='px';
  if (szero) {
    if (('' + szero.getAttribute('width')).indexOf('pt') != -1) { uni='pt'; } else if (('' + szero.getAttribute('width')).indexOf('%') != -1) { uni='%'; }
    szero.setAttribute('width', '' + ('' + eval(eval('' + szero.getAttribute('width').split(uni)[0])) * eval('' + inum)) + uni);
    szero.setAttribute('height', '' + ('' + eval(eval('' + szero.getAttribute('height').split(uni)[0])) * eval('' + inum)) + uni);
  }
}

function domore(hm) {
  var rectis=document.getElementById('myif').getBoundingClientRect();
  if (('' + hm) == '1') {
    document.getElementById('rtd').style.width='20%';
    document.getElementById('myif').style.width='' + eval(eval('' + rectis.width) * sz(1.1)) + 'px';
    document.getElementById('myif').style.height='' + eval(eval('' + rectis.height) * 1.1) + 'px';
  } else if (('' + hm) == '-1') {
    document.getElementById('rtd').style.width='50%';
    document.getElementById('myif').style.width='' + eval(eval('' + rectis.width) * sz(0.9)) + 'px';
    document.getElementById('myif').style.height='' + eval(eval('' + rectis.height) * 0.9) + 'px';
  } else if (('' + hm) == '-2') {
    document.getElementById('rtd').style.width='50%';
    document.getElementById('myif').style.width='' + eval(eval('' + rectis.width) * sz(0.8)) + 'px';
    document.getElementById('myif').style.height='' + eval(eval('' + rectis.height) * 0.8) + 'px';
  } else {
    document.getElementById('rtd').style.width='20%';
    document.getElementById('myif').style.width='' + eval(eval('' + rectis.width) * sz(1.2)) + 'px';
    document.getElementById('myif').style.height='' + eval(eval('' + rectis.height) * 1.2) + 'px';
  }
}

function prechecksvg() {
   checksvg(lastwoo);
}

function checki(iois) {
    bconto = (iois.contentWindow || iois.contentDocument);
}

function checksvg(iiois) {
  var gs=[];
  var iois=iiois;
  if (lastwoo) {
    iois=lastwoo.document.childNodes[0]; //.getSVGDocument();
    console.log('lAstwoo ' + lastwoo);
  } else if (('' + iiois.src).toLowerCase().indexOf('.svg') == -1 && lastwoo != null) {
    iois=lastwoo.document.childNodes[0]; //.getSVGDocument();
    console.log('lastwoo ' + lastwoo);
  }
  if (iois != null) { // check out window.svgDocument
    console.log('lastwoo2');
    var aconto = (iois.contentWindow || iois.contentDocument);
    console.log('lastwoo3a ' + iois.document);
    console.log('lastwoo3 ' + aconto);
    if (aconto != null) {
       //alert(1);
    console.log('lastwoo4 ' + aconto);
       if (aconto.document) {  
    console.log('lastwoo5 ' + aconto);
         aconto = aconto.document; 
         gs=aconto.getElementsByTagName('g'); 
         if (eval('' + gs.length) > 0) {
           gzero=gs[0];
           for (var sd=0; sd<gs.length; sd++) {
            if (iois == lastwoo) {
              gs[sd].onclick=function(event){ window.opener.svgit(event.target, '');  };
              gs[sd].ondblclick=function(event){ window.opener.svgit(event.target, 'ask');  };
            } else {
              gs[sd].onclick=function(event){ parent.svgit(event.target, '');  };
              gs[sd].ondblclick=function(event){ parent.svgit(event.target, 'ask');  };
            }
           }
         }
         gs=aconto.getElementsByTagName('svg'); 
         if (eval('' + gs.length) > 0) {
           szero=gs[0];
           for (var sd=0; sd<gs.length; sd++) {
            if (iois == lastwoo) {
              gs[sd].onclick=function(event){ window.opener.svghost(event.target, '');  };
            } else {
              gs[sd].onclick=function(event){ parent.svghost(event.target, '');  };
            }
           }
         }
         console.log(gs.length); 
         console.log(aconto); 
       }
       //alert(11);
       if (aconto.body != null) {
         iois=iois;
         //alert('yay!');
       }
    }
    if (gzero) {
      gzero=gzero;
      " . (strlen($addimg) == 0 ? $addimg : ' gzero.innerHTML+="' . $addimg . '"') . "
      if (aimg != '') { eval(' gzero.innerHTML+=\"' + aimg + '\"');  }
    }  
  }
}

</scr" . "ipt>
<style>
  #ltd { background-color: #e0f0d0; }
  body { background-color: #f0d0e0; }
  #myif { background-color: #d0e0f0; }
  textarea { 
     width: 99%;
     height: 60px;
  }
  #back { display: none; }
  td { vertical-align: top; }
</style>
</head>
<body  title='Click on a GraphViz SVG node, and if the associated circle shape has a name a Google search window will open and associated colour available to draw with on the canvas below. ' onload=ph();>
<h1 id=myh1>Trying out Dot GraphViz hosted in PHP " . $plus . " Colour Wheel <span id=ssel></span> <a id=pemail title=Email class=share  onclick=emailit(this); style=text-decoration:none;cursor:pointer;>&#128231;</a>&nbsp;<a id=psms title=SMS class=share  onclick=smsit(this); style=text-decoration:none;cursor:pointer;>&#128223;</a><sup id=\"supgws\" style=\"vertical-align: top;\">&nbsp;<details title=\"Open to reveal other GraphViz web applications you can navigate to.\" style=\"display: inline-block;\" id=\"gvdtls\"><summary style=\"color: #e162bf;list-style-type:'\\01F4C8'\"></summary><select size=\"8\" id=\"gvwapps\" onchange=\"if (this.value != '') { this.style.cursor='progress'; location.href=this.value; }\"><option value=\"\">Optionally select a GraphViz web application below ...</option><option value=\"/dot_colour_wheel.php\">Colour Wheel</option><option value=\"/family_tree.php\">Family Tree</option><option value=\"/hierarchy_organization.php\">Organization Hierarchy</option><option value=\"/html_table_basis.php\">HTML Table</option><option value=\"/subgraph_example.php\">Triangular Relationship</option><option value=\"/twopi_vs_circo_example.php\">Circular Layout</option><option value=\"/venn_diagram_basis.php\">Venn Diagram</option></select></details></sup></h1>
<h3>RJM Programming " . $minus . " October, 2024</h3>
<h4>Thanks to <a target=_blank title='Dot GraphViz package information' href='//graphviz.org/Gallery/neato/color_wheel.html'>https://graphviz.org/Gallery/neato/color_wheel.html</a></h4>
<table cellpadding=2 cellspacing=2 style=width:98%;><tr><td id=ltd>
<" . $outel . " onload='checksvg(this);' id=myif style='width:95%;height:500px;' type=application/" . $fmt . " src='/doctest-output" . DIRECTORY_SEPARATOR . $newabl[0] . $gv . $fmt . "?rand=" . rand(13456,6789056) . "'></" . explode(' ',$outel)[0] . ">
</td><td title=\"Double click for new window just with the GraphViz graphics showing.\" ondblclick=\"if (szero) {  lastwoo=window.open('','_blank','top=200,left=200,width=700,height=600'); lastwoo.document.write(szero.outerHTML);   lastwoo.document.title=(document.getElementById('ititle').value != '' ? document.getElementById('ititle').value : document.getElementById('ititle').placeholder);   } else { lastwoo=window.open(top.document.URL.split('//')[0].replace('https:','').replace('http:','') + '//www.rjmprogramming.com.au/doctest-output' + document.getElementById('myif').src.split('doctest-output')[1],'_blank','top=200,left=200,width=700,height=600');  setTimeout(prechecksvg, 20000); } \" id=rtd style=background-color:#f0f0f0;width:50%;>
<form id=myform onsubmit=\"if (document.getElementById('ititle').value.replace('colour-wheel','').trim() == '') { alert('Please enter a different title, then click/tap Draw again.');  return false; } document.body.style.cursor=contentfix('progress'); return true;\" method=POST action=./dot_colour_wheel.php>
<p>Title ...</p><br>
<input onblur=naz(this); type=text id=ititle name=title placeholder='" . $newabl[0] . "' value=''></input>&nbsp;<select id=fmt name=fmt><option value=svg>SVG</option><option value=pdf>PDF</option><option value=png>PNG</option><option value=jpg>JPEG</option><option value=html>HTML</option></select>&nbsp;<input type=color name=back id=back title='rgb(174,216,232)' value='" . $bbcol . "'></input>&nbsp;<input type=text id=fsize name=fsize placeholder='10,20' title='Two representative Font sizes you can change with your own set' value=''></input>&nbsp;<select id=shape name=shape><option value=''>Circle</option>" . $nondefshapes . "</select>&nbsp;<select id=mode name=mode><option value=Graph>graph</option><option value=Digraph disabled>digraph</option></select><br><br>
<p>Colour Wheel Names ...</p><br>
<textarea style=display:none; ondblclick=\"event.stopPropagation(); phv(this);\" title='Old=New comma separated list one. Double click makes suggestion the real value' placeholder='' data-contenteditable=true id=none name=one value=''>" . str_replace("\t","+",urldecode($newabl[1])) . "</textarea>
<textarea style=display:none; ondblclick=\"event.stopPropagation(); phv(this);\" title='Old=New comma separated list two. Double click makes suggestion the real value' placeholder='' data-contenteditable=true id=ntwo name=two value=''>" . str_replace("\t","+",urldecode($newabl[2])) . "</textarea>
<textarea style=display:none; ondblclick=\"event.stopPropagation(); phv(this);\" title='Old=New comma separated list three. Double click makes suggestion the real value' placeholder='' data-contenteditable=true id=nthree name=three value=''>" . str_replace("\t","+",urldecode($newabl[3])) . "</textarea>
<textarea ondblclick=\"event.stopPropagation(); phv(this);\" title='Old=New comma separated list one. Double click makes suggestion the real value' placeholder='' data-name=one id=one data-contenteditable=true value=''>" . str_replace("\t","+",urldecode($newabl[1])) . "</textarea><br>
<textarea ondblclick=\"event.stopPropagation(); phv(this);\" title='Old=New comma separated list two. Double click makes suggestion the real value' placeholder='' data-name=two id=two data-contenteditable=true value=''>" . str_replace("\t","+",urldecode($newabl[2])) . "</textarea><br>
<textarea ondblclick=\"event.stopPropagation(); phv(this);\" title='Old=New comma separated list three. Double click makes suggestion the real value' placeholder='' data-name=three id=three data-contenteditable=true value=''>" . str_replace("\t","+",urldecode($newabl[3])) . "</textarea><br><br>
<input type=hidden id=addimg name=addimg value=\"" . $addimg . "\"></input>
<input id=mysub type=submit value=Draw style=background-color:pink;></input>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input onclick=\"document.getElementById('myformsub').click();\" style=background-color:yellow;display:" . $none . "; id=mybutsave type=button value=Save style=background-color:yellow;></input>
</form>
</td></tr></table>
<details id=detailsuof open><summary>Canvas Drawing With Clicked Colour to Top and Left As Revealed Below ...</summary><iframe onload=checki(this); style=width:100%;height:800px; id=ifuos name=ifuos src='/HTMLCSS/user_of_signature_signature.htm?fcol=&ws=" . rand(0,1267564) . "&xc=" . $tw . "'></iframe></details>
<form id=myformsave style=display:none; action=./dot_colour_wheel.php method=POST target=myifsave><input type=hidden id=ablnewzero name=newablzero value=\"" . $addimg . "\"></input><input type=hidden id=infile name=infile value='doctest-output" . DIRECTORY_SEPARATOR . $newabl[0] . $gv . $fmt . "'></input><input type=submit id=myformsub style=display:none; value=Submit></input></form>
<a target=_blank id=myaemailsms href='/About_Us.html' style=display:none;>Email/SMS</a><iframe style=display:none; id=myifsave name=myifsave src=/About_Us.html></iframe><div id=dimap></div>
<input type=hidden id=newablzero value='" . $newablzero . "'></input>
<input type=hidden id=hidecol value=''></input>
</body>
</html>";
  } else {
     echo "<html>
<head>
<title>Trying out Dot GraphViz hosted in PHP - RJM Programming - October, 2024 - Colour Wheel</title>
<scr" . "ipt type=text/javascript>
 var lasturl='', lasttext=null, gzero=null, lastx=0, lasty=0, lastw=0, lasth=0, lastp='', lastwoo=null, lastj=0, lssel='', zerodotsix='0.6', bconto=null, lastiurl='', szero=null, aimg='', lastimgc='', lastsvggeo=null, uselast=false;

String.prototype.toHtmlEntities = function() {
  return this.replace(/./gm, function(s) {
    return (s.match(/[a-z0-9\s]+/i)) ? s : '&#' + s.charCodeAt(0) + ';';
  });
};

 function plusdata(aig) {
   var outig=aig, dlm='\"';
   var outgs=aig.split('data:');
   if (eval('' + outgs.length) > 1) {
     outig=outgs[0];
     dlm=outig.slice(-1);
     for (var iop=1; iop<outgs.length; iop++) {
       //if (outgs[iop].split(dlm)[0] != outgs[iop].split(dlm)[0].replace(/\ /g,'+').replace(/\%20/g,'+')) {
       //  alert('found');
       //}
       outig+='data:' + outgs[iop].replace(outgs[iop].split(dlm)[0], outgs[iop].split(dlm)[0].replace(/\ /g,'+').replace(/\%20/g,'+'));
     }
   }
   if (outig != '') {
   document.getElementById('ablnewzero').value=outig;
   document.getElementById('mybutsave').style.display='inline-block';
   }
   return outig;
 }
 
 function ph() {
   var aplace='';
   
   setTimeout(function(){ location.href='#myh1'; }, 15000); 

   aimg=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('addimg=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('addimg=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (aimg != '') { document.getElementById('addimg').value=plusdata(aimg);  } 

   document.getElementById('myform').action=document.URL.split('?')[0].split('#')[0];

   cookieAVal('saved_colour_wheel_', true);
   
   // one
   aplace='" . $abl[0] . "';   //'5th Edition;6th Edition,PWB 1.0|6th Edition;LSX,1 BSD,Mini Unix,Wollongong,Interdata|Interdata;Unix/TS 3.0,PWB 2.0,7th Edition';
   document.getElementById('one').placeholder=aplace;
   // two
   aplace='" . $abl[1] . "';   //'7th Edition;8th Edition,32V,V7M,Ultrix-11,Xenix,UniPlus+|V7M;Ultrix-11';
   document.getElementById('two').placeholder=aplace;
   // three
   aplace='" . $abl[2] . "';   //'8th Edition;9th Edition|1 BSD;2 BSD|2 BSD;2.8 BSD|2.8 BSD;Ultrix-11,2.9 BSD|32V;3 BSD|3 BSD;4 BSD|4 BSD;4.1 BSD|4.1 BSD;4.2 BSD|4.2 BSD;4.3 BSD,Ultrix-32|PWB 1.0;PWB 1.2,USG 1.0|PWB 1.2;PWB 2.0|USG 1.0;CB Unix 1,USG 2.0|CB Unix 1;CB Unix 2|CB Unix 2;CB Unix 3|CB Unix 3;Unix/TS++,PDP-11 Sys V|USG 2.0;USG 3.0|USG 3.0;Unix/TS 3.0|PWB 2.0;Unix/TS 3.0|Unix/TS 1.0;Unix/TS 3.0|Unix/TS 3.0;TS 4.0|Unix/TS++;TS 4.0|CB Unix 3;TS 4.0|TS 4.0;System V.0|System V.0;System V.2|System V.2;System V.3';
   document.getElementById('three').placeholder=aplace;
   
   var asize=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('fsize=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('fsize=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (asize != '') { document.getElementById('fsize').value=asize; } else if ('" . $fsize . "' != '') {  document.getElementById('fsize').value='" . $fsize . "';   } 
   var ashape=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('shape=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('shape=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (ashape != '') { document.getElementById('shape').value=ashape; } else if ('" . $shape . "' != '') {  document.getElementById('shape').value='" . $shape . "';   } 
   var acol=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('back=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('back=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (acol != '') { if (('' + acol.length) == '6') { document.getElementById('back').value='#' + acol; } else { document.getElementById('back').value='' + acol;   }    }
   var amode=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('mode=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('mode=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (amode != '') { document.getElementById('mode').value=amode;   }
   var atitle=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('title=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('title=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (atitle != '') { document.getElementById('ititle').value=atitle;   }
   var aone=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('one=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('one=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (aone != '') { document.getElementById('plus').title='Smaller';  document.getElementById('minus').style.cursor='Pointer'; document.getElementById('minus').style.textDecoration='underline';  document.getElementById('plus').title='Bigger';  document.getElementById('plus').style.cursor='Pointer'; document.getElementById('plus').style.textDecoration='underline';  document.getElementById('plus').innerHTML='+';  while (aone.indexOf(String.fromCharCode(9)) != -1) { aone=aone.replace(String.fromCharCode(9),'+');  }  document.getElementById('one').value=aone;   document.getElementById('none').value=aone;   }
   var atwo=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('two=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('two=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (atwo != '') {  while (atwo.indexOf(String.fromCharCode(9)) != -1) { atwo=atwo.replace(String.fromCharCode(9),'+');  } document.getElementById('two').value=atwo;   document.getElementById('ntwo').value=atwo;   }
   var athree=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('three=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('three=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : '';
   if (athree != '') { while (athree.indexOf(String.fromCharCode(9)) != -1) { athree=athree.replace(String.fromCharCode(9),'+');  }  document.getElementById('three').value=athree;   document.getElementById('nthree').value=athree;   }
   var afmt=(location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('fmt=')[1] ? (decodeURIComponent((location.search + ('' + location.hash).replace(/^null/g,'').replace(/^undefined/g,'').replace(/^\#/g,'&')).split('fmt=')[1].split('&')[0].split('#')[0].split(encodeURIComponent('#'))[0])) : 'svg';
   if (afmt != '' && document.getElementById('one').value != '') { document.getElementById('fmt').value=afmt;   }
   if (('' + location.hash).indexOf('title=') != -1 && atitle.trim() != '' && aone.trim() != '') {
     animbord(); document.getElementById('mysub').style.border='3px dotted green';
     setTimeout(function(){ document.getElementById('mysub').click(); }, 2000);
   }
  }
  
  function phv(tao) {
    if (tao.value == '') {
      tao.value=tao.placeholder;
    }
  }
 
function deleteAVal(goodname, aparticularvalue) {
 if (window.localStorage && goodname.indexOf('saved_colour_wheel_') == 0) {
      if (('' + localStorage.getItem(goodname)).replace(/^undefined/g,'').replace(/^null/g,'') != '') {
        if (aparticularvalue == '') {
        localStorage.removeItem(goodname);
        } else {
        if (aparticularvalue.replace('HTTP','http').toLowerCase() == ('' + localStorage.getItem(goodname)).toLowerCase()) {
        localStorage.removeItem(goodname);
        }
        }
      }
 }
}

function setAVal(cName, cVal) {
 if (cName.indexOf('saved_colour_wheel_') == 0) {
   if (window.localStorage) {
    localStorage.setItem(cName, encodeURIComponent(cVal));
    cookieAVal('saved_colour_wheel_', true);
    return ' ';
   }
   return '';
 }
 return '';
}

function gotothis(inu) {
  if (inu.trim() != '') {
   if (inu.indexOf('HttP') == 0) {
     var toe=null;
     if (document.getElementById('sells').innerHTML.indexOf(inu + '\">') != -1) {
      toe=prompt('Please enter email address or SMS number to share ' + document.getElementById('sells').innerHTML.split(inu + '\">')[1].split('<')[0].replace('Email or SMS ','') + ' with.', '');
     } else {
      toe=prompt('Please enter email address or SMS number to share with.', '');
     }
     if (toe == null) { toe=''; }
     if (toe.indexOf('@') != -1) {
        if (document.getElementById('sells').innerHTML.indexOf(inu + '\">') != -1) {
          document.getElementById('myaemailsms').href='mailto:' + toe.trim() + '?subject=' + encodeURIComponent(document.getElementById('sells').innerHTML.split(inu + '\">')[1].split('<')[0].replace('Email or SMS ','')) + '&body=' + encodeURIComponent(inu.replace('HttP','http').split('#')[0].replace(/\-/g,'').replace('doctestoutput','doctest-output'));
          document.getElementById('myaemailsms').click();
        } else {
          document.getElementById('myaemailsms').href='mailto:' + toe.trim() + '?subject=' + encodeURIComponent('Colour Wheel') + '&body=' + encodeURIComponent(inu.replace('HttP','http').split('#')[0].replace(/\-/g,'').replace('doctestoutput','doctest-output'));
          document.getElementById('myaemailsms').click();
        }
     } else if (toe.trim() != '') {
        if (toe.trim().replace(/0/g,'').replace(/1/g,'').replace(/2/g,'').replace(/3/g,'').replace(/4/g,'').replace(/5/g,'').replace(/6/g,'').replace(/7/g,'').replace(/8/g,'').replace(/9/g,'') == '') {
          document.getElementById('myaemailsms').href='sms:' + toe.trim() + '&body=' + encodeURIComponent(inu.replace('HttP','http').split('#')[0].replace(/\-/g,'').replace('doctestoutput','doctest-output'));
          document.getElementById('myaemailsms').click();
        }
     }
     document.getElementById('sells').value='';
   } else if (inu.indexOf('HTTP') == 0) {
     //alert('2:' + inu);
     if (inu.indexOf('#saved_colour_wheel_') != -1) {
     //alert('22:' + inu.split('#')[eval(-1 + inu.split('#').length)]);
       deleteAVal(inu.split('#')[eval(-1 + inu.split('#').length)], encodeURIComponent(inu.replace('#' + inu.split('#')[eval(-1 + inu.split('#').length)], '').replace('HTTP','http')));
     //alert('222:' + inu.split('#')[eval(-1 + inu.split('#').length)]);
       cookieAVal('saved_colour_wheel_', true);
     //alert('2222:' + inu.split('#')[eval(-1 + inu.split('#').length)]);
     }
   } else {
     //woo=window.open(inu, '_blank', 'top=50,left=50,width=800,height=800');
     woo=window.open(inu.replace(/\-/g,'').replace('doctestoutput','doctest-output').replace('http:','').replace('https:',''), '_blank', 'top=50,left=50,width=800,height=800');
   }
  }
}

function rework(what) {
  var outw=what;
  if (what.toLowerCase().indexOf('doctest output ') != -1 && what.toLowerCase().indexOf('.gv.') != -1) {
    outw=what.toLowerCase().split('doctest output ')[1].split('.gv.')[0];
    var outwds=outw.split(' ');
    outw=outwds[0].substring(0,1).toUpperCase() + (outwds[0] + ' ').substring(1).toLowerCase().trim();
    for (var io=1; io<outwds.length; io++) {
      outw+=' ' + outwds[io].substring(0,1).toUpperCase() + (outwds[io] + ' ').substring(1).toLowerCase().trim();
    }
  }
  return outw;
}

function cookieAVal(cName, selize) {
 var key=null;
 if (selize && window.localStorage) {
  lssel=' ';
  for (var i=0; i<localStorage.length; i++) { // thanks to https://stackoverflow.com/questions/41271092/how-to-loop-through-localstorage-values
   key = localStorage.key(i);
   if (('' + key).indexOf(cName) == 0) {
     if (lssel.trim() == '') {
       lssel='<select id=sells onchange=gotothis(this.value);><option value=\"\">Recallable Colour Wheel below ...</option></select>';
     }
     lssel=lssel.replace('</select>', '<option value=\"' + decodeURIComponent(localStorage.getItem('' + key)) + '\">' + rework(('' + key).substring(eval('' + cName.length)).replace(/\_/g,' ').replace(/\-/g,' ')) + '</option>' + '<option value=\"' + decodeURIComponent(localStorage.getItem('' + key).replace('http','HTTP')) + '#saved_colour_wheel_' + ('' + key).substring(eval('' + cName.length)) + '\">Remove ' + rework(('' + key).substring(eval('' + cName.length)).replace(/\_/g,' ').replace(/\-/g,' ')) + '</option>' + '<option value=\"' + decodeURIComponent(localStorage.getItem('' + key).replace('http','HttP')) + '#saved_colour_wheel_' + ('' + key).substring(eval('' + cName.length)) + '\">Email or SMS ' + rework(('' + key).substring(eval('' + cName.length)).replace(/\_/g,' ').replace(/\-/g,' ')) + '</option>' + '</select>');
   }
  }
  if (lssel != '') {
   document.getElementById('ssel').innerHTML=lssel.trim();
  }
 }
 if (cName.indexOf('saved_colour_wheel_') == 0) {
   if (window.localStorage) {
    if (decodeURIComponent(('' + localStorage.getItem(cName)).replace(/^undefined/g,'').replace(/^null/g,'')) != '') {
     return decodeURIComponent(localStorage.getItem(cName));
    }
    if (decodeURIComponent(('' + sessionStorage.getItem(cName)).replace(/^undefined/g,'').replace(/^null/g,'')) != '') {
     return decodeURIComponent(sessionStorage.getItem(cName));
    }
   }
   return '';
 }
 return '';
}  
  
  function contentfix(inid) {
    document.getElementById('ititle').value=document.getElementById('ititle').value.replace(/\+/g,'-').replace(/\=/g,'-').replace(/\ /g,'-');
    document.getElementById('none').value=various(document.getElementById('one').value.replace(/\+/g,String.fromCharCode(9)));
    document.getElementById('ntwo').value=various(document.getElementById('two').value.replace(/\+/g,String.fromCharCode(9)));
    document.getElementById('nthree').value=various(document.getElementById('three').value.replace(/\+/g,String.fromCharCode(9)));
    document.getElementById('mysub').style.border='3px dotted green';
    return inid;
  }
  
  function various(indi) {
    var outdi=indi;
    return outdi;
  }

function svghost(svgheo, imgc) {
 if (9 == 8) {
 if (gzero) {
  gzero.innerHTML+=\"<image x='0' y='0' href='/camel.png'></image>\";  
 } else {
  svgheo.innerHTML+=\"<image x='0' y='0' href='/camel.png'></image>\"; 
 }
 }
}

function psvgit() {
  svgit(lastsvgeo, lastimgc);
}

function hsvtorgb(hsbh, hsbs, hsbb) { // thanks to https://stackoverflow.com/questions/17242144/javascript-convert-hsb-hsv-color-to-rgb-accurately
    var rgb = { };
    var h = Math.round(hsbh * 255);
    var s = Math.round(hsb.s * 255 / 100);
    var v = Math.round(hsb.b * 255 / 100);

        if (s == 0) {

        rgb.r = rgb.g = rgb.b = v;
        } else {
        var t1 = v;
        var t2 = (255 - s) * v / 255;
        var t3 = (t1 - t2) * (h % 60) / 60;

            if (h == 360) h = 0;

                if (h < 60) { rgb.r = t1; rgb.b = t2; rgb.g = t2 + t3 }
                else if (h < 120) { rgb.g = t1; rgb.b = t2; rgb.r = t1 - t3 }
                else if (h < 180) { rgb.g = t1; rgb.r = t2; rgb.b = t2 + t3 }
                else if (h < 240) { rgb.b = t1; rgb.r = t2; rgb.g = t1 - t3 }
                else if (h < 300) { rgb.b = t1; rgb.g = t2; rgb.r = t2 + t3 }
                else if (h < 360) { rgb.r = t1; rgb.g = t2; rgb.b = t1 - t3 }
                else { rgb.r = 0; rgb.g = 0; rgb.b = 0 }
        }

    return 'rgb(' + Math.round(rgb.r) + ',' + Math.round(rgb.g) + ',' + Math.round(rgb.b) + ')';
}

function animbord() {
  var bcolsare=['green','#F0F8FF','#F0FFFF','#F0F0E0','#F0FFF0','#FFFFF0','#FFF0E0','#FFFFE0','#F0FFF0','#FFFFFF','#F0F0F0','#F0F7FF','#FFF8F0','#FFF0F0','#E0FFFF','#FFFFE0'];
  document.getElementById('mysub').style.border='3px dotted ' + bcolsare[lastj];
  lastj++;
  if (lastj >= eval('' + bcolsare.length)) { lastj=0; }
  setTimeout(animbord, 200);
}

function svgit(svgeo, imgc) {
  var pres='';
  lastsvgeo=svgeo;
  lastimgc=imgc;
  if (('' + svgeo.outerHTML).indexOf('<text') == 0) {
   if (((' ' + svgeo.innerHTML.toHtmlEntities()).split('&')[0].split('(')[0].split('<')[0]).replace('%20',' ').replace('+',' ').indexOf(' ') != -1 && lasturl != '//thatsthem.com/name/' + encodeURIComponent(svgeo.innerHTML.toHtmlEntities().split('&')[0].split('(')[0].split('<')[0])) {    
     lasturl='//thatsthem.com/name/' + encodeURIComponent(svgeo.innerHTML.toHtmlEntities().split('&')[0].split('(')[0].split('<')[0])
     window.open('//www.google.com/search?sca_esv=8957a51bd870705f&sxsrf=ADLYWIL9Z95Y2XILCVHy1Ep_vA8UA0HVLw:1728014294038&q=' + encodeURIComponent(svgeo.innerHTML) + '&udm=2&fbs=AEQNm0CrHVBV9axs7YmgJiq-TjYcvrKLYvLdNLLD2b8MCfaxte6rE3yH_shvJRqV-Iqr8JJvO9luGxMyf8tABHRE_ER5WVi_ouuYD0ZGCgonp8RpBmOUpTB-X6dVFbJc8KMdvjlHxs0_OJiYCY4-Y60oHTMiC_1a9mkGkMIYHO4XqP68ipa4P5rJaQCtA4WPne6f0aAKhdyAMTPbTsWJEdFYpNvI5RzOgw&sa=X&ved=2ahUKEwjCwabx6vOIAxWJ7DQHHQIOJBoQtKgLegQIDRAB&biw=1433&bih=739&dpr=2', '_blank', 'top=100,left=' + eval(-600 + screen.width) + ',width=600,height=600');
     window.focus(); 
     uselast=true; 
     setTimeout(psvgit, 2000);
     return '';
   }  
   lasttext=svgeo;
   if (lastiurl.indexOf(\"<image x='\" + svgeo.getAttribute('x') + \"' y='\" + svgeo.getAttribute('y')) == -1 && (imgc == 'ask' || lasturl == '//thatsthem.com/name/' + encodeURIComponent(svgeo.innerHTML.toHtmlEntities().split('&')[0].split('(')[0].split('<')[0]))) {
    if (('' + svgeo.getAttribute('width')).indexOf('null') != -1) {
    lastiurl=\"<image x='\" + eval(-20 + eval('' + svgeo.getAttribute('x'))) + \"' y='\" + eval(-20 + eval('' + svgeo.getAttribute('y'))) + \"' width='45' height='45' opacity='\" + zerodotsix + \"' href=''></image>\"; 
    } else {
    lastiurl=\"<image x='\" + svgeo.getAttribute('x') + \"' y='\" + svgeo.getAttribute('y') + \"' opacity='\" + zerodotsix + \"' width='\" + svgeo.getAttribute('width') + \"' height='\" + svgeo.getAttribute('height') + \"' href=''></image>\"; 
    }
    window.focus(); 
    pres=null;
    try { 
    if (lastp.indexOf('Regarding ' + svgeo.innerHTML + ' ') == -1) {
    if (bconto) { document.getElementById('hidecol').value=szero.innerHTML.split('>' + svgeo.innerHTML + '</title>')[1].split(' fill=\"')[1].split('\"')[0];  bconto.setlhifto(szero.innerHTML.split(svgeo.innerHTML)[1].split(' fill=\"')[1].split('\"')[0]); }
    //pres=prompt('Regarding ' + svgeo.innerHTML + ' please see the whole node ' + svgeo.outerHTML + ' ... ' + szero.outerHTML.split('>' + svgeo.innerHTML + '</text>')[1].substring(0,200) + '', '');
    pres='';
    }
    } catch(exc) {
    console.log('error');
    }
    if (pres == null) { console.log('err'); pres=''; if (uselast) { setTimeout(psvgit, 2000);  } } else { uselast=false;  lastp='Regarding ' + svgeo.innerHTML + ' please enter an optional image URL';  }
    if (pres != '') {
      if (pres.indexOf('#') == -1) { zerodotsix='0.6'; } else if (pres.indexOf('#') != -1) { zerodotsix=pres.split('#')[1]; pres=pres.split('#')[0].trim();  if ((zerodotsix + 'z').substring(0,1) < '0' || (zerodotsix + 'z').substring(0,1) > '9') { zerodotsix='0.6';  } }
      if (pres != '') {
      uselast=false;
      lastp='Regarding ' + svgeo.innerHTML + ' please see the whole node ' + svgeo.outerHTML + ''
      lastiurl=lastiurl.replace(\" href=''\", \" href='\" + pres + \"'\");
      if (gzero) {
       //alert(\"<image x='0' y='0' width='45' height='45' href=\" + lastiurl.split('href=')[1]);
       //gzero.innerHTML+=\"<image x='0' y='0' width='45' height='45' href=\" + lastiurl.split('href=')[1]; //.replace(/\-/g,'');  
       //if (document.getElementById('addimg').value == '') {
       //  document.getElementById('addimg').value=' gzero.innerHTML+=\"\"; ';
       //} 
       document.getElementById('addimg').value+=lastiurl;
       gzero.innerHTML+=lastiurl;
      }
      }      
    }
   }
   if (lasturl != '//thatsthem.com/name/' + encodeURIComponent(svgeo.innerHTML.toHtmlEntities().split('&')[0].split('(')[0].split('<')[0])) {
    lasturl='//thatsthem.com/name/' + encodeURIComponent(svgeo.innerHTML.toHtmlEntities().split('&')[0].split('(')[0].split('<')[0])
    if (1 == 5) { setTimeout(function(){ window.open(lasturl, '_blank', 'top=100,left=' + eval(-600 + screen.width) + ',width=600,height=600'); }, 3000); } 
    //svgeo.innerHTML+='</text><text>+';
   }
  }
  if (1 == 2) {
   svgeo.innerHTML+='+';
   alert('' + svgeo.outerHTML);
  }
}

function emailit(inais) {
   event.stopPropagation();
   var em=null;
   window.focus(); 
   em=prompt('Please enter email address to send output ' + document.getElementById('fmt').value + ' URL link to.', '');
   if (em == null) { em=''; }
   if (em.indexOf('@') != -1) {
    document.getElementById('ititle').value=document.getElementById('ititle').value.replace(/\+/g,'-').replace(/\=/g,'-').replace(/\ /g,'-');
    document.getElementById('none').value=various(document.getElementById('one').value.replace(/\+/g,String.fromCharCode(9)));
    document.getElementById('ntwo').value=various(document.getElementById('two').value.replace(/\+/g,String.fromCharCode(9)));
    document.getElementById('nthree').value=various(document.getElementById('three').value.replace(/\+/g,String.fromCharCode(9)));
    //alert('2:' + document.getElementById('addimg').value);
     em+='?subject=' + document.getElementById('newablzero').value + '&body=' + encodeURIComponent( (document.URL.split('?')[0].split('#')[0] + '?rand=' + Math.floor(Math.random() * 19897865) + '#title=' + encodeURIComponent(document.getElementById('ititle').value) + '#back=' + encodeURIComponent(document.getElementById('back').value.replace('#','')) + '#fsize=' + encodeURIComponent(document.getElementById('fsize').value) + '#shape=' + encodeURIComponent(document.getElementById('shape').value) + '#mode=' + encodeURIComponent(document.getElementById('mode').value) + '#fmt=' + encodeURIComponent(document.getElementById('fmt').value) + '#one=' + encodeURIComponent(document.getElementById('none').value) + '#two=' + encodeURIComponent(document.getElementById('ntwo').value) + '#three=' + encodeURIComponent(document.getElementById('nthree').value) + '#addimg=' + encodeURIComponent(document.getElementById('addimg').value)).replace('#fmt=svg#one=#','#fmt=pdf#one=#')   );
     document.getElementById('dimap').innerHTML='<a style=display:none; id=theaemail target=_blank href=\"mailto:' + em + '\">Email</a>';
     document.getElementById('theaemail').click();
   } 
   return false;
}


function naz(intvo) {
  var intv=intvo.value;
  if (intv.replace(' ','-').replace('_','-').indexOf('-') == -1 && intv.trim() != '') {
    intvo.value='a-' + intv;
    intv=intvo.value;
  }
  var retval='My%20%Colour%20Wheel';
  var jntv=intv.replace(/\ /g,'-').replace(/\_/g,'-');
  var jst=jntv.split('-');
  if (jntv.indexOf('heel') != -1) {
    retval=jst[0].substring(0,1).toUpperCase() + jst[0].substring(1).toLowerCase() + ' ';
    for (var ij=1; ij<jst.length; ij++) {
      retval+=jst[ij].substring(0,1).toUpperCase() + jst[ij].substring(1).toLowerCase() + ' ';
    }
    retval=encodeURIComponent(retval.trim());
  }
  document.getElementById('newablzero').value=retval;
  if (document.getElementById('addimg').value != '') {
  document.getElementById('ablnewzero').value=document.getElementById('addimg').value;
  }
  document.getElementById('mybutsave').style.display='inline-block';
  return retval;
}

function smsit(inais) {
   event.stopPropagation();
   var em=null;
   window.focus(); 
   em=prompt('Please enter SMS number to send output ' + document.getElementById('fmt').value + ' URL link to.', '');
   if (em == null) { em=''; }
   if (em.trim() != '') {
     if (em.trim() != '') {
    document.getElementById('ititle').value=document.getElementById('ititle').value.replace(/\+/g,'-').replace(/\=/g,'-').replace(/\ /g,'-');
    document.getElementById('none').value=various(document.getElementById('one').value.replace(/\+/g,String.fromCharCode(9)));
    document.getElementById('ntwo').value=various(document.getElementById('two').value.replace(/\+/g,String.fromCharCode(9)));
    document.getElementById('nthree').value=various(document.getElementById('three').value.replace(/\+/g,String.fromCharCode(9)));
     em+='&body=' + encodeURIComponent( (document.URL.split('?')[0].split('#')[0] + '?rand=' + Math.floor(Math.random() * 19897865) + '#title=' + encodeURIComponent(document.getElementById('ititle').value) + '#back=' + encodeURIComponent(document.getElementById('back').value.replace('#','')) + '#fsize=' + encodeURIComponent(document.getElementById('fsize').value) + '#shape=' + encodeURIComponent(document.getElementById('shape').value) + '#mode=' + encodeURIComponent(document.getElementById('mode').value) + '#fmt=' + encodeURIComponent(document.getElementById('fmt').value) + '#one=' + encodeURIComponent(document.getElementById('none').value) + '#two=' + encodeURIComponent(document.getElementById('ntwo').value) + '#three=' + encodeURIComponent(document.getElementById('nthree').value)).replace('#fmt=svg#one=#','#fmt=pdf#one=#')    );
     document.getElementById('dimap').innerHTML='<a style=display:none; id=theasms target=_blank href=\"sms:' + em + '\">SMS</a>';
     if (!document.getElementById('theasms') && document.getElementById('psms')) {
     document.getElementById('psms').click();
     } else {
     document.getElementById('theasms').click();
     }
     }
   }
   return false;
}


function sz(inum) {
  var uni='px';
  if (szero) {
    if (('' + szero.getAttribute('width')).indexOf('pt') != -1) { uni='pt'; } else if (('' + szero.getAttribute('width')).indexOf('%') != -1) { uni='%'; }
    szero.setAttribute('width', '' + ('' + eval(eval('' + szero.getAttribute('width').split(uni)[0])) * eval('' + inum)) + uni);
    szero.setAttribute('height', '' + ('' + eval(eval('' + szero.getAttribute('height').split(uni)[0])) * eval('' + inum)) + uni);
  }
}

function domore(hm) {
  var rectis=document.getElementById('myif').getBoundingClientRect();
  if (('' + hm) == '1') {
    document.getElementById('rtd').style.width='20%';
    document.getElementById('myif').style.width='' + eval(eval('' + rectis.width) * sz(1.1)) + 'px';
    document.getElementById('myif').style.height='' + eval(eval('' + rectis.height) * 1.1) + 'px';
  } else if (('' + hm) == '-1') {
    document.getElementById('rtd').style.width='50%';
    document.getElementById('myif').style.width='' + eval(eval('' + rectis.width) * sz(0.9)) + 'px';
    document.getElementById('myif').style.height='' + eval(eval('' + rectis.height) * 0.9) + 'px';
  } else if (('' + hm) == '-2') {
    document.getElementById('rtd').style.width='50%';
    document.getElementById('myif').style.width='' + eval(eval('' + rectis.width) * sz(0.8)) + 'px';
    document.getElementById('myif').style.height='' + eval(eval('' + rectis.height) * 0.8) + 'px';
  } else {
    document.getElementById('rtd').style.width='20%';
    document.getElementById('myif').style.width='' + eval(eval('' + rectis.width) * sz(1.2)) + 'px';
    document.getElementById('myif').style.height='' + eval(eval('' + rectis.height) * 1.2) + 'px';
  }
}

function prechecksvg() {
   checksvg(lastwoo);
}

function checki(iois) {
    bconto = (iois.contentWindow || iois.contentDocument);
}

function checksvg(iiois) {
  var gs=[];
  var iois=iiois;
  if (('' + iiois.src).toLowerCase().indexOf('.svg') == -1 && lastwoo != null) {
    iois=lastwoo;
    //alert(1);
    console.log('lastWoo');
  }
  if (iois != null) { // check out window.svgDocument
    console.log('lastWoo2');
    var aconto = (iois.contentWindow || iois.contentDocument);
    console.log('lastWoo3 ' + aconto);
    if (aconto != null) {
       //alert(1);
    console.log('lastWoo4 ' + aconto);
       if (aconto.document) {  
    console.log('lastWoo5 ' + aconto);
         aconto = aconto.document; 
         gs=aconto.getElementsByTagName('g'); 
         if (eval('' + gs.length) > 0) {
           gzero=gs[0];
           for (var sd=0; sd<gs.length; sd++) {
            if (iois == lastwoo) {
              gs[sd].onclick=function(event){ window.opener.svgit(event.target, '');  };
              gs[sd].ondblclick=function(event){ window.opener.svgit(event.target, 'ask');  };
            } else {
              gs[sd].onclick=function(event){ parent.svgit(event.target, '');  };
              gs[sd].ondblclick=function(event){ parent.svgit(event.target, 'ask');  };
            }
           }
         }
         gs=aconto.getElementsByTagName('svg'); 
         if (eval('' + gs.length) > 0) {
           szero=gs[0];
           for (var sd=0; sd<gs.length; sd++) {
            if (iois == lastwoo) {
              gs[sd].onclick=function(event){ window.opener.svghost(event.target, '');  };
            } else {
              gs[sd].onclick=function(event){ parent.svghost(event.target, '');  };
            }
           }
         }
         console.log(gs.length); 
         console.log(aconto); 
       }
       //alert(11);
       if (aconto.body != null) {
         iois=iois;
         //alert('yay!');
       }
    }
    if (gzero) {
      gzero=gzero;
      " . (strlen($addimg) == 0 ? $addimg : ' gzero.innerHTML+="' . $addimg . '"') . "
      if (aimg != '') { eval(' gzero.innerHTML+=\"' + aimg + '\"');  }
    }  
  }
}

function waschecksvg(iois) {
  if (iois != null) {
    var aconto = (iois.contentWindow || iois.contentDocument);
    if (aconto != null) {
       //alert(2);
       if (aconto.document) {  
         aconto = aconto.document; 
         gs=aconto.getElementsByTagName('g'); 
         if (eval('' + gs.length) > 0) {
           gzero=gs[0];
           for (var sd=0; sd<gs.length; sd++) {
              gs[sd].onclick=function(event){ parent.svgit(event.target, '');  };
              gs[sd].ondblclick=function(event){ parent.svgit(event.target, 'ask');  };
           }
         }
         gs=aconto.getElementsByTagName('svg'); 
         if (eval('' + gs.length) > 0) {
           for (var sd=0; sd<gs.length; sd++) {
              gs[sd].onclick=function(event){ parent.svghost(event.target, '');  };
           }
         }
         console.log(gs.length); 
         console.log(aconto); 
       }
       //alert(22);
       if (aconto.body != null) {
         iois=iois;
         //alert('Yay!');
       }
    if (gzero) {
      gzero=gzero;
      " . (strlen($addimg) == 0 ? $addimg : ' gzero.innerHTML+="' . $addimg . '"') . "
      if (aimg != '') { eval(' gzero.innerHTML+=\"' + aimg + '\"');  }
    }  
    }  
  }
}

</scr" . "ipt>
<style>
  #ltd { background-color: #e0f0d0; }
  body { background-color: #f0d0e0; }
  #myif { background-color: #d0e0f0; }
  textarea { 
     width: 99%;
     height: 60px;
  }
  #back { display: none; }
  td { vertical-align: top; }
</style>
</head>
<body title='Click on a GraphViz SVG node, and if the associated circle shape has a name a Google search window will open and associated colour available to draw with on the canvas below. ' onload=ph();>
<h1 id=myh1>Trying out Dot GraphViz hosted in PHP " . $plus . " Colour Wheel <span id=ssel></span> <a id=pemail title=Email class=share  onclick=emailit(this); style=text-decoration:none;cursor:pointer;>&#128231;</a>&nbsp;<a id=psms title=SMS class=share  onclick=smsit(this); style=text-decoration:none;cursor:pointer;>&#128223;</a><sup id=\"supgws\" style=\"vertical-align: top;\">&nbsp;<details title=\"Open to reveal other GraphViz web applications you can navigate to.\" style=\"display: inline-block;\" id=\"gvdtls\"><summary style=\"color: #e162bf;list-style-type:'\\01F4C8'\"></summary><select size=\"8\" id=\"gvwapps\" onchange=\"if (this.value != '') { this.style.cursor='progress'; location.href=this.value; }\"><option value=\"\">Optionally select a GraphViz web application below ...</option><option value=\"/dot_colour_wheel.php\">Colour Wheel</option><option value=\"/family_tree.php\">Family Tree</option><option value=\"/hierarchy_organization.php\">Organization Hierarchy</option><option value=\"/html_table_basis.php\">HTML Table</option><option value=\"/subgraph_example.php\">Triangular Relationship</option><option value=\"/twopi_vs_circo_example.php\">Circular Layout</option><option value=\"/venn_diagram_basis.php\">Venn Diagram</option></select></details></sup></h1>
<h3>RJM Programming  " . $minus . " October, 2024</h3>
<h4>Thanks to <a target=_blank title='Dot GraphViz package information' href='//graphviz.org/Gallery/neato/color_wheel.html'>https://graphviz.org/Gallery/neato/color_wheel.html</a></h4>
<table cellpadding=2 cellspacing=2 style=width:98%;><tr><td id=ltd>
<" . $outel . " onload='checksvg(this);' id=myif style='width:95%;height:500px;' type=application/" . $fmt . " src='/doctest-output" . DIRECTORY_SEPARATOR . $newabl[0] . $gv . $fmt . "?rand=" . rand(13456,6789056) . "'></" . explode(' ',$outel)[0] . ">
</td><td title=\"Double click for new window just with the GraphViz graphics showing.\" ondblclick=\"if (szero) {  lastwoo=window.open('','_blank','top=200,left=200,width=700,height=600'); lastwoo.document.write(szero.outerHTML);  lastwoo.document.title=(document.getElementById('ititle').value != '' ? document.getElementById('ititle').value : document.getElementById('ititle').placeholder); } else { lastwoo=window.open(top.document.URL.split('//')[0].replace('httJUNKps:','').replace('httJUNKp:','') + '//www.rjmprogramming.com.au/doctest-output' + document.getElementById('myif').src.split('doctest-output')[1],'_blank','top=200,left=200,width=700,height=600'); setTimeout(prechecksvg, 20000); } \" id=rtd style=background-color:#f0f0f0;width:50%;>
<form id=myform onsubmit=\"if (document.getElementById('ititle').value.replace('colour-wheel','').trim() == '') { alert('Please enter a different title, then click/tap Draw again.');  return false; } document.body.style.cursor=contentfix('progress');  return true;\" method=POST action=./dot_colour_wheel.php>
<p>Title ...</p><br>
<input onblur=naz(this); type=text id=ititle name=title placeholder='" . $newabl[0] . "' value=''></input>&nbsp;<select id=fmt name=fmt><option value=svg>SVG</option><option value=pdf>PDF</option><option value=png>PNG</option><option value=jpg>JPEG</option><option value=html>HTML</option></select>&nbsp;<input type=color name=back id=back title='rgb(174,216,232)' value='" . $bbcol . "'></input>&nbsp;<input type=text id=fsize name=fsize placeholder='10,20' title='Two representative Font sizes you can change with your own set' value=''></input>&nbsp;<select id=shape name=shape><option value=''>Record</option>" . $nondefshapes . "</select>&nbsp;<select id=mode name=mode><option value=Graph>graph</option><option value=Digraph disabled>digraph</option></select><br><br>

<p>Colour Wheel Names ...</p><br>
<textarea style=display:none; ondblclick=\"event.stopPropagation(); phv(this);\" title='Old=New comma separated list one. Double click makes suggestion the real value' placeholder='' data-contenteditable=true id=none name=one value=''>" . str_replace("\t","+",urldecode($newabl[1])) . "</textarea>
<textarea style=display:none; ondblclick=\"event.stopPropagation(); phv(this);\" title='Old=New comma separated list two. Double click makes suggestion the real value' placeholder='' data-contenteditable=true id=ntwo name=two value=''>" . str_replace("\t","+",urldecode($newabl[2])) . "</textarea>
<textarea style=display:none; ondblclick=\"event.stopPropagation(); phv(this);\" title='Old=New comma separated list three. Double click makes suggestion the real value' placeholder='' data-contenteditable=true id=nthree name=three value=''>" . str_replace("\t","+",urldecode($newabl[3])) . "</textarea>
<textarea ondblclick=\"event.stopPropagation(); phv(this);\" title='Old=New comma separated list one. Double click makes suggestion the real value' placeholder='' data-name=one id=one data-contenteditable=true value=''>" . str_replace("\t","+",urldecode($newabl[1])) . "</textarea><br>
<textarea ondblclick=\"event.stopPropagation(); phv(this);\" title='Old=New comma separated list two. Double click makes suggestion the real value' placeholder='' data-name=two id=two data-contenteditable=true value=''>" . str_replace("\t","+",urldecode($newabl[2])) . "</textarea><br>
<textarea ondblclick=\"event.stopPropagation(); phv(this);\" title='Old=New comma separated list three. Double click makes suggestion the real value' placeholder='' data-name=three id=three data-contenteditable=true value=''>" . str_replace("\t","+",urldecode($newabl[3])) . "</textarea><br><br>
<input type=hidden id=addimg name=addimg value=\"" . $addimg . "\"></input>
<input id=mysub type=submit value=Draw style=background-color:pink;></input>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input onload=checki(this); onclick=\"document.getElementById('myformsub').click();\" style=background-color:yellow;display:" . $none . "; id=mybutsave type=button value=Save style=background-color:yellow;></input>
</form>
</td></tr></table>
<details id=detailsuof open><summary>Canvas Drawing With Clicked Colour to Top and Left As Revealed Below ...</summary><iframe style=width:100%;height:800px; id=ifuos name=ifuos src='/HTMLCSS/user_of_signature_signature.htm?fcol=&ws=" . rand(0,1267564) . "&xc=" . $tw . "'></iframe></details>
<form id=myformsave style=display:none; action=./dot_colour_wheel.php method=POST target=myifsave><input type=hidden id=ablnewzero name=newablzero value=\"" . $addimg . "\"></input><input type=hidden id=infile name=infile value='doctest-output" . DIRECTORY_SEPARATOR . $newabl[0] . $gv . $fmt . "'></input><input type=submit id=myformsub style=display:none; value=Submit></input></form>
<a target=_blank id=myaemailsms href='/About_Us.html' style=display:none;>Email/SMS</a><iframe style=display:none; id=myifsave name=myifsave src=/About_Us.html></iframe><div id=dimap></div>
<input type=hidden id=hidecol value=''></input>
</body>
</html>";
  }

?>
