var favs = {};
var selected_sat;
var selected_sat_mode;
var scps = [];
let lookupCall = null;
let preventLookup = false;

// if the dxcc id changes we need to update the state dropdown and clear the county value to avoid wrong data
$("#dxcc_id").on('change', function () {
	updateStateDropdown('#dxcc_id', '#stateInputLabel', '#location_us_county', '#stationCntyInputQso');
	$('#stationCntyInputQso').val('');
	$('#dxcc_id').multiselect('refresh');
});

function resetTimers(qso_manual) {
	if (typeof qso_manual !== 'undefined' && qso_manual != 1) {
		handleStart = setInterval(function () { getUTCTimeStamp($('.input_start_time')); }, 500);
		handleEnd = setInterval(function () { getUTCTimeStamp($('.input_end_time')); }, 500);
		handleDate = setInterval(function () { getUTCDateStamp($('.input_date')); }, 1000);
	}
}

function getUTCTimeStamp(el) {
	var now = new Date();
	$(el).attr('value', ("0" + now.getUTCHours()).slice(-2) + ':' + ("0" + now.getUTCMinutes()).slice(-2) + ':' + ("0" + now.getUTCSeconds()).slice(-2));
}

function getUTCDateStamp(el) {
	var now = new Date();
	$(el).attr('value', ("0" + now.getUTCDate()).slice(-2) + '-' + ("0" + (now.getUTCMonth() + 1)).slice(-2) + '-' + now.getUTCFullYear());
}


$('#stationProfile').on('change', function () {
	var stationProfile = $('#stationProfile').val();
	$.ajax({
		url: base_url + 'index.php/qso/get_station_power',
		type: 'post',
		data: { 'stationProfile': stationProfile },
		success: function (res) {
			$('#transmit_power').val(res.station_power);
		},
		error: function () {
			$('#transmit_power').val('');
		},
	});
	// [eQSL default msg] change value on change station profle //
	qso_set_eqsl_qslmsg(stationProfile, false, '.qso_panel');
});

// [eQSL default msg] change value on clic //
$('.qso_panel .qso_eqsl_qslmsg_update').off('click').on('click', function () {
	qso_set_eqsl_qslmsg($('.qso_panel #stationProfile').val(), true, '.qso_panel');
	$('#charsLeft').text(" ");
});

$(document).on("keydown", function (e) {
	if (e.key === "Escape" && $('#callsign').val() != '') { // escape key maps to keycode `27`
		// console.log("Escape key pressed");
		reset_fields();
		$('#callsign').trigger("focus");
	}
});

// Sanitize some input data
$('#callsign').on('input', function () {
	$(this).val($(this).val().replace(/\s/g, ''));
	$(this).val($(this).val().replace(/0/g, 'Ø'));
});

$('#locator').on('input', function () {
	$(this).val($(this).val().replace(/\s/g, ''));
});

$("#check_cluster").on("click", function () {
	$.ajax({ url: dxcluster_provider + "/qrg_lookup/" + $("#frequency").val() / 1000, cache: false, dataType: "json" }).done(
		function (dxspot) {
			reset_fields();
			$("#callsign").val(dxspot.spotted);
			$("#callsign").trigger("blur");
		}
	);
});

function set_timers() {
	setTimeout(function () {
		var callsignValue = localStorage.getItem("quicklogCallsign");
		if (callsignValue !== null && callsignValue !== undefined) {
			$("#callsign").val(callsignValue);
			$("#mode").trigger("focus");
			localStorage.removeItem("quicklogCallsign");
		}
	}, 100);
}

$("#qso_input").off('submit').on('submit', function (e) {
	var _submit = true;
	if ((typeof qso_manual !== "undefined") && (qso_manual == "1")) {
		if ($('#qso_input input[name="end_time"]').length == 1) { _submit = testTimeOffConsistency(); }
	}
	if (_submit) {
		var saveQsoButtonText = $("#saveQso").html();
		$("#saveQso").html('<span class="spinner-border spinner-border-sm me-1" role="status" aria-hidden="true"></span> ' + saveQsoButtonText + '...').prop('disabled', true);
		manual_addon = '?manual=' + qso_manual;
		e.preventDefault();
		$.ajax({
			url: base_url + 'index.php/qso' + manual_addon,
			method: 'POST',
			type: 'post',
			data: $(this).serialize(),
			success: function (resdata) {
				result = JSON.parse(resdata);
				if (result.message == 'success') {
					activeStationId = result.activeStationId;
					activeStationOP = result.activeStationOP;
					activeStationTXPower = result.activeStationTXPower;
					$("#noticer").removeClass("");
					$("#noticer").addClass("alert alert-info");
					$("#noticer").html("QSO Added");
					$("#noticer").show();
					reset_fields();
					htmx.trigger("#qso-last-table", "qso_event")
					$("#saveQso").html(saveQsoButtonText).prop("disabled", false);
					$("#callsign").val("");
					$("#noticer").fadeOut(2000);
					var triggerEl = document.querySelector('#myTab a[href="#qso"]')
					bootstrap.Tab.getInstance(triggerEl).show() // Select tab by name
					$("#callsign").trigger("focus");
				} else {
					$("#noticer").removeClass("");
					$("#noticer").addClass("alert alert-warning");
					$("#noticer").html(result.errors);
					$("#noticer").show();
					$("#saveQso").html(saveQsoButtonText).prop("disabled", false);
				}
			},
			error: function () {
				$("#noticer").removeClass("");
				$("#noticer").addClass("alert alert-warning");
				$("#noticer").html("Timeout while adding QSO. NOT added");
				$("#noticer").show();
				$("#saveQso").html(saveQsoButtonText).prop("disabled", false);
			}
		});
	}
	return false;
});

$('#reset_time').on("click", function () {
	var now = new Date();
	$('#start_time').attr('value', ("0" + now.getUTCHours()).slice(-2) + ':' + ("0" + now.getUTCMinutes()).slice(-2) + ':' + ("0" + now.getUTCSeconds()).slice(-2));
	$("[id='start_time']").each(function () {
		$(this).attr("value", ("0" + now.getUTCHours()).slice(-2) + ':' + ("0" + now.getUTCMinutes()).slice(-2) + ':' + ("0" + now.getUTCSeconds()).slice(-2));
	});
});

