<?php
// hierarchy_organization.php
// RJM Programming
// September, 2024
// Trying out Python GraphViz package ... thanks to https://graphviz.readthedocs.io/en/stable/

 $txprefix=$_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR;
  
 foreach ( $_GET as $key => $value ) {  $_POST[$key] = $value; } 
  $abl=['unix','','',''];
  $newabl=['organization-hierarchy','','',''];
  $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';
  $fmt='pdf';
  $mode='Digraph';
  $shape='';
  $fsize='';
  $bcol='lightblue2';
  $bbcol='#aed8e8';
  $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';
    $_POST['one']=$newabl[1];
    $_POST['two']=$newabl[2];
    $_POST['three']=$newabl[3];
  } else {
    $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 (isset($_POST['title'])) {
  $newabl[0]=trim(str_replace('+',' ',urldecode($_POST['title'])));
  } else if (!isset($_POST['original'])) {
  $_POST['title']=$newabl[0];
  }

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

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

  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']))));
  $pycont=file_get_contents('./hierarchy_organization.py');

  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("u.attr(", "u.attr('node', shape='" . $shape . "') \nu.attr(", $pycont);
  }
  
  if ($fsize != '') {
    $pycont=str_replace("'6,6'", "'" . $fsize . "'", $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'])))));
  
  $cols=explode('|', $xone . '|' . $xtwo . '|' . $xthree);
  
  // 5th Edition;6th Edition,PWB 1.0|6th Edition;LSX,1 BSD,Mini Unix,Wollongong,Interdata
  for ($ic=0; $ic<sizeof($cols); $ic++) {
    if (trim($cols[$ic]) != '') {
      $withincols=explode(';', $cols[$ic]);
      for ($jc=1; $jc<sizeof($withincols); $jc++) {
       $rightcols=explode(',', $withincols[$jc]);
       for ($kc=0; $kc<sizeof($rightcols); $kc++) {
         $pymidbit.="u.edge('" . str_replace("\t","+", urldecode($withincols[0])) . "','" . str_replace("\t","+", urldecode($rightcols[$kc])) . "') " . "\n"; 
       }
      }
    }
  }
  
  if ($pymidbit != '' && $pysuffix != "") {
     $pycont=str_replace($pysuffix, $pymidbit . $pysuffix, $pycont);
  }
  
  $pycont=str_replace($abl[0], $newabl[0], $pycont);
  if ($fmt != 'pdf') {
     $pycont=str_replace(", filename=", ", format='" . $fmt . "', filename=", $pycont);
  }
  $pycont=str_replace('doctest-output', $prefix . 'doctest-output', $pycont);
  
  if ($mode != 'Digraph' && trim($mode) != '') {
    $pycont=str_replace('.Digraph(', '.' . $mode . '(', $pycont);
  }

  if ($yes != 'y') { // use crontab 
  $suffix='_' . server_remote_addr();
  file_put_contents($prefix . 'hierarchy_organization_' . $suffix . '.py', $pycont);
  //file_put_contents($prefix . 'hierarchy_organization0_' . $suffix . '.py', $pycont);
  //file_put_contents($prefix . 'hierarchy_organization_' . $suffix . '.ksh', "#!/bin/ksh\n/usr/bin/python3 " . $prefix . "hierarchy_organization_" . $suffix . ".py >> " . $prefix . "hierarchy_organization.good 2>> " . $prefix . "hierarchy_organization.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 . "hierarchy_organization_" . $suffix . ".py \nrm -f " . $prefix . "hierarchy_organization_" . $suffix . ".ksh \nexit");
  file_put_contents($prefix . 'hierarchy_organization_' . $suffix . '.ksh', "#!/bin/ksh\n/usr/bin/python3 " . $prefix . "hierarchy_organization_" . $suffix . ".py >> " . $prefix . "hierarchy_organization.good 2>> " . $prefix . "hierarchy_organization.bad \nsleep 5\n\n/usr/bin/python3 " . $prefix . "hierarchy_organization_" . $suffix . ".py >> " . $prefix . "hierarchy_organization.good 2>> " . $prefix . "hierarchy_organization.bad \n\nrm -f " . $prefix . "hierarchy_organization_" . $suffix . ".py \nrm -f " . $prefix . "hierarchy_organization_" . $suffix . ".ksh \nexit");
  //file_put_contents($prefix . 'hierarchy_organization0_' . $suffix . '.ksh', "#!/bin/ksh\n/usr/bin/python3 " . $prefix . "hierarchy_organization_" . $suffix . ".py >> " . $prefix . "hierarchy_organization.good 2>> " . $prefix . "hierarchy_organization.bad \nsleep(5)\n\n/usr/bin/python3 " . $prefix . "hierarchy_organization_" . $suffix . ".py >> " . $prefix . "hierarchy_organization.good 2>> " . $prefix . "hierarchy_organization.bad \n\n\nrm -f " . $prefix . "hierarchy_organization_" . $suffix . ".py \nrm -f " . $prefix . "hierarchy_organization_" . $suffix . ".ksh \nexit");
  exec('chmod 777 ' . $prefix . 'hierarchy_organization_' . $suffix . '.ksh');
  exec('ksh ' . $prefix . 'hierarchy_organization_' . $suffix . '.ksh');
  exec('chown root ' . $prefix . 'hierarchy_organization_' . $suffix . '.ksh');
  exec('chgrp root ' . $prefix . 'hierarchy_organization_' . $suffix . '.ksh');
  while (file_exists($prefix . 'hierarchy_organization_' . $suffix . '.ksh')) {
    sleep(10);
  }
  } else {
  file_put_contents($txprefix . 'hierarchy_organization.py', $pycont);
  exec('chmod 777 ' . $txprefix . 'hierarchy_organization.py');
  exec('chown rjmprogr ' . $txprefix . 'hierarchy_organization.py');
  exec('chgrp rjmprogr ' . $txprefix . 'hierarchy_organization.py');
  //if (file_exists('doctest-output' . DIRECTORY_SEPARATOR . $newabl[0] . '.gv.pdf')) {
    //exec('rm -f ' . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $newabl[0] . '.gv.pdf');
    //exec('rm -f ' . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $newabl[0] . '.gv');
    //unlink('doctest-output' . DIRECTORY_SEPARATOR . $newabl[0] . '.gv.pdf');
    //unlink('doctest-output' . DIRECTORY_SEPARATOR . $newabl[0] . '.gv');
  //}
  exec('/usr/bin/python3 ' . $txprefix . 'hierarchy_organization.py > hierarchy_organization.good 2> hierarchy_organization.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 {
  exec('/usr/bin/python3 hierarchy_organization.py');
  sleep(8);
  }
    
  if (file_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 Python GraphViz hosted in PHP - RJM Programming - September, 2024 - Organization Hierarchy</title>
<scr" . "ipt type=text/javascript>
 function ph() {
   var aplace='';
   // one
   aplace='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='7th Edition;8th Edition,32V,V7M,Ultrix-11,Xenix,UniPlus+|V7M;Ultrix-11';
   document.getElementById('two').placeholder=aplace;
   aplace='';
   // three
   aplace='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() != '') {
     document.getElementById('mysub').click();
   }
  }
  
  function phv(tao) {
    if (tao.value == '') {
      tao.value=tao.placeholder;
    }
  }
  
  function various(indi) {
    var outdi=indi;
    outdi=outdi.replace(/\|\;/g, encodeURIComponent('|') + ';');
    outdi=outdi.replace(/\,\;/g, encodeURIComponent(',') + ';');
    outdi=outdi.replace(/\;\;/g, encodeURIComponent(';') + ';');

    outdi=outdi.replace(/\|\,/g, encodeURIComponent('|') + ',');
    outdi=outdi.replace(/\,\,/g, encodeURIComponent(',') + ',');
    outdi=outdi.replace(/\;\,/g, encodeURIComponent(';') + ',');

    outdi=outdi.replace(/\|\|/g, encodeURIComponent('|') + '|');
    outdi=outdi.replace(/\,\|/g, encodeURIComponent(',') + '|');
    outdi=outdi.replace(/\;\|/g, encodeURIComponent(';') + '|');

    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)));
    return inid;
  }


