// GridTracker ©2020 N0TTL var fs = require('fs'); var callRoster = {}; var g_blockedCalls = {}; var g_blockedCQ = {}; var g_blockedDxcc = {}; var g_scriptReport = {}; var g_worked = {}; var g_confirmed = {}; var g_modes = {}; var g_modes_phone = {}; var g_currentUSCallsigns = null; var r_currentUSState = ""; var r_currentDXCCs = -1; var r_callsignManifest = null; var g_rosterSettings = {}; var g_day = 0; var g_menu = null; var g_callMenu = null; var g_ageMenu = null; var g_callingMenu = null; var g_compactMenu = null; var g_targetHash = ""; var g_clearIgnores = null; var g_clearIgnoresCall = null; var g_dxccMenu = null; var g_targetDxcc = -1; var g_clearDxccIgnore = null; var g_clearDxccIgnoreMainMenu = null; var g_CQMenu = null; var g_targetCQ = ""; var g_clearCQIgnore = null; var g_clearCQIgnoreMainMenu = null; var g_timerInterval = null; var g_regFocus = false; var g_awards = {}; var g_awardTypes = {}; var g_awardTracker = {}; var g_callsignDatabaseDXCC = {}; var g_callsignDatabaseUS = {} var g_callsignDatabaseUSplus = {}; var g_modeColors = {}; g_modeColors["FT4"] = '1111FF'; g_modeColors["FT8"] = '11FF11'; g_modeColors["JT4"] = 'EE1111'; g_modeColors["JT9"] = '7CFC00'; g_modeColors["JT65"] = 'E550E5'; g_modeColors["QRA64"] = 'FF00FF'; g_modeColors["MSK144"] = '4949FF'; var g_defaultSettings = { "callsign":"all", "hunting":"dxcc", "huntNeed":"confirmed", "requireGrid":true, "wantMaxDT":false, "wantMinDB":false, "wantMinFreq":false, "wantMaxFreq":false, "maxDT":0.5, "minDb":-25, "minFreq":0, "maxFreq":3500, "noMyDxcc":false, "onlyMyDxcc":false, "noMsg":false, "noMsgValue": "CQ RU", "onlyMsg":false, "onlyMsgValue": "CQ FD", "cqOnly":true, "usesLoTW":false, "maxLoTW":27, "useseQSL":false, "usesOQRS":false, "onlySpot":false, "allOnlyNew":false, "useRegex":false, "callsignRegex":"", "realtime":false, "wanted":{ "huntCallsign":false, "huntGrid":true, "huntDXCC":true, "huntCQz":false, "huntITUz":false, "huntState":false, "huntCounty": false, "huntCont": false, "huntPX":false, "huntQRZ":true, "huntOAMS":false }, "columns":{ "Band": false, "Mode" : false, "Calling":true, "Msg":false, "DXCC":true, "Flag":true, "State":true, "County":true, "Cont":true, "dB":true, "Freq":false, "DT":false, "Dist":false, "Azim":true, "CQz" : false, "ITUz" : false, "PX" : true, "LoTW":false, "eQSL":false, "OQRS":false, "Spot":false, "Life":false, "OAMS":true, "Age":true }, "reference":0, "controls":true, "compact": false, "settingProfiles":false, "lastSortIndex":6, "lastSortReverse":1 } document.addEventListener("dragover", function (event) { event.preventDefault(); }); document.addEventListener("drop", function (event) { event.preventDefault(); }); window.addEventListener("message", receiveMessage, false); if (typeof localStorage.blockedCQ == 'undefined') { localStorage.blockedCQ = "{}"; } if (typeof localStorage.awardTracker == 'undefined') { localStorage.awardTracker = "{}"; g_rosterSettings = {}; writeRosterSettings(); } g_awardTracker = JSON.parse(localStorage.awardTracker); if (typeof localStorage.blockedCalls != 'undefined' ) { g_blockedCalls = JSON.parse(localStorage.blockedCalls); g_blockedCQ = JSON.parse(localStorage.blockedCQ); g_blockedDxcc = JSON.parse(localStorage.blockedDxcc); } function storeBlocks() { localStorage.blockedCalls = JSON.stringify(g_blockedCalls); localStorage.blockedCQ = JSON.stringify(g_blockedCQ); localStorage.blockedDxcc = JSON.stringify(g_blockedDxcc); } function storeAwardTracker() { localStorage.awardTracker = JSON.stringify(g_awardTracker); } function loadSettings() { var readSettings = {}; if ( typeof localStorage.rosterSettings != "undefined" ) { readSettings = JSON.parse(localStorage.rosterSettings); } g_rosterSettings = deepmerge(g_defaultSettings, readSettings); if ( "GT" in g_rosterSettings.columns ) delete g_rosterSettings.columns.GT; writeRosterSettings(); } function writeRosterSettings() { localStorage.rosterSettings = JSON.stringify(g_rosterSettings); } function isKnownCallsignDXCC(dxcc) { if ( dxcc in g_callsignDatabaseDXCC ) return true; return false; } function isKnownCallsignUS(dxcc) { if ( dxcc in g_callsignDatabaseUS ) return true; return false; } function isKnownCallsignUSplus(dxcc) { if ( dxcc in g_callsignDatabaseUSplus ) return true; return false; } function timeNowSec() { return parseInt(Date.now() / 1000); } function lockNewWindows() { if ( typeof nw != 'undefined' ) { var gui = require('nw.gui'); var win = gui.Window.get(); win.on('new-win-policy', function (frame, url, policy) { gui.Shell.openExternal(url); policy.ignore(); }); } } function myCallCompare(a, b) { return a.DEcall.localeCompare(b.DEcall); } function myGridCompare(a, b) { var gridA = (a.grid ? a.grid : "0"); var gridB = (b.grid ? b.grid : "0"); if (gridA > gridB) return 1; if (gridA < gridB) return -1; return 0; } function myDxccCompare(a, b) { return window.opener.myDxccCompare(a,b); } function myTimeCompare(a, b) { if (a.age > b.age) return 1; if (a.age < b.age) return -1; return 0; } function myLifeCompare(a, b) { if (a.life > b.life) return 1; if (a.life < b.life) return -1; return 0; } function mySpotCompare(a, b) { if (a.spot.when > b.spot.when) return 1; if (a.spot.when < b.spot.when) return -1; return 0; } function myDbCompare(a, b) { if (a.RSTsent > b.RSTsent) return 1; if (a.RSTsent < b.RSTsent) return -1; return 0; } function myFreqCompare(a, b) { if (a.delta > b.delta) return 1; if (a.delta < b.delta) return -1; return 0; } function myDTCompare(a, b) { if (a.dt > b.dt) return 1; if (a.dt < b.dt) return -1; return 0; } function myDistanceCompare(a, b) { if (a.distance > b.distance) return 1; if (a.distance < b.distance) return -1; return 0; } function myHeadingCompare(a, b) { if (a.heading > b.heading) return 1; if (a.heading < b.heading) return -1; return 0; } function myStateCompare(a, b) { if (a.state == null ) return 1; if (b.state == null ) return -1; if (a.state > b.state) return 1; if (a.state < b.state) return -1; return 0; } function myCQCompare(a, b) { return a.DXcall.localeCompare(b.DXcall); } function myWPXCompare(a, b) { if (a.px == null ) return 1; if (b.px == null ) return -1; if (a.px > b.px) return 1; if (a.px < b.px) return -1; return 0; } function myCntyCompare(a, b) { if (a.cnty == null ) return 1; if (b.cnty == null ) return -1; if (a.cnty.substr(3) > b.cnty.substr(3)) return 1; if (a.cnty.substr(3) < b.cnty.substr(3)) return -1; return 0; } function myContCompare(a, b) { if (a.cont == null ) return 1; if (b.cont == null ) return -1; if (a.cont > b.cont) return 1; if (a.cont < b.cont) return -1; return 0; } function myGTCompare(a, b) { if ( a.style.gt != 0 && b.style.gt == 0 ) return 1; if ( a.style.gt == 0 && b.style.gt != 0 ) return -1; return 0; } var r_sortFunction = [myCallCompare, myGridCompare, myDbCompare, myDTCompare, myFreqCompare, myDxccCompare, myTimeCompare,myDistanceCompare, myHeadingCompare, myStateCompare,myCQCompare, myWPXCompare, myLifeCompare, mySpotCompare, myGTCompare, myCntyCompare, myContCompare]; function showRosterBox(sortIndex) { if (g_rosterSettings.lastSortIndex != sortIndex) { g_rosterSettings.lastSortIndex = sortIndex; g_rosterSettings.lastSortReverse = 0; } else { g_rosterSettings.lastSortReverse ^= 1; } writeRosterSettings(); window.opener.goProcessRoster(); } function hashMaker(band, mode) { //"Current Band & Mode" if ( g_rosterSettings.reference == 0 || g_rosterSettings.reference == 6) return band + mode; //"Current Band, Any Mode" if ( g_rosterSettings.reference == 1 ) return band; //"Current Band, Any Digi Mode" if ( g_rosterSettings.reference == 2 ) return band + "dg"; //"Current Mode, Any Band" if ( g_rosterSettings.reference == 3 ) return mode; //"Any Band, Any Mode" if ( g_rosterSettings.reference == 4 ) return ""; //"Any Band, Any Digi Mode" if ( g_rosterSettings.reference == 5 ) return "dg"; } function processRoster(roster) { callRoster = roster; viewRoster(); } function viewRoster() { var bands = Object(); var modes = Object(); var callMode = g_rosterSettings.callsign; var onlyHits = false; var isAwardTracker = false; if ( callMode == "hits" ) { callMode = "all"; onlyHits = true; } if ( referenceNeed.value == 6 ) { callMode = "all"; onlyHits = false; isAwardTracker = true; g_rosterSettings.huntNeed = "confirmed"; } var canMsg = (window.opener.g_mapSettings.offlineMode == false && window.opener.g_appSettings.gtShareEnable == "true" && window.opener.g_appSettings.gtMsgEnable == "true" ); if ( window.opener.g_callsignLookups.lotwUseEnable == true ) { usesLoTWDiv.style.display = "inline-block"; if ( g_rosterSettings.usesLoTW == true ) { maxLoTW.style.display = "inline-block"; maxLoTWView.style.display = "inline-block"; } else { maxLoTW.style.display = "none"; maxLoTWView.style.display = "none"; } } else { usesLoTWDiv.style.display = "none"; maxLoTW.style.display = "none"; maxLoTWView.style.display = "none"; } if ( window.opener.g_callsignLookups.eqslUseEnable == true ) useseQSLDiv.style.display = "block"; else useseQSLDiv.style.display = "none"; if ( window.opener.g_callsignLookups.oqrsUseEnable == true ) usesOQRSDiv.style.display = "block"; else usesOQRSDiv.style.display = "none"; if ( g_rosterSettings.columns.Spot == true ) onlySpotDiv.style.display = "block"; else onlySpotDiv.style.display = "none"; if ( callMode == "all" ) allOnlyNewDiv.style.display = "block"; else allOnlyNewDiv.style.display = "none"; var now = timeNowSec(); for ( callHash in callRoster ) { var call = callRoster[callHash].DEcall; callRoster[callHash].tx = true; callRoster[callHash].callObj.shouldAlert = false; callRoster[callHash].callObj.reason = Array(); callRoster[callHash].callObj.awardReason = "Callsign"; if ( now - callRoster[callHash].callObj.age > window.opener.g_mapSettings.rosterTime ) { callRoster[callHash].tx = false; callRoster[callHash].alerted = false; callRoster[callHash].callObj.qrz = false; callRoster[callHash].callObj.reset = true; continue; } if ( window.opener.g_instances[callRoster[callHash].callObj.instance].crEnable == false ) { callRoster[callHash].tx = false; continue; } if ( call in g_blockedCalls ) { callRoster[callHash].tx = false; continue; } if ( callRoster[callHash].DXcall + " from All" in g_blockedCQ || callRoster[callHash].DXcall + " from " + window.opener.g_dxccToAltName[callRoster[callHash].callObj.dxcc] in g_blockedCQ ) { callRoster[callHash].tx = false; continue; } if ( callRoster[callHash].callObj.dxcc in g_blockedDxcc ) { callRoster[callHash].tx = false; continue; } if ( g_rosterSettings.cqOnly == true && callRoster[callHash].callObj.CQ == false ) { callRoster[callHash].tx = false; continue; } if ( g_rosterSettings.useRegex && g_rosterSettings.callsignRegex.length > 0 ) { try { if ( !(call.match(g_rosterSettings.callsignRegex)) ) { callRoster[callHash].tx = false; continue; } } catch (e) { } } if ( g_rosterSettings.requireGrid == true && callRoster[callHash].callObj.grid.length != 4 ) { callRoster[callHash].tx = false; continue; } if ( g_rosterSettings.wantMinDB == true && callRoster[callHash].message.SR < g_rosterSettings.minDb ) { callRoster[callHash].tx = false; continue; } if ( g_rosterSettings.wantMaxDT == true && Math.abs(callRoster[callHash].message.DT) > g_rosterSettings.maxDT ) { callRoster[callHash].tx = false; continue; } if ( g_rosterSettings.wantMinFreq == true && callRoster[callHash].message.DF < g_rosterSettings.minFreq ) { callRoster[callHash].tx = false; continue; } if ( g_rosterSettings.wantMaxFreq == true && callRoster[callHash].message.DF > g_rosterSettings.maxFreq ) { callRoster[callHash].tx = false; continue; } if ( g_rosterSettings.noMsg == true ) { try { if ( callRoster[callHash].callObj.msg.match(g_rosterSettings.noMsgValue) ) { callRoster[callHash].tx = false; continue; } } catch (e) { } } if ( g_rosterSettings.onlyMsg == true ) { try { if ( !(callRoster[callHash].callObj.msg.match(g_rosterSettings.onlyMsgValue)) ) { callRoster[callHash].tx = false; continue; } } catch (e) { } } if ( callRoster[callHash].callObj.dxcc == window.opener.g_myDXCC ) { if ( g_rosterSettings.noMyDxcc == true ) { callRoster[callHash].tx = false; continue; } } else { if ( g_rosterSettings.onlyMyDxcc == true ) { callRoster[callHash].tx = false; continue; } } if ( window.opener.g_callsignLookups.lotwUseEnable == true && g_rosterSettings.usesLoTW == true ) { if ( !(call in window.opener.g_lotwCallsigns) ) { callRoster[callHash].tx = false; continue; } } if ( window.opener.g_callsignLookups.eqslUseEnable == true && g_rosterSettings.useseQSL == true ) { if ( !(call in window.opener.g_eqslCallsigns) ) { callRoster[callHash].tx = false; continue; } } if ( window.opener.g_callsignLookups.oqrsUseEnable == true && g_rosterSettings.usesOQRS == true ) { if ( !(call in window.opener.g_oqrsCallsigns) ) { callRoster[callHash].tx = false; continue; } } if ( callMode != "all" ) { if ( callRoster[callHash].DXcall == "CQ DX" && callRoster[callHash].callObj.dxcc == window.opener.g_myDXCC ) { callRoster[callHash].tx = false; continue; } { var hash = call + hashMaker(callRoster[callHash].callObj.band , callRoster[callHash].callObj.mode) ; if ( callMode == "worked" && hash in g_worked.call ) { callRoster[callHash].tx = false; continue; } if ( callMode == "confirmed" && hash in g_confirmed.call ) { callRoster[callHash].tx = false; continue; } } if ( g_rosterSettings.hunting == "grid" ) { var hash = callRoster[callHash].callObj.grid.substr(0,4) + hashMaker(callRoster[callHash].callObj.band , callRoster[callHash].callObj.mode); if ( g_rosterSettings.huntNeed == "worked" && hash in g_worked.grid ) { callRoster[callHash].tx = false; continue; } if ( g_rosterSettings.huntNeed == "confirmed" && hash in g_confirmed.grid ) { callRoster[callHash].tx = false; continue; } if ( callRoster[callHash].callObj.grid.length == 0 ) { callRoster[callHash].tx = false; continue; } continue; } if ( g_rosterSettings.hunting == "dxcc" ) { var hash = String(callRoster[callHash].callObj.dxcc) + hashMaker(callRoster[callHash].callObj.band , callRoster[callHash].callObj.mode); if ( g_rosterSettings.huntNeed == "worked" & hash in g_worked.dxcc ) { callRoster[callHash].tx = false; continue; } if ( g_rosterSettings.huntNeed == "confirmed" && hash in g_confirmed.dxcc ) { callRoster[callHash].tx = false; continue; } continue; } if ( g_rosterSettings.hunting == "dxccs" && r_currentDXCCs != -1 ) { if ( callRoster[callHash].callObj.dxcc != r_currentDXCCs ) { callRoster[callHash].tx = false; continue; } } if ( g_rosterSettings.hunting == "wpx" ) { if ( String(callRoster[callHash].callObj.px) == null ) { callRoster[callHash].tx = false; continue; } var hash = String(callRoster[callHash].callObj.px) + hashMaker(callRoster[callHash].callObj.band , callRoster[callHash].callObj.mode); if ( g_rosterSettings.huntNeed == "worked" & hash in g_worked.px ) { callRoster[callHash].tx = false; continue; } if ( g_rosterSettings.huntNeed == "confirmed" && hash in g_confirmed.px ) { callRoster[callHash].tx = false; continue; } continue; } if ( g_rosterSettings.hunting == "cq" ) { var workedTotal = confirmedTotal = callRoster[callHash].callObj.cqza.length; if ( workedTotal == 0 ) { callRoster[callHash].tx = false; continue; } var workedFound = confirmedFound = 0; for ( index in callRoster[callHash].callObj.cqza ) { var hash = callRoster[callHash].callObj.cqza[index] + hashMaker(callRoster[callHash].callObj.band , callRoster[callHash].callObj.mode); if ( hash in g_worked.cqz ) workedFound++; if ( hash in g_confirmed.cqz ) confirmedFound++; } if ( g_rosterSettings.huntNeed == "worked" && workedFound == workedTotal ) { callRoster[callHash].tx = false; continue; } if ( g_rosterSettings.huntNeed == "confirmed" && confirmedFound == confirmedTotal ) { callRoster[callHash].tx = false; continue; } continue; } if ( g_rosterSettings.hunting == "itu" ) { var workedTotal = confirmedTotal = callRoster[callHash].callObj.ituza.length; if ( workedTotal == 0 ) { callRoster[callHash].tx = false; continue; } var workedFound = confirmedFound = 0; for ( index in callRoster[callHash].callObj.ituza ) { var hash = callRoster[callHash].callObj.ituza[index] + hashMaker(callRoster[callHash].callObj.band , callRoster[callHash].callObj.mode); if ( hash in g_worked.ituz ) workedFound++; if ( hash in g_confirmed.ituz ) confirmedFound++; } if ( g_rosterSettings.huntNeed == "worked" && workedFound == workedTotal ) { callRoster[callHash].tx = false; continue; } if ( g_rosterSettings.huntNeed == "confirmed" && confirmedFound == confirmedTotal ) { callRoster[callHash].tx = false; continue; } if ( callRoster[callHash].callObj.grid.length == 0 ) { callRoster[callHash].tx = false; continue; } continue; } if ( g_rosterSettings.hunting == "usstates" && window.opener.g_callsignLookups.ulsUseEnable == true ) { var state = callRoster[callHash].callObj.state; var finalDxcc = callRoster[callHash].callObj.dxcc; if ( finalDxcc == 291 || finalDxcc == 110 || finalDxcc == 6 ) { if ( state in window.opener.g_StateData ) { var hash = state + hashMaker(callRoster[callHash].callObj.band , callRoster[callHash].callObj.mode); if ( g_rosterSettings.huntNeed == "worked" && hash in g_worked.state ) { callRoster[callHash].tx = false; continue; } if ( g_rosterSettings.huntNeed == "confirmed" && hash in g_confirmed.state ) { callRoster[callHash].tx = false; continue; } } else callRoster[callHash].tx = false; } else callRoster[callHash].tx = false; continue; } if ( g_rosterSettings.hunting == "usstate" && g_currentUSCallsigns ) { if ( call in g_currentUSCallsigns ) { } else { callRoster[callHash].tx = false; continue; } continue; } } if ( isAwardTracker ) { var tx = false; var baseHash = hashMaker(callRoster[callHash].callObj.band , callRoster[callHash].callObj.mode); for ( var award in g_awardTracker ) { if ( g_awardTracker[award].enable ) { tx = testAward(award, callRoster[callHash].callObj, baseHash ); if ( tx ) { var x = g_awardTracker[award]; callRoster[callHash].callObj.awardReason = g_awards[x.sponsor].awards[x.name].tooltip+ " (" + g_awards[x.sponsor].sponsor + ")"; break; } } } callRoster[callHash].tx = tx; } } var hasGtPin = false; var newCallList = Array(); var inversionAlpha = "DD"; var row = "#000000"; var bold = "#000000;text-shadow: 0px 0px 1px black;"; var unconf = "background-clip:content-box;box-shadow: 0 0 8px 3px inset "; for (var callHash in callRoster) { // Special case check for called station if ( callRoster[callHash].callObj.qrz == true && callRoster[callHash].tx == false ) { // The instance has to be enabled if ( window.opener.g_instances[callRoster[callHash].callObj.instance].crEnable == true ) { // Calling us, but we wouldn't normally display // If they are not ignored or we're in a QSO with them, var it through if ( ( !( callRoster[callHash].DEcall in g_blockedCalls) && !( callRoster[callHash].callObj.dxcc in g_blockedDxcc) ) || window.opener.g_instances[callRoster[callHash].callObj.instance].status.DXcall == callRoster[callHash].DEcall ) { callRoster[callHash].tx = true; } } } if (callRoster[callHash].callObj.dxcc != -1 && callRoster[callHash].tx == true) { var workHash = hashMaker(callRoster[callHash].callObj.band , callRoster[callHash].callObj.mode); var call = callRoster[callHash].DEcall; var testHash = call + workHash; var colorObject = Object(); var callPointer = ( callRoster[callHash].callObj.CQ == true ? "cursor:pointer" : "" ); var didWork = false; var callsign = "#FFFF00"; var grid = "#00FFFF"; var calling = "#90EE90"; var dxcc = "#FFA500"; var state = "#90EE90"; var cnty = "#CCDD00"; var cont = "#00DDDD"; var cqz = "#DDDDDD"; var ituz = "#DDDDDD"; var wpx = "#FFFF00"; hasGtPin = false; shouldAlert = false; var callsignBg , gridBg , callingBg , dxccBg , stateBg , cntyBg, contBg, cqzBg , ituzBg , wpxBg, gtBg; var callConf, gridConf , callingConf , dxccConf , stateConf , cntyConf, contConf, cqzConf , ituzConf , wpxConf; callsignBg = gridBg = callingBg = dxccBg = stateBg = cntyBg = contBg = cqzBg = ituzBg = wpxBg = gtBg = row; callConf = gridConf = callingConf = dxccConf = stateConf = cntyConf = contConf = cqzConf = ituzConf = wpxConf = ""; if ( testHash in g_worked.call ) { didWork = true; callConf = unconf + callsign + inversionAlpha + ";"; if ( testHash in g_confirmed.call ) { callPointer = "text-decoration: line-through; "; callConf = ""; } } if ( call in window.opener.g_gtCallsigns && window.opener.g_gtCallsigns[call] in window.opener.g_gtFlagPins && window.opener.g_gtFlagPins[window.opener.g_gtCallsigns[call]].canmsg == true ) { // grab the CID colorObject.gt = window.opener.g_gtCallsigns[call]; hasGtPin = true; } else colorObject.gt = 0; if ( callMode == "all" ) { if ( allOnlyNew.checked == true && didWork && callRoster[callHash].callObj.qrz == false) { callRoster[callHash].tx = false; continue; } if ( huntCallsign.checked == true ) { if ( g_rosterSettings.huntNeed == "worked" && didWork ) { callRoster[callHash].callObj.reason.push("call"); callConf = unconf + callsign + inversionAlpha + ";"; } if ( didWork && (g_rosterSettings.huntNeed == "confirmed" && !(testHash in g_confirmed.call) ) ) { shouldAlert = true; callRoster[callHash].callObj.reason.push("call"); callConf = unconf + callsign + inversionAlpha + ";"; } else if ( didWork && (g_rosterSettings.huntNeed == "confirmed" && (testHash in g_confirmed.call) ) ) { callConf = ""; } else if ( !didWork ) { shouldAlert = true; callConf = ""; callsignBg = callsign + inversionAlpha; callsign = bold; } } if ( huntQRZ.checked == true && callRoster[callHash].callObj.qrz == true ) { shouldAlert = true; callRoster[callHash].callObj.reason.push("qrz"); } if ( huntOAMS.checked == true && hasGtPin == true ) { shouldAlert = true; callRoster[callHash].callObj.reason.push("oams"); } if ( huntGrid.checked == true && callRoster[callHash].callObj.grid.length > 1 ) { var hash = callRoster[callHash].callObj.grid.substr(0,4) + workHash; if ( (g_rosterSettings.huntNeed == "worked" && !(hash in g_worked.grid) ) || (g_rosterSettings.huntNeed == "confirmed" && !(hash in g_confirmed.grid) )) { shouldAlert = true; callRoster[callHash].callObj.reason.push("grid"); if ( g_rosterSettings.huntNeed == "confirmed" && (hash in g_worked.grid) ) { gridConf = unconf + grid + inversionAlpha + ";"; } else { gridBg = grid + inversionAlpha; grid = bold; } } } if ( huntDXCC.checked == true ) { var hash = String(callRoster[callHash].callObj.dxcc) +workHash; if ( (g_rosterSettings.huntNeed == "worked" && !(hash in g_worked.dxcc) ) || (g_rosterSettings.huntNeed == "confirmed" && !(hash in g_confirmed.dxcc) )) { shouldAlert = true; callRoster[callHash].callObj.reason.push("dxcc"); if ( g_rosterSettings.huntNeed == "confirmed" && (hash in g_worked.dxcc) ) { dxccConf = unconf + dxcc + inversionAlpha + ";"; } else { dxccBg = dxcc + inversionAlpha; dxcc = bold; } } } if ( huntState.checked == true && window.opener.g_callsignLookups.ulsUseEnable == true ) { var stateSearch = callRoster[callHash].callObj.state; var finalDxcc = callRoster[callHash].callObj.dxcc; if ( finalDxcc == 291 || finalDxcc == 110 || finalDxcc == 6 ) { if ( stateSearch in window.opener.g_StateData ) { var hash = stateSearch + workHash; if ( (g_rosterSettings.huntNeed == "worked" && !(hash in g_worked.state)) || ( g_rosterSettings.huntNeed == "confirmed" && !(hash in g_confirmed.state))) { shouldAlert = true; callRoster[callHash].callObj.reason.push("usstates"); if ( g_rosterSettings.huntNeed == "confirmed" && (hash in g_worked.state) ) { stateConf = unconf + state + inversionAlpha + ";"; } else { stateBg = state + inversionAlpha ; state = bold; } } } } } if ( huntCounty.checked == true && window.opener.g_callsignLookups.ulsUseEnable == true ) { var finalDxcc = callRoster[callHash].callObj.dxcc; if ( callRoster[callHash].callObj.cnty && ( finalDxcc == 291 || finalDxcc == 110 || finalDxcc == 6 || finalDxcc == 202) && callRoster[callHash].callObj.cnty.length > 0 ) { var hash = callRoster[callHash].callObj.cnty + workHash; if ( (g_rosterSettings.huntNeed == "worked" && !(hash in g_worked.cnty)) || ( g_rosterSettings.huntNeed == "confirmed" && !(hash in g_confirmed.cnty)) || callRoster[callHash].callObj.qual == false) { if ( callRoster[callHash].callObj.qual == false ) { var counties = window.opener.g_zipToCounty[callRoster[callHash].callObj.zipcode]; var foundHit = false; for ( var cnt in counties ) { var hh = counties[cnt] + workHash; callRoster[callHash].callObj.cnty = counties[cnt]; if ( g_rosterSettings.huntNeed == "worked" && !(hh in g_worked.cnty) ) { foundHit = true; break; } if ( g_rosterSettings.huntNeed == "confirmed" && !(hh in g_confirmed.cnty)) { foundHit = true; break; } } if ( foundHit ) shouldAlert = true; } else { shouldAlert = true; } if ( shouldAlert ) { callRoster[callHash].callObj.reason.push("uscnty"); if ( g_rosterSettings.huntNeed == "confirmed" && (hash in g_worked.cnty) ) { cntyConf = unconf + cnty + inversionAlpha + ";"; } else { cntyBg = cnty + inversionAlpha ; cnty = bold; } } } } } if ( huntCQz.checked == true ) { var workedTotal = confirmedTotal = callRoster[callHash].callObj.cqza.length; var workedFound = confirmedFound = 0; for ( index in callRoster[callHash].callObj.cqza ) { var hash = callRoster[callHash].callObj.cqza[index] + workHash; if ( hash in g_worked.cqz ) workedFound++; if ( hash in g_confirmed.cqz ) confirmedFound++; } if ( ( g_rosterSettings.huntNeed == "worked" && workedFound != workedTotal ) || ( g_rosterSettings.huntNeed == "confirmed" && confirmedFound != confirmedTotal ) ) { shouldAlert = true; callRoster[callHash].callObj.reason.push("cq"); if ( g_rosterSettings.huntNeed == "confirmed" && workedFound == workedTotal ) { cqzConf = unconf + cqz + inversionAlpha + ";"; } else { cqzBg = cqz + inversionAlpha; cqz = bold; } } } if ( huntITUz.checked == true ) { var workedTotal = confirmedTotal = callRoster[callHash].callObj.ituza.length; var workedFound = confirmedFound = 0; for ( index in callRoster[callHash].callObj.ituza ) { var hash = callRoster[callHash].callObj.ituza[index] + workHash; if ( hash in g_worked.ituz ) workedFound++; if ( hash in g_confirmed.ituz ) confirmedFound++; } if ( ( g_rosterSettings.huntNeed == "worked" && workedFound != workedTotal ) || ( g_rosterSettings.huntNeed == "confirmed" && confirmedFound != confirmedTotal ) ) { shouldAlert = true; callRoster[callHash].callObj.reason.push("itu"); if ( g_rosterSettings.huntNeed == "confirmed" && workedFound == workedTotal ) { ituzConf = unconf + ituz + inversionAlpha + ";"; } else { ituzBg = ituz + inversionAlpha; ituz = bold; } } } if ( huntPX.checked == true && callRoster[callHash].callObj.px) { var hash = String(callRoster[callHash].callObj.px) + workHash; if ( (g_rosterSettings.huntNeed == "worked" && !(hash in g_worked.px) ) || (g_rosterSettings.huntNeed == "confirmed" && !(hash in g_confirmed.px) )) { shouldAlert = true; callRoster[callHash].callObj.reason.push("wpx"); if ( g_rosterSettings.huntNeed == "confirmed" && (hash in g_worked.px) ) { wpxConf = unconf + wpx + inversionAlpha + ";"; } else { wpxBg = wpx + inversionAlpha ; wpx = bold; } } } if ( huntCont.checked == true && callRoster[callHash].callObj.cont) { var hash = String(callRoster[callHash].callObj.cont) + workHash; if ( (g_rosterSettings.huntNeed == "worked" && !(hash in g_worked.cont) ) || (g_rosterSettings.huntNeed == "confirmed" && !(hash in g_confirmed.cont) )) { shouldAlert = true; callRoster[callHash].callObj.reason.push("cont"); if ( g_rosterSettings.huntNeed == "confirmed" && (hash in g_worked.cont) ) { contConf = unconf + cont + inversionAlpha + ";"; } else { contBg = cont + inversionAlpha ; cont = bold; } } } } if ( callRoster[callHash].callObj.DXcall == window.opener.myDEcall ) { callingBg = "#0000FF" + inversionAlpha; calling = "#FFFF00;text-shadow: 0px 0px 2px #FFFF00" } else if ( callRoster[callHash].callObj.CQ == true && g_rosterSettings.cqOnly == false ) { callingBg = calling + inversionAlpha; calling = bold;} colorObject.callsign = "style='"+callConf+"background-color:"+callsignBg+";color:"+callsign+";"+callPointer+"'" ; colorObject.grid = "style='"+gridConf+"background-color:"+gridBg+";color:"+grid+";cursor:pointer'"; colorObject.calling = "style='"+callingConf+"background-color:"+callingBg+";color:"+calling+"'"; colorObject.dxcc = "style='"+dxccConf+"background-color:"+dxccBg+";color:"+dxcc+"'"; colorObject.state = "style='"+stateConf+"background-color:"+stateBg+";color:"+state+"'"; colorObject.cnty = "style='"+cntyConf+"background-color:"+cntyBg+";color:"+cnty+"'"; colorObject.cont = "style='"+contConf+"background-color:"+contBg+";color:"+cont+"'"; colorObject.cqz = "style='"+cqzConf+"background-color:"+cqzBg+";color:"+cqz+"'"; colorObject.ituz = "style='"+ituzConf+"background-color:"+ituzBg+";color:"+ituz+"'"; colorObject.px = "style='"+wpxConf+"background-color:"+wpxBg+";color:"+wpx+"'"; if ( didWork && shouldAlert ) shouldAlert = false; callRoster[callHash].callObj.shouldAlert = shouldAlert; callRoster[callHash].callObj.style = colorObject; if ( g_rosterSettings.columns.Spot ) { callRoster[callHash].callObj.spot = window.opener.getSpotTime( callRoster[callHash].callObj.DEcall + callRoster[callHash].callObj.mode + callRoster[callHash].callObj.band + callRoster[callHash].callObj.grid ); if ( callRoster[callHash].callObj.spot == null ) { callRoster[callHash].callObj.spot = { "when":0, "snr":0 }; } } else callRoster[callHash].callObj.spot = { "when":0, "snr":0 }; modes[callRoster[callHash].callObj.mode] = true; bands[callRoster[callHash].callObj.band] = true; newCallList.push(callRoster[callHash].callObj); } } if ( g_rosterSettings.compact == false ) { newCallList.sort(r_sortFunction[g_rosterSettings.lastSortIndex]); if ( g_rosterSettings.lastSortReverse == 1 ) { newCallList.reverse(); } } else { // Age sort for now... make this happen Tag newCallList.sort(r_sortFunction[6]).reverse(); } var showBands = (Object.keys(bands).length > 1?true:false)||g_rosterSettings.columns.Band; var showModes = (Object.keys(modes).length > 1?true:false)||g_rosterSettings.columns.Mode; var worker = "" if ( g_rosterSettings.compact == false ) { worker = "
Callsign | "; if ( showBands ) { worker += "Band | "; } if ( showModes ) { worker += "Mode | "; } worker += "Grid | "; if ( g_rosterSettings.columns.Calling ) worker += "Calling | "; if ( g_rosterSettings.columns.Msg ) worker += "Msg | "; if ( g_rosterSettings.columns.DXCC ) worker += "DXCC | "; if ( g_rosterSettings.columns.Flag ) worker += "Flag | "; if ( g_rosterSettings.columns.State ) worker += "State | "; if ( g_rosterSettings.columns.County ) worker += "County | "; if ( g_rosterSettings.columns.Cont ) worker += "Cont | "; if ( g_rosterSettings.columns.dB ) worker += "dB | "; if ( g_rosterSettings.columns.Freq ) worker += "Freq | "; if ( g_rosterSettings.columns.DT ) worker += "DT | "; if ( g_rosterSettings.columns.Dist ) worker += "Dist("+window.opener.distanceUnit.value.toLowerCase()+") | "; if ( g_rosterSettings.columns.Azim ) worker += "Azim | "; if ( g_rosterSettings.columns.CQz ) worker += "CQz | "; if ( g_rosterSettings.columns.ITUz ) worker += "ITUz | "; if ( g_rosterSettings.columns.PX ) worker += "PX | "; if ( window.opener.g_callsignLookups.lotwUseEnable == true && g_rosterSettings.columns.LoTW ) worker += "LoTW | "; if ( window.opener.g_callsignLookups.eqslUseEnable == true && g_rosterSettings.columns.eQSL ) worker += "eQSL | "; if ( window.opener.g_callsignLookups.oqrsUseEnable == true && g_rosterSettings.columns.OQRS ) worker += "OQRS | "; if ( g_rosterSettings.columns.Spot ) worker += "Spot | "; if ( g_rosterSettings.columns.Life ) worker += "Life | "; if ( g_rosterSettings.columns.OAMS ) worker += "OAM | "; if ( g_rosterSettings.columns.Age ) worker += "Age | "; } else { worker = '
---|
"; worker += "Name"; worker += " | "; worker += ""; worker += "Award"; worker += " | "; worker += ""; worker += "Track"; worker += " | "; worker += ""; worker += ""; worker += " | "; worker += "
" + award.name +" - "+award.sponsor ); cell.style.textAlign = "left"; cell.style.color = "lightblue"; createCellHtml(row, "
" + (allEndorse? "":baseAward?"
":baseCount>0?"
":"
"), tooltip);
createCell(row, "enable" , award.enable, award.enable, "Toggle Tracking", true);
createCellHtml(row, "
");
}
}
function deleteAwardTracker( sender )
{
var id = sender.parentNode.parentNode.id;
delete g_awardTracker[id];
storeAwardTracker();
resetAwardAdd();
updateAwardList();
window.opener.goProcessRoster();
}
function awardCheckboxChanged( sender )
{
var awardId = sender.target.parentNode.parentNode.id;
g_awardTracker[sender.target.parentNode.parentNode.id][sender.target.name] = sender.target.checked;
storeAwardTracker();
window.opener.goProcessRoster();
}
function awardValueChanged( sender )
{
var awardId = sender.target.parentNode.parentNode.id;
g_awardTracker[sender.target.parentNode.parentNode.id][sender.target.name] = sender.target.value;
storeAwardTracker();
window.opener.goProcessRoster();
}
function createCell( row, target, value, data = null, title = null, checkbox = false)
{
var cell = row.insertCell();
if ( data == null )
cell.innerHTML = value;
if ( title )
cell.title = title;
if ( checkbox )
{
var x = document.createElement("INPUT");
x.setAttribute("type", "checkbox");
x.checked = value;
x.name = target;
x.addEventListener("change", awardCheckboxChanged);
cell.appendChild(x);
}
else if ( data )
{
cell.appendChild( createAwardSelector( cell, target, value, data));
}
return cell;
}
function createCellHtml( row, html, title = null)
{
var cell = row.insertCell();
cell.innerHTML = html;
if ( title )
cell.title = title;
return cell;
}
function createAwardSelector( cell , target, value, forObject )
{
var selector = document.createElement("select");
selector.name = target;
selector.value = value;
selector.disabled = (forObject.length == 1 ? true : false);
selector.style.margin = "0px";
selector.style.padding = "1px";
if ( selector.disabled )
selector.style.cursor = "auto";
selector.addEventListener("change", awardValueChanged);
for ( var opt in forObject )
{
var option = document.createElement("option");
option.value = forObject[opt];
if ( option.value == "Phone" || option.value == "CW" )
option.disabled = true;
option.text = forObject[opt];
selector.appendChild(option);
}
return selector;
}
function resetAwardAdd()
{
awardName.style.display = "none";
createSelectOptions("awardName","Select Award", null);
createSelectOptions("awardSponsor","Select Sponsor", g_awards,"sponsor");
}
function openAwardPopup()
{
awardHunterDiv.style.zIndex = 100;
resetAwardAdd();
}
function closeAwardPopup()
{
awardHunterDiv.style.zIndex = -1;
resetAwardAdd();
}
function setVisual()
{
huntNeedTd.style.display = "none";
huntStateTd.style.display = "none";
huntDXCCsTd.style.display = "none";
// Award Hunter
if ( referenceNeed.value == 6 )
{
/*for ( key in g_rosterSettings.wanted )
{
document.getElementById(key).checked = true;
var t = key.replace("hunt","");
if ( t in g_rosterSettings.columns )
g_rosterSettings.columns[t] = true;
}*/
huntingTr.style.display = "none";
callsignsTr.style.display = "none";
awardHunterTr.style.display = "";
awardWantedDiv.style.display = "";
huntingMatrixDiv.style.display = "";
updateAwardList();
}
else
{
for ( key in g_rosterSettings.wanted )
{
if ( document.getElementById(key) )
document.getElementById(key).checked = g_rosterSettings.wanted[key];
}
awardHunterTr.style.display = "none";
awardWantedDiv.style.display = "none";
huntingTr.style.display = "";
callsignsTr.style.display = "";
closeAwardPopup();
if ( callsignNeed.value == "all" || callsignNeed.value == "hits")
{
huntingMatrixDiv.style.display = "";
huntNeedTd.style.display = "block";
huntModeTd.style.display = "none";
}
else
{
huntingMatrixDiv.style.display = "none";
huntModeTd.style.display = "block";
if ( huntMode.value != "callsign" && huntMode.value != "usstate" && huntMode.value != "dxccs" )
{
huntNeedTd.style.display = "block";
}
if ( huntMode.value == "usstate" )
{
huntStateTd.style.display = "block";
}
if ( huntMode.value == "usstates")
{
huntNeedTd.style.display = "block";
}
if ( huntMode.value == "dxccs" )
{
huntDXCCsTd.style.display = "block";
}
}
}
if ( wantMaxDT.checked == true )
{
maxDT.style.display = "block";
maxDTView.style.display = "block";
}
else
{
maxDT.style.display = "none";
maxDTView.style.display = "none";
}
if ( wantMinDB.checked == true )
{
minDb.style.display = "block";
minDbView.style.display = "block";
}
else
{
minDb.style.display = "none";
minDbView.style.display = "none";
}
if ( wantMinFreq.checked == true )
{
minFreq.style.display = "block";
minFreqView.style.display = "block";
}
else
{
minFreq.style.display = "none";
minFreqView.style.display = "none";
}
if ( wantMaxFreq.checked == true )
{
maxFreq.style.display = "block";
maxFreqView.style.display = "block";
}
else
{
maxFreq.style.display = "none";
maxFreqView.style.display = "none";
}
if ( useRegex.checked == true )
{
callsignRegex.style.display = "inline-block";
}
else
{
callsignRegex.style.display = "none";
}
if ( window.opener.g_callsignLookups.lotwUseEnable == true )
{
usesLoTWDiv.style.display = "inline-block";
if ( g_rosterSettings.usesLoTW == true )
{
maxLoTW.style.display = "inline-block";
maxLoTWView.style.display = "inline-block";
}
else
{
maxLoTW.style.display = "none";
maxLoTWView.style.display = "none";
}
}
else
{
usesLoTWDiv.style.display = "none";
maxLoTW.style.display = "none";
maxLoTWView.style.display = "none";
}
if ( window.opener.g_callsignLookups.eqslUseEnable == true )
useseQSLDiv.style.display = "block";
else
useseQSLDiv.style.display = "none";
if ( window.opener.g_callsignLookups.oqrsUseEnable == true )
usesOQRSDiv.style.display = "block";
else
usesOQRSDiv.style.display = "none";
if ( g_rosterSettings.columns.Spot == true )
onlySpotDiv.style.display = "block";
else
onlySpotDiv.style.display = "none";
if ( g_rosterSettings.callsign == "all" || g_rosterSettings.callsign == "hits")
allOnlyNewDiv.style.display = "block";
else
allOnlyNewDiv.style.display = "none";
resize();
}
function wantedChanged(element)
{
g_rosterSettings.wanted[element.id] = element.checked;
if ( element.checked == true )
{
var t = element.id.replace("hunt","");
if ( t in g_rosterSettings.columns )
{
g_rosterSettings.columns[t] = true;
for (var i = 0; i < g_menu.items.length; ++i) {
if ( typeof g_menu.items[i].checked != "undefined" && g_menu.items[i].label == t )
g_menu.items[i].checked = true;
}
}
}
writeRosterSettings();
g_scriptReport = Object();
for ( var callHash in window.opener.g_callRoster )
{
window.opener.g_callRoster[callHash].callObj.alerted = false;
}
window.opener.goProcessRoster();
}
function valuesChanged()
{
setVisual();
g_rosterSettings.callsign = callsignNeed.value;
g_rosterSettings.hunting = huntMode.value;
g_rosterSettings.huntNeed = huntNeed.value;
g_rosterSettings.requireGrid = wantGrid.checked;
g_rosterSettings.wantMaxDT = wantMaxDT.checked ;
g_rosterSettings.wantMinDB = wantMinDB.checked ;
g_rosterSettings.wantMinFreq = wantMinFreq.checked;
g_rosterSettings.wantMaxFreq = wantMaxFreq.checked;
maxDTView.innerHTML = g_rosterSettings.maxDT = maxDT.value;
minDbView.innerHTML = g_rosterSettings.minDb = minDb.value;
minFreqView.innerHTML = g_rosterSettings.minFreq = minFreq.value;
maxFreqView.innerHTML = g_rosterSettings.maxFreq = maxFreq.value;
g_rosterSettings.maxLoTW = maxLoTW.value;
maxLoTWView.innerHTML = (g_rosterSettings.maxLoTW < 27)? Number(g_rosterSettings.maxLoTW).toYM() : "∞";
g_rosterSettings.maxLoTW = maxLoTW.value;
g_rosterSettings.cqOnly = cqOnly.checked;
g_rosterSettings.noMyDxcc = noMyDxcc.checked;
g_rosterSettings.onlyMyDxcc = onlyMyDxcc.checked;
if ( noMsg.checked && onlyMsg.checked && noMsgValue.value == onlyMsgValue.value)
{
if ( g_rosterSettings.noMsg )
noMsg.checked = false;
else
onlyMsg.checked = false;
}
g_rosterSettings.noMsg = noMsg.checked;
g_rosterSettings.onlyMsg = onlyMsg.checked;
g_rosterSettings.noMsgValue = noMsgValue.value;
g_rosterSettings.onlyMsgValue = onlyMsgValue.value;
g_rosterSettings.usesLoTW = usesLoTW.checked ;
g_rosterSettings.useseQSL = useseQSL.checked ;
g_rosterSettings.usesOQRS = usesOQRS.checked ;
g_rosterSettings.onlySpot = onlySpot.checked ;
g_rosterSettings.reference = referenceNeed.value;
g_rosterSettings.allOnlyNew = allOnlyNew.checked;
g_rosterSettings.useRegex = useRegex.checked;
g_rosterSettings.callsignRegex = callsignRegex.value;
writeRosterSettings();
g_scriptReport = Object();
for ( var callHash in window.opener.g_callRoster )
window.opener.g_callRoster[callHash].callObj.alerted = false;
window.opener.goProcessRoster();
}
function getBuffer(file_url, callback, flag, mode, port, cookie)
{
var url = require('url');
var http = require(mode);
var fileBuffer = null;
var options = null;
if (cookie != null)
{
options = {
host: url.parse(file_url).host,
port: port,
path: url.parse(file_url).path,
headers:
{
'Cookie': cookie
}
};
}
else
{
options = {
host: url.parse(file_url).host,
port: port,
path: url.parse(file_url).path
};
}
http.get(options, function(res)
{
var fsize = res.headers['content-length'];
var cookies = null;
if (typeof res.headers['set-cookie'] != 'undefined')
cookies = res.headers['set-cookie'];
res.on('data', function(data)
{
if (fileBuffer == null)
fileBuffer = data;
else
fileBuffer += data;
}).on('end', function()
{
if (typeof callback === "function")
{
// Call it, since we have confirmed it is callable
callback(fileBuffer, flag, cookies);
}
}).on('error', function() {});
});
}
function callsignResult(buffer, flag)
{
var rawData = JSON.parse(buffer);
r_currentUSState = flag;
g_currentUSCallsigns = Object();
for ( key in rawData.c )
g_currentUSCallsigns[rawData.c[key]] = true;
window.opener.goProcessRoster();
}
function stateChangedValue(what)
{
if ( r_currentUSState != stateSelect.value && stateSelect.value != "" )
{
r_currentUSState = stateSelect.value;
if ( window.opener.g_mapSettings.offlineMode == false )
{
var callState = r_currentUSState.replace("CN-", "");;
getBuffer("https://tagloomis.com/gt/callsigns/"+callState+".callsigns.json", callsignResult, r_currentUSState, "https", 443);
}
else
{
window.opener.goProcessRoster();
r_currentUSState = "";
g_currentUSCallsigns = null;
stateSelect.value = "";
return;
}
}
if ( stateSelect.value == "" )
{
r_currentUSState = "";
g_currentUSCallsigns = null;
window.opener.goProcessRoster();
}
}
function DXCCsChangedValue(what)
{
r_currentDXCCs = DXCCsSelect.value;
window.opener.goProcessRoster();
}
function initDXCCSelector()
{
var items = Object.keys(window.opener.g_dxccToAltName).sort(function(a,b){return window.opener.g_dxccToAltName[a].localeCompare(window.opener.g_dxccToAltName[b])});
var newSelect = document.getElementById("DXCCsSelect");
for ( var i in items )
{
var key = items[i];
if ( window.opener.g_worldGeoData[window.opener.g_dxccToGeoData[key]].geo != "deleted" )
{
var option = document.createElement("option");
option.value = key;
option.text = window.opener.g_dxccToAltName[key] + " (" + window.opener.g_worldGeoData[window.opener.g_dxccToGeoData[key]].pp + ")";
newSelect.appendChild(option);
}
}
newSelect.oninput = DXCCsChangedValue;
}
function manifestResult(buffer, flag)
{
r_callsignManifest = JSON.parse(buffer);
var newSelect = document.getElementById("stateSelect");
for ( key in r_callsignManifest.cnt )
{
var option = document.createElement("option");
if ( window.opener.g_enums[key] )
{
option.value = key;
option.text = window.opener.g_enums[key];
}
else
{
option.value = "CN-"+key;
option.text = window.opener.g_enums["CN-"+key];
}
newSelect.appendChild(option);
}
newSelect.oninput = stateChangedValue;
}
function receiveMessage(event)
{
}
var g_tracker = {};
function updateWorked()
{
g_worked = window.opener.g_tracker.worked;
g_confirmed = window.opener.g_tracker.confirmed;
g_modes = window.opener.g_modes;
g_modes_phone = window.opener.g_modes_phone;
g_tracker = window.opener.g_tracker;
processAllAwardTrackers();
}
function deleteCallsignIgnore(key)
{
delete g_blockedCalls[key];
storeBlocks();
openIgnoreEdit();
window.opener.goProcessRoster();
}
function deleteDxccIgnore(key)
{
delete g_blockedDxcc[key];
storeBlocks();
openIgnoreEdit();
window.opener.goProcessRoster();
}
function deleteCQIgnore(key)
{
delete g_blockedCQ[key];
storeBlocks();
openIgnoreEdit();
window.opener.goProcessRoster();
}
function clearAllCallsignIgnores()
{
g_blockedCalls = Object();
storeBlocks();
openIgnoreEdit();
window.opener.goProcessRoster();
}
function clearAllDxccIgnores()
{
g_blockedDxcc = Object();
storeBlocks();
openIgnoreEdit();
window.opener.goProcessRoster();
}
function clearAllCQIgnores()
{
g_blockedCQ = Object();
storeBlocks();
openIgnoreEdit();
window.opener.goProcessRoster();
}
function closeEditIgnores()
{
mainCallRoster.style.display = "block";
editView.style.display = "none";
}
function openIgnoreEdit()
{
mainCallRoster.style.display = "none";
editView.style.display = "inline-block";
var worker = "";
var clearString = "