$('#reset_start_time').on("click", function () {
	var now = new Date();
	$('#start_time').attr('value', ("0" + now.getUTCHours()).slice(-2) + ':' + ("0" + now.getUTCMinutes()).slice(-2));
	$("[id='start_time']").each(function () {
		$starttime = ("0" + now.getUTCHours()).slice(-2) + ':' + ("0" + now.getUTCMinutes()).slice(-2);
		if (qso_manual != 1) {
			$starttime += ':' + ("0" + now.getUTCSeconds()).slice(-2);
		}
		$(this).attr("value", $starttime);
	});
	$('#end_time').attr('value', ("0" + now.getUTCHours()).slice(-2) + ':' + ("0" + now.getUTCMinutes()).slice(-2));
	$("[id='end_time']").each(function () {
		$endtime = ("0" + now.getUTCHours()).slice(-2) + ':' + ("0" + now.getUTCMinutes()).slice(-2);
		if (qso_manual != 1) {
			$endtime += ':' + ("0" + now.getUTCSeconds()).slice(-2);
		}
		$(this).attr("value", $endtime);
	});
	// update date (today, for "post qso") //
	$('#start_date').attr('value', ("0" + now.getUTCDate()).slice(-2) + '-' + ("0" + (now.getUTCMonth() + 1)).slice(-2) + '-' + now.getUTCFullYear());
});

$('#reset_end_time').on("click", function () {
	var now = new Date();
	$('#end_time').attr('value', ("0" + now.getUTCHours()).slice(-2) + ':' + ("0" + now.getUTCMinutes()).slice(-2));
	$("[id='end_time']").each(function () {
		$endtime = ("0" + now.getUTCHours()).slice(-2) + ':' + ("0" + now.getUTCMinutes()).slice(-2);
		if (qso_manual != 1) {
			$endtime += ':' + ("0" + now.getUTCSeconds()).slice(-2);
		}
		$(this).attr("value", $endtime);
	});
});

$('#fav_add').on("click", function (event) {
	save_fav();
});

$(document).on("click", "#fav_del", function (event) {
	del_fav($(this).attr('name'));
});

$(document).on("click", "#fav_recall", function (event) {
	$('#sat_name').val(favs[this.innerText].sat_name);
	$('#sat_mode').val(favs[this.innerText].sat_mode);
	$('#band_rx').val(favs[this.innerText].band_rx);
	$('#band').val(favs[this.innerText].band);
	$('#frequency_rx').val(favs[this.innerText].frequency_rx);
	$('#frequency').val(favs[this.innerText].frequency).trigger("change");
	$('#selectPropagation').val(favs[this.innerText].prop_mode);
	$('#mode').val(favs[this.innerText].mode).on("change");
});


function del_fav(name) {
	if (confirm("Are you sure to delete Fav?")) {
		$.ajax({
			url: base_url + 'index.php/user_options/del_fav',
			method: 'POST',
			dataType: 'json',
			contentType: "application/json; charset=utf-8",
			data: JSON.stringify({ "option_name": name }),
			success: function (result) {
				get_fav();
			}
		});
	}
}

function get_fav() {
	$.ajax({
		url: base_url + 'index.php/user_options/get_fav',
		method: 'GET',
		dataType: 'json',
		contentType: "application/json; charset=utf-8",
		success: function (result) {
			$("#fav_menu").empty();
			for (const key in result) {
				$("#fav_menu").append('<label class="dropdown-item" style="display: flex; justify-content: space-between;"><span id="fav_recall">' + key + '</span><span class="badge bg-danger" id="fav_del" name="' + key + '"><i class="fas fa-trash-alt"></i></span></label>');
			}
			favs = result;
		}
	});
}

function save_fav() {
	var payload = {};
	payload.sat_name = $('#sat_name').val();
	payload.sat_mode = $('#sat_mode').val();
	payload.band_rx = $('#band_rx').val();
	payload.band = $('#band').val();
	payload.frequency_rx = $('#frequency_rx').val();
	payload.frequency = $('#frequency').val();
	payload.prop_mode = $('#selectPropagation').val();
	payload.mode = $('#mode').val();
	$.ajax({
		url: base_url + 'index.php/user_options/add_edit_fav',
		method: 'POST',
		dataType: 'json',
		contentType: "application/json; charset=utf-8",
		data: JSON.stringify(payload),
		success: function (result) {
			get_fav();
		}
	});
}


var bc_bandmap = new BroadcastChannel('qso_window');
bc_bandmap.onmessage = function (ev) {
	if (ev.data == 'ping' && qso_manual == 0) {
		bc_bandmap.postMessage('pong');
	}
}

var bc = new BroadcastChannel('qso_wish');
bc.onmessage = function (ev) {
	if (qso_manual == 0) {
		if (ev.data.ping) {
			let message = {};
			message.pong = true;
			bc.postMessage(message);
		} else {
			// console.log(ev.data);
			let delay = 0;
			if ($("#callsign").val() != "") {
				reset_fields();
				delay = 600;
			}
			setTimeout(() => {
				if (ev.data.frequency != null) {
					$('#frequency').val(ev.data.frequency).trigger("change");
					$("#band").val(frequencyToBand(ev.data.frequency));
				}
				if (ev.data.frequency_rx != "") {
					$('#frequency_rx').val(ev.data.frequency_rx);
					$("#band_rx").val(frequencyToBand(ev.data.frequency_rx));
				}
				$("#callsign").val(ev.data.call);
				$("#callsign").focusout();
				$("#callsign").blur();
			}, delay);
		}
	}
} /* receive */

$("#sat_name").on('change', function () {
	var sat = $("#sat_name").val();
	if (sat == "") {
		$("#sat_mode").val("");
		$("#selectPropagation").val("");
	}
});

$('#stateDropdown').on('change', function () {
	var state = $("#stateDropdown option:selected").text();
	if (state != "") {
		$("#stationCntyInputQso").prop('disabled', false);

		$('#stationCntyInputQso').selectize({
			maxItems: 1,
			closeAfterSelect: true,
			loadThrottle: 250,
			valueField: 'name',
			labelField: 'name',
			searchField: 'name',
			options: [],
			create: false,
			load: function (query, callback) {
				var state = $("#stateDropdown option:selected").text();

				if (!query || state == "") return callback();
				$.ajax({
					url: base_url + 'index.php/qso/get_county',
					type: 'GET',
					dataType: 'json',
					data: {
						query: query,
						state: state,
					},
					error: function () {
						callback();
					},
					success: function (res) {
						callback(res);
					}
				});
			}
		});

	} else {
		$("#stationCntyInputQso").prop('disabled', true);
		//$('#stationCntyInputQso')[0].selectize.destroy();
		$("#stationCntyInputQso").val("");
	}
});

