2023-01-24 10:52:58 +01:00
function qsl _rcvd ( id , method ) {
2023-06-29 17:53:18 +02:00
$ ( ".ld-ext-right-r-" + method ) . addClass ( 'running' ) ;
$ ( ".ld-ext-right-r-" + method ) . prop ( 'disabled' , true ) ;
2023-01-24 10:52:58 +01:00
$ . ajax ( {
url : base _url + 'index.php/qso/qsl_rcvd_ajax' ,
type : 'post' ,
data : { 'id' : id ,
'method' : method
} ,
success : function ( data ) {
2023-06-29 17:53:18 +02:00
$ ( ".ld-ext-right-r-" + method ) . removeClass ( 'running' ) ;
$ ( ".ld-ext-right-r-" + method ) . prop ( 'disabled' , false ) ;
2023-01-24 10:52:58 +01:00
if ( data . message == 'OK' ) {
2023-06-02 17:09:02 +02:00
$ ( "#qsl_" + id ) . find ( "span:eq(1)" ) . attr ( 'class' , 'qsl-green' ) ; // Paints arrow green
2023-01-24 10:52:58 +01:00
$ ( ".qsl_rcvd_" + id ) . remove ( ) ; // removes choice from menu
}
else {
$ ( ".bootstrap-dialog-message" ) . append ( '<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>You are not allowed to update QSL status!</div>' ) ;
}
}
} ) ;
}
function qsl _sent ( id , method ) {
$ . ajax ( {
url : base _url + 'index.php/qso/qsl_sent_ajax' ,
type : 'post' ,
data : { 'id' : id ,
'method' : method
} ,
success : function ( data ) {
if ( data . message == 'OK' ) {
2023-06-02 17:09:02 +02:00
$ ( "#qsl_" + id ) . find ( "span:eq(0)" ) . attr ( 'class' , 'qsl-green' ) ; // Paints arrow green
2023-01-24 10:52:58 +01:00
$ ( ".qsl_sent_" + id ) . remove ( ) ; // removes choice from menu
}
else {
$ ( ".bootstrap-dialog-message" ) . append ( '<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>You are not allowed to update QSL status!</div>' ) ;
}
}
} ) ;
}
// Function: qsl_requested
// Marks QSL card requested against the QSO.
function qsl _requested ( id , method ) {
2023-06-29 17:53:18 +02:00
$ ( ".ld-ext-right-t-" + method ) . addClass ( 'running' ) ;
$ ( ".ld-ext-right-t-" + method ) . prop ( 'disabled' , true ) ;
2023-01-24 10:52:58 +01:00
$ . ajax ( {
url : base _url + 'index.php/qso/qsl_requested_ajax' ,
type : 'post' ,
data : { 'id' : id ,
'method' : method
} ,
success : function ( data ) {
2023-06-29 17:53:18 +02:00
$ ( ".ld-ext-right-t-" + method ) . removeClass ( 'running' ) ;
$ ( ".ld-ext-right-t-" + method ) . prop ( 'disabled' , false ) ;
2023-01-24 10:52:58 +01:00
if ( data . message == 'OK' ) {
2023-06-02 17:09:02 +02:00
$ ( "#qsl_" + id ) . find ( "span:eq(0)" ) . attr ( 'class' , 'qsl-yellow' ) ; // Paints arrow yellow
2023-01-24 10:52:58 +01:00
}
else {
$ ( ".bootstrap-dialog-message" ) . append ( '<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>You are not allowed to update QSL status!</div>' ) ;
}
}
} ) ;
}
// Function: qsl_ignore
// Marks QSL card ignore against the QSO.
function qsl _ignore ( id , method ) {
2023-06-29 17:53:18 +02:00
$ ( ".ld-ext-right-ignore" ) . addClass ( 'running' ) ;
$ ( ".ld-ext-right-ignore" ) . prop ( 'disabled' , true ) ;
2023-01-24 10:52:58 +01:00
$ . ajax ( {
url : base _url + 'index.php/qso/qsl_ignore_ajax' ,
type : 'post' ,
data : { 'id' : id ,
'method' : method
} ,
success : function ( data ) {
2023-06-29 17:53:18 +02:00
$ ( ".ld-ext-right-ignore" ) . removeClass ( 'running' ) ;
$ ( ".ld-ext-right-ignore" ) . prop ( 'disabled' , false ) ;
2023-01-24 10:52:58 +01:00
if ( data . message == 'OK' ) {
2023-06-02 17:09:02 +02:00
$ ( "#qsl_" + id ) . find ( "span:eq(0)" ) . attr ( 'class' , 'qsl-grey' ) ; // Paints arrow grey
2023-01-24 10:52:58 +01:00
}
else {
$ ( ".bootstrap-dialog-message" ) . append ( '<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>You are not allowed to update QSL status!</div>' ) ;
}
}
} ) ;
}
function qso _delete ( id , call ) {
BootstrapDialog . confirm ( {
2023-10-18 11:45:15 +02:00
title : lang _general _word _danger ,
message : lang _qso _delete _warning + call + '?' ,
2023-01-24 10:52:58 +01:00
type : BootstrapDialog . TYPE _DANGER ,
closable : true ,
draggable : true ,
btnOKClass : 'btn-danger' ,
callback : function ( result ) {
if ( result ) {
$ ( ".edit-dialog" ) . modal ( 'hide' ) ;
$ ( ".qso-dialog" ) . modal ( 'hide' ) ;
$ . ajax ( {
url : base _url + 'index.php/qso/delete_ajax' ,
type : 'post' ,
data : { 'id' : id
} ,
success : function ( data ) {
$ ( ".alert" ) . remove ( ) ;
$ ( ".bootstrap-dialog-message" ) . prepend ( '<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>The contact with ' + call + ' has been deleted!</div>' ) ;
$ ( "#qso_" + id ) . remove ( ) ; // removes qso from table in dialog
}
} ) ;
}
}
} ) ;
}
function qso _edit ( id ) {
$ . ajax ( {
url : base _url + 'index.php/qso/edit_ajax' ,
type : 'post' ,
data : { 'id' : id
} ,
success : function ( html ) {
2024-01-01 10:03:45 +01:00
// remove actions QSO menu //
2023-12-22 11:12:58 +01:00
$ ( '.menuOnResultTab' ) . hide ( ) ;
$ ( '.menuOnBody' ) . remove ( ) ;
2023-01-24 10:52:58 +01:00
BootstrapDialog . show ( {
2023-10-07 01:42:07 +02:00
title : lang _general _word _qso _data ,
2023-01-24 10:52:58 +01:00
cssClass : 'edit-dialog' ,
size : BootstrapDialog . SIZE _WIDE ,
nl2br : false ,
message : html ,
onshown : function ( dialog ) {
var state = $ ( "#input_usa_state_edit option:selected" ) . text ( ) ;
if ( state != "" ) {
$ ( "#stationCntyInputEdit" ) . prop ( 'disabled' , false ) ;
selectize _usa _county ( ) ;
}
$ ( '#input_usa_state_edit' ) . change ( function ( ) {
var state = $ ( "#input_usa_state_edit option:selected" ) . text ( ) ;
if ( state != "" ) {
$ ( "#stationCntyInputEdit" ) . prop ( 'disabled' , false ) ;
selectize _usa _county ( ) ;
} else {
$ ( "#stationCntyInputEdit" ) . prop ( 'disabled' , true ) ;
//$('#stationCntyInput')[0].selectize.destroy();
$ ( "#stationCntyInputEdit" ) . val ( "" ) ;
}
2023-12-22 11:12:58 +01:00
} ) ;
2023-01-24 10:52:58 +01:00
2025-10-19 13:18:24 +01:00
// Add callsign change handler to update DXCC/location info
$ ( '.modal-content #callsign' ) . on ( 'change blur' , function ( ) {
var callsignValue = $ ( this ) . val ( ) ;
if ( callsignValue . length >= 3 ) {
var find _callsign = callsignValue . toUpperCase ( ) ;
find _callsign = find _callsign . replace ( /\//g , "-" ) ;
find _callsign = find _callsign . replace ( 'Ø' , '0' ) ;
$ . getJSON ( base _url + 'index.php/logbook/json/' + find _callsign + '/0/0/0/' + $ ( '.modal-content #stationProfile' ) . val ( ) , function ( result ) {
if ( result . dxcc && result . dxcc . entity !== undefined && result . dxcc . entity !== 'Not Found' ) {
// Update country field
$ ( '.modal-content #country' ) . val ( result . dxcc . entity ) ;
// Update DXCC ID
if ( result . dxcc . adif !== undefined ) {
$ ( '.modal-content #dxcc_id' ) . val ( result . dxcc . adif ) ;
}
// Update CQ Zone
if ( result . dxcc . cqz !== undefined ) {
$ ( '.modal-content #cqz' ) . val ( result . dxcc . cqz ) ;
}
// Update ITU Zone
if ( result . dxcc . ituz !== undefined ) {
$ ( '.modal-content #ituz' ) . val ( result . dxcc . ituz ) ;
}
// Update continent
if ( result . dxcc . cont !== undefined ) {
$ ( '.modal-content #continent' ) . val ( result . dxcc . cont ) ;
}
// Update state if available
if ( result . callsign _state && $ ( '.modal-content #input_usa_state_edit' ) . val ( ) == "" ) {
$ ( '.modal-content #input_usa_state_edit' ) . val ( result . callsign _state ) . trigger ( 'change' ) ;
}
}
} ) ;
}
} ) ;
2023-06-16 12:17:56 +02:00
$ ( '#locator' ) . change ( function ( ) {
2023-06-22 18:58:13 +02:00
if ( $ ( this ) . val ( ) . length >= 4 ) {
2023-08-29 23:46:07 +02:00
$ . ajax ( {
url : base _url + 'index.php/logbook/searchbearing' ,
type : 'post' ,
data : {
grid : $ ( this ) . val ( ) ,
stationProfile : $ ( '#stationProfile' ) . val ( )
} ,
success : function ( data ) {
$ ( '#locator_info' ) . html ( data ) . fadeIn ( "slow" ) ;
} ,
error : function ( ) {
$ ( '#locator_info' ) . text ( "Error loading bearing!" ) . fadeIn ( "slow" ) ;
} ,
} ) ;
2023-08-29 23:38:24 +02:00
$ . ajax ( {
url : base _url + 'index.php/logbook/searchdistance' ,
type : 'post' ,
data : {
grid : $ ( this ) . val ( ) ,
stationProfile : $ ( '#stationProfile' ) . val ( )
} ,
success : function ( data ) {
document . getElementById ( "distance" ) . value = data ;
} ,
error : function ( ) {
2023-08-29 23:48:59 +02:00
document . getElementById ( "distance" ) . value = null ;
2023-08-29 23:38:24 +02:00
} ,
2023-06-22 18:58:13 +02:00
} ) ;
}
2023-06-16 12:17:56 +02:00
} ) ;
2023-01-24 10:52:58 +01:00
$ ( '#sota_ref_edit' ) . selectize ( {
maxItems : 1 ,
closeAfterSelect : true ,
2026-03-24 14:14:00 +00:00
createOnBlur : true ,
selectOnTab : true ,
2023-01-24 10:52:58 +01:00
loadThrottle : 250 ,
valueField : 'name' ,
labelField : 'name' ,
searchField : 'name' ,
options : [ ] ,
2023-02-06 19:07:30 +01:00
create : true ,
2023-01-24 10:52:58 +01:00
load : function ( query , callback ) {
if ( ! query || query . length < 3 ) return callback ( ) ; // Only trigger if 3 or more characters are entered
$ . ajax ( {
url : base _url + 'index.php/qso/get_sota' ,
type : 'GET' ,
dataType : 'json' ,
data : {
query : query ,
} ,
error : function ( ) {
callback ( ) ;
} ,
success : function ( res ) {
callback ( res ) ;
}
} ) ;
}
} ) ;
$ ( '#wwff_ref_edit' ) . selectize ( {
maxItems : 1 ,
closeAfterSelect : true ,
2026-03-24 14:14:00 +00:00
createOnBlur : true ,
selectOnTab : true ,
2023-01-24 10:52:58 +01:00
loadThrottle : 250 ,
valueField : 'name' ,
labelField : 'name' ,
searchField : 'name' ,
options : [ ] ,
2023-02-06 08:33:19 +01:00
create : true ,
2023-01-24 10:52:58 +01:00
load : function ( query , callback ) {
if ( ! query || query . length < 3 ) return callback ( ) ; // Only trigger if 3 or more characters are entered
$ . ajax ( {
url : base _url + 'index.php/qso/get_wwff' ,
type : 'GET' ,
dataType : 'json' ,
data : {
query : query ,
} ,
error : function ( ) {
callback ( ) ;
} ,
success : function ( res ) {
callback ( res ) ;
}
} ) ;
}
} ) ;
$ ( '#pota_ref_edit' ) . selectize ( {
2026-03-24 14:20:17 +00:00
maxItems : null ,
2023-01-24 10:52:58 +01:00
closeAfterSelect : true ,
2026-03-24 14:14:00 +00:00
createOnBlur : true ,
selectOnTab : true ,
2023-01-24 10:52:58 +01:00
loadThrottle : 250 ,
valueField : 'name' ,
labelField : 'name' ,
searchField : 'name' ,
options : [ ] ,
2023-02-06 19:07:30 +01:00
create : true ,
2023-01-24 10:52:58 +01:00
load : function ( query , callback ) {
if ( ! query || query . length < 3 ) return callback ( ) ; // Only trigger if 3 or more characters are entered
$ . ajax ( {
url : base _url + 'index.php/qso/get_pota' ,
type : 'GET' ,
dataType : 'json' ,
data : {
query : query ,
} ,
error : function ( ) {
callback ( ) ;
} ,
success : function ( res ) {
callback ( res ) ;
}
} ) ;
}
} ) ;
$ ( '#darc_dok_edit' ) . selectize ( {
maxItems : 1 ,
closeAfterSelect : true ,
loadThrottle : 250 ,
valueField : 'name' ,
labelField : 'name' ,
searchField : 'name' ,
options : [ ] ,
create : true ,
load : function ( query , callback ) {
if ( ! query ) return callback ( ) ; // Only trigger if 3 or more characters are entered
$ . ajax ( {
url : base _url + 'index.php/qso/get_dok' ,
type : 'GET' ,
dataType : 'json' ,
data : {
query : query ,
} ,
error : function ( ) {
callback ( ) ;
} ,
success : function ( res ) {
callback ( res ) ;
}
} ) ;
}
} ) ;
2025-11-17 17:12:04 +00:00
// Populate satellite names datalist for edit dialog
$ . getJSON ( base _url + "assets/json/satellite_data.json" , function ( data ) {
var items = [ ] ;
$ . each ( data , function ( key , val ) {
items . push ( '<option value="' + key + '">' + key + '</option>' ) ;
} ) ;
$ ( '.satellite_names_list_edit' ) . append ( items . join ( "" ) ) ;
} ) ;
// Handle satellite name change in edit dialog
var selected _sat _edit ;
$ ( '#sat_name_edit' ) . on ( 'input' , function ( ) {
var optionslist = $ ( '.satellite_names_list_edit' ) [ 0 ] . options ;
var value = $ ( this ) . val ( ) ;
for ( var x = 0 ; x < optionslist . length ; x ++ ) {
if ( optionslist [ x ] . value === value ) {
$ ( "#sat_mode_edit" ) . val ( "" ) ;
$ ( '.satellite_modes_list_edit' ) . find ( 'option' ) . remove ( ) . end ( ) ;
selected _sat _edit = value ;
// Get satellite modes from JSON
$ . getJSON ( base _url + "assets/json/satellite_data.json" , function ( data ) {
var sat _modes = [ ] ;
$ . each ( data , function ( key , val ) {
if ( key == value ) {
$ . each ( val . Modes , function ( key1 , val2 ) {
sat _modes . push ( '<option value="' + key1 + '">' + key1 + '</option>' ) ;
} ) ;
}
} ) ;
$ ( '.satellite_modes_list_edit' ) . append ( sat _modes . join ( "" ) ) ;
} ) ;
break ;
}
}
} ) ;
// Handle satellite mode change in edit dialog to update frequencies and modes
$ ( '#sat_mode_edit' ) . on ( 'input' , function ( ) {
var optionslist = $ ( '.satellite_modes_list_edit' ) [ 0 ] . options ;
var value = $ ( this ) . val ( ) ;
for ( var x = 0 ; x < optionslist . length ; x ++ ) {
if ( optionslist [ x ] . value === value ) {
var selected _sat _mode _edit = value ;
// Get satellite data from JSON
$ . getJSON ( base _url + "assets/json/satellite_data.json" , function ( data ) {
$ . each ( data , function ( key , val ) {
if ( key == selected _sat _edit ) {
$ . each ( val . Modes , function ( key1 , val2 ) {
if ( key1 == selected _sat _mode _edit ) {
// Update mode - handle inverting transponders
if ( ( val2 [ 0 ] . Downlink _Mode == "LSB" && val2 [ 0 ] . Uplink _Mode == "USB" ) ||
( val2 [ 0 ] . Downlink _Mode == "USB" && val2 [ 0 ] . Uplink _Mode == "LSB" ) ) {
$ ( "#mode" ) . val ( "SSB" ) ;
} else {
$ ( "#mode" ) . val ( val2 [ 0 ] . Uplink _Mode ) ;
}
// Update bands based on frequencies
$ ( "#band" ) . val ( frequencyToBand ( val2 [ 0 ] . Uplink _Freq ) ) ;
$ ( "#band_rx" ) . val ( frequencyToBand ( val2 [ 0 ] . Downlink _Freq ) ) ;
// Update frequencies
$ ( "#freq" ) . val ( val2 [ 0 ] . Uplink _Freq ) ;
$ ( "#freqrx" ) . val ( val2 [ 0 ] . Downlink _Freq ) ;
// Update propagation mode to SAT
$ ( "#prop_mode" ) . val ( 'SAT' ) ;
}
} ) ;
}
} ) ;
} ) ;
break ;
}
}
} ) ;
2023-11-29 14:26:23 +01:00
// [eQSL default msg] change value (for qso edit page) //
2024-01-01 10:03:45 +01:00
$ ( '.modal-content #stationProfile' ) . change ( function ( ) {
qso _set _eqsl _qslmsg ( $ ( '.modal-content #stationProfile' ) . val ( ) , false , '.modal-content' ) ;
2023-12-02 15:02:58 +01:00
} ) ;
2024-01-01 10:03:45 +01:00
$ ( '.modal-content .qso_eqsl_qslmsg_update' ) . off ( 'click' ) . on ( 'click' , function ( ) {
2023-12-02 15:02:58 +01:00
qso _set _eqsl _qslmsg ( $ ( '.modal-content #stationProfile' ) . val ( ) , true , '.modal-content' ) ;
2023-12-02 15:10:02 +01:00
$ ( '.modal-content #charsLeft' ) . text ( " " ) ;
2023-12-02 15:02:58 +01:00
} ) ;
2023-12-02 13:00:56 +01:00
$ ( '.modal-content #qslmsg' ) . keyup ( function ( event ) {
calcRemainingChars ( event , '.modal-content' ) ;
} ) ;
2023-01-24 10:52:58 +01:00
} ,
} ) ;
}
} ) ;
}
2026-07-06 17:18:39 +01:00
function loadLeafletAssets ( callback ) {
if ( typeof L !== 'undefined' && typeof L . maidenheadqrb !== 'undefined' ) {
if ( typeof callback === 'function' ) {
callback ( ) ;
}
return ;
}
// Load CSS if not already present
if ( $ ( 'link[href*="' + base _url + 'assets/js/leaflet/leaflet.css"]' ) . length === 0 ) {
$ ( 'head' ) . append ( '<link rel="stylesheet" type="text/css" href="' + base _url + 'assets/js/leaflet/leaflet.css">' ) ;
}
if ( $ ( 'link[href*="' + base _url + 'assets/js/leaflet/Control.FullScreen.css"]' ) . length === 0 ) {
$ ( 'head' ) . append ( '<link rel="stylesheet" type="text/css" href="' + base _url + 'assets/js/leaflet/Control.FullScreen.css">' ) ;
}
// Helper to load scripts sequentially
function loadScript ( src , next ) {
var script = document . createElement ( 'script' ) ;
script . type = 'text/javascript' ;
script . src = src ;
script . onload = next ;
script . onerror = function ( ) {
console . error ( 'Failed to load ' + src ) ;
if ( typeof next === 'function' ) {
next ( ) ;
}
} ;
document . head . appendChild ( script ) ;
}
loadScript ( base _url + 'assets/js/leaflet/leaflet.js' , function ( ) {
loadScript ( base _url + 'assets/js/leaflet/Control.FullScreen.js' , function ( ) {
loadScript ( base _url + 'assets/js/leaflet/L.Maidenhead.qrb.js' , function ( ) {
loadScript ( base _url + 'assets/js/leaflet/leaflet.geodesic.js' , function ( ) {
if ( typeof callback === 'function' ) {
callback ( ) ;
2023-01-24 10:52:58 +01:00
}
2026-07-06 17:18:39 +01:00
} ) ;
} ) ;
} ) ;
} ) ;
}
function spawnQrbCalculator ( locator1 , locator2 ) {
loadLeafletAssets ( function ( ) {
$ . ajax ( {
url : base _url + 'index.php/qrbcalc' ,
type : 'post' ,
success : function ( html ) {
BootstrapDialog . show ( {
title : 'Compute QRB and QTF' ,
size : BootstrapDialog . SIZE _WIDE ,
cssClass : 'lookup-dialog' ,
nl2br : false ,
message : html ,
onshown : function ( dialog ) {
if ( locator1 !== undefined ) {
$ ( "#qrbcalc_locator1" ) . val ( locator1 ) ;
}
if ( locator2 !== undefined ) {
$ ( "#qrbcalc_locator2" ) . val ( locator2 ) ;
calculateQrb ( ) ;
}
} ,
buttons : [ {
label : lang _admin _close ,
action : function ( dialogItself ) {
dialogItself . close ( ) ;
}
} ]
} ) ;
}
} ) ;
} ) ;
2023-01-24 10:52:58 +01:00
}
function spawnActivatorsMap ( call , count , grids ) {
$ . ajax ( {
url : base _url + 'index.php/activatorsmap' ,
type : 'post' ,
success : function ( html ) {
BootstrapDialog . show ( {
title : 'Activators Map' ,
size : BootstrapDialog . SIZE _WIDE ,
cssClass : 'lookup-dialog' ,
nl2br : false ,
message : html ,
onshown : function ( dialog ) {
showActivatorsMap ( call , count , grids ) ;
} ,
buttons : [ {
2023-11-05 19:38:34 +01:00
label : lang _admin _close ,
2023-01-24 10:52:58 +01:00
action : function ( dialogItself ) {
dialogItself . close ( ) ;
}
} ]
} ) ;
}
} ) ;
}
function calculateQrb ( ) {
let locator1 = $ ( "#qrbcalc_locator1" ) . val ( ) ;
let locator2 = $ ( "#qrbcalc_locator2" ) . val ( ) ;
$ ( ".qrbalert" ) . remove ( ) ;
if ( validateLocator ( locator1 ) && validateLocator ( locator2 ) ) {
$ . ajax ( {
url : base _url + 'index.php/qrbcalc/calculate' ,
type : 'post' ,
data : { 'locator1' : locator1 ,
'locator2' : locator2 } ,
success : function ( html ) {
2023-08-23 14:22:20 +02:00
2023-01-24 10:52:58 +01:00
var result = "<h5>Negative latitudes are south of the equator, negative longitudes are west of Greenwich. <br/>" ;
result += ' ' + locator1 . toUpperCase ( ) + ' Latitude = ' + html [ 'latlng1' ] [ 0 ] + ' Longitude = ' + html [ 'latlng1' ] [ 1 ] + '<br/>' ;
result += ' ' + locator2 . toUpperCase ( ) + ' Latitude = ' + html [ 'latlng2' ] [ 0 ] + ' Longitude = ' + html [ 'latlng2' ] [ 1 ] + '<br/>' ;
result += 'Distance between ' + locator1 . toUpperCase ( ) + ' and ' + locator2 . toUpperCase ( ) + ' is ' + html [ 'distance' ] + '.<br />' ;
result += 'The bearing is ' + html [ 'bearing' ] + '.</h5>' ;
2023-08-23 14:22:20 +02:00
2023-01-24 10:52:58 +01:00
$ ( ".qrbResult" ) . html ( result ) ;
newpath ( html [ 'latlng1' ] , html [ 'latlng2' ] , locator1 , locator2 ) ;
}
} ) ;
} else {
$ ( '.qrbResult' ) . html ( '<div class="qrbalert alert alert-danger" role="alert">Error in locators. Please check.</div>' ) ;
}
}
function validateLocator ( locator ) {
2023-08-24 18:12:55 +02:00
vucc _gridno = locator . split ( "," ) . length ;
if ( vucc _gridno == 3 || vucc _gridno > 4 ) {
return false ;
}
2023-01-24 10:52:58 +01:00
if ( locator . length < 4 && ! ( /^[a-rA-R]{2}[0-9]{2}[a-xA-X]{0,2}[0-9]{0,2}[a-xA-X]{0,2}$/ . test ( locator ) ) ) {
return false ;
}
2023-08-23 14:22:20 +02:00
2023-01-24 10:52:58 +01:00
return true ;
}
// This displays the dialog with the form and it's where the resulttable is displayed
2023-06-29 18:59:12 +02:00
function spawnLookupModal ( searchphrase , searchtype ) {
2023-01-24 10:52:58 +01:00
$ . ajax ( {
url : base _url + 'index.php/lookup' ,
type : 'post' ,
success : function ( html ) {
BootstrapDialog . show ( {
title : 'Quick lookup' ,
size : BootstrapDialog . SIZE _WIDE ,
cssClass : 'lookup-dialog' ,
nl2br : false ,
message : html ,
onshown : function ( dialog ) {
$ ( '#quicklookuptype' ) . change ( function ( ) {
var type = $ ( '#quicklookuptype' ) . val ( ) ;
2023-06-29 18:59:12 +02:00
changeLookupType ( type ) ;
2023-01-24 10:52:58 +01:00
} ) ;
2023-06-29 18:59:12 +02:00
if ( searchtype !== undefined ) {
$ ( '#quicklookuptype' ) . val ( searchtype ) ;
if ( searchtype == 'dxcc' ) {
$ ( "#quicklookupdxcc" ) . val ( searchphrase ) ;
} else if ( searchtype == 'iota' ) {
$ ( "#quicklookupiota" ) . val ( searchphrase ) ;
} else if ( searchtype == 'cq' ) {
$ ( "#quicklookupcqz" ) . val ( searchphrase ) ;
} else {
$ ( "#quicklookuptext" ) . val ( searchphrase ) ;
}
changeLookupType ( searchtype ) ;
getLookupResult ( this . form ) ;
}
2023-01-24 10:52:58 +01:00
} ,
buttons : [ {
2023-11-05 19:38:34 +01:00
label : lang _admin _close ,
2023-01-24 10:52:58 +01:00
action : function ( dialogItself ) {
dialogItself . close ( ) ;
}
} ]
} ) ;
}
} ) ;
}
2023-06-29 18:59:12 +02:00
function changeLookupType ( type ) {
if ( type == "dxcc" ) {
$ ( '#quicklookupdxcc' ) . show ( ) ;
$ ( '#quicklookupiota' ) . hide ( ) ;
$ ( '#quicklookupcqz' ) . hide ( ) ;
$ ( '#quicklookupwas' ) . hide ( ) ;
$ ( '#quicklookuptext' ) . hide ( ) ;
} else if ( type == "iota" ) {
$ ( '#quicklookupiota' ) . show ( ) ;
$ ( '#quicklookupdxcc' ) . hide ( ) ;
$ ( '#quicklookupcqz' ) . hide ( ) ;
$ ( '#quicklookupwas' ) . hide ( ) ;
$ ( '#quicklookuptext' ) . hide ( ) ;
} else if ( type == "vucc" || type == "sota" || type == "wwff" ) {
$ ( '#quicklookuptext' ) . show ( ) ;
$ ( '#quicklookupiota' ) . hide ( ) ;
$ ( '#quicklookupdxcc' ) . hide ( ) ;
$ ( '#quicklookupcqz' ) . hide ( ) ;
$ ( '#quicklookupwas' ) . hide ( ) ;
} else if ( type == "cq" ) {
$ ( '#quicklookupcqz' ) . show ( ) ;
$ ( '#quicklookupiota' ) . hide ( ) ;
$ ( '#quicklookupdxcc' ) . hide ( ) ;
$ ( '#quicklookupwas' ) . hide ( ) ;
$ ( '#quicklookuptext' ) . hide ( ) ;
} else if ( type == "was" ) {
$ ( '#quicklookupwas' ) . show ( ) ;
$ ( '#quicklookupcqz' ) . hide ( ) ;
$ ( '#quicklookupiota' ) . hide ( ) ;
$ ( '#quicklookupdxcc' ) . hide ( ) ;
$ ( '#quicklookuptext' ) . hide ( ) ;
}
}
2023-01-24 10:52:58 +01:00
// This function executes the call to the backend for fetching queryresult and displays the table in the dialog
function getLookupResult ( ) {
$ ( ".ld-ext-right" ) . addClass ( 'running' ) ;
$ ( ".ld-ext-right" ) . prop ( 'disabled' , true ) ;
$ . ajax ( {
url : base _url + 'index.php/lookup/search' ,
type : 'post' ,
data : {
type : $ ( '#quicklookuptype' ) . val ( ) ,
dxcc : $ ( '#quicklookupdxcc' ) . val ( ) ,
was : $ ( '#quicklookupwas' ) . val ( ) ,
grid : $ ( '#quicklookuptext' ) . val ( ) ,
cqz : $ ( '#quicklookupcqz' ) . val ( ) ,
iota : $ ( '#quicklookupiota' ) . val ( ) ,
sota : $ ( '#quicklookuptext' ) . val ( ) ,
wwff : $ ( '#quicklookuptext' ) . val ( ) ,
} ,
success : function ( html ) {
$ ( '#lookupresulttable' ) . html ( html ) ;
$ ( ".ld-ext-right" ) . removeClass ( 'running' ) ;
$ ( ".ld-ext-right" ) . prop ( 'disabled' , false ) ;
}
} ) ;
2023-01-26 08:54:35 +01:00
}
// This function executes the call to the backend for fetching dxcc summary and inserted table below qso entry
2023-01-26 09:20:45 +01:00
function getDxccResult ( dxcc , name ) {
2023-01-26 08:54:35 +01:00
$ . ajax ( {
url : base _url + 'index.php/lookup/search' ,
type : 'post' ,
data : {
type : 'dxcc' ,
dxcc : dxcc ,
} ,
success : function ( html ) {
2026-03-26 22:26:47 +00:00
// Update the DXCC Summary tab content
$ ( '#dxcc-summary-content' ) . html ( html ) ;
2023-01-26 08:54:35 +01:00
}
} ) ;
2023-02-06 08:33:19 +01:00
}
2023-06-30 23:36:35 +02:00
function displayQsl ( id ) {
$ . ajax ( {
url : base _url + 'index.php/qsl/viewQsl' ,
type : 'post' ,
data : {
id : id ,
} ,
success : function ( html ) {
BootstrapDialog . show ( {
title : 'QSL Card' ,
size : BootstrapDialog . SIZE _WIDE ,
cssClass : 'lookup-dialog' ,
nl2br : false ,
message : html ,
onshown : function ( dialog ) {
} ,
buttons : [ {
2023-11-05 19:38:34 +01:00
label : lang _admin _close ,
2023-06-30 23:36:35 +02:00
action : function ( dialogItself ) {
dialogItself . close ( ) ;
}
} ]
} ) ;
}
} ) ;
}
2023-11-29 14:26:23 +01:00
// [eQSL default msg] function to load default qslmsg to qslmsg field on qso add/edit //
function qso _set _eqsl _qslmsg ( station _id , force _diff _to _origin = false , object = '' ) {
$ . ajax ( {
url : base _url + 'index.php/station/get_options' ,
type : 'post' , data : { 'option_type' : 'eqsl_default_qslmsg' , 'option_name' : 'key_station_id' , 'option_key' : station _id } ,
success : function ( res ) {
2024-01-01 10:03:45 +01:00
if ( typeof res . eqsl _default _qslmsg !== "undefined" ) {
2023-11-29 14:26:23 +01:00
object = ( object != '' ) ? ( object + ' ' ) : '' ;
if ( ( force _diff _to _origin ) || ( $ ( object + '#qslmsg' ) . val ( ) == $ ( object + '#qslmsg_hide' ) . html ( ) ) ) {
2024-01-01 10:03:45 +01:00
$ ( object + '#qslmsg' ) . val ( res . eqsl _default _qslmsg ) ;
2023-11-29 14:26:23 +01:00
$ ( object + '#qslmsg_hide' ) . html ( res . eqsl _default _qslmsg ) ;
}
}
} ,
error : function ( ) { } ,
} ) ;
2023-12-15 20:22:58 +01:00
}
2023-12-17 17:39:12 +01:00
// [PWD] button show/hide //
function btn _pwd _showhide ( ) {
if ( $ ( this ) . closest ( 'div' ) . find ( 'input[type="password"]' ) . length > 0 ) {
$ ( this ) . closest ( 'div' ) . find ( 'input[type="password"]' ) . attr ( 'type' , 'text' ) ;
$ ( this ) . closest ( 'div' ) . find ( '.fa-eye-slash' ) . removeClass ( 'fa-eye-slash' ) . addClass ( 'fa-eye' ) ;
2023-12-15 20:22:58 +01:00
} else {
2023-12-17 17:39:12 +01:00
$ ( this ) . closest ( 'div' ) . find ( 'input[type="text"]' ) . attr ( 'type' , 'password' ) ;
2023-12-17 20:21:38 +01:00
$ ( this ) . closest ( 'div' ) . find ( '.fa-eye' ) . removeClass ( 'fa-eye' ) . addClass ( 'fa-eye-slash' ) ;
2023-12-15 20:22:58 +01:00
}
2023-12-17 19:16:23 +01:00
}
2023-12-22 11:12:58 +01:00
$ ( '.user_edit .btn-pwd-showhide' ) . off ( 'click' ) . on ( 'click' , btn _pwd _showhide ) ;
// [QSO] show/hide actions menu on qso list (_this = div.dropdown actived) //
function showQsoActionsMenu ( _this ) {
$ ( '.menuOnResultTab' ) . hide ( ) ;
$ ( '.menuOnBody' ) . remove ( ) ;
var _id = _this . find ( '.menuOnResultTab' ) . attr ( 'data-qsoid' ) ;
var _dropdownMenuClone = _this . find ( '.menuOnResultTab[data-qsoid="' + _id + '"]' ) . clone ( ) ;
_dropdownMenuClone . removeClass ( 'menuOnResultTab' ) . addClass ( 'menuOnBody' ) ;
$ ( 'body' ) . append ( _dropdownMenuClone ) ;
var _dropdownMenu = _this . find ( '.menuOnResultTab[data-qsoid="' + _id + '"]' ) ;
var eOffset = _this . offset ( ) ;
if ( ( eOffset . top - $ ( window ) . scrollTop ( ) + _dropdownMenu . outerHeight ( ) ) >= ( $ ( window ) . height ( ) - 50 ) ) {
_topMenu = eOffset . top - _dropdownMenu . outerHeight ( ) ;
} else {
_topMenu = eOffset . top + _this . outerHeight ( ) ;
}
_dropdownMenuClone . css ( {
'top' : _topMenu ,
'left' : eOffset . left - _dropdownMenu . width ( ) + _this . find ( '.dropdown-toggle' ) . outerWidth ( ) ,
'display' : 'block' ,
} ) ;
2023-12-27 14:18:22 +01:00
_dropdownMenuClone . off ( 'mouseenter' ) . on ( 'mouseenter' , function ( ) {
_dropdownMenuClone . attr ( 'data-mouseenteronmenu' , '1' ) ;
} ) ;
_this . off ( 'mouseleave' ) . on ( 'mouseleave' , function ( ) {
setTimeout ( function ( ) { if ( _dropdownMenuClone . attr ( 'data-mouseenteronmenu' ) != '1' ) { _dropdownMenuClone . remove ( ) ; } } , 200 ) ;
} ) ;
2023-12-22 11:12:58 +01:00
_dropdownMenuClone . off ( 'mouseleave' ) . on ( 'mouseleave' , function ( ) {
$ ( this ) . remove ( ) ;
} ) ;
_dropdownMenuClone . find ( 'a' ) . off ( 'click' ) . on ( 'click' , function ( ) {
if ( $ ( this ) . is ( ':first-child' ) || $ ( this ) . is ( ':last-child' ) ) { // Only for edit & delete action //
$ ( this ) . closest ( '.menuOnResultTab' ) . remove ( ) ;
}
} ) ;
}
if ( $ ( '.table-responsive .dropdown-toggle' ) . length > 0 ) {
$ ( '.table-responsive .dropdown-toggle' ) . off ( 'mouseenter' ) . on ( 'mouseenter' , function ( ) {
showQsoActionsMenu ( $ ( this ) . closest ( '.dropdown' ) ) ;
} ) ;
}
2024-01-03 22:03:11 -05:00
2024-01-03 22:18:20 -05:00
function getDataTablesLanguageUrl ( ) {
2025-07-30 17:30:05 +01:00
// Check if lang_datatables_language is defined, otherwise use a default
var language = ( typeof lang _datatables _language !== 'undefined' ) ? lang _datatables _language : 'english' ;
return base _url + "/assets/json/datatables_languages/" + language + ".json" ;
2024-01-03 22:03:11 -05:00
}