gridtracker/package.nw/GridTracker.html

3642 wiersze
134 KiB
HTML

<!DOCTYPE html>
<!--
GridTracker Copyright © 2018-2022 GridTracker.org
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
<html lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>GridTracker</title>
<link rel="stylesheet" href="./lib/dp-dark.css" />
<link rel="stylesheet" href="./lib/ol.css" />
<link rel="stylesheet" href="./lib/style.css" />
<script src="./lib/defaults.js" type="text/javascript"></script>
<script src="./lib/protos.js" type="text/javascript"></script>
<script src="./lib/alerts.js" type="text/javascript"></script>
<script src="./lib/third-party.js" type="text/javascript"></script>
<script src="./lib/adif.js" type="text/javascript"></script>
<script src="./lib/ol.js" type="text/javascript"></script>
<script src="./lib/arc.js" type="text/javascript"></script>
<script src="./lib/moment-with-locales.js" type="text/javascript"></script>
<script src="./lib/moment-timezone-with-data.js" type="text/javascript"></script>
<script src="./lib/datepicker.js"></script>
<script src="./lib/callsigns.js" type="text/javascript"></script>
<script src="./lib/shadow.js" type="text/javascript"></script>
<script src="./lib/gtws.js" type="text/javascript"></script>
<script src="./lib/gt.js" type="text/javascript"></script>
<script src="./lib/screens.js"></script>
</head>
<body id="mainBody" onload="initialDatabases();">
<div id="startupDiv">
<div class="fill">
<img src="gridview.png" alt="" />
</div>
<div>
<h1><div id="startupVersionDiv">GridTracker</div></h1>
</div>
<div>
<h3><i>An Amateur Radio Companion</i></h3>
</div>
<div id="startupStatusDiv">Initial Startup</div>
</div>
<div id="documentsDiv" style="display: none">
<div>
<div>
Your documents folder (
<div id="searchedDocFolder"></div>
) could not be located.
</div>
<br />
<div>GridTracker can not continue without it.</div>
<br />
<div>Please select a directory so that GridTracker can store important files.</div>
<br />
<input id="documentDirectoryInput" type="file" nwdirectory onchange="directoryInput(this)" />
</div>
</div>
<div id="main" style="display: none">
<div id="mapDiv" class="mapDivEnd"></div>
<div id="mouseTrackDiv" style="display: none" class="mouseTrack"></div>
<div id="LegendDiv" style="display: none" class="legendDivEnd">
<table align="center">
<tr>
<td>Legend</td>
<td>
<div
id="LegendDivQSO"
title="Grids with worked station(s) by you"
style="
padding-top: 2px;
border: 2px solid #000000;
width: 42px;
height: 16px;
background-color: #eeee00;
color: #000;
"
>
QSO
</div>
</td>
<td>
<div
id="LegendDivQSL"
title="Grids with confirmed station(s) by you"
style="
padding-top: 2px;
border: 2px solid #000000;
width: 42px;
height: 16px;
background-color: #dd0000;
color: #000;
"
>
QSL
</div>
</td>
</tr>
<tr>
<td>
<div
id="LegendDivQSX"
title="Grids with station(s) communicating with stations other than you"
style="
padding-top: 2px;
border: 2px solid #000000;
width: 42px;
height: 16px;
background-color: #000088;
color:#eee;
"
>
QSX
</div>
</td>
<td>
<div
id="LegendDivCQ"
title="Grids with station(s) calling CQ"
style="
padding-top: 2px;
border: 2px solid #000000;
width: 42px;
height: 16px;
background-color: #00ff00;
color: #000;
"
>
CQ
</div>
</td>
<td>
<div
id="LegendDivCQDX"
title="Grids with station(s) calling CQ distance"
style="
padding-top: 2px;
border: 2px solid #000000;
width: 42px;
height: 16px;
background-color: #00FFFF;
color: #000;
"
>
CQDX
</div>
</td>
</tr>
<tr>
<td>
<div
id="LegendDivQRZ"
title="Grids with station(s) calling you!"
style="
padding-top: 2px;
border: 2px solid #ff0000;
width: 42px;
height: 16px;
background-color: #eeee00;
color: #000;
"
>
QRZ
</div>
</td>
<td>
<div
id="LegendDivQTH"
title="Your home grid square!"
style="
padding-top: 2px;
border: 2px solid #000000;
width: 42px;
height: 16px;
background-color: orange;
color: #000;
"
>
QTH
</div>
</td>
<td>
<div
id="LegendDivWSPR"
title="WSPR Stations"
style="
padding-top: 2px;
border: 2px solid black;
width: 42px;
height: 16px;
font-weight: bold;
text-shadow: 0 0 3px #000;
"
>
<div class="rainbow" style="text-shadow: 0 0 3px #000">WSPR</div>
</div>
</td>
</tr>
</table>
</div>
<div id="chevronDiv" class="chevronDivStart" title="Click to show menu" onclick="collapseMenu(false)"></div>
<div id="menuDiv" class="menuDivEnd">
<div
id="localInfoDiv"
style="border: 1px solid white; margin: 1px; margin-top: 1px; margin-bottom: 1px; padding: 0px"
class="roundBorder"
>
<table align="center">
<tr>
<td colspan="2">
<div
class="button"
title="Click to hide menu"
style="
color: #fff;
margin: 0;
padding: 0;
font-weight: bold;
width: 150px;
padding-top: 2px;
border-width: 2px;
"
onclick="collapseMenu(true);"
>
GridTracker
</div>
</td>
</tr>
<tr>
<td>
<div id="frequency" title="Frequency (Band)" style="font-weight: bold">0.000.000 Hz (?)</div>
</td>
<td>
<div id="wsjtxMode" title="Mode"></div>
</td>
</tr>
</table>
<div id="currentTime" style="cursor: pointer" title="Toggle Local / UTC Time" onclick="toggleTime();"></div>
<table align="center" style="border-collapse: collapse; margin-bottom: 2px">
<tr id="dxCallBoxDiv" class="DXCallBox">
<td>
<div
id="localDXcall"
style="cursor: pointer"
title="Who you're calling or last called"
onclick="startLookup(g_localDXcall,localDXGrid.innerHTML);"
oncontextmenu="showWorkedByCall(g_localDXcall, event);"
>
-
</div>
</td>
<td>
<div
id="localDXGrid"
style="cursor: pointer"
title="Their Gridsquare"
onclick="centerOn(localDXGrid.innerHTML);"
>
-
</div>
</td>
<td>
<div id="localDXReport" title="Last known SNR">&nbsp;</div>
</td>
</tr>
<tr>
<td>
<div
id="localDXCountry"
style="font-size: smaller; font-weight: italic; color: lightgreen"
title="DXCC"
>
&nbsp;
</div>
</td>
<td>
<div
id="localDXDistance"
style="font-size: smaller; font-weight: italic; color: lightblue"
title="Distance"
>
&nbsp;
</div>
</td>
<td>
<div
id="localDXAzimuth"
style="font-size: smaller; font-weight: italic; color: lightgreen"
title="Heading"
>
&nbsp;
</div>
</td>
</tr>
</table>
</div>
<div
id="rigWrap"
style="
display: none;
background-color: blue;
border-style: inset;
border-color: lightblue;
border-width: 3px;
margin: 0;
margin-bottom: 1px;
color: yellow;
padding: 2px;
"
class="roundBorder"
>
<div style="display: inline-block; padding-top: 0px; cursor: pointer; left: 0px" onClick="rigChange(false);">
🡄&nbsp;
</div>
<div style="display: inline-block" id="rigDiv">-no rig-</div>
<div style="display: inline-block; cursor: pointer; right: 0px" onClick="rigChange(true);">&nbsp;🡆</div>
</div>
<div
id="operatingMode"
style="margin: 0; margin-bottom: 1px; cursor: pointer"
onclick="ignoreMessagesToggle()"
title="Click to ignore incoming messages"
>
<div
id="txrxdec"
style="background-color: Green; border-style: outset; border-color: yellow; border-width: 3px"
class="roundBorder"
>
waiting for message
</div>
</div>
<div
id="pskReporterBandActivityDiv"
class="roundBorder"
style="
position: relative;
background-color: #000;
border: 1px solid purple;
margin: 1px;
height: 49px;
margin-bottom: 1px;
padding: 0px;
"
title="PSK-Reporter Band Activity"
oncontextmenu="toggleBaWindow(event)"
>
<div id="graphDiv" style="bottom: 0; position: absolute; width: 100%; padding: 0px; margin-bottom: 2px">
<br />...no data yet...<br />
&nbsp;
</div>
</div>
<div
id="actionDiv"
style="border: 1px solid blue; margin: 1px; margin-bottom: 1px; padding: 3px"
class="roundBorder"
title="Quick Stats"
>
<table align="center">
<tr>
<td
style="cursor: pointer"
onclick="openInfoTab('calbox', 'callsignBoxDiv', showCallsignBox)"
title="Callsigns Heard"
align="right"
>
Rx Calls
</td>
<td
style="cursor: pointer"
onclick="openInfoTab('calbox', 'callsignBoxDiv', showCallsignBox)"
title="Callsigns Heard"
class="roundBorderValue"
align="center"
>
<div id="callsignCount">0</div>
</td>
<td
style="cursor: pointer"
onclick="resetSearch(); openInfoTab('qsobox', 'workedBoxDiv', showWorkedBox);"
title="Worked Stations"
align="right"
>
QSO
</td>
<td
style="cursor: pointer"
class="roundBorderValue"
onclick="resetSearch(); openInfoTab('qsobox', 'workedBoxDiv', showWorkedBox);"
title="Confirmed Stations"
align="center"
>
<div id="qsoCount">0</div>
</td>
</tr>
<tr>
<td
style="cursor: pointer"
onclick="openInfoTab('calbox', 'callsignBoxDiv', showCallsignBox);"
title="DXCC Heard"
align="right"
>
Rx DXCC
</td>
<td
style="cursor: pointer"
class="roundBorderValue"
onclick="openInfoTab('calbox', 'callsignBoxDiv', showCallsignBox);"
title="DXCC Heard"
align="center"
>
<div id="countryCount">0</div>
</td>
<td
style="cursor: pointer"
onclick="resetSearch(); g_filterQSL = 'true'; openInfoTab('qsobox', 'workedBoxDiv', showWorkedBox)"
title="Show Confirmed List"
align="right"
>
QSL
</td>
<td
style="cursor: pointer"
class="roundBorderValue"
onclick="resetSearch(); g_filterQSL = 'true'; openInfoTab('qsobox', 'workedBoxDiv', showWorkedBox)"
title="Show Confirmed List"
align="center"
>
<div id="qslCount">0</div>
</td>
</tr>
<tr>
<td colspan="2">
<div class="button" onclick="clearLive();" title="Clear Live Data from GridTracker">Clear Live</div>
</td>
<td colspan="2">
<div
style="min-width: 58px"
id="clearOrLoadButton"
class="button"
onclick="clearOrLoadQSOs();updateCountStats();"
title="Clear or Reload Log Data&#10;(does not delete files)"
>
Clear Log
</div>
</td>
</tr>
</table>
</div>
<div
id="filterDiv"
class="roundBorder"
style="position: relative; background-color: #000; border: 1px solid cyan; margin: 1px; margin-bottom: 1px"
title="Map View Control Panel"
>
<table align="center">
<tr>
<td colspan="2">Map View Filters</td>
</tr>
<tr title="Select Band&#10;(Auto tracks WSJT-X)">
<td><font color="lightgreen">Band</font></td>
<td>
<select id="gtBandFilter" onkeypress="return false;" onchange="gtBandFilterChanged(this);">
<option value="auto">Auto</option>
<option value="xx" disabled>--------</option>
<option value="">Mixed</option>
<option value="4000m">4000m</option>
<option value="2200m">2200m</option>
<option value="630m">630m</option>
<option value="160m">160m</option>
<option value="80m">80m</option>
<option value="60m">60m</option>
<option value="40m">40m</option>
<option value="30m">30m</option>
<option value="20m">20m</option>
<option value="17m">17m</option>
<option value="15m">15m</option>
<option value="12m">12m</option>
<option value="11m">11m</option>
<option value="10m">10m</option>
<option value="6m">6m</option>
<option value="4m">4m</option>
<option value="2m">2m</option>
<option value="1.25m">1.25m</option>
<option value="70cm">70cm</option>
<option value="23cm">23cm</option>
<option value="oob">OOB</option>
</select>
</td>
</tr>
<tr title="Select Mode">
<td><font color="orange">Mode</font></td>
<td>
<select id="gtModeFilter" onkeypress="return false;" onchange="gtModeFilterChanged(this);">
<option value="auto">Auto</option>
<option value="xx" disabled>----------</option>
<option value="">Mixed</option>
<option value="Digital">Digital</option>
<option value="Phone">Phone</option>
</select>
</td>
</tr>
<tr title="Select Propagation Mode">
<td><font color="yellow">Prop</font></td>
<td>
<select id="gtPropFilter" onkeypress="return false;" onchange="gtPropFilterChanged(this);">
<option value="mixed">Mixed</option>
<option value="xx" disabled>----------</option>
<option value="">Unknown</option>
<option value="xx" disabled>----------</option>
<option value="AS">Aircraft Scatter</option>
<option value="AUE">Aurora-E</option>
<option value="AUR">Aurora</option>
<option value="BS">Back Scatter</option>
<option value="ECH">EchoLink</option>
<option value="EME">EME</option>
<option value="ES">Sporadic E</option>
<option value="F2">F2 Reflection</option>
<option value="FAI">Field Aligned I</option>
<option value="INTERNET">Inet-assist</option>
<option value="ION">Ionoscatter</option>
<option value="IRL">IRLP</option>
<option value="MS">Meteor Scatter</option>
<option value="RPT">Repeater</option>
<option value="RS">Rain Scatter</option>
<option value="SAT">Satellite</option>
<option value="TEP">Trans-equatorial</option>
<option value="TR">Tropo-ducting</option>
</select>
</td>
</tr>
<tr>
<td><font color="cyan">Data</font></td>
<td>
<div
id="gridViewButton"
onclick="cycleGridView()"
class="button"
title="Cycle Grid View"
style="
min-width: 94px;
background-color: darkgreen;
color: #ff0;
font-size: 13.3333px;
text-align: left;
margin-bottom: 2px;
"
>
Logbook &amp; Live
</div>
</td>
</tr>
</table>
</div>
<div id="buttonsDiv" style="margin-left: 0px; white-space: normal">
<div
id="callRosterButton"
class="iconButton"
style="padding: 0px"
onclick="openCallRosterWindow();"
title="Open Call Roster"
>
<img src="./img/roster-button.png" class="buttonImgWide" />
</div>
<div id="pushPinButton" onclick="togglePushPinMode();" class="iconButton" title="Toggle Push-Pin Mode">
<img id="pinImg" src="" class="buttonImg" />
</div>
<div id="lookupButton" onclick="openLookupWindow(true)" class="iconButton" title="Open Lookup Window">
<img src="./img/lookup.png" class="buttonImg" />
</div>
<div id="statsDiv" onclick="showRootInfoBox();" class="iconButton" title="Show Stats">
<img src="./img/stats-button.png" class="buttonImg" />
</div>
<div id="modeModeDiv" onclick="toggleOffline()" class="iconButton" title="Toggle Online/Offline Mode">
<img id="offlineImg" src="" class="buttonImg" />
</div>
<div id="earthShadow" onclick="toggleEarth()" class="iconButton" title="Toggle Grayline">
<img id="earthImg" src="" class="buttonImg" />
</div>
<div id="legendToggleDiv" onclick="toggleLegend()" class="iconButton" title="Toggle Map Legend">
<img id="legendImg" src="./img/gt_key.png" class="buttonImg" />
</div>
<div
id="gtShareButton"
onclick="toggleGtShareEnable();"
class="iconButton"
title="Share your On-Air Status with other GridTracker users"
>
<img id="gtShareFlagImg" src="./img/share-off.png" class="buttonImg" />
</div>
<div id="helpButton" onclick="toggleHelp();" class="iconButton" title="Toggle Hotkey List">
<img src="./img/help.png" class="buttonImg" />
</div>
<div id="trophyButton" onclick="cycleTrophyOverlay();" class="iconButton" title="Cycle Award Overlays">
<img id="trophyImg" src="./img/blank_trophy.png" class="buttonImg" />
</div>
<div id="buttonStrikesDiv" onclick="toggleStrikesValue()" class="iconButton" title="Toggle Lightning Strikes">
<img id="strikesImg" src="./img/lw.png" class="buttonImg" />
</div>
<div id="lunaButton" onclick="toggleMoon();" class="iconButton" title="Toggle Moon">
<img id="lunaButonImg" src="./img/luna.png" class="buttonImg" />
</div>
<div id="gridModeDiv" onclick="toggleGridMode()" class="iconButton" title="Toggle Maidenhead Width">
<img id="modeImg" src="" class="buttonImg" />
</div>
<div id="settingsButton" onclick="showSettingsBox();" class="iconButton" title="Settings">
<img src="./img/settings-button.png" class="buttonImg" />
</div>
<div id="adifLoadDiv" onclick="adifLoadDialog()" class="iconButton" title="Load ADIF Log">
<img src="./img/adif.png" class="buttonImg" />
</div>
<div id="conditionsButton" onclick="showConditionsBox();" class="iconButton" title="View Current Conditions">
<img src="./img/conditions.png" class="buttonImg" />
</div>
<div id="donateButton" onclick="gotoDonate();" class="iconButton" title="Donate with PayPal">
<img
style="-webkit-filter: brightness(50%); filter: brightness(50%)"
src="./img/donate.png"
class="buttonImg"
/>
</div>
<div id="alterMuteDiv" onclick="toggleAlertMute()" class="iconButton" title="Toggle Audio Mute">
<img id="alertMuteImg" src="" class="buttonImg" />
</div>
<div id="buttonPSKSpotsBoxDiv" onClick="togglePskSpots();" class="iconButton" title="View Spot Reports">
<img id="pskSpotsImg" src="./img/spots.png" class="buttonImg" />
</div>
<div id="buttonPsk24CheckBoxDiv" onclick="grabPsk24()" class="iconButton" title="Your PSK 24hour report">
<img id="pskImg" src="./img/psk_24_32.png" class="buttonImg" />
</div>
<div
id="buttonQRZCheckBoxDiv"
onclick="if ( ValidateQrzApi(qrzApiKey ) ) grabQrzComLog()"
class="iconButton"
title="Download log from QRZ.com"
>
<img id="qrzLogImg" src="./img/log_QRZ.png" class="buttonImg" />
</div>
<div
id="buttonLOTWCheckBoxDiv"
onclick="if ( ValidateText(lotwLogin) && ValidateText(lotwPassword) ) { grabLOtWLog(false); } "
class="iconButton"
title="Download log from Logbook of the World"
>
<img id="lotwLogImg" src="./img/log_LoTW.png" class="buttonImg" />
</div>
<div
id="buttonClubCheckBoxDiv"
onclick="if ( ValidateText(clubEmail) && ValidateText(clubPassword) ) grabClubLog()"
class="iconButton"
title="Download log from ClubLog"
>
<img id="ClubLogImg" src="./img/log_club.png" class="buttonImg" />
</div>
<div
id="buttonAdifCheckBoxDiv"
onclick="startupAdifLoadFunction()"
class="iconButton"
title="Reload Local ADIF Files"
>
<img src="./img/log_local.png" class="buttonImg" />
</div>
<div id="timezoneButton" onclick="toggleTimezones()" class="iconButton" title="Toggle Timezone Layer">
<img src="./img/timezone-button.png" class="buttonImg" />
</div>
<div id="radarButton" onclick="toggleNexrad()" class="iconButton" title="Toggle US Nexrad">
<img src="./img/radar-button.png" class="buttonImg" />
</div>
<div id="gridOverlayButton" onclick="toggleAllGrids()" class="iconButton" title="Toggle All Grid Overlay">
<img src="./img/grid-overlay.png" class="buttonImg" />
</div>
<div id="gtFlagButton" onclick="toggleGtMap();" class="iconButton" title="Toggle View GridTracker Users">
<img id="gtFlagImg" src="" class="buttonImg" />
</div>
<div id="msgButton" onclick="showMessaging();" class="iconButton" title="Messaging Window">
<img id="msgImg" src="./img/gt_chat.png" class="buttonImg" />
</div>
</div>
<div
id="SpotsDiv"
style="display: none; border: 1px solid yellow; margin: 1px; margin-bottom: 1px; margin-top: 2px"
class="roundBorder"
>
<table align="center">
<tr>
<td id="spotCountDiv">Spots: 0</td>
<td id="spotRefreshDiv">Refresh: -</td>
</tr>
<tr>
<td colspan="2" align="center" id="spotHistoryTimeTd"></td>
</tr>
<tr>
<td colspan="2">
<input
type="range"
min="5"
max="1440"
value="15"
step="5"
class="slider"
id="spotHistoryTimeValue"
oninput="changeSpotValues();"
onkeyup="redrawSpots();"
onmouseup="redrawSpots();"
/>
</td>
</tr>
</table>
</div>
<div
id="trafficDiv"
class="roundBorder"
style="
position: relative;
background-color: #000;
color: #888;
border: 1px solid black;
margin: 2px;
bottom: 2px;
right: 2px;
white-space: no-wrap;
overflow: hidden;
"
></div>
</div>
<div id="myFlagtip" class="myFlagtipEnd"></div>
<div
id="myTooltip"
style="
-webkit-user-select: text;
user-select: text;
background-color: black;
padding: 5px;
text-align: center;
display: block;
position: absolute;
z-index: -500;
left: -1000px;
top: -1000px;
border: 2px solid white;
white-space: nowrap;
overflow: hidden;
"
class="roundBorder"
></div>
<div
id="myGridTooltip"
style="
background-color: black;
padding: 5px;
text-align: center;
display: block;
position: absolute;
z-index: -499;
left: 50px;
top: 50px;
border: 2px solid white;
white-space: nowrap;
overflow: hidden;
"
class="roundBorder"
></div>
<div
id="myTrophyTooltip"
style="
background-color: black;
padding: 5px;
text-align: center;
display: block;
position: absolute;
z-index: -499;
left: 50px;
top: 50px;
border: 2px solid white;
white-space: nowrap;
overflow: hidden;
"
class="roundBorder"
></div>
<div
id="myMoonTooltip"
style="
background-color: black;
padding: 5px;
text-align: center;
display: block;
position: absolute;
z-index: -499;
left: 50px;
top: 50px;
border: 2px solid white;
white-space: nowrap;
overflow: hidden;
"
class="roundBorder"
></div>
<div
id="helpDiv"
style="
animation: fadeInEffect 0.1s;
margin: 2px;
left: 30px;
top: 20px;
display: none;
background-color: black;
padding: 5px;
text-align: center;
vertical-align: middle;
position: absolute;
z-index: 600;
border: 1px cyan;
"
class="roundBorder"
>
<div id="printHotKeyDiv" style="border: 1px solid cyan; color: white; text-align: auto">
<table align="center" class="darkTable">
<tr>
<th colspan="6">Hot Key List (v1.20.0825+)</th>
</tr>
<tr>
<th>Key</th>
<th align="left">Action</th>
<th>Condition</th>
<th>Key</th>
<th align="left">Action</th>
<th>Condition</th>
</tr>
<tr>
<td>1</td>
<td align="left">Show General Map Layer</td>
<td></td>
<td>Q</td>
<td align="left">Cycle Logbook/Live View</td>
<td></td>
</tr>
<tr>
<td>2</td>
<td align="left">Show CQ Zones Award Layer</td>
<td></td>
<td>R</td>
<td align="left">Open Call Roster Window</td>
<td></td>
</tr>
<tr>
<td>3</td>
<td align="left">Show ITU Zones Award Layer</td>
<td></td>
<td>S</td>
<td align="left">Open Settings</td>
<td></td>
</tr>
<tr>
<td>4</td>
<td align="left">Show Continents Award Layer</td>
<td></td>
<td>T</td>
<td align="left">Toggle RX Spots over Grids</td>
<td></td>
</tr>
<tr>
<td>5</td>
<td align="left">Show US States Award Layer</td>
<td></td>
<td>T</td>
<td align="left">Add TTS Alert</td>
<td>right-click<br />empty grid</td>
</tr>
<tr>
<td>6</td>
<td align="left">Show DXCC Award Layer</td>
<td></td>
<td>U</td>
<td align="left">Toggle Award Layer Merge</td>
<td></td>
</tr>
<tr>
<td>7</td>
<td align="left">Show US Counties Award Layer</td>
<td></td>
<td>V</td>
<td align="left">Add PopUp Alert</td>
<td>right-click<br />empty grid</td>
</tr>
<tr>
<td>8</td>
<td align="left">Show US Continental Grids Award Layer</td>
<td></td>
<td>W</td>
<td align="left">Toggle Maidenhead Grid Size</td>
<td></td>
</tr>
<tr>
<td>9</td>
<td align="left">Toggle Timezone Overlay</td>
<td></td>
<td>X</td>
<td align="left">Toggle Map Position Info</td>
<td></td>
</tr>
<tr>
<td>0</td>
<td align="left">Toggle US Nexrad Overlay</td>
<td></td>
<td>Y</td>
<td align="left">Toggle Global Lightning</td>
<td></td>
</tr>
<tr>
<td>=</td>
<td align="left">Cycle Award Layers</td>
<td></td>
<td>Z</td>
<td align="left">Center Map on QTH Grid</td>
<td></td>
</tr>
<tr>
<td>A</td>
<td align="left">Toggle Active Path Animation</td>
<td></td>
<td>F1</td>
<td align="left">Hot Key List (This List)</td>
<td></td>
</tr>
<tr>
<td>B</td>
<td align="left">Toggle All Grid Overlay</td>
<td></td>
<td>F5</td>
<td align="left">Recall Map Position 1</td>
<td></td>
</tr>
<tr>
<td>C</td>
<td align="left">Open Conditions Windows</td>
<td></td>
<td>F5</td>
<td align="left">Store Map Position 1</td>
<td>Shift-Key</td>
</tr>
<tr>
<td>D</td>
<td align="left">Toggle Moon Tracking</td>
<td></td>
<td>F6</td>
<td align="left">Recall Map Position 2</td>
<td></td>
</tr>
<tr>
<td>E</td>
<td align="left">Toggle 24h Moon Trajectory</td>
<td></td>
<td>F6</td>
<td align="left">Store Map Position 2</td>
<td>Shift-Key</td>
</tr>
<tr>
<td>F</td>
<td align="left">Toggle RX Spots Flight</td>
<td></td>
<td>F7</td>
<td align="left">Recall Map Position 3</td>
<td></td>
</tr>
<tr>
<td>G</td>
<td align="left">Toggle GridTracker Flags</td>
<td></td>
<td>F7</td>
<td align="left">Store Map Position 3</td>
<td>Shift-Key</td>
</tr>
<tr>
<td>H</td>
<td align="left">Toggle RX Spots Heatmap</td>
<td></td>
<td>F8</td>
<td align="left">Recall Map Position 4</td>
<td></td>
</tr>
<tr>
<td>I</td>
<td align="left">Open Stats/Info</td>
<td></td>
<td>F8</td>
<td align="left">Store Map Position 4</td>
<td>Shift-Key</td>
</tr>
<tr>
<td>K</td>
<td align="left">Capture Screenshot</td>
<td></td>
<td>F9</td>
<td align="left">Recall Map Position 5</td>
<td></td>
</tr>
<tr>
<td>L</td>
<td align="left">Open ADIF file</td>
<td></td>
<td>F9</td>
<td align="left">Store Map Position 5</td>
<td>Shift-Key</td>
</tr>
<tr>
<td>M</td>
<td align="left">Toggle Audio Mute</td>
<td></td>
<td>F10</td>
<td align="left">Recall Map Position 6</td>
<td></td>
</tr>
<tr>
<td>M</td>
<td align="left">Add MapCenter Alert</td>
<td>right-click<br />empty grid</td>
<td>F10</td>
<td align="left">Store Map Position 6</td>
<td>Shift-Key</td>
</tr>
<tr>
<td>N</td>
<td align="left">Toggle Grayline</td>
<td></td>
<td>F11</td>
<td align="left">Toggle Fullscreen</td>
<td></td>
</tr>
<tr>
<td>O</td>
<td align="left">Toggle RX Spots</td>
<td></td>
<td>F12</td>
<td align="left">Toggle Sidebar Menu</td>
<td></td>
</tr>
<tr>
<td>P</td>
<td align="left">Toggle Grid/PushPin Mode</td>
<td></td>
</tr>
</table>
</div>
<div>
<br />
<div
class="button"
onclick="require('nw.gui').Shell.openExternal('http://app.gridtracker.org/gt_print.html');"
>
Print
</div>
</div>
<div style="top: 6px; right: 6px; position: absolute">
<button class="Xbutton" onclick="g_helpShow=false;helpDiv.style.display='none';">X</button>
</div>
</div>
<div
id="rootSettingsDiv"
style="
margin: 0;
top: 1px;
display: none;
background-color: #00000000;
padding: 0px;
text-align: center;
vertical-align: middle;
position: relative;
z-index: 600;
"
class="roundBorder"
>
<div class="settingstab">
<button id="generalbut" class="settingsTablinks active" onclick="openSettingsTab(event, 'udpSettingsDiv')">General</button>
<button id="lookupbut" class="settingsTablinks" onclick="openSettingsTab(event, 'lookupsSettingsDiv')">Lookups</button>
<button class="settingsTablinks" onclick="openSettingsTab(event, 'SpeechSettingsDiv')">Audio</button>
<button class="settingsTablinks" onclick="openSettingsTab(event, 'mapSettingsDiv')">Map</button>
<button class="settingsTablinks" onclick="openSettingsTab(event, 'gridSettingsDiv')">Grids</button>
<button class="settingsTablinks" onclick="openSettingsTab(event, 'logSettingsDiv')">Logging</button>
<button class="settingsTablinks" onclick="openSettingsTab(event, 'alertsDiv')">Alerts</button>
<button class="settingsTablinks" onclick="openSettingsTab(event, 'callRosterDiv')">Call Roster</button>
<button class="settingsTablinks" onclick="openSettingsTab(event, 'chatSettingsDiv')">OAMS</button>
<button id="logbut" class="settingsTablinks" onclick="openSettingsTab(event, 'logbookSettingsDiv')">Logbook</button>
<button id="updatebut" class="settingsTablinks" onclick="openSettingsTab(event, 'updateSettingsDiv')">Update</button>
<button class="settingsTablinks" style="margin-right: 25px" onclick="openSettingsTab(event, 'aboutDiv')">About</button>
</div>
<div id="udpSettingsDiv" class="settingsTabcontent" style="display: block">
<table align="center">
<tr>
<td colspan="3">
<div class="mapItem">
<table align="center">
<tr>
<td>Application Status</td>
</tr>
<tr>
<td id="runningAppsDiv" class="roundBorderValue">Neither WSJT-X or JTDX are running.</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
<table align="center">
<tr>
<td>
<div class="mapItem">
<table align="center">
<tr>
<td><b>Receive UDP Messages</b></td>
</tr>
<tr>
<td id="lastMsgTimeDiv">No messages yet.</td>
</tr>
<tr>
<td id="secondsAgoMsg" class="roundBorderValue">Never</td>
</tr>
<tr>
<td>
Multicast?
<input
title="Enable / Disable Local Network Multicast"
type="checkbox"
id="multicastEnable"
onclick="setMulticastEnable(this);"
/>
</td>
</tr>
<tr>
<td id="multicastTD" style="display: none">
IP
<input
id="multicastIpInput"
type="text"
class="inputTextValue"
maxlength="255"
size="16"
onkeypress="return validIpKeys(event.charCode);"
oninput=" if ( ValidateMulticast(this) ) setMulticastIp(); "
/>
</td>
</tr>
<tr>
<td>
Port
<input
id="udpPortInput"
type="text"
class="inputTextValue"
maxlength="5"
size="5"
onkeypress="return validNumberKeys(event.charCode);"
oninput="if ( ValidatePort(this, null, CheckReceivePortIsNotForwardPort) ) setUdpPort();"
/>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="mapItem">
<table align="center">
<tr>
<td><b>Forward UDP Messsages</b></td>
</tr>
<tr>
<td><i>e.g. GridTracker on another host</i></td>
</tr>
<tr>
<td>
IP
<input
id="udpForwardIpInput"
type="text"
class="inputTextValue"
maxlength="255"
size="16"
onkeypress="return validIpKeys(event.charCode);"
oninput=" if ( ValidateIPaddress(this, udpForwardEnable) ) setForwardIp(); "
/>
</td>
</tr>
<tr>
<td>
Port
<input
id="udpForwardPortInput"
type="text"
class="inputTextValue"
maxlength="5"
size="5"
onkeypress="return validNumberKeys(event.charCode);"
oninput="if ( ValidatePort(this, udpForwardEnable, CheckForwardPortIsNotReceivePort) ) setForwardPort(); "
/>
</td>
</tr>
<tr>
<td>
Enabled?<input
title="Enable / Disable UDP Message forwarding"
type="checkbox"
id="udpForwardEnable"
onclick="setUdpForwardEnable(this);"
/>
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
<table align="center">
<tr>
<td>
<div id="CenterGridDiv" class="mapItem">
<table align="center">
<tr>
<td>Center Gridsquare</td>
</tr>
<tr>
<td>
<input
id="homeQTHInput"
type="text"
class="inputTextValue"
maxlength="8"
size="8"
oninput="{ if ( ValidateGridsquare(this,null) ) { setCenterGridsquare(); }}"
/>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="mapItem">
<table align="center">
<tr>
<td title="Distance Units">Distance Units</td>
</tr>
<tr>
<td>
<select id="distanceUnit" value="KM" onchange="changeDistanceUnit();">
<option value="KM">Kilometres</option>
<option value="MI">Statute Miles</option>
<option value="NM">Nautical Miles</option>
<option value="DG">Degrees</option>
</select>
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
<table align="center">
<tr>
<td>
<div class="mapItem">
<table align="center" title="Enable Decode Traffic Visual in Menu">
<tr>
<td>Decode Traffic Waterfall</td>
</tr>
<tr>
<td>
<input type="checkbox" id="trafficDecode" onclick="changeTrafficDecode()" />
</td>
</tr>
</table>
</div>
</td>
<td>
<div id="CheckForNewVersionDiv" class="mapItem">
<table align="center">
<tr>
<td>Check for new version</td>
</tr>
<tr>
<td>
<div class="button" onclick="checkForNewVersion(true);">Go!</div>
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
<table align="center">
<tr>
<td>
<div class="mapItem">
<table align="center">
<tr>
<td>
<div class="button" onclick="if ( imSureCheck.checked ) { clearAndReload(); }">
Clear All Settings!
</div>
</td>
</tr>
<tr>
<td>
Yes, I'm sure!<input
type="checkbox"
id="imSureCheck"
title="Must be checked to enable clearing of settings"
/>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="mapItem">
<table align="center">
<tr>
<td>
<div class="button" onclick="exportSettings();">Export Settings</div>
</td>
</tr>
<tr>
<td>
<div style="display: none" id="importSettingsButton" class="button" onclick="importSettings();">
Import Settings
</div>
</td>
</tr>
<tr>
<td>
<font style="display: none" id="importSettingsFile"></font>
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</div>
<div id="lookupsSettingsDiv" class="settingsTabcontent">
<div class="mapItem">
<table align="center">
<tr align="center">
<td align="center" style="font-weight: bold; color: cyan">Callsign Lookup Service</td>
</tr>
<tr align="center">
<td colspan="1">
<select id="lookupService" value="CALLOOK" onchange="lookupValueChanged();">
<option value="CALLOOK">C A L L O O K (US only)</option>
<option value="HAMQTH">HamQTH (Free Login Required)</option>
<option value="QRZ">QRZ.com (Free and Paid Members Only)</option>
<option value="QRZCQ">QRZCQ.com (Paid Members Only)</option>
</select>
</td>
</tr>
<tr align="center" id="lookupCredentials" style="display: none">
<td>
Username<input id="lookupLogin" type="text" class="inputTextValue" size="8"
oninput="lookupValueChanged();" /> Password<input id="lookupPassword" type="password"
class="inputTextValue" size="8" oninput="lookupValueChanged();" />
</td>
<td>
<div class="button" onclick="GetSessionID(lookupQrzTestResult);">Test</div>
</td>
<td id="lookupQrzTestResult">&nbsp;</td>
</tr>
</table>
</div>
<br />
<div class="mapItem">
<table align="center">
<tr>
<td align="center">Add Lookup Data to QSO Log event</td>
</tr>
<tr align="center">
<td title="When finsihing a QSO...&#10;add extra data from Lookup service">
<input type="checkbox" id="lookupMerge" onclick="changeLookupMerge(this)" />
</td>
</tr>
</table>
</div>
<div class="mapItem" id="lookupMissingGridDiv" style="display: none">
<table align="center">
<tr>
<td align="center">Add Lookup Grid if QSO Grid missing</td>
</tr>
<tr align="center">
<td title="Add Lookup Grid if QSO Grid Missing">
<input type="checkbox" id="lookupMissingGrid" onclick="changeLookupMerge(this)" />
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem">
<table align="center">
<tr>
<td align="center">Open Lookup On Transmit</td>
</tr>
<tr align="center">
<td title="Open Lookup Window On Transmit">
<input type="checkbox" id="lookupOnTx" onclick="changelookupOnTx()" />
</td>
</tr>
</table>
</div>
<div class="mapItem" id="lookupCloseLogDiv">
<table align="center">
<tr>
<td align="center">Close Lookup After Logging</td>
</tr>
<tr align="center">
<td title="Close Lookup Window After Logging">
<input type="checkbox" id="lookupCloseLog" onclick="changelookupOnTx()" />
</td>
</tr>
</table>
</div>
<div class="mapItem" id="lookupCallookPreferredDiv">
<table align="center">
<tr>
<td align="center">Use Callook before using other service</td>
</tr>
<tr align="center">
<td title="Use Callook before using other service. Free Callook yields more data than free QRZ.">
<input type="checkbox" id="lookupCallookPreferred" onclick="lookupValueChanged()" />
</td>
</tr>
</table>
</div>
<br />
<div id="callsignDatabaseDiv" class="mapItem">
<table align="center" class="darkTable">
<tr>
<th colspan="6" style="font-weight: bold; color: yellow">Callsign Databases</th>
</tr>
<tr>
<th>Database</th>
<th>Enabled</th>
<th>Last Download</th>
<th>Count</th>
</tr>
<tr>
<td>United States ULS</td>
<td>
<input type="checkbox" id="ulsUseEnable" onclick="ulsValuesChanged();" />
</td>
<td id="ulsUpdatedTd">Never</td>
<td id="ulsCountTd">0</td>
</tr>
<tr>
<td>Logbook of The World</td>
<td>
<input type="checkbox" id="lotwUseEnable" onclick="lotwValuesChanged();" />
</td>
<td id="lotwUpdatedTd">Never</td>
<td id="lotwCountTd">0</td>
</tr>
<tr>
<td>eQSL</td>
<td>
<input type="checkbox" id="eqslUseEnable" onclick="eqslValuesChanged();" />
</td>
<td id="eqslUpdatedTd">Never</td>
<td id="eqslCountTd">0</td>
</tr>
<tr>
<td>ClubLog OQRS</td>
<td>
<input type="checkbox" id="oqrsUseEnable" onclick="oqrsValuesChanged();" />
</td>
<td id="oqrsUpdatedTd">Never</td>
<td id="oqrsCountTd">0</td>
</tr>
</table>
</div>
</div>
<div id="SpeechSettingsDiv" class="settingsTabcontent">
<div class="roundBorder" style="border: 1px solid #666; margin: 2px; padding: 5px">
<div class="mapItem">
<table align="center">
<tr align="center">
<td align="center">Text-to-speech Voice</td>
</tr>
<tr align="center">
<td colspan="1">
<div id="voicesDiv"></div>
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem">
<table align="center">
<tr align="center">
<td align="center">Speech Rate</td>
<td align="center" id="speechRateTd">1</td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="0.1"
max="10"
value="1"
step="0.1"
class="slider"
id="speechRate"
oninput="changeSpeechValues()"
/>
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr>
<td align="center">Speech Pitch</td>
<td align="center" id="speechPitchTd">1</td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="0"
max="2"
value="1"
step="0.1"
class="slider"
id="speechPitch"
oninput="changeSpeechValues()"
/>
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr>
<td align="center">Speech Volume</td>
<td align="center" id="speechVolumeTd">1</td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="0.1"
max="1"
value="1"
step="0.05"
class="slider"
id="speechVolume"
oninput="changeSpeechValues()"
/>
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr>
<td title="Speak Callsigns and Gridsquares phonetically">Phonetics</td>
</tr>
<tr>
<td title="Speak Callsigns and Gridsquares phonetically">
<input type="checkbox" id="speechPhonetics" onclick="changeSpeechValues()" />
</td>
</tr>
</table>
</div>
</div>
<div class="mapItem">
<table align="center">
<tr align="center">
<td align="center">Audio Device</td>
</tr>
<tr align="center">
<td colspan="1">
<div id="soundCardDiv"></div>
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem" style="white-space: nowrap">
<table align="center">
<tr>
<td align="center">File Audio Volume</td>
<td align="center" id="audioVolumeTd">1</td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="0.00"
max="1"
value="1"
step="0.01"
class="slider"
id="audioVolume"
oninput="changeAudioValues()"
/>
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr>
<td title="Lightning Strike Audio Alert">Lightning Strike Audio Alert</td>
</tr>
<tr>
<td>
<select id="strikesAlert" value="0" onchange="changeStrikesAlert();">
<option value="0">None</option>
<option value="1">Short</option>
<option value="2">Long</option>
<option value="3">Voice</option>
</select>
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem" style="white-space: nowrap">
<table align="center">
<tr>
<td align="center">QSO Log Event Notification</td>
</tr>
<tr align="center">
<td>
<select id="logEventMedia" onchange="newLogEventSetting(this); alertLogMessage();"></select>
</td>
</tr>
</table>
</div>
</div>
<div id="logbookSettingsDiv" class="settingsTabcontent" style="padding: 5px">
<div style="padding: 5px" class="mapItem">
<div
style="padding: 5px"
class="mapItem"
title="Filter Logbook QSOs to include these Callsigns only&#10;(comma separated)"
>
<table align="center">
<tr>
<td><b>Working Callsign(s)</b></td>
</tr>
<tr>
<td>
Enable?
<input
title="Enable Filtering"
type="checkbox"
id="workingCallsignEnable"
onclick="workingCallsignEnableChanged(this);"
/>
</td>
</tr>
<tr>
<td id="workingCallsignsTd">
Callsign(s)<input
id="workingCallsignsValue"
type="text"
class="inputTextValue"
size="15"
onkeypress="return validCallsignsKeys(event.charCode);"
oninput="if ( ValidateCallsigns(this) ) workingCallsignsChanged(this);"
/>
</td>
</tr>
</table>
</div>
<div style="padding: 5px" class="mapItem" title="Filter Logbook QSOs from before this Date">
<table align="center">
<tr>
<td><b>Working Date</b></td>
</tr>
<tr>
<td>
Enable?
<input
title="Enable Filtering"
type="checkbox"
id="workingDateEnable"
onclick="workingDateEnableChanged(this);"
/>
</td>
</tr>
<tr>
<td>
<div
class="roundBorderValue"
style="width: auto; font-size: larger; font-weight: bold"
id="workingDateString"
>
No Date
</div>
</td>
<td></td>
</tr>
<tr>
<td id="workingDateTd" title="Date is UTC">
<input style="display: none" type="text" id="workingDateValue" />
<div id="pick-inline"></div>
</td>
</tr>
</table>
</div>
<br />
<div
style="padding: 5px; display: none; font-size: larger; font-weight: bold; color: cyan"
id="applyCallsignsAndDateDiv"
class="button"
onclick="applyCallsignsAndDates();"
title="Apply Changes and Re-Import Logbook(s)"
>
Apply Changes
</div>
</div>
</div>
<div id="gridSettingsDiv" class="settingsTabcontent">
<div class="mapItem"style="padding:10px;">
<div class="mapItem" style="height:49px;">
<table align="center">
<tr align="center">
<td align="center"><b><i>Gridsquare Colors</i></b>
</tr>
<tr align="center">
<td title="Reset Gridsquare Colors To Default">
<div class="button" onclick="resetLegendColors()">Reset Colors</div>
</td>
</tr>
</table>
</div>
<div class="mapItem" id="QSOgridDiv" >
<table align="center">
<tr align="center">
<td align="center"><b>QSO / Worked</b></td>
</tr>
<tr align="center">
<td colspan="2">
<input type="color" id="QSOgridValue" value="#000000" oninput="changeLegendColor(this)" />
</td>
</tr>
</table>
</div>
<div class="mapItem" id="QSLgridDiv" >
<table align="center">
<tr align="center">
<td align="center"><b>QSL / Confirmed</b></td>
</tr>
<tr align="center">
<td colspan="2">
<input type="color" id="QSLgridValue" value="#000000" oninput="changeLegendColor(this)" />
</td>
</tr>
</table>
</div>
<div class="mapItem" id="QSXgridDiv" >
<table align="center">
<tr align="center">
<td align="center"><b>QSX / Station-2-Station</b></td>
</tr>
<tr align="center">
<td colspan="2">
<input type="color" id="QSXgridValue" value="#000000" oninput="changeLegendColor(this)" />
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem" id="CQgridDiv" >
<table align="center">
<tr align="center">
<td align="center"><b>'CQ' Stations</b></td>
</tr>
<tr align="center">
<td colspan="2">
<input type="color" id="CQgridValue" value="#000000" oninput="changeLegendColor(this)" />
</td>
</tr>
</table>
</div>
<div class="mapItem" id="CQDXgridDiv" >
<table align="center">
<tr align="center">
<td align="center"><b>'CQ DX' Stations</b></td>
</tr>
<tr align="center">
<td colspan="2">
<input type="color" id="CQDXgridValue" value="#000000" oninput="changeLegendColor(this)" />
</td>
</tr>
</table>
</div>
<div class="mapItem" id="QRZgridDiv" >
<table align="center">
<tr align="center">
<td align="center"><b>QRZ / Your Traffic</b></td>
</tr>
<tr align="center">
<td colspan="2">
<input type="color" id="QRZgridValue" value="#000000" oninput="changeLegendColor(this)" />
</td>
</tr>
</table>
</div>
<div class="mapItem" id="QTHgridDiv" >
<table align="center">
<tr align="center">
<td align="center"><b>QTH / Home Gridsquare</b></td>
</tr>
<tr align="center">
<td colspan="2">
<input type="color" id="QTHgridValue" value="#000000" oninput="changeLegendColor(this)" />
</td>
</tr>
</table>
</div>
</div>
<br />
<br />
<div class="mapItem">
<table align="center">
<tr>
<td title="Place RX Spots over Grid Layer">PSK-Spots Over Grids</td>
</tr>
<tr>
<td title="Place RX Spots over Grid Layer">
<input type="checkbox" id="spotMergeValue" onclick="changeSpotValues();redrawSpots();" />
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr>
<td align="center">Grid Opacity</td>
<td align="left" id="showOpacityTd">10%</td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="16"
max="255"
value="136"
step="1"
class="slider"
id="opacityValue"
oninput="changeGridOpacity()"
onkeyup="redrawGrids()"
onmouseup="redrawGrids()"
/>
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr>
<td align="center">Split QSL Grids</td>
</tr>
<tr align="center">
<td title="Toggle Split QSL Grids with Live Grids">
<input type="checkbox" id="splitQSLValue" onclick="changeSplitQSL()" />
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr>
<td align="center">Auto Mouseover Grids</td>
</tr>
<tr align="center">
<td title="Toggle Auto Mouseover Grid Tables">
<input type="checkbox" id="mouseOverValue" onclick="changeMouseOverValue()" />
</td>
</tr>
</table>
</div>
<br/>
<div class="mapItem" id="decayRateDiv">
<table align="center">
<tr align="center">
<td align="center">Live Grid Decay</td>
</tr>
<tr>
<td align="center" id="decayRateTd">10m</td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="0"
max="86400"
value="600"
step="60"
class="slider"
id="gridDecay"
oninput="changeGridDecay()"
onkeyup="redrawGrids()"
onmouseup="redrawGrids()"
/>
</td>
</tr>
</table>
</div>
</div>
<div
id="mapSettingsDiv"
class="settingsTabcontent"
style="background-color: #00000044; text-shadow: 0 0 5px #000000ff"
>
<div class="mapItem">
<table align="center">
<tr>
<td title="Change map">Current Map</td>
</tr>
<tr>
<td>
<select id="mapSelect" value="terrain-background" onchange="changeMapValues();"></select>
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr>
<td colspan="1" align="center">Animate Active Paths</td>
</tr>
<tr align="center">
<td style="padding: 0px; margin: 0px" title="Toggle Traffic Path Animation">
<input type="checkbox" id="animateValue" onclick="changeAnimate()" />
</td>
</tr>
<tr style="display: none" id="animationSpeedTd">
<td>
<input
title="Animation Speed"
type="range"
min="1"
max="20"
value="10"
step="1"
class="slider"
id="animateSpeedValue"
oninput="changeAnimateSpeedValue()"
/>
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr>
<td align="center" colspan="2">Map Settings Transparency</td>
</tr>
<tr>
<td align="center" id="mapTransTd">50%</td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="0"
max="1"
value="0.5"
step="0.01"
class="slider"
id="mapTransValue"
oninput="mapTransChange();"
/>
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem">
<table align="center">
<tr>
<td align="center">QSX Path Width</td>
<td align="left" id="pathWidthTd">1.5</td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="0.0"
max="8"
value="1.5"
step="0.1"
class="slider"
id="pathWidthValue"
oninput="changePathWidth()"
/>
</td>
</tr>
</table>
</div>
<div class="mapItem" id="pathColorDiv">
<table align="center">
<tr align="center">
<td align="center"><b>QSX Path Color</b></td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="0"
max="361"
value="0"
class="slider"
id="pathColorValue"
oninput="changeMapValues()"
/>
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr>
<td align="center">QRZ Path Width</td>
<td align="left" id="qrzPathWidthTd">1.5</td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="0.0"
max="10"
value="1.5"
step="0.1"
class="slider"
id="qrzPathWidthValue"
oninput="changePathWidth()"
/>
</td>
</tr>
</table>
</div>
<div class="mapItem" id="qrzPathColorDiv">
<table align="center">
<tr align="center">
<td align="center"><b>QRZ Path Color</b></td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="0"
max="361"
value="360"
class="slider"
id="qrzPathColorValue"
oninput="changeMapValues()"
/>
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem">
<table align="center">
<tr>
<td align="center">Grayline Darkness</td>
<td align="left" id="showDarknessTd">10%</td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="0.03"
max="0.70"
value="0.1"
step="0.01"
class="slider"
id="shadowValue"
oninput="changeShadow()"
/>
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr>
<td align="center">Brightness</td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="0"
max="1"
value="1"
step="0.01"
class="slider"
id="brightnessValue"
oninput="changeMapValues()"
/>
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr>
<td align="center">Merge Award Overlay</td>
</tr>
<tr align="center">
<td title="Toggle Merge Award Overlay">
<input type="checkbox" id="mergeOverlayValue" onclick="changeMergeOverlayValue()" />
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr>
<td align="center">Fit Map To QRZ</td>
</tr>
<tr align="center">
<td title="Toggle Fit Map To QRZ">
<input type="checkbox" id="fitQRZvalue" onclick="changeFitQRZvalue()" />
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem">
<table align="center">
<tr>
<td align="center">'CQ' Highlighting</td>
</tr>
<tr align="center">
<td title="Toggle 'CQ XX' Highlighting">
<input type="checkbox" id="CqHiliteValue" onclick="changeCqHiliteValue(this);" />
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr>
<td align="center">QRZ Missing Grid<br />DXCC Fallback</td>
</tr>
<tr align="center">
<td title="If a station grid is not known use the DXCC">
<input type="checkbox" id="qrzDxccFallbackValue" onclick="changeQrzDxccFallbackValue();" />
</td>
</tr>
</table>
</div>
<div class="mapItem" id="spotPathColorDiv">
<table align="center">
<tr align="center">
<td align="center"><b>PSK-Spot Color</b></td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="-1"
max="361"
value="-1"
class="slider"
id="spotPathColorValue"
oninput="spotPathChange();"
onkeyup="redrawSpots();"
onmouseup="redrawSpots();"
/>
</td>
</tr>
<tr align="center">
<td id="spotPathInfoTd">PSK-Reporter Palette</td>
</tr>
</table>
</div>
<div class="mapItem" id="spotPathsDiv">
<table align="center">
<tr>
<td title="Toggle flight paths to spots">PSK-Spot Paths</td>
</tr>
<tr>
<td title="Toggle flight paths to spots">
<input type="checkbox" id="spotPathsValue" onclick="changeSpotValues();redrawSpots();" />
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem" id="spotPathWidthDiv">
<table align="center">
<tr>
<td align="center">PSK-Spot Path Width</td>
<td align="left" id="spotWidthTd">1.5</td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="0.0"
max="5"
value="1.5"
step="0.05"
class="slider"
id="spotWidthValue"
oninput="spotPathChange();"
onkeyup="redrawSpots();"
onmouseup="redrawSpots();"
/>
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem">
<table align="center">
<tr>
<td title="Night Map">Auto Night Map</td>
</tr>
<tr align="center">
<td title="Toggle Automatic Night Map Switching">
<input type="checkbox" id="nightMapEnable" onclick="changeNightMapEnable(this);" />
</td>
</tr>
<tr>
<td style="display: none" id="nightMapTd">
<div class="mapItem">
<table align="center">
<tr>
<td title="Change map">Night Map</td>
</tr>
<tr>
<td>
<select id="mapNightSelect" value="18" onchange="changeMapNightValues();"></select>
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem" id="pathNightColorDiv">
<table align="center">
<tr align="center">
<td align="center"><b>Night QSX Path Color</b></td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="0"
max="361"
value="0"
class="slider"
id="nightPathColorValue"
oninput="changeMapNightValues()"
/>
</td>
</tr>
</table>
</div>
<div class="mapItem" id="pathNightQrzColorDiv">
<table align="center">
<tr align="center">
<td align="center"><b>Night QRZ Path Color</b></td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="0"
max="361"
value="0"
class="slider"
id="nightQrzPathColorValue"
oninput="changeMapNightValues()"
/>
</td>
</tr>
</table>
</div>
<div class="mapItem" id="spotNightPathColorDiv" style="display: none">
<table align="center">
<tr align="center">
<td align="center"><b>Night PSK-Spot Color</b></td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="-1"
max="361"
value="-1"
class="slider"
id="spotNightPathColorValue"
oninput="spotPathChange();"
onkeyup="redrawSpots();"
onmouseup="redrawSpots();"
/>
</td>
</tr>
<tr align="center">
<td id="spotNightPathInfoTd">PSK-Reporter Palette</td>
</tr>
</table>
</div>
<br />
<div class="mapItem">
<table align="center">
<tr>
<td align="center">Night Brightness</td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="0"
max="1"
value="1"
step="0.01"
class="slider"
id="nightBrightnessValue"
oninput="changeMapNightValues()"
/>
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</div>
</div>
<div id="logSettingsDiv" class="settingsTabcontent">
<div
id="LoadAdifOnStartupDiv"
style="left: 0; padding: 1px; overflow: auto; overflow-x: hidden; display: inline-block; height: 602px"
class="roundBorder"
>
<table class="darkTable" align="center">
<tr>
<th>Source/Sync</th>
<th>Menu?</th>
<th>Startup?</th>
<th>Log?</th>
<th>Details</th>
<th>Test</th>
<th>Result</th>
</tr>
<tr>
<td>GridTracker</td>
<td></td>
<td>
<input
type="checkbox"
checked="false"
id="loadGTCheckBox"
onclick="adifStartupCheckBoxChanged(this);"
/>
</td>
<td>
<input
type="checkbox"
checked="false"
id="logGTqsoCheckBox"
onclick="adifLogQsoCheckBoxChanged(this);"
/>
</td>
<td>GridTracker QSO Logfile</td>
<td></td>
<td></td>
</tr>
<tr>
<td>Local File(s)</td>
<td>
<input
type="checkbox"
checked="false"
id="buttonAdifCheckBox"
onclick="adifMenuCheckBoxChanged(this);"
/>
</td>
<td>
<input
type="checkbox"
checked="false"
id="loadAdifCheckBox"
onclick="adifStartupCheckBoxChanged(this);"
/>
</td>
<td></td>
<td>
<div id="selectFileOnStartupDiv" style="display: none">
<table align="center" class="subtable">
<tr>
<td>
<div class="button" id="selectAdifButton">Add File</div>
</td>
<td>
<div id="startupLogFileDiv">No file(s) selected</div>
</td>
</tr>
</table>
</div>
</td>
<td></td>
<td></td>
</tr>
<tr id="pskTr">
<td>PSK-Reporter</td>
<td>
<input
type="checkbox"
checked="false"
id="buttonPsk24CheckBox"
onclick="adifMenuCheckBoxChanged(this);"
/>
</td>
<td>
<input
type="checkbox"
checked="false"
id="loadPsk24CheckBox"
onclick="adifStartupCheckBoxChanged(this);"
/>
</td>
<td></td>
<td>
<div id="pskDaysDiv">24 Hour History</div>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>QRZ.com</td>
<td>
<input
type="checkbox"
checked="false"
id="buttonQRZCheckBox"
onclick="adifMenuCheckBoxChanged(this);"
/>
</td>
<td>
<input
type="checkbox"
checked="false"
id="loadQRZCheckBox"
onclick="adifStartupCheckBoxChanged(this);"
/>
</td>
<td>
<input
type="checkbox"
checked="false"
id="logQRZqsoCheckBox"
onclick="adifLogQsoCheckBoxChanged(this);"
/>
</td>
<td>
API Key<input
id="qrzApiKey"
type="password"
class="inputTextValue"
maxlength="19"
size="21"
oninput="ValidateQrzApi(this); adifTextValueChange(this);"
/>
</td>
<td>
<div class="button" onclick="if ( ValidateQrzApi(qrzApiKey ) ) grabQrzComLog(true);">Test</div>
</td>
<td id="qrzTestResult"></td>
</tr>
<tr>
<td>ClubLog</td>
<td>
<input
type="checkbox"
checked="false"
id="buttonClubCheckBox"
onclick="adifMenuCheckBoxChanged(this);"
/>
</td>
<td>
<input
type="checkbox"
checked="false"
id="loadClubCheckBox"
onclick="adifStartupCheckBoxChanged(this);"
/>
</td>
<td>
<input
type="checkbox"
checked="false"
id="logClubqsoCheckBox"
onclick="adifLogQsoCheckBoxChanged(this);"
/>
</td>
<td>
Callsign<input id="clubCall" type="text" class="inputTextValue" size="8" oninput=" ValidateText(this);
adifTextValueChange(this);" / > Password<input id="clubPassword" type="password"
class="inputTextValue" size="8" oninput=" ValidateText(this); adifTextValueChange(this);" / >
<br />Email<input id="clubEmail" type="text" class="inputTextValue" size="20"
oninput="ValidateText(this); adifTextValueChange(this);" / >
</td>
<td>
<div
class="button"
onclick="if ( ValidateText(clubEmail) && ValidateText(clubPassword) ) grabClubLog(true);"
>
Test
</div>
</td>
<td id="clubTestResult"></td>
</tr>
<tr>
<td>HRDLOG.net</td>
<td></td>
<td></td>
<td>
<input
type="checkbox"
checked="false"
id="logHRDLOGqsoCheckBox"
onclick="adifLogQsoCheckBoxChanged(this);"
/>
</td>
<td>
Callsign<input
id="HRDLOGCallsign"
type="text"
class="inputTextValue"
size="12"
oninput="ValidateText(this); adifTextValueChange(this);"
/>
Upload Code<input
id="HRDLOGUploadCode"
type="password"
class="inputTextValue"
size="8"
oninput=" ValidateText(this); adifTextValueChange(this);"
/>
<br />
<a
href="http://www.hrdlog.net/docs/Tips.aspx#upcode"
target="_blank"
title="Click to learn how to get upload code"
>*** How to get upload code ***</a
>
</td>
<td>
<div
class="button"
onclick="if ( ValidateText(HRDLOGCallsign) && ValidateText(HRDLOGUploadCode) ) hrdCredentialTest(true);"
>
Test
</div>
</td>
<td id="HRDLogTestResult"></td>
</tr>
<tr>
<td>Cloudlog</td>
<td></td>
<td></td>
<td>
<input
type="checkbox"
checked="false"
id="logCloudlogQSOCheckBox"
onclick="adifLogQsoCheckBoxChanged(this);"
/>
</td>
<td>
URL<input
id="CloudlogURL"
type="text"
class="inputTextValue"
size="35"
oninput="ValidateText(this); adifTextValueChange(this);"
/>
<br />
API Key<input
id="CloudlogAPI"
type="text"
class="inputTextValue"
size="12"
oninput=" ValidateText(this); adifTextValueChange(this);"
/>
</td>
<td>
<div
class="button"
onclick="if ( ValidateText(CloudlogURL) && ValidateText(CloudlogAPI) ) ClublogTest(true);"
>
Test
</div>
</td>
<td id="CloudlogTestResult"></td>
</tr>
<tr>
<td>eQSL.cc</td>
<td></td>
<td></td>
<td>
<input
type="checkbox"
checked="false"
id="logeQSLQSOCheckBox"
onclick="adifLogQsoCheckBoxChanged(this);"
/>
</td>
<td>
User<input
id="eQSLUser"
type="text"
class="inputTextValue"
size="8"
oninput="ValidateText(this); adifTextValueChange(this);"
/>
Password<input
id="eQSLPassword"
type="password"
class="inputTextValue"
size="8"
oninput=" ValidateText(this); adifTextValueChange(this);"
/><br />
QTH Nickname<input
type="checkbox"
checked="false"
id="nicknameeQSLCheckBox"
onclick="adifNicknameCheckBoxChanged(this);"
/>
<input
id="eQSLNickname"
style="display: none"
type="text"
class="inputTextValue"
size="12"
oninput=" ValidateText(this); adifTextValueChange(this);"
/>
</td>
<td>
<div
class="button"
onclick="if ( ValidateText(eQSLUser) && ValidateText(eQSLPassword) ) eQSLTest(true);"
>
Test
</div>
</td>
<td id="eQSLTestResult"></td>
</tr>
<tr>
<td>LotW</td>
<td>
<input
type="checkbox"
checked="false"
id="buttonLOTWCheckBox"
onclick="adifMenuCheckBoxChanged(this);"
/>
</td>
<td>
<input
type="checkbox"
checked="false"
id="loadLOTWCheckBox"
onclick="adifStartupCheckBoxChanged(this);"
/>
</td>
<td>
<input
type="checkbox"
checked="false"
id="logLOTWqsoCheckBox"
onclick="adifLogQsoCheckBoxChanged(this);"
/>
</td>
<td>
Login<input id="lotwLogin" type="text" class="inputTextValue" size="8" oninput="ValidateText(this);
adifTextValueChange(this);" / > Password<input id="lotwPassword" type="password"
class="inputTextValue" size="8" oninput="ValidateText(this); adifTextValueChange(this);" / ><br />
<div id="lotwUpload" style="display: none">
<div class="button" id="selectTQSLButton">TQSL Path</div>
<text id="tqslFileDiv" style="margin-top: 2px; padding: 2px" class="roundBorderValue"
>No file selected</text
><br />
TQSL Password<input id="lotwTrusted" type="password" class="inputTextValue" size="8"
oninput="ValidateText(this); adifTextValueChange(this);" / ><br />
Station Name<select
id="lotwStation"
class="inputTextValue"
onchange="ValidateText(this); adifTextValueChange(this);"
></select>
</div>
</td>
<td>
<div
class="button"
onclick="if ( ValidateText(lotwLogin) && ValidateText(lotwPassword) ) grabLOtWLog(true);"
>
Test Download
</div>
<br />
<div id="trustedTestButton" style="margin-top: 25px" class="button" onclick="testTrustedQSL(true);">
Test TQSL
</div>
</td>
<td id="lotwTestResult"></td>
</tr>
<tr>
<td>N1MM Logger+</td>
<td></td>
<td></td>
<td>
<input
type="checkbox"
checked="false"
class="inputTextValue"
id="buttonN1MMCheckBox"
onclick=" ValidateIPaddress(N1MMIpInput,this); ValidatePort(N1MMPortInput,this, null ); n1mmLoggerChanged(); "
/>
</td>
<td>
IP<input id="N1MMIpInput" type="text" class="inputTextValue" maxlength="15" size="15"
onkeypress='return validIpKeys(event.charCode);' oninput="ValidateIPaddress(this,buttonN1MMCheckBox);
n1mmLoggerChanged(); "/ > Port<input id="N1MMPortInput" type="text" class="inputTextValue"
maxlength="5" size="5" onkeypress='return validNumberKeys(event.charCode);'
oninput="ValidatePort(this,buttonN1MMCheckBox, null ); n1mmLoggerChanged(); " / >
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>Log4OM</td>
<td></td>
<td></td>
<td>
<input
type="checkbox"
checked="false"
class="inputTextValue"
id="buttonLog4OMCheckBox"
onclick=" ValidateIPaddress(log4OMIpInput,this); ValidatePort(log4OMPortInput,this, null ); log4OMLoggerChanged(); "
/>
</td>
<td>
IP<input id="log4OMIpInput" type="text" class="inputTextValue" maxlength="15" size="15"
onkeypress='return validIpKeys(event.charCode);'
oninput="ValidateIPaddress(this,buttonLog4OMCheckBox); log4OMLoggerChanged(); "/ > Port<input
id="log4OMPortInput" type="text" class="inputTextValue" maxlength="5" size="5" onkeypress='return
validNumberKeys(event.charCode);' oninput="ValidatePort(this,buttonLog4OMCheckBox, null );
log4OMLoggerChanged(); " / >
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>N3FJP Loggers</td>
<td></td>
<td></td>
<td>
<input
type="checkbox"
checked="false"
class="inputTextValue"
id="buttonacLogCheckBox"
onclick=" ValidateIPaddress(acLogIpInput,this); ValidatePort(acLogPortInput,this, null ); acLogLoggerChanged(); "
/>
</td>
<td>
IP<input id="acLogIpInput" type="text" class="inputTextValue" maxlength="15" size="15"
onkeypress='return validIpKeys(event.charCode);' oninput="ValidateIPaddress(this,buttonacLogCheckBox);
acLogLoggerChanged(); "/ > Port<input id="acLogPortInput" type="text" class="inputTextValue"
maxlength="5" size="5" onkeypress='return validNumberKeys(event.charCode);'
oninput="ValidatePort(this,buttonacLogCheckBox, null ); acLogLoggerChanged(); " / >
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>DXKeeper</td>
<td></td>
<td></td>
<td>
<input
type="checkbox"
checked="false"
class="inputTextValue"
id="buttondxkLogCheckBox"
onclick=" ValidateIPaddress(dxkLogIpInput,this); ValidatePort(dxkLogPortInput,this, null ); dxkLogLoggerChanged(); "
/>
</td>
<td>
IP<input id="dxkLogIpInput" type="text" class="inputTextValue" maxlength="15" size="15"
onkeypress='return validIpKeys(event.charCode);'
oninput="ValidateIPaddress(this,buttondxkLogCheckBox); dxkLogLoggerChanged(); "/ > Port<input
id="dxkLogPortInput" type="text" class="inputTextValue" maxlength="5" size="5" onkeypress='return
validNumberKeys(event.charCode);' oninput="ValidatePort(this,buttondxkLogCheckBox, null );
dxkLogLoggerChanged(); " / >
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>HRD Logbook</td>
<td></td>
<td></td>
<td>
<input
type="checkbox"
checked="false"
class="inputTextValue"
id="buttonHrdLogbookCheckBox"
onclick=" ValidateIPaddress(hrdLogbookIpInput,this); ValidatePort(hrdLogbookPortInput,this, null ); hrdLogbookLoggerChanged(); "
/>
</td>
<td>
IP<input id="hrdLogbookIpInput" type="text" class="inputTextValue" maxlength="15" size="15"
onkeypress='return validIpKeys(event.charCode);'
oninput="ValidateIPaddress(this,buttonHrdLogbookCheckBox); hrdLogbookLoggerChanged(); "/ > Port<input
id="hrdLogbookPortInput" type="text" class="inputTextValue" maxlength="5" size="5" onkeypress='return
validNumberKeys(event.charCode);' oninput="ValidatePort(this,buttonHrdLogbookCheckBox, null );
hrdLogbookLoggerChanged(); " / >
</td>
<td></td>
<td></td>
</tr>
</table>
</div>
</div>
<div id="callRosterDiv" class="settingsTabcontent">
<div class="mapItem">
<table align="center">
<tr align="center">
<td align="center">Window Always On Top</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="checkbox" id="rosterAlwaysOnTop" onchange="changeRosterTop(this);" />
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr align="center">
<td align="center">Call Roster Max Age</td>
</tr>
<tr align="center">
<td align="center" id="rosterTimeTd">2m 0s</td>
</tr>
<tr align="center">
<td colspan="2">
<input
type="range"
min="5"
max="300"
value="120"
step="15"
class="slider"
id="rosterTime"
oninput="changeRosterTime()"
/>
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr align="center">
<td align="center">Clear Call Roster on Band change</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="checkbox" id="clearRosterOnBandChange" onchange="clearRosterOnBandChangeValueChanged(this);" />
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem" id="haltTXDiv" style="display: none">
<table align="center">
<tr align="center">
<td align="center">On QSO Reply</td>
</tr>
<tr align="center">
<td align="center">Halt TX On All Other Instances</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="checkbox" id="haltAllOnTxValue" onchange="changeHaltOntTxValue(this);" />
</td>
</tr>
</table>
</div>
<div class="mapItem" id="multiRigCRDiv" style="display: none">
<table align="center">
<tr align="center">
<td align="center">On QSO Reply</td>
</tr>
<tr align="center">
<td align="center">Switch View To Transmitting Instance</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="checkbox" id="focusRigValue" onchange="changeFocusRigValue(this);" />
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem">
<table align="center" title="Alert when new 'Wanted Row(s)' appear in the Call Roster">
<tr>
<td colspan="2">Audio Alert On <b>New Wanted</b></td>
</tr>
<tr>
<td colspan="2">
<input type="checkbox" id="huntRoster" onchange="wantedChanged(this);" />
</td>
</tr>
<tr>
<td>
<select id="huntRosterNotify" onchange="wantedChanged(this);">
<option value="1">Text-to-Speech</option>
<option value="0">Media File</option>
</select>
</td>
<td>
<input
id="huntRosterNotifyWord"
type="text"
class="inputTextValue"
size="14"
onkeyup="if (event.keyCode === 13) { speakAlertString(this.value);}"
oninput="ValidateText(this);wantedChanged(this);"
/>
<select id="huntRosterNotifyMedia" style="display: block" onchange="wantedChanged(this);"></select>
</td>
</tr>
</table>
</div>
</div>
<div id="alertsDiv" class="settingsTabcontent">
<div id="alertMatrixDiv" style="display: inline-block">
<table class="roundBorder" align="left" style="border: 1px solid #066; margin: auto; padding: 1px">
<tr>
<th colspan="5">Audio Alerts</th>
</tr>
<tr colspan="5" title="Log file reference">
<td align="right" colspan="3">Reference</td>
<td align="left" colspan="2">
<select id="referenceNeed" onchange="exceptionValuesChanged();">
<option value="0">Current Band and Mode</option>
<option value="1">Current Band, Any Mode</option>
<option value="2">Current Band, Any Digi Mode</option>
<option value="3">Current Mode, Any Band</option>
<option value="4">Any Band, Any Mode</option>
<option value="5">Any Band, Any Digi Mode</option>
</select>
</td>
</tr>
<tr>
<td></td>
<td>Enable</td>
<td>Status</td>
<td>Notify</td>
<td>Value</td>
</tr>
<tr>
<th>Callsign</th>
<td>
<input type="checkbox" id="huntCallsign" onchange="wantedChanged(this);" />
</td>
<td>
<select title="Used by All Classic Alerts" id="huntCallsignNeed" onchange="wantedChanged(this);">
<option value="worked">New</option>
<option value="confirmed">New+Unconf</option>
</select>
</td>
<td>
<select id="huntCallsignNotify" onchange="wantedChanged(this);">
<option value="1">Text-to-Speech</option>
<option value="0">Media File</option>
</select>
</td>
<td>
<input
id="huntCallsignNotifyWord"
type="text"
class="inputTextValue"
size="14"
onkeyup="if (event.keyCode === 13) { speakAlertString(this.value); }"
oninput="ValidateText(this);wantedChanged(this);"
/>
<select id="huntCallsignNotifyMedia" onchange="wantedChanged(this);"></select>
</td>
</tr>
<tr>
<th>Grid</th>
<td>
<input type="checkbox" id="huntGrid" onchange="wantedChanged(this);" />
</td>
<td>
<select id="huntGridNeed" onchange="wantedChanged(this);">
<option value="worked">New</option>
<option value="confirmed">New+Unconf</option>
</select>
</td>
<td>
<select id="huntGridNotify" onchange="wantedChanged(this);">
<option value="1">Text-to-Speech</option>
<option value="0">Media File</option>
</select>
</td>
<td>
<input
id="huntGridNotifyWord"
type="text"
class="inputTextValue"
size="14"
onkeyup="if (event.keyCode === 13) { speakAlertString(this.value);}"
oninput="ValidateText(this);wantedChanged(this);"
/>
<select id="huntGridNotifyMedia" style="display: block" onchange="wantedChanged(this);"></select>
</td>
</tr>
<tr>
<th>DXCC</th>
<td>
<input type="checkbox" id="huntDXCC" onchange="wantedChanged(this);" />
</td>
<td>
<select id="huntDXCCNeed" onchange="wantedChanged(this);">
<option value="worked">New</option>
<option value="confirmed">New+Unconf</option>
</select>
</td>
<td>
<select id="huntDXCCNotify" onchange="wantedChanged(this);">
<option value="1">Text-to-Speech</option>
<option value="0">Media File</option>
</select>
</td>
<td>
<input
id="huntDXCCNotifyWord"
type="text"
class="inputTextValue"
size="14"
onkeyup="if (event.keyCode === 13) { speakAlertString(this.value);}"
oninput="ValidateText(this);wantedChanged(this);"
/>
<select id="huntDXCCNotifyMedia" style="display: block" onchange="wantedChanged(this);"></select>
</td>
</tr>
<tr>
<th>CQ Zone</th>
<td>
<input type="checkbox" id="huntCQz" onchange="wantedChanged(this);" />
</td>
<td>
<select id="huntCQzNeed" onchange="wantedChanged(this);">
<option value="worked">New</option>
<option value="confirmed">New+Unconf</option>
</select>
</td>
<td>
<select id="huntCQzNotify" onchange="wantedChanged(this);">
<option value="1">Text-to-Speech</option>
<option value="0">Media File</option>
</select>
</td>
<td>
<input
id="huntCQzNotifyWord"
type="text"
class="inputTextValue"
size="14"
onkeyup="if (event.keyCode === 13) { speakAlertString(this.value);}"
oninput="ValidateText(this);wantedChanged(this);"
/>
<select id="huntCQzNotifyMedia" style="display: block" onchange="wantedChanged(this);"></select>
</td>
</tr>
<tr>
<th>ITU Zone</th>
<td>
<input type="checkbox" id="huntITUz" onchange="wantedChanged(this);" />
</td>
<td>
<select id="huntITUzNeed" onchange="wantedChanged(this);">
<option value="worked">New</option>
<option value="confirmed">New+Unconf</option>
</select>
</td>
<td>
<select id="huntITUzNotify" onchange="wantedChanged(this);">
<option value="1">Text-to-Speech</option>
<option value="0">Media File</option>
</select>
</td>
<td>
<input
id="huntITUzNotifyWord"
type="text"
class="inputTextValue"
size="14"
onkeyup="if (event.keyCode === 13) { speakAlertString(this.value);}"
oninput="ValidateText(this);wantedChanged(this);"
/>
<select id="huntITUzNotifyMedia" style="display: block" onchange="wantedChanged(this);"></select>
</td>
</tr>
<tr>
<th>US States</th>
<td>
<input type="checkbox" id="huntStates" onchange="wantedChanged(this);" />
</td>
<td>
<select id="huntStatesNeed" onchange="wantedChanged(this);">
<option value="worked">New</option>
<option value="confirmed">New+Unconf</option>
</select>
</td>
<td>
<select id="huntStatesNotify" onchange="wantedChanged(this);">
<option value="1">Text-to-Speech</option>
<option value="0">Media File</option>
</select>
</td>
<td>
<input
id="huntStatesNotifyWord"
type="text"
class="inputTextValue"
size="14"
onkeyup="if (event.keyCode === 13) { speakAlertString(this.value);}"
oninput="ValidateText(this);wantedChanged(this);"
/>
<select id="huntStatesNotifyMedia" style="display: block" onchange="wantedChanged(this);"></select>
</td>
</tr>
</table>
<table
class="roundBorder"
align="left"
style="border: 1px solid #622; margin: auto; padding: 1px; text-align: left"
>
<tr>
<th colspan="6" align="center">Exceptions</th>
</tr>
<tr>
<td>
<table>
<tr>
<td colspan="2">
<input type="checkbox" id="cqOnly" onchange="exceptionValuesChanged();" />CQ Only
</td>
</tr>
<tr>
<td colspan="2">
<input type="checkbox" id="wantGrid" onchange="exceptionValuesChanged();" />Require Grid
</td>
</tr>
<tr>
<td><input type="checkbox" id="wantMinDB" onchange="exceptionValuesChanged();" />Min dB</td>
<td>
<input
type="range"
min="-25"
max="0"
step="1"
class="slider"
id="minDb"
oninput="exceptionValuesChanged();"
style="width: 75px"
/>
</td>
<td align="center" id="minDbView" class="roundBorderValue">-24</td>
</tr>
<tr>
<td><input type="checkbox" id="wantMaxDT" onchange="exceptionValuesChanged();" />Max DT</td>
<td>
<input
type="range"
min="0.1"
max="2"
step="0.1"
class="slider"
id="maxDT"
oninput="exceptionValuesChanged();"
style="width: 75px"
/>
</td>
<td align="center" id="maxDTView" class="roundBorderValue">.5</td>
</tr>
<tr>
<td><input type="checkbox" id="wantMinFreq" onchange="exceptionValuesChanged();" />Min freq</td>
<td>
<input
type="range"
min="0"
max="2500"
step="10"
class="slider"
id="minFreq"
oninput="exceptionValuesChanged();"
style="width: 75px"
/>
</td>
<td align="center" id="minFreqView" class="roundBorderValue">400</td>
</tr>
<tr>
<td><input type="checkbox" id="wantMaxFreq" onchange="exceptionValuesChanged();" />Max freq</td>
<td>
<input
type="range"
min="500"
max="3000"
step="10"
class="slider"
id="maxFreq"
oninput="exceptionValuesChanged();"
style="width: 75px"
/>
</td>
<td align="center" id="maxFreqView" class="roundBorderValue">3000</td>
</tr>
</table>
</td>
<td>
<table>
<tr>
<td colspan="2">
<input
type="checkbox"
id="noMyDxcc"
onchange="onlyMyDxcc.checked=false; exceptionValuesChanged();"
/>Not My DXCC
</td>
</tr>
<tr>
<td colspan="2">
<input
type="checkbox"
id="onlyMyDxcc"
onchange="noMyDxcc.checked=false; exceptionValuesChanged();"
/>Only My DXCC
</td>
</tr>
<tr>
<td colspan="2">
<input
type="checkbox"
id="noRoundUp"
onchange="onlyRoundUp.checked=false; exceptionValuesChanged();"
/>No Round-Up
</td>
</tr>
<tr>
<td colspan="2">
<input
type="checkbox"
id="onlyRoundUp"
onchange="noRoundUp.checked=false; exceptionValuesChanged();"
/>Only Round-Up
</td>
</tr>
<tr>
<td colspan="2">
<div id="usesLoTWDiv" style="display: none">
<input type="checkbox" id="usesLoTW" onchange="exceptionValuesChanged();" />Uses LoTW
</div>
</td>
</tr>
<tr>
<td colspan="2">
<div id="useseQSLDiv" style="display: none">
<input type="checkbox" id="useseQSL" onchange="exceptionValuesChanged();" />Uses eQSL
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<br />
<div id="alertFormDiv" style="display: inline-block">
<table align="center" class="roundBorder" style="border: 3px groove darkred; margin: 0 auto">
<th colspan="8">Custom Alerts</th>
<tr>
<td>Type</td>
<td>Value</td>
<td>Notify</td>
<td></td>
<td>Repeat</td>
</tr>
<tr>
<td>
<select id="alertTypeSelect" name="alertTypeSelect" onchange="alertTypeChanged();">
<option value="0">Callsign (exact)</option>
<option value="5">Callsign (partial)</option>
<option value="6">Callsign (regex)</option>
<option value="2">Gridsquare</option>
<option value="4">QRZ</option>
</select>
</td>
<td id="alertValueSelect">
<input id="alertValueInput" type="text" class="inputTextValue" size="7"
oninput="ValidateCallsign(this,null);" / >
</td>
<td>
<select id="alertNotifySelect" name="alertNotifySelect" onchange="alertNotifyChanged();">
<option value="1">Text-to-speech</option>
<option value="0">Media File</option>
<option value="2">Visual Popup</option>
<option value="3">Map Center</option>
</select>
</td>
<td>
<select style="display: none" id="alertMediaSelect" onchange="alertNotifyChanged('media');"></select>
</td>
<td>
<select id="alertRepeatSelect" name="alertRepeatSelect">
<option value="2">Until Deleted</option>
<option value="3">Until Exit</option>
<option value="1">Once</option>
<option value="0">Never</option>
</select>
</td>
<td id="addButton">
<div class="button" style="min-width: 26px; width: 26px" onclick="addNewAlert();">ADD</div>
</td>
<td id="addError" style="color: red"></td>
</tr>
</table>
</div>
<br />
<div id="alertListDiv" style="margin: 4px; padding: 4px"></div>
</div>
<div id="chatSettingsDiv" class="settingsTabcontent">
<div class="mapItem">
<table align="center">
<tr>
<td title="Messaging Enable">Messaging Enable</td>
</tr>
<tr>
<td>
<input
title="Enable / Disable Messaging"
type="checkbox"
id="msgEnable"
onclick="setMsgEnable(this);"
/>
</td>
</tr>
</table>
</div>
<div class="mapItem" id="GTspotDiv">
<table align="center">
<tr>
<td title="Send and Recieve Spot Reports through the OAMS network">Spotting</td>
</tr>
<tr>
<td>
<input
title="Enable / Disable Spotting"
type="checkbox"
id="GTspotEnable"
onclick="setGTspotEnable(this);"
/>
</td>
</tr>
</table>
</div>
<br />
<div id="msgSettingsDiv" class="mapItem" style="padding: 5px">
<div class="mapItem">
<table align="center">
<tr>
<td title="New Message Alert">New Message Alert</td>
</tr>
<tr>
<td>
<select
id="msgAlertSelect"
name="msgAlertSelect"
onchange="newMessageSetting(this); alertChatMessage();"
>
<option value="0">None</option>
<option value="1">Text-to-Speech</option>
<option value="2">Media File</option>
</select>
</td>
</tr>
<tr>
<td>
<input
id="msgAlertWord"
type="text"
class="inputTextValue"
size="14"
onkeyup="if (event.keyCode === 13) {newMessageSetting(this); alertChatMessage(); }"
oninput="ValidateText(this);newMessageSetting(this);"
/>
<select id="msgAlertMedia" onchange="newMessageSetting(this); alertChatMessage();"></select>
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem" id="msgFrequencySelectDiv">
<table align="center">
<tr>
<td title="New Message Alert Frequency">Alert Frequency</td>
</tr>
<tr>
<td>
<select id="msgFrequencySelect" name="msgFrequencySelect" onchange="newMessageSetting(this);">
<option value="0">Once</option>
<option value="1">1 minute</option>
<option value="3">3 minutes</option>
<option value="5">5 minutes</option>
<option value="10">10 minutes</option>
<option value="15">15 minutes</option>
<option value="30">30 minutes</option>
<option value="60">1 hour</option>
</select>
</td>
</tr>
</table>
</div>
<div class="mapItem">
<table align="center">
<tr>
<td title="New Message Action">New Message Action</td>
</tr>
<tr>
<td>
<select id="msgActionSelect" name="msgActionSelect" onchange="newMessageSetting(this);">
<option value="0">Do nothing</option>
<option value="1">Open Messaging Window</option>
</select>
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem">
<table align="center">
<tr>
<td title="Away Mode">Away Mode</td>
</tr>
<tr>
<td>
<select id="msgAwaySelect" name="msgAwaySelect" onchange="newMessageSetting(this);">
<option value="0">Not Away</option>
<option value="1">I Am Away</option>
</select>
</td>
</tr>
</table>
</div>
<br />
<div class="mapItem" id="msgAwayTextDiv">
<table align="center">
<tr>
<td title="Away Text">Away Text</td>
</tr>
<tr>
<td>
<input id="msgAwayText" type="text" class="inputTextValue" size="30" oninput="ValidateText(this);
newMessageSetting(this);" / >
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="aboutDiv" class="settingsTabcontent">
<div class="mapItem" style="padding: 4px">
<h2><div id="aboutVersionDiv">GridTracker</div></h2>
<p>
GridTracker is a warehouse of amateur radio information presented in an easy to use interface<br />
<br />
From Live Traffic Decodes<br />
Logbooks<br />
Real-time Spot Reports<br />
Weather<br />
Current Solar Conditions and More!<br />
Learn more at
<a
href="#"
style="cursor: pointer"
onclick="require('nw.gui').Shell.openExternal('https://gridtracker.org/grid-tracker/');"
>GridTracker.org!</a
>
</p>
<p>Copyright &copy; 2022 GridTracker.org</p>
<img src="./gridview.png" /> <br />
</div>
</div>
<div id="updateSettingsDiv" class="settingsTabcontent">
<div style="left: 0; display: inline-block; height: 510px; width: 740px" id="updateText">
<embed src="./gt_update.pdf" style="width: 100%; height: 100%" frameborder="0" scrolling="yes" />
</div>
</div>
<div style="top: 0; right: 1px; position: absolute">
<button class="Xbutton" onclick="rootSettingsDiv.style.display='none';">X</button>
</div>
</div>
</div>
<div
id="alertsPopDiv"
style="
margin: 0 auto;
top: 2px;
min-height: 80px;
max-height: 80%;
left: 2px;
display: none;
background-color: white;
padding: 0px;
text-align: center;
vertical-align: middle;
position: absolute;
z-index: 650;
border: 3px groove red;
white-space: nowrap;
overflow: hidden;
"
class="roundBorder"
>
<b>New Alerts!!!</b>
<div id="alertPopListDiv" style="margin: 2px; padding: 2px"></div>
<div class="button" onclick="ackAlerts();">DISMISS</div>
</div>
<div
id="versionDiv"
style="
margin: 0 auto;
left: 0;
right: 0;
top: 0;
width: 100%;
height: 100%;
display: none;
background-color: black;
text-align: center;
vertical-align: middle;
position: absolute;
z-index: 800;
"
>
<h1>GridTracker Updated!</h1>
<div id="newVersionMustDownloadDiv" style="color: LightGreen"></div>
<table align="center">
<tr>
<td>
<div class="button" onclick="cancelVersion();">No, thanks.</div>
</td>
<td>
<div class="button" onclick="onExitAppToGoWebsite();">Yes, please!</div>
</td>
</tr>
<tr>
<td>
Stop asking?<input type="checkbox" checked="false" id="stopAskingCheckbox" onclick="stopAsking(this);" />
</td>
</tr>
</table>
</div>
<div
id="upToDateDiv"
style="
margin: 0 auto;
left: 0;
right: 0;
top: 0;
height: 100%;
width: 100%;
display: none;
background-color: black;
text-align: center;
vertical-align: middle;
position: absolute;
z-index: 800;
white-space: nowrap;
overflow: hidden;
"
>
<h2>GridTracker is up to date!</h2>
<div class="button" onclick="closeUpdateToDateDiv();">OK</div>
</div>
<div id="selectNodeDiv" style="-webkit-user-select: text; user-select: text; display: block; z-index: -10000"></div>
</body>
</html>