window.onload = function(e)
{
let menuStructure = {};
let maxMenuItems = 10;
function toggleMenuContainer(state)
{
if(state)
{
$("#menu_container").fadeIn("fast", "swing");
}
else
{
$("#menu_container").fadeOut("fast", "swing");
}
}
function createMenu(menu, heading, subheading)
{
menuStructure[menu] =
{
menu: menu,
heading: heading,
subheading: subheading,
selectedItem: 0,
previousSelectedItemID: null,
container: "
",
items: {},
itemsArray: {}
}
$("#menu_container").append(menuStructure[menu].container);
}
function destroyMenus()
{
for(var k in menuStructure)
{
$("." + menuStructure[k].menu).remove();
}
menuStructure = {}
}
function populateMenu(menu, id, item, item2)
{
menuStructure[menu].items[id] =
{
id: id,
item: item,
item2: item2
}
if(item2 == "none")
{
$("." + menu).append("" + item + "");
}
else
{
$("." + menu).append("" + item + " " + item2 + "");
}
}
function finishPopulatingMenu(menu)
{
menuStructure[menu].itemsArray = $("." + menu + " li").toArray();
}
function updateMenuHeading(menu)
{
$("#menu_heading span").text(menuStructure[menu].heading);
}
function updateMenuSubheading(menu)
{
$("#menu_subheading span").text(menuStructure[menu].subheading);
}
function updateMenuStatus(text)
{
$("#menu_status span").text(text);
}
function toggleMenu(state, menu)
{
if(state)
{
if(menuStructure[menu].selectedItem < maxMenuItems)
{
$("." + menu).empty();
for(var i = 0; i < Object.keys(menuStructure[menu].itemsArray).length; i++)
{
if(i < maxMenuItems)
{
$("." + menu).append(menuStructure[menu].itemsArray[i]);
}
}
$("." + menu + " .item_selected").find("i").remove();
menuStructure[menu].itemsArray[menuStructure[menu].selectedItem].classList.add("item_selected");
var currentHTML = $("." + menu + " .item_selected").html();
$("." + menu + " .item_selected").html(" " + currentHTML);
var val1 = $("." + menu + " .item_selected").attr("class").split(" ")[0];
var val2 = $("." + menu + " .item_selected .item1").text();
var val3 = $("." + menu + " .item_selected .item2").text();
$.post("https://qb-customs/selectedItem", JSON.stringify({
id: val1,
item: val2,
item2: val3
}));
}
else
{
$("." + menu).empty();
for(var i = 0; i < Object.keys(menuStructure[menu].itemsArray).length; i++)
{
if(i > (menuStructure[menu].selectedItem - maxMenuItems) && i <= (maxMenuItems + (menuStructure[menu].selectedItem - maxMenuItems)))
{
$("." + menu).append(menuStructure[menu].itemsArray[i]);
}
}
$("." + menu + " .item_selected").find("i").remove();
menuStructure[menu].itemsArray[menuStructure[menu].selectedItem].classList.add("item_selected");
var currentHTML = $("." + menu + " .item_selected").html();
$("." + menu + " .item_selected").html(" " + currentHTML);
var val1 = $("." + menu + " .item_selected").attr("class").split(" ")[0];
var val2 = $("." + menu + " .item_selected .item1").text();
var val3 = $("." + menu + " .item_selected .item2").text();
$.post("https://qb-customs/selectedItem", JSON.stringify({
id: val1,
item: val2,
item2: val3
}));
}
$("." + menu).show();
}
else
{
$("." + menu).hide();
}
}
function updateItem2TextOnly(menu, id, text)
{
$("." + menu + " ." + id + " .item2").text(text);
$.post("https://qb-customs/updateItem2", JSON.stringify({
item: text
}));
}
function updateItem2Text(menu, id, text)
{
if(menuStructure[menu].previousSelectedItemID == null)
{
$("." + menu + " ." + id + " .item2").text(text);
menuStructure[menu].previousSelectedItemID = id
}
else if(id != menuStructure[menu].previousSelectedItemID)
{
var prevID = menuStructure[menu].previousSelectedItemID
$("." + menu + " ." + prevID + " .item2").text(menuStructure[menu].items[prevID].item2);
menuStructure[menu].itemsArray[prevID + 1].getElementsByClassName("item2")[0].textContent = menuStructure[menu].items[prevID].item2;
menuStructure[menu].previousSelectedItemID = id;
$("." + menu + " .item_selected .item2").text(text);
}
else
{
$("." + menu + " ." + id + " .item2").text(text);
menuStructure[menu].previousSelectedItemID = null
}
$.post("https://qb-customs/updateItem2", JSON.stringify({
item: text
}));
}
function updateItem2ID(menu, id, text)
{
menuStructure[menu].previousSelectedItemID = id
}
function scrollMenuFunctionality(direction, menu)
{
switch(direction)
{
case "down":
if(menuStructure[menu].selectedItem < (maxMenuItems - 1) && menuStructure[menu].selectedItem < (Object.keys(menuStructure[menu].itemsArray).length - 1))
{
menuStructure[menu].selectedItem++;
menuStructure[menu].itemsArray[menuStructure[menu].selectedItem].classList.add("item_selected");
$("." + menu + " .item_selected").find("i").remove();
menuStructure[menu].itemsArray[menuStructure[menu].selectedItem - 1].classList.remove("item_selected");
var currentHTML = $("." + menu + " .item_selected").html();
$("." + menu + " .item_selected").html(" " + currentHTML);
var val1 = $("." + menu + " .item_selected").attr("class").split(" ")[0];
var val2 = $("." + menu + " .item_selected .item1").text();
var val3 = $("." + menu + " .item_selected .item2").text();
$.post("https://qb-customs/selectedItem", JSON.stringify({
id: val1,
item: val2,
item2: val3
}));
}
else if(menuStructure[menu].selectedItem < (Object.keys(menuStructure[menu].itemsArray).length - 1))
{
menuStructure[menu].selectedItem++;
$("." + menu).append(menuStructure[menu].itemsArray[menuStructure[menu].selectedItem]);
menuStructure[menu].itemsArray[menuStructure[menu].selectedItem].classList.add("item_selected");
$("." + menu + " .item_selected").find("i").remove();
menuStructure[menu].itemsArray[menuStructure[menu].selectedItem - 1].classList.remove("item_selected");
var currentHTML = $("." + menu + " .item_selected").html();
$("." + menu + " .item_selected").html(" " + currentHTML);
menuStructure[menu].itemsArray[menuStructure[menu].selectedItem - maxMenuItems].remove();
var val1 = $("." + menu + " .item_selected").attr("class").split(" ")[0];
var val2 = $("." + menu + " .item_selected .item1").text();
var val3 = $("." + menu + " .item_selected .item2").text();
$.post("https://qb-customs/selectedItem", JSON.stringify({
id: val1,
item: val2,
item2: val3
}));
}
else if(menuStructure[menu].selectedItem == (Object.keys(menuStructure[menu].itemsArray).length - 1))
{
menuStructure[menu].selectedItem = 0;
$("." + menu + " .item_selected").find("i").remove();
$("." + menu).empty();
for(var i = 0; i < Object.keys(menuStructure[menu].itemsArray).length; i++)
{
if(i < maxMenuItems)
{
$("." + menu).append(menuStructure[menu].itemsArray[i]);
}
}
menuStructure[menu].itemsArray[menuStructure[menu].selectedItem].classList.add("item_selected");
if (Object.keys(menuStructure[menu].itemsArray).length - 1 != 0) {
menuStructure[menu].itemsArray[Object.keys(menuStructure[menu].itemsArray).length - 1].classList.remove("item_selected");
}
var currentHTML = $("." + menu + " .item_selected").html();
$("." + menu + " .item_selected").html(" " + currentHTML);
var val1 = $("." + menu + " .item_selected").attr("class").split(" ")[0];
var val2 = $("." + menu + " .item_selected .item1").text();
var val3 = $("." + menu + " .item_selected .item2").text();
$.post("https://qb-customs/selectedItem", JSON.stringify({
id: val1,
item: val2,
item2: val3
}));
}
break;
case "up":
if(menuStructure[menu].selectedItem == 0)
{
menuStructure[menu].selectedItem = Object.keys(menuStructure[menu].itemsArray).length - 1;
$("." + menu + " .item_selected").find("i").remove();
$("." + menu).empty();
for(var i = 0; i < Object.keys(menuStructure[menu].itemsArray).length; i++)
{
if(i > (menuStructure[menu].selectedItem - maxMenuItems) && i <= (maxMenuItems + (menuStructure[menu].selectedItem - maxMenuItems)))
{
$("." + menu).append(menuStructure[menu].itemsArray[i]);
}
}
menuStructure[menu].itemsArray[menuStructure[menu].selectedItem].classList.add("item_selected");
if (Object.keys(menuStructure[menu].itemsArray).length - 1 != 0) {
menuStructure[menu].itemsArray[0].classList.remove("item_selected");
}
var currentHTML = $("." + menu + " .item_selected").html();
$("." + menu + " .item_selected").html(" " + currentHTML);
var val1 = $("." + menu + " .item_selected").attr("class").split(" ")[0];
var val2 = $("." + menu + " .item_selected .item1").text();
var val3 = $("." + menu + " .item_selected .item2").text();
$.post("https://qb-customs/selectedItem", JSON.stringify({
id: val1,
item: val2,
item2: val3
}));
}
else if(menuStructure[menu].selectedItem < (maxMenuItems) && menuStructure[menu].selectedItem > 0)
{
menuStructure[menu].selectedItem--;
menuStructure[menu].itemsArray[menuStructure[menu].selectedItem].classList.add("item_selected");
$("." + menu + " .item_selected").find("i").remove();
menuStructure[menu].itemsArray[menuStructure[menu].selectedItem + 1].classList.remove("item_selected");
var currentHTML = $("." + menu + " .item_selected").html();
$("." + menu + " .item_selected").html(" " + currentHTML);
var val1 = $("." + menu + " .item_selected").attr("class").split(" ")[0];
var val2 = $("." + menu + " .item_selected .item1").text();
var val3 = $("." + menu + " .item_selected .item2").text();
$.post("https://qb-customs/selectedItem", JSON.stringify({
id: val1,
item: val2,
item2: val3
}));
}
else if(menuStructure[menu].selectedItem > (maxMenuItems - 1))
{
menuStructure[menu].selectedItem--;
menuStructure[menu].itemsArray[menuStructure[menu].selectedItem].classList.add("item_selected");
$("." + menu + " .item_selected").find("i").remove();
menuStructure[menu].itemsArray[menuStructure[menu].selectedItem + 1].classList.remove("item_selected");
var currentHTML = $("." + menu + " .item_selected").html();
$("." + menu + " .item_selected").html(" " + currentHTML);
menuStructure[menu].itemsArray[menuStructure[menu].selectedItem + 1].remove();
$("." + menu).prepend(menuStructure[menu].itemsArray[(menuStructure[menu].selectedItem - maxMenuItems) + 1]);
var val1 = $("." + menu + " .item_selected").attr("class").split(" ")[0];
var val2 = $("." + menu + " .item_selected .item1").text();
var val3 = $("." + menu + " .item_selected .item2").text();
$.post("https://qb-customs/selectedItem", JSON.stringify({
id: val1,
item: val2,
item2: val3
}));
}
break;
}
}
function playSoundEffect(soundEffect, volume)
{
var audioPlayer = null;
if(audioPlayer != null)
{
audioPlayer.pause();
}
audioPlayer = new Howl({src: ["./sounds/" + soundEffect + ".ogg"]});
audioPlayer.volume(volume);
audioPlayer.play();
}
window.addEventListener("message", function(event)
{
var eventData = event.data;
if(eventData.toggleMenuContainer)
{
toggleMenuContainer(eventData.state);
}
if(eventData.createMenu)
{
createMenu(eventData.menu, eventData.heading, eventData.subheading);
}
if(eventData.destroyMenus)
{
destroyMenus();
}
if(eventData.populateMenu)
{
populateMenu(eventData.menu, eventData.id, eventData.item, eventData.item2);
}
if(eventData.finishPopulatingMenu)
{
finishPopulatingMenu(eventData.menu);
}
if(eventData.updateMenuHeading)
{
updateMenuHeading(eventData.menu);
}
if(eventData.updateMenuSubheading)
{
updateMenuSubheading(eventData.menu);
}
if(eventData.updateMenuStatus)
{
updateMenuStatus(eventData.statusText)
}
if(eventData.toggleMenu)
{
toggleMenu(eventData.state, eventData.menu);
}
if(eventData.updateItem2Text)
{
updateItem2Text(eventData.menu, eventData.id, eventData.item2)
}
if(eventData.updateItem2TextOnly)
{
updateItem2TextOnly(eventData.menu, eventData.id, eventData.item2)
}
if(eventData.scrollMenuFunctionality)
{
scrollMenuFunctionality(eventData.direction, eventData.menu);
}
if(eventData.playSoundEffect)
{
playSoundEffect(eventData.soundEffect, eventData.volume);
}
});
}