function emailit(inais) {
   event.stopPropagation();
   var em=null;
   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)));
     em+='?subject=Hierarchy%20Organization&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=theaemail target=_blank href='mailto:\" + em + \"'>Email</a>\";
     document.getElementById('theaemail').click();
   } 
   return false;
}

function smsit(inais) {
   event.stopPropagation();
   var em=null;
   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 domore(hm) {
  var rectis=document.getElementById('myif').getBoundingClientRect();
  if (('' + hm) == '1') {
    document.getElementById('myif').style.width='' + eval(eval('' + rectis.width) * 1.1) + 'px';
    document.getElementById('myif').style.height='' + eval(eval('' + rectis.height) * 1.1) + 'px';
  } else if (('' + hm) == '-1') {
    document.getElementById('myif').style.width='' + eval(eval('' + rectis.width) * 0.9) + 'px';
    document.getElementById('myif').style.height='' + eval(eval('' + rectis.height) * 0.9) + 'px';
  } else if (('' + hm) == '-2') {
    document.getElementById('myif').style.width='' + eval(eval('' + rectis.width) * 0.8) + 'px';
    document.getElementById('myif').style.height='' + eval(eval('' + rectis.height) * 0.8) + 'px';
  } else {
    document.getElementById('myif').style.width='' + eval(eval('' + rectis.width) * 1.2) + 'px';
    document.getElementById('myif').style.height='' + eval(eval('' + rectis.height) * 1.2) + 'px';
  }
}

</scr" . "ipt>
<style>
  textarea { 
     width: 99%;
     height: 120px;
  }
</style>
</head>
<body onload=ph();>
<h1>Trying out Python GraphViz hosted in PHP " . $plus . " Organization Hierarchy  <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 . " September, 2024</h3>
<h4>Thanks to <a target=_blank title='Python GraphViz package information' href='//graphviz.readthedocs.io/en/stable/examples.html'>https://graphviz.readthedocs.io/en/stable/examples.html</a></h4>
<table style=width:98%;><tr><td id=ltd>
<iframe id=myif style='width:82%;height:500px;' type=application/" . $fmt . " src='/doctest-output" . DIRECTORY_SEPARATOR . $newabl[0] . ".gv." . $fmt . "?rand=" . rand(13456,6789056) . "'></iframe>
</td><td id=rtd style=background-color:#f0f0f0;width:50%;>
<form onsubmit=\"if (document.getElementById('ititle').value.replace('organization-hierarchy','').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=./hierarchy_organization.php>
<p>Title ...</p><br>
<input 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></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='6,6' title='Font width,height' value=''></input>&nbsp;<select id=shape name=shape><option value=''>Circle</option>" . $nondefshapes . "</select>&nbsp;<select id=mode name=mode><option value=Digraph>Digraph</option><option value=Graph>Graph</option></select><br><br>
<p>Hierarchical Relationship Names ...</p><br>
<textarea style=display:none; ondblclick=phv(this); title='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=phv(this); title='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=phv(this); title='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=phv(this); title='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=phv(this); title='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=phv(this); title='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 id=mysub type=submit value=Draw style=background-color:pink;></input>
</form>
</td></tr></table>
<div id=dimap></div>
</body>
</html>";
  } else {
     echo "<html>
<head>
<title>Trying out Python GraphViz hosted in PHP - RJM Programming - September, 2024 - Organization Hierarchy</title>
<scr" . "ipt type=text/javascript>
 function ph() {
   var aplace='';
   // one
   aplace='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='7th Edition;8th Edition,32V,V7M,Ultrix-11,Xenix,UniPlus+|V7M;Ultrix-11';
   document.getElementById('two').placeholder=aplace;
   aplace='';
   // three
   aplace='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() != '') {
     document.getElementById('mysub').click();
   }
  }
  
  function phv(tao) {
    if (tao.value == '') {
      tao.value=tao.placeholder;
    }
  }
  
  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)));
    return inid;
  }
  
  function various(indi) {
    var outdi=indi;
    outdi=outdi.replace(/\|\;/g, encodeURIComponent('|') + ';');
    outdi=outdi.replace(/\,\;/g, encodeURIComponent(',') + ';');
    outdi=outdi.replace(/\;\;/g, encodeURIComponent(';') + ';');

    outdi=outdi.replace(/\|\,/g, encodeURIComponent('|') + ',');
    outdi=outdi.replace(/\,\,/g, encodeURIComponent(',') + ',');
    outdi=outdi.replace(/\;\,/g, encodeURIComponent(';') + ',');

    outdi=outdi.replace(/\|\|/g, encodeURIComponent('|') + '|');
    outdi=outdi.replace(/\,\|/g, encodeURIComponent(',') + '|');
    outdi=outdi.replace(/\;\|/g, encodeURIComponent(';') + '|');

    return outdi;
  }