$(document).on('change', 'input', function () {
	var optionslist = $('.satellite_modes_list')[0].options;
	var value = $(this).val();
	for (var x = 0; x < optionslist.length; x++) {
		if (optionslist[x].value === value) {

			// Store selected sat mode
			selected_sat_mode = value;

			// get Json file
			$.getJSON(site_url + "/satellite/satellite_data", function (data) {

				// Build the options array
				var sat_modes = [];
				$.each(data, function (key, val) {
					if (key == selected_sat) {
						$.each(val.Modes, function (key1, val2) {
							if (key1 == selected_sat_mode) {

								if ((val2[0].Downlink_Mode == "LSB" && val2[0].Uplink_Mode == "USB") || (val2[0].Downlink_Mode == "USB" && val2[0].Uplink_Mode == "LSB")) { // inverting Transponder? set to SSB
									$("#mode").val("SSB");
								} else {
									$("#mode").val(val2[0].Uplink_Mode);
								}
								$("#band").val(frequencyToBand(val2[0].Uplink_Freq));
								$("#band_rx").val(frequencyToBand(val2[0].Downlink_Freq));
								$("#frequency").val(val2[0].Uplink_Freq).trigger("change");
								$("#frequency_rx").val(val2[0].Downlink_Freq);
								$("#selectPropagation").val('SAT');
							}
						});
					}
				});

			});
		}
	}
});

$(document).on('change', 'input', function () {
	var optionslist = $('.satellite_names_list')[0].options;
	var value = $(this).val();
	for (var x = 0; x < optionslist.length; x++) {
		if (optionslist[x].value === value) {
			$("#sat_mode").val("");
			$('.satellite_modes_list').find('option').remove().end();
			selected_sat = value;
			// get Json file
			$.getJSON(site_url + "/satellite/satellite_data", function (data) {

				// Build the options array
				var sat_modes = [];
				$.each(data, function (key, val) {
					if (key == value) {
						$.each(val.Modes, function (key1, val2) {
							//console.log (key1);
							sat_modes.push('<option value="' + key1 + '">' + key1 + '</option>');
						});
					}
				});

				// Add to the datalist
				$('.satellite_modes_list').append(sat_modes.join(""));

			});
		}
	}
});

function changebadge(entityname) {
	if ($("#sat_name").val() != "") {
		$.getJSON(base_url + 'index.php/logbook/jsonlookupdxcc/' + convert_case(entityname) + '/SAT/0/0', function (result) {

			$('#callsign_info').removeClass("lotw_info_orange");
			$('#callsign_info').removeClass("text-bg-secondary");
			$('#callsign_info').removeClass("text-bg-success");
			$('#callsign_info').removeClass("text-bg-danger");
			$('#callsign_info').attr('title', '');

			if (result.confirmed) {
				$('#callsign_info').addClass("text-bg-success");
				$('#callsign_info').attr('title', 'DXCC was already worked and confirmed in the past on this band and mode!');
			} else if (result.workedBefore) {
				$('#callsign_info').addClass("text-bg-success");
				$('#callsign_info').addClass("lotw_info_orange");
				$('#callsign_info').attr('title', 'DXCC was already worked in the past on this band and mode!');
			} else {
				$('#callsign_info').addClass("text-bg-danger");
				$('#callsign_info').attr('title', 'New DXCC, not worked on this band and mode!');
			}
		})
	} else {
		$.getJSON(base_url + 'index.php/logbook/jsonlookupdxcc/' + convert_case(entityname) + '/0/' + $("#band").val() + '/' + $("#mode").val(), function (result) {
			// Reset CSS values before updating
			$('#callsign_info').removeClass("lotw_info_orange");
			$('#callsign_info').removeClass("text-bg-secondary");
			$('#callsign_info').removeClass("text-bg-success");
			$('#callsign_info').removeClass("text-bg-danger");
			$('#callsign_info').attr('title', '');

			if (result.confirmed) {
				$('#callsign_info').addClass("text-bg-success");
				$('#callsign_info').attr('title', 'DXCC was already worked and confirmed in the past on this band and mode!');
			} else if (result.workedBefore) {
				$('#callsign_info').addClass("text-bg-success");
				$('#callsign_info').addClass("lotw_info_orange");
				$('#callsign_info').attr('title', 'DXCC was already worked in the past on this band and mode!');
			} else {
				$('#callsign_info').addClass("text-bg-danger");
				$('#callsign_info').attr('title', 'New DXCC, not worked on this band and mode!');
			}
		})
	}
}

$('#btn_reset').on("click", function () {
	preventLookup = true;

	if (lookupCall) {
		lookupCall.abort();
	}

	reset_fields();

	// make sure the focusout event is finished before we allow a new lookup
	setTimeout(() => {
		preventLookup = false;
	}, 100);
});

$('#btn_fullreset').on("click", function () {
	reset_to_default();
});

function reset_to_default() {
	reset_fields();
	$("#stationProfile").val(activeStationId);
	$("#selectPropagation").val("");
	$("#frequency_rx").val("");
	$("#band_rx").val("");
	$("#transmit_power").val(activeStationTXPower);
	$("#sat_name").val("");
	$("#sat_mode").val("");
	$("#ant_az").val("");
	$("#ant_el").val("");
}

