<?php
// worldbank_population_data.php
// RJM Programming
// February, 2017

function thesmallest($y1, $y2) {
  if (strpos($y2, "-") !== false) {
    return min($y1, -$y2);
  } else if ($y2 != "") {
    return $y1; //min($y1, $y2);
  }
  return $y1;
}

function thebiggest($y1, $y2) {
  if (strpos($y2, "-") !== false) {
    return max($y1, -$y2);
  } else if ($y2 != "") {
    return $y1; //max($y1, $y2);
  }
  return $y1;
}

function andto($y1, $y2, $otheridea) {
  if (thebiggest($y1, $y2) != thesmallest($y1, $y2)) {
    if (strpos($y2, "-") !== false) {
      return thesmallest($y1, $y2) . " to " . thebiggest($y1, $y2);
    } else {
      return $y2 . " and " . $y1;
    }
  }
  return str_replace("%2d","",str_replace("%2D","",str_replace("-","",str_replace($y1 . " and " . $y2,$y2 . " and " . $y1,str_replace($y1 . "%20and%20" . $y2,$y2 . "%20and%20" . $y1,$otheridea)))));
}

$cn="Pie Chart";
$idata2="";
$udiff="";
$ddiff="";
$page=1;
$valuelist="";
$valuedelim="";
$othercnt=0;
$pagecontent="<wb:indicator";
$year="2015";
$xyearvs="";
$yearvs="";
$onclick="<input type='hidden' name='onclick' id='onclick' value='y'></input>";
$poplist="";
$popdelim=",%20";
$idelim="<wb:indicator";
$jdelim='<wb:country id="';
$lookingfor='"Afghanistan<';
$zero=0;
$one=1;
$eight=8;
$cdelim="<";
$prevc="";
$ddelim='<wb:value>';
$wf="600px";
if (isset($_GET['year'])) $year=$_GET['year'];
if (isset($_POST['year'])) $year=$_POST['year'];
if (isset($_GET['yearvs'])) $yearvs=str_replace("%2d","-",str_replace("%2D","-",$_GET['yearvs']));
if (isset($_POST['yearvs'])) $yearvs=str_replace("%2d","-",str_replace("%2D","-",$_POST['yearvs']));
if (isset($_GET['yearvs'])) $xyearvs=" and " . str_replace("%2d","",str_replace("%2D","",str_replace("-","",$_GET['yearvs'])));
if (isset($_POST['yearvs'])) $xyearvs=" and " . str_replace("%2d","",str_replace("%2D","",str_replace("-","",$_POST['yearvs'])));
$tbit=andto($year, $yearvs, $year . $xyearvs);
$preudiff="http://www.rjmprogramming.com.au/PHP/PieChart/pie_chart";
if (strpos($yearvs, "-") !== false) {
  $preudiff="http://www.rjmprogramming.com.au/PHP/LineChart/line_chart";
  $cn="Line Chart";
  if (isset($_GET['chart'])) {
    if (strpos(strtolower($_GET['chart']), "column") !== false) {
      $preudiff="http://www.rjmprogramming.com.au/PHP/ColumnChart/column_chart";
      $cn="Column Chart";
    } else if (strpos(strtolower($_GET['chart']), "bar") !== false) {
      $preudiff="http://www.rjmprogramming.com.au/PHP/BarChart/bar_chart";
      $cn="Bar Chart";
    } else if (strpos(strtolower($_GET['chart']), "area") !== false) {
      $preudiff="http://www.rjmprogramming.com.au/PHP/AreaChart/area_chart";
      $cn="Area Chart";
    }
  }
  if (isset($_POST['chart'])) {
    if (strpos(strtolower($_POST['chart']), "column") !== false) {
      $preudiff="http://www.rjmprogramming.com.au/PHP/ColumnChart/column_chart";
      $cn="Column Chart";
    } else if (strpos(strtolower($_POST['chart']), "bar") !== false) {
      $preudiff="http://www.rjmprogramming.com.au/PHP/BarChart/bar_chart";
      $cn="Bar Chart";
    } else if (strpos(strtolower($_POST['chart']), "area") !== false) {
      $preudiff="http://www.rjmprogramming.com.au/PHP/AreaChart/area_chart";
      $cn="Area Chart";
    }
  }
} else if ($yearvs != "") {
  $onclick="";
  $wf="900px";
  $udiff="_diff";
  $ddiff="&data0=";
  $idata2="<input type='hidden' name='data0' id='data0' value=''></input>";
}
$startswith='';
if (isset($_GET['startswith'])) $startswith=urldecode($_GET['startswith']);
if (isset($_POST['startswith'])) $startswith=urldecode($_POST['startswith']);
$url=$preudiff . $udiff . ".php?title=Population%20by%20World%20Country%20" . $startswith . "%20for%20Year%20" . urldecode(andto($year, $yearvs, $year . $xyearvs)) . "&onclick=y&label=Year&value=&task=Population&desc=Population&data=";
$urlextra="";
$tso=thesmallest($year, $yearvs);
$tbo=thebiggest($year, $yearvs);