function emailit(inais) {
   event.stopPropagation();
   var em=null;
   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)));
     em+='?subject=Hierarchy%20Organization&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=theaemail target=_blank href='mailto:\" + em + \"'>Email</a>\";
     document.getElementById('theaemail').click();
   } 
   return false;
}

function smsit(inais) {
   event.stopPropagation();
   var em=null;
   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 domore(hm) {
  var rectis=document.getElementById('myif').getBoundingClientRect();
  if (('' + hm) == '1') {
    document.getElementById('myif').style.width='' + eval(eval('' + rectis.width) * 1.1) + 'px';
    document.getElementById('myif').style.height='' + eval(eval('' + rectis.height) * 1.1) + 'px';
  } else if (('' + hm) == '-1') {
    document.getElementById('myif').style.width='' + eval(eval('' + rectis.width) * 0.9) + 'px';
    document.getElementById('myif').style.height='' + eval(eval('' + rectis.height) * 0.9) + 'px';
  } else if (('' + hm) == '-2') {
    document.getElementById('myif').style.width='' + eval(eval('' + rectis.width) * 0.8) + 'px';
    document.getElementById('myif').style.height='' + eval(eval('' + rectis.height) * 0.8) + 'px';
  } else {
    document.getElementById('myif').style.width='' + eval(eval('' + rectis.width) * 1.2) + 'px';
    document.getElementById('myif').style.height='' + eval(eval('' + rectis.height) * 1.2) + 'px';
  }
}

</scr" . "ipt>
<style>
  textarea { 
     width: 99%;
     height: 120px;
  }
</style>
</head>
<body onload=ph();>
<h1>Trying out Python GraphViz hosted in PHP " . $plus . " Organization Hierarchy <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 . " September, 2024</h3>
<h4>Thanks to <a target=_blank title='Python GraphViz package information' href='//graphviz.readthedocs.io/en/stable/examples.html'>https://graphviz.readthedocs.io/en/stable/examples.html</a></h4>
<table style=width:98%;><tr><td id=ltd>
<iframe id=myif style='width:82%;height:500px;' type=application/" . $fmt . " src='/doctest-output" . DIRECTORY_SEPARATOR . $newabl[0] . ".gv." . $fmt . "?rand=" . rand(13456,6789056) . "'></iframe>
</td><td id=rtd style=background-color:#f0f0f0;width:50%;>
<form onsubmit=\"if (document.getElementById('ititle').value.replace('organization-hierarchy','').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=./hierarchy_organization.php>
<p>Title ...</p><br>
<input 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></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='6,6' title='Font width,height' value=''></input>&nbsp;<select id=shape name=shape><option value=''>Circle</option>" . $nondefshapes . "</select>&nbsp;<select id=mode name=mode><option value=Digraph>Digraph</option><option value=Graph>Graph</option></select><br><br>

<p>Hierarchical Relationship Names ...</p><br>
<textarea style=display:none; ondblclick=phv(this); title='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=phv(this); title='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=phv(this); title='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=phv(this); title='Double click makes suggestion the real value' placeholder='' data-contenteditable=true id=one data-name=one value=''>" . str_replace("\t","+",urldecode($newabl[1])) . "</textarea><br>
<textarea ondblclick=phv(this); title='Double click makes suggestion the real value' placeholder='' data-contenteditable=true id=two data-name=two value=''>" . str_replace("\t","+",urldecode($newabl[2])) . "</textarea><br>
<textarea ondblclick=phv(this); title='Double click makes suggestion the real value' placeholder='' data-contenteditable=true id=three data-name=three value=''>" . str_replace("\t","+",urldecode($newabl[3])) . "</textarea><br><br>
<input id=mysub type=submit value=Draw style=background-color:pink;></input>
</form>
</td></tr></table>
<div id=dimap></div>
</body>
</html>";
  }

?>