/* Function: reset_fields is used to reset the fields on the QSO page */
function reset_fields() {
	$('#locator_info').text("");
	$('#comment').val("");
	$('#country').val("");
	$('#continent').val("");
	$('#email').val("");
	$('#region').val("");
	$('#lotw_info').text("");
	$('#lotw_info').attr('data-bs-original-title', "");
	$('#lotw_info').removeClass("lotw_info_red");
	$('#lotw_info').removeClass("lotw_info_yellow");
	$('#lotw_info').removeClass("lotw_info_orange");
	$('#qrz_info').text("").hide();
	$('#hamqth_info').text("").hide();
	$('#dxcc_id').val("").multiselect('refresh');
	$('#cqz').val("");
	$('#ituz').val("");
	$('#name').val("");
	$('#qth').val("");
	$('#locator').val("");
	$('#ant_path').val("");
	$('#iota_ref').val("");
	$("#locator").removeClass("confirmedGrid");
	$("#locator").removeClass("workedGrid");
	$("#locator").removeClass("newGrid");
	$("#callsign").val("");
	$("#callsign").removeClass("confirmedGrid");
	$("#callsign").removeClass("workedGrid");
	$("#callsign").removeClass("newGrid");
	$('#callsign_info').removeClass("text-bg-secondary");
	$('#callsign_info').removeClass("text-bg-success");
	$('#callsign_info').removeClass("text-bg-danger");
	$('#callsign-image').attr('style', 'display: none;');
	$('#callsign-image-content').text("");
	$("#operator_callsign").val(activeStationOP);
	$('#qsl_via').val("");
	$('#callsign_info').text("");
	$('#stateDropdown').val("");
	$('#qso-last-table').show();
	$('#partial_view').hide();
	$('.callsign-suggest').hide();
	setRst($(".mode").val());
	var $select = $('#sota_ref').selectize();
	var selectize = $select[0].selectize;
	selectize.clear();
	var $select = $('#wwff_ref').selectize();
	var selectize = $select[0].selectize;
	selectize.clear();
	var $select = $('#pota_ref').selectize();
	var selectize = $select[0].selectize;
	selectize.clear();
	var $select = $('#darc_dok').selectize();
	var selectize = $select[0].selectize;
	selectize.clear();
	$select = $('#stationCntyInputQso').selectize();
	selectize = $select[0].selectize;
	selectize.clear();

	var $select = $('#sota_ref').selectize();
	var selectize = $select[0].selectize;
	selectize.clear();

	$('#notes').val("");

	$('#sig').val("");
	$('#sig_info').val("");
	$('#sent').val("N");
	$('#sent-method').val("");
	$('#qsl_via').val("");

	mymap.setView(pos, 12);
	mymap.removeLayer(markers);
	$('.callsign-suggest').hide();
	$('.dxccsummary').remove();
	$('#timesWorked').html(lang_qso_title_previous_contacts);
	updateStateDropdown('#dxcc_id', '#stateInputLabel', '#location_us_county', '#stationCntyInputEdit');
	clearTimeout();
	set_timers();
	resetTimers(qso_manual);
}