// http://www.rjmprogramming.com.au/PHP/LineChart/line_chart.php?title=Population%20by%20World%20Country%20" . $startswith . "%20for%20Year%20" . urldecode(andto($year, $yearvs, $year . $xyearvs)) . "&onclick=y&label=Year&value=Afghanistan,Australia&data=,%20[~2010~,23,45]%20,%20[~2012~,34,56]

while (strpos($pagecontent, "<wb:indicator") !== false) {
  $pagecontent=@file_get_contents("http://api.worldbank.org/countries/all/indicators/SP.POP.TOTL?format=json&date=" . $tso . ":" . $tbo . "&page=" . $page);
  if (strpos($pagecontent, $idelim) === false) {
     $idelim="Population, tot";
     $jdelim="Population, tot";
     $ddelim='"';
     $lookingfor='"Afghanistan"';
     $cdelim=',"value":"';
     $zero=10;
     $one=14;
     $eight=22;
     $pagecontent=str_replace(':null',':"0"',$pagecontent);
  }
  if (strpos($pagecontent, $idelim) !== false) {
     $entries=explode($jdelim, $pagecontent);
     for ($i=1; $i<sizeof($entries); $i++) {
       if ($lookingfor != "") {
         if (str_replace($lookingfor, '', $entries[$i]) != $entries[$i]) $lookingfor="";
       }
       if ($lookingfor == "" && strpos($entries[$i], $ddelim) !== false) {
        $pentries=explode($ddelim, $entries[$i]);
        if (strpos('*' . explode("<", str_replace('">', '', $entries[$i]))[0], '*' . $startswith) !== false || strpos('*' . $pentries[$zero], '*' . $startswith) !== false) { 
          if ($idelim == "Population, tot") {
  if (strpos($yearvs, "-") !== false) {
          $prevc="," . $valuelist . ",";
          if (strpos($prevc, "," . str_replace("%27","",str_replace(".","",str_replace("+","%20",urlencode($pentries[$zero])))) . ",") === false) {
            $prevc=$valuelist;
            $valuelist=str_replace("%27","",str_replace(".","",str_replace("+","%20",urlencode($pentries[$zero])))) . $valuedelim . $prevc;
            $valuedelim=",";
            //echo $valuelist;
          } //else {
            //echo str_replace("%27","",str_replace(".","",str_replace("+","%20",urlencode($pentries[$zero])))) . " vs " . $prevc;
          //}
          if ($pentries[$one] == "decimal") {
            $thisyear=$pentries[6 + $one];
          } else {
            $thisyear=$pentries[$eight];
          }
          if ($poplist == "") {
            for ($jy=$tso; $jy<=$tbo; $jy++) {
              $poplist.=$popdelim . "[~" . $jy . "~]";
            }
          }
          if (strpos($poplist, "~" . $thisyear . "~") !== false) {
          $poplist=str_replace("[~" . $thisyear . "~", "[~" . $thisyear . "~," . str_replace("decimal","0",explode($cdelim, $pentries[$one])[0]), $poplist);
          } else {
          $prevc=$poplist;
          $poplist=$popdelim . "[~" . $thisyear . "~," . str_replace("decimal","0",explode($cdelim, $pentries[$one])[0]) . "]" . $prevc;
          }
  } else {
          $poplist.=$popdelim . "[~" . str_replace("%27","",str_replace(".","",str_replace("+","%20",urlencode($pentries[$zero])))) . "~," . str_replace("decimal","0",$pentries[$one]) . "]";
  }
          } else {
  if (strpos($yearvs, "-") !== false) {
          $prevc="," . $valuelist . ",";
          if (strpos($prevc, "," . str_replace("%27","",str_replace(".","",str_replace("+","%20",explode('"', explode($cdelim, str_replace('">', '', urlencode($entries[$i])))[$zero])[0]))) . ",") === false) {
            $prevc=$valuelist;
            $valuelist=str_replace("%27","",str_replace(".","",str_replace("+","%20",explode('"', explode($cdelim, str_replace('">', '', urlencode($entries[$i])))[$zero])[0]))) . $valuedelim . $prevc;
            $valuedelim=",";
            //echo $valuelist;
          } //else {
            //echo str_replace("%27","",str_replace(".","",str_replace("+","%20",explode('"', explode($cdelim, str_replace('">', '', urlencode($entries[$i])))[$zero])[0]))) . " vs " . $prevc;
          //}
          if ($pentries[$one] == "decimal") {
            $thisyear=$pentries[6 + $one];
          } else {
            $thisyear=$pentries[$eight];
          }
          if ($poplist == "") {
            for ($jy=$tso; $jy<=$tbo; $jy++) {
              $poplist.=$popdelim . "[~" . $jy . "~]";
            }
          }
          if (strpos($poplist, "~" . $thisyear . "~") !== false) {
          $poplist=str_replace("[~" . $thisyear . "~", "[~" . $thisyear . "~," . str_replace("decimal","0",explode($cdelim, $pentries[$one])[0]), $poplist);
          } else {
          $prevc=$poplist;
          $poplist=$popdelim . "[~" . $thisyear . "~," . str_replace("decimal","0",explode($cdelim, $pentries[$one])[0]) . "]" . $prevc;
          }
  } else {
          $poplist.=$popdelim . "[~" . str_replace("%27","",str_replace(".","",str_replace("+","%20",explode('"', explode($cdelim, str_replace('">', '', urlencode($entries[$i])))[$zero])[0]))) . "~," . str_replace("decimal","0",explode($cdelim, $pentries[$one])[0]) . "]";
  }
          }
          $popdelim=",%20";
        } else if (strpos($yearvs, "-") === false) {
          if ($idelim == "Population, tot") {
          $othercnt+=str_replace("decimal","0",$pentries[$one]);
          } else {
          $othercnt+=str_replace("decimal","0",explode($cdelim, $pentries[$one])[0]);
          }
        }
       }       
     }
     $pagecontent="<wb:indicator";
  }
  $page++;
}

