Baseballs and lineup cards are included for each team for this event.
Two (2) High School board certified Umpires are supplied for every game.
NO GATE FEES EVER!
Preliminary round games will take place at area town, high school and collegiate fields with the playoffs and championship games at college facilities.
Above and Beyond our Competition...Expanded Social Media Coverage included during the entirety of this event. Our digital content team promotes players and teams on our various social media platforms, conducts pre and post game interviews with players and coaches, captures photographs and videos during the event and reports the days activity all on our website! Also included are live in game scores, stats and standings for everyone to follow along on our website and app!
All teams are subject to play at any time at the tournament director's request
Full payment is due on August 15th, 2025. Your registration into this tournament is not guaranteed or secured until full payment is received. Teams who have registered and have not paid by August 15th, 2025 are subject to being replaced by another fully paid registrant.
To Book Using your Team Block or to Book as an Individual, Not Within a Team Block: Click Here!
Our Hotel Policies
ALL TRAVELING TEAM MANAGERS/CLUB ADMINISTRATORS MUST REVIEW OUR HOTEL POLICY & RULES PRESENTED BELOW. FAILURE TO KNOW OUR POLICY COULD SUBJECT YOUR TEAM TO NON-ACCEPTANCE OR REMOVAL FROM THE TOURNAMENT
To insure the quality of service provided during a Firecracker Sports event this organization has put in a Hotel Obligation Policy.
WHAT IS A “HOTEL OBLIGATION” TOURNAMENT?
Simply stated, if your team requires hotel accommodations (team traveling 75 miles or more to the event’s destination city) your team MUST stay at one of the approved participating tournament partner hotels. Teams are required to designate a representative to block off rooms for the entire team through our hotel portal or staff. These participating hotels are reviewable by clicking on the “hotel” links on the tournament event page or on the main page of Firecracker Sports. We do not have a full “stay to play” policy but we do require 75% of your team/coaches to stay with one of our partner hotels through our website. Reservations should be made ASAP as the hotels fill up quick.
We do have a waiver policy, if teams do NOT want to book through us, but want to participate in our events. Please see below.
WHY DOES THIS TOURNAMENT HAVE A “HOTEL OBLIGATION?”
We work very hard to keep our costs down and also balance the economic impact a tournament like ours can have towards the communities and programs we serve. The approved hotels on this website assist with both concerns and the following are the benefits to our programs:
We only require 75% of your team to stay with one of our hotels. This allows 25% of your team to use points for their stay at another hotel, use Air BNB or camp sites for their travel preferences.
To make it manageable we have room nights “blocked” for our out-of-town teams from our participating tournament partner hotels.
Because we do not use a Third Party Housing Group and we negotiate large blocks of rooms with the hotels directly, you’ll find a wide variety of best pricing and amenities from our hotels.
Care in selecting location and proximity to our playing field. See our “fields/facilities” tab to find out where your team most likely will be playing so you can lock down hotels near your fields.
All of our tournament hotels have been approved due to their quality and desire to give our guests the best event experience.
Room inventory which is shared with the tournament to ensure that room demands can be met from year to year.
SCHEDULES & STANDINGS
Brackets
TOP PERFORMERS
RULES
There is no rules.
WEATHER
Venue Location
`);printWindow.document.close();
});
/*
function gpe_get_schedules_list() {
const event_id = '40091';
let division_filter_drop = $("#division_filter_drop").val();
let pool_filter_drop = $("#pool_filter_drop").val();
let date_filter_drop = $("#date_filter_drop").val();// Show processing indicator (manually trigger it)
table.destroy(); // Destroy old DataTable before making new AJAX call
$("#schedules_table tbody").html('Loading...'); // Temporary loader row$.ajax({
url: gpe.ajax_url,
type: 'post',
data: {
action: 'gpe_ajax',
type: 'gpe_get_schedules_list',
event_id: event_id,
division_filter_drop: division_filter_drop,
pool_filter_drop: pool_filter_drop,
date_filter_drop: date_filter_drop
},
success: function (response) {
// Clear the table body and add new content
$("#schedules_table tbody").empty().html(response.data.html);// Reinitialize DataTable with processing enabled
table = $("#schedules_table").DataTable({
processing: true,
serverSide: false, // Keep it false unless loading data dynamically
searching: true,
paging: true,
autoWidth: false
});
}
});
}
function gpe_get_standing_list() {
const event_id = '40091';
let division_filter_drop = $("#division_filter_drop_for_standing").val();
let pool_filter_drop = $("#pool_filter_drop_for_standing").val();
// Show processing indicator (manually trigger it)
standings_table.destroy(); // Destroy old DataTable before making new AJAX call
$("#standings_table tbody").html('Loading...'); // Temporary loader row
$.ajax({
url: gpe.ajax_url,
type: 'post',
data: {
action: 'gpe_ajax',
type: 'gpe_get_standing_list',
event_id: event_id,
division_filter_drop: division_filter_drop,
pool_filter_drop: pool_filter_drop
},
success: function (response) {
// Clear the table body and add new content
$("#standings_table tbody").empty().html(response.data.html);
// Reinitialize DataTable with processing enabled
standings_table = $("#standings_table").DataTable({
processing: true,
serverSide: false, // Keep it false unless loading data dynamically
searching: true,
paging: false
});
}
});
}*/
$('#shareDropdown').change(function(){
var selectedOption = $(this).val();
if (selectedOption === "copy") {
var pageLink = window.location.href;
var tempInput = $("");
$("body").append(tempInput);
tempInput.val(pageLink).select();
document.execCommand("copy");
tempInput.remove();
Swal.fire({
title:"Success",
text:"Copied to clipboard!",
icon:'success'
});
// Reset dropdown selection
$(this).prop('selectedIndex', 0);
}
});
});
let isSchedulesTableInitialized = false;function gpeCustomeTabsnew(evt, cityName) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("gpe_tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("gpe_tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" gpe_active", "");
}
document.getElementById(cityName).style.display = "block";
evt.currentTarget.className += " gpe_active";if (cityName === "schedules_and_standings") {
// ✅ Prevent reinitializing the DataTable
if (!isSchedulesTableInitialized) {
// Only call once
window.gpe_get_schedules_list();
window.gpe_get_standing_list();
isSchedulesTableInitialized = true;
}
}
}function gpeCustomeTabs(evt, cityName) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("gpe_tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("gpe_tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" gpe_active", "");
}
document.getElementById(cityName).style.display = "block";
evt.currentTarget.className += " gpe_active";
// Redraw connectors when Bracket tab is activated
if (cityName === "brackets"){
//alert("Bracket");
loadSavedBracket();
}
if (cityName === "brackets" && window.globalSerialMap) {
// Wait until the browser has painted the visible DOM
//requestAnimationFrame(() => {
//setTimeout(() => {
//waitForLayoutAndDraw(window.globalSerialMap, 20);
waitForLayoutAndDrawStable(window.globalSerialMap, 20);
//}, 100);
//});
}
}// Get the element with id="defaultOpen" and click on it
document.getElementById("defaultOpen").click();
var acc = document.getElementsByClassName("gpe_accordion");
var i;
for (i = 0; i < acc.length; i++) {
acc[i].addEventListener("click", function() {
this.classList.toggle("active");
var panel = this.nextElementSibling;
if (panel.style.maxHeight) {
panel.style.maxHeight = null;
} else {
panel.style.maxHeight = panel.scrollHeight + "px";
}
});
}var latitude = document.getElementById("latitude").value;
var longitude = document.getElementById("longitude").value;var iframe = document.createElement("iframe");
iframe.src = "https://www.google.com/maps/embed?pb=!1m28!1m12!1m3!1d19797.686238814687!2d-71.3765509!3d41.8633795!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!4m13!3e6!4m5!1s0x89e45a80fc2b13ab%3A0x8f62f2e279889968!2sCurrent%20Location!3m2!1d" + latitude + "!2d" + longitude + "!4m5!1s0x89e45a7a2b41f7f3%3A0x6cb46461e8d0c1b4!2s" + latitude + "%2C" + longitude + "!3m2!1d" + latitude + "!2d" + longitude + "!5e0!3m2!1sen!2sus!4v1644233201036!5m2!1sen!2sus";
iframe.width = "528";
iframe.height = "295";
iframe.style.border = "0";
iframe.allowfullscreen = true;var mapContainer = document.getElementById("mapContainer");
mapContainer.innerHTML = "";
mapContainer.appendChild(iframe);
function getPoolsByDivision(divisionId) {
return $.ajax({
url: gpe.ajax_url,
method: "POST",
dataType: "json",
data: {
action: "gpe_ajax",
type: "get_pools_save",
division_id: divisionId
}
});
}function loadSavedBracket() {
// Get the division ID from the division select dropdown
const divisionId = $("#division_select").val();
// Get the current event ID dynamically from PHP
const eventId = '40091';// If division ID is not selected, exit early
if (!divisionId) return;
$.when(
$.ajax({
url: gpe.ajax_url,
type: "POST",
dataType: "json",
data: {
action: "gpe_ajax",
type: "get_saved_bracket",
event_id: eventId,
division_id: divisionId
}
}),
getPoolsByDivision(divisionId)
).done(function (bracketRes, poolsRes) {
// Extract bracket data from the first response (bracketRes)
let bracketData = bracketRes[0]?.data?.bracket_data || [];// Remove duplicates based on 'name' or 'id' or 'mapper_id' (whichever is unique)
bracketData = bracketData.filter((item, index, self) =>
index === self.findIndex(t => t.name === item.name)
);// Prepare a map of pool ID to pool title
const poolMap = {};
poolsRes[0]?.data?.forEach(pool => {
poolMap[pool.id] = pool.title;
});// Call renderSavedBracket function to render the bracket
renderSavedBracket(bracketData, poolMap);
}).fail(function () {
$("#bracket").html("
Error loading bracket.
");
});
// Perform both AJAX requests in parallel
/*$.when(
$.ajax({
url: gpe.ajax_url, // URL for the AJAX request
type: "POST", // HTTP method
dataType: "json", // Expected response type
data: {
action: "gpe_ajax", // WordPress action hook for AJAX
type: "get_saved_bracket", // Custom action to get saved bracket data
event_id: eventId, // The current event ID
division_id: divisionId // The selected division ID
}
}),
getPoolsByDivision(divisionId) // Function to get pools for the selected division
).done(function (bracketRes, poolsRes) {
// Extract bracket data from the first response (bracketRes)
const bracketData = bracketRes[0]?.data?.bracket_data || [];
// Prepare a map of pool ID to pool title
const poolMap = {};
poolsRes[0]?.data?.forEach(pool => {
poolMap[pool.id] = pool.title;
});// Call renderSavedBracket function to render the bracket
renderSavedBracket(bracketData, poolMap);
}).fail(function () {
// In case of failure, show an error message in the bracket container
$("#bracket").html("
Error loading bracket.
");
});*/
}
function renderSavedBracket(bracketData, poolMap) {
let bracketWrapper = $(".bracket_wrapper");
if (bracketWrapper.length === 0) {
bracketWrapper = $("
").addClass("bracket_wrapper");
// Append it to the main container if it's missing
$("#bracket").replaceWith(bracketWrapper);
} else {
bracketWrapper.empty(); // Clear existing content if already present
}
let bracketDiv = $("
")
.addClass("match")
.attr("id", matchId)
.attr("data-match-index", match.name);let score1 = match.team1_score ?? "-";
let score2 = match.team2_score ?? "-";
// Inside your rendering function (e.g. inside a loop for each match)
if (match.team_id1 && !teamSeedMap[match.team_id1] && match.seed1 && match.seed1 !== "0") {
teamSeedMap[match.team_id1] = match.seed1;
}
if (match.team_id2 && !teamSeedMap[match.team_id2] && match.seed2 && match.seed2 !== "0") {
teamSeedMap[match.team_id2] = match.seed2;
}// Use stored seed if available; fallback to current if it's valid (not "0")
let seed1 = "";
if (match.team_id1) {
const storedSeed1 = teamSeedMap[match.team_id1];
seed1 = storedSeed1 ? `(${storedSeed1}) ` : (match.seed1 && match.seed1 !== "0" ? `(${match.seed1}) ` : "");
}let seed2 = "";
if (match.team_id2) {
const storedSeed2 = teamSeedMap[match.team_id2];
seed2 = storedSeed2 ? `(${storedSeed2}) ` : (match.seed2 && match.seed2 !== "0" ? `(${match.seed2}) ` : "");
}//let team1 = match.team_name1 ?? "Team 1";
//let team2 = match.team_name2 ?? "Team 2";
let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1");
let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2");
// Combine seed and name for display
let displayTeam1 = `${seed1}${team1}`;
let displayTeam2 = `${seed2}${team2}`;let startTime = formatStartDateTime(match.start_date, match.start_time);
let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${displayTeam1}${score1}
${displayTeam2}${score2}
`);const matchContainer = $("
").addClass("match-container").css("margin-bottom", "20px");
matchContainer.append(matchDiv);match.serial = serial;
if (!groupMatches[match.column_number]) groupMatches[match.column_number] = [];
groupMatches[match.column_number].push(match);serialMap[`${group}-${serial}`] = {
...match,
group,
column: match.column_number,
serial
};if (i === 0) roundDiv1.append(matchContainer);
else if (i >= 1 && i <= 4) roundDiv2.append(matchContainer);
else if (i === 5 || i === 6) roundDiv3.append(matchContainer);
else if (i === 7) roundDiv4.append(matchContainer);
});columnsContainer.append(roundDiv1);
columnsContainer.append($("
").addClass("round").attr("data-column", columns[0]);
let roundDiv2 = $("
").addClass("round").attr("data-column", columns[1]);
let roundDiv3 = $("
").addClass("round").attr("data-column", columns[2]);
displayOrder.forEach((match, i) => {
const serial = groupSerialCounter++;
const matchId = `match-serial-${group}-${serial}`;
let matchDiv = $("
")
.addClass("match")
.attr("id", matchId)
.attr("data-match-index", match.name);let score1 = match.team1_score ?? "-";
let score2 = match.team2_score ?? "-";
// Inside your rendering function (e.g. inside a loop for each match)
if (match.team_id1 && !teamSeedMap[match.team_id1] && match.seed1 && match.seed1 !== "0") {
teamSeedMap[match.team_id1] = match.seed1;
}
if (match.team_id2 && !teamSeedMap[match.team_id2] && match.seed2 && match.seed2 !== "0") {
teamSeedMap[match.team_id2] = match.seed2;
}// Use stored seed if available; fallback to current if it's valid (not "0")
let seed1 = "";
if (match.team_id1) {
const storedSeed1 = teamSeedMap[match.team_id1];
seed1 = storedSeed1 ? `(${storedSeed1}) ` : (match.seed1 && match.seed1 !== "0" ? `(${match.seed1}) ` : "");
}let seed2 = "";
if (match.team_id2) {
const storedSeed2 = teamSeedMap[match.team_id2];
seed2 = storedSeed2 ? `(${storedSeed2}) ` : (match.seed2 && match.seed2 !== "0" ? `(${match.seed2}) ` : "");
}//let team1 = match.team_name1 ?? "Team 1";
//let team2 = match.team_name2 ?? "Team 2";
let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1");
let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2");
// Combine seed and name for display
let displayTeam1 = `${seed1}${team1}`;
let displayTeam2 = `${seed2}${team2}`;let startTime = formatStartDateTime(match.start_date, match.start_time);
let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${displayTeam1}${score1}
${displayTeam2}${score2}
`);
const matchContainer = $("
").addClass("match-container");
matchContainer.append(matchDiv);match.serial = serial;
serialMap[`${group}-${serial}`] = {
...match,
group,
column: match.column_number,
serial
};if (i === 0) roundDiv1.append(matchContainer);
else if (i === 1 || i === 2) roundDiv2.append(matchContainer);
else if (i === 3) roundDiv3.append(matchContainer);
});columnsContainer.append(roundDiv1);
columnsContainer.append($("