$("#callsign").on("focusout", function () {
	if ($(this).val().length >= 3 && preventLookup == false) {

		$("#noticer").fadeOut(1000);

		// Temp store the callsign
		var temp_callsign = $(this).val();

		/* Find and populate DXCC */
		$('.callsign-suggest').hide();

		if ($("#sat_name").val() != "") {
			var json_band = "SAT";
		} else {
			var json_band = $("#band").val();
		}
		var json_mode = $("#mode").val();

		var find_callsign = $(this).val().toUpperCase();
		var callsign = find_callsign;

		find_callsign = find_callsign.replace(/\//g, "-");
		find_callsign = find_callsign.replaceAll('Ø', '0');

		// Replace / in a callsign with - to stop urls breaking
		lookupCall = $.getJSON(base_url + 'index.php/logbook/json/' + find_callsign + '/' + json_band + '/' + json_mode + '/' + $('#stationProfile').val() + '/' + $('#start_date').val(), async function (result) {

			// Make sure the typed callsign and json result match
			if ($('#callsign').val().toUpperCase().replaceAll('Ø', '0') == result.callsign) {

				// Reset QSO fields
				resetDefaultQSOFields();

				if (result.dxcc.entity != undefined) {
					$('#country').val(convert_case(result.dxcc.entity));
					$('#callsign_info').text(convert_case(result.dxcc.entity));

					if ($("#sat_name").val() != "") {
						//logbook/jsonlookupgrid/io77/SAT/0/0
						await $.getJSON(base_url + 'index.php/logbook/jsonlookupcallsign/' + find_callsign + '/SAT/0/0', function (result) {
							// Reset CSS values before updating
							$('#callsign').removeClass("workedGrid");
							$('#callsign').removeClass("confirmedGrid");
							$('#callsign').removeClass("newGrid");
							$('#callsign').attr('title', '');

							if (result.confirmed) {
								$('#callsign').addClass("confirmedGrid");
								$('#callsign').attr('title', 'Callsign was already worked and confirmed in the past on this band and mode!');
							} else if (result.workedBefore) {
								$('#callsign').addClass("workedGrid");
								$('#callsign').attr('title', 'Callsign was already worked in the past on this band and mode!');
							}
							else {
								$('#callsign').addClass("newGrid");
								$('#callsign').attr('title', 'New Callsign!');
							}
						})
					} else {
						await $.getJSON(base_url + 'index.php/logbook/jsonlookupcallsign/' + find_callsign + '/0/' + $("#band").val() + '/' + $("#mode").val(), function (result) {
							// Reset CSS values before updating
							$('#callsign').removeClass("confirmedGrid");
							$('#callsign').removeClass("workedGrid");
							$('#callsign').removeClass("newGrid");
							$('#callsign').attr('title', '');

							if (result.confirmed) {
								$('#callsign').addClass("confirmedGrid");
								$('#callsign').attr('title', 'Callsign was already worked and confirmed in the past on this band and mode!');
							} else if (result.workedBefore) {
								$('#callsign').addClass("workedGrid");
								$('#callsign').attr('title', 'Callsign was already worked in the past on this band and mode!');
							} else {
								$('#callsign').addClass("newGrid");
								$('#callsign').attr('title', 'New Callsign!');
							}

						})
					}

					changebadge(result.dxcc.entity);

				}

				if (result.lotw_member == "active") {
					$('#lotw_info').text("LoTW");
					if (result.lotw_days > 365) {
						$('#lotw_info').addClass('lotw_info_red');
					} else if (result.lotw_days > 30) {
						$('#lotw_info').addClass('lotw_info_orange');
						$lotw_hint = ' lotw_info_orange';
					} else if (result.lotw_days > 7) {
						$('#lotw_info').addClass('lotw_info_yellow');
					}
					$('#lotw_link').attr('href', "https://lotw.arrl.org/lotwuser/act?act=" + callsign.replace('Ø', '0'));
					$('#lotw_link').attr('target', "_blank");
					$('#lotw_info').attr('data-bs-toggle', "tooltip");
					if (result.lotw_days == 1) { 
						$('#lotw_info').attr('data-bs-original-title', lang_lotw_upload_day_ago);
					} else {
						$('#lotw_info').attr('data-bs-original-title', lang_lotw_upload_days_ago.replace('%x', result.lotw_days));
					}
					$('[data-bs-toggle="tooltip"]').tooltip();
				}
				$('#qrz_info').html('<a target="_blank" href="https://www.qrz.com/db/' + callsign.replace('Ø', '0') + '"><img width="30" height="30" src="' + base_url + 'images/icons/qrz.com.png"></a>');
				$('#qrz_info').attr('title', 'Lookup ' + callsign.replace('Ø', '0') + ' info on qrz.com').removeClass('d-none');
				$('#qrz_info').show();
				$('#hamqth_info').html('<a target="_blank" href="https://www.hamqth.com/' + callsign.replace('Ø', '0') + '"><img width="30" height="30" src="' + base_url + 'images/icons/hamqth.com.png"></a>');
				$('#hamqth_info').attr('title', 'Lookup ' + callsign.replace('Ø', '0') + ' info on hamqth.com').removeClass('d-none');
				$('#hamqth_info').show();

				var $dok_select = $('#darc_dok').selectize();
				var dok_selectize = $dok_select[0].selectize;
				if ((result.dxcc.adif == '230') && (($("#callsign").val().trim().length) > 0)) {
					$.get(base_url + 'index.php/lookup/dok/' + $('#callsign').val().toUpperCase(), function (result) {
						if (result) {
							dok_selectize.addOption({ name: result });
							dok_selectize.setValue(result, false);
						}
					});
				} else {
					dok_selectize.clear();
				}

				$('#dxcc_id').val(result.dxcc.adif).multiselect('refresh');
				await updateStateDropdown('#dxcc_id', '#stateInputLabel', '#location_us_county', '#stationCntyInputEdit');
				if (result.callsign_cqz != '' && (result.callsign_cqz >= 1 && result.callsign_cqz <= 40)) {
					$('#cqz').val(result.callsign_cqz);
				} else {
					$('#cqz').val(result.dxcc.cqz);
				}

				if (result.callsign_ituz != '') {
					$('#ituz').val(result.callsign_ituz);
				} else {
					$('#ituz').val(result.dxcc.ituz);
				}

				var redIcon = L.icon({
					iconUrl: icon_dot_url,
					iconSize: [18, 18], // size of the icon
				});

				// Set Map to Lat/Long
				markers.clearLayers();
				mymap.setZoom(8);
				if (typeof result.latlng !== "undefined" && result.latlng !== false) {
					var marker = L.marker([result.latlng[0], result.latlng[1]], { icon: redIcon });
					mymap.panTo([result.latlng[0], result.latlng[1]]);
					mymap.setView([result.latlng[0], result.latlng[1]], 8);
				} else {
					var marker = L.marker([result.dxcc.lat, result.dxcc.long], { icon: redIcon });
					mymap.panTo([result.dxcc.lat, result.dxcc.long]);
					mymap.setView([result.dxcc.lat, result.dxcc.long], 8);
				}

				markers.addLayer(marker).addTo(mymap);


				/* Find Locator if the field is empty */
				if ($('#locator').val() == "") {
					$('#locator').val(result.callsign_qra);
					$('#locator_info').html(result.bearing);

					if (result.callsign_distance != "" && result.callsign_distance != 0) {
						document.getElementById("distance").value = result.callsign_distance;
					}

					if (result.callsign_qra != "") {
						if (result.confirmed) {
							$('#locator').addClass("confirmedGrid");
							$('#locator').attr('title', 'Grid was already worked and confirmed in the past');
						} else if (result.workedBefore) {
							$('#locator').addClass("workedGrid");
							$('#locator').attr('title', 'Grid was already worked in the past');
						} else {
							$('#locator').addClass("newGrid");
							$('#locator').attr('title', 'New grid!');
						}
					} else {
						$('#locator').removeClass("workedGrid");
						$('#locator').removeClass("confirmedGrid");
						$('#locator').removeClass("newGrid");
						$('#locator').attr('title', '');
					}

				}

				/* Find Operators Name */
				if ($('#qsl_via').val() == "") {
					$('#qsl_via').val(result.qsl_manager);
				}

				/* Find Operators Name */
				if ($('#name').val() == "") {
					$('#name').val(result.callsign_name);
				}

				/* Find Operators E-mail */
				if ($('#email').val() == "") {
					$('#email').val(result.callsign_email);
				}

				if ($('#continent').val() == "") {
					$('#continent').val(result.dxcc.cont);
				}

				if ($('#qth').val() == "") {
					$('#qth').val(result.callsign_qth);
				}

				/* Find link to qrz.com picture */
				if (result.image != "n/a") {
					$('#callsign-image-content').html('<img class="callsign-image-pic" href="' + result.image + '" data-fancybox="images" src="' + result.image + '" style="cursor: pointer;">');
					$('#callsign-image').attr('style', 'display: true;');
				}

				/*
					* Update state with returned value
					*/
				if ($("#stateDropdown").val() == "") {
					$("#stateDropdown").val(result.callsign_state);
				}

				/*
					* Update county with returned value
					*/
				selectize_usa_county('#stateDropdown', '#stationCntyInputQso');
				if ($('#stationCntyInputQso').has('option').length == 0 && result.callsign_us_county != "") {
					var county_select = $('#stationCntyInputQso').selectize();
					var county_selectize = county_select[0].selectize;
					county_selectize.addOption({ name: result.callsign_us_county });
					county_selectize.setValue(result.callsign_us_county, false);
				}

				if (result.timesWorked != "") {
					if (result.timesWorked == '0') {
						$('#timesWorked').html(lang_qso_title_not_worked_before);
					} else {
						$('#timesWorked').html(result.timesWorked + ' ' + lang_qso_title_times_worked_before);
					}
				} else {
					$('#timesWorked').html(lang_qso_title_previous_contacts);
				}
				if ($('#iota_ref').val() == "") {
					$('#iota_ref').val(result.callsign_iota);
				}
				// Hide the last QSO table
				$('#qso-last-table').hide();
				$('#partial_view').show();
				/* display past QSOs */
				$('#partial_view').html(result.partial);

				// Get DXX Summary
				getDxccResult(result.dxcc.adif, convert_case(result.dxcc.entity));
			} 
			// else {
			// 	console.log("Callsigns do not match, skipping lookup");
			// 	console.log("Typed Callsign: " + $('#callsign').val());
			// 	console.log("Returned Callsign: " + result.callsign);
			// }
		});
	} else {
		// Reset QSO fields
		resetDefaultQSOFields();
	}
})

/* time input shortcut */
$('#start_time').on('change', function () {
	var raw_time = $(this).val();
	if (raw_time.match(/^\d\[0-6]d$/)) {
		raw_time = "0" + raw_time;
	}
	if (raw_time.match(/^[012]\d[0-5]\d$/)) {
		raw_time = raw_time.substring(0, 2) + ":" + raw_time.substring(2, 4);
		$('#start_time').val(raw_time);
	}
});

$('#end_time').on('change', function () {
	var raw_time = $(this).val();
	if (raw_time.match(/^\d\[0-6]d$/)) {
		raw_time = "0" + raw_time;
	}
	if (raw_time.match(/^[012]\d[0-5]\d$/)) {
		raw_time = raw_time.substring(0, 2) + ":" + raw_time.substring(2, 4);
		$('#end_time').val(raw_time);
	}
});

/* date input shortcut */
$('#start_date').on('change', function () {
	raw_date = $(this).val();
	if (raw_date.match(/^[12]\d{3}[01]\d[0123]\d$/)) {
		raw_date = raw_date.substring(0, 4) + "-" + raw_date.substring(4, 6) + "-" + raw_date.substring(6, 8);
		$('#start_date').val(raw_date);
	}
});

/* on mode change */
$('.mode').on('change', function () {
	if ($('#radio').val() == 0) {
		$.get(base_url + 'index.php/qso/band_to_freq/' + $('#band').val() + '/' + $('.mode').val(), function (result) {
			$('#frequency').val(result).trigger("change");
		});
	}
	$('#frequency_rx').val("");
});

/* Calculate Frequency */
/* on band change */
$('#band').on('change', function () {
	if ($('#radio').val() == 0) {
		$.get(base_url + 'index.php/qso/band_to_freq/' + $(this).val() + '/' + $('.mode').val(), function (result) {
			$('#frequency').val(result).trigger("change");
		});
	}
	$('#frequency_rx').val("");
	$('#band_rx').val("");
	$("#selectPropagation").val("");
	$("#sat_name").val("");
	$("#sat_mode").val("");
	set_qrg();
});

/* On Key up Calculate Bearing and Distance */
$("#locator").on("input focus", function () {
	if ($(this).val()) {
		var qra_input = $(this).val();

		var qra_lookup = qra_input.substring(0, 4);

		if (qra_lookup.length >= 4) {

			// Check Log if satname is provided
			if ($("#sat_name").val() != "") {

				//logbook/jsonlookupgrid/io77/SAT/0/0

				$.getJSON(base_url + 'index.php/logbook/jsonlookupgrid/' + qra_lookup.toUpperCase() + '/SAT/0/0', function (result) {
					// Reset CSS values before updating
					$('#locator').removeClass("confirmedGrid");
					$('#locator').removeClass("workedGrid");
					$('#locator').removeClass("newGrid");
					$('#locator').attr('title', '');

					if (result.confirmed) {
						$('#locator').addClass("confirmedGrid");
						$('#locator').attr('title', 'Grid was already worked and confirmed in the past');
					} else if (result.workedBefore) {
						$('#locator').addClass("workedGrid");
						$('#locator').attr('title', 'Grid was already worked in the past');
					} else {
						$('#locator').addClass("newGrid");
						$('#locator').attr('title', 'New grid!');
					}
				})
			} else {
				$.getJSON(base_url + 'index.php/logbook/jsonlookupgrid/' + qra_lookup.toUpperCase() + '/0/' + $("#band").val() + '/' + $("#mode").val(), function (result) {
					// Reset CSS values before updating
					$('#locator').removeClass("confirmedGrid");
					$('#locator').removeClass("workedGrid");
					$('#locator').removeClass("newGrid");
					$('#locator').attr('title', '');

					if (result.confirmed) {
						$('#locator').addClass("confirmedGrid");
						$('#locator').attr('title', 'Grid was already worked and confimred in the past');
					} else if (result.workedBefore) {
						$('#locator').addClass("workedGrid");
						$('#locator').attr('title', 'Grid was already worked in the past');
					} else {
						$('#locator').addClass("newGrid");
						$('#locator').attr('title', 'New grid!');
					}

				})
			}
		}

		if (qra_input.length >= 4 && $(this).val().length > 0) {
			$.ajax({
				url: base_url + 'index.php/logbook/qralatlngjson',
				type: 'post',
				data: {
					qra: $(this).val(),
				},
				success: function (data) {
					// Set Map to Lat/Long
					result = JSON.parse(data);
					markers.clearLayers();
					if (typeof result[0] !== "undefined" && typeof result[1] !== "undefined") {
						var redIcon = L.icon({
							iconUrl: icon_dot_url,
							iconSize: [18, 18], // size of the icon
						});

						var marker = L.marker([result[0], result[1]], { icon: redIcon });
						mymap.setZoom(8);
						mymap.panTo([result[0], result[1]]);
						mymap.setView([result[0], result[1]], 8);
						markers.addLayer(marker).addTo(mymap);
					}
				},
				error: function () {
				},
			});

			$.ajax({
				url: base_url + 'index.php/logbook/searchbearing',
				type: 'post',
				data: {
					grid: $(this).val(),
					ant_path: $('#ant_path').val(),
					stationProfile: $('#stationProfile').val()
				},
				success: function (data) {
					$('#locator_info').html(data).fadeIn("slow");
				},
				error: function () {
					$('#locator_info').text("Error loading bearing!").fadeIn("slow");
				},
			});
			$.ajax({
				url: base_url + 'index.php/logbook/searchdistance',
				type: 'post',
				data: {
					grid: $(this).val(),
					ant_path: $('#ant_path').val(),
					stationProfile: $('#stationProfile').val()
				},
				success: function (data) {
					document.getElementById("distance").value = data;
				},
				error: function () {
					document.getElementById("distance").value = null;
				},
			});
		}
	}
});

$("#locator").on("focusout", function () {
	if ($(this).val().length == 0) {
		$('#locator_info').text("");
		document.getElementById("distance").value = null;
	}
});

$("#ant_path").on("change", function () {
	if ($("#locator").val().length > 0) {
		$.ajax({
			url: base_url + 'index.php/logbook/searchbearing',
			type: 'post',
			data: {
				grid: $('#locator').val(),
				ant_path: $('#ant_path').val(),
				stationProfile: $('#stationProfile').val()
			},
			success: function (data) {
				$('#locator_info').html(data).fadeIn("slow");
			},
			error: function () {
				$('#locator_info').text("Error loading bearing!").fadeIn("slow");
			},
		});
		$.ajax({
			url: base_url + 'index.php/logbook/searchdistance',
			type: 'post',
			data: {
				grid: $('#locator').val(),
				ant_path: $('#ant_path').val(),
				stationProfile: $('#stationProfile').val()
			},
			success: function (data) {
				$('#distance').val(data);
			},
			error: function () {
				$('#distance').val("");
			},
		});
	}
});

// Change report based on mode
$('.mode').on('change', function () {
	setRst($('.mode').val());
});

function convert_case(str) {
	var lower = str.toLowerCase();
	return lower.replace(/(^| )(\w)/g, function (x) {
		return x.toUpperCase();
	});
}

$('#dxcc_id').on('change', function () {
	$.getJSON(base_url + 'index.php/logbook/jsonentity/' + $(this).val(), function (result) {
		if (result.dxcc.name != undefined) {

			$('#country').val(convert_case(result.dxcc.name));
			$('#cqz').val(convert_case(result.dxcc.cqz));

			$('#callsign_info').removeClass("text-bg-secondary");
			$('#callsign_info').removeClass("text-bg-success");
			$('#callsign_info').removeClass("text-bg-danger");
			$('#callsign_info').attr('title', '');
			$('#callsign_info').text(convert_case(result.dxcc.name));

			changebadge(result.dxcc.name);

			// Set Map to Lat/Long it locator is not empty
			if ($('#locator').val() == "") {
				var redIcon = L.icon({
					iconUrl: icon_dot_url,
					iconSize: [18, 18], // size of the icon
				});

				markers.clearLayers();
				var marker = L.marker([result.dxcc.lat, result.dxcc.long], { icon: redIcon });
				mymap.setZoom(8);
				mymap.panTo([result.dxcc.lat, result.dxcc.long]);
				markers.addLayer(marker).addTo(mymap);
			}
		}
	});
});

//Spacebar moves to the name field when you're entering a callsign
//Similar to contesting ux, good for pileups.
$("#callsign").on("keydown", function (e) {
	if (e.which == 32) {
		$("#name").trigger("focus");
		e.preventDefault(); //Eliminate space char
	}
});


$("#callsign").on("input focus", function () {
	var ccall = $(this).val();
	if ($(this).val().length >= 3) {
		$('.callsign-suggest').show();
		$callsign = $(this).val().replace('Ø', '0');
		if (scps.filter((call => call.includes($(this).val().toUpperCase()))).length <= 0) {
			$.ajax({
				url: 'lookup/scp',
				method: 'POST',
				data: {
					callsign: $callsign.toUpperCase()
				},
				success: function (result) {
					$('.callsign-suggestions').text(result);
					scps = result.split(" ");
					highlightSCP(ccall.toUpperCase());
				}
			});
		} else {
			$('.callsign-suggestions').text(scps.filter((call) => call.includes($(this).val().toUpperCase())).join(' '));
			highlightSCP(ccall.toUpperCase());
		}
	} else {
		$('.callsign-suggest').hide();
		scps = [];
	}
});

RegExp.escape = function (text) {
	return String(text).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}


function highlightSCP(term, base) {
	if (!term) return;
	base = base || document.body;
	var re = new RegExp("(" + RegExp.escape(term) + ")", "gi");
	var replacement = "<span class=\"text-primary\">" + term + "</span>";
	$(".callsign-suggestions", base).contents().each(function (i, el) {
		if (el.nodeType === 3) {
			var data = el.data;
			if (data = data.replace(re, replacement)) {
				var wrapper = $("<span>").html(data);
				$(el).before(wrapper.contents()).remove();
			}
		}
	});
}


//Reset QSO form Fields function
function resetDefaultQSOFields() {
	$('#callsign_info').text("");
	$('#locator_info').text("");
	$('#country').val("");
	$('#continent').val("");
	$('#email').val("");
	$('#region').val("");
	$('#dxcc_id').val("").multiselect('refresh');
	$('#cqz').val("");
	$('#ituz').val("");
	$('#name').val("");
	$('#qth').val("");
	$('#locator').val("");
	$('#iota_ref').val("");
	$('#sota_ref').val("");
	$("#locator").removeClass("workedGrid");
	$("#locator").removeClass("confirmedGrid");
	$("#locator").removeClass("newGrid");
	$("#callsign").removeClass("workedGrid");
	$("#callsign").removeClass("confirmedGrid");
	$("#callsign").removeClass("newGrid");
	$('#callsign_info').removeClass("text-bg-secondary");
	$('#callsign_info').removeClass("text-bg-success");
	$('#callsign_info').removeClass("text-bg-danger");
	$('#stateDropdown').val("");
	$('#callsign-image').attr('style', 'display: none;');
	$('#callsign-image-content').text("");
	$('.dxccsummary').remove();
	$('#timesWorked').html(lang_qso_title_previous_contacts);
}

function closeModal() {
	var container = document.getElementById("modals-here")
	var backdrop = document.getElementById("modal-backdrop")
	var modal = document.getElementById("modal")

	modal.classList.remove("show")
	backdrop.classList.remove("show")

	setTimeout(function () {
		container.removeChild(backdrop)
		container.removeChild(modal)
	}, 200)
}

// [TimeOff] test Consistency timeOff value (concidering start and end are between 23:00 and 00:59) //
function testTimeOffConsistency() {
	var _start_time = $('#qso_input input[name="start_time"]').val();
	var _end_time = $('#qso_input input[name="end_time"]').val();
	$('#qso_input input[name="end_time"]').removeClass('inputError');
	$('#qso_input .warningOnSubmit').hide();
	$('#qso_input .warningOnSubmit_txt').empty();
	if (!((parseInt(_start_time.replaceAll(':', '')) <= parseInt(_end_time.replaceAll(':', '')))
		|| ((_start_time.substring(0, 2) == "23") && (_end_time.substring(0, 2) == "00")))) {
		$('#qso_input input[name="end_time"]').addClass('inputError');
		$('#qso_input .warningOnSubmit_txt').html(text_error_timeoff_less_timeon);
		$('#qso_input .warningOnSubmit').show();
		$('#qso_input input[name="end_time"]').off('change').on('change', function () { testTimeOffConsistency(); });
		return false;
	}
	return true;
}

$(document).ready(function () {
	qrg_inputtype();
	clearTimeout();
	set_timers();
	updateStateDropdown('#dxcc_id', '#stateInputLabel', '#location_us_county', '#stationCntyInputQso');

	// Clear the localStorage for the qrg units, except the quicklogCallsign
	let quicklogCallsign = localStorage.getItem('quicklogCallsign');
	localStorage.clear();
	if (quicklogCallsign) {
		localStorage.setItem('quicklogCallsign', quicklogCallsign);
	}
	set_qrg();

	$("#locator").popover({ placement: 'top', title: 'Gridsquare Formatting', content: "Enter multiple (4-digit) grids separated with commas. For example: IO77,IO78" })
	.focus(function () {
		$('#locator').popover('show');
	})
	.blur(function () {
		$('#locator').popover('hide');
	});

	$('#dxcc_id').multiselect({
		// template is needed for bs5 support
		templates: {
			button: '<button type="button" style="text-align: left !important;" class="multiselect dropdown-toggle btn btn-secondary w-auto" data-bs-toggle="dropdown" aria-expanded="false"><span class="multiselect-selected-text"></span></button>',
		},
		enableFiltering: true,
		enableFullValueFiltering: false,
		enableCaseInsensitiveFiltering: true,
		filterPlaceholder: lang_general_word_search,
		widthSynchronizationMode: 'always',
		numberDisplayed: 1,
		inheritClass: true,
		buttonWidth: '100%',
		maxHeight: 600
	});

	$('.multiselect-container .multiselect-filter', $('#dxcc_id').parent()).css({
		'position': 'sticky', 'top': '0px', 'z-index': 1, 'background-color': 'inherit', 'width': '100%', 'height': '37px'
	})

	$('#notice-alerts').delay(1000).fadeOut(5000);

	$('.callsign-suggest').hide();

	setRst($(".mode").val());

	/* On Page Load */
	var catcher = function () {
		var changed = false;
		$('form').each(function () {
			if ($(this).data('initialForm') != $(this).serialize()) {
				changed = true;
				$(this).addClass('changed');
			} else {
				$(this).removeClass('changed');
			}
		});
		if (changed) {
			return 'Unsaved QSO!';
		}
	};

	// Callsign always has focus on load
	$("#callsign").trigger("focus");

	// reset the timers on page load
	resetTimers(qso_manual);

	get_fav();

	$('#sota_ref').selectize({
		maxItems: 1,
		closeAfterSelect: true,
		loadThrottle: 250,
		valueField: 'name',
		labelField: 'name',
		searchField: 'name',
		options: [],
		create: true,
		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);
				}
			});
		},
		onChange: function (value) {
			if (value !== '') {
				$('#sota_info').show();
				$('#sota_info').html('<a target="_blank" href="https://summits.sota.org.uk/summit/' + value + '"><img width="32" height="32" src="' + base_url + 'images/icons/sota.org.uk.png"></a>');
				$('#sota_info').attr('title', 'Lookup ' + value + ' summit info on sota.org.uk');
			} else {
				$('#sota_info').hide();
			}
		}
	});

	$('#wwff_ref').selectize({
		maxItems: 1,
		closeAfterSelect: true,
		loadThrottle: 250,
		valueField: 'name',
		labelField: 'name',
		searchField: 'name',
		options: [],
		create: true,
		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);
				}
			});
		},
		onChange: function (value) {
			if (value !== '') {
				$('#wwff_info').show();
				$('#wwff_info').html('<a target="_blank" href="https://www.cqgma.org/zinfo.php?ref=' + value + '"><img width="32" height="32" src="' + base_url + 'images/icons/wwff.co.png"></a>');
				$('#wwff_info').attr('title', 'Lookup ' + value + ' reference info on cqgma.org');
			} else {
				$('#wwff_info').hide();
			}
		}
	});

	$('#pota_ref').selectize({
		maxItems: null,
		closeAfterSelect: true,
		loadThrottle: 250,
		valueField: 'name',
		labelField: 'name',
		searchField: 'name',
		options: [],
		create: true,
		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);
				}
			});
		},
		onChange: function (value) {
			if (value !== '' && value.indexOf(',') === -1) {
				$('#pota_info').show();
				$('#pota_info').html('<a target="_blank" href="https://pota.app/#/park/' + value + '"><img width="32" height="32" src="' + base_url + 'images/icons/pota.app.png"></a>');
				$('#pota_info').attr('title', 'Lookup ' + value + ' reference info on pota.co');
			} else {
				$('#pota_info').hide();
			}
		}
	});

	$('#darc_dok').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 at least 1 character is 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);
				}
			});
		}
	});

	/*
	Populate the Satellite Names Field on the QSO Panel
	*/
	$.getJSON(site_url + "/satellite/satellite_data", function (data) {

		// Build the options array
		var items = [];
		$.each(data, function (key, val) {
			items.push(
				'<option value="' + key + '">' + key + '</option>'
			);
		});

		// Add to the datalist
		$('.satellite_names_list').append(items.join(""));
	});

	// Only set the frequency when not set by userdata/PHP.
	if ($('#frequency').val() == "") {
		$.get(base_url + 'index.php/qso/band_to_freq/' + $('#band').val() + '/' + $('.mode').val(), function (result) {
			$('#frequency').val(result).trigger("change");
			$('#frequency_rx').val("");
			set_qrg();
		});
	}

	// everything loaded and ready 2 go
	bc.postMessage('ready');
});
