// search.js
$(document).ready(function() {
const searchInput = $("#searchInput");
const resultsPopup = $("#resultsPopup");
const resultsContainer = $("#resultsContainer");
const resultsContainerevent = $("#resultsContainerevent");
const searchQuery = $("#searchQuery");
const firstLoader = $('
Loading results...
');
const secondLoader = $('
Loading more results...
');
let timeout = null;
searchInput.on("input", function() {
clearTimeout(timeout);
const query = this.value.trim();
if (!query) {
resultsPopup.hide();
return;
}
searchQuery.text(`"${query}"`);
resultsContainer.empty();
resultsContainerevent.empty();
resultsPopup.show();
timeout = setTimeout(() => fetchResultsFromAPI(query), 500);
});
$(document).on("click", (e) => {
if (!$(e.target).closest("#searchInput, #resultsPopup").length) {
resultsPopup.hide();
}
});
function fetchResultsFromAPI(query) {
if (!$("#firstLoader").length) resultsContainer.before(firstLoader);
firstLoader.show();
$.ajax({
url: "https://all.conferencecart.com/api/aisearch",
type: "POST",
data: { query },
dataType: "json",
success: (data) => {
firstLoader.hide();
displayResults(data, query, resultsContainer);
},
error: () => {
firstLoader.hide();
showError(resultsContainer, "Error fetching results");
}
});
if (!$("#secondLoader").length) resultsContainerevent.before(secondLoader);
secondLoader.show();
$.ajax({
url: "https://all.conferencecart.com/api/aisearch",
type: "POST",
data: { query, type: "event" },
dataType: "json",
success: (data) => {
secondLoader.hide();
displayResults(data, query, resultsContainerevent);
},
error: () => {
secondLoader.hide();
showError(resultsContainerevent, "Error fetching event results");
}
});
}
function displayResults(data, query, container) {
container.empty();
if (!data?.length) return showNoResults(container, query);
const html = data
.filter(cat => Array.isArray(cat.data) && cat.data.length)
.map(cat => createCategoryHTML(cat, query))
.join("");
container.html(html);
}
function createCategoryHTML(category, query) {
const icon = getCategoryIcon(category.heading);
const heading = capitalize(category.heading);
const items = category.data
.map(item => `
${highlight(item.conference || item.text || '', query)}
`).join("");
return `
${icon} ${heading} ${category.data.length}
`;
}
function getCategoryIcon(c) {
const icons = {
country: '
',
state: '
',
city: '
',
topic: '
',
month: '
',
combined: '
',
events: '
',
};
return icons[c] || '
';
}
const capitalize = s => s ? s.charAt(0).toUpperCase() + s.slice(1) : "";
const highlight = (text = "", q = "") => q ? text.replace(new RegExp(`(${q})`, "gi"), '
$1') : text;
function showError(container, message) {
container.html(`
${message}
Please try again later
`);
}
function showNoResults(container, query) {
container.html(`
No results found for "${query}"
Try different keywords or browse our categories
`);
}
});