{"id":52394,"date":"2021-05-31T03:01:43","date_gmt":"2021-05-30T17:01:43","guid":{"rendered":"http:\/\/www.rjmprogramming.com.au\/ITblog\/?p=52394"},"modified":"2021-06-05T20:43:15","modified_gmt":"2021-06-05T10:43:15","slug":"just-javascript-card-game-mid-ux-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-mid-ux-tutorial\/","title":{"rendered":"Just Javascript Card Game Mid-UX Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=04.1:ara\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game Mid-UX Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_midux.jpg\" title=\"Just Javascript Card Game Mid-UX Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game Mid-UX Tutorial<\/p><\/div>\n<p>Apropos yesterday&#8217;s <a title='Just Javascript Card Game SVG Background Data URL Tutorial' href='#jjcgsvgbdurlt'>Just Javascript Card Game SVG Background Data URL Tutorial<\/a> dive into aesthetics and non-essentials, we venture into some &#8220;mid-ux&#8221; work today &#8230;<\/p>\n<blockquote><p>\nMid-UX?  What&#8217;s that?\n<\/p><\/blockquote>\n<p>To our mind it&#8217;s that Clayton UX (user experience) improvement push you do before the end, regarding annoyances that have inevitably been irking the programmer as a project develops, and you try to satisfy the various platforms, and you&#8217;ve neglected parts of the functionality as you move <font size=1>(hopefully, mostly)<\/font> forward.<\/p>\n<p><p>We gathered our &#8220;mid-ux&#8221; thoughts into &#8220;self-emails&#8221; &#8230;<\/p>\n<blockquote><p>\nSelf-emails?  What&#8217;s that?\n<\/p><\/blockquote>\n<p>To our mind emailing to yourself project tweaks is our main work related reminder mechanism, especially regarding the smaller matters of a project which can perhaps fester for a while but good to note down for a future fix.<\/p>\n<p>So see this in <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-----------------------------------------------------GETME\" title=\"cards_usefocus.html\">the &#8220;JSON&#8221; tweaked<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-----------------------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-card-game-mid-ux-tutorial\/'>Just Javascript Card Game Mid-UX Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjcgsvgbdurlt'>Previous relevant <a target=_blank title='Just Javascript Card Game SVG Background Data URL Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-svg-background-data-url-tutorial\/'>Just Javascript Card Game SVG Background Data URL 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\/cards_usefocus.html?card_memories=04.1:ara\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game SVG Background Data URL Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_back.jpg\" title=\"Just Javascript Card Game Card Game SVG Background Data URL Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game SVG Background Data URL Tutorial<\/p><\/div>\n<p>We turn back to styling and aesthetics with our 500 and bridge and memories card game &#8220;Just Javascript&#8221; (ie. no body definition on parent window) web application onto the audio and language work of yesterday&#8217;s <a title='Just Javascript Card Game Say My Memory ISO 639-3 PHP JSON Tutorial' href='#jjcgsmmiso639-3phpjsont'>Just Javascript Card Game Say My Memory ISO 639-3 PHP JSON Tutorial<\/a> &#8230;<\/p>\n<p>We wanted to make it easier for the hoster of 500 or bridge card games to know by what shows graphically on the screen that they are playing cards <font size=1>&#8230; not much to ask &#8230; eh&#8217; wot guv&#8217;?<\/font><\/p>\n<p>We started off wondering whether our rjmprogramming.com.au image for the card back can display as a background image for the SVG data we have going as CSS html{} background data.  It did not work, so we asked &#8230;<\/p>\n<p><code><br \/>\n<a target=_blank title='svg style background:url does not work' href='https:\/\/www.google.com\/search?q=svg+style+background%3Aurl+does+not+work&#038;rlz=1C5CHFA_enAU832AU832&#038;oq=svg+style+background%3Aurl+does+not+work&#038;aqs=chrome..69i57.12895j0j4&#038;sourceid=chrome&#038;ie=UTF-8'>svg style background:url does not work<\/a><br \/>\n<\/code><\/p>\n<p> &#8230; and it got us to understand that we needed to convert that rjmprogramming.com.au image into a data URL, and so we wondered &#8230;<\/p>\n<p><code><br \/>\n<a target=_blank title='image file to data-uri not using canvas' href='https:\/\/www.google.com\/search?q=image+file+to+data-uri+not+using+canvas&#038;rlz=1C5CHFA_enAU832AU832&#038;oq=image+file+to+data-uri+not+using+canvas&#038;aqs=chrome..69i57.10537j0j4&#038;sourceid=chrome&#038;ie=UTF-8'>image file to data-uri not using canvas<\/a><br \/>\n<\/code><\/p>\n<p> &#8230; and yes, often the &#8220;online wooooorrrrrrlllldddd&#8221; <font size=1>(of course)<\/font> has the answers, which we based some code on, thanks, as per &#8230;<\/p>\n<p><code><br \/>\n  var xmlHTTP=null, dataURL='', backis=\"\/\/www.rjmprogramming.com.au\/images\/back01.gif\", bpmoredone=0;<br \/>\n<br \/> <br \/>\n  function atstartdo() {  \/\/ thanks to <a target=_blank title='Useful link, thanks' href='https:\/\/gist.github.com\/oliyh\/db3d1a582aefe6d8fee9'>https:\/\/gist.github.com\/oliyh\/db3d1a582aefe6d8fee9<\/a><br \/>\n   xmlHTTP=new XMLHttpRequest();<br \/>\n xmlHTTP.open('GET', \"\/\/www.rjmprogramming.com.au\/images\/back01.gif\", true);<br \/>\n xmlHTTP.responseType = 'arraybuffer';<br \/>\n xmlHTTP.onload = function(e) {<br \/>\n  var arr = new Uint8Array(this.response);<br \/>\n  var raw = String.fromCharCode.apply(null,arr);<br \/>\n  var b64 = btoa(raw); \/\/base64.encode(raw);<br \/>\n  dataURL=\"data:image\/gif;base64,\" + b64;<br \/>\n  if (bpmoredone == -1) { bpmoredone=1; document.head.innerHTML+=bpmore(defstyle); }<br \/>\n };<br \/>\n xmlHTTP.send();<br \/>\n  }<br \/>\n<\/code><\/p>\n<p>Given all this, basically what we had to do in the Javascript &#8220;bpmore&#8221; function that &#8220;custom displays&#8221; the data useful &#8220;defstyle&#8221; var<font size=1>iable<\/font> is to replace relevant CSS &#8220;background-color:rgba(255,0,0,0.1);&#8221; (type) styling with CSS &#8220;background-size:cover;background-image:url([dataURI-as-above]);&#8221; styling, and to change the &#8220;fill&#8221; and &#8220;stroke&#8221; text properties to be colours that stand out in front of the darkish blue of this &#8220;back of playing card&#8221; imagery.<\/p>\n<p>See this in <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html----------------------------------------------------GETME\" title=\"cards_usefocus.html\">the &#8220;JSON&#8221; tweaked<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html----------------------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-card-game-svg-background-data-url-tutorial\/'>Just Javascript Card Game SVG Background Data URL Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjcgsmmiso639-3phpjsont'>Previous relevant <a target=_blank title='Just Javascript Card Game Say My Memory ISO 639-3 PHP JSON Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-say-my-memory-iso-639-3-php-json-tutorial\/'>Just Javascript Card Game Say My Memory ISO 639-3 PHP JSON 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\/cards_usefocus.html?card_memories=04.1:ara\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game Say My Memory ISO 639-3 PHP JSON Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_json_php.jpg\" title=\"Just Javascript Card Game Say My Memory ISO 639-3 PHP JSON Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game Say My Memory ISO 639-3 PHP JSON Tutorial<\/p><\/div>\n<p>Afficianardos of server side languages such as PHP are bound to tell you a few things &#8230;<\/p>\n<ul>\n<li>PHP is great at making Javascript look smarter than it is, as it can feed Javascript information ahead of it in the &#8220;production line&#8221; of showing you a webpage<\/li>\n<li>PHP and Javascript are both great &#8220;action&#8221; languages<\/li>\n<li>PHP and Javascript can both achieve the same ends in many respects, just at a different timeframe, as previously mentioned<\/li>\n<\/ul>\n<p> &#8230; and so, today, as a thought bubble for your imaginative juices we set up a way for PHP&#8217;s equivalent of <a target=_blank title='JSON.parse' href='https:\/\/www.w3schools.com\/js\/js_json_parse.asp'>JSON.parse<\/a>([JSON string])) called <a target=_blank title='json_decode' href='https:\/\/www.php.net\/manual\/en\/function.json-decode.php'>json_decode<\/a>([JSON string])) be used in a way to achieve similar ends to yesterday&#8217;s ends <font size=1>&#8230; and maybe even its starts<\/font>.<\/p>\n<p>At the <font color=blue>PHP end<\/font> &#8230;<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\nif (isset($_GET['jsonback'])) { \/\/ thanks to https:\/\/iso639-3.sil.org\/code_tables\/download_tables<br \/>\n    $recdelim=\"\";<br \/>\n    $fields=[\"Id\", \"Part2B\", \"Part2T\", \"Part1\", \"Scope\", \"Type\", \"Ref_Name\", \"Comment\"];<br \/>\n    $line_template='{\"' . $fields[0] . '\": \"\"}';<br \/>\n    $json_template=\"[]\";<br \/>\n    for ($ihjg=1; $ihjg&lt;sizeof($fields); $ihjg++) {<br \/>\n      $line_template=str_replace(\"}\", ', \"' . $fields[$ihjg] . '\": \"\"}', $line_template);<br \/>\n    }<br \/>\n    $lines=explode(\"\\n\", $threedata);<br \/>\n    for ($ihjg=0; $ihjg&lt;sizeof($lines); $ihjg++) {<br \/>\n      $lflds=explode(\"\\t\", $lines[$ihjg]);<br \/>\n      $thisline=$line_template;<br \/>\n      for ($jhjg=0; $jhjg&lt;sizeof($lflds); $jhjg++) {<br \/>\n        if ($lflds[0] != \"Id\") {<br \/>\n          $thisline=str_replace($fields[$jhjg] . '\": \"\"', $fields[$jhjg] . '\": \"' . $lflds[$jhjg] . '\"', $thisline);<br \/>\n        }<br \/>\n      }<br \/>\n      if ($thisline != $line_template) {<br \/>\n        $json_template=str_replace(\"]\", $recdelim . $thisline . \"]\", $json_template);<br \/>\n        $recdelim=\",\";<br \/>\n      }<br \/>\n    }<br \/>\n    <font color=blue>if (isset($_GET['isothreel'])) {  \/\/ thanks to https:\/\/iso639-3.sil.org\/code_tables\/download_tables<br \/>\n      $jnis=json_decode($json_template);<br \/>\n      $threeis=str_replace(\"+\",\" \",urldecode($_GET['isothreel']));<br \/>\n      for ($inis=0; $inis&lt;sizeof($jnis); $inis++) {<br \/>\n        if (strtolower($jnis[$inis]-&gt;Id) == strtolower($threeis)) {<br \/>\n          if (strlen('' . $jnis[$inis]-&gt;Part1) == 2) {<br \/>\n            echo strtolower($jnis[$inis]-&gt;Part1);<br \/>\n            exit;<br \/>\n          }<br \/>\n        }<br \/>\n      }<br \/>\n      echo $json_template;<br \/>\n    } else {<\/font><br \/>\n      echo $json_template;<br \/>\n    <font color=blue>}<\/font><br \/>\n    exit;<br \/>\n  }<br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p> &#8230; and using this PHP at the <font color=purple>Javascript end<\/font> &#8230;<\/p>\n<p><code><br \/>\n  <font color=purple>var precursor='';<\/font><br \/>\n<br \/>\n  if (document.URL.indexOf('scoresuffix=') != -1 && decodeURIComponent(document.URL).indexOf('04.0') != -1) {<br \/>\n  nominal_numplayers = '04.0';<br \/>\n  if (decodeURIComponent(document.URL).indexOf(':') == -1) { lmore=':en_AU'; }<br \/>\n  } else if (document.URL.indexOf('scoresuffix=') != -1 && decodeURIComponent(document.URL).indexOf('04.1') != -1) {<br \/>\n  nominal_numplayers = '04.1';<br \/>\n  if (decodeURIComponent(document.URL).indexOf(':') == -1) { lmore=':en_AU'; }<br \/>\n  } else {<br \/>\n  \/\/nominal_numplayers = (document.URL.replace('?','&').indexOf('&card') != -1) ? prompt('How many players in ' + document.URL.replace('?','&').split('&card')[1].split('&')[0].split('#')[0].split('=')[0].replace(\/\\_\/g,' ').trim().substring(0,1).toUpperCase() + document.URL.replace('?','&').split('&card')[1].split('&')[0].split('#')[0].split('=')[0].replace(\/\\_\/g,' ').trim().substring(1).toLowerCase() + ' card game (if Zebra (ie. with cross colour match) prefix answer by + & if Any Colour (ie. just with same colour) prefix answer by -) & suffix by .0 for hybrid 500 card game (.1 for bridge) (or 04.0 (04.1 for bridge) for 4 player bidding version & optionally comma delimit email\/SMS addresses\/numbers ( eg. 04.0,Robert Metcalfe[rmetcalfe15@gmail.com; rmetcalfe41@gmail.com], RMet[rmetcalfe15@gmail.com], RM[rmetcalfe41@gmail.com], R.M[rmetcalfe41@gmail.com] ) & for lack of suit following use space at end, else \"turn away\" popups)?', (location.search.split('card_memories=')[1] ? (decodeURIComponent(location.search.split('card_memories=')[1] + '~').split('&')[0]).toLowerCase().split('a')[0].split('b')[0].split('c')[0].split('d')[0].split('e')[0].split('f')[0].split('g')[0].split('h')[0].split('i')[0].split('j')[0].split('k')[0].split('l')[0].split('m')[0].split('n')[0].split('o')[0].split('p')[0].split('q')[0].split('r')[0].split('s')[0].split('t')[0].split('u')[0].split('v')[0].split('w')[0].split('x')[0].split('y')[0].split('z')[0].replace(\/^\\~\/g,'2').replace(\/\\~\/g,'') : '2')) : null;<br \/>\n  <font color=purple>if (document.URL.replace('?','&').indexOf('&card') != -1) {<br \/>\n    precursor=decodeURIComponent(document.URL.replace('?','&').split('&card')[1].split('=')[1].split('&')[0].split('#')[0]);<br \/>\n    if (precursor.indexOf(':') != -1) {<br \/>\n      lmore=':' + precursor.split(':')[1];<br \/>\n      precursor=precursor.split(':')[1].split('_')[0];<br \/>\n      \/\/alert('precursor=' + precursor + ' and lngcode=' + lngcode);<br \/>\n    } else {<br \/>\n      precursor='';<br \/>\n    }<br \/>\n  }<\/font><br \/>\n  if (document.URL.replace('?','&').indexOf('&card') != -1) {<br \/>\n  wwxhr = new XMLHttpRequest();<br \/>\n  <font color=purple>if (eval('' + ('' + precursor + lngcode).length) == 3) {<br \/>\n  \/\/alert(document.URL.replace('.html','.php').replace('.htm','.php').split('?')[0].split('#')[0] + '?isothreel=' + (precursor + lngcode).toLowerCase() + '&jsonback=' + lngcode.toLowerCase());<br \/>\n  wwxhr.open('get', document.URL.replace('.html','.php').replace('.htm','.php').split('?')[0].split('#')[0] + '?isothreel=' + (precursor + lngcode).toLowerCase() + '&jsonback=' + lngcode.toLowerCase(), true);  \/\/ thanks to https:\/\/iso639-3.sil.org\/code_tables\/download_tables<br \/>\n  } else {<\/font><br \/>\n  wwxhr.open('get', document.URL.replace('.html','.php').replace('.htm','.php').split('?')[0].split('#')[0] + '?jsonback=' + lngcode.toLowerCase(), true);  \/\/ thanks to https:\/\/iso639-3.sil.org\/code_tables\/download_tables<br \/>\n  <font color=purple>}<\/font><br \/>\n  wwxhr.onreadystatechange = showStuffW;<br \/>\n  wwxhr.send(null);<br \/>\n  \/\/alert('sent to ' +  document.URL.replace('.html','.php').replace('.htm','.php').split('?')[0].split('#')[0] + '?jsonback=' + lngcode.toLowerCase());<br \/>\n  }<br \/>\n<br \/>\n  nominal_numplayers = (document.URL.replace('?','&').indexOf('&card') != -1) ? prompt('How many players in ' + document.URL.replace('?','&').split('&card')[1].split('&')[0].split('#')[0].split('=')[0].replace(\/\\_\/g,' ').trim().substring(0,1).toUpperCase() + document.URL.replace('?','&').split('&card')[1].split('&')[0].split('#')[0].split('=')[0].replace(\/\\_\/g,' ').trim().substring(1).toLowerCase() + ' card game (if Zebra (ie. with cross colour match) prefix answer by + & if Any Colour (ie. just with same colour) prefix answer by -) & suffix by .0 for hybrid 500 card game (.1 for bridge) (or 04.0 (04.1 for bridge) for 4 player bidding version & optionally comma delimit email\/SMS addresses\/numbers ( eg. 04.0,Robert Metcalfe[rmetcalfe15@gmail.com; rmetcalfe41@gmail.com], RMet[rmetcalfe15@gmail.com], RM[rmetcalfe41@gmail.com], R.M[rmetcalfe41@gmail.com] ) & for lack of suit following use space at end, else \"turn away\" popups)?', (location.search.split('card_memories=')[1] ? ((decodeURIComponent(location.search.split('card_memories=')[1] + '~').split('&')[0]).toLowerCase().split('a')[0].split('b')[0].split('c')[0].split('d')[0].split('e')[0].split('f')[0].split('g')[0].split('h')[0].split('i')[0].split('j')[0].split('k')[0].split('l')[0].split('m')[0].split('n')[0].split('o')[0].split('p')[0].split('q')[0].split('r')[0].split('s')[0].split('t')[0].split('u')[0].split('v')[0].split('w')[0].split('x')[0].split('y')[0].split('z')[0].replace(\/^\\~\/g,'2').replace(\/\\~\/g,'') + lmore).replace('::',':').replace(\/\\:$\/g,'').replace(\/^04\\.0$\/g,'04.0:en_AU').replace(\/^04\\.1$\/g,'04.1:en_AU') : '2')) : null;<br \/>\n  }<br \/>\n<\/code><\/p>\n<p> &#8230; onto yesterday&#8217;s <a title='Just Javascript Card Game Say My Memory ISO 639-3 JSON Tutorial' href='#jjcgsmmiso639-3jsont'>Just Javascript Card Game Say My Memory ISO 639-3 JSON Tutorial<\/a> work.<\/p>\n<p>Again, so <a target=_blank title='say.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.php----GETME'>the changed<\/a> <a target=_blank title='cards_usefocus.php' href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.php----GETME'>cards_usefocus.php<\/a> PHP helps out <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html---------------------------------------------------GETME\" title=\"cards_usefocus.html\">the &#8220;JSON&#8221; tweaked<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html---------------------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-card-game-say-my-memory-iso-639-3-php-json-tutorial\/'>Just Javascript Card Game Say My Memory ISO 639-3 PHP JSON Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjcgsmmiso639-3jsont'>Previous relevant <a target=_blank title='Just Javascript Card Game Say My Memory ISO 639-3 JSON Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-say-my-memory-iso-639-3-json-tutorial\/'>Just Javascript Card Game Say My Memory ISO 639-3 JSON 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\/cards_usefocus.html?card_memories=04.1\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game Say My Memory ISO 639-3 JSON Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_json_three.jpg\" title=\"Just Javascript Card Game Say My Memory ISO 639-3 JSON Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game Say My Memory ISO 639-3 JSON Tutorial<\/p><\/div>\n<p>Did you end up clicking the &#8220;<a target=_blank title='Useful link, thanks' href='https:\/\/iso639-3.sil.org\/code_tables\/download_tables'>star link<\/a>&#8221; of yesterday&#8217;s <a title='Just Javascript Card Game Say My Memory ISO 639-3 Tutorial' href='#jjcgsmmiso639-3t'>Just Javascript Card Game Say My Memory ISO 639-3 Tutorial<\/a> that gave us the ISO 639-3 code data?  Did you notice &#8230;<\/p>\n<blockquote cite='https:\/\/iso639-3.sil.org\/code_tables\/download_tables'><p>\nCREATE TABLE [ISO_639-3] (<br \/>\n         Id      char(3) NOT NULL,  &#8212; The three-letter 639-3 identifier<br \/>\n         Part2B  char(3) NULL,      &#8212; Equivalent 639-2 identifier of the bibliographic applications<br \/>\n                                    &#8212; code set, if there is one<br \/>\n         Part2T  char(3) NULL,      &#8212; Equivalent 639-2 identifier of the terminology applications code<br \/>\n                                    &#8212; set, if there is one<br \/>\n         Part1   char(2) NULL,      &#8212; Equivalent 639-1 identifier, if there is one<br \/>\n         Scope   char(1) NOT NULL,  &#8212; I(ndividual), M(acrolanguage), S(pecial)<br \/>\n         Type    char(1) NOT NULL,  &#8212; A(ncient), C(onstructed),<br \/>\n                                    &#8212; E(xtinct), H(istorical), L(iving), S(pecial)<br \/>\n         Ref_Name   varchar(150) NOT NULL,   &#8212; Reference language name<br \/>\n         Comment    varchar(150) NULL)       &#8212; Comment relating to one or more of the columns\n<\/p><\/blockquote>\n<p> &#8230; database table creation DDL SQL?  These fields (eg. Id and Part2B and the Part1 we find most interesting) are what is supplied in the download data helpfully &#8230;<\/p>\n<ul>\n<li>presented in a single string &#8230;<\/li>\n<li>record delimited by line feed (ascii code 10) &#8230;<\/li>\n<li>field (within record) delimited by tab (ascii code 9)<\/li>\n<\/ul>\n<p> &#8230; all manageable in PHP &#8230;<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\nif (isset($_GET['jsonback'])) { \/\/ thanks to https:\/\/iso639-3.sil.org\/code_tables\/download_tables<br \/>\n    $recdelim=\"\";<br \/>\n    $fields=[\"Id\", \"Part2B\", \"Part2T\", \"Part1\", \"Scope\", \"Type\", \"Ref_Name\", \"Comment\"];<br \/>\n    $line_template='{\"' . $fields[0] . '\": \"\"}';<br \/>\n    $json_template=\"[]\";<br \/>\n    for ($ihjg=1; $ihjg&lt;sizeof($fields); $ihjg++) {<br \/>\n      $line_template=str_replace(\"}\", ', \"' . $fields[$ihjg] . '\": \"\"}', $line_template);<br \/>\n    }<br \/>\n    $lines=explode(\"\\n\", $threedata);<br \/>\n    for ($ihjg=0; $ihjg&lt;sizeof($lines); $ihjg++) {<br \/>\n      $lflds=explode(\"\\t\", $lines[$ihjg]);<br \/>\n      $thisline=$line_template;<br \/>\n      for ($jhjg=0; $jhjg&lt;sizeof($lflds); $jhjg++) {<br \/>\n        if ($lflds[0] != \"Id\") {<br \/>\n          $thisline=str_replace($fields[$jhjg] . '\": \"\"', $fields[$jhjg] . '\": \"' . $lflds[$jhjg] . '\"', $thisline);<br \/>\n        }<br \/>\n      }<br \/>\n      if ($thisline != $line_template) {<br \/>\n        $json_template=str_replace(\"]\", $recdelim . $thisline . \"]\", $json_template);<br \/>\n        $recdelim=\",\";<br \/>\n      }<br \/>\n    }<br \/>\n    echo $json_template;<br \/>\n    exit;<br \/>\n  }<br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p> &#8230; and a regular arrangement that makes us want to show you an alternative coding approach to the (still perfectly reasonable) approach of yesterday.  We could &#8230;<\/p>\n<ul>\n<li>ahead of time (Ajax) call our PHP ?jsonback=y to say give back to the Javascript a JSON string &#8230;<\/li>\n<li>and if they answer with a three character ISO 639-3 code we can interrogate that JSON object (created via <a target=_blank title='JSON.parse' href='https:\/\/www.w3schools.com\/js\/js_json_parse.asp'>JSON.parse<\/a>([JSON string])) to map to an ISO 639-1 code (more in fitting with <a target=_blank title='Google Translate' href='http:\/\/translate.google.com'>Google Translate<\/a> and <a target=_blank title='My Memory translate functionality' href='https:\/\/mymemory.translated.net\/'>My Memory<\/a>) &#8230;<br \/>\n<code><br \/>\n  var wxhr=null, wwxhr=null, wcont='';<br \/>\n<br \/>\n  function showStuffW(evt) {<br \/>\n   if (wwxhr) {<br \/>\n   if (wwxhr.readyState == 4) {<br \/>\n    if (wwxhr.status == 200) {<br \/>\n      wcont=wwxhr.responseText.trim();<br \/>\n      if (wcont.indexOf('},{') != -1) {<br \/>\n        jsonthree=JSON.parse(wcont);<br \/>\n        wcont='';<br \/>\n        wwxhr=null;<br \/>\n        console.log(jsonthree);<br \/>\n        console.log('wwxhr for lngcode=' + lngcode);<br \/>\n       for (var invh=0; invh&lt;jsonthree.length; invh++) {<br \/>\n  if (jsonthree[invh].Id.toLowerCase() == lngcode.toLowerCase()) {<br \/>\n    if (jsonthree[invh].Part1.trim() != '') {<br \/>\n        tlngcode=jsonthree[invh].Part1.toLowerCase();<br \/>\n        lngcode=jsonthree[invh].Part1.toLowerCase();<br \/>\n        console.log(';' + lngcode);<br \/>\n    }<br \/>\n  }<br \/>\n       }<br \/>\n      } else if (eval('' + wcont.length) == 2) {<br \/>\n        tlngcode=wcont;<br \/>\n        lngcode=wcont;<br \/>\n      }<br \/>\n    }<br \/>\n   }<br \/>\n   }<br \/>\n   if (wxhr) {<br \/>\n   if (wxhr.readyState == 4) {<br \/>\n    if (wxhr.status == 200) {<br \/>\n      wcont=wxhr.responseText.trim();<br \/>\n      if (wcont.indexOf('},{') != -1) {<br \/>\n        jsonthree=JSON.parse(wcont);<br \/>\n        wcont='';<br \/>\n      } else if (eval('' + wcont.length) == 2) {<br \/>\n        tlngcode=wcont;<br \/>\n        lngcode=wcont;<br \/>\n      }<br \/>\n    }<br \/>\n   }<br \/>\n   }<br \/>\n  }<br \/>\n<\/code>\n<\/li>\n<\/ul>\n<p>See how &#8220;relational database friendly&#8221; is the JSON protocol!<\/p>\n<p>So <a target=_blank title='say.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.php---GETME'>the changed<\/a> <a target=_blank title='cards_usefocus.php' href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.php---GETME'>cards_usefocus.php<\/a> PHP helps out <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html--------------------------------------------------GETME\" title=\"cards_usefocus.html\">the &#8220;JSON&#8221; tweaked<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html--------------------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-card-game-say-my-memory-iso-639-3-json-tutorial\/'>Just Javascript Card Game Say My Memory ISO 639-3 JSON Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjcgsmmiso639-3t'>Previous relevant <a target=_blank title='Just Javascript Card Game Say My Memory ISO 639-3 Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-say-my-memory-iso-639-3-tutorial\/'>Just Javascript Card Game Say My Memory ISO 639-3 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\/cards_usefocus.html?card_memories=04.1\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game Say My Memory ISO 639-3 Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/iso_639_3.jpg\" title=\"Just Javascript Card Game Say My Memory ISO 639-3 Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game Say My Memory ISO 639-3 Tutorial<\/p><\/div>\n<p>Are you interested in &#8230;<\/p>\n<ul>\n<li>Country Codes<\/li>\n<li>Currency Codes<\/li>\n<li>Language Codes<\/li>\n<\/ul>\n<p>?  We are, and the ISO (ie. <a target=_blank title='International Organization for Standardization' href='https:\/\/en.wikipedia.org\/wiki\/International_Organization_for_Standardization'>International Organization for Standardization<\/a>) you see when talking about the internationally agreed codes are great at keeping these codes in check.  Amongst this &#8220;code wooooooorrrrrlllllddd&#8221; there is a variety of code lengths that can happen, and for languages codes you can have &#8230;<\/p>\n<ul>\n<li>(the perhaps better known) ISO 639-1 (two letter codes used by <a target=_blank title='Google Translate' href='http:\/\/translate.google.com'>Google Translate<\/a> and <a target=_blank title='My Memory translate functionality' href='https:\/\/mymemory.translated.net\/'>My Memory<\/a>) &#8230; and &#8230;<\/li>\n<li>ISO 639-3 (three letter codes) &#8230; thanks to <a target=_blank title='Useful link, thanks' href='https:\/\/iso639-3.sil.org\/code_tables\/download_tables'>this link<\/a> (https:\/\/iso639-3.sil.org\/code_tables\/download_tables) regarding help here<\/li>\n<\/ul>\n<p> &#8230; and it is that last code set that interests us in case a user will hook into our &#8220;Just Javascript&#8221; 500 or bridge card game &#8220;commentary&#8221; logic centred around &#8230;<\/p>\n<ul>\n<li>macOS <a target=_blank title='say command information from Apple' href='https:\/\/ss64.com\/osx\/say.html'>say<\/a> audio &#8230; with &#8230;<\/li>\n<li><a target=_blank title='My Memory translate functionality' href='https:\/\/mymemory.translated.net\/'>My Memory<\/a> language translations<\/li>\n<\/ul>\n<p> &#8230; and be entering an ISO 639-3 language code.  We would like to help map this to a ISO 639-1 language code, as possible, and &#8220;carry on&#8221; on top of the previous progress to that of <a title='Just Javascript Card Game Say My Memory Right to Left Tutorial' href='#jjcgsmmrlt'>Just Javascript Card Game Say My Memory Right to Left Tutorial<\/a>.<\/p>\n<p>And so <a target=_blank title='say.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.php--GETME'>the changed<\/a> <a target=_blank title='cards_usefocus.php' href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.php--GETME'>cards_usefocus.php<\/a> PHP helps out <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-------------------------------------------------GETME\" title=\"cards_usefocus.html\">the &#8220;delimiter&#8221; tweaked<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-------------------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-card-game-say-my-memory-ISO-639-3-tutorial\/'>Just Javascript Card Game Say My Memory ISO-639-3 Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjcgsmmrlt'>Previous relevant <a target=_blank title='Just Javascript Card Game Say My Memory Right to Left Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-say-my-memory-right-to-left-tutorial\/'>Just Javascript Card Game Say My Memory Right to Left 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\/cards_usefocus.html?card_memories=04.1\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game Say My Memory Right to Left Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_languagertl.jpg\" title=\"Just Javascript Card Game Say My Memory Right to Left Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game Say My Memory Right to Left Tutorial<\/p><\/div>\n<p>Yesterday&#8217;s <a title='Just Javascript Card Game Say My Memory Delimiters Tutorial' href='#jjcgsmmdt'>Just Javascript Card Game Say My Memory Delimiters Tutorial<\/a> foreshadowed the concern we had with right to left languages with our translated commentary for such languages as Hebrew and Arabic with respect to &#8230;<\/p>\n<ul>\n<li>macOS <a target=_blank title='say command information from Apple' href='https:\/\/ss64.com\/osx\/say.html'>say<\/a> audio &#8230; with &#8230;<\/li>\n<li><a target=_blank title='My Memory translate functionality' href='https:\/\/mymemory.translated.net\/'>My Memory<\/a> language translations<\/li>\n<\/ul>\n<p>Today, we worked out that to get around the comma fields being reversed (in a right to left sense) as well as the content within those fields we could at least get the field orders going in their &#8220;left to right language&#8221; order by introducing line feeds after the commas in the <a target=_blank title='Google Translate' href='http:\/\/translate.google.com'>Google Translate<\/a> textarea for &#8220;Translate From&#8221; and that the &#8220;Translate To&#8221; textarea data could be fed (with its linefeeds) into the PHP &#8230;<\/p>\n<p><code><br \/>\n$he=\"[Hebrew Translation data line 1],<br \/>\n...<br \/>\n...<br \/>\n[Hebrew Translation data line 24]\";<br \/>\n<\/code><\/p>\n<p> &#8230; and work for us, because we&#8217;d already coded for reversals of order of our embedded number tokens we&#8217;d put in that content to help piece our translated language messages together.  Add reversed field order, and we felt it was a condition too confusing.<\/p>\n<p>Here is <a target=_blank title='say.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/say.php----GETME'>the changed<\/a> <a target=_blank title='say.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/say.php----GETME'>say.php<\/a> PHP and <a target=_blank title='MAMP for Apache\/PHP\/MySql on Mac OS X local web server' href='http:\/\/www.mamp.info'>MAMP<\/a> interface to macOS say command brilliance, for this 500 or bridge card game translated commentary interfacing functionality.<\/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\/just-javascript-card-game-say-my-memory-right-to-left-tutorial\/'>Just Javascript Card Game Say My Memory Right to Left Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjcgsmmdt'>Previous relevant <a target=_blank title='Just Javascript Card Game Say My Memory Delimiters Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-say-my-memory-delimiters-tutorial\/'>Just Javascript Card Game Say My Memory Delimiters 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\/cards_usefocus.html?card_memories=04.1\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game Say My Memory Delimiters Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_yetmoresay.jpg\" title=\"Just Javascript Card Game Say My Memory Delimiters Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game Say My Memory Delimiters Tutorial<\/p><\/div>\n<p>In yesterday&#8217;s <a title='Just Javascript Card Game Say My Memory Tutorial' href='#jjcgsmmt'>Just Javascript Card Game Say My Memory Tutorial<\/a> we used comma delimitation a lot.  But why is that?  Well, we like the comma, though it could be some other &#8220;not used in the content&#8221; character, <font size=1>(and sorry about the split infinitives)<\/font> because it is so easy to turn &#8230;<\/p>\n<ul>\n<li>a comma delimited string into a &#8230;<\/li>\n<ol>\n<li>Javascript array via &#8230;<br \/>\n<code><br \/>\nvar anaray=thatstring.split(',');<br \/>\n<\/code>\n<\/li>\n<li>PHP array via &#8230;<br \/>\n<code><br \/>\n$anaray=explode(',', $thatstring);<br \/>\n<\/code>\n<\/li>\n<ol>\n<\/li>\n<\/ul>\n<p> &#8230; in two different forms of usefulness in various situations.  Perhaps a reason to not look down on those simple string variables you encounter, because they may be full of &#8220;delimitation intelligence&#8221;!<\/p>\n<p>And so we are at the end of day two of the &#8230;<\/p>\n<ul>\n<li>macOS <a target=_blank title='say command information from Apple' href='https:\/\/ss64.com\/osx\/say.html'>say<\/a> audio &#8230; with &#8230;<\/li>\n<li><a target=_blank title='My Memory translate functionality' href='https:\/\/mymemory.translated.net\/'>My Memory<\/a> language translations<\/li>\n<\/ul>\n<p> &#8230; &#8220;love in&#8221; and we are getting there with code organization, and just need to test more and build up more of those language translation &#8220;delimited&#8221; strings, and think of a way to try to handle languages that read right to left such as Arabic and Hebrew.<\/p>\n<p>And so <a target=_blank title='say.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/say.php---GETME'>the changed<\/a> <a target=_blank title='say.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/say.php---GETME'>say.php<\/a> PHP and <a target=_blank title='MAMP for Apache\/PHP\/MySql on Mac OS X local web server' href='http:\/\/www.mamp.info'>MAMP<\/a> interface to macOS say command brilliance helps out <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html------------------------------------------------GETME\" title=\"cards_usefocus.html\">the &#8220;delimiter&#8221; tweaked<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html------------------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-card-game-say-my-memory-delimiters-tutorial\/'>Just Javascript Card Game Say My Memory Delimiters Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjcgsmmt'>Previous relevant <a target=_blank title='Just Javascript Card Game Say My Memory Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-say-my-memory-tutorial\/'>Just Javascript Card Game Say My Memory 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\/cards_usefocus.html?card_memories=04.1\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game Say My Memory Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_moresay.jpg\" title=\"Just Javascript Card Game Say My Memory Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game Say My Memory Tutorial<\/p><\/div>\n<p>As you would glean from yesterday&#8217;s <a title='Just Javascript Card Game Language Tutorial' href='#jjcglt'>Just Javascript Card Game Language Tutorial<\/a> the combination of use of &#8230;<\/p>\n<ul>\n<li>macOS <a target=_blank title='say command information from Apple' href='https:\/\/ss64.com\/osx\/say.html'>say<\/a> audio &#8230; with &#8230;<\/li>\n<li><a target=_blank title='My Memory translate functionality' href='https:\/\/mymemory.translated.net\/'>My Memory<\/a> language translations<\/li>\n<\/ul>\n<p> &#8230; are stellar performers.  But yesterday&#8217;s language translations architecture asks a lot of My Memory API, asking for far too many visits to this website to our liking.  What if we were to, instead &#8230;<\/p>\n<ul>\n<li>ask for only one visit per non-English language encountered &#8230; by using &#8230;<\/li>\n<li>comma delimitation in the string presented for translation &#8230; so that &#8230;<\/li>\n<li>knowledge of both that &#8230;\n<ol>\n<li>comma delimitation in destination translation &#8230; teamed with &#8230;<\/li>\n<li>inhouse knowledge of data such as player names and numbers<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<p> &#8230; can have us piecing together translated audio to supplement the <a target=_blank title='Google Translate' href='http:\/\/translate.google.com'>Google Translate<\/a> visuals (and\/or user used audio) for a useful non-English audio\/visual commentary to accompany the 500 or bridge card game in our &#8220;Just Javascript&#8221; scenario, only today it is asn Intranet localhost adjunct to that parent web application, with <a target=_blank title='say.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/say.php--GETME'>the changed<\/a> <a target=_blank title='say.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/say.php--GETME'>say.php<\/a> PHP and <a target=_blank title='MAMP for Apache\/PHP\/MySql on Mac OS X local web server' href='http:\/\/www.mamp.info'>MAMP<\/a> interface to macOS say command brilliance.<\/p>\n<p>This is part one of a two day job getting to our destination, based on a &#8220;data storage&#8221; solution we&#8217;ve discussed before, that being the idea of storing data within the PHP code itself.<\/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\/just-javascript-card-game-say-my-memory-tutorial\/'>New Just Javascript Card Game Say My Memory Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjcglt'>Previous relevant <a target=_blank title='Just Javascript Card Game Language Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-language-tutorial\/'>Just Javascript Card Game Language 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\/cards_usefocus.html?card_memories=04.1\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game Language Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_language.jpg\" title=\"Just Javascript Card Game Language Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game Language Tutorial<\/p><\/div>\n<p>The recent Google Translate and macOS say audio functionality featuring in yesterday&#8217;s <a title='Just Javascript Card Game Errors Tutorial' href='#jjcget'>Just Javascript Card Game Errors Tutorial<\/a> lends itself to is &#8230;<\/p>\n<ul>\n<li>a popup notification type of feel<\/li>\n<li>perhaps an audio &#8230; via macOS say command &#8230; feel &#8230; but as of yesterday this commentary was just in English &#8230; but today &#8230;<\/li>\n<li>we add non-English translations &#8230;\n<ol>\n<li>directly for the Google Translate functionality &#8230; and &#8230;<\/li>\n<li>via the brilliant <a target=_blank title='My Memory translate functionality' href='https:\/\/mymemory.translated.net\/'>&#8220;My Memory&#8221; API<\/a> when it comes to interfacing to macOS say command, including, where possible, the tailoring of the voice of this translation &#8230; via say&#8217;s -v switch<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<p> &#8230; still &#8220;Just Javascript&#8221; (ie. no body definition) in the parent window because we use Ajax techniques as per new Javascript code &#8230;<\/p>\n<p><code><br \/>\n  var langarr=['af-Afrikaans', \/\/ afrikaans.<br \/>\n'ar-Arabic', \/\/ arabic.<br \/>\n'bg-Bulgarian', \/\/ bulgarian.<br \/>\n'ca-Catalan', \/\/ catalan.<br \/>\n'cs-Czech', \/\/ czech.<br \/>\n'da-Danish', \/\/ danish.<br \/>\n'de-German', \/\/ german.<br \/>\n'el-Greek', \/\/ greek.<br \/>\n'en-English', \/\/ english.<br \/>\n'es-Spanish', \/\/ spanish.<br \/>\n'et-Estonian', \/\/ estonian.<br \/>\n'fi-Finnish', \/\/ finnish.<br \/>\n'fr-French', \/\/ french.<br \/>\n'gl-Galician', \/\/ galician.<br \/>\n'he-Hebrew', \/\/ hebrew.<br \/>\n'hi-Hindi', \/\/ hindi.<br \/>\n'hr-Croatian', \/\/ croatian.<br \/>\n'hu-Hungarian', \/\/ hungarian.<br \/>\n'id-Indonesian', \/\/ indonesian.<br \/>\n'it-Italian', \/\/ italian.<br \/>\n'ja-Japanese', \/\/ japanese.<br \/>\n'ko-Korean', \/\/ korean.<br \/>\n'ka-Georgian', \/\/ georgian.<br \/>\n'lt-Lithuanian', \/\/ lithuanian.<br \/>\n'lv-Latvian', \/\/ latvian.<br \/>\n'ms-Malay', \/\/ malay.<br \/>\n'nl-Dutch', \/\/ dutch.<br \/>\n'no-Norwegian', \/\/ norwegian.<br \/>\n'pl-Polish', \/\/ polish.<br \/>\n'pt-Portuguese', \/\/ portuguese.<br \/>\n'ro-Romanian', \/\/ romanian.<br \/>\n'ru-Russian', \/\/ russian.<br \/>\n'sk-Slovak', \/\/ slovak.<br \/>\n'sl-Slovenian', \/\/ slovenian.<br \/>\n'sq-Albanian', \/\/ albanian.<br \/>\n'sr-Serbian', \/\/ serbian.<br \/>\n'sv-Swedish', \/\/ swedish.<br \/>\n'th-Thai', \/\/ thai.<br \/>\n'tr-Turkish', \/\/ turkish.<br \/>\n'uk-Ukrainian', \/\/ ukrainian.<br \/>\n'zh-Chinese' \/\/ chinese.<br \/>\n];<br \/>\n<br \/>\nvar sayvoices=[\"Alex;en_US\",<br \/>\n\"Alice;it_IT\",<br \/>\n\"Alva;sv_SE\",<br \/>\n\"Amelie;fr_CA\",<br \/>\n\"Anna;de_DE\",<br \/>\n\"Carmit;he_IL\",<br \/>\n\"Damayanti;id_ID\",<br \/>\n\"Daniel;en_GB\",<br \/>\n\"Diego;es_AR\",<br \/>\n\"Ellen;nl_BE\",<br \/>\n\"Fiona;en_scotland\",<br \/>\n\"Fred;en_US\",<br \/>\n\"Ioana;ro_RO\",<br \/>\n\"Joana;pt_PT\",<br \/>\n\"Jorge;es_ES\",<br \/>\n\"Juan;es_MX\",<br \/>\n\"Kanya;th_TH\",<br \/>\n\"Karen;en_AU\",<br \/>\n\"Kyoko;ja_JP\",<br \/>\n\"Laura;sk_SK\",<br \/>\n\"Lekha;hi_IN\",<br \/>\n\"Luca;it_IT\",<br \/>\n\"Luciana;pt_BR\",<br \/>\n\"Maged;ar_SA\",<br \/>\n\"Mariska;hu_HU\",<br \/>\n\"Mei-Jia;zh_TW\",<br \/>\n\"Melina;el_GR\",<br \/>\n\"Milena;ru_RU\",<br \/>\n\"Moira;en_IE\",<br \/>\n\"Monica;es_ES\",<br \/>\n\"Nora;nb_NO\",<br \/>\n\"Paulina;es_MX\",<br \/>\n\"Samantha;en_US\",<br \/>\n\"Sara;da_DK\",<br \/>\n\"Satu;fi_FI\",<br \/>\n\"Sin-ji;zh_HK\",<br \/>\n\"Tessa;en_ZA\",<br \/>\n\"Thomas;fr_FR\",<br \/>\n\"Ting-Ting;zh_CN\",<br \/>\n\"Veena;en_IN\",<br \/>\n\"Victoria;en_US\",<br \/>\n\"Xander;nl_NL\",<br \/>\n\"Yelda;tr_TR\",<br \/>\n\"Yuna;ko_KR\",<br \/>\n\"Yuri;ru_RU\",<br \/>\n\"Zosia;pl_PL\",<br \/>\n\"Zuzana;cs_CZ\"<br \/>\n];<br \/>\n<br \/>\n  function showStuffT(evt) {<br \/>\n   var inmsg='';<br \/>\n   var newblurbis='';<br \/>\n   if (zxhr.readyState == 4) {<br \/>\n    if (zxhr.status == 200) {<br \/>\n      \/\/ {\"responseData\":{\"translatedText\":\"Ciao Mondo!\",\"match\":1},\"quotaFinished\":false,\"mtLangSupported\":null,\"responseDetails\":\"\",\"responseStatus\":200,\"responderId\":\"7\",\"exception_code\":null,\"matches\":[{\"id\":\"633912766\",\"segment\":\"Hello World!\",\"translation\":\"Ciao Mondo!\",\"source\":\"en-GB\",\"target\":\"it-IT\",\"quality\":\"74\",\"reference\":null,\"usage-count\":95,\"subject\":\"All\",\"created-by\":\"MateCat\",\"last-updated-by\":\"MateCat\",\"create-date\":\"2021-05-19 12:15:47\",\"last-update-date\":\"2021-05-19 12:15:47\",\"match\":1}]}<br \/>\n      inmsg=zxhr.responseText; \/\/.split('&lt;\/p&gt;')[0].split('&gt;')[eval(-1 + xhr.responseText.split('&lt;\/p&gt;')[0].split('&gt;').length)];<br \/>\n      if (inmsg.indexOf('\"translatedText\":\"') != -1) {<br \/>\n       if (inmsg.split('\"translatedText\":\"')[1].split('\"')[0].indexOf('MYMEMORY WARNING') == -1) {<br \/>\n         newblurbis=inmsg.split('\"translatedText\":\"')[1].split('\"')[0];<br \/>\n         if (sayintranet) {<br \/>\n    if (pretwois) {<br \/>\n           if (!pretwois.closed) { pretwois.close(); }<br \/>\n    }<br \/>\n         try {<br \/>\n         pretwois=window.open('http:\/\/localhost:8888\/say.php?say=' + encodeURIComponent(minusv + newblurbis), '_blank', 'left=650,top=250,width=400,height=400');<br \/>\n         plusv='';<br \/>\n         } catch (exc1) { }<br \/>\n         setTimeout(antipre,5000);<br \/>\n      if (plusv != '') {<br \/>\n         try {<br \/>\n         pretwois=window.open(plusv, '_blank', 'left=650,top=250,width=400,height=400');<br \/>\n         } catch (exc1) { }<br \/>\n         setTimeout(antipre,5000);<br \/>\n         }<br \/>\n         plusv='';<br \/>\n      }<br \/>\n         }<br \/>\n       }<br \/>\n      \/\/}<br \/>\n    }<br \/>\n   }<br \/>\n  }<br \/>\n<br \/>\n  function atranslateit(awords, awurl) {<br \/>\n         zxhr = new XMLHttpRequest();<br \/>\n         zxhr.open('get', awurl, true);<br \/>\n         zxhr.onreadystatechange = showStuffT;<br \/>\n         zxhr.send(null);<br \/>\n         return awords;<br \/>\n  }<br \/>\n<br \/> <br \/>\n  function translateit(words) {<br \/>\n    var anotherone=-1;<br \/>\n    \/\/ \"http:\/\/api.mymemory.translated.net\/get?q=\" + encodeURIComponent(inwords) + \"&langpair=\" + nonen + \"|en\"<br \/>\n    \/\/ http:\/\/api.mymemory.translated.net\/get?q=yo%20trabajamos&langpair=es|en<br \/>\n<br \/> <br \/>\n    if (tlngcode != 'en') {<br \/>\n      \/\/alert('tlngcode=' + tlngcode);<br \/>\n      for (var imn=0; imn&lt;sayvoices.length; imn++) {<br \/>\n        if (sayvoices[imn].indexOf(';' + tlngcode + '_') != -1) {<br \/>\n          anotherone=imn;<br \/>\n          if (sayvoices[imn].toLowerCase().indexOf(';' + lngcode.toLowerCase()) != -1) {  minusv='-v ' + sayvoices[imn].split(';')[0] + ' '; return minusv + atranslateit(words, '\/\/api.mymemory.translated.net\/get?q=' + encodeURIComponent(words) + '&langpair=' + 'en|' + tlngcode); }<br \/>\n        }<br \/>\n      }<br \/>\n    }<br \/>\n    if (anotherone != -1) {<br \/>\n      \/\/alert(sayvoices[anotherone].split(';')[0]);<br \/>\n      minusv='-v ' + sayvoices[anotherone].split(';')[0] + ' ';<br \/>\n      return minusv + atranslateit(words, '\/\/api.mymemory.translated.net\/get?q=' + encodeURIComponent(words) + '&langpair=' + 'en|' + tlngcode);<br \/>\n    }<br \/>\n    return words;<br \/>\n  }<br \/>\n<br \/> <br \/>\n  function yourencodeURIComponent(incv) {<br \/>\n    if (card_game.toLowerCase() == 'bridge') {<br \/>\n      if (!in_bidding && !in_kitty && cbid.toLowerCase() != 'none') {<br \/>\n      if (cbid.indexOf('mis') != -1) {<br \/>\n      return encodeURIComponent(translateit('In your bridge card game with final bid ' + (cbid + ' by Player ' + cbidby + '').replace('None (by Player 1)','Pass').replace('None','Pass') + ' ' + incv.replace(\/\\[\\]\/g,'')));<br \/>\n      } else {<br \/>\n      return encodeURIComponent(translateit('In your bridge card game with final bid ' + (cbid.replace('n',' No Trump').replace('c',' Club').replace('d',' Diamond').replace('s',' Spade').replace('h',' Heart').replace('0',' No Trump') + 's by Player ' + cbidby + '').replace('None by Player 1','Pass').replace('None','Pass') + ' ' + incv.replace(\/\\[\\]\/g,'')));<br \/>\n      }<br \/>\n      } else {<br \/>\n      return encodeURIComponent(translateit('In your bridge card game ' + incv.replace(\/\\[\\]\/g,'')));<br \/>\n      }<br \/>\n    } else if (card_game.toLowerCase() == '500ish') {<br \/>\n      if (!in_bidding && !in_kitty && cbid.toLowerCase() != 'none') {<br \/>\n      if (cbid.indexOf('mis') != -1) {<br \/>\n      return encodeURIComponent(translateit('In your 500 card game with final bid ' + (cbid + ' by Player ' + cbidby + '').replace('None (by Player 1)','Pass').replace('None','Pass') + ' ' + incv.replace(\/\\[\\]\/g,'')));<br \/>\n      } else {<br \/>\n      return encodeURIComponent(translateit('In your 500 card game with final bid ' + (cbid.replace('n',' No Trump').replace('c',' Club').replace('d',' Diamond').replace('s',' Spade').replace('h',' Heart').replace('0',' No Trump') + 's by Player ' + cbidby + '').replace('None by Player 1','Pass').replace('None','Pass') + ' ' + incv.replace(\/\\[\\]\/g,'')));<br \/>\n      }<br \/>\n      } else {<br \/>\n      return encodeURIComponent(translateit('In your 500 card game ' + incv.replace(\/\\[\\]\/g,'')));<br \/>\n      }<br \/>\n    }<br \/>\n    return encodeURIComponent(translateit(incv.replace(\/\\[\\]\/g,'')));<br \/>\n  }<br \/>\n<\/code><\/p>\n<p>To see these new &#8220;language&#8221; audio commentary parts in action, try the new improved Bridge and 500 game functionality at <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-----------------------------------------------GETME\" title=\"cards_usefocus.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-----------------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-card-game-language-tutorial\/'>Just Javascript Card Game Language Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjcget'>Previous relevant <a target=_blank title='Just Javascript Card Game Errors Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-errors-tutorial\/'>Just Javascript Card Game Errors 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\/cards_usefocus.html?card_memories=04.1\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game Errors Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_errors.jpg\" title=\"Just Javascript Card Game Errors Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game Errors Tutorial<\/p><\/div>\n<p>The optimism of yesterday&#8217;s <a title='Just Javascript Card Game Commentary Tutorial' href='#jjcgct'>Just Javascript Card Game Commentary Tutorial<\/a> can be considered laudable, but a tad unrealistic.  We all know people make mistakes, in bridge and 500 card games, perhaps most often, those being &#8230;<\/p>\n<ul>\n<li>incorrect bid<\/li>\n<li>not following suit<\/li>\n<\/ul>\n<p> &#8230; and today, we start including these interruptions into the Google Translate (and, perhaps, macOS say &#8220;audio&#8221;) &#8220;commentary&#8221; as part of the &#8220;workflow&#8221; you might encounter with these card games.<\/p>\n<p>We introduce (and amend) &#8230;<\/p>\n<p><code><br \/>\n  function abl() {<br \/>\n         if (sayintranet) {<br \/>\n         try {<br \/>\n         pretwois=window.open('http:\/\/localhost:8888\/say.php?say=' + encodeURIComponent(flb.replace(\/Player\\ Player\\ \/g, 'Player ').replace(\/\\([^)]*\\)\/g, '').replace(\/\\[\\]\/g,'')), '_blank', 'left=150,top=250,width=400,height=400');<br \/>\n         } catch (exc1) { }<br \/>\n         setTimeout(antipre,5000);<br \/>\n         }<br \/>\n         twois=window.open('\/\/translate.google.com\/?sl=auto&tl=en&text=' + encodeURIComponent(flb.replace(\/Player\\ Player\\ \/g, 'Player ').replace(\/\\([^)]*\\)\/g, '').replace(\/\\[\\]\/g,'')) + '%0A&op=translate', '_blank', 'left=100,top=200,width=500,height=500');<br \/>\n  }<br \/>\n<br \/>\n  function wrel(inideais) {<br \/>\n     var outideais='';<br \/>\n     outideais=inideais;<br \/>\n     if (wordsare != '' && doaudio) {<br \/>\n         if (inideais.toLowerCase().indexOf(' follow suit ') != -1 || (delay == 0 && inideais.toLowerCase().replace('ncorrect','congratulations').indexOf('congratulations') != -1)) {<br \/>\n         flb=inideais.split(' Score')[0];<br \/>\n         if (delay == 0) {<br \/>\n         abl();<br \/>\n         delay=1000;<br \/>\n         } else {<br \/>\n         setTimeout(abl, delay);<br \/>\n         }<br \/>\n         return inideais;<br \/>\n         }<br \/>\n     if (wordsare.indexOf(' trick ' + tricknumber + ' ') != -1 && inideais.toLowerCase().indexOf(' trick ' + tricknumber + ' ') != -1) {<br \/>\n       \/\/if (inideais.toLowerCase().indexOf('congratulations') != -1 && inideais.indexOf('(') != -1) {<br \/>\n       \/\/  outideais=inideais.replace(\/\\([^)]*\\)\/g, '');<br \/>\n       \/\/}<br \/>\n       if (wordsare.indexOf(outideais) == -1) {<br \/>\n         if (inideais.toLowerCase().indexOf('congratulations') != -1) {<br \/>\n         \/\/outideais=wordsare + ' and ' + outideais.split('(')[0];<br \/>\n         outideais=outideais.split('(')[0].replace(\/Player\\ Player\\ \/g, 'Player ') + ' after ' + wordsare + ' making trick scores ' + scoresuffix.replace(\/\\-\/g,'').replace(\/\\.[^,]*\/g,'').replace(\/\\,\/g,' ') + ' game score ' + scoresuffix.replace(\/[0-9]*\\.\/g, '').replace(\/\\,\/g,' ') + ' and team scores ' + overallss.replace(',',' '); \/\/ + ' and ' + outideais.split('(')[0];<br \/>\n         } else {<br \/>\n         outideais=wordsare + ' and ' + inideais;<br \/>\n         }<br \/>\n         wordsare=outideais;<br \/>\n       } else {<br \/>\n         wordsare=outideais;<br \/>\n       }<br \/>\n       if (inideais.toLowerCase().indexOf('congratulations') != -1) {<br \/>\n         outideais=inideais;<br \/>\n       }<br \/>\n     }<br \/>\n     }<br \/>\n     delay=1000;<br \/>\n     return outideais;<br \/>\n  }<br \/>\n<\/code><\/p>\n<p> &#8230; to help separate this from the &#8220;and&#8221; conjunction usage we used to help with the non-erroneous workflow &#8220;commentary&#8221; of yesterday&#8217;s work.<\/p>\n<p>To see these new &#8220;erroneous workflow&#8221; audio commentary parts in action, try the new improved Bridge and 500 game functionality at <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html----------------------------------------------GETME\" title=\"cards_usefocus.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html----------------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-card-game-errors-tutorial\/'>Just Javascript Card Game Errors Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjcgct'>Previous relevant <a target=_blank title='Just Javascript Card Game Commentary Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-commentary-tutorial\/'>Just Javascript Card Game Commentary 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\/cards_usefocus.html?card_memories=04.1\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game Commentary Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_commentary.jpg\" title=\"Just Javascript Card Game Commentary Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game Commentary Tutorial<\/p><\/div>\n<p>On top of the audio functionalities featured in the recent <a title='Just Javascript Card Game Intranet Tutorial' href='#jjcgit'>Just Javascript Card Game Intranet Tutorial<\/a> we want to explore the possibilities for a new mode of use &#8230;<\/p>\n<blockquote cite='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-early-exit-tutorial\/'>\n<ul>\n<li>500 card game &#8230;<\/li>\n<li>like &#8220;04.0,Robert Metcalfe[rmetcalfe15@gmail.com;rmetcalfe41@gmail.com], RMet[rmetcalfe15@gmail.com], RM[rmetcalfe41@gmail.com], R.M[rmetcalfe41@gmail.com] &#8221; entered (deliberate space at end) at first prompt<\/li>\n<\/ul>\n<\/blockquote>\n<p> &#8230; or <strike>500<\/strike>bridge and <strike>04.0<\/strike>04.1 remote user setup except that, now, with these audio possibilities &#8230;<\/p>\n<ul>\n<li>the hoster of the card game &#8230; only &#8230;<\/li>\n<li>could click the &#8220;ear&#8221; emoji to start (and continue through &#8220;card games&#8221; we&#8217;re hoping, but need more testing) &#8230; meaning &#8230;<\/li>\n<li>the hoster, only, could either play their entire game from the web application or entirely from the email or SMS messages or a combination of both, the audio helping alert them of the need for action off the email or SMS messages from other players<\/li>\n<\/ul>\n<p>We think this might be an interesting nuance to this game design.  We&#8217;ll see how far we get!<\/p>\n<p>To see these new &#8220;during course of play&#8221; audio commentary parts in action, try the new improved Bridge and 500 game functionality at <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html--------------------------------------------GETME\" title=\"cards_usefocus.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html--------------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-card-game-commentary-tutorial\/'>Just Javascript Card Game Commentary Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjcgit'>Previous relevant <a target=_blank title='Just Javascript Card Game Intranet Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-intranet-tutorial\/'>Just Javascript Card Game Intranet 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\/cards_usefocus.html?card_memories=04.1\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game Intranet Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_say.jpg\" title=\"Just Javascript Card Game Intranet Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game Intranet Tutorial<\/p><\/div>\n<p>Augmenting yesterday&#8217;s <a title='Just Javascript Card Game Google Translate Tutorial' href='#jjcggtt'>Just Javascript Card Game Google Translate Tutorial<\/a> where it said &#8230;<\/p>\n<blockquote cite='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-google-translate-tutorial\/'><p>\naudio form via <a target=_blank title='Google Translate' href='http:\/\/translate.google.com'>Google Translate<\/a> text to audio functionality (which it is up to the hoster to make happen themselves)\n<\/p><\/blockquote>\n<p>That &#8220;which it is up to the hoster to make happen themselves&#8221; is a tad annoying for some users that would like this automatic.   Well, we&#8217;ve used the technique before with our <a target=_blank title='Mac OS X Text to English Speech Primer Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/mac-os-x-text-to-english-speech-primer-tutorial'>Mac OS X Text to English Speech Primer Tutorial<\/a> (and remember it with PHP Zip functionality, and others, as well) a concept we cannot help comparing with the idea of (office) &#8220;Intranet&#8221; ideas.  You see, we combine with the rjmprogramming.com.au &#8220;Internet&#8221; work a combination of &#8230;<\/p>\n<ul>\n<li>PHP via <a target=_blank title='PHP exec() method information' href='http:\/\/php.net\/manual\/en\/function.exec.php'><i>exec<\/i><\/a> &#8230; calling &#8230;<\/li>\n<li><a target=_blank title='MAMP for Apache\/PHP\/MySql on Mac OS X local web server' href='http:\/\/www.mamp.info'>MAMP<\/a> PHP &#8230; our inhouse &#8230;<\/li>\n<li><a target=_blank title='say.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/say.php_GETME'>say.php<\/a> that integrates the wonderful &#8230;<\/li>\n<li>(Mac OS X (in days past) and) macOS (operating system) <a target=_blank title='say command information from Apple' href='https:\/\/ss64.com\/osx\/say.html'><i>say<\/i><\/a> command used by PHP via <a target=_blank title='PHP exec() method information' href='http:\/\/php.net\/manual\/en\/function.exec.php'><i>exec<\/i><\/a> to make <a target=_blank title='say.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/say.php_GETME'>say.php<\/a> command which is a brilliant &#8220;text to speech&#8221; command line tool<\/li>\n<\/ul>\n<p> &#8230; that serverside involvement circumventing those &#8220;no audio without a click&#8221; restrictions of your modern day web applications, quite often.<\/p>\n<p>In the past, we&#8217;ve checked for the existence of &#8220;say.php&#8221; in a MAMP document root folder, in macOS place &#8230; all a lot to expect &#8230; and so we need a <font color=blue>suck it and see<\/font> &#8230;<\/p>\n<p><code><br \/>\n         if (wordsare != lwordsare) {<br \/>\n         lwordsare=wordsare;<br \/>\n         <font color=blue>if (sayintranet) {<br \/>\n         try {<br \/>\n         pretwois=window.open('http:\/\/localhost:8888\/say.php?say=' + encodeURIComponent(wordsare), '_blank', 'left=150,top=150,width=400,height=400');<br \/>\n         } catch (exc3) { }<br \/>\n         setTimeout(antipre,5000);<br \/>\n         }<\/font><br \/>\n         twois=window.open('\/\/translate.google.com\/?sl=auto&tl=en&text=' + encodeURIComponent(wordsare) + '%0A&op=translate', '_blank', 'left=100,top=100,width=500,height=500');<br \/>\n         }<br \/>\n<\/code><\/p>\n<p> &#8230; approach that &#8230;<\/p>\n<ul>\n<li>does no harm &#8230; but if useful<\/li>\n<li>can augment with audio the visuals of the <a target=_blank title='Google Translate' href='http:\/\/translate.google.com'>Google Translate<\/a> popups of yesterday&#8217;s work.<\/p>\n<\/ul>\n<p>Cute <font size=1>(for some)<\/font>, huh?!<\/p>\n<p>To see this augmented example of a &#8220;functional background button&#8221; in action, try the new improved Bridge and 500 game functionality at <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-------------------------------------------GETME\" title=\"cards_usefocus.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-------------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-card-game-google-translate-tutorial\/'>New Just Javascript Card Game Intranet Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjcggtt'>Previous relevant <a target=_blank title='Just Javascript Card Game Google Translate Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-google-translate-tutorial\/'>Just Javascript Card Game Google Translate 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\/cards_usefocus.html?card_memories=04.1\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game Google Translate Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_gt.jpg\" title=\"Just Javascript Card Game Google Translate Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game Google Translate Tutorial<\/p><\/div>\n<p>Yesterday&#8217;s <a title='Just Javascript Card Game Functional Background Buttons Tutorial' href='#jjcgfbbt'>Just Javascript Card Game Functional Background Buttons Tutorial<\/a> set up the conditions needed to &#8230;<\/p>\n<ul>\n<li>integrate <a target=_blank title='Google Translate' href='http:\/\/translate.google.com'>Google Translate<\/a> as either\/both &#8230;\n<ol>\n<li>popup window form of alerting 500 or bridge card game hoster that something changed with the bidding (just, so far) &#8230;<\/li>\n<li>audio form via <a target=_blank title='Google Translate' href='http:\/\/translate.google.com'>Google Translate<\/a> text to audio functionality (which it is up to the hoster to make happen themselves)<\/li>\n<\/ol>\n<\/li>\n<li>via a new &#8220;Functional Background Button&#8221; in our &#8220;Just Javascript&#8221; (ie. no body definition) parent window conditions<\/li>\n<\/ul>\n<p> &#8230; via &#8230;<\/p>\n<p><code><br \/>\n  function cbaudio(cby, notset) {<br \/>\n     if (notset != '') {<br \/>\n       if (!doaudio) {<br \/>\n       doaudio=!doaudio;<br \/>\n       if (doaudio) {<br \/>\n         setTimeout(stcbaudio, 1000);<br \/>\n       }<br \/>\n       }<br \/>\n     if (doaudio && in_bidding && !in_kitty && cbid.substring(0,1) &gt;= '1' && cbid.substring(0,1) &lt;= '9') {<br \/>\n       wordsare=('' + pnames[eval(-1 + cby)]).replace('undefined',('Player ' + cby).replace('undefined','' + bidplayer)) + ' bid ' + cbid.substring(0,1) + ' ' + cbid.substring(1,2).replace('n','No Trump').replace('c','Club').replace('d','Diamond').replace('s','Spade').replace('h','Heart').replace('0','No Trump') + 's';<br \/>\n       if (doaudio && wordsare != lastwordsare) {<br \/>\n         if (lastwordsare.indexOf(wordsare) == 0) {<br \/>\n         wordsare=lastwordsare;<br \/>\n         } else {<br \/>\n         lastwordsare=wordsare;<br \/>\n         }<br \/>\n         if (twois && wordsare != lwordsare) {<br \/>\n           if (!twois.closed) { twois.close(); }<br \/>\n         }<br \/>\n         if (wordsare != lwordsare) {<br \/>\n         lwordsare=wordsare;<br \/>\n         twois=window.open('\/\/translate.google.com\/?sl=auto&tl=en&text=' + encodeURIComponent(wordsare) + '%0A&op=translate', '_blank', 'left=100,top=100,width=500,height=500');<br \/>\n         }<br \/>\n       }<br \/>\n     } else if (doaudio && in_bidding && !in_kitty && cbid.toLowerCase() != 'none') {<br \/>\n       wordsare=('' + pnames[eval(-1 + cby)]).replace('undefined',('Player ' + cby).replace('undefined','' + bidplayer)) + ' bid ' + cbid;<br \/>\n       if (doaudio && wordsare != lastwordsare) {<br \/>\n         if (lastwordsare.indexOf(wordsare) == 0) {<br \/>\n         wordsare=lastwordsare;<br \/>\n         } else {<br \/>\n         lastwordsare=wordsare;<br \/>\n         }<br \/>\n         if (twois && wordsare != lwordsare) {<br \/>\n           if (!twois.closed) { twois.close(); }<br \/>\n         }<br \/>\n         if (wordsare != lwordsare) {<br \/>\n         lwordsare=wordsare;<br \/>\n         twois=window.open('\/\/translate.google.com\/?sl=auto&tl=en&text=' + encodeURIComponent(wordsare) + '%0A&op=translate', '_blank', 'left=100,top=100,width=500,height=500');<br \/>\n         }<br \/>\n       }<br \/>\n     } else if (doaudio && in_kitty && cbid.toLowerCase() != 'none' && wordsare.indexOf(' and now asking them about the kitty') == -1) {<br \/>\n       wordsare+=' and now asking them about the kitty';<br \/>\n       if (doaudio && wordsare != lastwordsare) {<br \/>\n         if (lastwordsare.indexOf(wordsare) == 0) {<br \/>\n         wordsare=lastwordsare;<br \/>\n         } else {<br \/>\n         lastwordsare=wordsare;<br \/>\n         }<br \/>\n         if (twois && wordsare != lwordsare) {<br \/>\n           if (!twois.closed) { twois.close(); }<br \/>\n         }<br \/>\n         if (wordsare != lwordsare) {<br \/>\n         lwordsare=wordsare;<br \/>\n         twois=window.open('\/\/translate.google.com\/?sl=auto&tl=en&text=' + encodeURIComponent(wordsare) + '%0A&op=translate', '_blank', 'left=100,top=100,width=500,height=500');<br \/>\n         }<br \/>\n       }<br \/>\n     } else if (doaudio && !in_bidding && !in_kitty && cbid.toLowerCase() != 'none' && wordsare != '' && wordsare.indexOf(' and now starting to play the cards by leading off') == -1) {<br \/>\n       wordsare+=' and now starting to play the cards by leading off';<br \/>\n       if (doaudio && wordsare != lastwordsare) {<br \/>\n         if (lastwordsare.indexOf(wordsare) == 0) {<br \/>\n         wordsare=lastwordsare;<br \/>\n         } else {<br \/>\n         lastwordsare=wordsare;<br \/>\n         }<br \/>\n         if (twois && wordsare != lwordsare) {<br \/>\n           if (!twois.closed) { twois.close(); }<br \/>\n         }<br \/>\n         if (wordsare != lwordsare) {<br \/>\n         lwordsare=wordsare;<br \/>\n         twois=window.open('\/\/translate.google.com\/?sl=auto&tl=en&text=' + encodeURIComponent(wordsare) + '%0A&op=translate', '_blank', 'left=100,top=100,width=500,height=500');<br \/>\n         }<br \/>\n       }<br \/>\n     }<br \/>\n     }<br \/>\n     if (notset == '') { return eval('' + cby); }<br \/>\n     return cby;<br \/>\n  }<br \/>\n<\/code>  <\/p>\n<p>To see this next example of a &#8220;functional background button&#8221; in action, try the new improved Bridge and 500 game functionality at <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html------------------------------------------GETME\" title=\"cards_usefocus.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html------------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-card-game-google-translate-tutorial\/'>Just Javascript Card Game Google Translate Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjcgfbbt'>Previous relevant <a target=_blank title='Just Javascript Card Game Functional Background Buttons Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-functional-background-buttons-tutorial\/'>Just Javascript Card Game Functional Background Buttons 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\/cards_usefocus.html?card_memories=04.1\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game Functional Background Buttons Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_qcell.jpg\" title=\"Just Javascript Card Game Functional Background Buttons Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game Functional Background Buttons Tutorial<\/p><\/div>\n<p>Recent blog posts in our recent &#8220;Just Javascript&#8221; card game series such as yesterday&#8217;s <a title='Just Javascript Card Game Invalid Bids Tutorial' href='#jjcgibt'>Just Javascript Card Game Invalid Bids Tutorial<\/a> had us restart our interest in window.open popups to allow for large readable card and suit emoji fonts.  They worked for non-remote players &#8230;<\/p>\n<ul>\n<li>during the bidding phase where a &#8220;?&#8221; answer to a Javascript prompt popup could work the logic &#8230; and today we add to that &#8230;<\/li>\n<li>after the bidding phase a background table cell (let&#8217;s call it a &#8220;functional background button&#8221;) which can be clicked or touched that can work the logic after the times where Javascript prompt popups are used<\/li>\n<\/ul>\n<p>There are four variable values to slot in between the card hiding table cells and the linear gradient overlay background to tabular cell background &#8230;<\/p>\n<ol>\n<li>var lastbr=&#8217;,no-repeat&#8217;;<\/li>\n<li>var lastbi=&#8221;, Url(\\&#8221;data:image\/svg+xml;utf8,&lt;svg xmlns=&#8217;http:\/\/www.w3.org\/2000\/svg&#8217; width=&#8217;96&#8217; height=&#8217;48&#8217; viewport=&#8217;0 0 100 100&#8242; style=&#8217;background-color:rgba(0,255,0,0.1);fill:black;font-family:Verdana;font-size:30px;&#8217;&gt;&lt;text y=&#8217;65%&#8217;&gt;?&lt;\/text&gt;&lt;\/svg&gt;\\&#8221;)&#8221;;\n<li>var lastbs &#8230; via &#8230;<br \/>\n<code><br \/>\n       var ione=1;<br \/>\n       while (Math.abs(eval(eval('' + opltlistt[ione]) - eval('' + opltlistt[0]))) &lt; 1) {<br \/>\n        ione++;<br \/>\n       }<br \/>\n       lastbs=(',' + eval(eval('' + opltlistl[1]) - eval('' + opltlistl[0]))).split('.')[0] + ('px ' + eval(eval('' + opltlistt[ione]) - eval('' + opltlistt[0]))).split('.')[0] + 'px';<br \/>\n<\/code>\n<\/li>\n<li>var lastbp &#8230; via &#8230;<br \/>\n<code><br \/>\n       var opltlistlpush=(eval(eval('' + opltlistl[eval(-1 + eval('' + opltlistl.length))]) + eval(1 * (eval('' + opltlistl[1]) - eval('' + opltlistl[0])))));<br \/>\n       jhuh=eval(-1 + opltlistl.length);<br \/>\n       lastbp=(',' + eval('' + opltlistlpush)).split('.')[0] + ('px ' + eval('' + opltlistt[eval(0 + jhuh)])).split('.')[0] + 'px';<br \/>\n<\/code>\n<\/li>\n<\/ol>\n<p> &#8230; timed for calculation as the last card hiding table cell is called into our inhouse &#8220;windowopen&#8221; Javascript function, and <font color=blue>used in<\/font> &#8230;<\/p>\n<p><code><br \/>\n    if ((nominal_numplayers && navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i)) && card_game.toLowerCase() == ulgame(\"500ish\") && dhi != '') {<br \/>\n    defstyle=defstyle.replace(';background-size:',  <font color=blue>lastbr + <\/font>'  ,no-repeat,no-repeat' + ';background-size:');<br \/>\n    } else if ((nominal_numplayers && navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i)) && ocp) {<br \/>\n    defstyle=defstyle.replace(';background-size:',  <font color=blue>lastbr + <\/font>'  ,repeat,repeat' + ';background-size:');<br \/>\n    } else if ((nominal_numplayers && navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i)) && dhi != '') {<br \/>\n    defstyle=defstyle.replace(';background-size:',  <font color=blue>lastbr + <\/font>',repeat,repeat' + '  ;background-size:');<br \/>\n    } else {<br \/>\n    defstyle=defstyle.replace(';background-size:',  <font color=blue>lastbr + <\/font>',no-repeat,no-repeat' + '  ;background-size:');<br \/>\n    }<br \/>\n    if (nominal_numplayers) {<br \/>\n    if (navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i)) {<br \/>\n    defstyle=defstyle.replace(';background-position:',  <font color=blue>lastbs + <\/font>covercover + '  ;background-position:');<br \/>\n    } else {<br \/>\n    defstyle=defstyle.replace(';background-position:',  <font color=blue>lastbs + <\/font>covercover + '  ;background-position:');<br \/>\n    }<br \/>\n    } else {<br \/>\n    if ((nominal_numplayers && navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i)) && ocp) {<br \/>\n    defstyle=defstyle.replace(';background-position:',  <font color=blue>lastbs + <\/font>',80px 60px,80px 60px' + '  ;background-position:');<br \/>\n    } else if ((nominal_numplayers && navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i)) && dhi != '') {<br \/>\n    defstyle=defstyle.replace(';background-position:',  <font color=blue>lastbs + <\/font>',80px 60px,80px 60px' + '  ;background-position:');<br \/>\n    } else {<br \/>\n    if (navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i)) {<br \/>\n    defstyle=defstyle.replace(';background-position:',  <font color=blue>lastbs + <\/font>',' + eval(0.7 * window.innerWidth) + 'px ' + eval(0.8 * window.innerHeight) + 'px,' + eval(0.7 * window.innerWidth) + 'px ' + eval(0.8 * window.innerHeight) + 'px' + '  ;background-position:');<br \/>\n    } else {<br \/>\n    defstyle=defstyle.replace(';background-position:',  <font color=blue>lastbs + <\/font>',' + eval(0.7 * screen.width) + 'px ' + eval(0.8 * screen.height) + 'px,' + eval(0.7 * screen.width) + 'px ' + eval(0.8 * screen.height) + 'px' + '  ;background-position:');<br \/>\n    }<br \/>\n    }<br \/>\n    }<br \/>\n    if (lastbp == '' || 1 == 1) {<br \/>\n    defstyle=defstyle.replace(';background-image:',  <font color=blue>lastbp + <\/font>',0px 0px,0px 0px' + '  ;background-image:');<br \/>\n    if ((nominal_numplayers && navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i)) && card_game.toLowerCase() == ulgame(\"500ish\") && dhi != '') {<br \/>\n    defstyle=defstyle.replace('; } &lt;\/style&gt;', <font color=blue>lastbi + <\/font>(',linear-gradient(rgba(255,255,255,0.4),rgba(255,255,255,0.4)),url(' + dhi.split('url(')[1].split(') ')[0] + ')' + '  ;  } &lt;\/style&gt;')); \/\/  + ' ' + owidth + ' ' + oheight<br \/>\n    } else if ((nominal_numplayers && navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i)) && ocp) {<br \/>\n    defstyle=defstyle.replace('; } &lt;\/style&gt;', <font color=blue>lastbi + <\/font>(',linear-gradient(rgba(255,255,255,0.4),rgba(255,255,255,0.4)),url(' + ocp.style.cursor.split('url(')[1].split(') ')[0] + ')' + ';  } &lt;\/style&gt;')); \/\/  + ' ' + owidth + ' ' + oheight<br \/>\n    } else if ((nominal_numplayers && navigator.userAgent.match(\/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile\/i)) && dhi != '') {<br \/>\n    defstyle=defstyle.replace('; } &lt;\/style&gt;', <font color=blue>lastbi + <\/font>(',linear-gradient(rgba(255,255,255,0.4),rgba(255,255,255,0.4)),url(' + dhi.split('url(')[1].split(') ')[0] + ')' + ';  } &lt;\/style&gt;')); \/\/  + ' ' + owidth + ' ' + oheight<br \/>\n    } else if ((nominal_numplayers && card_game.toLowerCase() == ulgame(\"500ish\")) && dhi != '') {<br \/>\n    defstyle=defstyle.replace('; } &lt;\/style&gt;', <font color=blue>lastbi + <\/font>(',linear-gradient(rgba(255,255,255,0.4),rgba(255,255,255,0.4)),url(' + dhi.split('url(')[1].split(') ')[0] + ');  } &lt;\/style&gt;')); \/\/  + ' ' + owidth + ' ' + oheight<br \/>\n    } else {<br \/>\n    defstyle=defstyle.replace('; } &lt;\/style&gt;', <font color=blue>lastbi + <\/font>(',linear-gradient(rgba(255,255,255,0.4),rgba(255,255,255,0.4)),url(\/\/www.rjmprogramming.com.au' + backi + ')' + '; } &lt;\/style&gt;')); \/\/  + ' ' + owidth + ' ' + oheight<br \/>\n    }<br \/>\n    }<br \/>\n<\/code><\/p>\n<p>To see this first example of a &#8220;functional background button&#8221; in action, try the new improved Bridge and 500 game functionality at <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html------------------------------------------GETME\" title=\"cards_usefocus.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html------------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-card-game-functional-background-buttons-tutorial\/'>Just Javascript Card Game Functional Background Buttons Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjcgibt'>Previous relevant <a target=_blank title='Just Javascript Card Game Invalid Bids Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-invalid-bids-tutorial\/'>Just Javascript Card Game Invalid Bids 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\/cards_usefocus.html?card_memories=04.1\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game Invalid Bids Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_invalidbid.jpg\" title=\"Just Javascript Card Game Invalid Bids Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game Invalid Bids Tutorial<\/p><\/div>\n<p>Yesterday&#8217;s <a title='Just Javascript Card Game Popup Alert Tutorial' href='#jjcgpat'>Just Javascript Card Game Popup Alert Tutorial<\/a> tended towards intolerance towards invalid bid answering during the bidding phase for non-remote 500 or bridge card game players, so, today, we tended to these niceties below &#8230;<\/p>\n<ul>\n<li>checking and reasking for Javascript prompt popup invalid interactive answers<\/li>\n<li>parameterizing the &#8220;500&#8221; for 500 card game and &#8220;100&#8221; for bridge card game (scoring) totals (needed) that win a game<\/li>\n<li>added bidding phase <font color=blue>nuanced display<\/font> to go with <font color=brown>longer delays<\/font> (useful to practically separate the viewing of other player&#8217;s cards) for (first applies to non-remote) 500 or bridge player play &#8230;\n<ol>\n<li>Bid <font color=blue>(please, others, turn)<\/font> away Player 1<\/li>\n<li>Bid <font color=blue>(via email)<\/font> away Player 1<\/li>\n<li>Bid <font color=blue>(via SMS)<\/font> away Player 1<\/li>\n<\/ol>\n<\/li>\n<li><font color=purple>improved window.open popup window closes between player bids<\/font><\/li>\n<li>click in first unoccupied table cell (after kitty&#8217;s 3 in the case of 500) redisplays current player&#8217;s cards (in format like with yesterday&#8217;s work)<\/li>\n<\/ul>\n<p><code><br \/>\n  function myalertmc(wh) {<br \/>\n    gwh=wh;<br \/>\n    <font color=purple>for (var invc=1; invc&lt;=eval('' + nominal_numplayers); invc++) {<br \/>\n                    if (suitpops[eval(-1 + invc)]) {<br \/>\n                     if (!suitpops[eval(-1 + invc)].closed) {<br \/>\n                      suitpops[eval(-1 + invc)].close();<br \/>\n                      suitpops[eval(-1 + invc)]=null;<br \/>\n                     }<br \/>\n                    }<br \/>\n    }<\/font><br \/>\n    if (gwh.indexOf(zsuffs[eval(-1 + curplayer)]) != -1) {  gwh=gwh.replace(zsuffs[eval(-1 + curplayer)], reorderz(curplayer,' '));   }<br \/>\n    if (passcnt != 0 && donelistis.indexOf(',' + curplayer + ',') != -1) {<br \/>\n    \/\/alert('CPius');<br \/>\n    gmyalertmc();<br \/>\n    } <font color=brown>else if (in_bidding || cbid.toLowerCase() == 'none') {<br \/>\n      if (('' + emailsms[eval(-1 + bidplayer)]).replace('undefined','').trim() == '') {<br \/>\n      \/\/alert('' + scoresuffix);<br \/>\n      defstyle=defstyle.replace('Bid away ', 'Bid (please, others, turn) away ').replace('Bid (via email) away ', 'Bid (please, others, turn) away ').replace('Bid (via SMS) away ', 'Bid (please, others, turn) away ');<br \/>\n      var prevcsuff=csuff;<br \/>\n      csuff='';<br \/>\n      var hjg='' + bidplayer;<br \/>\n      for (var ipl=0; ipl&lt;hjg.length; ipl++) {<br \/>\n        csuff+=String.fromCodePoint(eval(8320 + eval(eval('' + hjg.substring(ipl,eval(1 + eval('' + ipl))).charCodeAt(0)) - 48)));<br \/>\n      }<br \/>\n     defstyle=defstylereplace(' ' + prevcsuff + '', ' ' + csuff);<br \/>\n     document.head.innerHTML+=bpmore(defstyle);<br \/>\n    setTimeout(gmyalertmc, 8000);<br \/>\n    } else {<br \/>\n    if (('' + emailsms[eval(-1 + bidplayer)]).replace('undefined','').trim().indexOf('@') != -1) {<br \/>\n    if (defstyle.indexOf(' (via email) ') == -1) {<br \/>\n      defstyle=defstyle.replace('Bid away ', 'Bid (via email) away ').replace('Bid (please, others, turn) away ', 'Bid (via email) away ').replace('Bid (via SMS) away ', 'Bid (via email) away ');<br \/>\n      document.head.innerHTML+=bpmore(defstyle);<br \/>\n    }<br \/>\n    }<\/font> else {<br \/>\n    if (defstyle.indexOf(' (via SMS) ') == -1) {<br \/>\n      defstyle=defstyle.replace('Bid away ', 'Bid (via SMS) away ').replace('Bid (please, others, turn) away ', 'Bid (via SMS) away ').replace('Bid (via email) away ', 'Bid (via SMS) away ');<br \/>\n      document.head.innerHTML+=bpmore(defstyle);<br \/>\n    }<br \/>\n    }<br \/>\n    \/\/defstyle=defstyle.replace('Bid away ', 'Bid (please, others, turn) away ').replace('Bid (via email) away ', 'Bid (please, others, turn) away ').replace('Bid (via SMS) away ', 'Bid (please, others, turn) away ');<br \/>\n    setTimeout(gmyalertmc, deftwo);<br \/>\n    }<br \/>\n    deftwo=200;<br \/>\n    } else {<br \/>\n    setTimeout(gmyalertmc, deftwo);<br \/>\n    deftwo=200;<br \/>\n    }<br \/>\n  }<br \/>\n<\/code><\/p>\n<p>To see these nuances in play, try the new improved Bridge and 500 game functionality at <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-----------------------------------------GETME\" title=\"cards_usefocus.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-----------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-card-game-invalid-bids-tutorial\/'>Just Javascript Card Game Invalid Bids Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjcgpat'>Previous relevant <a target=_blank title='Just Javascript Card Game Popup Alert Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-popup-alert-tutorial\/'>Just Javascript Card Game Popup Alert 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\/cards_usefocus.html?card_memories=04.1\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game Popup Alert Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_returnofthepopup.jpg\" title=\"Just Javascript Card Game Popup Alert Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game Popup Alert Tutorial<\/p><\/div>\n<p>If you&#8217;ve &#8220;lasted the distance&#8221; in this &#8220;Just Javascript&#8221; blog posting thread right back to the days of the Memories card game, you&#8217;ll know we started this &#8220;no body definition&#8221; (in the parent window) way back then adding &#8220;card intelligence&#8221; via popup windows (ie. windows that use window.open and keep a track of them via window.open&#8217;s return value and the window.opener value from the popup window point of view back to the parent).  Well &#8230;<\/p>\n<blockquote><p>\nIt&#8217;s the Return of the Popup!\n<\/p><\/blockquote>\n<p>So, with yesterday&#8217;s <a title='Just Javascript Card Game Suit Sort Tutorial' href='#jjcgsst'>Just Javascript Card Game Suit Sort Tutorial<\/a> you may recall &#8230;<\/p>\n<blockquote cite='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-suit-sort-tutorial\/'><p>\nthe prompt popup window does not allow for copy\/paste of the prompt, but the alert box does, and so answers of &#8220;?&#8221; at some prompt windows, present relevant player cards in an alert box whereby its copy\/paste capabilities may offer the player the chance to increase the emoji card font size to be better readable, in n on-remote player scenarios\n<\/p><\/blockquote>\n<p> &#8230; well, that &#8220;alert&#8221; Javascript popup window still holds because there are that many ways window.open scenarios can fail these days, it becomes our &#8220;?&#8221; logic fallback position.  But if window.open works, well, the whole &#8220;can not see what cards we have for non-remote players&#8221; dilemma can be resolved by either\/both &#8230;<\/p>\n<ul>\n<li>still, copy\/paste contents to a third party text editor or viewer &#8230; but more happily in our mind &#8230;<\/li>\n<li>our inhouse window.open popups are designed to show these card and suit emojis with a big font that should help &#8230; and &#8230;<\/li>\n<\/ul>\n<p> &#8230; also we sequence this window.open popup ahead of a prompt Javascript window &#8220;reask&#8221; (of the same question) that self-minimizes after 8 seconds (extendable via your own window.open clicks).<\/p>\n<p>A long running bugbear, for us, and perhaps for you, gets a makeover improvement, we hope you agree?!<\/p>\n<p>And so, try the new improved Bridge and 500 game functionality at <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-----------------------------------------GETME\" title=\"cards_usefocus.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-----------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-card-game-popup-alert-tutorial\/'>Just Javascript Card Game Popup Alert Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjcgsst'>Previous relevant <a target=_blank title='Just Javascript Card Game Suit Sort Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-suit-sort-tutorial\/'>Just Javascript Card Game Suit Sort 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\/cards_usefocus.html?card_memories=04.1\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Card Game Suit Sort Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_bridgesort.jpg\" title=\"Just Javascript Card Game Suit Sort Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Card Game Suit Sort Tutorial<\/p><\/div>\n<p>Onto yesterday&#8217;s <a title='Just Javascript Bridge Card Game Redouble Tutorial' href='#jjbcgrt'>Just Javascript Bridge Card Game Redouble Tutorial<\/a> we have two improvements to show today, they being &#8230;<\/p>\n<ul>\n<li>for 500 and bridge card games we now add to the sorting of cards into suits, the sorting of cards within that suit (to the best of our ability, in the case of 500)<\/li>\n<li>the prompt popup window does not allow for copy\/paste of the prompt, but the alert box does, and so answers of &#8220;?&#8221; at some prompt windows, present relevant player cards in an alert box whereby its copy\/paste capabilities may offer the player the chance to increase the emoji card font size to be better readable, in n on-remote player scenarios<\/li>\n<\/ul>\n<p>Below is the new non-remote card display sorting Javascript function<font size=1>ality<\/font> &#8230;<\/p>\n<p><code><br \/>\n  function reorderz(inpn) {<br \/>\n    var inm=0;<br \/>\n    var newz='';<br \/>\n    var rone='';<br \/>\n    var newzs=[];<br \/>\n    var zz='00';<br \/>\n    var thec='c';<br \/>\n    var thes='s';<br \/>\n    var rin=ysuffs[eval(-1 + eval('' + inpn))].substring(1).split('' + inpn + doteleven)[0].split(' ');<br \/>\n    if (card_game.toLowerCase() == '500ish') { zz='17'; thec='C'; thes='S'; }<br \/>\n    for (inm=0; inm&lt;rin.length; inm++) {<br \/>\n      if (rin[inm].indexOf(',') != -1) {<br \/>\n        rone=rin[inm].split(',')[1] + \".gif\";<br \/>\n        if (rone.indexOf('c.') != -1) {<br \/>\n          rone=thec + rone.replace('c.','.');<br \/>\n        } else if (rone.indexOf('s.') != -1) {<br \/>\n          rone=thes + rone.replace('s.','.');<br \/>\n        } else if (rone.indexOf('d.') != -1) {<br \/>\n          rone='d' + rone.replace('d.','.');<br \/>\n        } else if (rone.indexOf('h.') != -1) {<br \/>\n          rone='h' + rone.replace('h.','.');<br \/>\n        }<br \/>\n        \/\/alert(rone.replace('11',zz).replace('02','92').replace('03','83').replace('04','74').replace('05','65').replace('06','56').replace('07','47').replace('08','38').replace('09','29').replace('10','18').replace('12','16').replace('13','15') + ',' + inm);<br \/>\n        newzs.push(rone.replace('11',zz).replace('02','92').replace('03','83').replace('04','74').replace('05','65').replace('06','56').replace('07','47').replace('08','38').replace('09','29').replace('10','18').replace('12','16').replace('13','15') + ',' + inm);<br \/>\n      }<br \/>\n    }<br \/>\n    if (newzs.length == 0) {<br \/>\n    return zsuffs[eval(-1 + eval('' + inpn))].split('' + inpn + doteleven)[0];<br \/>\n    } else {<br \/>\n    newzs.sort();<br \/>\n    for (inm=0; inm&lt;newzs.length; inm++) {<br \/>\n      newz+=' ' + ysuffs[eval(-1 + eval('' + inpn))].substring(1).split(' ')[eval('' + newzs[inm].split(',')[1])].split(',')[0];<br \/>\n    }<br \/>\n    }<br \/>\n    return newz + ' (if too small ? shows alert box where copy\/paste might help)';<br \/>\n  }<br \/>\n<\/code> <\/p>\n<p>So try the new improved Bridge and 500 game functionality at <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html----------------------------------------GETME\" title=\"cards_usefocus.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html----------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-card-game-suit-sort-tutorial\/'>Just Javascript Card Game Suit Sort Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjbcgrt'>Previous relevant <a target=_blank title='Just Javascript Bridge Card Game Redouble Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-bridge-card-game-redouble-tutorial\/'>Just Javascript Bridge Card Game Redouble 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\/cards_usefocus.html?card_memories=04.1\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Bridge Card Game Redouble Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_redouble.jpg\" title=\"Just Javascript Bridge Card Game Redouble Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Bridge Card Game Redouble Tutorial<\/p><\/div>\n<p>Onto yesterday&#8217;s <a title='Just Javascript Bridge Card Game Primer Tutorial' href='#jjbcgpt'>Just Javascript Bridge Card Game Primer Tutorial<\/a>, as a &#8220;difference&#8221;, we add some Bridge card game scoring logic that does not happen with the 500 card game &#8230;<\/p>\n<p><code><br \/>\ndouble and redouble (pseudo) bids (affecting scoring)<br \/>\n<\/code><\/p>\n<p> &#8230; representing the first dynamically applicable bidding options in the Bridge card game (and there were none in 500 card game) &#8230;<\/p>\n<ul>\n<li>&#8220;double&#8221; bid immediately applied to the (so far) leading bid (by the opposition) applying a factor of 2 to the scoring<\/li>\n<li>&#8220;redouble&#8221; bid immediately applied by the leading bid partner to the &#8220;double&#8221; bid immediately applied to the (so far) leading bid (by the opposition) applying a factor of 4 to the scoring &#8230; all &#8230;<\/li>\n<li>brought back to the default scoring factor of 1 by any new higher leading bid<\/li>\n<\/ul>\n<p> &#8230; <font color=blue>as per<\/font> &#8230;<\/p>\n<p><code><br \/>\n  <font color=blue>var dsdn=\" style='display:none;'\";<br \/>\n  var rsdn=\" style='display:none;'\";<br \/>\n  var doublefactor=1;<br \/>\n <br \/> <br \/>\n    function dr(cb) {<br \/>\n      if (doublefactor == 2 && card_game.toUpperCase() == 'BRIDGE') {<br \/>\n        return '' + cb + ' ' + String.fromCodePoint(10133); \/\/&#10133;';<br \/>\n      } else if (doublefactor == 4 && card_game.toUpperCase() == 'BRIDGE') {<br \/>\n        return '' + cb + ' ' + String.fromCodePoint(10133) + ' ' + String.fromCodePoint(174,65039); \/\/&#10133; &#174;&#65039;';<br \/>\n      }<br \/>\n      return '' + cb;<br \/>\n    }<br \/>\n <br \/> <br \/>\n    function drb(invis) {<br \/>\n      if (doublefactor == 1) { return '' + invis; }<br \/>\n      return '' + invis + ' x ' + doublefactor;<br \/>\n    }<br \/>\n <br \/> <br \/>\n    function brd(invis) {<br \/>\n      var jnvis=eval(doublefactor * eval('' + invis));<br \/>\n      return '' + jnvis;<br \/>\n    }<\/font><br \/>\n\/\/<br \/>\n\/\/ used in email creation<br \/>\n        outdivhtml=outdivhtml.replace('&lt;\/tbody&gt;', '&lt;tr id=trbid&gt;&lt;td&gt;Bidding&lt;br&gt;Current Bid: None&lt;td&gt;&lt;input type=' + cbidfound + ' name=myanswer value=\"pass \"&gt;&lt;\/input&gt;<font color=blue>&lt;input' + dsdn + ' type=' + cbidfound + ' name=myanswer value=\"double \"&gt;&lt;\/input&gt;&lt;input' + rsdn + ' type=' + cbidfound + ' name=myanswer value=\"redouble \"&gt;&lt;\/input&gt;<\/font>&lt;\/td&gt;&lt;\/TR&gt;&lt;\/tbody&gt;');<br \/>\n<\/code><\/p>\n<p>Try the new Bridge game functionality at <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html---------------------------------------GETME\" title=\"cards_usefocus.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html---------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-bridge-card-game-redouble-tutorial\/'>Just Javascript Bridge Card Game Redouble Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjbcgpt'>Previous relevant <a target=_blank title='Just Javascript Bridge Card Game Primer Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-bridge-card-game-primer-tutorial\/'>Just Javascript Bridge Card Game 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\/cards_usefocus.html?card_memories=04.1\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Bridge Card Game Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_bridge.jpg\" title=\"Just Javascript Bridge Card Game Primer Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Bridge Card Game Primer Tutorial<\/p><\/div>\n<p>&#8220;Commonalities and differences&#8221; is a strategy for code development.  A good enough guinea pig and you can shape it into something &#8220;similar, but different&#8221;.  The 500 card game of recent times has code to shape into a Bridge card game with some provisos &#8230;<\/p>\n<ul>\n<li>Bridge scoring we have only started &#8230; it is far more complicated than 500 card game scoring<\/li>\n<li>Bridge is simpler regarding kitties &#8230; there are none<\/li>\n<li>Bridge is simpler regarding bowers and Jokers &#8230; there are none<\/li>\n<li>Bridge has 13 tricks per round, while 500 card game has 10<\/li>\n<li>Contract Bridge has teams of 2 x 2 like 500 card game<\/li>\n<li>Bridge has bidding like 500 but more options and no Mis\u00e8re &#8230; but &#8230;<\/li>\n<li>like the 500 card game&#8217;s Open Mis\u00e8re bid the partner of the winning bidder in Bridge always exposes their hand<\/li>\n<\/ul>\n<p> &#8230; and so can you see why the work of yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Early Complete Exit Tutorial' href='#jjfhcgecet'>Just Javascript Five Hundred Card Game Early Complete Exit Tutorial<\/a> is such a good guinea pig for a big leg up developing a Bridge Card Game web application &#8220;Just Javascript&#8221;?!<\/p>\n<p>We created a &#8220;mapping function&#8221; to help &#8230;<\/p>\n<p><code><br \/>\n  function ulgame(instg) {<br \/>\n    if (instg.indexOf('500 ') == 0 && card_game.toLowerCase() == 'bridge') {<br \/>\n      instg=instg.replace(\/500\\ \/g, 'Bridge ');<br \/>\n    } else if (instg.toLowerCase() == instg && card_game.toLowerCase() == 'bridge') {<br \/>\n      return 'bridge';<br \/>\n    } else if (instg.toUpperCase() == instg && card_game.toLowerCase() == 'bridge') {<br \/>\n      return 'BRIDGE';<br \/>\n    }<br \/>\n    return instg;<br \/>\n  }<br \/>\n<\/code><\/p>\n<p> &#8230; with a whole lot of &#8220;if logic&#8221; codelines such as &#8230;<\/p>\n<p><code><br \/>\n if (card_game == ulgame('500ISH')) {<br \/>\n   \/\/ 500 2 x 2 or Bridge 2 x 2 logic can go here<br \/>\n }<br \/>\n<\/code><\/p>\n<p> &#8230; amongst a lot of other web inspector inspired changes to get to <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html--------------------------------------GETME\" title=\"cards_usefocus.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html--------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!   Try adding &#8220;.1&#8221; to number of card players to play (our hybrid) &#8220;Bridge&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;Bridge card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-bridge-card-game-primer-tutorial\/'>Just Javascript Bridge Card Game Primer Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcgecet'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Early Complete Exit Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-early-complete-exit-tutorial\/'>Just Javascript Five Hundred Card Game Early Complete Exit 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Early Complete Exit Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_earlycompleteexit.jpg\" title=\"Just Javascript Five Hundred Card Game Early Complete Exit Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game Early Complete Exit Tutorial<\/p><\/div>\n<p>Yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Early Exit Tutorial' href='#jjfhcgeet'>Just Javascript Five Hundred Card Game Early Exit Tutorial<\/a> talked of &#8230;<\/p>\n<ul>\n<li>&#8220;Early Exit&#8221; from a &#8220;round&#8221; of 500 card game play that contributes to, depending on how competitive you make these things, scoring towards that 500 (or -500 <font size=1>&#8230; boo hoo<\/font>) completion of the &#8220;official&#8221; version of the game &#8230; but &#8230;<\/li>\n<li>perhaps you have a fierce Player 1 and Player 3 versus Player 2 and Player 4 rivalry going on <font size=1>&#8230; no fisticuffs, pleeeeeaaaaassssse &#8230;<\/font> which makes you interested, as far as playing 500 goes with keeping track of that Player 1 and Player 3 versus Player 2 and Player 4 rivalry in terms of scoring, perhaps ongoing, which we can help with, and carry through, if you have that remote email player arrangement<\/li>\n<\/ul>\n<p>In that last case above, we arrange automation of the scoring, in our var<font size=1>iable<\/font> &#8220;scoresuffix&#8221; &#8230; so that &#8230;<\/p>\n<ul>\n<li>on a player team reaching 500 or the other reaching -500 &#8230;<\/li>\n<li>in that arrangement with all remote lowercase email addresses defined &#8230;<\/li>\n<li>we now &#8220;chain along&#8221; (into our GET ? and &#038; arguments) a new &#8220;overallss&#8221; of the form &#8230;<br \/>\n<code><br \/>\n&overallss=[Player 1 and Player 3 score],[Player 2 and Player 4 score]<br \/>\n<\/code><br \/>\n &#8230; facilitating &#8230;<\/li>\n<li>on such a scenario, the &#8220;chain along&#8221; of the &#8220;scoresuffix&#8221; becomes &#8230;<br \/>\n<code><br \/>\n&scoresuffix=0.0,0.0,0.0,0.0<br \/>\n<\/code><br \/>\n &#8230; effectively completing resetting the 500 card game &#8230; but &#8230;\n<\/li>\n<li>remembering the rivalry, recording the &#8220;overallss&#8221; situation within the subject lines of the emails that get sent out when a trick is won, this trick triggering an exit from the &#8220;round of play&#8221; and from &#8220;the 500 card game&#8221; as nominally understood &#8230; <font color=blue>as per<\/font> &#8230;<\/li>\n<\/ul>\n<p><code><br \/>\n  function oraass(inss) {<br \/>\n    if (aass != '') {<br \/>\n      if (inss != aass && defstyle.indexOf(inss) != -1) { <font color=blue>llj=alterurl(llj);<\/font>  defstyle=defstyle.replace(inss,aass); document.head.innerHTML=bpmore(defstyle); }<br \/>\n      return aass;<br \/>\n    }<br \/>\n    return inss;<br \/>\n  }<br \/>\n<br \/> <br \/>\n  <font color=blue>function alterurl(inllj) {<br \/>\n     if (eval(eval('' + jscores[0]) + eval('' + jscores[2])) &gt;= 500) {<br \/>\n           endgameblurb='Congratulations, Player 1 and Player 3 for reaching 500.  '; \/\/Another game?')) {<br \/>\n           \/\/lurldone=true;<br \/>\n           \/\/location.href=lurl();<br \/>\n           \/\/jscores=[0,0,0,0];<br \/>\n           inllj=inllj.replace(inllj.split('scoresuffix=')[1].split('&')[0], encodeURIComponent('0.0,0.0,0.0,0.0'));<br \/>\n           overallscores[0]++;<br \/>\n           inllj=inllj.replace(inllj.split('overallss=')[1].split('&')[0], encodeURIComponent('' + overallscores[0] + ',' + overallscores[1]));<br \/>\n           endgameblurb+=' Overall scores Player 1 and Player 3 - ' + overallscores[0] + ' and Player 2 and Player 4 - ' + overallscores[1] + '.  ';<br \/>\n    } else if (eval(eval('' + jscores[1]) + eval('' + jscores[3])) &gt;= 500) {<br \/>\n           endgameblurb='Congratulations, Player 2 and Player 4 for reaching 500.  '; \/\/  Another game?')) {<br \/>\n           \/\/lurldone=true;<br \/>\n           \/\/location.href=lurl();<br \/>\n           \/\/jscores=[0,0,0,0];<br \/>\n           inllj=inllj.replace(inllj.split('scoresuffix=')[1].split('&')[0], encodeURIComponent('0.0,0.0,0.0,0.0'));<br \/>\n           overallscores[1]++;<br \/>\n           inllj=inllj.replace(inllj.split('overallss=')[1].split('&')[0], encodeURIComponent('' + overallscores[0] + ',' + overallscores[1]));<br \/>\n           endgameblurb+=' Overall scores Player 2 and Player 4 - ' + overallscores[1] + ' and Player 1 and Player 3 - ' + overallscores[0] + '.  ';<br \/>\n    } else if (eval(eval('' + jscores[0]) + eval('' + jscores[2])) &lt;= -500) {<br \/>\n           endgameblurb='Congratulations, Player 2 and Player 4 for opponents reaching -500.  '; \/\/  Another game?')) {<br \/>\n           \/\/lurldone=true;<br \/>\n           \/\/location.href=lurl();<br \/>\n           \/\/jscores=[0,0,0,0];<br \/>\n           inllj=inllj.replace(inllj.split('scoresuffix=')[1].split('&')[0], encodeURIComponent('0.0,0.0,0.0,0.0'));<br \/>\n           overallscores[1]++;<br \/>\n           inllj=inllj.replace(inllj.split('overallss=')[1].split('&')[0], encodeURIComponent('' + overallscores[0] + ',' + overallscores[1]));<br \/>\n           endgameblurb+=' Overall scores Player 2 and Player 4 - ' + overallscores[1] + ' and Player 1 and Player 3 - ' + overallscores[0] + '.  ';<br \/>\n     } else if (eval(eval('' + jscores[1]) + eval('' + jscores[3])) &lt;= -500) {<br \/>\n           endgameblurb='Congratulations, Player 1 and Player 3 for opponents reaching -500.  '; \/\/  Another game?')) {<br \/>\n           \/\/lurldone=true;<br \/>\n           \/\/location.href=lurl();<br \/>\n           \/\/jscores=[0,0,0,0];<br \/>\n           inllj=inllj.replace(inllj.split('scoresuffix=')[1].split('&')[0], encodeURIComponent('0.0,0.0,0.0,0.0'));<br \/>\n           overallscores[0]++;<br \/>\n           inllj=inllj.replace(inllj.split('overallss=')[1].split('&')[0], encodeURIComponent('' + overallscores[0] + ',' + overallscores[1]));<br \/>\n           endgameblurb+=' Overall scores Player 1 and Player 3 - ' + overallscores[0] + ' and Player 2 and Player 4 - ' + overallscores[1] + '.  ';<br \/>\n    }<br \/>\n    return inllj;<br \/>\n  }<\/font><br \/>\n<br \/> <br \/>\n  function documenttitleeq(indt) {<br \/>\n   var bburl=aaurl;<br \/>\n   documenttitle=indt;<br \/>\n   if (card_game.toLowerCase() == '500ish') {<br \/>\n   if (card_game == '500ISH') {<br \/>\n   document.title='500 card game where winning bid is ' + (cbid + ' (by Player ' + cbidby + ')').replace('None (by Player 1)','Pass').replace('None','Pass').replace('1','1,Player III').replace('2','2,Player IV').replace('3','3,Player 1').replace('4','4,Player 2').replace('III','3').replace('IV','4') + ' and trumps are ' + trumpsare.replace('c','Club').replace('d','Diamond').replace('s','Spade').replace('h','Heart').replace('0','No Trump') + 's' + ' ... ' + scoresuffix + sss;<br \/>\n   if (eval('' + nominal_numplayers + ' * (' + scoresuffix.replace(\/\\,\/g, ' + ') + ')')  &gt;= 40 || gameover != '') {<br \/>\n     if (eval('' + totcpp) &gt; 0) {<br \/>\n     totcpp=-totcpp;<br \/>\n     if (llj == '') { llj=sfhz(false); }<br \/>\n     if (('' + emailsms[0]).indexOf('@') != -1 && ('' + emailsms[0]).toLowerCase() == ('' + emailsms[0])) {<br \/>\n       scoresuffix=oraass(scoresuffix);<br \/>\n       location.href=<font color=blue>alterurl(<\/font>llj<font color=blue>)<\/font>;<br \/>\n     } else if (confirm(  ((bburl == aaurl) ? 'Thanks for playing the 500 card game ... ' + oraass(scoresuffix) + sss + ' ... OK to play again?' : endgameblurb + ' Thanks for playing the 500 card game ... ' + oraass(scoresuffix) + sss + ' ... OK to play again?')   )) {<br \/>\n       location.href=<font color=blue>alterurl(<\/font>llj<font color=blue>)<\/font>; \/\/lurl();<br \/>\n     }<br \/>\n     }<br \/>\n   }<br \/>\n   } else {<br \/>\n   if (cbid.replace('None', '') != '') {<br \/>\n   document.title='500 card game where winning bid is ' + (cbid + ' (by Player ' + cbidby + ')').replace('None (by Player 1)','Pass').replace('None','Pass').replace('1','1,Player III').replace('2','2,Player IV').replace('3','3,Player 1').replace('4','4,Player 2').replace('III','3').replace('IV','4') + ' and trumps are ' + trumpsare.replace('c','Club').replace('d','Diamond').replace('s','Spade').replace('h','Heart').replace('0','No Trump') + 's' + ' ... ' + scoresuffix + sss;<br \/>\n   } else if (in_bidding) {<br \/>\n   document.title='500 card game ... ' + scoresuffix + sss;<br \/>\n   } else {<br \/>\n   document.title='500 (hybrid) card game ... ' + scoresuffix + sss;<br \/>\n   }<br \/>\n   if (eval('' + nominal_numplayers + ' * (' + scoresuffix.replace(\/\\,\/g, ' + ') + ')')  &gt;= Math.abs(eval('' + totcpp))) {<br \/>\n     if (eval('' + totcpp) &gt; 0) {<br \/>\n     totcpp=-totcpp;<br \/>\n     if (confirm('Thanks for playing the 500 (hybrid) card game ... ' + scoresuffix + sss + ' ... OK to play again?')) {<br \/>\n       location.href=document.URL;<br \/>\n     }<br \/>\n     }<br \/>\n   }<br \/>\n   }<br \/>\n   } else {<br \/>\n   document.title=documenttitle;<br \/>\n   }<br \/>\n  }<br \/>\n<\/code><\/p>\n<p>In light of this, the scenario of today&#8217;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_earlycompleteexit.jpg\" title=\"Tutorial picture\">tutorial picture<\/a> may horrify some and amuse others, as the scenario of the world&#8217;s shortest game of 500 &#8230;<\/p>\n<ul>\n<li>Player 1 bids 10n (ie. 10 no trumps)<\/li>\n<li>Player 1 leads<\/li>\n<li>Player 2 beats the lead<\/li>\n<li>Player 3 cannot beat the card of Player 2 &#8230; it&#8217;s all done and dusted &#8230; but &#8230;<\/li>\n<li>Player 4 cannot beat the card of Player 2 &#8230; seals the (bad) deal &#8230;<\/li>\n<li>Score becomes -0.520,1.0,0.0,0.0 (as reflected on emails sent to players) &#8230; and &#8230;<\/li>\n<li>the 500 card game application sets the score to 0.0,0.0,0.0,0.0 (for internal use only) and overallss to 0,1 with an &#8220;as if from the start&#8221; shuffling and dealing of new cards &#8230; the &#8220;as if&#8221; in &#8220;as if from the start&#8221; is pertinent &#8230; nowadays a new game like this has Player 2 replace Player 1 as the &#8220;dealer&#8221; (but Player 1 remains the &#8220;host&#8221;)<\/li>\n<\/ul>\n<p>Still going as &#8220;Just Javascript&#8221; (ie. no &#8220;body&#8221; element definition) try <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-------------------------------------GETME\" title=\"cards_usefocus.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/new-just-javascript-five-hundred-card-game-early-exit-tutorial\/'>New Just Javascript Five Hundred Card Game Early Exit Tutorial<\/a> ...<\/p>\n\n\n\n\n\n<hr>\n\n\n\n\n\n<p id='jjfhcgeet'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Early Exit Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-early-exit-tutorial\/'>Just Javascript Five Hundred Card Game Early Exit Tutorial<\/a> is shown below.<\/p>\n\n\n\n[caption id=\"\" align=\"alignnone\" width=\"220\" caption=\"Just Javascript Five Hundred Card Game Early Exit Tutorial\"]<a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Early Exit Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_scoreemail.jpg\" title=\"Just Javascript Five Hundred Card Game Early Exit Tutorial\"  style=\"float:left;\" \/><\/a>[\/caption]\n\n\n\n<p>Onto yesterday's <a title='Just Javascript Five Hundred Card Game Open Mis\u00e8re Progress Bar Tutorial' href='#jjfhcgom\u00e8pbt'>Just Javascript Five Hundred Card Game Open Mis\u00e8re Progress Bar Tutorial<\/a> progress, bar<font size=1>ring setbacks ... tee hee ...<\/font> we want to further progress towards a mode of use that goes ...<\/p>\n\n\n\n\n\n<ul>\n\n\n<li>500 card game ...<\/li>\n\n\n\n\n<li>like \"04.0,Robert Metcalfe[rmetcalfe15@gmail.com;rmetcalfe41@gmail.com], RMet[rmetcalfe15@gmail.com], RM[rmetcalfe41@gmail.com], R.M[rmetcalfe41@gmail.com] \" entered (deliberate space at end) at first prompt<\/li>\n\n\n<\/ul>\n\n\n\n\n\n<p> ... then that's it, the rest (of the 500 card game) able to be transacted via email (perhaps out and about), with the hoster's originating webpage displaying the results of a round of tricks and updating scores ...<\/p>\n\n\n\n\n\n<ul>\n\n\n<li>the deliberate space allowing cards through that do not follow suit with no quibbling<\/li>\n\n\n\n\n<li>and that hoster having a fully lowercase email address (as do the other players)<\/li>\n\n\n<\/ul>\n\n\n\n\n\n<p> ... allows us to head towards this \"only email interaction\" mode of play concept.  We have not tested screens falling asleep etcetera etcetera etcetera but we are keen to see how far the concept can go.<\/p>\n\n\n\n\n\n<p>Just as <a target=_blank title='?' href='https:\/\/www.youtube.com\/watch?v=6X7Sx62plCw'>Kenny Rogers<\/a> wants to ...<\/p>\n\n\n\n\n\n<blockquote>\nKnow when to fold 'em\n<\/blockquote>\n\n\n\n\n\n<p> ... the work today on top of parsing the host's more complex entries at that first Javascript prompt window, is to deal with the idea of an Early Exit from a bidded on 500 round when any of ...<\/p>\n\n\n\n\n\n<ul>\n\n\n<li>Mis\u00e8re bidder wins a trick ahead of the 10 possible tricks that can be played<\/li>\n\n\n\n\n<li>non-Mis\u00e8re bidder wins the requisite number of tricks ahead of the 10 possible tricks that can be played<\/li>\n\n\n\n\n<li>non-Mis\u00e8re bidder loses the requisite number of tricks ahead of the 10 possible tricks that can be played<\/li>\n\n\n<\/ul>\n\n\n\n\n\n<p> ... where we now step in and call off proceedings as this happens, perhaps.<\/p>\n\n\n\n\n\n<p>Continuing on as still \"Just Javascript\" (ie. no \"body\" element definition) try <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html------------------------------------GETME\" title=\"cards_usefocus.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html------------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the \"Just Javascript\" <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding \".0\" to number of card players to play (our hybrid) \"500\" card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your \"500 card game\" players (who can affect the game remotely via email)!<\/p>\n\n\n\n<!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-early-exit-tutorial\/'>Just Javascript Five Hundred Card Game Early Exit Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcgom\u00e8pbt'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Open Mis\u00e8re Progress Bar Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-open-mis\u00e8re-progress-bar-tutorial\/'>Just Javascript Five Hundred Card Game Open Mis\u00e8re Progress Bar 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Open Mis\u00e8re Progress Bar Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocusprogress.jpg\" title=\"Just Javascript Five Hundred Card Game Open Mis\u00e8re Progress Bar Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game Open Mis\u00e8re Progress Bar Tutorial<\/p><\/div>\n<p>Even with yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Open Mis\u00e8re All Local Tutorial' href='#jjfhcgom\u00e8alt'>Just Javascript Five Hundred Card Game Open Mis\u00e8re All Local Tutorial<\/a>, it may not seem like it, but we have been beavering away keeping the 500 card game &#8220;status area&#8221; giving relevant information.  Today we load it up even more as a dual purpose &#8230;<\/p>\n<ul>\n<li>background (svg) &#8220;rect&#8221; element semi-transparent background to 500 card game status area progress bars for Player 1\/3 scoring and Player 2\/4 scoring &#8230; displaying during the bidding and kitty phase of the game &#8230; and then &#8230;<\/li>\n<li>background (svg) &#8220;rect&#8221; element semi-transparent background to 500 card game status area progress bar for leading bid trick round scoring relative to final bid made &#8230; displaying during card play phase of the game<\/li>\n<\/ul>\n<p> &#8230; as per (the multi-purpose) &#8230;<\/p>\n<p><code><br \/>\n  function progressbar(inoutss) {<br \/>\n      var outss=inoutss;<br \/>\n      if (outss == '') { outss=scoresuffix; }<br \/>\n      var totball=0;<br \/>\n      var totnball=0;<br \/>\n    if (card_game == '500ISH') { \/\/ && cbid.replace('None','pass') != 'pass') {<br \/>\n      var prevbb=bbtextb;<br \/>\n      var tonget=0;<br \/>\n      var ssare=outss.replace(\/\\-\/g,'').split(',');<br \/>\n      var ssallare=outss.split(',');<br \/>\n    var abbtextb=bbtextb;<br \/>\n    if (!in_bidding && !in_kitty) {<br \/>\n      var tott=eval(Math.floor(eval(ssare[0])) + Math.floor(eval(ssare[1])) + Math.floor(eval(ssare[2])) + Math.floor(eval(ssare[3])));<br \/>\n      var totb=0;<br \/>\n      var totnb=0;<br \/>\n<br \/>\n      var toget=-10;<br \/>\n      if (('' + cbid).substring(0,1) == '6') { toget=6; tonget=4; }<br \/>\n      if (('' + cbid).substring(0,1) == '7') { toget=7; tonget=3; }<br \/>\n      if (('' + cbid).substring(0,1) == '8') { toget=8; tonget=2; }<br \/>\n      if (('' + cbid).substring(0,1) == '9') { toget=9; tonget=1; }<br \/>\n      if (('' + cbid).substring(0,2) == '10') { toget=10; tonget=0; }<br \/>\n      if (('' + cbidby).replace('3','1') == '1') {<br \/>\n        totb=eval(Math.floor(eval(ssare[0])) + Math.floor(eval(ssare[2])));<br \/>\n        totnb=eval(Math.floor(eval(ssare[1])) + Math.floor(eval(ssare[3])));<br \/>\n      abbtextb=\"&lt;rect x='0' y='0' width='1400' height='48' fill='rgba(255,0,0,0.3)' \/&gt;\";<br \/>\n      } else {<br \/>\n        totnb=eval(Math.floor(eval(ssare[0])) + Math.floor(eval(ssare[2])));<br \/>\n        totb=eval(Math.floor(eval(ssare[1])) + Math.floor(eval(ssare[3])));<br \/>\n      abbtextb=\"&lt;rect x='0' y='0' width='1400' height='48' fill='rgba(0,255,0,0.3)' \/&gt;\";<br \/>\n      }<br \/>\n<br \/>\n    if (('' + toget) == '-10') {<br \/>\n    if (eval('' + totb) &gt; 0) {<br \/>\n    bbtextb=abbtextb.replace(\" width='\" + abbtextb.split(\" width='\")[1].split(\"'\")[0] + \"'\", \" width='0'\");<br \/>\n    \/\/if (defstyle.indexOf(prevbb) == -1) { alert('Oops'); }<br \/>\n    defstyle=defstyle.replace(prevbb, bbtextb);<br \/>\n    } else {<br \/>\n    bbtextb=abbtextb.replace(\" width='\" + abbtextb.split(\" width='\")[1].split(\"'\")[0] + \"'\", \" width='\" + ('' + eval(-1400 * eval(totnb) \/ eval(toget))).split('.')[0] + \"'\");<br \/>\n    \/\/if (defstyle.indexOf(prevbb) == -1) { alert('OOps'); }<br \/>\n    defstyle=defstyle.replace(prevbb, bbtextb);<br \/>\n    }<br \/>\n    } else {<br \/>\n    if (eval('' + totnb) &gt; eval('' + tonget)) {<br \/>\n    bbtextb=abbtextb.replace(\" width='\" + abbtextb.split(\" width='\")[1].split(\"'\")[0] + \"'\", \" width='0'\");<br \/>\n    \/\/if (defstyle.indexOf(prevbb) == -1) { alert('OoPs'); }<br \/>\n    defstyle=defstyle.replace(prevbb, bbtextb);<br \/>\n    } else {<br \/>\n    bbtextb=abbtextb.replace(\" width='\" + abbtextb.split(\" width='\")[1].split(\"'\")[0] + \"'\", \" width='\" + ('' + eval(1400 * eval(totb) \/ eval(toget))).split('.')[0] + \"'\");<br \/>\n    \/\/if (defstyle.indexOf(prevbb) == -1) { alert('OopS'); }<br \/>\n    defstyle=defstyle.replace(prevbb, bbtextb);<br \/>\n    }<br \/>\n    }<br \/>\n    } else {  \/\/ progress bar RE 1\/3 getting to 500 and 2\/4 getting to 500<br \/>\n<br \/>\n      \/\/alert(11);<br \/>\n      totball=eval((eval(((ssallare[0].substring(0,1) == '-') ? '-' : '') + (ssallare[0] + '.0').split('.')[1])) + (eval(((ssallare[2].substring(0,1) == '-') ? '-' : '') + (ssallare[2] + '.0').split('.')[1])));<br \/>\n      var x1=700;<br \/>\n      var w1=1400;<br \/>\n      var x2=700;<br \/>\n      var w2=1400;<br \/>\n      if (eval('' + totball) &lt; 0) {<br \/>\n        w1=eval(-700 * eval('' + totball) \/ 500);<br \/>\n        x1=eval(700 + eval(700 * eval('' + totball) \/ 500));<br \/>\n      } else {<br \/>\n        x1=700;<br \/>\n        w1=eval(700 * eval('' + totball) \/ 500);<br \/>\n      }<br \/>\n      totnball=eval((eval(((ssallare[1].substring(0,1) == '-') ? '-' : '') + (ssallare[1] + '.0').split('.')[1])) + (eval(((ssallare[3].substring(0,1) == '-') ? '-' : '') + (ssallare[3] + '.0').split('.')[1])));<br \/>\n      if (eval('' + totnball) &lt; 0) {<br \/>\n        w2=eval(-700 * eval('' + totnball) \/ 500);<br \/>\n        x2=eval(700 + eval(700 * eval('' + totnball) \/ 500));<br \/>\n      } else {<br \/>\n        x2=700;<br \/>\n        w2=eval(700 * eval('' + totnball) \/ 500);<br \/>\n      }<br \/>\n      abbtextb=\"&lt;rect x='\" + Math.floor(x1) + \"' y='0' width='\" + Math.max(Math.floor(w1),1) + \"' height='24' fill='rgba(255,0,0,0.3)' \/&gt;&lt;rect x='\" + Math.floor(x2) + \"' y='24' width='\" + Math.max(Math.floor(w2),1) + \"' height='24' fill='rgba(0,255,0,0.3)' \/&gt;\"<br \/>\n      bbtextb=abbtextb;<br \/>\n      \/\/if (defstyle.indexOf(prevbb) != -1) { alert('abbtextb=' + abbtextb); }<br \/>\n      defstyle=defstyle.replace(prevbb, bbtextb);<br \/>\n      document.head.innerHTML+=bpmore(defstyle);<br \/>\n    }<br \/>\n<br \/>\n    }<br \/>\n    if (inoutss == '') { return bbtextb; }<br \/>\n    return outss;<br \/>\n  }<br \/>\n<\/code><\/p>\n<p>This mild form of animation is still &#8220;Just Javascript&#8221; (ie. no &#8220;body&#8221; element definition) in <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-----------------------------------GETME\" title=\"cards_usefocus.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-----------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-five-hundred-card-game-open-mis\u00e8re-progress-bar-tutorial\/'>Just Javascript Five Hundred Card Game Open Mis\u00e8re Progress Bar Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcgom\u00e8alt'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Open Mis\u00e8re All Local Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-open-mis\u00e8re-all-local-tutorial\/'>Just Javascript Five Hundred Card Game Open Mis\u00e8re All Local 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Open Mis\u00e8re All Local Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_nonremotekitty.jpg\" title=\"Just Javascript Five Hundred Card Game Open Mis\u00e8re All Local Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game Open Mis\u00e8re All Local Tutorial<\/p><\/div>\n<p>You may be new to this &#8220;500 card game&#8221; web application work of yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Open Mis\u00e8re Wording Tutorial' href='#jjfhcgom\u00e8wt'>Just Javascript Five Hundred Card Game Open Mis\u00e8re Wording Tutorial<\/a>, in which case it may be that we need to reiterate information about the game&#8217;s workings &#8230;<\/p>\n<ul>\n<li>game can be played by 4 players hovering around the same device &#8230; non-remote or &#8220;All Local&#8221; (as in today&#8217;s blog posting title) &#8230; or &#8230;<\/li>\n<li>game can be played by a single hoster running this web application, hosting remote (via email or SMS) linked players and perhaps some &#8220;All Local&#8221; ones<\/li>\n<\/ul>\n<p>As the project continues we&#8217;ve found the logic of the first &#8220;All Local&#8221; mode lagging behind, because it is harder.  Huh?!  Well, it is harder because of the bother we need to take to try to allow players to hide their cards from other players, given some &#8220;looking away&#8221; co-operation from the players when asked to.  And so, just because in the last couple of days we made progress with Open Mis\u00e8re logic for remote player scenarios, alas, doesn&#8217;t mean we&#8217;ve had the &#8220;All Local&#8221; equivalent logic working as well.  Today we try evening up that score.<\/p>\n<p>It was hard to take <font color=blue>this code line<\/font> being important in making that happen &#8230;<\/p>\n<p><code><br \/>\n     for (var ibidis=0; ibidis&lt;bids.length; ibidis++) {<br \/>\n      if (('' + cfm).toLowerCase().indexOf('pass') == 0) {<br \/>\n      isbid=true;<br \/>\n      gd=('' + dis);<br \/>\n      sentanswer='pass    ';<br \/>\n      console.log('3:sentclick() and ma=' + ma);<br \/>\n      <font color=blue>cfm=''; \/\/null;<\/font><br \/>\n      sentclick();<br \/>\n      } else if (('' + cfm + ' ').substring(0,3).toLowerCase() == (bids[ibidis] + ' ').substring(0,3).toLowerCase()) {<br \/>\n      isbid=true;<br \/>\n      gd=('' + dis);<br \/>\n      sentanswer=bids[ibidis] + '    ';<br \/>\n      console.log('4:sentclick()');<br \/>\n      sentclick();<br \/>\n      }<br \/>\n     }<br \/>\n<\/code><\/p>\n<p> &#8230; we found via &#8220;console.log&#8221; web inspector tracking down.  We suspect, but did not research, that the reason &#8220;passcnt&#8221; went weird for &#8220;All Local&#8221; scenarios was as a result of some setTimeout logic self-incrementing &#8220;passcnt&#8221; programmatically, meaning the first pass bid (rather than the third, which is better) was setting off the Kitty logic ahead of time.  Fixed now though!<\/p>\n<p>The &#8220;sss&#8221; variable emoji logic was also causing trouble for Open Mis\u00e8re status content <font color=blue>fixed via<\/font> &#8230;<\/p>\n<p><code><br \/>\n    if (cbid.slice(-1).toLowerCase().replace('h','d') == 'd') {<br \/>\n    sss=' leading ' + cbidby + ' bid ' + cbid + '  ' + emojisuit() + '  ';<br \/>\n    } else {<br \/>\n    sss=' leading ' + cbidby + ' bid ' + cbid + ' ' + emojisuit();<br \/>\n    }<br \/>\n    <font color=blue>sss=sss.replace('&amp;#232;', String.fromCodePoint(232)).replace('open_', 'open ').replace('&amp;#232;', String.fromCodePoint(232)).replace('open_', 'open ');<\/font><br \/>\n<\/code><\/p>\n<p>With Open Mis\u00e8re in All Local mode of use logic we show all players the open hand in a Javascript alert popup window just before the winning bidder is displayed the Kitty Javascript prompt window, <font color=blue>as per<\/font> &#8230;<\/p>\n<p><code><br \/>\n    if (kittybidding != '') {<br \/>\n    donelistis=',1,2,3,4,';<br \/>\n    \/\/if (bbpref != '') { alert('cuRplayer'); }<br \/>\n    console.log('omc=' + omc + ' and sef(emailsms[0], 0).trim()=' + sef(emailsms[0], 0).trim());<br \/>\n    <font color=blue>if (eval('' + omc) &gt;= 0 && (eval('' + emailsms.length) &lt; 1 || eval('' + emailsms.length) &lt; 2 || eval('' + emailsms.length) &lt; 3 || eval('' + emailsms.length) &lt; 4)) {<br \/>\n    alert('Hello all you non-remote 500 card game players!  Here are the cards for public viewing of ' + sef(emailsms[eval(-1 + omc)], eval(-1 + omc)) + ' ... ' + zsuffs[eval(-1 + omc)] + ' ... when you have all finished looking, just leave ' + sef(emailsms[eval(-1 + omh)], eval(-1 + omh)) + ' looking, to then deal with the kitty, as they click the OK button.');<br \/>\n    }<\/font><br \/>\n    cfm=prompt(efs(aapref.replace('In this bidding phase the last winning bid is ','Last winning bid is ').replace(' (bearing in mind that a lowercase email address suffices to enter your next bid, via an email)','') + efs('Player ' + clong(curplayer),curplayer) + ', see your cards below.  ' + kittybidding,curplayer),'');<br \/>\n<\/code><\/p>\n<p>In &#8220;All Local&#8221; mode of play, can bidding be ignored all together?  Yes, backward compatibility is an important principle to try to preserve with ongoing functionalities, where possible, and reasonable.<\/p>\n<p>Yet again, feel free to retry the improved 500 card game part of <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html----------------------------------GETME\" title=\"cards_usefocus.html\">our changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html----------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-five-hundred-card-game-open-mis\u00e8re-all-local-tutorial\/'>Just Javascript Five Hundred Card Game Open Mis\u00e8re All Local Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcgom\u00e8wt'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Open Mis\u00e8re Wording Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-open-mis\u00e8re-wording-tutorial\/'>Just Javascript Five Hundred Card Game Open Mis\u00e8re Wording 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Open Mis\u00e8re Wording Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_wording.jpg\" title=\"Just Javascript Five Hundred Card Game Open Mis\u00e8re Wording Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game Open Mis\u00e8re Wording Tutorial<\/p><\/div>\n<p>With our 500 card game web application of yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Open Mis\u00e8re Tutorial' href='#jjfhcgom\u00e8t'>Just Javascript Five Hundred Card Game Open Mis\u00e8re Tutorial<\/a> the bidding of Mis\u00e8re and Open Mis\u00e8re bring an unusual dilemma to do with email communication.  Even though we hate to confuse we need to weigh &#8230;<\/p>\n<ul>\n<li>the desire in Mis\u00e8re and Open Mis\u00e8re for the bidder to lose tricks (rather than the usual way the winning bidder wants to win tricks) &#8230; against the use of &#8230;<\/li>\n<li>double negatives may cause confusion<\/li>\n<\/ul>\n<p> &#8230; and decide on the danger of a bit of &#8220;double negatives may cause confusion&#8221; because we think most 500 card game players will get it as soon as they see the word &#8220;Mis\u00e8re&#8221; mentioned, coupled with the awkward sentences used (where &#8220;subjis&#8221; is var<font size=1>iable<\/font> containing email subject content) &#8230;<\/p>\n<p><code><br \/>\n         if ((!in_bidding && !in_kitty) && ((cbid + '   ').substring(0,3).toLowerCase() == 'mis' || eval('' + omc) &gt;= 0)) {<br \/>\n           spare=subjis;<br \/>\n           if ((('' + curplayer) == ('' + omc) || ('' + curplayer) == ('' + omh) || ('' + curplayer) == ('' + cbidby)) && (spare.indexOf('Congratulations') == 0)) {<br \/>\n              subjis='Opposite of ' + spare;<br \/>\n           } else if ((('' + curplayer) == ('' + omc) || ('' + curplayer) == ('' + omh) || ('' + curplayer) == ('' + cbidby)) && (spare.indexOf('Bad luck') == 0)) {<br \/>\n              subjis='Good luck is ' + spare;<br \/>\n           } else if ((('' + curplayer) != ('' + omc) && ('' + curplayer) != ('' + omh) && eval('' + omc) &gt;= 0) && (spare.indexOf('Congratulations') == 0)) {<br \/>\n              subjis='Sad news about ' + spare;<br \/>\n           } else if ((('' + curplayer) != ('' + cbidby) && eval('' + omc) &lt; 0) && (spare.indexOf('Congratulations') == 0)) {<br \/>\n              subjis='Sad news about ' + spare;<br \/>\n           }<br \/>\n         }<br \/>\n         subjis=subjis.replace('&amp;#232;', String.fromCodePoint(232)).replace('open_', 'open ').replace('&amp;#232;', String.fromCodePoint(232)).replace('open_', 'open ');<br \/>\n<\/code><\/p>\n<p>As well, we sort it out that &#8230;<\/p>\n<ul>\n<li>players can no longer see bidding buttons of irrelevance (bidding has already passed them by) on the emails<\/li>\n<li>the open hand card links and buttons in the emails navigate nowhere (except when it is the open hand players turn to play a card)<\/li>\n<\/ul>\n<p>Again, feel free to retry the improved 500 card game part of <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html---------------------------------GETME\" title=\"cards_usefocus.html\">our changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html---------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-five-hundred-card-game-open-mis\u00e8re-wording-tutorial\/'>Just Javascript Five Hundred Card Game Open Mis\u00e8re Wording Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcgom\u00e8t'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Open Mis\u00e8re Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-open-mis\u00e8re-tutorial\/'>Just Javascript Five Hundred Card Game Open Mis\u00e8re 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Open Mis\u00e8re Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_omstart.jpg\" title=\"Just Javascript Five Hundred Card Game Open Mis\u00e8re Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game Open Mis\u00e8re Tutorial<\/p><\/div>\n<p>The 500 card game of yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Emoji Entities Tutorial' href='#jjfhcgeet'>Just Javascript Five Hundred Card Game Emoji Entities Tutorial<\/a>, and incarnation before it, hid from the players the chance to bid &#8230;<\/p>\n<p><code><br \/>\nOpen Mis\u00e8re<br \/>\n<\/code><\/p>\n<p> &#8230; but we want to remedy this because &#8230;<\/p>\n<ul>\n<li>it is a fun &#8220;out there&#8221; addition to the 500 card game<\/li>\n<li>it can win the game there and then, worth 500 points to that player pairing that lose all ten tricks with the partner of the winning bidder openly displaying their cards to all players, and played by the winning bidder<\/li>\n<li>the bits and pieces to achieve this programmatically are there &#8230;<\/li>\n<\/ul>\n<p> &#8230; but, we are going to take this on gradually, our part one, today, fixing a couple of issues with remote email players using the PHP mail method, those being &#8230;<\/p>\n<ol>\n<li>add Open Mis\u00e8re successful bidder&#8217;s partner&#8217;s cards in a second table &#8230;<br \/>\n<code><br \/>\n    if ((!in_bidding || in_kitty) && eval('' + omc) &gt;= 0) {<br \/>\n    if (('' + hsuffs[eval(-1 + omc)]).replace('null','').indexOf('&lt;table') != -1 && eval('' + curplayer) != eval('' + omc)) {<br \/>\n      outdivhtml=outdivhtml.replace('&lt;\/table&gt;', '&lt;\/table&gt;&lt;br&gt;&lt;p&gt;And here are the cards of the Open player ' + sef(emailsms[eval(-1 + omc)], eval(-1 + omc)) + ' ...&lt;\/p&gt;&lt;br&gt;&lt;table' + hsuffs[eval(-1 + omc)].split('&lt;table')[1].split('&lt;\/table&gt;')[0].replace(\/\\&lt;tr\\ id\\=\/g, '&lt;tr style=display:none; id=').replace(\/SUBMIT\/g,'button').replace(\/submit\/g,'button').replace(\/\\ href\\=\/g,' data-href=') + '&lt;\/table&gt;&lt;\/body&gt;');<br \/>\n    } else if (('' + hsuffs[eval(-1 + omc)]).replace('null','').indexOf('&lt;table') != -1) {<br \/>\n      outdivhtml=outdivhtml.replace('&lt;\/table&gt;', '&lt;\/table&gt;&lt;br&gt;&lt;p&gt;And here are the cards of the Open player ' + sef(emailsms[eval(-1 + omc)], eval(-1 + omc)) + ' ... ' + zsuffs[eval(-1 + omc)] + '&lt;\/p&gt;&lt;\/body&gt;');<br \/>\n    }<br \/>\n    }<br \/>\n<\/code><br \/>\n &#8230; within the Inline HTML email to other player emails &#8230; and &#8230;<\/li>\n<li>when it is the time for the Open Mis\u00e8re successful bidder&#8217;s partner to play their card, their email is BCC&#8217;ed to the Open Mis\u00e8re successful bidder&#8217;s email address<\/li>\n<\/ol>\n<p>Feel free to retry the improved 500 card game part of <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html---------------------------------GETME\" title=\"cards_usefocus.html\">our changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html---------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-five-hundred-card-game-open-mis\u00e8re-tutorial\/'>Just Javascript Five Hundred Card Game Open Mis\u00e8re Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcgeet'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Emoji Entities Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-emoji-entities-tutorial\/'>Just Javascript Five Hundred Card Game Emoji Entities 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Emoji Entities Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/good_mailapp.jpg\" title=\"Just Javascript Five Hundred Card Game Emoji Entities Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game Emoji Entities Tutorial<\/p><\/div>\n<p>We happened to open up a new email client application to the remote 500 card player emails of yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Internationalization Tutorial' href='#jjfhcgit'>Just Javascript Five Hundred Card Game Internationalization Tutorial<\/a> and, at least for our macOS Mail app, the suit and card emojis came up as gobbledegook in the body Inline HTML section of the the emails.<\/p>\n<p>This discovery, though offputting, also lead, by a few minutes ago (writing this blog post), to a two-pronged improvement to our 500 card game web application as per &#8230;<\/p>\n<ol>\n<li>the lack of clarity saw us relying (on our non-mobile aspect to viewing) the HTML element title (hover over see blurb) content, and realizing that a full player card list as a title on their name textbox would be just peachy &#8230;<br \/>\n<code><br \/>\n  var wsuffs=[];<br \/>\n<br \/>\n   function bStringfromCodePoint(jgf) {<br \/>\n     var stile='', igf=0;<br \/>\n     for (var kgf=0; kgf&lt;spcps.length; kgf++) {<br \/>\n       if (('' + spcps[kgf]).split('\/')[0] == ('' + jgf)) { igf=kgf; }<br \/>\n     }<br \/>\n     stile=(('' + spcps[eval('' + igf)]).split('.')[0].slice(-3).substring(0,2).toLowerCase().replace('00','Joker aka ').replace('01','Ace of ').replace('02','2 of ').replace('03','3 of ').replace('04','4 of ').replace('05','5 of ').replace('06','6 of ').replace('07','7 of ').replace('08','8 of ').replace('09','9 of ').replace('10','10 of ').replace('11','Jack of ').replace('12','Queen of ').replace('13','King of ') + ('' + spcps[eval('' + igf)]).split('.')[0].slice(-1).replace('c','Club').replace('d','Diamond').replace('s','Spade').replace('h','Heart').replace('0','No Trump') + 's').toLowerCase();<br \/>\n     return stile;<br \/>\n   }<br \/>\n<br \/>\n  \/\/ Example call codeline ...<br \/>\n  wsuffs[eval(-1 + eval(eval(ixc % nominal_numplayers) + 1))]+=' ' + eval(eval(ixc % nominal_numplayers) + 1) + '.' + Math.floor(eval(ixc + eval('' + nominal_numplayers)) \/ eval('' + nominal_numplayers)) + ':' + bStringfromCodePoint(eval(spcps[kjn].split('\/')[0]));<br \/>\n<br \/>\n  \/\/ Example of use piecing together remote 500 card player email ...<br \/>\n  outdivhtml=outdivhtml.replace('&lt;\/TR&gt;', '&lt;td colspan=' + twentythree + '&gt;&lt;\/td&gt;&lt;\/tr&gt;&lt;tr&gt;&lt;td colspan=10&gt;500 Card Game Player' + eval('' + bidplayer) + ' Name: &lt;input title=\"' + wsuffs[eval(-1 + bidplayer)].split('' + bidplayer + '.11')[0] + '\" type=text name=myname value=\"' + pnames[eval(-1 + bidplayer)] + '\"&gt;&lt;\/input&gt;&lt;\/td&gt;&lt;td colspan=20 style=text-align:center;&gt;... relevant to your cards below ...&lt;\/td&gt;&lt;\/tr&gt;').replace('&lt;\/thead&gt;','&lt;\/THEAD&gt;');<br \/>\n<\/code>\n<\/li>\n<li>the trial of one of the alternative emoji display mechanisms that isn&#8217;t String.fromCodePoint([HTML-decimal-entity]) ( ie. &#038;#[HTML-decimal-entity]; ) &#8230; eg. Spades &#9824; String.fromCodePoint(9824); alternative would be &amp;#9824; &#8230; had us, amongst a few things, <font color=blue>change<\/font> &#8230;<br \/>\n<code><br \/>\n   function nominalemojisuit(ptrumpsare) {<br \/>\n         if (ptrumpsare == 'd') {<br \/>\n           return <font color=blue>'&amp;#9830;&amp;#65039;'; \/\/<\/font>String.fromCodePoint(9830,65039); \/\/\t&amp;#9830; &amp;#65039;<br \/>\n         } else if (ptrumpsare == 'h') {<br \/>\n           return <font color=blue>'&amp;#10084;&amp;#65039;'; \/\/<\/font>String.fromCodePoint(10084,65039); \/\/ &amp;#10084; &amp;#65039;<br \/>\n         } else if (ptrumpsare == 'c') {<br \/>\n           return <font color=blue>'&amp;#9827;'; \/\/<\/font>String.fromCodePoint(9827); \/\/ &amp;#10084; &amp;#65039;  &amp;#10084; &amp;#65039;<br \/>\n         } else if (ptrumpsare == 's') {<br \/>\n           return <font color=blue>'&amp;#9824;'; \/\/<\/font>String.fromCodePoint(9824); \/\/ &amp;#10084; &amp;#65039;  &amp;#10084; &amp;#65039;<br \/>\n         } \/\/ &amp;#57378;<br \/>\n         return '';<br \/>\n   }<br \/>\n<\/code>\n<\/li>\n<\/ol>\n<p> &#8230; all fine and good, now, for macOS Mail app (email client), but, more importantly, it did not break with any of the previously working mail applications, making these changes.   Yay!!!!!<\/p>\n<p>So please retry the improved 500 card game part of <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html--------------------------------GETME\" title=\"cards_usefocus.html\">our changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html--------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-five-hundred-card-game-emoji-entities-tutorial\/'>Just Javascript Five Hundred Card Game Emoji Entities Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcgit'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Internationalization Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-internationalization-tutorial\/'>Just Javascript Five Hundred Card Game Internationalization 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Internationalization Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_internationalization.jpg\" title=\"Just Javascript Five Hundred Card Game Internationalization Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game Internationalization Tutorial<\/p><\/div>\n<p>Continuing themes from yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Email Tutorial' href='#jjfhcget'>Just Javascript Five Hundred Card Game Email Tutorial<\/a> we&#8217;ve been shoring up aspects to the user experience for our 500 card game web application via &#8230;<\/p>\n<ul>\n<li>internationalization focus on increased use of &#8230;<\/li>\n<li>emojis (eg. suit emojis within Inline HTML Emails)<\/li>\n<\/ul>\n<p> &#8230; and along the way discovered flaws in our &#8220;follow the same suit as leading card&#8221; logic, <font color=blue>now centred around<\/font> &#8230;<\/p>\n<p><code><br \/>\n  function threetoone(threeis) {<br \/>\n    var suitis=('' + threeis).slice(-1)<font color=blue>.toLowerCase()<\/font>;<br \/>\n    var crdis=('' + threeis).substring(0,2);<br \/>\n    if (crdis == '11' && trumpsare != '0') {<br \/>\n      if (trumpsare.replace('c','s') == 's' && suitis.replace('c','s') == 's' && suitis != trumpsare) {<br \/>\n        \/\/alert('right bower played as ' + suitis.replace('c','S').replace('s','C').toLowerCase());<br \/>\n        return suitis.replace('c','S').replace('s','C').toLowerCase();<br \/>\n      } else if (trumpsare.replace('h','d') == 'd' && suitis.replace('h','d') == 'd' && suitis != trumpsare) {<br \/>\n        \/\/alert('Right bower played as ' + suitis.replace('h','D').replace('d','H').toLowerCase());<br \/>\n        return suitis.replace('h','D').replace('d','H').toLowerCase();<br \/>\n      }<br \/>\n    }<br \/>\n    return suitis.toLowerCase()<font color=blue>.replace('0', trumpsare)<\/font>;<br \/>\n  }<br \/>\n<br \/>\n  function maybeno(xxcw) {<br \/>\n    var allowthrough=gallow, fnd=false, fnds=[], ifnds=0;<br \/>\n    csuffix='';<br \/>\n    if (nogolist.indexOf(',' + xxcw + ',') != -1) { if (card_game.toLowerCase() == '500ish') { console.log('oops'); }  return '1234567'; }<br \/>\n    \/\/alert('thishand.length=' + thishand.length);<br \/>\n    if (thishand.length != 0 && card_game.toLowerCase() == '500ish') {<br \/>\n    \/\/alert('here');<br \/>\n        \/\/if (!allowthrough) {  alert('RE ' + ysuffs[eval(-1 + eval('' + curplayer))] + ' ... lead with ' + thishand[0].slice(-1).toLowerCase() + ' and you played ' + hands[eval(0 + xxcw)].slice(-1).toLowerCase());     }<br \/>\n        if (!allowthrough && threetoone(thishand[0].slice(<font color=blue>-3<\/font>).toLowerCase()) != threetoone(hands[eval(0 + xxcw)].slice(-3).toLowerCase())) {<br \/>\n            fnds=ysuffs[eval(-1 + eval('' + curplayer))].substring(1).split(' ');<br \/>\n            for (ifnds=0; ifnds&lt;fnds.length; ifnds++) {<br \/>\n              if (fnds[ifnds].indexOf(',') != -1) {<br \/>\n                \/\/if joker and trumpsare is lead, relax<br \/>\n                \/\/if right bower and trumpsare is lead, relax<br \/>\n                if (fnds[ifnds]<font color=blue>.toLowerCase()<\/font>.indexOf(<font color=blue>threetoone(<\/font>thishand[0].slice(<font color=blue>-3<\/font>).toLowerCase()<font color=blue>)<\/font>) != -1) {  fnd=true; }<br \/>\n              }<br \/>\n            }<br \/>\n            if (fnd) {<br \/>\n              if (eval('' + emailsms.length) &gt;= eval('' + curplayer)) { if (('' + emailsms[eval('' + curplayer)]).trim() != '') {   csuffix='  Will resend last email if you cancel this play.';    }  }<br \/>\n              allowthrough=confirm('You could follow suit (where trumps are ' + trumpsare.replace('c','Club').replace('d','Diamond').replace('s','Spade').replace('h','Heart').replace('0','No Trump') + 's' + '), Player ' + clong(curplayer) + '!  Allow through anyway?' + csuffix);<br \/>\n              if (!allowthrough) { if (1 == 11) { alert('False'); }  if (eval('' + emailsms.length) &gt;= eval('' + curplayer)) { retcom(pmesg, pretv); }  return '1234568'; } else {   if (1 == 11) { alert('True'); }   }<br \/>\n            }<br \/>\n        }<br \/>\n    }<br \/>\n    return xxcw;<br \/>\n  }<br \/>\n<\/code><\/p>\n<p> &#8230; as well as non-mobile users being able to hover over bidding buttons to discover what their team scores with that bid, and the background image text up the top left mentioning &#8220;Bid&#8221; during any bidding phase and &#8220;Click (via email) away &#8230;&#8221; or &#8220;Click (via SMS) away &#8230;&#8221; for remote players, back for the hoster&#8217;s web application window, during the &#8220;playing out of the tricks&#8221; phase of the 500 card game, hopefully establishing a means by which the hoster can know what is, or is not and should be, going on with the hoster&#8217;s 500 card game, and so enabling informed email communication to get the games back on the rails, perhaps.<\/p>\n<p>Please retry the improved 500 card game part of <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-------------------------------GETME\" title=\"cards_usefocus.html\">our changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-five-hundred-card-game-internationalization-tutorial\/'>Just Javascript Five Hundred Card Game Internationalization Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcget'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Email Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-email-tutorial\/'>Just Javascript Five Hundred Card Game Email 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Email Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocusthead.jpg\" title=\"Just Javascript Five Hundred Card Game Email Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game Email Tutorial<\/p><\/div>\n<p>In a blog post some time before yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game CC Tutorial' href='#jjfhcgcct'>Just Javascript Five Hundred Card Game CC Tutorial<\/a> we talked of &#8220;order&#8221; when we presented <a title='Just Javascript Five Hundred Card Game Order Tutorial' href='#jjfhcgot'>Just Javascript Five Hundred Card Game Order Tutorial<\/a>.  Don&#8217;t know about you, but I find the combination of &#8230;<\/p>\n<ul>\n<li>form &#8230; and &#8230;<\/li>\n<li>table<\/li>\n<\/ul>\n<p> &#8230; based Inline HTML in an email, asking for interactive input, &#8220;orderly&#8221;.<\/p>\n<p>Probably we normally think of data to append to an established &#8220;table&#8221; element via the addition of a new row (&#8220;tr&#8221; element) or cell (within a row via a &#8220;td&#8221; or &#8220;th&#8221; element).  Within a &#8220;table&#8221; element though, you can think of &#8220;partitions&#8221; in the form of &#8230;<\/p>\n<ul>\n<li>thead &#8230; and &#8230;<\/li>\n<li>tbody<\/li>\n<\/ul>\n<p> &#8230; which have that synergy with a webpage&#8217;s &#8220;head&#8221; and &#8220;body&#8221; elements, the theme of the current blog posting thread being to do away with the need for a &#8220;body&#8221; element (except for our Inline HTML Emails (which can&#8217;t really do anything much without the<font size=1>ir<\/font> &#8220;body&#8221; element<font size=1>s<\/font>)).<\/p>\n<p>We do a <font color=purple>bit of uppercase\/lowercase work<\/font> with the end of &#8220;thead&#8221; element (ie. &lt;\/THEAD&gt;) to leave our email Inline HTML &#8220;table&#8221; &#8220;thead&#8221; elements blank for &#8230;<\/p>\n<ul>\n<li>500 card game &#8220;bidding&#8221; emails &#8230; and for &#8230;<\/li>\n<li>500 card game &#8220;kitty\/bidding&#8221; emails<\/li>\n<\/ul>\n<p> &#8230; but then start to fill in the <font color=brown>&#8220;thead&#8221; element<\/font> for the &#8220;playing out of the tricks&#8221; emails, adding today&#8217;s work, better card game status information, added to the top of the tabular information presented.  Rather than fret about adding to the top, we just slot into the unallocated &#8220;thead&#8221; slot, for these scenarios, <font color=blue>as per<\/font> &#8230;<\/p>\n<p><code><br \/>\n  function tabord(indivhtml) {<br \/>\n    var ilook=0, jlook=1, klook=0, cbidfound='SUBMIT', tdyellow='';<br \/>\n    var slookfor=[' data-suit=s', ' data-suit=c', ' data-suit=d', ' data-suit=h'];<br \/>\n    var slooks=[];<br \/>\n    var outdivhtml='&lt;br&gt;&lt;style&gt; isyellow { background-color:yellow; &lt;\/style&gt;&lt;table border=2&gt;<font color=brown>&lt;thead&gt;&lt;\/thead&gt;<\/font>&lt;tbody&gt;&lt;\/tbody&gt;&lt;\/table&gt;'<br \/>\n    if (in_bidding) {<br \/>\n        twentythree=30;<br \/>\n        \/\/outdivhtml=outdivhtml.replace('&lt;\/tbody&gt;', '&lt;tr&gt;&lt;td&gt;Bidding&lt;br&gt;Current Bid: ' + cbid + '&lt;td&gt;&lt;input type=SUBMIT name=myanswer value=\"pass \"&gt;&lt;\/input&gt;&lt;\/td&gt;&lt;\/TR&gt;&lt;\/tbody&gt;');<br \/>\n        if (in_kitty) {<br \/>\n        console.log('tds_kitty=' + tds_kitty);<br \/>\n        outdivhtml=outdivhtml.replace('&lt;\/tbody&gt;', tds_kitty + '&lt;\/tbody&gt;'); \/\/.replace('&lt;\/thead&gt;','&lt;\/THEAD&gt;');<br \/>\n        outdivhtml=outdivhtml.replace('&lt;\/tbody&gt;', '&lt;tr&gt;&lt;td&gt;Bidding&lt;br&gt;Your Current Bid: None&lt;td&gt;&lt;input type=' + cbidfound + ' name=myanswer value=\"pass \"&gt;&lt;\/input&gt;&lt;\/td&gt;&lt;\/TR&gt;&lt;\/tbody&gt;');<br \/>\n        } else {<br \/>\n        outdivhtml=outdivhtml.replace('&lt;\/tbody&gt;', '&lt;tr&gt;&lt;td&gt;Bidding&lt;br&gt;Current Bid: None&lt;td&gt;&lt;input type=' + cbidfound + ' name=myanswer value=\"pass \"&gt;&lt;\/input&gt;&lt;\/td&gt;&lt;\/TR&gt;&lt;\/tbody&gt;');<br \/>\n        }<br \/>\n        if (cbid.toLowerCase().trim().replace('pass','none').replace('none','') != '') {  cbidfound='button';   }<br \/>\n        twentythree--;<br \/>\n        twentythree--;<br \/>\n        for (klook=0; klook&lt;bids.length; klook++) {<br \/>\n         if (bids[klook].toLowerCase().trim() == cbid.toLowerCase().trim()) {  tdyellow=' title=\"Current leading bid by Player ' + cbidby + '\" class=isyellow'; }<br \/>\n         if (bids[klook].indexOf('open') == 0) {<br \/>\n         outdivhtml=outdivhtml.replace('&lt;\/TR&gt;', '&lt;td' + tdyellow + '&gt;&lt;input style=display:none; type=' + cbidfound + ' name=myanswer value=' + bids[klook] + '&gt;&lt;\/input&gt;&lt;\/td&gt;&lt;\/TR&gt;');<br \/>\n         } else {<br \/>\n         outdivhtml=outdivhtml.replace('&lt;\/TR&gt;', '&lt;td' + tdyellow + '&gt;&lt;input type=' + cbidfound + ' name=myanswer value=\"' + bids[klook] + '   \"&gt;&lt;\/input&gt;&lt;\/td&gt;&lt;\/TR&gt;');<br \/>\n         }<br \/>\n         if (bids[klook].toLowerCase().trim() == cbid.toLowerCase().trim()) {  cbidfound='SUBMIT'; }<br \/>\n         twentythree--;<br \/>\n         tdyellow='';<br \/>\n        }<br \/>\n        \/\/outdivhtml=outdivhtml.replace('&lt;\/TR&gt;', '&lt;td colspan=' + twentythree + '&gt;&lt;\/td&gt;&lt;\/tr&gt;&lt;tr&gt;&lt;td colspan=10&gt;500 Card Game Player' + eval('' + bidplayer) + ' Name: &lt;input type=text name=myname value=\"' + pnames[eval(-1 + bidplayer)] + '\"&gt;&lt;\/input&gt;&lt;\/td&gt;&lt;td colspan=20 style=text-align:center;&gt;... relevant to your cards below ...&lt;\/td&gt;&lt;\/tr&gt;' + tds_kitty)<font color=purple>.replace('&lt;\/thead&gt;','&lt;\/THEAD&gt;')<\/font>;<br \/>\n        outdivhtml=outdivhtml.replace('&lt;\/TR&gt;', '&lt;td colspan=' + twentythree + '&gt;&lt;\/td&gt;&lt;\/tr&gt;&lt;tr&gt;&lt;td colspan=10&gt;500 Card Game Player' + eval('' + bidplayer) + ' Name: &lt;input type=text name=myname value=\"' + pnames[eval(-1 + bidplayer)] + '\"&gt;&lt;\/input&gt;&lt;\/td&gt;&lt;td colspan=20 style=text-align:center;&gt;... relevant to your cards below ...&lt;\/td&gt;&lt;\/tr&gt;')<font color=purple>.replace('&lt;\/thead&gt;','&lt;\/THEAD&gt;')<\/font>;<br \/>\n    } else if (in_kitty) {<br \/>\n        \/\/alert('in_kitty=t ' + tds_kitty + ' ... ' + outdivhtml);<br \/>\n        console.log('Tds_kitty=' + tds_kitty);<br \/>\n        outdivhtml=outdivhtml.replace('&lt;\/tbody&gt;', tds_kitty + '&lt;\/tbody&gt;')<font color=purple>.replace('&lt;\/thead&gt;','&lt;\/THEAD&gt;')<\/font>;<br \/>\n    }<br \/>\n    for (ilook=0; ilook&lt;slookfor.length; ilook++) {<br \/>\n      slooks=(indivhtml + ' &lt;input ').split(slookfor[ilook]);<br \/>\n      if (in_bidding && !in_kitty) {<br \/>\n        for (jlook=0; jlook&lt;slooks.length; jlook++) {<br \/>\n          slooks[jlook]=slooks[jlook].replace('&gt;:','&gt;&lt;br&gt;').replace(\/submit\/g,'button').replace(\/\\ href\\=\/g,' data-href=').replace(\/background\\-color\\:yellow\\;\/g,'').replace(\/background\\-color\\:lightgreen\\;\/g,'').replace(\/border\\:5px\\ solid\\ yellow\\;\/g,'');<br \/>\n        }<br \/>\n      }<br \/>\n      twentythree=30;<br \/>\n      outdivhtml=outdivhtml.replace('&lt;\/tbody&gt;', '&lt;tr&gt;&lt;td&gt;' + slookfor[ilook].replace(' data-suit=','').replace('c','Club').replace('d','Diamond').replace('s','Spade').replace('h','Heart').replace('0','No Trump') + 's' + '&lt;\/td&gt;&lt;\/TR&gt;&lt;\/tbody&gt;');<br \/>\n      twentythree--;<br \/>\n      for (jlook=1; jlook&lt;slooks.length; jlook++) {<br \/>\n       outdivhtml=outdivhtml.replace('&lt;\/TR&gt;', '&lt;td&gt; &lt;input' + slooks[jlook].split(' &lt;input ')[0].replace('&gt;:','&gt;&lt;br&gt;') + '&lt;\/td&gt;&lt;\/TR&gt;');<br \/>\n       twentythree--;<br \/>\n      }<br \/>\n      outdivhtml=outdivhtml.replace('&lt;\/TR&gt;', '&lt;td colspan=' + twentythree + '&gt;&lt;\/tr&gt;');<br \/>\n    }<br \/>\n    \/\/alert(outdivhtml);<br \/>\n    \/\/in_kitty=false;<br \/>\n    return outdivhtml<font color=blue>.replace('&lt;thead&gt;&lt;\/thead&gt;', '&lt;thead&gt;&lt;td colspan=' + twentythree + '&gt;500 Card Game Player' + eval('' + curplayer) + ' Name: &lt;input type=text name=myname value=\"' + pnames[eval(-1 + curplayer)] + '\"&gt;&lt;\/input&gt;&lt;br&gt; ' + sss.replace(\/h\\ \\ \/g,'h &lt;font color=red&gt;').replace(\/\\ \\ \/g,'&lt;\/font&gt;').replace(\/d\\ \\ \/g,'d &lt;font color=red&gt;').replace(\/\\ \\ \/g,'&lt;\/font&gt;').replace(\/h\\&lt;\\\/font\\&gt;\/g,'h &lt;font color=red&gt;').replace(\/d\\&lt;\\\/font\\&gt;\/g,'d &lt;font color=red&gt;') + '&lt;br&gt; for Trick ' + tricknumber + ' (progress so far) ... ' + wemstuff.replace(\/\\-\\ \\ \/g, '- &lt;font color=red&gt;').replace(\/\\ \\ \/g, '&lt;\/font&gt;') + '&lt;\/td&gt;&lt;\/tr&gt;&lt;\/thead&gt;')<\/font>;<br \/>\n  }<br \/>\n<\/code><\/p>\n<p>You may have noticed with yesterday&#8217;s work, improvements to the email subject lines during the 500 card game &#8220;playing of the tricks&#8221; phase, but there are two good reasons to prefer to (additionally) do this in the email body section&#8217;s Inline HTML.   There, you can &#8230;<\/p>\n<ul>\n<li>change heart and diamond suit emojis to red within &#8230; &lt;font color=red&gt;&lt;\/font&gt;<\/li>\n<li>web browser zooming in combination with a webmail browser based email client can have you zooming in and improving the visibility of the card and suit emojis<\/li>\n<\/ul>\n<p>Please retry the tweaked 500 card game part of <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html------------------------------GETME\" title=\"cards_usefocus.html\">our changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-five-hundred-card-game-email-tutorial\/'>Just Javascript Five Hundred Card Game Email Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcgcct'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game CC Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-cc-tutorial\/'>Just Javascript Five Hundred Card Game CC 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game CC Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_allatstart.jpg\" title=\"Just Javascript Five Hundred Card Game CC Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game CC Tutorial<\/p><\/div>\n<p>On top of yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Names Tutorial' href='#jjfhcgnt'>Just Javascript Five Hundred Card Game Names Tutorial<\/a> &#8220;names for numbers&#8221; work, today we have two themes to the work &#8230;<\/p>\n<ul>\n<li>shore up that offer on the &#8220;500 card game&#8221; first Javascript prompt window to enter email\/SMS addresses\/numbers straight away, meaning no more Javascript prompt windows appear until the end of the game if players follow suit &#8230; and &#8230;<\/li>\n<li>should the host of the &#8220;500 card game&#8221; wait to enter email\/SMS addresses\/numbers later they can then enter comma separated email\/SMS address\/number lists which get recognised as any 3 combinations of &#8230;\n<ol>\n<li>email address (and you can specify a name for those all lowercase PHP mail Inline HTML Email scenarios) and mixed case for mailto: emails for the To: recipient<\/li>\n<li>email address for a CC: recipient (mixed case for mailto: emails)<\/li>\n<li>email address for a BCC: recipient (mixed case for mailto: emails)<\/li>\n<li>SMS number<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<p> &#8230; which we facilitated among the changed &#8220;fes()&#8221; function we show below, along with its buddies &#8230;<\/p>\n<p><code><br \/>\n  function sff(ines, nines) {   \/\/ expand out Player n<br \/>\n      var outes='', thisp=0;<br \/>\n      ines=ines.replace(\/Player\\ Player\\ \/g,'Player ');<br \/>\n      if (ines.indexOf('Click away Player ') != -1) {<br \/>\n        var withins=ines.split('Click away Player ');<br \/>\n        outes=withins[0];<br \/>\n        for (var igfd=1; igfd&lt;withins.length; igfd++) {<br \/>\n          if (('' + pnames[eval(-1 + eval('' + nines))]) == 'Player ' + nines) {<br \/>\n          \/\/alert('Here');<br \/>\n            outes+=('Click away Player ' + withins[igfd]);<br \/>\n          } else {<br \/>\n          \/\/alert('here');<br \/>\n            outes+=('Click away Player ' + withins[igfd]).replace('Click away Player ', 'Click away ' + pnames[eval(-1 + eval('' + nines))] + ' ');<br \/>\n          }<br \/>\n        }<br \/>\n        return outes;<br \/>\n      }<br \/>\n      return ines;<br \/>\n  }<br \/>\n<br \/>\n  function efs(ines, nines) {   \/\/ expand out Player n<br \/>\n      var outes='', thisp=0;<br \/>\n      \/\/alert('In ines=' + ines + ' pnames[0]=' + pnames[0]);<br \/>\n      ines=ines.replace(\/Player\\ Player\\ \/g,'Player ');<br \/>\n      if (ines.indexOf('Player ') != -1) {<br \/>\n        var withins=ines.split('Player ');<br \/>\n        outes=withins[0];<br \/>\n        for (var igfd=1; igfd&lt;withins.length; igfd++) {<br \/>\n          yhisp=withins[igfd].split('[')[0].split(')')[0].split(',')[0].split('?')[0].split('\"')[0].split(\"'\")[0].split('&lt;')[0].split(' ')[0];<br \/>\n          console.log('yhisp=' + yhisp);<br \/>\n          if (('' + yhisp + 'x').substring(0,1) &lt; '0' || ('' + yhisp + 'x').substring(0,1) &gt; '9') {<br \/>\n            outes+='Player ' + withins[igfd];<br \/>\n          } else if (eval('' + pnames.length) &gt; eval(-1 + eval('' + yhisp))) {<br \/>\n            \/\/alert('yhisp=' + yhisp + ' is it in ' + 'Player ' + withins[igfd] + ' ... ' + pnames[eval(-1 + eval('' + yhisp))] + ' += ' + ('Player ' + withins[igfd]).replace('Player ' + yhisp, pnames[eval(-1 + eval('' + yhisp))]) + ' ines=' + ines + ' becomes ' + 'outes=' + outes + ' so far');<br \/>\n            outes+=('Player ' + withins[igfd]).replace('Player ' + yhisp, pnames[eval(-1 + eval('' + yhisp))]);<br \/>\n          } else {<br \/>\n            outes+='Player ' + withins[igfd];<br \/>\n          }<br \/>\n        }<br \/>\n      \/\/alert('Out ines=' + outes.replace('500 Card Game Player', '500 Card Game Player '));<br \/>\n        return outes.replace('500 Card Game Player', '500 Card Game Player ');<br \/>\n      }<br \/>\n      return ines;<br \/>\n  }<br \/>\n<br \/> <br \/>\n  function esf(ines, nines) {  \/\/ if specified name, return that instead<br \/>\n      if (eval('' + pnames.length) &gt; eval(0 + Math.max(eval('' + nines),eval('' + nines)))) {<br \/>\n        return pnames[eval(0 + Math.max(eval('' + nines),eval('' + nines)))];<br \/>\n      }<br \/>\n      return ines;<br \/>\n  }<br \/>\n<br \/> <br \/>\n  function fesh(xines) {<br \/>\n        if (xines.indexOf('[') != -1) {<br \/>\n        return xines.split('[')[1].split(']')[0];<br \/>\n        }<br \/>\n        return xines;<br \/>\n  }<br \/>\n<br \/> <br \/>\n  function fes(ines, nines) {  \/\/ strip Name Of[email@at] to email@at<br \/>\n      var prevcsuff='';<br \/>\n      var sc='';<br \/>\n      var hjg='';<br \/>\n      var ipl=0, jpl=0;<br \/>\n      var coms=ines.split(',');<br \/>\n      if (eval('' + coms.length) &gt; 1) {<br \/>\n        if (coms[1].indexOf('@') != -1 && coms[0].indexOf('@') == -1) {<br \/>\n          sc=ines.replace(',' + coms[1], '');<br \/>\n          ines=coms[1] + ',' + sc;<br \/>\n          coms=ines.split(',');<br \/>\n        } else if (coms[eval(-1 + coms.length)].indexOf('@') != -1 && coms[0].indexOf('@') == -1) {<br \/>\n          sc=ines.replace(',' + coms[eval(-1 + coms.length)], '');<br \/>\n          ines=coms[eval(-1 + coms.length)] + ',' + sc;<br \/>\n          coms=ines.split(',');<br \/>\n        }<br \/>\n        ines=coms[0];<br \/>\n        for (jpl=1; jpl&lt;coms.length; jpl++) {<br \/>\n          if (jpl == 1) {<br \/>\n           ccnames[eval('' + nines)]=fesh(coms[jpl]);<br \/>\n          } else {<br \/>\n           bccnames[eval('' + nines)]=fesh(coms[jpl]);<br \/>\n          }<br \/>\n        }<br \/>\n        return ines;<br \/>\n      }<br \/>\n      var nameas=ines.split('[');<br \/>\n      if (eval('' + nameas.length) == 2) {<br \/>\n       if (nameas[1].indexOf(']') != -1 || 1 == 1) {<br \/>\n         while (eval('' + pnames.length) &lt; eval('' + nines)) {<br \/>\n           pnames.push('Player ' + eval(1 + pnames.length));<br \/>\n         }<br \/>\n         if (('' + nines).indexOf('-') == -1) {<br \/>\n         while (eval('' + pnames.length) &lt; eval('' + nines)) {<br \/>\n           pnames.push('Player ' + eval(1 + pnames.length));<br \/>\n         }<br \/>\n         }<br \/>\n         pnames[eval(0 + Math.max(eval('' + nines),eval('' + nines)))]=nameas[0];<br \/>\n         ines=ines.replace(nameas[0] + '[','').replace(']','');<br \/>\n      prevcsuff=csuff;<br \/>\n      csuff='';<br \/>\n      hjg='' + curplayer;<br \/>\n      for (ipl=0; ipl&lt;hjg.length; ipl++) {<br \/>\n        csuff+=String.fromCodePoint(eval(8320 + eval(eval('' + hjg.substring(ipl,eval(1 + eval('' + ipl))).charCodeAt(0)) - 48)));<br \/>\n      }<br \/>\n     defstyle=defstylereplace(' ' + prevcsuff + '', ' ' + csuff);<br \/>\n         document.head.innerHTML+=bpmore(defstyle);<br \/>\n       }<br \/>\n      } else if (ines.indexOf('@') == -1 && ines.replace(\/0\/g,'').replace(\/1\/g,'').replace(\/2\/g,'').replace(\/3\/g,'').replace(\/4\/g,'').replace(\/5\/g,'').replace(\/6\/g,'').replace(\/7\/g,'').replace(\/8\/g,'').replace(\/9\/g,'').trim() != '') {<br \/>\n         pnames[eval(0 + Math.max(eval('' + nines),eval('' + nines)))]=nameas[0];<br \/>\n         ines='';<br \/>\n      prevcsuff=csuff;<br \/>\n      csuff='';<br \/>\n      hjg='' + curplayer;<br \/>\n      for (ipl=0; ipl&lt;hjg.length; ipl++) {<br \/>\n        csuff+=String.fromCodePoint(eval(8320 + eval(eval('' + hjg.substring(ipl,eval(1 + eval('' + ipl))).charCodeAt(0)) - 48)));<br \/>\n      }<br \/>\n     defstyle=defstylereplace(' ' + prevcsuff + '', ' ' + csuff);<br \/>\n         document.head.innerHTML+=bpmore(defstyle);<br \/>\n      } else {<br \/>\n      prevcsuff=csuff;<br \/>\n      csuff='';<br \/>\n      hjg='' + curplayer;<br \/>\n      for (ipl=0; ipl&lt;hjg.length; ipl++) {<br \/>\n        csuff+=String.fromCodePoint(eval(8320 + eval(eval('' + hjg.substring(ipl,eval(1 + eval('' + ipl))).charCodeAt(0)) - 48)));<br \/>\n      }<br \/>\n     defstyle=defstylereplace(' ' + prevcsuff + '', ' ' + csuff);<br \/>\n         document.head.innerHTML+=bpmore(defstyle);<br \/>\n      }<br \/>\n      return ines;<br \/>\n  }<br \/>\n<br \/> <br \/>\n  function sef(ines, nines) {  \/\/ expand out email@at<br \/>\n      if (eval('' + pnames.length) &gt; eval(0 + Math.max(eval('' + nines),eval('' + nines)))) {<br \/>\n        return pnames[eval(0 + Math.max(eval('' + nines),eval('' + nines)))] + '[' + ines + ']';<br \/>\n      }<br \/>\n      return ines;<br \/>\n  }<br \/>\n<br \/> <br \/>\n  function ccbcc(ines, nines) {  \/\/ add to mailto: URL<br \/>\n      var ccb='';<br \/>\n      \/\/alert('ccnames[0]=' + ccnames[0]);<br \/>\n      if (eval('' + ccnames.length) &gt; eval(0 + Math.max(eval('' + nines),eval('' + nines)))) {<br \/>\n        if (ccnames[eval(0 + Math.max(eval('' + nines),eval('' + nines)))].indexOf('[') != -1) {<br \/>\n        ccb='&cc=' + ccnames[eval(0 + Math.max(eval('' + nines),eval('' + nines)))].split('[')[1].split(']')[0];<br \/>\n        } else {<br \/>\n        ccb='&cc=' + ccnames[eval(0 + Math.max(eval('' + nines),eval('' + nines)))];<br \/>\n        }<\/p>\n<p>        if (eval('' + bccnames.length) &gt; eval(0 + Math.max(eval('' + nines),eval('' + nines)))) {<br \/>\n        if (bccnames[eval(0 + Math.max(eval('' + nines),eval('' + nines)))].indexOf('[') != -1) {<br \/>\n        return ccb + '&bcc=' + bccnames[eval(0 + Math.max(eval('' + nines),eval('' + nines)))].split('[')[1].split(']')[0];<br \/>\n        } else {<br \/>\n        return ccb + '&bcc=' + bccnames[eval(0 + Math.max(eval('' + nines),eval('' + nines)))];<br \/>\n        }<br \/>\n        } else if (ccnames[eval(0 + Math.max(eval('' + nines),eval('' + nines)))].indexOf('[') != -1) {<br \/>\n        return ccb;<br \/>\n       } else {<br \/>\n        \/\/alert('ccb=' + ccb);<br \/>\n        return ccb;<br \/>\n        }<br \/>\n      }<br \/>\n      return '';<br \/>\n  }<br \/>\n<br \/>\n  function defstylereplace(dfrom, dto) {<br \/>\n    if (defstyle.indexOf('  leading ' + cbidby + ' bid ') != -1) {<br \/>\n      dfrom=' ' + defstyle.split('  leading ' + cbidby + ' bid ')[0].split(' ')[eval(-1 + defstyle.split('  leading ' + cbidby + ' bid ')[0].split(' ').length)];<br \/>\n      return defstyle.replace(dfrom, dto);<br \/>\n    } else if (defstyle.indexOf('  ' + scoresuffix) != -1) {<br \/>\n      dfrom=' ' + defstyle.split('  ' + scoresuffix)[0].split(' ')[eval(-1 + defstyle.split('  ' + scoresuffix)[0].split(' ').length)];<br \/>\n      return defstyle.replace(dfrom, dto);<br \/>\n    } else if (defstyle.indexOf(' leading ' + cbidby + ' bid ') != -1) {<br \/>\n      dfrom=' ' + defstyle.split(' leading ' + cbidby + ' bid ')[0].split(' ')[eval(-1 + defstyle.split(' leading ' + cbidby + ' bid ')[0].split(' ').length)];<br \/>\n      return defstyle.replace(dfrom, dto);<br \/>\n    } else if (defstyle.indexOf(' ' + scoresuffix) != -1) {<br \/>\n      dfrom=' ' + defstyle.split(' ' + scoresuffix)[0].split(' ')[eval(-1 + defstyle.split(' ' + scoresuffix)[0].split(' ').length)];<br \/>\n      return defstyle.replace(dfrom, dto);<br \/>\n    } else if (defstyle.indexOf(dfrom) != -1) {<br \/>\n      return defstyle.replace(dfrom, dto);<br \/>\n    }<br \/>\n    return defstyle.replace(dfrom, dto);<br \/>\n  }<br \/>\n<\/code><\/p>\n<p>Try the tweaked 500 card game part of <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html------------------------------GETME\" title=\"cards_usefocus.html\">our changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html------------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-five-hundred-card-game-cc-tutorial\/'>New Just Javascript Five Hundred Card Game CC Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcgnt'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Names Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-names-tutorial\/'>Just Javascript Five Hundred Card Game Names 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Names Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_name.jpg\" title=\"Just Javascript Five Hundred Card Game Names Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game Names Tutorial<\/p><\/div>\n<p>Onto yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Rendering Timing Tutorial' href='#jjfhcgrtt'>Just Javascript Five Hundred Card Game Rendering Timing Tutorial<\/a>, being our web application is now dealing with collaboration and teams, wouldn&#8217;t it be good to provide a mechanism to turn those boring &#8230;<\/p>\n<p><code><br \/>\nPlayer 1,Player 2,Player 3,Player 4<br \/>\n<\/code><\/p>\n<p> &#8230; number feeling default labels for players be able to be turned into names?  We accept, now, email definitions such as &#8230;<\/p>\n<p><code><br \/>\nRobert James Metcalfe[rmetcalfe15@gmail.com]<br \/>\n<\/code><\/p>\n<p> &#8230; to facilitate this additional user experience improvement.<\/p>\n<p>It needed all these new Javascript called functions &#8230;<\/p>\n<p><code><br \/>\n  function sff(ines, nines) {   \/\/ expand out Player n<br \/>\n      var outes='', thisp=0;<br \/>\n      ines=ines.replace(\/Player\\ Player\\ \/g,'Player ');<br \/>\n      if (ines.indexOf('Click away Player ') != -1) {<br \/>\n        var withins=ines.split('Click away Player ');<br \/>\n        outes=withins[0];<br \/>\n        for (var igfd=1; igfd&lt;withins.length; igfd++) {<br \/>\n          if (('' + pnames[eval(-1 + eval('' + nines))]) == 'Player ' + nines) {<br \/>\n          \/\/alert('Here');<br \/>\n            outes+=('Click away Player ' + withins[igfd]);<br \/>\n          } else {<br \/>\n          \/\/alert('here');<br \/>\n            outes+=('Click away Player ' + withins[igfd]).replace('Click away Player ', 'Click away ' + pnames[eval(-1 + eval('' + nines))] + ' ');<br \/>\n          }<br \/>\n        }<br \/>\n        return outes;<br \/>\n      }<br \/>\n      return ines;<br \/>\n  }<br \/>\n<br \/>\n  function efs(ines, nines) {   \/\/ expand out Player n<br \/>\n      var outes='', thisp=0;<br \/>\n      ines=ines.replace(\/Player\\ Player\\ \/g,'Player ');<br \/>\n      if (ines.indexOf('Player ') != -1) {<br \/>\n        var withins=ines.split('Player ');<br \/>\n        outes=withins[0];<br \/>\n        for (var igfd=1; igfd&lt;withins.length; igfd++) {<br \/>\n          yhisp=withins[igfd].split('[')[0].split(')')[0].split(',')[0].split('?')[0].split('\"')[0].split(\"'\")[0].split('&lt;')[0].split(' ')[0];<br \/>\n          console.log('yhisp=' + yhisp);<br \/>\n          if (('' + yhisp + ' ').substring(0,1) &lt; '0' || ('' + yhisp + ' ').substring(0,1) &gt; '9') {<br \/>\n            outes+='Player ' + withins[igfd];<br \/>\n          } else if (eval('' + pnames.length) &gt; eval(-1 + eval('' + yhisp))) {<br \/>\n            \/\/alert('yhisp=' + yhisp + ' is it in ' + 'Player ' + withins[igfd] + ' ... ' + pnames[eval(-1 + eval('' + yhisp))] + ' += ' + ('Player ' + withins[igfd]).replace('Player ' + yhisp, pnames[eval(-1 + eval('' + yhisp))]) + ' ines=' + ines + ' becomes ' + 'outes=' + outes + ' so far');<br \/>\n            outes+=('Player ' + withins[igfd]).replace('Player ' + yhisp, pnames[eval(-1 + eval('' + yhisp))]);<br \/>\n          } else {<br \/>\n            outes+='Player ' + withins[igfd];<br \/>\n          }<br \/>\n        }<br \/>\n        return outes.replace('500 Card Game Player', '500 Card Game Player ');<br \/>\n      }<br \/>\n      return ines;<br \/>\n  }<br \/>\n<br \/> <br \/>\n  function esf(ines, nines) {  \/\/ if specified name, return that instead<br \/>\n      if (eval('' + pnames.length) &gt; eval(0 + Math.max(eval('' + nines),eval('' + nines)))) {<br \/>\n        return pnames[eval(0 + Math.max(eval('' + nines),eval('' + nines)))];<br \/>\n      }<br \/>\n      return ines;<br \/>\n  }<br \/>\n<br \/>\n  function fes(ines, nines) {  \/\/ strip Name Of[email@at] to email@at<br \/>\n      var prevcsuff='';<br \/>\n      var hjg='';<br \/>\n      var ipl=0;<br \/>\n      var nameas=ines.split('[');<br \/>\n      if (eval('' + nameas.length) == 2) {<br \/>\n       if (nameas[1].indexOf(']') != -1) {<br \/>\n         while (eval('' + pnames.length) &lt; eval('' + nines)) {<br \/>\n           pnames.push('Player ' + eval(1 + pnames.length));<br \/>\n         }<br \/>\n         if (('' + nines).indexOf('-') == -1) {<br \/>\n         while (eval('' + pnames.length) &lt; eval('' + nines)) {<br \/>\n           pnames.push('Player ' + eval(1 + pnames.length));<br \/>\n         }<br \/>\n         }<br \/>\n         pnames[eval(0 + Math.max(eval('' + nines),eval('' + nines)))]=nameas[0];<br \/>\n         ines=ines.replace(nameas[0] + '[','').replace(']','');<br \/>\n      prevcsuff=csuff;<br \/>\n      csuff='';<br \/>\n      hjg='' + curplayer;<br \/>\n      for (ipl=0; ipl&lt;hjg.length; ipl++) {<br \/>\n        csuff+=String.fromCodePoint(eval(8320 + eval(eval('' + hjg.substring(ipl,eval(1 + eval('' + ipl))).charCodeAt(0)) - 48)));<br \/>\n      }<br \/>\n     defstyle=defstylereplace(' ' + prevcsuff + '', ' ' + csuff);<br \/>\n         document.head.innerHTML+=bpmore(defstyle);<br \/>\n       }<br \/>\n      } else if (ines.indexOf('@') == -1 && ines.replace(\/0\/g,'').replace(\/1\/g,'').replace(\/2\/g,'').replace(\/3\/g,'').replace(\/4\/g,'').replace(\/5\/g,'').replace(\/6\/g,'').replace(\/7\/g,'').replace(\/8\/g,'').replace(\/9\/g,'').trim() != '') {<br \/>\n         pnames[eval(0 + Math.max(eval('' + nines),eval('' + nines)))]=nameas[0];<br \/>\n         ines='';<br \/>\n      prevcsuff=csuff;<br \/>\n      csuff='';<br \/>\n      hjg='' + curplayer;<br \/>\n      for (ipl=0; ipl&lt;hjg.length; ipl++) {<br \/>\n        csuff+=String.fromCodePoint(eval(8320 + eval(eval('' + hjg.substring(ipl,eval(1 + eval('' + ipl))).charCodeAt(0)) - 48)));<br \/>\n      }<br \/>\n     defstyle=defstylereplace(' ' + prevcsuff + '', ' ' + csuff);<br \/>\n         document.head.innerHTML+=bpmore(defstyle);<br \/>\n      } else {<br \/>\n      prevcsuff=csuff;<br \/>\n      csuff='';<br \/>\n      hjg='' + curplayer;<br \/>\n      for (ipl=0; ipl&lt;hjg.length; ipl++) {<br \/>\n        csuff+=String.fromCodePoint(eval(8320 + eval(eval('' + hjg.substring(ipl,eval(1 + eval('' + ipl))).charCodeAt(0)) - 48)));<br \/>\n      }<br \/>\n     defstyle=defstylereplace(' ' + prevcsuff + '', ' ' + csuff);<br \/>\n         document.head.innerHTML+=bpmore(defstyle);<br \/>\n      }<br \/>\n      return ines;<br \/>\n  }<br \/>\n<br \/> <br \/>\n  function sef(ines, nines) {  \/\/ expand out email@at<br \/>\n      if (eval('' + pnames.length) &gt; eval(0 + Math.max(eval('' + nines),eval('' + nines)))) {<br \/>\n        return pnames[eval(0 + Math.max(eval('' + nines),eval('' + nines)))] + '[' + ines + ']';<br \/>\n      }<br \/>\n      return ines;<br \/>\n  }<br \/>\n<br \/>\n  function defstylereplace(dfrom, dto) {<br \/>\n    if (defstyle.indexOf(dfrom) != -1) {<br \/>\n      return defstyle.replace(dfrom, dto);<br \/>\n    } else if (defstyle.indexOf(' leading ') != -1) {<br \/>\n      dfrom=' ' + defstyle.split(' leading ')[0].split(' ')[eval(-1 + defstyle.split(' leading ')[0].split(' ').length)];<br \/>\n      return defstyle.replace(dfrom, dto);<br \/>\n    } else if (defstyle.indexOf(' ' + scoresuffix) != -1) {<br \/>\n      dfrom=' ' + defstyle.split(' ' + scoresuffix)[0].split(' ')[eval(-1 + defstyle.split(' ' + scoresuffix)[0].split(' ').length)];<br \/>\n      return defstyle.replace(dfrom, dto);<br \/>\n    }<br \/>\n    return defstyle.replace(dfrom, dto);<br \/>\n  }<br \/>\n<\/code><\/p>\n<p> &#8230; to take this first draft of changes to make this naming functionality happen.<\/p>\n<p>We hope you utilize the improved naming functionality with the 500 card game part of <a title='Just Javascript Five Hundred Card Game Continuous Scoring Tutorial' href='#jjfhcgcst'>Just Javascript Five Hundred Card Game Continuous Scoring Tutorial<\/a> with <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-----------------------------GETME\" title=\"cards_usefocus.html\">our changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-----------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-five-hundred-card-game-names-tutorial\/'>Just Javascript Five Hundred Card Game Names Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcgrtt'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Rendering Timing Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-rendering-timing-tutorial\/'>Just Javascript Five Hundred Card Game Rendering Timing 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Rendering Timing Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_timing.jpg\" title=\"Just Javascript Five Hundred Card Game Rendering Timing Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game Rendering Timing Tutorial<\/p><\/div>\n<p>Every now and then, and usually involving the timing of a Javascript prompt or confirm or alert popup window, we are caught out by that tiny snippet of time it takes the web browser to complete a rendering task.  If that rendering task has not completed ahead of the modal Javascript popup windows it is not always &#8220;mission critical&#8221; unworkable for the user, as with our current project where we have put up with the annoyance for more than a week now.  The scenario of the issue is &#8230;<\/p>\n<p><code><br \/>\nIn the 500 card game (with all players non-remote (ie. presumably all using the one device)) on, say, Player 1, clicking their first card, and in the interests of allowing players to only see their own cards, before our fix, the prompt window prompting Player 2 to tell others to turn away because the next prompt window display Player 2 cards, that Player 1 click turn over of card webpage rendering had not finished.<br \/>\n<\/code><\/p>\n<p> &#8230; but better would it be if it was, because then Player 1 involvement would be done and dusted, and would not be a concern going forward with Player 2 activities.<\/p>\n<p>Believe it or not, on occasions all that is needed here to address this annoyance is a fifth of a second of delay, as per &#8230;<\/p>\n<p><code><br \/>\n  var passcnt=0;<br \/>\n  var gwh='';<br \/>\n<br \/>\n  function myalertmc(wh) {  \/\/ new myalertmc() function ...<br \/>\n    gwh=wh;<br \/>\n    if (passcnt != 0) {<br \/>\n    gmyalertmc();     \/\/ ... sometimes if okay without delay ...<br \/>\n    } else {<br \/>\n    setTimeout(gmyalertmc, 200);  \/\/ ... but sometimes a very short delay is enough time for webpage rendering to complete ...<br \/>\n    }<br \/>\n  }<br \/>\n<br \/> <br \/>\n  function gmyalertmc() { \/\/ (wh) ... mainly just the old myalertmc() function ...<br \/>\n    var wh='';<br \/>\n    if (gwh != '') {<br \/>\n      wh=gwh;<br \/>\n      gwh='';<br \/>\n    }<br \/>\n    \/\/ Rest of old myalertmc() function code follows, where a Javascript prompt popup window happens ...<br \/>\n  }<br \/>\n<\/code><\/p>\n<p>We hope you can see an improvement on yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Continuous Scoring Tutorial' href='#jjfhcgcst'>Just Javascript Five Hundred Card Game Continuous Scoring Tutorial<\/a> with <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html----------------------------GETME\" title=\"cards_usefocus.html\">our changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html----------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-five-hundred-card-game-rendering-timing-tutorial\/'>Just Javascript Five Hundred Card Game Rendering Timing Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcgcst'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Continuous Scoring Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-continuous-scoring-tutorial\/'>Just Javascript Five Hundred Card Game Continuous Scoring 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Continuous Scoring Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_newgame.jpg\" title=\"Just Javascript Five Hundred Card Game Continuous Scoring Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game Continuous Scoring Tutorial<\/p><\/div>\n<p>Up until yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Kitty Dropdown Tutorial' href='#jjfhcgkdt'>Just Javascript Five Hundred Card Game Kitty Dropdown Tutorial<\/a> any &#8220;500 card game&#8221; web application work was self contained within a single execution of a single web page.  But with a 4 player 500 card game, it is usually the case that a game spans several shuffle and deal sets of 10 trick &#8220;plays&#8221; for a couple of players to reach the 500 or -500 score that determines a winner of that game.<\/p>\n<p>And so it comes to scoring logic today, and a &#8220;get arguments&#8221; arrangement (via ? and &#038; arguments) to carry on the game &#8230;<\/p>\n<p><code><br \/>\n  var bids=[\"6s\",\"6c\",\"6d\",\"6h\",\"6n\",\"7s\",\"7c\",\"7d\",\"7h\",\"7n\",\"8s\",\"mis&#232;re\",\"8c\",\"8d\",\"8h\",\"8n\",\"9s\",\"9c\",\"9d\",\"9h\",\"9n\",\"10s\",\"10c\",\"10d\",\"10h\",\"open_mis&#232;re\",\"10n\"];<br \/>\n  var sbid=[\"40\",\"60\",\"80\",\"100\",\"120\",\"140\",\"160\",\"180\",\"200\",\"220\",\"240\",\"250\",\"260\",\"280\",\"300\",\"320\",\"340\",\"360\",\"380\",\"400\",\"420\",\"440\",\"460\",\"480\",\"500\",\"500\",\"520\"];<br \/>\n  var jscores=[0,0,0,0];<br \/>\n  var scoresuffix='';<br \/>\n<br \/>\n  function documenttitleeq(indt) {<br \/>\n   documenttitle=indt;<br \/>\n   if (card_game.toLowerCase() == '500ish') {<br \/>\n   if (card_game == '500ISH') {<br \/>\n   document.title='500 card game where winning bid is ' + (cbid + ' (by Player ' + cbidby + ')').replace('None (by Player 1)','Pass').replace('None','Pass').replace('1','1,III').replace('2','2,IV').replace('3','3,1').replace('4','4,2').replace('III','3').replace('IV','4') + ' and trumps are ' + trumpsare.replace('c','Club').replace('d','Diamond').replace('s','Spade').replace('h','Heart').replace('0','No Trump') + 's' + ' ... ' + scoresuffix + sss;<br \/>\n   if (eval('' + nominal_numplayers + ' * (' + scoresuffix.replace(\/\\,\/g, ' + ') + ')')  &gt;= 40) {<br \/>\n     if (eval('' + totcpp) &gt; 0) {<br \/>\n     totcpp=-totcpp;<br \/>\n     var llj=sfhz(false);<br \/>\n     if (confirm('Thanks for playing the 500 card game ... ' + scoresuffix + sss + ' ... OK to play again?')) {<br \/>\n       location.href=llj; \/\/lurl();<br \/>\n     }<br \/>\n     }<br \/>\n   }<br \/>\n   } else {<br \/>\n   if (cbid.replace('None', '') != '') {<br \/>\n   document.title='500 card game where winning bid is ' + (cbid + ' (by Player ' + cbidby + ')').replace('None (by Player 1)','Pass').replace('None','Pass').replace('1','1,III').replace('2','2,IV').replace('3','3,1').replace('4','4,2').replace('III','3').replace('IV','4') + ' and trumps are ' + trumpsare.replace('c','Club').replace('d','Diamond').replace('s','Spade').replace('h','Heart').replace('0','No Trump') + 's' + ' ... ' + scoresuffix + sss;<br \/>\n   } else if (in_bidding) {<br \/>\n   document.title='500 card game ... ' + scoresuffix + sss;<br \/>\n   } else {<br \/>\n   document.title='500 (hybrid) card game ... ' + scoresuffix + sss;<br \/>\n   }<br \/>\n   if (eval('' + nominal_numplayers + ' * (' + scoresuffix.replace(\/\\,\/g, ' + ') + ')')  &gt;= Math.abs(eval('' + totcpp))) {<br \/>\n     if (eval('' + totcpp) &gt; 0) {<br \/>\n     totcpp=-totcpp;<br \/>\n     if (confirm('Thanks for playing the 500 (hybrid) card game ... ' + scoresuffix + sss + ' ... OK to play again?')) {<br \/>\n       location.href=document.URL;<br \/>\n     }<br \/>\n     }<br \/>\n   }<br \/>\n   }<br \/>\n   } else {<br \/>\n   document.title=documenttitle;<br \/>\n   }<br \/>\n  }<br \/>\n<br \/>\n  function sfhz(torf) {<br \/>\n    var om='';<br \/>\n    var psx=scoresuffix;<br \/>\n    var jkscores=scoresuffix.split(',');<br \/>\n    var iyt=0, lurldone=false;<br \/>\n    var tscores=[];<br \/>\n    for (iyt=0; iyt&lt;jkscores.length; iyt++) {<br \/>\n     if (('' + jkscores[iyt]).indexOf('-') != -1) {<br \/>\n      tscores.push(eval(jkscores[iyt].split('.')[0].replace('-','')));<br \/>\n     } else {<br \/>\n      tscores.push(eval(jkscores[iyt].split('.')[0]));<br \/>\n     }<br \/>\n    }<br \/>\n    var sofard=scoresuffix.split('.');<br \/>\n    for (iyt=0; iyt&lt;bids.length; iyt++) {<br \/>\n    if ((bids[iyt].toLowerCase() + '   ').substring(0,3).indexOf((cbid + '   ').toLowerCase().substring(0,3)) != -1) {<br \/>\n    if (cbid.indexOf('6') == 0) {<br \/>\n      if (('' + cbidby).replace('3','1') == '1') {<br \/>\n      if (eval(tscores[0] + tscores[2]) &gt;= 6) {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]+=eval('' + sbid[iyt]);<br \/>\n      } else {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]-=eval('' + sbid[iyt]);<br \/>\n      }<br \/>\n      om='' + jscores[eval(-1 + eval('' + cbidby))];<br \/>\n      if (om.substring(0,1) == '-') { om='-'; } else { om=''; }<br \/>\n      scoresuffix=scoresuffix.replace('-' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))])).replace('' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))]));<br \/>\n      defstyle=defstyle.replace(' ' + psx + '&lt;', ' ' + scoresuffix + '&lt;');<br \/>\n      document.head.innerHTML+=bpmore(defstyle);<br \/>\n<br \/> <br \/>\n      } else {<br \/>\n      if (eval(tscores[1] + tscores[3]) &gt;= 6) {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]+=eval('' + sbid[iyt]);<br \/>\n      } else {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]-=eval('' + sbid[iyt]);<br \/>\n      }<br \/>\n      om='' + jscores[eval(-1 + eval('' + cbidby))];<br \/>\n      if (om.substring(0,1) == '-') { om='-'; } else { om=''; }<br \/>\n      scoresuffix=scoresuffix.replace('-' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))])).replace('' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))]));<br \/>\n      defstyle=defstyle.replace(' ' + psx + '&lt;', ' ' + scoresuffix + '&lt;');<br \/>\n      document.head.innerHTML+=bpmore(defstyle);<br \/>\n<br \/>\n      }<br \/>\n    } else if (cbid.indexOf('7') == 0) {<br \/>\n      if (('' + cbidby).replace('3','1') == '1') {<br \/>\n      if (eval(tscores[0] + tscores[2]) &gt;= 7) {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]+=eval('' + sbid[iyt]);<br \/>\n      } else {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]-=eval('' + sbid[iyt]);<br \/>\n      }<br \/>\n      om='' + jscores[eval(-1 + eval('' + cbidby))];<br \/>\n      if (om.substring(0,1) == '-') { om='-'; } else { om=''; }<br \/>\n      scoresuffix=scoresuffix.replace('-' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))])).replace('' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))]));<br \/>\n      defstyle=defstyle.replace(' ' + psx + '&lt;', ' ' + scoresuffix + '&lt;');<br \/>\n      document.head.innerHTML+=bpmore(defstyle);<br \/>\n<br \/>\n      } else {<br \/>\n      if (eval(tscores[1] + tscores[3]) &gt;= 7) {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]+=eval('' + sbid[iyt]);<br \/>\n      } else {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]-=eval('' + sbid[iyt]);<br \/>\n      }<br \/>\n      scoresuffix=scoresuffix.replace('' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], '' + tscores[eval(-1 + eval('' + cbidby))] + '.' + jscores[eval(-1 + eval('' + cbidby))]);<br \/>\n      om='' + jscores[eval(-1 + eval('' + cbidby))];<br \/>\n      if (om.substring(0,1) == '-') { om='-'; } else { om=''; }<br \/>\n      scoresuffix=scoresuffix.replace('-' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))])).replace('' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))]));<br \/>\n      document.head.innerHTML+=bpmore(defstyle);<br \/>\n<br \/>\n      }<br \/>\n    } else if (cbid.indexOf('8') == 0) {<br \/>\n      if (('' + cbidby).replace('3','1') == '1') {<br \/>\n      if (eval(tscores[0] + tscores[2]) &gt;= 8) {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]+=eval('' + sbid[iyt]);<br \/>\n      } else {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]-=eval('' + sbid[iyt]);<br \/>\n      }<br \/>\n      om='' + jscores[eval(-1 + eval('' + cbidby))];<br \/>\n      if (om.substring(0,1) == '-') { om='-'; } else { om=''; }<br \/>\n      scoresuffix=scoresuffix.replace('-' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))])).replace('' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))]));<br \/>\n      defstyle=defstyle.replace(' ' + psx + '&lt;', ' ' + scoresuffix + '&lt;');<br \/>\n      document.head.innerHTML+=bpmore(defstyle);<br \/>\n<br \/>\n      } else {<br \/>\n      if (eval(tscores[1] + tscores[3]) &gt;= 8) {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]+=eval('' + sbid[iyt]);<br \/>\n      } else {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]-=eval('' + sbid[iyt]);<br \/>\n      }<br \/>\n      om='' + jscores[eval(-1 + eval('' + cbidby))];<br \/>\n      if (om.substring(0,1) == '-') { om='-'; } else { om=''; }<br \/>\n      scoresuffix=scoresuffix.replace('-' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))])).replace('' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))]));<br \/>\n      defstyle=defstyle.replace(' ' + psx + '&lt;', ' ' + scoresuffix + '&lt;');<br \/>\n      document.head.innerHTML+=bpmore(defstyle);<br \/>\n<br \/>\n      }<br \/>\n    } else if (cbid.indexOf('9') == 0) {<br \/>\n      if (('' + cbidby).replace('3','1') == '1') {<br \/>\n      if (eval(tscores[0] + tscores[2]) &gt;= 9) {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]+=eval('' + sbid[iyt]);<br \/>\n      } else {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]-=eval('' + sbid[iyt]);<br \/>\n      }<br \/>\n      om='' + jscores[eval(-1 + eval('' + cbidby))];<br \/>\n      if (om.substring(0,1) == '-') { om='-'; } else { om=''; }<br \/>\n      scoresuffix=scoresuffix.replace('-' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))])).replace('' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))]));<br \/>\n      defstyle=defstyle.replace(' ' + psx + '&lt;', ' ' + scoresuffix + '&lt;');<br \/>\n      document.head.innerHTML+=bpmore(defstyle);<br \/>\n<br \/>\n      } else {<br \/>\n      if (eval(tscores[1] + tscores[3]) &gt;= 9) {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]+=eval('' + sbid[iyt]);<br \/>\n      } else {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]-=eval('' + sbid[iyt]);<br \/>\n      }<br \/>\n      om='' + jscores[eval(-1 + eval('' + cbidby))];<br \/>\n      if (om.substring(0,1) == '-') { om='-'; } else { om=''; }<br \/>\n      scoresuffix=scoresuffix.replace('-' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))])).replace('' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))]));<br \/>\n      defstyle=defstyle.replace(' ' + psx + '&lt;', ' ' + scoresuffix + '&lt;');<br \/>\n      document.head.innerHTML+=bpmore(defstyle);<br \/>\n<br \/>\n      }<br \/>\n    } else if (cbid.indexOf('10') == 0) {<br \/>\n      if (('' + cbidby).replace('3','1') == '1') {<br \/>\n      if (eval(tscores[0] + tscores[2]) &gt;= 10) {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]+=eval('' + sbid[iyt]);<br \/>\n      } else {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]-=eval('' + sbid[iyt]);<br \/>\n      }<br \/>\n      om='' + jscores[eval(-1 + eval('' + cbidby))];<br \/>\n      if (om.substring(0,1) == '-') { om='-'; } else { om=''; }<br \/>\n      scoresuffix=scoresuffix.replace('-' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))])).replace('' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))]));<br \/>\n      defstyle=defstyle.replace(' ' + psx + '&lt;', ' ' + scoresuffix + '&lt;');<br \/>\n      document.head.innerHTML+=bpmore(defstyle);<br \/>\n<br \/>\n      } else {<br \/>\n      if (eval(tscores[1] + tscores[3]) &gt;= 10) {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]+=eval('' + sbid[iyt]);<br \/>\n      } else {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]-=eval('' + sbid[iyt]);<br \/>\n      }<br \/>\n      om='' + jscores[eval(-1 + eval('' + cbidby))];<br \/>\n      if (om.substring(0,1) == '-') { om='-'; } else { om=''; }<br \/>\n      scoresuffix=scoresuffix.replace('-' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))])).replace('' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))]));<br \/>\n      defstyle=defstyle.replace(' ' + psx + '&lt;', ' ' + scoresuffix + '&lt;');<br \/>\n      document.head.innerHTML+=bpmore(defstyle);<br \/>\n<br \/>\n      }<br \/>\n    } else {<br \/>\n      if (('' + cbidby).replace('3','1') == '1') {<br \/>\n      if (eval(tscores[0] + tscores[2]) == 0) {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]+=eval('' + sbid[iyt]);<br \/>\n      } else {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]-=eval('' + sbid[iyt]);<br \/>\n      }<br \/>\n      om='' + jscores[eval(-1 + eval('' + cbidby))];<br \/>\n      if (om.substring(0,1) == '-') { om='-'; } else { om=''; }<br \/>\n      scoresuffix=scoresuffix.replace('-' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))])).replace('' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))]));<br \/>\n      defstyle=defstyle.replace(' ' + psx + '&lt;', ' ' + scoresuffix + '&lt;');<br \/>\n      document.head.innerHTML+=bpmore(defstyle);<br \/>\n<br \/>\n      } else {<br \/>\n      if (eval(tscores[1] + tscores[3]) == 0) {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]+=eval('' + sbid[iyt]);<br \/>\n      } else {<br \/>\n      jscores[eval(-1 + eval('' + cbidby))]-=eval('' + sbid[iyt]);<br \/>\n      }<br \/>\n      om='' + jscores[eval(-1 + eval('' + cbidby))];<br \/>\n      if (om.substring(0,1) == '-') { om='-'; } else { om=''; }<br \/>\n      scoresuffix=scoresuffix.replace('-' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))])).replace('' + tscores[eval(-1 + eval('' + cbidby))] + '.' + sofard[eval(-1 + eval('' + cbidby))].split(',')[0], om + tscores[eval(-1 + eval('' + cbidby))] + '.' + Math.abs(jscores[eval(-1 + eval('' + cbidby))]));<br \/>\n      defstyle=defstyle.replace(' ' + psx + '&lt;', ' ' + scoresuffix + '&lt;');<br \/>\n      document.head.innerHTML+=bpmore(defstyle);<br \/>\n<br \/>\n      }<br \/>\n    }<br \/>\n    }<br \/>\n    }<br \/>\n    if (torf) {<br \/>\n    if (eval(eval('' + jscores[0]) + eval('' + jscores[2])) &gt;= 500) {<br \/>\n           if (confirm('Congratulations, Player 1 and Player 3 for reaching 500.  Another game?')) {<br \/>\n           lurldone=true;<br \/>\n           location.href=lurl();<br \/>\n           jscores=[0,0,0,0];<br \/>\n           }<br \/>\n    } else if (eval(eval('' + jscores[1]) + eval('' + jscores[3])) &gt;= 500) {<br \/>\n           if (confirm('Congratulations, Player 2 and Player 4 for reaching 500.  Another game?')) {<br \/>\n           lurldone=true;<br \/>\n           location.href=lurl();<br \/>\n           jscores=[0,0,0,0];<br \/>\n           }<br \/>\n    } else if (eval(eval('' + jscores[0]) + eval('' + jscores[2])) &lt;= -500) {<br \/>\n           if (confirm('Congratulations, Player 2 and Player 4 for opponents reaching -500.  Another game?')) {<br \/>\n           lurldone=true;<br \/>\n           location.href=lurl();<br \/>\n           jscores=[0,0,0,0];<br \/>\n           }<br \/>\n    } else if (eval(eval('' + jscores[1]) + eval('' + jscores[3])) &lt;= -500) {<br \/>\n           if (confirm('Congratulations, Player 1 and Player 3 for opponents reaching -500.  Another game?')) {<br \/>\n           lurldone=true;<br \/>\n           location.href=lurl();<br \/>\n           jscores=[0,0,0,0];<br \/>\n           }<br \/>\n    }<br \/>\n    if (!lurldone) { location.href=lurl(); }<br \/>\n    }<br \/>\n    return lurl();<br \/>\n  }<br \/>\n<br \/>\n  function sfh(invl) {<br \/>\n    var ssl=eval(0 + eval('' + scoresuffix.split(',').length));<br \/>\n    if (scoresuffix == '') { ssl=0; }<br \/>\n    if (card_game == '500ISH') {<br \/>\n      \/\/alert('scoresuffix=' + scoresuffix + ' calls on jscores[' + ssl + ']');<br \/>\n      if (invl.indexOf('.') == -1) {<br \/>\n       if (('' +  jscores[ssl]).indexOf('-') != -1) {<br \/>\n        return '-' + invl + '.' + Math.abs(eval('' + jscores[ssl]));<br \/>\n       } else {<br \/>\n        return invl + '.' + jscores[ssl];<br \/>\n       }<br \/>\n      }<br \/>\n    }<br \/>\n    return '' + invl;<br \/>\n  }<br \/>\n<br \/>\n  \/\/ code snippet for score changing uses code above as per ...<br \/>\n    osses[eval(-1 + lastwinner)]='' + eval(1 + eval(('' + osses[eval(-1 + lastwinner)]).replace('-','').split('.')[0]));<br \/>\n    scoresuffix='';<br \/>\n    scoresuffix='' + sfh(osses[0].replace('-','').split('.')[0]);<br \/>\n    for (jnext=1; jnext&lt;eval('' + nominal_numplayers); jnext++) {<br \/>\n      scoresuffix+=',' + sfh(osses[jnext].replace('-','').split('.')[0]);<br \/>\n    }<\/p>\n<p><\/code><\/p>\n<p>And so, please join us on our &#8220;500 card game&#8221; (almost there) non-hybrid journey with <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html--------------------------GETME\" title=\"cards_usefocus.html\">our changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html--------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-five-hundred-card-game-continuous-scoring-tutorial\/'>Just Javascript Five Hundred Card Game Continuous Scoring Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcgkdt'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Kitty Dropdown Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-kitty-dropdown-tutorial\/'>Just Javascript Five Hundred Card Game Kitty Dropdown 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Kitty Dropdown Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_ddbetter.jpg\" title=\"Just Javascript Five Hundred Card Game Kitty Dropdown Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game Kitty Dropdown Tutorial<\/p><\/div>\n<p>As mentioned with yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Kitty Logic Tutorial' href='#jjfhcgklt'>Just Javascript Five Hundred Card Game Kitty Logic Tutorial<\/a>, today is an aesthetics day regarding dropdown option colours (not so flexible) and emojis (a tiny bit better).    Okay, so the card emojis have no inherent colour, but we had mixed success  researching a red diamond (yes) and a red heart (no) suit emoji &#8220;redness&#8221; solution.<\/p>\n<p>Also, we restricted some bidding button email click options by turning input type=submit into input type=button (ie. no navigation but looks the same) for bids that become too low to be valid in the context of the 500 card game.<\/p>\n<p>So please join us on our &#8220;500 card game&#8221; (getting ever closer to a) non-hybrid journey with <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-------------------------GETME\" title=\"cards_usefocus.html\">our changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-five-hundred-card-game-kitty-dropdown-tutorial\/'>Just Javascript Five Hundred Card Game Kitty Dropdown Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcgklt'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Kitty Logic Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-kitty-logic-tutorial\/'>Just Javascript Five Hundred Card Game Kitty Logic 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Kitty Logic Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_kitty_logic.jpg\" title=\"Just Javascript Five Hundred Card Game Kitty Logic Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game Kitty Logic Tutorial<\/p><\/div>\n<p>Adding to yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Remote Kitty Tutorial' href='#jjfhcgrkt'>Just Javascript Five Hundred Card Game Remote Kitty Tutorial<\/a> we&#8217;ve concluded &#8230;<\/p>\n<blockquote><p>\nThere&#8217;s got to be some logic to what Kitty does?\n<\/p><\/blockquote>\n<p> &#8230; surely?!<\/p>\n<p>And so we want to see if there are some aesthetic improvements (and user experience improvements restricting some poor button presses) to the emails, for tomorrow&#8217;s work, containing those dropdowns within the &#8230;<\/p>\n<ul>\n<li>remote player kitty logic &#8230; and distinct from today&#8217;s push to resolve &#8230;<\/li>\n<li>non-remote player kitty logic<\/li>\n<\/ul>\n<p> &#8230; involving that twin bidding\/kitty Javascript prompt window ask after three pass answers from bidding players.<\/p>\n<p>Please join us on our &#8220;500 card game&#8221; (getting ever closer to a) non-hybrid journey with <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html------------------------GETME\" title=\"cards_usefocus.html\">our changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html------------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-five-hundred-card-game-kitty-logic-tutorial\/'>Just Javascript Five Hundred Card Game Kitty Logic Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcgrkt'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Remote Kitty Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-remote-kitty-tutorial\/'>Just Javascript Five Hundred Card Game Remote Kitty 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Remote Kitty Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_kitty_remote.jpg\" title=\"Just Javascript Five Hundred Card Game Remote Kitty Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game Remote Kitty Tutorial<\/p><\/div>\n<p>On top of yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Kitty Setup Tutorial' href='#jjfhcgkst'>Just Javascript Five Hundred Card Game Kitty Setup Tutorial<\/a>, today we&#8217;ve been concentrating on the scenario of remote email players and the winning bidder working the kitty.<\/p>\n<p>Then, it occurred to us during this, that where we said yesterday &#8230;<\/p>\n<blockquote cite='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-kitty-setup-tutorial\/'><p>\nwhere you may discern that the trigger to move on is 4 &#8220;pass&#8221; bids in a row\n<\/p><\/blockquote>\n<p> &#8230; that in so doing we were adding an unnecessary ask (perhaps) into the &#8220;equation&#8221; of how the &#8220;500 card game&#8221; operates, in that on the third &#8220;pass&#8221; bid we get back to the last successful bidder anyway, so why not offer them the chance to do either &#8230;<\/p>\n<ul>\n<li>define their kitty swaps (as they won the bidding), and then click on their opening card placement for the first card of the first trick &#8230; or, we could not remember exactly the rules, but &#8230;<\/li>\n<li>also allow them to up their own last bid (and then we thought maybe this was feasible, then it opens the door to other players re-entering the &#8220;bidding fray&#8221; as the opposition argument to thinking this sounds unfair) by clicking a higher ranked bidding submit button<\/li>\n<\/ul>\n<p> &#8230; and this was our main design issue for the day, leaving non-remote scenarios for tomorrow.<\/p>\n<p>And so, if you join us on our &#8220;500 card game&#8221; (getting towards) non-hybrid journey with <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-----------------------GETME\" title=\"cards_usefocus.html\">our changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html-----------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows), just be aware that a kitty for a non-remote player you swap cards via will not be enacted for a day or so.  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-five-hundred-card-game-remote-kitty-tutorial\/'>Just Javascript Five Hundred Card Game Remote Kitty Setup Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcgkst'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Kitty Setup Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-kitty-setup-tutorial\/'>Just Javascript Five Hundred Card Game Kitty Setup 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Kitty Setup Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_kitty_one.jpg\" title=\"Just Javascript Five Hundred Card Game Kitty Setup Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game Kitty Setup Tutorial<\/p><\/div>\n<p>Operation <a target=_blank title='?' href='https:\/\/en.wikipedia.org\/wiki\/Wright_Flyer'>&#8220;Kitty Hawk&#8221;<\/a> proceeds today on top of the bidding work of yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Bidding Tutorial' href='#jjfhcgbt'>Just Javascript Five Hundred Card Game Bidding Tutorial<\/a>.  It&#8217;s just that &#8230; well &#8230; it&#8217;s a bit more involved and we only got to the Kitty bit, not the Hawk bit, today.<\/p>\n<p>Tomorrow we should be &#8220;taking off&#8221; regarding having a kitty (of 3 cards, optionally swappable for others in the winning bidders hand, in a game of 500 played by 4 players).<\/p>\n<p>We&#8217;ve plumped for an extra &#8220;Kitty&#8221; table row be added to a remote email player&#8217;s first &#8220;playing of cards&#8221; email whereby they both &#8230;<\/p>\n<ul>\n<li>make their optional kitty swapping moves via new dropdowns &#8230;<br \/>\n<code><br \/>\n        for (ixc=0; ixc&lt;hands.length; ixc++) {<br \/>\n          bdl=hands[ixc].split(' ');  \/\/ used in \"Other code goes here\"<br \/>\n          if (eval('' + ixc) &gt;= 40) {<br \/>\n            eis=0;<br \/>\n            \/\/alert('0:' + hands[ixc] + '!');<br \/>\n            threeis=hands[ixc].slice(-3);<br \/>\n            \/\/alert('threeis=' + threeis + ' ... ' + hands[ixc] + '!');<br \/>\n            for (ihjk=0; ihjk&lt;spcps.length; ihjk++) {<br \/>\n              if (spcps[ihjk].indexOf(threeis + '.') != -1) {<br \/>\n                eis=eval('' + spcps[ihjk].split('\/')[0]);<br \/>\n              }<br \/>\n            }<br \/>\n            \/\/alert(String.fromCodePoint(eis) + ' threeis=' + threeis + 'zsuffs[]=' + zsuffs[eval(-1 + curplayer)]);<br \/>\n            if (tds_kitty == '') {<br \/>\n              tds_kitty='&lt;tr&gt;&lt;td&gt;Kitty&lt;\/td&gt;&lt;td&gt;&lt;select name=swap1&gt;&lt;option value=\"\"&gt;Kitty Card 1 ' + String.fromCodePoint(eis) + ' ... in for ...&lt;\/option&gt;&lt;\/SELECT&gt;&lt;\/td&gt;&lt;\/TR&gt;';<br \/>\n              thirty--;<br \/>\n              thirty--;<br \/>\n              for (ihjk=0; ihjk&lt;10; ihjk++) {<br \/>\n               tds_kitty=tds_kitty.replace('&lt;\/SELECT&gt;','&lt;option value=\"+' + curplayer + '.11,-' + curplayer + '.' + eval(1 + eval('' + ihjk)) + '\"&gt;' + zsuffs[eval(-1 + curplayer)].trim().split(' ')[eval('' + ihjk)] + '&lt;\/option&gt;&lt;\/SELECT&gt;');<br \/>\n              }<br \/>\n              tds_kitty=tds_kitty.replace('&lt;\/SELECT&gt;','&lt;\/select&gt;');<br \/>\n            } else {<br \/>\n              tlen=eval(-1 + eval('' + tds_kitty.split('&lt;\/td&gt;').length));<br \/>\n              \/\/alert('tlen=' + tlen + ' ' + tds_kitty + ' ' + zsuffs[eval(-1 + curplayer)].trim().split(' ').length);<br \/>\n              tds_kitty=tds_kitty.replace('&lt;\/td&gt;&lt;\/TR&gt;','&lt;\/td&gt;&lt;td&gt;&lt;select name=swap' + tlen + '&gt;&lt;option value=\"\"&gt;Kitty Card ' + tlen + ' ' + String.fromCodePoint(eis) + ' ... in for ...&lt;\/option&gt;&lt;\/SELECT&gt;&lt;\/td&gt;&lt;\/TR&gt;');<br \/>\n              thirty--;<br \/>\n              for (ihjk=0; ihjk&lt;10; ihjk++) {<br \/>\n               tds_kitty=tds_kitty.replace('&lt;\/SELECT&gt;','&lt;option value=\"+' + curplayer + '.1' + tlen + ',-' + curplayer + '.' + eval(1 + eval('' + ihjk)) + '\"&gt;' + zsuffs[eval(-1 + curplayer)].trim().split(' ')[eval('' + ihjk)] + '&lt;\/option&gt;&lt;\/SELECT&gt;');<br \/>\n              }<br \/>\n              tds_kitty=tds_kitty.replace('&lt;\/SELECT&gt;','&lt;\/select&gt;');<br \/>\n            }<br \/>\n          }<br \/>\n          \/\/ Other code goes here<br \/>\n        }<br \/>\n        tds_kitty=tds_kitty.replace('&lt;\/td&gt;&lt;\/TR&gt;','&lt;\/td&gt;&lt;td colspan=' + thirty + '&gt;&lt;\/td&gt;&lt;\/tr&gt;');<br \/>\n<\/code><br \/>\n &#8230; (whose data navigates with the form (via defined &#8220;name&#8221; properties), and tomorrow, too, we&#8217;ll turn off the card &#8220;a&#8221; links on kitty scenarios, because we want you to navigate via the email inline HTML form rather than &#8220;a&#8221; href navigation) &#8230; as well as, the usual &#8230;<\/li>\n<li>click for (the first) card to be played (in this first trick)<\/li>\n<\/ul>\n<p>And so today the navigation out from this is achieved and tomorrow we have to cater for <a target=_blank title='?' href='https:\/\/en.wikipedia.org\/wiki\/Wright_Flyer'>&#8220;Kitty Hawk&#8221;<\/a> getting down again &#8230;<\/p>\n<blockquote><p>\nHawk &#8230; let Kitty down now, that&#8217;s a good bird of prey!\n<\/p><\/blockquote>\n<p>If you join us on our &#8220;500 card game&#8221; (getting towards) non-hybrid journey with <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html----------------------GETME\" title=\"cards_usefocus.html\">our changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html----------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows), just be aware that a kitty you swap cards via will not be enacted for a day or so.  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-five-hundred-card-game-kitty-setup-tutorial\/'>Just Javascript Five Hundred Card Game Kitty Setup Tutorial<\/a>.<\/p-->\n<hr>\n<p id='jjfhcgbt'>Previous relevant <a target=_blank title='Just Javascript Five Hundred Card Game Bidding Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-five-hundred-card-game-bidding-tutorial\/'>Just Javascript Five Hundred Card Game Bidding 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\/cards_usefocus.html?card_memories=04.0\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Just Javascript Five Hundred Card Game Bidding Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus_bidding.jpg\" title=\"Just Javascript Five Hundred Card Game Bidding Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Just Javascript Five Hundred Card Game Bidding Tutorial<\/p><\/div>\n<p>Moving on from yesterday&#8217;s <a title='Just Javascript Five Hundred Card Game Order Tutorial' href='#jjfhcgot'>Just Javascript Five Hundred Card Game Order Tutorial<\/a> we start out on our &#8220;500 card game&#8221; bidding phase made up of &#8230;<\/p>\n<ol>\n<li>pitting the four players against each other for the highest bid in amongst &#8230;<br \/>\n<code><br \/>\n  var bids=[\"6s\",\"6c\",\"6d\",\"6h\",\"6n\",\"7s\",\"7c\",\"7d\",\"7h\",\"7n\",\"8s\",\"mis&#232;re\",\"8c\",\"8d\",\"8h\",\"8n\",\"9s\",\"9c\",\"9d\",\"9h\",\"9n\",\"10s\",\"10c\",\"10d\",\"10h\",\"open_mis&#232;re\",\"10n\"];<br \/>\n<\/code><br \/>\n &#8230; the &#8220;open_mis&#232;re&#8221; a job for another day\n <\/li>\n<li>winner of bidding swaps three cards, out, for the three cards of the kitty, in<\/li>\n<\/ol>\n<p> &#8230; and we are concentrating on the first part today.   This bidding for the &#8220;04.0&#8221; scenario still needs to hide cards from other players &#8230; doh!  As such, it is a whole layer of code (while variable in_bidding is true) on top of a hybrid 500 card game modus operandi.  Funnily enough, even for non-email participants we converge on the email button press code in function sentclick (to arrive at, within that function) where you may discern that the trigger to move on is 4 &#8220;pass&#8221; bids in a row &#8230;<\/p>\n<p><code><br \/>\n  if (in_bidding) {<br \/>\n  ma=sentanswer;<br \/>\n<br \/>\n  \/\/alert('sent ma=' + ma);<br \/>\n <br \/> <br \/>\n  if (ma.toLowerCase().indexOf('pass') == 0) {<br \/>\n    passcnt++;<br \/>\n    if (passcnt == 4) {<br \/>\n      in_bidding=false;<br \/>\n      curplayer=eval('' + cbidby);<br \/>\n      lastwinner=eval('' + cbidby);<br \/>\n      donelistis=',1,2,3,4,';<br \/>\n      if (cbid.trim().slice(-1).toLowerCase() == 'n' || cbid.toLowerCase().indexOf('mis') != -1) {<br \/>\n        trumpsare='0';<br \/>\n      } else {<br \/>\n        trumpsare=cbid.trim().slice(-1).toLowerCase();<br \/>\n      }<br \/>\n<br \/>\n        for (ixc=0; ixc&lt;hands.length; ixc++) {<br \/>\n          bdl=hands[ixc].split(' ');<br \/>\n          if (bdl[eval(-1 + eval('' + bdl.length))].indexOf('000') == 0) {<br \/>\n             \/\/hands[ixc]=hands[ixc].replace(bdl[eval(-1 + eval('' + bdl.length))],'') + blanks.substring(0,17);<br \/>\n            \/\/alert(hands[ixc].replace(' ',blanks.substring(0,20)).replace(\/\\ \/g,'x'));<br \/>\n            hands[ixc]=hands[ixc].replace(' ',blanks.substring(0,33));<br \/>\n\/\/ if (ixc == 0) { alert('hands[ixc]=' + hands[ixc] + ' trumpsare=' + trumpsare + ' 33'); }<br \/>\n            if (eval(eval(ixc % nominal_numplayers) + 1) == curplayer || 1 == 1) {<br \/>\n            for (kjn=0; kjn&lt;spcps.length; kjn++) {<br \/>\n             if (spcps[kjn].indexOf(bdl[eval(-1 + eval('' + bdl.length))]) != -1) {<br \/>\n               zsuffs[eval(-1 + eval(eval(ixc % nominal_numplayers) + 1))]+=' ' + eval(eval(ixc % nominal_numplayers) + 1) + '.' + Math.floor(eval(ixc + eval('' + nominal_numplayers)) \/ eval('' + nominal_numplayers)) + ':' + String.fromCodePoint(eval(spcps[kjn].split('\/')[0]));<br \/>\n               ysuffs[eval(-1 + eval(eval(ixc % nominal_numplayers) + 1))]+=' ' + eval(eval(ixc % nominal_numplayers) + 1) + '.' + Math.floor(eval(ixc + eval('' + nominal_numplayers)) \/ eval('' + nominal_numplayers)) + ':' + String.fromCodePoint(eval(spcps[kjn].split('\/')[0])) + ',' + bowerworry(spcps[kjn].slice(-7).split('.')[0]);<br \/>\n             }<br \/>\n            }<br \/>\n            }<br \/>\n          } else if (bdl[eval(-1 + eval('' + bdl.length))].indexOf('11' + trumpsare) == 0) {<br \/>\n            \/\/hands[ixc]=hands[ixc].replace(bdl[eval(-1 + eval('' + bdl.length))],'') + blanks.substring(0,17);<br \/>\n            hands[ixc]=hands[ixc].replace(' ',blanks.substring(0,31));<br \/>\n\/\/ if (ixc == 0) { alert('hands[ixc]=' + hands[ixc] + ' trumpsare=' + trumpsare + ' 31'); }<br \/>\n            if (eval(eval(ixc % nominal_numplayers) + 1) == curplayer || 1 == 1) {<br \/>\n            for (kjn=0; kjn&lt;spcps.length; kjn++) {<br \/>\n             if (spcps[kjn].indexOf(bdl[eval(-1 + eval('' + bdl.length))]) != -1) {<br \/>\n               zsuffs[eval(-1 + eval(eval(ixc % nominal_numplayers) + 1))]+=' ' + eval(eval(ixc % nominal_numplayers) + 1) + '.' + Math.floor(eval(ixc + eval('' + nominal_numplayers)) \/ eval('' + nominal_numplayers)) + ':' + String.fromCodePoint(eval(spcps[kjn].split('\/')[0]));<br \/>\n               ysuffs[eval(-1 + eval(eval(ixc % nominal_numplayers) + 1))]+=' ' + eval(eval(ixc % nominal_numplayers) + 1) + '.' + Math.floor(eval(ixc + eval('' + nominal_numplayers)) \/ eval('' + nominal_numplayers)) + ':' + String.fromCodePoint(eval(spcps[kjn].split('\/')[0])) + ',' + bowerworry(spcps[kjn].slice(-7).split('.')[0]);<br \/>\n             }<br \/>\n            }<br \/>\n            }<br \/>\n          } else if (bdl[eval(-1 + eval('' + bdl.length))].indexOf('11' + trumpsare.replace('c','S').replace('s','C').replace('d','H').replace('h','D').toLowerCase()) == 0) {<br \/>\n            \/\/hands[ixc]=hands[ixc].replace(bdl[eval(-1 + eval('' + bdl.length))],'') + blanks.substring(0,16);<br \/>\n            hands[ixc]=hands[ixc].replace(' ',blanks.substring(0,30));<br \/>\n\/\/ if (ixc == 0) { alert('hands[ixc]=' + hands[ixc] + ' trumpsare=' + trumpsare + ' 30'); }<br \/>\n            if (eval(eval(ixc % nominal_numplayers) + 1) == curplayer || 1 == 1) {<br \/>\n            for (kjn=0; kjn&lt;spcps.length; kjn++) {<br \/>\n             if (spcps[kjn].indexOf(bdl[eval(-1 + eval('' + bdl.length))]) != -1) {<br \/>\n               zsuffs[eval(-1 + eval(eval(ixc % nominal_numplayers) + 1))]+=' ' + eval(eval(ixc % nominal_numplayers) + 1) + '.' + Math.floor(eval(ixc + eval('' + nominal_numplayers)) \/ eval('' + nominal_numplayers)) + ':' + String.fromCodePoint(eval(spcps[kjn].split('\/')[0]));<br \/>\n               ysuffs[eval(-1 + eval(eval(ixc % nominal_numplayers) + 1))]+=' ' + eval(eval(ixc % nominal_numplayers) + 1) + '.' + Math.floor(eval(ixc + eval('' + nominal_numplayers)) \/ eval('' + nominal_numplayers)) + ':' + String.fromCodePoint(eval(spcps[kjn].split('\/')[0])) + ',' + bowerworry(spcps[kjn].slice(-7).split('.')[0]);<br \/>\n             }<br \/>\n            }<br \/>\n            }<br \/>\n          } else if (bdl[eval(-1 + eval('' + bdl.length))].slice(-1) == trumpsare) {<br \/>\n            \/\/hands[ixc]=hands[ixc].replace(bdl[eval(-1 + eval('' + bdl.length))],'') + blanks.substring(0,13);<br \/>\n            hands[ixc]=hands[ixc].replace(' ',blanks.substring(0,27));<br \/>\n\/\/ if (ixc == 0) { alert('hands[ixc]=' + hands[ixc] + ' trumpsare=' + trumpsare + ' 27'); }<br \/>\n            if (eval(eval(ixc % nominal_numplayers) + 1) == curplayer || 1 == 1) {<br \/>\n            for (kjn=0; kjn&lt;spcps.length; kjn++) {<br \/>\n             if (spcps[kjn].indexOf(bdl[eval(-1 + eval('' + bdl.length))]) != -1) {<br \/>\n               zsuffs[eval(-1 + eval(eval(ixc % nominal_numplayers) + 1))]+=' ' + eval(eval(ixc % nominal_numplayers) + 1) + '.' + Math.floor(eval(ixc + eval('' + nominal_numplayers)) \/ eval('' + nominal_numplayers)) + ':' + String.fromCodePoint(eval(spcps[kjn].split('\/')[0]));<br \/>\n               ysuffs[eval(-1 + eval(eval(ixc % nominal_numplayers) + 1))]+=' ' + eval(eval(ixc % nominal_numplayers) + 1) + '.' + Math.floor(eval(ixc + eval('' + nominal_numplayers)) \/ eval('' + nominal_numplayers)) + ':' + String.fromCodePoint(eval(spcps[kjn].split('\/')[0])) + ',' + bowerworry(spcps[kjn].slice(-7).split('.')[0]);<br \/>\n             }<br \/>\n            }<br \/>\n            }<br \/>\n          } else {<br \/>\n            \/\/hands[ixc]=hands[ixc].replace(bdl[eval(-1 + eval('' + bdl.length))],'');<br \/>\n            hands[ixc]=hands[ixc];<br \/>\n\/\/ if (ixc == 0) { alert('hands[ixc]=' + hands[ixc] + ' trumpsare=' + trumpsare + ' 0'); }<br \/>\n            if (eval(eval(ixc % nominal_numplayers) + 1) == curplayer || 1 == 1) {<br \/>\n            for (kjn=0; kjn&lt;spcps.length; kjn++) {<br \/>\n             if (spcps[kjn].indexOf(bdl[eval(-1 + eval('' + bdl.length))]) != -1) {<br \/>\n               zsuffs[eval(-1 + eval(eval(ixc % nominal_numplayers) + 1))]+=' ' + eval(eval(ixc % nominal_numplayers) + 1) + '.' + Math.floor(eval(ixc + eval('' + nominal_numplayers)) \/ eval('' + nominal_numplayers)) + ':' + String.fromCodePoint(eval(spcps[kjn].split('\/')[0]));<br \/>\n               ysuffs[eval(-1 + eval(eval(ixc % nominal_numplayers) + 1))]+=' ' + eval(eval(ixc % nominal_numplayers) + 1) + '.' + Math.floor(eval(ixc + eval('' + nominal_numplayers)) \/ eval('' + nominal_numplayers)) + ':' + String.fromCodePoint(eval(spcps[kjn].split('\/')[0])) + ',' + bowerworry(spcps[kjn].slice(-7).split('.')[0]);<br \/>\n             }<br \/>\n            }<br \/>\n            }<br \/>\n          }<br \/>\n        }<br \/>\n<br \/> <br \/>\n      if (eval('' + emailsms.length) &gt;= eval('' + curplayer)) {<br \/>\n      \/\/alert('7');<br \/>\n        if (('' + emailsms[eval('' + curplayer)]).trim() != '') {<br \/>\n      \/\/alert('8');<br \/>\n        remote=true;<br \/>\n        retcom(msuffs[eval(-1 + bidplayer)], rsuffs[eval(-1 + bidplayer)]);<br \/>\n        }<br \/>\n      }<br \/>\n      \/\/alert('9');<br \/>\n      if (1 == 1) {<br \/>\n        if (!remote) { myalertmc('Player ' + curplayer + ' cards are ... ' + zsuffs[eval(-1 + curplayer)]);     }<br \/>\n      }<br \/>\n    } else {<br \/>\n      bidplayer++;<br \/>\n      if (eval('' + bidplayer) &gt; eval('' + nominal_numplayer)) {  bidplayer=1; }<br \/>\n      curplayer=eval('' + bidplayer);<br \/>\n      if (eval('' + emailsms.length) &gt;= eval('' + curplayer)) {<br \/>\n      \/\/alert('7');<br \/>\n        if (('' + emailsms[eval('' + curplayer)]).trim() != '') {<br \/>\n      \/\/alert('8');<br \/>\n        remote=true;<br \/>\n        retcom(msuffs[eval(-1 + bidplayer)], rsuffs[eval(-1 + bidplayer)]);<br \/>\n        }<br \/>\n      }<br \/>\n      \/\/alert('9');<br \/>\n      if (1 == 1) {<br \/>\n        if (!remote) { myalertmc('Player ' + curplayer + ' cards are ... ' + zsuffs[eval(-1 + curplayer)]);     }<br \/>\n      }<br \/>\n    }<br \/>\n  } else {<br \/>\n    passcnt=0;<br \/>\n    var thisbidrank=-1;<br \/>\n    for (var ibidis=0; ibidis&lt;bids.length; ibidis++) {<br \/>\n      if (ma.substring(0,3).toLowerCase() == (bids[ibidis] + ' ').substring(0,3).toLowerCase()) {<br \/>\n      \/\/alert('found bid ' + bids[ibidis]);<br \/>\n        thisbidrank=ibidis;<br \/>\n        if (eval('' + thisbidrank) &gt; eval('' + cbidrank)) {<br \/>\n      \/\/alert('found relevant bid ' + bids[ibidis]);<br \/>\n          cbid=bids[ibidis];<br \/>\n      \/\/alert('1');<br \/>\n          cbidby=eval('' + bidplayer);<br \/>\n      \/\/alert('2');<br \/>\n          cbidrank=ibidis;<br \/>\n      \/\/alert('3');<br \/>\n          bidplayer++;<br \/>\n      \/\/alert('4');<br \/>\n          nominal_numplayer=4;<br \/>\n          if (eval('' + bidplayer) &gt; eval('' + nominal_numplayer)) {  bidplayer=1; }<br \/>\n      \/\/alert('5');<br \/>\n<br \/> <br \/>\n          curplayer=eval('' + bidplayer);<br \/>\n  \/\/alert('sent bid=' + cbid + ' and onto bidplayer=' + curplayer);<br \/>\n        }<br \/>\n<br \/> <br \/>\n        \/\/ send next<br \/>\n      \/\/alert('6');<br \/>\n        if (eval('' + emailsms.length) &gt;= eval('' + curplayer)) {<br \/>\n      \/\/alert('7');<br \/>\n        if (('' + emailsms[eval('' + curplayer)]).trim() != '') {<br \/>\n      \/\/alert('8');<br \/>\n        remote=true;<br \/>\n        retcom(msuffs[eval(-1 + bidplayer)], rsuffs[eval(-1 + bidplayer)]);<br \/>\n        }<br \/>\n        }<br \/>\n      \/\/alert('9');<br \/>\n        if (1 == 1) {<br \/>\n        if (!remote) { myalertmc('Player ' + curplayer + ' cards are ... ' + zsuffs[eval(-1 + curplayer)]);     }<br \/>\n        }<br \/>\n      }<br \/>\n    }<br \/>\n  }<br \/>\n  }<br \/>\n  }<br \/>\n<\/code><\/p>\n<p>And so, again, join us on our &#8220;500 card game&#8221; (getting towards) non-hybrid journey with <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html---------------------GETME\" title=\"cards_usefocus.html\">our changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html---------------------GETME\" title=\"cards_usefocus.html\">cards_usefocus.html<\/a> code behind the &#8220;Just Javascript&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?card_memories=y\" title=\"Click picture\">Memories Card Game<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html?onewindow=y\" title=\"Click picture\">live run with single window (good for mobile)<\/a> or <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cards_usefocus.html\" title=\"Click picture\">default live run<\/a> (for your platform, and if non-mobile it will try child popup windows).  Try adding &#8220;.0&#8221; to number of card players to play (our hybrid) &#8220;500&#8221; card game, and optionally wait or immediately append a comma separated email\/SMS address\/number list for your &#8220;500 card game&#8221; players (who can affect the game remotely via email)!<\/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\/just-javascript-five-hundred-card-game-bidding-tutorial\/'>Just Javascript Five Hundred Card Game Bidding Tutorial<\/a>.<\/p-->\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='#d52279' onclick='var dv=document.getElementById(\"d52279\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/document.URL\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d52279' 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='#d52304' onclick='var dv=document.getElementById(\"d52304\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/validate\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d52304' 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='#d52312' onclick='var dv=document.getElementById(\"d52312\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/cell\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d52312' 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='#d52318' onclick='var dv=document.getElementById(\"d52318\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/google-translate\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d52318' 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='#d52324' onclick='var dv=document.getElementById(\"d52324\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/say\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d52324' 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='#d52333' onclick='var dv=document.getElementById(\"d52333\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/comment\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d52333' 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='#d52337' onclick='var dv=document.getElementById(\"d52337\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/error\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d52337' 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='#d52341' onclick='var dv=document.getElementById(\"d52341\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/language\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d52341' 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='#d52344' onclick='var dv=document.getElementById(\"d52344\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/say\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d52344' 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='#d52347' onclick='var dv=document.getElementById(\"d52347\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/delimiter\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d52347' 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='#d52353' onclick='var dv=document.getElementById(\"d52353\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/token\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d52353' 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='#d52376' onclick='var dv=document.getElementById(\"d52376\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/iso\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d52376' 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='#d52381' onclick='var dv=document.getElementById(\"d52381\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/json\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d52381' 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='#d52385' onclick='var dv=document.getElementById(\"d52385\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/json_decode\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d52385' 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='#d52390' onclick='var dv=document.getElementById(\"d52390\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/data-uri\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d52390' 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='#d52394' onclick='var dv=document.getElementById(\"d52394\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/ux\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d52394' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Apropos yesterday&#8217;s Just Javascript Card Game SVG Background Data URL Tutorial dive into aesthetics and non-essentials, we venture into some &#8220;mid-ux&#8221; work today &#8230; Mid-UX? What&#8217;s that? To our mind it&#8217;s that Clayton UX (user experience) improvement push you do &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/just-javascript-card-game-mid-ux-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":[2,12,14,15,37],"tags":[2516,3633,1835,103,113,126,127,2471,2472,2379,3620,3621,155,157,3340,174,3613,187,1580,211,2022,1604,224,3374,3533,234,1985,2983,257,3610,265,2539,281,282,2127,1654,299,304,3617,3616,2380,2522,2147,318,3609,3614,2170,359,2237,364,3622,380,3313,385,3539,1929,400,405,3615,431,448,451,452,2730,476,477,1664,3081,513,532,2212,3632,576,2658,620,2395,3637,3639,3636,3635,652,3619,664,3638,666,675,3623,678,1560,3173,710,2415,3373,2178,738,739,744,748,3608,766,1573,2505,3626,3627,830,1968,2076,907,932,952,967,2941,997,1915,1521,1761,1022,1049,3625,3634,1075,2350,2319,3624,3612,3611,1866,1953,3169,1126,1133,1137,1159,1173,1186,2700,1209,1212,2086,2334,3630,1226,1238,3312,3628,3350,1258,3629,1283,3304,1294,1301,3618,1319,1350,1356,1357,1721,1404,2099,1418,3010],"class_list":["post-52394","post","type-post","status-publish","format-standard","hentry","category-ajax","category-elearning","category-event-driven-programming","category-games","category-tutorials","tag-alert","tag-arabic","tag-arguments","tag-array","tag-audio","tag-background","tag-background-image","tag-background-position","tag-background-repeat","tag-background-size","tag-bid","tag-bidding","tag-body","tag-bookmarklet","tag-bridge","tag-button","tag-card-game","tag-cards","tag-cell","tag-click","tag-codepoint","tag-collaboration","tag-colour","tag-colour-coding","tag-comma","tag-command-line","tag-comment","tag-console-log","tag-content","tag-content-management","tag-copy","tag-createelement","tag-css","tag-css3","tag-cursor","tag-data-uri","tag-database-2","tag-ddl","tag-deal","tag-defence","tag-delay","tag-delimit","tag-delimiter","tag-design","tag-document-createelement","tag-document-queryselectorall","tag-document-url","tag-double-click","tag-drag","tag-drag-and-drop","tag-dropdwon","tag-email","tag-emailee","tag-emoji","tag-entity","tag-error","tag-event","tag-exec","tag-fallback","tag-filter","tag-focus","tag-font","tag-form","tag-formdata","tag-game","tag-games-2","tag-global","tag-global-variable","tag-google","tag-google-translate","tag-head","tag-hebrew","tag-html","tag-html-entity","tag-internationalization","tag-iso","tag-iso-639","tag-iso-639-1","tag-iso-639-2","tag-iso-639-3","tag-javascript","tag-joker","tag-json","tag-json-parse","tag-json_decode","tag-keyframes","tag-kitty","tag-label","tag-language","tag-language-code","tag-list","tag-localstorage","tag-logic","tag-macos","tag-mail","tag-mailto","tag-mamp","tag-mapping","tag-mclick","tag-memories","tag-mymemory","tag-name","tag-names","tag-naming","tag-navigation","tag-onions","tag-order","tag-paste","tag-php","tag-player","tag-popup","tag-preventdefault","tag-programming","tag-progress","tag-progress-bar","tag-prompt","tag-quiz","tag-render","tag-rendering","tag-right-to-left","tag-row","tag-say","tag-score","tag-scoring","tag-screenleft","tag-screentop","tag-select","tag-selector","tag-sessionstorage","tag-settimeout","tag-share","tag-sharing","tag-sms","tag-sort","tag-sql","tag-string-fromcodepoint","tag-style","tag-styling","tag-subject","tag-submit","tag-suit","tag-svg","tag-table","tag-tabular","tag-tbody","tag-text-to-audio","tag-text-to-speech","tag-thead","tag-timing","tag-token","tag-touch","tag-translation","tag-trick","tag-tutorial","tag-user-experience","tag-ux","tag-validate","tag-variable","tag-web-browser","tag-web-inspector","tag-webpage","tag-window-opener"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/52394"}],"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=52394"}],"version-history":[{"count":3,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/52394\/revisions"}],"predecessor-version":[{"id":52444,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/52394\/revisions\/52444"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=52394"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=52394"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=52394"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}