{"id":62727,"date":"2024-02-24T03:01:34","date_gmt":"2024-02-23T17:01:34","guid":{"rendered":"http:\/\/www.rjmprogramming.com.au\/ITblog\/?p=62727"},"modified":"2025-03-22T20:11:31","modified_gmt":"2025-03-22T10:11:31","slug":"making-of-earth-scanner-legs-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/making-of-earth-scanner-legs-tutorial\/","title":{"rendered":"Making of Earth Scanner Legs Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Making of Earth Scanner Legs Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/making_of_earth_scanner_legs.gif\" title=\"Making of Earth Scanner Legs Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Making of Earth Scanner Legs Tutorial<\/p><\/div>\n<p>Quite often within the I.T. wooooorrrrrllllddd it is when we have an idea that is &#8230;<\/p>\n<blockquote><p>\nJust a Bit of Fun\n<\/p><\/blockquote>\n<p> &#8230; more than likely &#8230;<\/p>\n<ol>\n<li>this is code for &#8230; it will end up being difficult to achieve &#8230; and in that same way &#8230;<\/li>\n<li>often you&#8217;ll learn a lot trying to make it happen<\/li>\n<\/ol>\n<p>What we wanted regarding yesterday&#8217;s <a title='Earth Scanner Legs Tutorial' href='#eslt'>Earth Scanner Legs Tutorial<\/a> blog posting initial draft, where we had &#8230;<\/p>\n<p><code><br \/>\n<a target=\"_blank\" data-id=\"ahash\" style='display:inline-block;' href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html#New%20York-Los%20Angeles\" rel=\"noopener\">New York-Los Angeles<\/a><br \/>\n<\/code><\/p>\n<p> &#8230; in HTML code &#8230;<\/p>\n<p><code><br \/>\n&lt;code&gt;&lt;a target=_blank id=ahash style='display:inline-block;'  href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html#New%20York-Los%20Angeles\"&gt;New York-Los Angeles&lt;\/a&gt;&lt;\/code&gt;<br \/>\n<\/code><\/p>\n<p> &#8230; we really wanted to prefix some content that &#8230;<\/li>\n<ul>\n<li>showed as &#8230; #<\/li>\n<li>on hover showed &#8230; &#127926; &#8230; for the heads up that a click might play &#8230;<\/li>\n<li>Patsy Gallant&#8217;s <a target=\"_blank\" title='?' href='https:\/\/www.youtube.com\/watch?v=kUI_P5eMVLo' rel=\"noopener\">From New York to LA<\/a> via <a target=\"_blank\" title=\"YouTube\" href='\/\/youtube.com' rel=\"noopener\">YouTube<\/a> &#8230; initially envisaging just audio &#8230; but the <a target=\"_blank\" title='Google Chrome' href='https:\/\/www.google.com\/chrome\/' rel=\"noopener\">Google Chrome<\/a> web browser, at least (while others are good too) is far better than this &#8230;<\/li>\n<\/ul>\n<p>We expected mobile might be different, and yes, we achieved less here, but we could open a popup the user can click a play button regarding.  With non-mobile, if your browser allows the &#8220;autoplay&#8221; feature for the &#8220;rjmprogramming.com.au&#8221; domain, you only need to click the &#8220;#&#8221; link to hear Patsy sing the song once over.  But <a target=\"_blank\" title='?' href='https:\/\/www.youtube.com\/watch?reload=9&#038;v=iiATDMHU7gc' rel=\"noopener\">there&#8217;s more<\/a> with Google Chrome, at least, supplying a &#8220;right of address bar&#8221; up the top &#8220;musical notes&#8221; button leading to &#8230;<\/p>\n<ul>\n<li>usual video and\/or audio media controls &#8230; <\/li>\n<li>&#8220;In Picture&#8221; playing of the YouTube video behind the audio &#8230; and\/or &#8230;<\/li>\n<li>&#8220;Live Captions&#8221; for that &#8220;Karaoke Feel&#8221;<\/li>\n<\/ul>\n<p> &#8230; and so, that was all a pleasant surprise for us, because, of course, there were &#8220;Internal Use Only&#8221; issues.  We&#8217;d not noticed a &#8220;Mixed Content&#8221; call we were making in amongst our &#8220;YouTube Video Interfacing Karaoke Style Play&#8221; web application code in <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/stop_start_youtube.html---------------GETME\" rel=\"noopener\">the changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/stop_start_youtube.html---------------GETME\" rel=\"noopener\">stop_start_youtube.html<\/a> helper of <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/karaoke_youtube_api.html-------------------------------GETME\" rel=\"noopener\">the changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/karaoke_youtube_api.html-------------------------------GETME\" rel=\"noopener\">karaoke_youtube_api.htm<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/karaoke_youtube_api.htm\" rel=\"noopener\">inhouse YouTube video interfacer<\/a>, and we needed to add in logic for the use of a new &#8220;justaudio&#8221; argument.<\/p>\n<p>That&#8217;s one part of the equation, and the other was back at the blog posting &#8220;code&#8221; element coding, <a href='#shash'>as below<\/a>, where its HTML innards became &#8230;<\/p>\n<p><code><br \/>\n&lt;code&gt;&lt;span id=shash data-cp=127926 onmouseover=\"if (this.title == 'Might play music ...') { this.title=String.fromCodePoint(127926); setInterval(function() { if (document.getElementById('shash').innerHTML.indexOf('&lt;') == -1) {  if (eval('' + event.target.getAttribute('data-cp')) == 35) { document.getElementById('shash').innerHTML=String.fromCharCode(eval('' + document.getElementById('shash').getAttribute('data-cp'))); document.getElementById('shash').setAttribute('data-cp','127926'); } else { document.getElementById('shash').innerHTML=String.fromCodePoint(eval('' + document.getElementById('shash').getAttribute('data-cp')));  document.getElementById('shash').setAttribute('data-cp','35');  } } }, 5000); }\" title='Might play music ...' style=display:inline-block;cursor:pointer;text-decoration:underline; onclick=\"this.innerHTML+='&lt;iframe style=display:inline-block;width:50px;height:50px;display:none; src=\/\/www.rjmprogramming.com.au\/HTMLCSS\/karaoke_youtube_api.htm?justaudio=%23&youtubeid=kUI_P5eMVLo&youtube_duration=&email=&emoji=on&gt;#&lt;\/iframe&gt;'; if (navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i)) { document.getElementById('ahash').click(); window.open('\/\/www.rjmprogramming.com.au\/HTMLCSS\/karaoke_youtube_api.htm?youtubeid=kUI_P5eMVLo&youtube_duration=202.221&email=&email=&emoji=on&c0=on&i0=0&j0=202.221&i1=&j1=&i2=&j2=&i3=&j3=&i4=&j4=&i5=&j5=&i6=&j6=&i7=&j7=&i8=&j8=&i9=&j9=&i10=&j10=&i11=&j11=&i12=&j12=&i13=&j13=&i14=&j14=&i15=&j15=&i16=&j16=&i17=&j17=&i18=&j18=&i19=&j19=&i20=&j20=&i21=&j21=&i22=&j22=&i23=&j23=&i24=&j24=&i25=&j25=&i26=&j26=&i27=&j27=&i28=&j28=&i29=&j29=','_blank','top=50,left=50,width=800,height=800'); } \"&gt;#&lt;\/span&gt;&lt;a target=_blank id=ahash style='display:inline-block;'  href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html#New%20York-Los%20Angeles\"&gt;New York-Los Angeles&lt;\/a&gt;<br \/>\n&lt;\/code&gt;<br \/>\n<\/code><\/p>\n<p><a onclick=\"document.getElementById('shash').click();\" style=cursor:pointer;text-decoration:underline;>Happy listening<\/a> &#8230; etcetera, etcetera, etcetera!<\/p>\n<p id=paudioytplay><b><i>Stop Press &#8230; 17\/03\/2025<\/i><\/b><\/p>\n<p>We&#8217;ve been developing a <i>class=audioytplay<\/i> HTML &#8220;a&#8221; link means to play the audio of a YouTube video &#8220;in place&#8221; <font size=1>(which you can read about from <a target=\"_blank\" href='https:\/\/www.rjmprogramming.com.au\/ITblog\/external-javascript-youtube-audio-of-video-helper-tutorial\/' rel=\"noopener\">External Javascript YouTube Audio of Video Helper Tutorial<\/a> onwards in that thread)<\/font> and you can try it out below, if you are curious &#8230;<\/p>\n<p><a class=\"audioytplay\" target=\"_blank\" title='?' href='https:\/\/www.youtube.com\/watch?v=kUI_P5eMVLo' rel=\"noopener\">From New York to LA<\/a><\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/making-of-earth-scanner-legs-tutorial\/' rel=\"noopener\">Making of Earth Scanner Legs Tutorial<\/a>.<\/p-->\n<hr>\n<p id='eslt'>Previous relevant <a target=\"_blank\" title='Earth Scanner Legs Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/earth-scanner-legs-tutorial\/' rel=\"noopener\">Earth Scanner Legs Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Earth Scanner Legs Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner_legs.gif\" title=\"Earth Scanner Legs Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Earth Scanner Legs Tutorial<\/p><\/div>\n<p>Of course, yes, there&#8217;s a part of me that hoped today&#8217;s tutorial in its thread of related blog postings, would line up with the 11th draft of our Earth Scanner web application of yesterday&#8217;s <a title='Earth Scanner Hashtag Lists Tutorial' href='#eshlt'>Earth Scanner Hashtag Lists Tutorial<\/a>, and then we could have made some lame joke about &#8220;Legs 11&#8221;, but we&#8217;ve grown up a lot since then, and even some reference to &#8220;Legs XI&#8221; can&#8217;t quite bring us around.  Enjoy the sobriety <font size=1>(until the 11th draft, <a target=\"_blank\" title='?' href='https:\/\/www.youtube.com\/watch?v=PtR4cWb4HNg' rel=\"noopener\">that is<\/a>)<\/font>?!<\/p>\n<p>So, the &#8220;legs&#8221; we&#8217;re referring to today are like a &#8230;<\/p>\n<blockquote><p>\nTrip Leg\n<\/p><\/blockquote>\n<p> &#8230; a concept of interest to lots of people.  Most of us make trips every day, and in our Earth Scanning web application we harness the great <a target=\"_blank\" href='https:\/\/www.google.com\/search?q=google+directions&#038;rlz=1C5CHFA_enAU973AU973&#038;oq=google+directions&#038;aqs=chrome.0.69i59j0i512l6j69i60.4254j0j4&#038;sourceid=chrome&#038;ie=UTF-8' title='Google Directions' rel=\"noopener\">Google Directions<\/a> link to make suggestions about how you might undertake your trip leg.  It&#8217;s a simple case of replacing any commas in your (perhaps timezone) list with minus sign(s) to start seeing trip legs, such as &#8230;<\/p>\n<p><code><span id=shash data-cp=127926 onmouseover=\"if (this.title == 'Might play music ...') { this.title=String.fromCodePoint(127926); setInterval(function() { if (document.getElementById('shash').innerHTML.indexOf('<') == -1) {  if (eval('' + event.target.getAttribute('data-cp')) == 35) { document.getElementById('shash').innerHTML=String.fromCharCode(eval('' + document.getElementById('shash').getAttribute('data-cp'))); document.getElementById('shash').setAttribute('data-cp','127926'); } else { document.getElementById('shash').innerHTML=String.fromCodePoint(eval('' + document.getElementById('shash').getAttribute('data-cp')));  document.getElementById('shash').setAttribute('data-cp','35');  } } }, 5000); }\" title='Might play music ...' style=display:inline-block;cursor:pointer;text-decoration:underline; onclick=\"this.innerHTML+='<iframe style=display:inline-block;width:50px;height:50px;display:none; src=\/\/www.rjmprogramming.com.au\/HTMLCSS\/karaoke_youtube_api.htm?justaudio=%23&#038;youtubeid=kUI_P5eMVLo&#038;youtube_duration=&#038;email=&#038;emoji=on>#<\/iframe>'; if (navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i)) { document.getElementById('ahash').click(); window.open('\/\/www.rjmprogramming.com.au\/HTMLCSS\/karaoke_youtube_api.htm?youtubeid=kUI_P5eMVLo&youtube_duration=202.221&email=&email=&emoji=on&c0=on&i0=0&j0=202.221&i1=&j1=&i2=&j2=&i3=&j3=&i4=&j4=&i5=&j5=&i6=&j6=&i7=&j7=&i8=&j8=&i9=&j9=&i10=&j10=&i11=&j11=&i12=&j12=&i13=&j13=&i14=&j14=&i15=&j15=&i16=&j16=&i17=&j17=&i18=&j18=&i19=&j19=&i20=&j20=&i21=&j21=&i22=&j22=&i23=&j23=&i24=&j24=&i25=&j25=&i26=&j26=&i27=&j27=&i28=&j28=&i29=&j29=','_blank','top=50,left=50,width=800,height=800'); } \">#<\/span><a target=\"_blank\" id=\"ahash\" style='display:inline-block;' href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html#New%20York-Los%20Angeles\" rel=\"noopener\">New York-Los Angeles<\/a><br \/>\n<\/code><\/p>\n<p> &#8230; either at the Javascript prompt window or with the address bar hashtag arrangements, which might end up calling &#8230;<\/p>\n<p><code><br \/>\n  function plotleg(thisleg, smlong, lglat, lglong, smlat) {<br \/>\n     var brgtoset=0.0, disttoset=0.0, gbrgtoset=0.0, gdisttoset=0.0;<br \/>\n     if (1 == 1) {<br \/>\n     disttoset=Math.sqrt((eval(0 + eval(eval('' + plotlong[eval(thisleg.split('.')[0])]) - smlong) \/ eval(lglong - smlong) * eval(screenwidth)) - eval(0 + eval(eval('' + plotlong[eval(thisleg.split('.')[1])]) - smlong) \/ eval(lglong - smlong) * eval(screenwidth))) * (eval(0 + eval(eval('' + plotlong[eval(thisleg.split('.')[0])]) - smlong) \/ eval(lglong - smlong) * eval(screenwidth)) - eval(0 + eval(eval('' + plotlong[eval(thisleg.split('.')[1])]) - smlong) \/ eval(lglong - smlong) * eval(screenwidth))) + (eval(0 + eval(eval(lglat - eval('' + plotlat[eval(thisleg.split('.')[0])])) \/ eval(lglat - smlat) * eval(screenheight))) - eval(0 + eval(eval(lglat - eval('' + plotlat[eval(thisleg.split('.')[1])])) \/ eval(lglat - smlat) * eval(screenheight)))) * (eval(0 + eval(eval(lglat - eval('' + plotlat[eval(thisleg.split('.')[0])])) \/ eval(lglat - smlat) * eval(screenheight))) - eval(0 + eval(eval(lglat - eval('' + plotlat[eval(thisleg.split('.')[1])])) \/ eval(lglat - smlat) * eval(screenheight)))));<br \/>\n     }<br \/>\n     gdisttoset=great_circle_distance(plotlat[eval(thisleg.split('.')[0])],  plotlong[eval(thisleg.split('.')[0])], plotlat[eval(thisleg.split('.')[1])], plotlong[eval(thisleg.split('.')[1])]);<br \/>\n     gdisttoset=great_circle_distance(plotlat[eval(thisleg.split('.')[0])],  plotlong[eval(thisleg.split('.')[0])], plotlat[eval(thisleg.split('.')[1])], plotlong[eval(thisleg.split('.')[1])]);<br \/>\n     var meanlong=eval(0 + eval(eval('' + plotlong[eval(thisleg.split('.')[0])]) - smlong) \/ eval(lglong - smlong) * eval(screenwidth));<br \/>\n     var meanlat=eval(0 + eval(eval(lglat - eval('' + plotlat[eval(thisleg.split('.')[0])])) \/ eval(lglat - smlat) * eval(screenheight)));<br \/>\n     brgtoset=Math.atan2(eval(0 + eval(eval(lglat - eval('' + plotlat[eval(thisleg.split('.')[1])])) \/ eval(lglat - smlat) * eval(screenheight))) - meanlat, eval(0 + eval(eval('' + plotlong[eval(thisleg.split('.')[1])]) - smlong) \/ eval(lglong - smlong) * eval(screenwidth)) - meanlong) * 180 \/ Math.PI;<br \/>\n     meanlong+=eval(0 + eval(eval('' + plotlong[eval(thisleg.split('.')[1])]) - smlong) \/ eval(lglong - smlong) * eval(screenwidth))<br \/>\n     meanlong\/=2.0;<br \/>\n     meanlat+=eval(0 + eval(eval(lglat - eval('' + plotlat[eval(thisleg.split('.')[1])])) \/ eval(lglat - smlat) * eval(screenheight)));<br \/>\n     meanlat\/=2.0;<br \/>\n     console.log(thisleg + ' ' + brgtoset + ' ' + thisleg + ' ... ' + plotlat[eval(thisleg.split('.')[0])] + ',' + plotlong[eval(thisleg.split('.')[0])] + ' to ' + plotlat[eval(thisleg.split('.')[1])] + ',' + plotlong[eval(thisleg.split('.')[1])]);<br \/>\n     bmeridian+='&lt;hr onclick=\"event.stopPropagation(); canlooknow=false; clearwo(); wo=window.open(' + \"'\/\/www.google.com\/maps\/dir\/\" + encodeURIComponent(plotplace[eval(thisleg.split('.')[0])]) + '\/' + encodeURIComponent(plotplace[eval(thisleg.split('.')[1])]) + \"#In a minute we will start moving the map again','_blank','top=50,left=50,width=1000,height=900')\" + '; canlooknow=true; \" ondblclick=\"event.stopPropagation(); canlooknow=false; clearwo(); wo=window.open(' + \"'\/\/www.google.com\/maps\/dir\/\" + plotlat[eval(thisleg.split('.')[0])] + ',' + plotlong[eval(thisleg.split('.')[0])] + '\/' + plotlat[eval(thisleg.split('.')[1])] + ',' + plotlong[eval(thisleg.split('.')[1])] + \"#In a minute we will start moving the map again','_blank','top=50,left=50,width=1000,height=900')\" + '; canlooknow=true; \" title=\"' + plotplace[eval(thisleg.split('.')[0])] + ' to ' + plotplace[eval(thisleg.split('.')[1])] + ' has the crow flying (' + gbrgtoset + ' degrees setting off at versus on Mercator Projection ...) ' + eval(eval(brgtoset + 450) % 360) + ' degrees for ' + eval(gdisttoset \/ 1000.0) + ' kilometers.  Click (for placename) or double click (for geographicals) to open a Google Directions window.\" class=leg style=\"transform:rotate(' + eval(eval('' + brgtoset) - 0) + 'deg);z-index:975;opacity:0.3;position:fixed;top:' +<br \/>\n     meanlat +<br \/>\n     'px;left:' +<br \/>\n     eval(meanlong - disttoset \/ 2) +<br \/>\n     'px;background-color:rgba(255,0,0,0.5);width:' + disttoset + 'px;height:6px;\"&gt;&lt;\/hr&gt;&lt;span onclick=\"event.stopPropagation(); canlooknow=false; clearwo(); wo=window.open(' + \"'\/\/www.google.com\/maps\/dir\/\" + encodeURIComponent(plotplace[eval(thisleg.split('.')[0])]) + '\/' + encodeURIComponent(plotplace[eval(thisleg.split('.')[1])]) + \"#In a minute we will start moving the map again','_blank','top=50,left=50,width=1000,height=900')\" + '; canlooknow=true; \" ondblclick=\"event.stopPropagation(); canlooknow=false; clearwo(); wo=window.open(' + \"'\/\/www.google.com\/maps\/dir\/\" + plotlat[eval(thisleg.split('.')[0])] + ',' + plotlong[eval(thisleg.split('.')[0])] + '\/' + plotlat[eval(thisleg.split('.')[1])] + ',' + plotlong[eval(thisleg.split('.')[1])] + \"#In a minute we will start moving the map again','_blank','top=50,left=50,width=1000,height=900')\" + '; canlooknow=true; \" title=\"' + plotplace[eval(thisleg.split('.')[0])] + ' to ' + plotplace[eval(thisleg.split('.')[1])] + ' has the crow flying (' + gbrgtoset + ' degrees setting off at versus on Mercator Projection ...) ' + eval(eval(360 - brgtoset) % 360) + ' degrees for ' + eval(gdisttoset \/ 1000.0) + ' kilometers.  Click (for placename) or double click (for geographicals) to open a Google Directions window.\" class=leg style=\"cursor:pointer;font-size:6px;z-index:976;margin-top:6px;margin-left:-6px;position:fixed;top:' + meanlat + 'px;left:' + meanlong + 'px;\"&gt;&amp;#129517;&lt;\/span&gt;';<br \/>\n     <font color=blue>if (ofive == fivethousand) {<br \/>\n        fivethousand*=10;<br \/>\n        setTimeout(callintoplay, 5000);<br \/>\n     }<\/font><br \/>\n  }<br \/>\n<\/code><\/p>\n<p> &#8230; and putting this into play we realized we should <font color=blue>slow down animations<\/font> to give users a chance to consider whether they want to &#8220;drill down&#8221; into finding out more about the &#8220;trip legs&#8221; as user defined.<\/p>\n<p>This happens in <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html------GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html------GETME\" rel=\"noopener\">seventh <font size=1>(boo hoo)<\/font> draft<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html\" title='Click picture' rel=\"noopener\">Earth Scanner<\/a> web application.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/earth-scanner-legs-tutorial\/' rel=\"noopener\">Earth Scanner Legs Tutorial<\/a>.<\/p-->\n<hr>\n<p id='eshlt'>Previous relevant <a target=\"_blank\" title='Earth Scanner Hashtag Lists Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/earth-scanner-hashtag-lists-tutorial\/' rel=\"noopener\">Earth Scanner Hashtag Lists Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Earth Scanner Hashtag Lists Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner_hashtag.gif\" title=\"Earth Scanner Hashtag Lists Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Earth Scanner Hashtag Lists Tutorial<\/p><\/div>\n<p>Before yesterday&#8217;s <a title='Earth Scanner TimeZone Tutorial' href='#estzt'>Earth Scanner TimeZone Tutorial<\/a>, when we presented <a title='Earth Scanner Places Tutorial' href='#espt'>Earth Scanner Places Tutorial<\/a> we intimated with &#8230;<\/p>\n<blockquote cite='\/\/www.rjmprogramming.com.au\/ITblog\/earth-scanner-places-tutorial\/'><p>\n &#8230; and into the future we have another idea regarding how this operates.\n<\/p><\/blockquote>\n<p> &#8230; that we might offer another way for the driver of our latest Earth Scanner web application &#8230;<\/p>\n<ul>\n<li>not only depend on a webpage click event Javascript prompt window means by which to control proceedings, including newly coded for comma separated list logic support &#8230; but, also, as of today, after proving it could work <font size=1>(because we can&#8217;t remember ever depending this much on a &#8220;hashtag on the address bar&#8221; arrangement, in the past, before)<\/font> &#8230;<\/li>\n<li>but also allow similar functionality using hashtags on the address bar of the web browser, and able to be changed dynamically (ie. in real time) by the user, as required &#8230;<br \/>\n<code><br \/>\n    if (prevhash != decodeURIComponent(('' + location.hash).replace(\/^null$\/g,'').replace(\/^undefined$\/g,'').replace(\/^\\#\/g,''))) {<br \/>\n       thishash=decodeURIComponent(('' + location.hash).replace(\/^null$\/g,'').replace(\/^undefined$\/g,'').replace(\/^\\#\/g,'')); \/\/.trim();<br \/>\n       for (var iop=0; iop&lt;plotplace.length; iop++) {<br \/>\n          thishash=thishash.replace(plotplace[iop], '');<br \/>\n       }<br \/>\n       var thishs=thishash.replace(\/\\ to\\ \/g,',').trim().split(',');<br \/>\n       if (thishs[0].trim() != '') {<br \/>\n          for (var ipo=0; ipo&lt;thishs.length; ipo++) {<br \/>\n             if (newlist == '') {<br \/>\n               nlist=thishs[ipo].replace(\/\\+\/g,'').trim(); \/\/.trim();<br \/>\n               newlist=thishs[ipo].replace(\/\\+\/g,''); \/\/.trim();<br \/>\n               prefnew=thishs[ipo].replace(\/\\+\/g,' ').split(nlist)[0];<br \/>\n               if (eval(1 + ipo) == eval('' + thishs.length) && thishs[ipo].replace(\/\\+\/g,' ') != (prefnew + newlist)) {<br \/>\n               \/\/alert(98);<br \/>\n                suffnew=thishs[ipo].replace(\/\\+\/g,' ').split(newlist)[1];<br \/>\n               }<br \/>\n             } else {<br \/>\n               nlist=thishs[ipo].replace(\/\\+\/g,'').trim(); \/\/.trim();<br \/>\n               newlist+=',' + nlist; \/\/.trim();<br \/>\n               if (eval(1 + ipo) == eval('' + thishs.length) && thishs[ipo].replace(\/\\+\/g,' ') != nlist) {<br \/>\n                suffnew=thishs[ipo].replace(\/\\+\/g,' ').split(nlist)[1];<br \/>\n               }<br \/>\n             }<br \/>\n          }<br \/>\n       }<br \/>\n       prevhash=decodeURIComponent(('' + location.hash).replace(\/^null$\/g,'').replace(\/^undefined$\/g,'').replace(\/^\\#\/g,'')); \/\/.trim();<br \/>\n       if (newlist != '') {<br \/>\n         \/\/alert('newlist=' + newlist + '|');<br \/>\n         gdefv=prefnew + newlist + suffnew;<br \/>\n         \/\/alert(gdefv + '!');<br \/>\n         if (1 == 1) {<br \/>\n         askfor=gdefv;<br \/>\n         if (1 == 7 && ('' + askfor).replace('(','').replace(')','').replace('[','').replace(']','').indexOf(',') != -1) {<br \/>\n         ameridian='';<br \/>\n         acircleoflatitude='';<br \/>\n         enforcedlong=false;<br \/>\n         enforcedxp=-999;<br \/>\n         }<br \/>\n         document.getElementById('myimg').click();<br \/>\n         gdefv='';<br \/>\n         setTimeout(scmove, fivethousand);<br \/>\n         return null;<br \/>\n         } else {<br \/>\n         ourprompt(null,'Earth Scanner - RJM Programming - February, 2024 ... ' + String.fromCharCode(10) + 'Thanks to https:\/\/github.com\/nvkelso\/natural-earth-raster\/blob\/master\/50m_rasters\/HYP_50M_SR_W\/HYP_50M_SR_W.README.html ... ' + String.fromCharCode(10) + 'Currently top left of screen is (Longitude,Latitude) ' + '(' + eval(-180 + xp * 360 \/ 100) + ',' + eval(90 - yp * 180 \/ 100) + ') and bottom right is (' + eval(-180 + screenlong + xp * 360 \/ 100) + ',' + eval(90 - screenlat - yp * 180 \/ 100) + ') and around the middle is (' + eval(-180 + eval(screenlong \/ 2) + xp * 360 \/ 100) + ',' + eval(90 - eval(screenlat \/ 2) - yp * 180 \/ 100) + ').' + String.fromCharCode(10) + 'Where do you want middle of screen to be in terms of Longitude,Latitude?  Suffix with space to show meridians and\/or prefix with space to not show meridians.', newlist);<br \/>\n         }<br \/>\n       }<br \/>\n    }<br \/>\n<\/code>\n<\/li>\n<\/ul>\n<p>And we did find this an easy way to build up a sizeable number of plotted places, in quick time, entered as &#8230;<\/p>\n<ul>\n<li>the &#8220;P&#8221; and &#8220;N&#8217; and &#8220;A&#8221; and &#8220;C&#8221; shortcuts (near to where the user clicked) ways<\/li>\n<li>timezone place name(s)<\/li>\n<li>country name(s)<\/li>\n<li>country code(s)<\/li>\n<li>[longitude,latitude,placename]<\/li>\n<li>[longitude,latitude]<\/li>\n<li>longitude,latitude,placename<\/font><\/li>\n<li>longitude,latitude <font size=1>(with some form of mantissa)<\/font><\/li>\n<\/ul>\n<p> &#8230; methodologies to end up with at least a pin (&#128205;) emoji plotted, as well as the &#8220;longitude,latitude <font size=1>(with no form of mantissa)<\/font>&#8221; way to just move the map to that position with no plotting taking place.<\/p>\n<p>But now that we have a few &#8220;data players&#8221; in the mix, there&#8217;ll be users out there that do not want to see it all, perhaps &#8230; and so, now &#8220;the blurb&#8221; goes, for user entries, in either of these modes of use &#8230;<\/p>\n<blockquote><p>\n &#8230; at prompt ++ can make delay between snapshots slower and &#8212; can  make delay between snapshots faster <br \/> &#8230; at prompt &gt; can hide any time related information else &lt; reveals it again <br \/> &#8230; comma lists of TimeZone places and\/or Country Codes (2 letter) and\/or Country Names can be plotted via click or via hashtag usage up at address bar <br \/> &#8230; suffix with space to show meridians and\/or prefix with space to not show meridians\n<\/p><\/blockquote>\n<p> &#8230; in <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html-----GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html-----GETME\" rel=\"noopener\">sixth draft<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html\" title='Click picture' rel=\"noopener\">Earth Scanner<\/a> web application.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/earth-scanner-hashtag-lists-tutorial\/' rel=\"noopener\">Earth Scanner Hashtag Lists Tutorial<\/a>.<\/p-->\n<hr>\n<p id='estzt'>Previous relevant <a target=\"_blank\" title='Earth Scanner TimeZone Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/earth-scanner-timezone-tutorial\/' rel=\"noopener\">Earth Scanner TimeZone Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Earth Scanner TimeZone Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner_datetime.jpg\" title=\"Earth Scanner TimeZone Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Earth Scanner TimeZone Tutorial<\/p><\/div>\n<p>Take a look at the word &#8230;<\/p>\n<blockquote><p>\nTimeZone\n<\/p><\/blockquote>\n<p> &#8230; as a concept newly introduced into the Earth Scanner web application workings, as explained in yesterday&#8217;s <a title='Earth Scanner Places Tutorial' href='#espt'>Earth Scanner Places Tutorial<\/a>.<\/p>\n<p>It&#8217;s got a &#8220;where&#8221; word part &#8220;Zone&#8221; fitting in with our &#8220;where of life&#8221; ideas up to now, but it also has got &#8220;Time&#8221; as a new &#8220;when of life&#8221; word part of the whole idea of TimeZones we&#8217;d like to start exploring today.  Yes, TimeZones are very useful to have &#8220;where&#8221; meet &#8220;when&#8221; <font size=1>&#8230; the Opera Bar would be nice, we think<\/font>.<\/p>\n<p>We <font color=blue>now have<\/font> &#8230;<\/p>\n<p><code><br \/>\n  function ourprompt(e, blurb, defv) {<br \/>\n       var locans=null, ijk=0, extras=''<font color=blue>,thatplace='', utzdate, tzDate, xdate1, xextratztime, xextraemj, xdiff<\/font>;<br \/>\n       if (eval(uc_iso_country_codes.length) == 0) {<br \/>\n          for (ijk=0; ijk&lt;iso_country_codes.length; ijk++) {<br \/>\n            uc_iso_country_codes.push(iso_country_codes[ijk].toUpperCase());<br \/>\n          }<br \/>\n       }<br \/>\n       e = e || window.event;<br \/>\n       e.preventDefault();<br \/>\n       if (e.touches) {<br \/>\n       if (e.touches[0].pageX) {<br \/>\n       xinxy.push(eval(e.touches[0].pageX + document.body.scrollLeft * 0) * 1);<br \/>\n       yinxy.push(eval(e.touches[0].pageY + document.body.scrollTop * 0) * 1);<br \/>\n       } else {<br \/>\n       xinxy.push(eval(e.touches[0].clientX + document.body.scrollLeft * 0) * 1);<br \/>\n       yinxy.push(eval(e.touches[0].clientY + document.body.scrollTop * 0) * 1);<br \/>\n       }<br \/>\n       } else if (e.clientX || e.clientY) {<br \/>\n        xinxy.push(e.clientX + document.body.scrollLeft * 0);<br \/>\n        yinxy.push(e.clientY + document.body.scrollTop * 0);<br \/>\n       } else {<br \/>\n        xinxy.push(e.pageX + document.body.scrollLeft * 0);<br \/>\n        yinxy.push(e.pageY + document.body.scrollTop * 0);<br \/>\n       }<br \/>\n       var llsa=blurb.split(') (')[1];<br \/>\n       \/\/alert(blurb + ' ... ' + llsa);<br \/>\n       tllg=eval(llsa.split(',')[0]);<br \/>\n       tlla=eval(llsa.split(',')[1].split(')')[0]);<br \/>\n       brlg=eval(llsa.split('(')[1].split(',')[0]);<br \/>\n       brla=eval(llsa.split('(')[1].split(',')[1].split(')')[0]);<br \/>\n       thislong=eval(tllg + eval(eval(xinxy[eval(-1 + xinxy.length)] \/ screenwidth) * eval(screenlong)));<br \/>\n       thislat=eval(tlla - eval(eval(yinxy[eval(-1 + yinxy.length)] \/ screenheight) * eval(screenlat)));<br \/>\n       var nearbyfour=retnearest(thislong, thislat);<br \/>\n       var aatm='youllneverfindthis';<br \/>\n       var bbtm=String.fromCharCode(9);<br \/>\n       if (blurb.indexOf('Thanks to ') != -1) {<br \/>\n         if (blurb.split('Thanks to ')[1].indexOf(' ...') != -1) {<br \/>\n           bbtm='Thanks to ' + blurb.split('Thanks to ')[1].split(' ...')[0] + ' ...';<br \/>\n         }<br \/>\n       }<br \/>\n       if (blurb.indexOf(' and around the middle ') != -1) {<br \/>\n         aatm=' and around the middle ' + blurb.split(' and around the middle ')[1].split(')')[0] + ')';<br \/>\n       }<br \/>\n       var ourblurb=(blurb.replace(bbtm,'').replace('Currently top ','Top ').replace(' in terms of ',' as ').replace(aatm, '').replace(\/\\ and\\ \/g,' & ').replace('? ', '? ' + ' Nearest timezone place (via N) is ' + nearbyfour.split('|')[3] + ' at [' + nearbyfour.split('|')[0] + ',' + nearbyfour.split('|')[1] + '] to your clicked (via C) [' + thislong + ',' + thislat + '] ') + bbtm.replace(String.fromCharCode(9),'')).replace(String.fromCharCode(10),' ').replace(String.fromCharCode(10),' ').replace(String.fromCharCode(10),' ').replace(String.fromCharCode(10),' ');<br \/>\n       if (prevf.indexOf(',') != -1) {<br \/>\n         if (Math.abs(eval(prevf.split(',')[0]) - tllg) &lt;= 0.5) {<br \/>\n         prevf='' + prevone + ',' + prevtwo + ',' + prevthree + ',' + prevfour;<br \/>\n         }<br \/>\n         if (Math.abs(eval(prevf.split(',')[0]) - tllg) &gt; 0.5) {<br \/>\n       tllg=eval(prevf.split(',')[0]);<br \/>\n       tlla=eval(prevf.split(',')[1]);<br \/>\n       brlg=eval(prevf.split(',')[2]);<br \/>\n       brla=eval(prevf.split(',')[3]);<br \/>\n       var sthislong=eval(tllg + eval(eval(xinxy[eval(-1 + xinxy.length)] \/ screenwidth) * eval(screenlong)));<br \/>\n       var sthislat=eval(tlla - eval(eval(yinxy[eval(-1 + yinxy.length)] \/ screenheight) * eval(screenlat)));<br \/>\n       var snearbyfour=retnearest(sthislong, sthislat);<br \/>\n          \/\/alert(ourblurb + ' ' + prevf + ' vs ' + tllg + ' ... ' + Math.abs(eval(prevf.split(',')[0]) - tllg));<br \/>\n       ourblurb=ourblurb.replace('? ', '? ' + ' Nearest timezone place (via P) is ' + snearbyfour.split('|')[3] + ' at [' + snearbyfour.split('|')[0] + ',' + snearbyfour.split('|')[1] + '] to your clicked (via A) [' + sthislong + ',' + sthislat + '] ');<br \/>\n         }<br \/>\n        locans=prompt(ourblurb, defv);<br \/>\n       }<br \/>\n       if (locans != null) {<br \/>\n         if (locans.toUpperCase().trim() == 'N') {<br \/>\n           locans=locans.toUpperCase().replace('N', '[' + nearbyfour.split('|')[0] + ',' + nearbyfour.split('|')[1] + ']');<br \/>\n           plotplace.push(nearbyfour.split('|')[3]);<br \/>\n           plotcc.push(nearbyfour.split('|')[2]);<br \/>\n           plotlong.push(nearbyfour.split('|')[0]);<br \/>\n           plotlat.push(nearbyfour.split('|')[1]);<br \/>\n           <font color=blue>if (eval('' + nearbyfour.length) &gt; 4) {<br \/>\n           <br \/>\n           plottz.push(nearbyfour.split('|')[4]);<br \/>\n           plotct.push(nearbyfour.split('|')[5]);<br \/>\n           plotemj.push(nearbyfour.split('|')[6]);<br \/>\n<br \/>\n           } else {<br \/>\n           plottz.push('');<br \/>\n           plotct.push('');<br \/>\n           plotemj.push('');<br \/>\n           }<\/font><br \/>\n         } else if (locans.toUpperCase().trim() == 'C') {<br \/>\n           thisplace=' ';<br \/>\n           locans=locans.toUpperCase().replace('C', '[' + thislong + ',' + thislat + ']');<br \/>\n           plotplace.push('');<br \/>\n           plotcc.push(nearbyfour.split('|')[2]);<br \/>\n           plotlong.push(thislong);<br \/>\n           plotlat.push(thislat);<br \/>\n           <font color=blue>plotct.push('');<br \/>\n           plotemj.push('');<br \/>\n           plottz.push('');<\/font><br \/>\n         } else if (locans.toUpperCase().trim() == 'P') {<br \/>\n           locans=locans.toUpperCase().replace('P', '[' + snearbyfour.split('|')[0] + ',' + snearbyfour.split('|')[1] + ']');<br \/>\n           plotplace.push(snearbyfour.split('|')[3]);<br \/>\n           plotcc.push(snearbyfour.split('|')[2]);<br \/>\n           plotlong.push(snearbyfour.split('|')[0]);<br \/>\n           plotlat.push(snearbyfour.split('|')[1]);<br \/>\n           <font color=blue>if (eval('' + nearbyfour.length) &gt; 4) {<br \/>\n           <br \/>\n           plottz.push(nearbyfour.split('|')[4]);<br \/>\n           plotct.push(nearbyfour.split('|')[5]);<br \/>\n           plotemj.push(nearbyfour.split('|')[6]);<br \/>\n<br \/>\n           } else {<br \/>\n           plottz.push('');<br \/>\n           plotct.push('');<br \/>\n           plotemj.push('');<br \/>\n           }<\/font><br \/>\n         } else if (locans.toUpperCase().trim() == 'A') {<br \/>\n           thisplace='   ';<br \/>\n           locans=locans.toUpperCase().replace('A', '[' + sthislong + ',' + sthislat + ']');<br \/>\n           plotplace.push('');<br \/>\n           plotcc.push(snearbyfour.split('|')[2]);<br \/>\n           plotlong.push(sthislong);<br \/>\n           plotlat.push(sthislat);<br \/>\n           <font color=blue>plotct.push('');<br \/>\n           plotemj.push('');<br \/>\n           plottz.push('');<\/font><br \/>\n         } else if (eval('' + ('' + locans.trim()).length) &gt;= 3 && ('' + locans).indexOf(',') == -1 && yourtzlist.indexOf('\/' + ('' + locans.trim()).replace(\/\\ \/g,'_') + '&lt;') != -1) {<br \/>\n           thisplace=yourtzlist.split('\/' + ('' + locans.trim()).replace(\/\\ \/g,'_') + '&lt;')[0].split(' data-geo=\"')[eval(-1 + yourtzlist.split('\/' + ('' + locans.trim()).replace(\/\\ \/g,'_') + '&lt;')[0].split(' data-geo=\"').length)];<br \/>\n   \/\/alert(thisplace);<br \/>\n   <font color=blue><br \/>\n           udate=new Date();<br \/>\n           utcDate = new Date(udate.toLocaleString('en-US', { timeZone: 'UTC' }));<br \/>\n<br \/>\n           thatplace=thisplace.split('&gt;')[1].split('&lt;')[0].replace('GMT','UTC') + '\/' + locans;<br \/>\n    \/\/alert(thatplace);<br \/>\n          utzdate=new Date();<br \/>\n           tzDate = new Date(utzdate.toLocaleString('en-US', { timeZone: thatplace.replace('GMT','UTC').replace(\/\\ \/g,'_') }));<br \/>\n           extratz=',' + thatplace; \/\/.split('\/')[eval(-1 + iplacesarr[jk].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' ');<br \/>\n           xdate1=new Date().toLocaleString(\"en-US\", { timeZone: thatplace.replace('GMT','UTC').replace(\/\\ \/g,'_') });<br \/>\n           xextratztime=(',' + xdate1);<br \/>\n           plottz.push(thatplace);<br \/>\n           thatplace=thatplace.replace('GMT','Europe\/London').split('\/')[eval(-1 + thatplace.replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' ');<br \/>\n           xdiff = Math.abs(tzDate.getTime() - utcDate.getTime()) \/ 3600000;<br \/>\n           xextraemj=',' + clockit('' + xdiff);<br \/>\n           plotct.push('' + xdate1);<br \/>\n           plotemj.push(clockit('' + xdiff));<br \/>\n<\/font><br \/>\n           plotplace.push(yourtzlist.split(thisplace.split('&gt;')[0] + '&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/')[eval(-1 + yourtzlist.split(thisplace.split('&gt;')[0] + '&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' '));<br \/>\n           plotlong.push((thisplace.split(',')[1]));<br \/>\n           plotlat.push((thisplace.split(',')[0]));<br \/>\n           plotcc.push(thisplace.split(',')[3]);<br \/>\n     if (thisplace.split(',')[3] != '') {<br \/>\n         for (ijk=0; ijk&lt;iso_country_codes.length; ijk+=2) {<br \/>\n           if (iso_country_codes[ijk].toUpperCase() == thisplace.split(',')[3].toUpperCase()) {<br \/>\n             extras=', ' + iso_country_codes[eval(1 + ijk)];<br \/>\n             plotplace[eval(-1 + plotplace.length)]+=extras;<br \/>\n             extras='';<br \/>\n           }<br \/>\n         }<br \/>\n     }<br \/>\n     \/\/alert(extras + ' ... ' + locans);<br \/>\n           locans=locans.replace(locans.trim(), '[' + thisplace.split(',')[1] + ',' + thisplace.split(',')[0] + ',' + plotplace[eval(-1 + plotplace.length)] + extras + ']');<br \/>\n     \/\/alert(locans);<br \/>\n           thisplace='   ';<br \/>\n         } else if (eval('' + ('' + locans.trim()).length) &gt;= 3 && ('' + locans).indexOf(',') == -1 && yourtzlist.toUpperCase().indexOf('\/' + ('' + locans.trim()).toUpperCase().replace(\/\\ \/g,'_') + '&lt;') != -1) {<br \/>\n           thisplace=yourtzlist.toUpperCase().split('\/' + ('' + locans.trim()).toUpperCase().replace(\/\\ \/g,'_') + '&lt;')[0].split(' DATA-GEO=\"')[eval(-1 + yourtzlist.toUpperCase().split('\/' + ('' + locans.trim()).toUpperCase().replace(\/\\ \/g,'_') + '&lt;')[0].split(' DATA-GEO=\"').length)];<br \/>\n   \/\/alert(thisplace);<br \/>\n           <font color=blue>udate=new Date();<br \/>\n           utcDate = new Date(udate.toLocaleString('en-US', { timeZone: 'UTC' }));<br \/>\n<br \/>\n           thatplace=thisplace.split('&gt;')[1].split('&lt;')[0].replace('GMT','UTC') + '\/' + locans;<br \/>\n           utzdate=new Date();<br \/>\n           tzDate = new Date(utzdate.toLocaleString('en-US', { timeZone: thatplace.replace('GMT','UTC').replace(\/\\ \/g,'_') }));<br \/>\n           extratz=',' + thatplace; \/\/.split('\/')[eval(-1 + iplacesarr[jk].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' ');<br \/>\n           xdate1=new Date().toLocaleString(\"en-US\", { timeZone: thatplace.replace('GMT','UTC') });<br \/>\n           xextratztime=(',' + xdate1);<br \/>\n           plottz.push(thatplace);<br \/>\n           thatplace=thatplace.replace('GMT','Europe\/London').split('\/')[eval(-1 + thatplace.replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' ');<br \/>\n           xdiff = Math.abs(tzDate.getTime() - utcDate.getTime()) \/ 3600000;<br \/>\n           xextraemj=',' + clockit('' + xdiff);<br \/>\n           plotct.push('' + xdate1);<br \/>\n           plotemj.push(clockit('' + xdiff));<br \/>\n<\/font><br \/>\n           plotplace.push(yourtzlist.split(thisplace.split('&gt;')[0] + '&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/')[eval(-1 + yourtzlist.split(thisplace.split('&gt;')[0] + '&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' '));<br \/>\n           plotlong.push((thisplace.split(',')[1]));<br \/>\n           plotlat.push((thisplace.split(',')[0]));<br \/>\n           plotcc.push(thisplace.split(',')[3]);<br \/>\n     if (thisplace.split(',')[3] != '') {<br \/>\n         for (ijk=0; ijk&lt;iso_country_codes.length; ijk+=2) {<br \/>\n           if (iso_country_codes[ijk].toUpperCase() == thisplace.split(',')[3].toUpperCase()) {<br \/>\n             extras=', ' + iso_country_codes[eval(1 + ijk)];<br \/>\n             plotplace[eval(-1 + plotplace.length)]+=extras;<br \/>\n             extras='';<br \/>\n           }<br \/>\n         }<br \/>\n     }<br \/>\n     \/\/alert(extras + ' ... ' + locans);<br \/>\n           locans=locans.replace(locans.trim(), '[' + thisplace.split(',')[1] + ',' + thisplace.split(',')[0] + ',' + plotplace[eval(-1 + plotplace.length)] + extras + ']');<br \/>\n     \/\/alert(locans);<br \/>\n           thisplace='   ';<br \/>\n         } else if (eval('' + ('' + locans.trim()).length) == 2 && ('' + locans).indexOf(',') == -1 && yourtzlist.indexOf(',' + ('' + locans.trim()).toUpperCase() + ',') != -1) {<br \/>\n           thisplace=yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[0].split(' data-geo=\"')[eval(-1 + yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[0].split(' data-geo=\"').length)];<br \/>\n<font color=blue><br \/>\n           thatplace=yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[1].split('&gt;')[1].split('&lt;')[0].replace('GMT','UTC');<br \/>\n           utzdate=new Date();<br \/>\n           tzDate = new Date(utzdate.toLocaleString('en-US', { timeZone: thatplace.replace('GMT','UTC').replace(\/\\ \/g,'_') }));<br \/>\n           extratz=',' + thatplace; \/\/.split('\/')[eval(-1 + iplacesarr[jk].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' ');<br \/>\n           xdate1=new Date().toLocaleString(\"en-US\", { timeZone: thatplace.replace('GMT','UTC').replace(\/\\ \/g,'_') });<br \/>\n           xextratztime=(',' + xdate1);<br \/>\n           plottz.push(thatplace);<br \/>\n           thatplace=thatplace.replace('GMT','Europe\/London').split('\/')[eval(-1 + thatplace.replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' ');<br \/>\n           xdiff = Math.abs(tzDate.getTime() - utzdate.getTime()) \/ 3600000;<br \/>\n           xextraemj=',' + clockit('' + xdiff);<br \/>\n           plotct.push('' + xdate1);<br \/>\n           plotemj.push(clockit('' + xdiff));<br \/>\n<\/font><br \/>\n           plotplace.push(yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[1].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/')[eval(-1 + yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[1].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' '));<br \/>\n           plotlong.push((thisplace.split(',')[1]));<br \/>\n           plotlat.push((thisplace.split(',')[0]));<br \/>\n           plotcc.push(locans.trim());<br \/>\n     if (locans != '') {<br \/>\n         for (ijk=0; ijk&lt;iso_country_codes.length; ijk+=2) {<br \/>\n           if (iso_country_codes[ijk].toUpperCase() == locans.trim().toUpperCase()) {<br \/>\n             extras=', ' + iso_country_codes[eval(1 + ijk)];<br \/>\n             plotplace[eval(-1 + plotplace.length)]+=extras;<br \/>\n             extras='';<br \/>\n           }<br \/>\n         }<br \/>\n     }<br \/>\n           locans=locans.replace(locans.trim(), '[' + thisplace.split(',')[1] + ',' + thisplace.split(',')[0] + ',' + plotplace[eval(-1 + plotplace.length)] + extras + ']');<br \/>\n           thisplace='   ';<br \/>\n         } else if (eval('' + ('' + locans.trim()).length) &gt;= 3 && ('' + locans).indexOf(',') == -1 && iso_country_codes.indexOf(locans.trim()) != -1) {<br \/>\n   \/\/alert(iso_country_codes[eval(-1 + eval('' + iso_country_codes.indexOf(locans.trim())))].toUpperCase());<br \/>\n           if (yourtzlist.indexOf(',' + ('' + iso_country_codes[eval(-1 + eval('' + iso_country_codes.indexOf(locans.trim())))].toUpperCase()) + ',') != -1) {<br \/>\n           locans=locans.replace(locans.trim(), '' + iso_country_codes[eval(-1 + eval('' + iso_country_codes.indexOf(locans.trim())))]);<br \/>\n           thisplace=yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[0].split(' data-geo=\"')[eval(-1 + yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[0].split(' data-geo=\"').length)];<br \/>\n<font color=blue><br \/>\n           \/\/alert('thisplace=' + thisplace + ' and thatplace=' + thatplace);<br \/>\n           thatplace=yourtzlist.split(thisplace)[1].split('&gt;')[1].split('&lt;')[0].replace('GMT','UTC');<br \/>\n           \/\/alert('thisplace=' + thisplace + ' and thatplace=' + thatplace);<br \/>\n           utzdate=new Date();<br \/>\n           tzDate = new Date(utzdate.toLocaleString('en-US', { timeZone: thatplace.replace('GMT','UTC').replace(\/\\ \/g,'_') }));<br \/>\n           extratz=',' + thatplace; \/\/.split('\/')[eval(-1 + iplacesarr[jk].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' ');<br \/>\n           xdate1=new Date().toLocaleString(\"en-US\", { timeZone: thatplace.replace('GMT','UTC').replace(\/\\ \/g,'_') });<br \/>\n           xextratztime=(',' + xdate1);<br \/>\n           plottz.push(thatplace);<br \/>\n           thatplace=thatplace.replace('GMT','Europe\/London').split('\/')[eval(-1 + thatplace.replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' ');<br \/>\n           xdiff = Math.abs(tzDate.getTime() - utzdate.getTime()) \/ 3600000;<br \/>\n           xextraemj=',' + clockit('' + xdiff);<br \/>\n           plotct.push('' + xdate1);<br \/>\n           plotemj.push(clockit('' + xdiff));<br \/>\n<\/font><br \/>\n           plotplace.push(yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[1].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/')[eval(-1 + yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[1].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' '));<br \/>\n           plotlong.push((thisplace.split(',')[1]));<br \/>\n           plotlat.push((thisplace.split(',')[0]));<br \/>\n           plotcc.push(locans.trim());<br \/>\n     if (locans != '') {<br \/>\n         for (ijk=0; ijk&lt;iso_country_codes.length; ijk+=2) {<br \/>\n           if (iso_country_codes[ijk].toUpperCase() == locans.trim().toUpperCase()) {<br \/>\n             extras=', ' + iso_country_codes[eval(1 + ijk)];<br \/>\n             plotplace[eval(-1 + plotplace.length)]+=extras;<br \/>\n             extras='';<br \/>\n           }<br \/>\n         }<br \/>\n     }<br \/>\n           locans=locans.replace(locans.trim(), '[' + thisplace.split(',')[1] + ',' + thisplace.split(',')[0] + ',' + plotplace[eval(-1 + plotplace.length)] + extras + ']');<br \/>\n           thisplace='   ';<br \/>\n           } else if (locans.trim() != '' && locans.trim() != locans) {<br \/>\n           locans=locans.replace(locans.trim(), '');<br \/>\n         } else {<br \/>\n           locans=null;<br \/>\n         }<br \/>\n         } else if (eval('' + ('' + locans.trim()).length) &gt;= 3 && ('' + locans).indexOf(',') == -1 && uc_iso_country_codes.indexOf(locans.trim().toUpperCase()) != -1) {<br \/>\n   \/\/alert(iso_country_codes[eval(-1 + eval('' + uc_iso_country_codes.indexOf(locans.trim())))].toUpperCase());<br \/>\n           if (yourtzlist.indexOf(',' + iso_country_codes[eval(-1 + uc_iso_country_codes.indexOf(locans.trim().toUpperCase()))].toUpperCase() + ',') != -1) {<br \/>\n           locans=locans.replace(locans.trim(), '' + iso_country_codes[eval(-1 + eval('' + uc_iso_country_codes.indexOf(locans.trim().toUpperCase())))]);<br \/>\n           thisplace=yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[0].split(' data-geo=\"')[eval(-1 + yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[0].split(' data-geo=\"').length)];<br \/>\n<font color=blue><br \/>\n           thatplace=thisplace.split('&gt;')[1].split('&lt;')[0].replace('GMT','UTC');<br \/>\n           utzdate=new Date();<br \/>\n           tzDate = new Date(utzdate.toLocaleString('en-US', { timeZone: thatplace.replace('GMT','UTC').replace(\/\\ \/g,'_') }));<br \/>\n           extratz=',' + thatplace; \/\/.split('\/')[eval(-1 + iplacesarr[jk].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' ');<br \/>\n           xdate1=new Date().toLocaleString(\"en-US\", { timeZone: thatplace.replace('GMT','UTC').replace(\/\\ \/g,'_') });<br \/>\n           xextratztime=(',' + xdate1);<br \/>\n           plottz.push(thatplace);<br \/>\n           thatplace=thatplace.replace('GMT','Europe\/London').split('\/')[eval(-1 + thatplace.replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' ');<br \/>\n           xdiff = Math.abs(tzDate.getTime() - utzdate.getTime()) \/ 3600000;<br \/>\n           xextraemj=',' + clockit('' + xdiff);<br \/>\n           plotct.push('' + xdate1);<br \/>\n           plotemj.push(clockit('' + xdiff));<br \/>\n<\/font><br \/>\n           plotplace.push(yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[1].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/')[eval(-1 + yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[1].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' '));<br \/>\n           plotlong.push((thisplace.split(',')[1]));<br \/>\n           plotlat.push((thisplace.split(',')[0]));<br \/>\n           plotcc.push(locans.trim());<br \/>\n     if (locans != '') {<br \/>\n         for (ijk=0; ijk&lt;iso_country_codes.length; ijk+=2) {<br \/>\n           if (iso_country_codes[ijk].toUpperCase() == locans.trim().toUpperCase()) {<br \/>\n             extras=', ' + iso_country_codes[eval(1 + ijk)];<br \/>\n             plotplace[eval(-1 + plotplace.length)]+=extras;<br \/>\n             extras='';<br \/>\n           }<br \/>\n         }<br \/>\n     }<br \/>\n           locans=locans.replace(locans.trim(), '[' + thisplace.split(',')[1] + ',' + thisplace.split(',')[0] + ',' + plotplace[eval(-1 + plotplace.length)] + extras + ']');<br \/>\n           thisplace='   ';<br \/>\n           } else if (locans.trim() != '' && locans.trim() != locans) {<br \/>\n           locans=locans.replace(locans.trim(), '');<br \/>\n         } else {<br \/>\n           locans=null;<br \/>\n         }<br \/>\n         } else if (('' + locans).indexOf(',') != -1 && ('' + locans).indexOf('[') != -1) {<br \/>\n           thisplace='  ';<br \/>\n           if (eval('' + locans.replace('(','').replace(')','').replace('[','').replace(']','').split(',').length) &gt; 2) {<br \/>\n           plotplace.push(locans.replace(locans.split(',')[0] + ',' + locans.split(',')[1] + ',', '').replace('(','').replace(')','').replace('[','').replace(']',''));<br \/>\n           thisplace=locans.replace(locans.split(',')[0] + ',' + locans.split(',')[1] + ',', '').replace('(','').replace(')','').replace('[','').replace(']','') + ' ';<br \/>\n           } else {<br \/>\n           plotplace.push('');<br \/>\n           }<br \/>\n           plotcc.push('');<br \/>\n           plotlong.push(locans.replace('(','').replace(')','').replace('[','').replace(']','').split(',')[0]);<br \/>\n           plotlat.push(locans.replace('(','').replace(')','').replace('[','').replace(']','').split(',')[1]);<br \/>\n           <font color=blue>plotct.push('');<br \/>\n           plotemj.push('');<br \/>\n           plottz.push('');<\/font><br \/>\n         } else if (('' + locans).indexOf(',') != -1 && ('' + locans).indexOf('.') != -1) {<br \/>\n           thisplace='   ';<br \/>\n           if (eval('' + locans.replace('(','').replace(')','').replace('[','').replace(']','').split(',').length) &gt; 2) {<br \/>\n           plotplace.push(locans.replace(locans.split(',')[0] + ',' + locans.split(',')[1] + ',', '').replace('(','').replace(')','').replace('[','').replace(']',''));<br \/>\n           thisplace=locans.replace(locans.split(',')[0] + ',' + locans.split(',')[1] + ',', '').replace('(','').replace(')','').replace('[','').replace(']','') + '  ';<br \/>\n           } else {<br \/>\n           plotplace.push('');<br \/>\n           }<br \/>\n           plotcc.push('');<br \/>\n           plotlong.push(locans.replace('(','').replace(')','').replace('[','').replace(']','').split(',')[0]);<br \/>\n           plotlat.push(locans.replace('(','').replace(')','').replace('[','').replace(']','').split(',')[1]);<br \/>\n           <font color=blue>plotct.push('');<br \/>\n           plotemj.push('');<br \/>\n           plottz.push('');<\/font><br \/>\n         } else if (locans.trim() != '' && locans.trim() != locans) {<br \/>\n           locans=locans.replace(locans.trim(), '');<br \/>\n         } else {<br \/>\n           locans=null;<br \/>\n         }<br \/>\n       }<br \/>\n       <br \/>\n       movesallowed=true;<br \/>\n       return locans;<br \/>\n  }<br \/>\n  <br \/>\n  function orflag(thiscc) {<br \/>\n      var ccchar='', ccsuff='';<br \/>\n      var lri='ABCDEFGHIJKLMNOPQRSTUVWXYZ';<br \/>\n      var dri=['127462','127463','127464','127465','127466','127467','127468','127469','127470','127471','127472','127473','127474','127475','127476','127477','127478','127479','127480','127481','127482','127483','127484','127485','127486','127487'];<br \/>\n      for (var iccsuff=0; iccsuff&lt;thiscc.length; iccsuff++) {<br \/>\n        ccchar=thiscc.substring(iccsuff, eval(1 + eval('' + iccsuff))).toUpperCase();<br \/>\n        ccsuff+=String.fromCodePoint(eval('' + dri[eval('' + lri.indexOf(ccchar))])); \/\/'&#' + dri[eval('' + lri.indexOf(ccchar))] + ';';<br \/>\n      }<br \/>\n      return ccsuff;<br \/>\n  }<br \/>\n<\/code><\/p>\n<p> &#8230; referencing three new <i>when<\/i> &#8220;collectables&#8221; &#8230;<\/p>\n<ol>\n<li>var plottz=[];  \/\/ contains a TimeZone name<\/li>\n<li>var plotct=[];  \/\/ contains a current datetime timestamp<\/li>\n<li>var plotemj=[]; \/\/ contains a current datetime clockemoji of nearest relevance<\/li>\n<\/ol>\n<p> &#8230; <font color=blue>now used<\/font> in an amended plotting span element innerHTML (used to be <i>plotplace[iplot]<\/i>) &#8220;wrapper&#8221; (now using <font color=blue>doplotplace(iplot)<\/font>) &#8230;<\/p>\n<p><code><br \/>\n  function doplotplace(ipl) {<br \/>\n    <font color=blue>if (plotcc[ipl].trim() && plottz[ipl].trim() != '') {<br \/>\n      return plotplace[ipl] + ' ' + orflag(plotcc[ipl]) + '<br \/>' + plotct[ipl] + '<br \/>' + plotemj[ipl];<br \/>\n    }<\/font><br \/>\n    return plotplace[ipl];<br \/>\n  }<br \/>\n<\/code><\/p>\n<p> &#8230; in <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html----GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html----GETME\" rel=\"noopener\">fifth draft<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html\" title='Click picture' rel=\"noopener\">Earth Scanner<\/a> web application.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/earth-scanner-timezone-tutorial\/' rel=\"noopener\">Earth Scanner TimeZone Tutorial<\/a>.<\/p-->\n<hr>\n<p id='espt'>Previous relevant <a target=\"_blank\" title='Earth Scanner Places Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/earth-scanner-places-tutorial\/' rel=\"noopener\">Earth Scanner Places Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Earth Scanner Places Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner_places.gif\" title=\"Earth Scanner Places Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Earth Scanner Places Tutorial<\/p><\/div>\n<p>So far, with our Earth Scanner web application from the day before yesterday&#8217;s <a title='Earth Scanner Lines Tutorial' href='#eslt'>Earth Scanner Lines Tutorial<\/a>, it had a pretty passive modus operandi.   On a plane or on television or some other &#8220;just watching&#8221; scenario that suits, but we&#8217;d like to offer more regarding value adding &#8230;<\/p>\n<ul>\n<li>new Place plotting functionality that the user has real-time control over via onclick logic reaching a &#8230;<\/li>\n<li>Javascript prompt window<\/li>\n<\/ul>\n<p data-idea='hashtagging'> &#8230; and into the future we have another idea regarding how this operates.<\/p>\n<p>So today, though, we change how that Javascript prompt window&#8217;s &#8220;blurb&#8221; is constructed, and how the user answer is analyzed, because, today, we&#8217;ve added in &#8230;<\/p>\n<p><code><br \/>\nPHP inspired <a target=\"_blank\" title='PHP TimeZone list' href='http:\/\/php.net\/manual\/en\/timezones.php' rel=\"noopener\">TimeZone<\/a> place lookup logic within the Javascript code<br \/>\n<\/code><\/p>\n<p>Of course not all places are TimeZone places, and we&#8217;ll see how that goes into the future?!<\/p>\n<p>We funnelled the Javascript prompt window logic into a new &#8220;wrapper style&#8221; Javascript inhouse function &#8230;<\/p>\n<p><code><br \/>\n  function ourprompt(e, blurb, defv) {<br \/>\n       var locans=null, ijk=0, extras='';<br \/>\n       if (eval(uc_iso_country_codes.length) == 0) {<br \/>\n          for (ijk=0; ijk&lt;iso_country_codes.length; ijk++) {<br \/>\n            uc_iso_country_codes.push(iso_country_codes[ijk].toUpperCase());<br \/>\n          }<br \/>\n       }<br \/>\n       e = e || window.event;<br \/>\n       e.preventDefault();<br \/>\n       if (e.touches) {<br \/>\n       if (e.touches[0].pageX) {<br \/>\n       xinxy.push(eval(e.touches[0].pageX + document.body.scrollLeft * 0) * 1);<br \/>\n       yinxy.push(eval(e.touches[0].pageY + document.body.scrollTop * 0) * 1);<br \/>\n       } else {<br \/>\n       xinxy.push(eval(e.touches[0].clientX + document.body.scrollLeft * 0) * 1);<br \/>\n       yinxy.push(eval(e.touches[0].clientY + document.body.scrollTop * 0) * 1);<br \/>\n       }<br \/>\n       } else if (e.clientX || e.clientY) {<br \/>\n        xinxy.push(e.clientX + document.body.scrollLeft * 0);<br \/>\n        yinxy.push(e.clientY + document.body.scrollTop * 0);<br \/>\n       } else {<br \/>\n        xinxy.push(e.pageX + document.body.scrollLeft * 0);<br \/>\n        yinxy.push(e.pageY + document.body.scrollTop * 0);<br \/>\n       }<br \/>\n       var llsa=blurb.split(') (')[1];<br \/>\n       \/\/alert(blurb + ' ... ' + llsa);<br \/>\n       tllg=eval(llsa.split(',')[0]);<br \/>\n       tlla=eval(llsa.split(',')[1].split(')')[0]);<br \/>\n       brlg=eval(llsa.split('(')[1].split(',')[0]);<br \/>\n       brla=eval(llsa.split('(')[1].split(',')[1].split(')')[0]);<br \/>\n       thislong=eval(tllg + eval(eval(xinxy[eval(-1 + xinxy.length)] \/ screenwidth) * eval(screenlong)));<br \/>\n       thislat=eval(tlla - eval(eval(yinxy[eval(-1 + yinxy.length)] \/ screenheight) * eval(screenlat)));<br \/>\n       var nearbyfour=retnearest(thislong, thislat);<br \/>\n       var aatm='youllneverfindthis';<br \/>\n       var bbtm=String.fromCharCode(9);<br \/>\n       if (blurb.indexOf('Thanks to ') != -1) {<br \/>\n         if (blurb.split('Thanks to ')[1].indexOf(' ...') != -1) {<br \/>\n           bbtm='Thanks to ' + blurb.split('Thanks to ')[1].split(' ...')[0] + ' ...';<br \/>\n         }<br \/>\n       }<br \/>\n       if (blurb.indexOf(' and around the middle ') != -1) {<br \/>\n         aatm=' and around the middle ' + blurb.split(' and around the middle ')[1].split(')')[0] + ')';<br \/>\n       }<br \/>\n       var ourblurb=(blurb.replace(bbtm,'').replace('Currently top ','Top ').replace(' in terms of ',' as ').replace(aatm, '').replace(\/\\ and\\ \/g,' & ').replace('? ', '? ' + ' Nearest timezone place (via N) is ' + nearbyfour.split('|')[3] + ' at [' + nearbyfour.split('|')[0] + ',' + nearbyfour.split('|')[1] + '] to your clicked (via C) [' + thislong + ',' + thislat + '] ') + bbtm.replace(String.fromCharCode(9),'')).replace(String.fromCharCode(10),' ').replace(String.fromCharCode(10),' ').replace(String.fromCharCode(10),' ').replace(String.fromCharCode(10),' ');<br \/>\n       if (prevf.indexOf(',') != -1) {<br \/>\n         if (Math.abs(eval(prevf.split(',')[0]) - tllg) &lt;= 0.5) {<br \/>\n         prevf='' + prevone + ',' + prevtwo + ',' + prevthree + ',' + prevfour;<br \/>\n         }<br \/>\n         if (Math.abs(eval(prevf.split(',')[0]) - tllg) &gt; 0.5) {<br \/>\n       tllg=eval(prevf.split(',')[0]);<br \/>\n       tlla=eval(prevf.split(',')[1]);<br \/>\n       brlg=eval(prevf.split(',')[2]);<br \/>\n       brla=eval(prevf.split(',')[3]);<br \/>\n       var sthislong=eval(tllg + eval(eval(xinxy[eval(-1 + xinxy.length)] \/ screenwidth) * eval(screenlong)));<br \/>\n       var sthislat=eval(tlla - eval(eval(yinxy[eval(-1 + yinxy.length)] \/ screenheight) * eval(screenlat)));<br \/>\n       var snearbyfour=retnearest(sthislong, sthislat);<br \/>\n          \/\/alert(ourblurb + ' ' + prevf + ' vs ' + tllg + ' ... ' + Math.abs(eval(prevf.split(',')[0]) - tllg));<br \/>\n       ourblurb=ourblurb.replace('? ', '? ' + ' Nearest timezone place (via P) is ' + snearbyfour.split('|')[3] + ' at [' + snearbyfour.split('|')[0] + ',' + snearbyfour.split('|')[1] + '] to your clicked (via A) [' + sthislong + ',' + sthislat + '] ');<br \/>\n         }<br \/>\n        locans=prompt(ourblurb, defv);<br \/>\n       }<br \/>\n       if (locans != null) {<br \/>\n         if (locans.toUpperCase().trim() == 'N') {<br \/>\n           locans=locans.toUpperCase().replace('N', '[' + nearbyfour.split('|')[0] + ',' + nearbyfour.split('|')[1] + ']');<br \/>\n           plotplace.push(nearbyfour.split('|')[3]);<br \/>\n           plotcc.push(nearbyfour.split('|')[2]);<br \/>\n           plotlong.push(nearbyfour.split('|')[0]);<br \/>\n           plotlat.push(nearbyfour.split('|')[1]);<br \/>\n         } else if (locans.toUpperCase().trim() == 'C') {<br \/>\n           thisplace=' ';<br \/>\n           locans=locans.toUpperCase().replace('C', '[' + thislong + ',' + thislat + ']');<br \/>\n           plotplace.push('');<br \/>\n           plotcc.push(nearbyfour.split('|')[2]);<br \/>\n           plotlong.push(thislong);<br \/>\n           plotlat.push(thislat);<br \/>\n         } else if (locans.toUpperCase().trim() == 'P') {<br \/>\n           locans=locans.toUpperCase().replace('P', '[' + snearbyfour.split('|')[0] + ',' + snearbyfour.split('|')[1] + ']');<br \/>\n           plotplace.push(snearbyfour.split('|')[3]);<br \/>\n           plotcc.push(snearbyfour.split('|')[2]);<br \/>\n           plotlong.push(snearbyfour.split('|')[0]);<br \/>\n           plotlat.push(snearbyfour.split('|')[1]);<br \/>\n         } else if (locans.toUpperCase().trim() == 'A') {<br \/>\n           thisplace='   ';<br \/>\n           locans=locans.toUpperCase().replace('A', '[' + sthislong + ',' + sthislat + ']');<br \/>\n           plotplace.push('');<br \/>\n           plotcc.push(snearbyfour.split('|')[2]);<br \/>\n           plotlong.push(sthislong);<br \/>\n           plotlat.push(sthislat);<br \/>\n         } else if (eval('' + ('' + locans.trim()).length) &gt;= 3 && ('' + locans).indexOf(',') == -1 && yourtzlist.toUpperCase().indexOf('\/' + ('' + locans.trim()).toUpperCase().replace(\/\\ \/g,'_') + '&lt;') != -1) {<br \/>\n           thisplace=yourtzlist.toUpperCase().split('\/' + ('' + locans.trim()).toUpperCase().replace(\/\\ \/g,'_') + '&lt;')[0].split(' DATA-GEO=\"')[eval(-1 + yourtzlist.toUpperCase().split('\/' + ('' + locans.trim()).toUpperCase().replace(\/\\ \/g,'_') + '&lt;')[0].split(' DATA-GEO=\"').length)];<br \/>\n   \/\/alert(thisplace);<br \/>\n           plotplace.push(yourtzlist.split(thisplace.split('&gt;')[0] + '&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/')[eval(-1 + yourtzlist.split(thisplace.split('&gt;')[0] + '&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' '));<br \/>\n           plotlong.push((thisplace.split(',')[1]));<br \/>\n           plotlat.push((thisplace.split(',')[0]));<br \/>\n           plotcc.push(thisplace.split(',')[3]);<br \/>\n     if (thisplace.split(',')[3] != '') {<br \/>\n         for (ijk=0; ijk&lt;iso_country_codes.length; ijk+=2) {<br \/>\n           if (iso_country_codes[ijk].toUpperCase() == thisplace.split(',')[3].toUpperCase()) {<br \/>\n             extras=', ' + iso_country_codes[eval(1 + ijk)];<br \/>\n             plotplace[eval(-1 + plotplace.length)]+=extras;<br \/>\n             extras='';<br \/>\n           }<br \/>\n         }<br \/>\n     }<br \/>\n     \/\/alert(extras + ' ... ' + locans);<br \/>\n           locans=locans.replace(locans.trim(), '[' + thisplace.split(',')[1] + ',' + thisplace.split(',')[0] + ',' + plotplace[eval(-1 + plotplace.length)] + extras + ']');<br \/>\n     \/\/alert(locans);<br \/>\n           thisplace='   ';<br \/>\n         } else if (eval('' + ('' + locans.trim()).length) == 2 && ('' + locans).indexOf(',') == -1 && yourtzlist.indexOf(',' + ('' + locans.trim()).toUpperCase() + ',') != -1) {<br \/>\n           thisplace=yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[0].split(' data-geo=\"')[eval(-1 + yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[0].split(' data-geo=\"').length)];<br \/>\n           plotplace.push(yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[1].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/')[eval(-1 + yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[1].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' '));<br \/>\n           plotlong.push((thisplace.split(',')[1]));<br \/>\n           plotlat.push((thisplace.split(',')[0]));<br \/>\n           plotcc.push(locans.trim());<br \/>\n     if (locans != '') {<br \/>\n         for (ijk=0; ijk&lt;iso_country_codes.length; ijk+=2) {<br \/>\n           if (iso_country_codes[ijk].toUpperCase() == locans.trim().toUpperCase()) {<br \/>\n             extras=', ' + iso_country_codes[eval(1 + ijk)];<br \/>\n             plotplace[eval(-1 + plotplace.length)]+=extras;<br \/>\n             extras='';<br \/>\n           }<br \/>\n         }<br \/>\n     }<br \/>\n           locans=locans.replace(locans.trim(), '[' + thisplace.split(',')[1] + ',' + thisplace.split(',')[0] + ',' + plotplace[eval(-1 + plotplace.length)] + extras + ']');<br \/>\n           thisplace='   ';<br \/>\n         } else if (eval('' + ('' + locans.trim()).length) &gt;= 3 && ('' + locans).indexOf(',') == -1 && iso_country_codes.indexOf(locans.trim()) != -1) {<br \/>\n   \/\/alert(iso_country_codes[eval(-1 + eval('' + iso_country_codes.indexOf(locans.trim())))].toUpperCase());<br \/>\n           if (yourtzlist.indexOf(',' + ('' + iso_country_codes[eval(-1 + eval('' + iso_country_codes.indexOf(locans.trim())))].toUpperCase()) + ',') != -1) {<br \/>\n           locans=locans.replace(locans.trim(), '' + iso_country_codes[eval(-1 + eval('' + iso_country_codes.indexOf(locans.trim())))]);<br \/>\n           thisplace=yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[0].split(' data-geo=\"')[eval(-1 + yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[0].split(' data-geo=\"').length)];<br \/>\n           plotplace.push(yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[1].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/')[eval(-1 + yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[1].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' '));<br \/>\n           plotlong.push((thisplace.split(',')[1]));<br \/>\n           plotlat.push((thisplace.split(',')[0]));<br \/>\n           plotcc.push(locans.trim());<br \/>\n     if (locans != '') {<br \/>\n         for (ijk=0; ijk&lt;iso_country_codes.length; ijk+=2) {<br \/>\n           if (iso_country_codes[ijk].toUpperCase() == locans.trim().toUpperCase()) {<br \/>\n             extras=', ' + iso_country_codes[eval(1 + ijk)];<br \/>\n             plotplace[eval(-1 + plotplace.length)]+=extras;<br \/>\n             extras='';<br \/>\n           }<br \/>\n         }<br \/>\n     }<br \/>\n           locans=locans.replace(locans.trim(), '[' + thisplace.split(',')[1] + ',' + thisplace.split(',')[0] + ',' + plotplace[eval(-1 + plotplace.length)] + extras + ']');<br \/>\n           thisplace='   ';<br \/>\n           } else if (locans.trim() != '' && locans.trim() != locans) {<br \/>\n           locans=locans.replace(locans.trim(), '');<br \/>\n         } else {<br \/>\n           locans=null;<br \/>\n         }<br \/>\n         } else if (eval('' + ('' + locans.trim()).length) &gt;= 3 && ('' + locans).indexOf(',') == -1 && uc_iso_country_codes.indexOf(locans.trim().toUpperCase()) != -1) {<br \/>\n   \/\/alert(iso_country_codes[eval(-1 + eval('' + uc_iso_country_codes.indexOf(locans.trim())))].toUpperCase());<br \/>\n           if (yourtzlist.indexOf(',' + iso_country_codes[eval(-1 + uc_iso_country_codes.indexOf(locans.trim().toUpperCase()))].toUpperCase() + ',') != -1) {<br \/>\n           locans=locans.replace(locans.trim(), '' + iso_country_codes[eval(-1 + eval('' + uc_iso_country_codes.indexOf(locans.trim().toUpperCase())))]);<br \/>\n           thisplace=yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[0].split(' data-geo=\"')[eval(-1 + yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[0].split(' data-geo=\"').length)];<br \/>\n           plotplace.push(yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[1].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/')[eval(-1 + yourtzlist.split(',' + ('' + locans.trim()).toUpperCase() + ',')[1].split('&gt;')[1].split('&lt;')[0].replace('GMT','Europe\/London').split('\/').length)].replace(\/\\_\/g,' '));<br \/>\n           plotlong.push((thisplace.split(',')[1]));<br \/>\n           plotlat.push((thisplace.split(',')[0]));<br \/>\n           plotcc.push(locans.trim());<br \/>\n     if (locans != '') {<br \/>\n         for (ijk=0; ijk&lt;iso_country_codes.length; ijk+=2) {<br \/>\n           if (iso_country_codes[ijk].toUpperCase() == locans.trim().toUpperCase()) {<br \/>\n             extras=', ' + iso_country_codes[eval(1 + ijk)];<br \/>\n             plotplace[eval(-1 + plotplace.length)]+=extras;<br \/>\n             extras='';<br \/>\n           }<br \/>\n         }<br \/>\n     }<br \/>\n           locans=locans.replace(locans.trim(), '[' + thisplace.split(',')[1] + ',' + thisplace.split(',')[0] + ',' + plotplace[eval(-1 + plotplace.length)] + extras + ']');<br \/>\n           thisplace='   ';<br \/>\n           } else if (locans.trim() != '' && locans.trim() != locans) {<br \/>\n           locans=locans.replace(locans.trim(), '');<br \/>\n         } else {<br \/>\n           locans=null;<br \/>\n         }<br \/>\n         } else if (('' + locans).indexOf(',') != -1 && ('' + locans).indexOf('[') != -1) {<br \/>\n           thisplace='  ';<br \/>\n           if (eval('' + locans.replace('(','').replace(')','').replace('[','').replace(']','').split(',').length) &gt; 2) {<br \/>\n           plotplace.push(locans.replace(locans.split(',')[0] + ',' + locans.split(',')[1] + ',', '').replace('(','').replace(')','').replace('[','').replace(']',''));<br \/>\n           thisplace=locans.replace(locans.split(',')[0] + ',' + locans.split(',')[1] + ',', '').replace('(','').replace(')','').replace('[','').replace(']','') + ' ';<br \/>\n           } else {<br \/>\n           plotplace.push('');<br \/>\n           }<br \/>\n           plotcc.push('');<br \/>\n           plotlong.push(locans.replace('(','').replace(')','').replace('[','').replace(']','').split(',')[0]);<br \/>\n           plotlat.push(locans.replace('(','').replace(')','').replace('[','').replace(']','').split(',')[1]);<br \/>\n         } else if (('' + locans).indexOf(',') != -1 && ('' + locans).indexOf('.') != -1) {<br \/>\n           thisplace='   ';<br \/>\n           if (eval('' + locans.replace('(','').replace(')','').replace('[','').replace(']','').split(',').length) &gt; 2) {<br \/>\n           plotplace.push(locans.replace(locans.split(',')[0] + ',' + locans.split(',')[1] + ',', '').replace('(','').replace(')','').replace('[','').replace(']',''));<br \/>\n           thisplace=locans.replace(locans.split(',')[0] + ',' + locans.split(',')[1] + ',', '').replace('(','').replace(')','').replace('[','').replace(']','') + '  ';<br \/>\n           } else {<br \/>\n           plotplace.push('');<br \/>\n           }<br \/>\n           plotcc.push('');<br \/>\n           plotlong.push(locans.replace('(','').replace(')','').replace('[','').replace(']','').split(',')[0]);<br \/>\n           plotlat.push(locans.replace('(','').replace(')','').replace('[','').replace(']','').split(',')[1]);<br \/>\n         } else if (locans.trim() != '' && locans.trim() != locans) {<br \/>\n           locans=locans.replace(locans.trim(), '');<br \/>\n         } else {<br \/>\n           locans=null;<br \/>\n         }<br \/>\n       }<br \/>\n     <br \/> <br \/>\n       movesallowed=true;<br \/>\n       return locans;<br \/>\n  }<br \/>\n<\/code><\/p>\n<p> &#8230; as the best way to get into how this happens in <a title='Earth Scanner Primer Tutorial' href='#espt'>Earth Scanner Primer Tutorial<\/a>, in <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html--GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html---GETME\" rel=\"noopener\">fourth draft<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html\" title='Click picture' rel=\"noopener\">Earth Scanner<\/a> web application.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/earth-scanner-places-tutorial\/' rel=\"noopener\">Earth Scanner Places Tutorial<\/a>.<\/p-->\n<hr>\n<p id='eslt'>Previous relevant <a target=\"_blank\" title='Earth Scanner Lines Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/earth-scanner-lines-tutorial\/' rel=\"noopener\">Earth Scanner Lines Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Earth Scanner Lines Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner_lines.jpg\" title=\"Earth Scanner Lines Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Earth Scanner Lines Tutorial<\/p><\/div>\n<p>Not everybody is a geography buff.  But I&#8217;d say more people attended primary school than are geography buffs.  And those people may have seen World Maps on the wall, and they were often Mercator Projection maps featuring the usual country and sea boundaries, as well as useful reference lines &#8230;<\/p>\n<ul>\n<li>lines of latitude, including, in between top &#8220;North Pole&#8221; 90&deg; N and &#8220;South Pole&#8221; 90&deg; S bottom &#8230;\n<ol>\n<li>Arctic Circle 66&deg; 34&#8242; N<\/li>\n<li>Tropic of Cancer 23&deg; 26&#8242; N<\/li>\n<li>Equator 0&deg;<\/li>\n<li>Tropic of Capricorn 23&deg; 26&#8242; S<\/li>\n<li>Antarctic Circle 66&deg; 34&#8242; S<\/li>\n<\/ol>\n<\/li>\n<li>meridians of longitude (only the Equator above, is as long as <font size=1>&#8230; and in the &#8220;Go Figure, Mercator&#8221; realms, the North Pole and South Pole are each of zero length, in &#8220;non-projection land&#8221;<\/font>), including &#8230;\n<ol>\n<li>Greenwich Meridian 0&deg;<\/li>\n<li>International Date Line 180&deg; (but in practice, broken up so as not to confuse regarding timezones for some Pacific island countries)<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<p> &#8230; that become useful as you scan your way around Earth, further to yesterday&#8217;s <a title='Earth Scanner Primer Tutorial' href='#espt'>Earth Scanner Primer Tutorial<\/a>, in <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html-GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html-GETME\" rel=\"noopener\">second draft<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html\" title='Click picture' rel=\"noopener\">Earth Scanner<\/a> web application.<\/p>\n<p><b><i>Stop Press<\/i><\/b><\/p>\n<p>Couple of points to note &#8230;<\/p>\n<ol>\n<li>the linework is just hr (Horizontal rule) elements, which are not the challenge either horizontally or vertically, regarding linework, that any diagon<a target=\"_blank\" title=\"?\" href='https:\/\/www.youtube.com\/watch?v=PjgJZCKaVdI' rel=\"noopener\">ali<\/a>ty brings &#8230;<\/p>\n<li>the matter of screen width and screen height, which we need to know precisely for the work above, can be more involved to calculate on mobile platforms &#8230; we ended up, with great help from <a target=\"_blank\" title='Useful link' href='https:\/\/stackoverflow.com\/questions\/50690191\/window-innerheight-returning-wrong-value-in-ios-11' rel=\"noopener\">this useful link<\/a>, with this Javascript code &#8230;<br \/>\n<code><br \/>\n  var screenwidth=screen.width, screenheight=screen.height;<br \/>\n  <br \/>\n  var wasthisso='';<br \/>\n  if (navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i)) {<br \/>\n  try {<br \/>\n  wasthisso=('' + window.orientation).replace(\/^0$\/g, 'portrait'); \/\/\"portrait\";<br \/>\n  } catch (ehgfg) {<br \/>\n  wasthisso='';<br \/>\n  }<br \/>\n  if (wasthisso == '') {<br \/>\n  try {<br \/>\n  wasthisso='' + screen.orientation.type; \/\/\"portrait\";<br \/>\n  } catch (hgfg) {<br \/>\n  wasthisso=('' + window.orientation).replace(\/^0$\/g, 'portrait'); \/\/\"portrait\";<br \/>\n  }<br \/>\n  }<br \/>\n  \/\/alert(wasthisso);<br \/>\n  var hdone=false;<br \/>\n  if (wasthisso.indexOf('ortrait') != -1) { \/\/ thanks to https:\/\/stackoverflow.com\/questions\/50690191\/window-innerheight-returning-wrong-value-in-ios-11<br \/>\n    if (eval('0' + document.documentElement.clientWidth) &gt;= eval('0' + window.innerWidth)) {<br \/>\n    screenwidth=eval('' + document.documentElement.clientWidth);<br \/>\n    screenheight=eval('' + document.documentElement.clientHeight);<br \/>\n    hdone=true;<br \/>\n    } else {<br \/>\n    screenwidth=window.innerWidth;<br \/>\n    }<br \/>\n    if (!hdone) {<br \/>\n    if (eval('0' + document.documentElement.clientHeight) &gt; eval('0' + window.innerHeight)) {<br \/>\n    screenheight=eval('' + document.documentElement.clientHeight);<br \/>\n    } else {<br \/>\n    screenheight=window.innerHeight;<br \/>\n    }<br \/>\n    }<br \/>\n  } else {<br \/>\n    if (eval('0' + document.documentElement.clientWidth) &gt;= eval('0' + window.innerHeight)) {<br \/>\n    screenwidth=eval('' + document.documentElement.clientWidth);<br \/>\n    screenheight=eval('' + document.documentElement.clientHeight);<br \/>\n    hdone=true;<br \/>\n    } else {<br \/>\n    screenwidth=window.innerHeight;<br \/>\n    }<br \/>\n    if (!hdone) {<br \/>\n    if (eval('0' + document.documentElement.clientHeight) &gt; eval('0' + window.innerWidth)) {<br \/>\n    screenheight=eval('' + document.documentElement.clientHeight);<br \/>\n    } else {<br \/>\n    screenheight=window.innerWidth;<br \/>\n    }<br \/>\n    }<br \/>\n  }<br \/>\n \/\/ alert(wasthisso + ' ' + screenwidth + 'x' + screenheight);<br \/>\n            if (1 == 6) {<br \/>\n            documentURL=documentURL + '&nolines=y';<br \/>\n            if (documentURL.indexOf('.html') != -1) {<br \/>\n              location.href=document.URL.replace('.html','.htm');<br \/>\n            }<br \/>\n            }<br \/>\n  }<br \/>\n<\/code><br \/>\n &#8230; in <a title='Earth Scanner Primer Tutorial' href='#espt'>Earth Scanner Primer Tutorial<\/a>, in <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html--GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html--GETME\" rel=\"noopener\">third draft<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html\" title='Click picture' rel=\"noopener\">Earth Scanner<\/a> web application\n<\/li>\n<\/ol>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/earth-scanner-lines-tutorial\/' rel=\"noopener\">Earth Scanner Lines Tutorial<\/a>.<\/p-->\n<hr>\n<p id='espt'>Previous relevant <a target=\"_blank\" title='Earth Scanner Primer Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/earth-scanner-primer-tutorial\/' rel=\"noopener\">Earth Scanner Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Earth Scanner Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.gif\" title=\"Earth Scanner Primer Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Earth Scanner Primer Tutorial<\/p><\/div>\n<p>Today we&#8217;ve got for you a tutorial that takes bits and pieces from &#8230;<\/p>\n<ul>\n<li>&#8220;Just Javascript&#8221; (ie. no body element to speak of as you begin) &#8230; ref: <a target=\"_blank\" href='https:\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-iphone-debugging-tutorial\/' title='Just Javascript Card Game iPhone Debugging Tutorial' rel=\"noopener\">Just Javascript Card Game iPhone Debugging Tutorial<\/a><\/li>\n<li>&#8220;CSS Property clip-path&#8221; &#8230; ref: <a target=\"_blank\" href='https:\/\/www.rjmprogramming.com.au\/ITblog\/region-picker-area-of-interest-tutorial\/' title='Region Picker Area of Interest' rel=\"noopener\">Region Picker Area of Interest<\/a><\/li>\n<li>&#8220;GeoJson&#8221; especially regarding reverse engineering on the Mercator projection &#8230; ref: <a target=\"_blank\" href='https:\/\/www.rjmprogramming.com.au\/ITblog\/google-chart-image-chart-map-chart-geojson-onclick-tutorial\/' title='Google Chart Image Chart Map Chart GeoJson Onclick Tutorial' rel=\"noopener\">Google Chart Image Chart Map Chart GeoJson Onclick Tutorial<\/a><\/li>\n<li>&#8220;One Image Website&#8221; regarding scrolling and images bigger than screen &#8230; ref: <a target=\"_blank\" title='One Image Website Scrolling Position Fix Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/one-image-website-scrolling-position-fix-tutorial\/' rel=\"noopener\">One Image Website Scrolling Position Fix Tutorial <\/a><\/li>\n<li>&#8220;CSS keyframes Animation&#8221; &#8230; ref: <a target=\"_blank\" href='https:\/\/www.rjmprogramming.com.au\/ITblog\/css-grid-column-animation-tutorial\/' title='CSS Grid Column Animation Tutorial' rel=\"noopener\">CSS Grid Column Animation Tutorial<\/a><\/li>\n<\/ul>\n<p> &#8230; so as to create a new &#8220;Earth Scanner&#8221; web application in what we like to think of as &#8220;the <i>where<\/i> of life&#8221; realms.<\/p>\n<p>In essence this Earth Scanner is pretty simple, so below you can see a first draft, &#8220;holus bolus&#8221; &#8230;<\/p>\n<p><code><br \/>\n&lt;html&gt;<br \/>\n&lt;head&gt;<br \/>\n&lt;title&gt;Earth Scanner - RJM Programming - February, 2024 ... Thanks to https:\/\/github.com\/nvkelso\/natural-earth-raster\/blob\/master\/50m_rasters\/HYP_50M_SR_W\/HYP_50M_SR_W.README.html&lt;\/title&gt;<br \/>\n&lt;style&gt;<br \/>\n #myimg {<br \/>\n   clip-path: circle(2% at 800px 700px);<br \/>\n   animation:mymove 5s infinite;<br \/>\n   -webkit-animation:mymove 5s infinite; \/* Safari and Chrome *\/<br \/>\n}<br \/>\n<br \/>\n@keyframes mymove<br \/>\n{<br \/>\n  0%   { clip-path: circle(2% at 0px 0px) }<br \/>\n  100% { clip-path: circle(16% at 140px 140px) }<br \/>\n}<br \/>\n<br \/>\n@-webkit-keyframes mymove \/* Safari and Chrome *\/<br \/>\n{<br \/>\n  0%   { clip-path: circle(2% at 0px 0px) }<br \/>\n  100% { clip-path: circle(16% at 140px 140px) }<br \/>\n}<br \/>\n&lt;\/style&gt;<br \/>\n&lt;script type=text\/javascript&gt;<br \/>\n\/\/ Deemed unnecessary is ...<br \/>\n\/\/  7%   { clip-path: circle(3% at 10px 10px) }<br \/>\n\/\/  14%  { clip-path: circle(4% at 20px 20px) }<br \/>\n\/\/  21%  { clip-path: circle(5% at 30px 30px) }<br \/>\n\/\/  28%  { clip-path: circle(6% at 40px 40px) }<br \/>\n\/\/  35%  { clip-path: circle(7% at 50px 50px) }<br \/>\n\/\/  42%  { clip-path: circle(8% at 60px 60px) }<br \/>\n\/\/  50%  { clip-path: circle(9% at 70px 70px) }<br \/>\n\/\/  57%  { clip-path: circle(10% at 80px 80px) }<br \/>\n\/\/  64%  { clip-path: circle(11% at 90px 90px) }<br \/>\n\/\/  71%  { clip-path: circle(12% at 100px 100px) }<br \/>\n\/\/  78%  { clip-path: circle(13% at 110px 110px) }<br \/>\n\/\/  85%  { clip-path: circle(14% at 120px 120px) }<br \/>\n\/\/  93%  { clip-path: circle(15% at 130px 130px) }<br \/>\n<br \/>\n  var xp=0, yp=0, num=0;<br \/>\n  var fixkeys='&lt;style&gt; #myimg {  animation:mymove 5s infinite; -webkit-animation:mymove 5s infinite; } @keyframes mymove' + document.head.innerHTML.split('@keyframes mymove')[1].split('&lt;\/style&gt;')[0] + ' &lt;\/style&gt;';<br \/>\n  var screenlong=-9, screenlat=-9, askfor=null, enforcedlong=false, enforcedxp=-999;<br \/>\n  <br \/>\n  function scmove() {<br \/>\n    var longforce='-999', latforce='-999';<br \/>\n    if (screenlong &lt; 0) {<br \/>\n      screenlong=eval(360 * screen.width \/ document.getElementById('myimg').width);<br \/>\n      screenlat=eval(180 * screen.height \/ document.getElementById('myimg').height);<br \/>\n      document.getElementById('myimg').onclick=function() {  askfor=prompt('Earth Scanner - RJM Programming - February, 2024 ... ' + String.fromCharCode(10) + 'Thanks to https:\/\/github.com\/nvkelso\/natural-earth-raster\/blob\/master\/50m_rasters\/HYP_50M_SR_W\/HYP_50M_SR_W.README.html ... ' + String.fromCharCode(10) + 'Currently top left of screen is (Longitude,Latitude) ' + '(' + eval(-180 + xp * 360 \/ 100) + ',' + eval(90 - yp * 180 \/ 100) + ') and bottom right is (' + eval(-180 + screenlong + xp * 360 \/ 100) + ',' + eval(90 - screenlat - yp * 180 \/ 100) + ') and in the middle is (' + eval(-180 + eval(screenlong \/ 2) + xp * 360 \/ 100) + ',' + eval(90 - eval(screenlat \/ 2) - yp * 180 \/ 100) + ').' + String.fromCharCode(10) + 'Where do you want middle of screen to be in terms of Longitude,Latitude?', ''); };<br \/>\n    }<br \/>\n    \/\/document.title=\"window.scrollTo(\" + eval(xp * eval('' + document.getElementById('myimg').width) \/ 100) + \",\" + eval(yp * eval('' + document.getElementById('myimg').height) \/ 100) + \")\";<br \/>\n    if (askfor != null) {<br \/>\n       if (askfor.replace('(','').replace(')','').indexOf(',') != -1) {<br \/>\n         longforce=askfor.replace('(','').replace(')','').split(',')[0];<br \/>\n         latforce=askfor.replace('(','').replace(')','').split(',')[1];<br \/>\n       } else if (askfor.replace('(','').replace(')','').indexOf(' ') != -1) {<br \/>\n         longforce=askfor.replace('(','').replace(')','').split(' ')[0];<br \/>\n         latforce=askfor.replace('(','').replace(')','').split(' ')[1];<br \/>\n       }<br \/>\n       \/\/xp = eval(((eval(eval('' + longforce) + 180) \/ 360) * eval('' + document.getElementById('myimg').width) \/ 100) - 0 * eval(eval(screenlong \/ 720) * eval('' + document.getElementById('myimg').width) \/ 100));<br \/>\n       \/\/yp = eval(((eval(90 - eval('' + latforce)) \/ 180) * eval('' + document.getElementById('myimg').height) \/ 100) + 0 * eval(eval(screenlat \/ 360) * eval('' + document.getElementById('myimg').height) \/ 100));<br \/>\n       xp = eval(eval(eval('' + longforce) - screenlong \/ 2 + 180) \/ 3.60); \/\/ * eval('' + document.getElementById('myimg').width) \/ 100) - 0 * eval(eval(screenlong \/ 720) * eval('' + document.getElementById('myimg').width) \/ 100));<br \/>\n       yp = eval(eval(90 - eval('' + latforce) - screenlat \/ 2) \/ 1.80); \/\/ * eval('' + document.getElementById('myimg').height) \/ 100) + 0 * eval(eval(screenlat \/ 360) * eval('' + document.getElementById('myimg').height) \/ 100));<br \/>\n       \/\/alert('' + xp + ',' + yp + ' ... ' + \"window.scrollTo(\" + eval(xp * eval('' + document.getElementById('myimg').width) \/ 100) + \",\" + eval(yp * eval('' + document.getElementById('myimg').height) \/ 100) + \")\");<br \/>\n       askfor=null;<br \/>\n       if (enforcedlong) {<br \/>\n          enforcedlong=false;<br \/>\n          enforcedxp=xp;<br \/>\n          \/\/alert(xp + ' or ' + enforcedxp);<br \/>\n       }<br \/>\n    }<br \/>\n    eval(\"window.scrollTo(\" + eval((enforcedxp &gt; -990 ? enforcedxp : xp) * eval('' + document.getElementById('myimg').width) \/ 100) + \",\" + eval(yp * eval('' + document.getElementById('myimg').height) \/ 100) + \")\");<br \/>\n    document.getElementById('myimg').title='Earth Scanner - RJM Programming - February, 2024 ... ' + 'Thanks to https:\/\/github.com\/nvkelso\/natural-earth-raster\/blob\/master\/50m_rasters\/HYP_50M_SR_W\/HYP_50M_SR_W.README.html ... ' + String.fromCharCode(10) + String.fromCharCode(10) + 'Top left of screen is (Longitude,Latitude) ' + '(' + eval(-180 + (enforcedxp &gt; -990 ? enforcedxp : xp) * 360 \/ 100) + ',' + eval(90 - yp * 180 \/ 100) + ') and bottom right is (' + eval(-180 + screenlong + (enforcedxp &gt; -990 ? enforcedxp : xp) * 360 \/ 100) + ',' + eval(90 - screenlat - yp * 180 \/ 100) + ') and in the middle is (' + eval(-180 + eval(screenlong \/ 2) + (enforcedxp &gt; -990 ? enforcedxp : xp) * 360 \/ 100) + ',' + eval(90 - eval(screenlat \/ 2) - yp * 180 \/ 100) + ')';<br \/>\n    document.title=document.getElementById('myimg').title; \/\/'Top left of screen is (Longitude,Latitude) ' + '(' + eval(-180 + xp * 360 \/ 100) + ',' + eval(90 - yp * 180 \/ 100) + ') and bottom right is (' + eval(-180 + screenlong + (enforcedxp &gt; -990 ? enforcedxp : xp) * 360 \/ 100) + ',' + eval(90 - screenlat - yp * 180 \/ 100) + ') and in the middle is (' + eval(-180 + eval(screenlong \/ 2) + (enforcedxp &gt; -990 ? enforcedxp : xp) * 360 \/ 100) + ',' + eval(90 - eval(screenlat \/ 2) - yp * 180 \/ 100) + ')';<br \/>\n    if (xp &lt; 95) {<br \/>\n      xp+=5;<br \/>\n    } else if (yp &gt;= 95 && xp &gt;= 95) {<br \/>\n      enforcedxp=-999;<br \/>\n      xp=0;<br \/>\n      yp=0;<br \/>\n    } else {<br \/>\n      yp+=5;<br \/>\n      xp=0;<br \/>\n    }<br \/>\n    var xdiff=eval((enforcedxp &gt; -990 ? enforcedxp : xp) * eval('' + document.getElementById('myimg').width) \/ 100);<br \/>\n    var ydiff=eval(yp * eval('' + document.getElementById('myimg').height) \/ 100);<br \/>\n    var startkeys=fixkeys;<br \/>\n    var coords=fixkeys.split('px');<br \/>\n    for (var ic=0; ic&lt;coords.length; ic+=2) {<br \/>\n      if (coords[ic].split(' ')[eval(-1 + coords[ic].split(' ').length)].indexOf('&lt;') == -1) {<br \/>\n      \/\/alert('' + xdiff + ',' + ydiff+ ',' + coords[ic].split(' ')[eval(-1 + coords[ic].split(' ').length)]);<br \/>\n      startkeys=startkeys.replace(' ' + coords[ic].split(' ')[eval(-1 + coords[ic].split(' ').length)] + 'px', ' ' + eval(xdiff + eval('' + coords[ic].split(' ')[eval(-1 + coords[ic].split(' ').length)])) + 'px');<br \/>\n      startkeys=startkeys.replace(' ' + coords[eval(1 + ic)].split(' ')[eval(-1 + coords[eval(1 + ic)].split(' ').length)] + 'px', ' ' + eval(ydiff + eval('' + coords[eval(1 + ic)].split(' ')[eval(-1 + coords[eval(1 + ic)].split(' ').length)])) + 'px');<br \/>\n      }<br \/>\n    }<br \/>\n    \/\/alert(startkeys);<br \/>\n    document.getElementById('dstyle').innerHTML=startkeys; \/\/.replace(\/mymove\/g, 'mymove' + num);<br \/>\n    num++;<br \/>\n  }<br \/>\n  <br \/>\n  setInterval(scmove, 5000);<br \/>\n  document.write(\"&lt;img src='\/HTMLCSS\/HYP_50M_SR_W.jpg' id=myimg&gt;&lt;\/img&gt;&lt;div id=dstyle&gt;&lt;\/div&gt;\");<br \/>\n  var latis=location.search.split('latitude=')[1] ? decodeURIComponent(location.search.split('latitude=')[1].split('&')[0]) : '';<br \/>\n  var longis=location.search.split('longitude=')[1] ? decodeURIComponent(location.search.split('longitude=')[1].split('&')[0]) : '';<br \/>\n  if (latis != '' && longis != '') {<br \/>\n    askfor='' + longis + ',' + latis;<br \/>\n  } else if (latis != '') {<br \/>\n    askfor='-168,' + latis;<br \/>\n  } else if (longis != '') {<br \/>\n    enforcedlong=true;<br \/>\n    askfor='' + longis + ',70';<br \/>\n  }<br \/>\n&lt;\/script&gt;<br \/>\n&lt;\/head&gt;<br \/>\n&lt;body&gt;<br \/>\n&lt;\/body&gt;<br \/>\n&lt;\/html&gt;<br \/>\n<\/code><\/p>\n<p> &#8230; with great thanks to <a target=\"_blank\" title='Great link, thanks' href='https:\/\/github.com\/nvkelso\/natural-earth-raster\/blob\/master\/50m_rasters\/HYP_50M_SR_W\/HYP_50M_SR_W.README.html' rel=\"noopener\">this great resource<\/a> as the crucial image in <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html_GETME\" rel=\"noopener\">our first draft<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html\" title='Click picture' rel=\"noopener\">Earth Scanner<\/a> web application.<\/p>\n<p>Please note using it, it does have <i>onclick<\/i> logic to specify &#8230;<\/p>\n<ul>\n<li>your own (longitude, latitude) to send the middle of the screen&#8217;s content to<\/li>\n<li>at the address bar &#8230;<br \/>\n<code><br \/>\n<a target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html?latitude=-33&#038;longitude=151\" rel=\"noopener\">https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html?latitude=-33&longitude=151# Can center you around Sydney Australia<\/a><br \/>\n<a target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html?latitude=0\" rel=\"noopener\">https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html?latitude=0# Can take you, first up, on a tour around the equator in the middle of the screen<\/a><br \/>\n<a target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html?longitude=0\" rel=\"noopener\">https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/earth_scanner.html?longitude=0# Can take you, first up, on a tour down the zero meridian of longitude past London's Greenwich in the middle of the screen<\/a><br \/>\n<\/code><\/p>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d62639' onclick='var dv=document.getElementById(\"d62639\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/where\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d62639' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d62645' onclick='var dv=document.getElementById(\"d62645\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/meridian\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d62645' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d62679' onclick='var dv=document.getElementById(\"d62679\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/timezone\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d62679' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d62685' onclick='var dv=document.getElementById(\"d62685\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/timestamp\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d62685' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d62691' onclick='var dv=document.getElementById(\"d62691\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/hashtag\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d62691' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d62701' onclick='var dv=document.getElementById(\"d62701\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/leg\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d62701' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d62727' onclick='var dv=document.getElementById(\"d62727\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/audio\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d62727' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Quite often within the I.T. wooooorrrrrllllddd it is when we have an idea that is &#8230; Just a Bit of Fun &#8230; more than likely &#8230; this is code for &#8230; it will end up being difficult to achieve &#8230; &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/making-of-earth-scanner-legs-tutorial\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,14,37],"tags":[1669,84,4667,4666,103,113,1989,3520,4658,218,3533,4367,281,322,354,2447,385,3192,4665,481,482,4198,2969,4664,2229,557,2770,576,590,599,652,2016,675,4672,3116,684,2795,4675,2598,4662,719,3337,3326,745,748,760,772,4663,3226,795,4282,861,864,889,4677,2134,2918,2362,954,4656,3409,997,1029,1038,4146,4147,3119,1917,1107,4671,4668,1200,3043,2834,1693,1311,4676,4669,4670,1319,1369,2579,2580,3098,1493],"class_list":["post-62727","post","type-post","status-publish","format-standard","hentry","category-elearning","category-event-driven-programming","category-tutorials","tag-address-bar","tag-animation-2","tag-antarctic-circle","tag-arctic-circle","tag-array","tag-audio","tag-autoplay","tag-blog-post","tag-clip-path","tag-code","tag-comma","tag-comma-separated-list","tag-css","tag-device","tag-dom","tag-earth","tag-emoji","tag-emoji-flag","tag-equator","tag-geographicals","tag-geography","tag-geojson","tag-google-directions","tag-greenwich-meridian","tag-hash","tag-hashtag","tag-horizontal-rule","tag-html","tag-image","tag-img","tag-javascript","tag-karaoke","tag-keyframes","tag-land","tag-landscape","tag-latitude","tag-leg","tag-legs","tag-line","tag-lines","tag-longitude","tag-making-of","tag-mantissa","tag-map","tag-mapping","tag-media","tag-mercator","tag-meridian","tag-mixed-content","tag-mobile","tag-north-pole","tag-onclick","tag-one-image-website","tag-orientation","tag-patsy-gallant","tag-place","tag-placename","tag-play","tag-plot","tag-pole","tag-portrait","tag-programming","tag-realtime","tag-reference","tag-screen-height","tag-screen-width","tag-screen-orientation","tag-scroll","tag-scrolling","tag-sea","tag-south-pole","tag-stop-press","tag-terrestrial","tag-timestamp","tag-timezone","tag-trip","tag-trip-leg","tag-tropic-of-cancer","tag-tropic-of-capricorn","tag-tutorial","tag-video","tag-when","tag-where","tag-wrapper","tag-youtube"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/62727"}],"collection":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/comments?post=62727"}],"version-history":[{"count":19,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/62727\/revisions"}],"predecessor-version":[{"id":67712,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/62727\/revisions\/67712"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=62727"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=62727"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=62727"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}