if (strpos($yearvs, "-") !== false) {
            for ($jy=$tso; $jy<=$tbo; $jy++) {
              $poplist=str_replace($popdelim . "[~" . $jy . "~]", "", $poplist);
            }
}

if ($othercnt > 0 && !isset($_GET['justletters']) && !isset($_POST['justletters'])) {
  $url.=$poplist . $popdelim . "[~Non-" . $startswith . "~," . $othercnt . "]";
} else {
  $url.=$poplist;
}
if (strpos($yearvs, "-") !== false) $yearvs="";

$page=1;
$pagecontent="<wb:indicator";
$othercnt=0;
$zero=0;
$one=1;
$cdelim="<";
$ddelim='<wb:value>';
$poplist="";
$popdelim=",%20";
$idelim="<wb:indicator";
$jdelim='<wb:country id="';
$lookingfor='"Afghanistan<';
if ($yearvs != "") {
$urlextra="&data0=";
while (strpos($pagecontent, "<wb:indicator") !== false) {
  $pagecontent=@file_get_contents("http://api.worldbank.org/countries/all/indicators/SP.POP.TOTL?format=json&date=" . $yearvs . ":" . $yearvs . "&page=" . $page);
  if (strpos($pagecontent, $idelim) === false) {
     $idelim="Population, tot";
     $jdelim="Population, tot";
     $ddelim='"';
     $lookingfor='"Afghanistan"';
     $cdelim=',"value":"';
     $zero=10;
     $one=14;
     $eight=22;
     $pagecontent=str_replace(':null',':"0"',$pagecontent);
  }
  if (strpos($pagecontent, $idelim) !== false) {
     $entries=explode($jdelim, $pagecontent);
     for ($i=1; $i<sizeof($entries); $i++) {
       if ($lookingfor != "") {
         if (str_replace($lookingfor, '', $entries[$i]) != $entries[$i]) $lookingfor="";
       }
       if ($lookingfor == "" && strpos($entries[$i], $ddelim) !== false) {
        $pentries=explode($ddelim, $entries[$i]);
        if (strpos('*' . explode("<", str_replace('">', '', $entries[$i]))[0], '*' . $startswith) !== false || strpos('*' . $pentries[$zero], '*' . $startswith) !== false) { 
          if ($idelim == "Population, tot") {
          $poplist.=$popdelim . "[~" . str_replace("%27","",str_replace(".","",str_replace("+","%20",urlencode($pentries[$zero])))) . "~," . str_replace("decimal","0",$pentries[$one]) . "]";
          } else {
          $poplist.=$popdelim . "[~" . str_replace("%27","",str_replace(".","",str_replace("+","%20",explode('"', explode($cdelim, str_replace('">', '', urlencode($entries[$i])))[$zero])[0]))) . "~," . str_replace("decimal","0",explode($cdelim, $pentries[$one])[0]) . "]";
          }
          $popdelim=",%20";
        } else {
          if ($idelim == "Population, tot") {
          $othercnt+=str_replace("decimal","0",$pentries[$one]);
          } else {
          $othercnt+=str_replace("decimal","0",explode($cdelim, $pentries[$one])[0]);
          }
        }
       }       
     }
     $pagecontent="<wb:indicator";
  }
  $page++;
}
}

