var gmmap = new function () { var config, mapScript, src, siteID; var basicConfig = {"dataURL": "https://www.gatemastertickets.com/mapadmin/mapconfig.aspx", "css": "\r\n .gmEventMap_OuterContainer {\r\n position:relative;\r\n background-color:rgba(200,200,200,.8);\r\n border:1px solid rgba(200,200,200,.8);\r\n }\r\n .gmEventMap_OuterContainer *{\r\n box-sizing: border-box !important;\r\n }\r\n .gmEventMap_OuterContainer img.sizingMap {\r\n width:100%;\r\n height:auto;\r\n max-width:100%;\r\n opacity:0;\r\n }\r\n\r\n .gmEventMap_OuterContainer span.control {\r\n cursor:pointer;\r\n background-color:#aaa;\r\n padding:1em;\r\n margin:1em;\r\n }\r\n\r\n \r\n\r\n #gmEventMap {\r\n position:relative;\r\n overflow:hidden;\r\n }\r\n\r\n #gmEventMap .mapWrapper {\r\n position:absolute;\r\n top:0px;\r\n left:0px;\r\n min-width:100%;\r\n min-height:100%;\r\n }\r\n\r\n #gmEventMap .mapWrapper {\r\n /*overflow:hidden;*/\r\n }\r\n\r\n #gmEventMap .innerScale{\r\n overflow:visible;\r\n }\r\n\r\n #gmEventMap .mapWrapper .locations {\r\n position:absolute;\r\n top:0px;\r\n left:0px;\r\n overflow:visible;\r\n }\r\n #gmEventMap .seat {\r\n position:absolute;\r\n overflow:visible;\r\n border-radius:50%;\r\n cursor:pointer;\r\n text-align:center;\r\n }\r\n\r\n #gmEventMap .seat.selected {\r\n border:.25em solid #fff;\r\n }\r\n\r\n #gmEventMap.labelsfalse .seat .info {\r\n display:none;\r\n }\r\n\r\n\r\n #gmEventMap .seat .info {\r\n height:100%;\r\n line-height:100%;\r\n text-align:center;\r\n font-size:.7em;\r\n }\r\n #gmEventMap .seat .info span {\r\n display:none;\r\n }\r\n\r\n .gmEventMap_OuterContainer .mapKey {\r\n position:absolute;\r\n bottom:1em;\r\n right:1em;\r\n width: 30%;\r\n background-color:rgba(50,50,50,.5);\r\n text-align:center;\r\n }\r\n\r\n .gmEventMap_OuterContainer .mapKey .sectionKey{\r\n display:inline-block; margin:5px;\r\n padding:.5em 1em;\r\n }\r\n\r\n /*.mapControls {\r\n width:100%;\r\n background-color:rgba(50,50,50,.5);\r\n text-align:center;\r\n padding:.25em;\r\n }*/\r\n\r\n .mapControls {\r\n position:absolute;\r\n top:1em;\r\n right:1em;\r\n width:3em;\r\n z-index:100;\r\n }\r\n .mapControls img {\r\n width:100%;\r\n max-width:100%;\r\n height:auto;\r\n }\r\n .mapControls .range-input {\r\n width:280px;\r\n margin:0 .5em;\r\n }\r\n .mapControls #mapReset{\r\n line-height:20px;\r\n cursor:pointer;\r\n background-color:#aaa;\r\n text-align:center;\r\n display:inline-block;\r\n padding:.5em 1em;\r\n margin:0 .5em;\r\n }\r\n\r\n .selectionInfo .proceedToCheckout {\r\n float:right;\r\n background-color:#38c363;\r\n padding:.25em 1em;\r\n margin:.25em;\r\n cursor:pointer;\r\n }\r\n .selectionInfo .proceedToCheckout:only-child {\r\n display:none;\r\n }\r\n .selectionInfo {\r\n text-align:left;\r\n padding:1em .5em .5em .5em;\r\n }\r\n\r\n .selectionInfo span.x, .selectionInfo span.y, .selectionInfo .seatID {\r\n display:none;\r\n }\r\n .selectionInfo strong, .selectionInfo span {\r\n margin-right:1em;\r\n }\r\n .selectionInfo .remove {\r\n cursor:pointer;\r\n font-weight:bold;\r\n color:#c33838;\r\n }\r\n .selectionInfo strong {\r\n display:inline-block;\r\n min-width:120px;\r\n }\r\n .selectionInfo .price {\r\n display:inline-block;\r\n min-width:30px;\r\n }\r\n .selectionInfo:after {\r\n content:\u0027\u0027;\r\n height:1px;\r\n width:100%;\r\n display:block;\r\n clear:both;\r\n }\r\n .desktop { display: none;}\r\n .desktop .zoom {\r\n cursor:pointer;\r\n }\r\n\r\n .mobile { display: block;}\r\n\r\n\r\n @media (min-width: 768px) {\r\n\r\n .desktop { display: block !important; }\r\n\r\n .mobile { display: none !important; }\r\n\r\n }\r\n\r\n\r\n", "settings": {"site":"SVRA"}}; var seatData; var $container; var loadConfig = function (siteid) { alert(siteid); } var getMySrc = function () { var scripts = document.getElementsByTagName('script'); var index = scripts.length - 1; mapScript = scripts[index]; src = mapScript.src; } this.init = function () { console.log("Map init()"); getMySrc(); siteID = getParameterByName("site", src); } this.getConfiguration = function (site = siteID) { if (config == null || siteID !== site) { siteID = site; var configDataURL = basicConfig.dataURL + "?site=" + siteID + "&configonly=true"; console.log("Loading configuration for " + site); //load new config data $.ajax({ url: configDataURL, dataType: 'jsonp', success: function (data) { config = data; generateMap(); getSeatData(); } }); } else { //config data already loaded generateMap(); } } this.loadMap = function(siteID) { this.getConfiguration(siteID); } var getSeatData = function(){ console.log("Loading seat data for " + siteID); $.ajax({ url: config.ajaxURL, dataType: 'json', success: function (data) { seatData = data; loadSeatData(); }, error: function (textStatus, errorThrown) { Success = false; } }); } var loadSeatData = function() { for (var s = 0; s < seatData.Sections.length; s++) { var sec = seatData.Sections[s]; for (var r = 0; r < sec.Rows.length; r++) { var row = sec.Rows[r]; for (var se = 0; se < row.Seats.length; se++) { var seat = row.Seats[se]; var $seat = $("#seat-" + seat.lngAssignID); $seat.attr("class","seat sold-" + seat.fSold); $(".price", $seat).text(seat.curPrice); } } } $(".seat").click(function(){ var $s = $(this); if ($s.hasClass("sold-false") && $s.hasClass("selected") == false){ console.log("Add seat " + $s.attr("id")); $s.addClass("selected"); var $seatInfo = $(".info", $s).clone(true).appendTo(".selectionInfo", $s.closest(".gmEventMap_OuterContainer")); } else { console.log("Seat " + $s.attr("id") + " unavailable"); $(".info", ".selectionInfo").filter(function(){ return $(".seatID", this).text() === $s.attr("id").replace("seat-",""); }).remove(); $s.removeClass("selected"); } }); $(".remove", ".seat").click(function(){ console.log("Remove Seat"); $("#seat-" + $(".seatID", $(this).parent()).text()).removeClass("selected"); $(this).parent().remove(); }); } var generateMap = function(){ if ($container == null) { console.log("Generating map for " + siteID); $container = $('
'); $container.insertAfter(mapScript); } $container.html(""); //add style sheets to container var $mapStyles = $(''); $container.append($mapStyles); mapStyleElm = document.createElement("style"); document.head.appendChild(mapStyleElm); var mapStyles = mapStyleElm.sheet; $infoSection = $("
"); //$container.append($infoSection); $mapControls = $('
'); $container.append($mapControls); $eventMap = $('
'); $mapWrapper = $('
'); $eventMap.append($mapWrapper); $container.append($eventMap); $mapKey = $('
'); $eventMap.append($mapKey); $selectionInfo = $('
Add to Cart
'); $container.append($selectionInfo); $(".proceedToCheckout", $container).click(function(){ var checkoutAddress = seatData.EcommerceSubmitURL + "?CompanyID=" + basicConfig.settings.CompanyID + "&dateStart=" + basicConfig.settings.dateStart + "&lngMerchItemID=" + basicConfig.settings.lngMerchItemID + "&lngSlot=" + basicConfig.settings.lngSlot + "&lngAssignID="; var seatSelections = ""; $(".info", $selectionInfo).each(function(){ seatSelections += $(".seatID", this).text() + ","; }); //debugger; alert(checkoutAddress + seatSelections.substring(0, seatSelections.length -1)); }); $("img", $eventMap).attr("src", config.mapURL); $("img.map", $eventMap).one("load", function () { var scale = $eventMap.width() / this.naturalWidth; $(this).parent().attr("style", "transform: scale(" + scale + "); transform-origin:0 0;"); }).each(function () { if (this.complete) { //$(this).load(); } }); for (var s = 0; s < config.config.Sections.length; s++) { var sec = config.config.Sections[s]; $mapKey.append('
' + sec.strSectionName + '
'); // if ("color" in sec == false) { sec.color = "#f00"; } //if ("x" in sec == false) { sec.x = "30px"; } //if ("y" in sec == false) { sec.y = "30px"; } var sectionName = "sec-" + convertToClass(sec.strSectionName); mapStyles.insertRule('#' + sectionName + ' .seat{ background-color:' + sec.color + ';width:' + sec.x + ';height:' + sec.y + ';}', mapStyles.cssRules.length); mapStyles.insertRule('#' + sectionName + ' .seat div.info { line-height:' + sec.y + ';}', mapStyles.cssRules.length); $displaySection = $('
'); for (var r = 0; r < sec.Rows.length; r++) { $displaySection.append(generateSectionRow(sec.Rows[r], sectionName, r)); } $(".locations", $mapWrapper).append($displaySection); } var panzoom = Panzoom($mapWrapper[0], { maxScale: 5, minScale: .5, }); $mapWrapper[0].parentElement.addEventListener('wheel', panzoom.zoomWithWheel); document.getElementById("mapzoomin").addEventListener('click', panzoom.zoomIn); document.getElementById("mapzoomout").addEventListener('click', panzoom.zoomOut); //document.getElementById("mapReset").addEventListener('click', panzoom.reset); //document.getElementById("mapZoomSlider").addEventListener('input', (event) => { // panzoom.zoom(event.target.valueAsNumber); //}); }; function generateSectionRow(json, id, sCount) { var $seats = $('
'); for (var s = 0; s < json.Seats.length; s++) { var seat = json.Seats[s]; if ("x" in seat == false) { seat.x = s * 40 + "px"; } if ("y" in seat == false) { seat.y = sCount * 40 + "px"; } $seats.append('
' + seat.strSeatName + '' + seat.x + '' + seat.y + 'Delete' + seat.lngAssignID + '
') } return $seats } var convertToClass = function (input) { return input.replace(/([^a-z0-9]+)/gi, '-'); } var getParameterByName = function (name, url = window.location.href) { name = name.replace(/[\[\]]/g, '\\$&'); var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, ' ')); } } $(document).ready(function () { gmmap.init(); gmmap.getConfiguration(); }); /** * Panzoom for panning and zooming elements using CSS transforms * Copyright Timmy Willison and other contributors * https://github.com/timmywil/panzoom/blob/master/MIT-License.txt */ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Panzoom=e()}(this,function(){"use strict";var C=function(){return(C=Object.assign||function(t){for(var e,n=1,o=arguments.length;n