if ($othercnt > 0 && !isset($_GET['justletters']) && !isset($_POST['justletters'])) {
  $urlextra.=$poplist . $popdelim . "[~Non-" . $startswith . "~," . $othercnt . "]";
  $idata2="<input type='hidden' name='data0' id='data0' value='" . explode("&data0=",$urlextra)[1] . "'></input>";
} else if ($poplist != "") {
  $urlextra.=$poplist;
  $idata2="<input type='hidden' name='data0' id='data0' value='" . explode("&data0=",$urlextra)[1] . "'></input>";
}

echo "<!doctype html><html><head><title>World Bank API Population Data Google Chart " . $cn . " - RJM Programming - February, 2016</title><scr" . "ipt type='text/javascript'> 
  var url='" . explode("&data=",$url)[1] . "'; 
  var urlextra='" . $urlextra . "'; 
  function preiframeviaurl() {
    if (document.getElementById('data').value != '') url=document.getElementById('data').value;
    return true;
  }
  function iframeviaurl() {
    if (parent.document.getElementById('childiframe')) {
       document.body.style.backgroundColor='lightblue';
    }
    if (('" . str_replace('&value=&','&value=' . str_replace('%2c','',str_replace('%2C','',$valuelist)) . '&',explode("&data=",$url)[0]) . "&data=' + url + '" . $urlextra . "').length > 750) {
       document.getElementById('myiframe').style.display='block';
       document.getElementById('data').value=decodeURIComponent(url);
       document.getElementById('mysubmit').click();
    } else if (url != '') {
       document.getElementById('myiframe').style.display='block';
       document.getElementById('myiframe').src='" . str_replace('&value=&','&value=' . str_replace('%2c','',str_replace('%2C','',$valuelist)) . '&',explode("&data=",$url)[0]) . "&data=' + url + '" . $urlextra . "';
    }
    return true;
  }

function shareviaemail() {
  var prefix=document.getElementById('aemail').href.split('body=');
  document.getElementById('aemail').href=prefix[0] + 'body=' + encodeURIComponent(document.URL); 
  document.getElementById('aemail').click();
}
</scr" . "ipt>
</head>
<body onload='iframeviaurl();' style='height:900px;'>
<h1>World Bank API Population Data Google Chart " . $cn . " <a id='eemail' onclick='shareviaemail();' title='Share via Email a link to this Current Pie Chart you are Viewing'>&#128231;</a></h1>
<h3>RJM Programming - February, 2016</h3>
<h4>Thanks to <a target=_blank title='World Bank API documentation' href='https://datahelpdesk.worldbank.org/knowledgebase/articles/898581-api-basic-call-structure'>World Bank API</a></h4>
<iframe style='width:100%;height:" . $wf . ";display:none;' name='myiframe' id='myiframe' src='about:blank'></iframe>
<form onsubmit='return preiframeviaurl();' target='myiframe' id='myform' style='display:none;' method='POST' action='" . $preudiff . $udiff . ".php'>
<input type='hidden' name='title' id='title' value='Population by World Country " . $startswith . " for Year " . $tbit . "'></input>
" . $onclick . "
<input type='hidden' name='task' id='task' value='Population'></input>
<input type='hidden' name='desc' id='desc' value='Population'></input>
<input type='hidden' name='label' id='label' value='Year'></input>
<input type='hidden' name='value' id='value' value='" . str_replace('%2c','',str_replace('%2C','',$valuelist)) . "'></input>
<input type='hidden' name='wellinever' value='y'></input>
<input type='hidden' name='data' id='data' value='" . explode("&data=",$url)[1] . "'></input>" . "\n" . $idata2 . "\n" . "
<input id='mysubmit' type='submit' value='Draw Pie Chart'></input>
</form>
<a target='_top' style='display:none;' href='mailto:fillin@email.to?subject=World%20Bank%20Population%20Data%20" . urlencode($cn) . "&body=' id='aemail'>Share via Email</a>
</body>
</html>";

?>