{"_id":"shortyspxp","_rev":"246-42fc8da995d6b3559cab29a5c10c72d3","template":{"value":"the-national.html","type":"meta","options":{"className":"lookup hidden","label":"template","required":false,"default_value":"the-national.html","omit_empty":false,"widget":{"classes":[],"options":{"values":[],"view":"_templates"},"type":"selectlookup","values":[]},"permissions":{},"validators":[]}},"theme":{"value":"base.css","type":"meta","options":{"className":"lookup hidden","label":"theme","required":false,"default_value":"base.css","omit_empty":false,"widget":{"classes":[],"options":{"values":[],"view":"_themes"},"type":"selectlookup","values":[]},"permissions":{},"validators":[]}},"font":{"value":"roboto-raleway.css","type":"meta","options":{"className":"lookup hidden","label":"font packs","required":false,"default_value":"roboto-raleway.css","omit_empty":false,"widget":{"classes":[],"options":{"values":[],"view":"_fonts"},"type":"selectlookup","values":[]},"permissions":{},"validators":[]}},"type":"page, shortyspxp","title":{"value":"Shortys Pins and Pints","type":"meta","options":{"className":"","label":"","required":false,"omit_empty":false,"default_value":"Shortys Pins and Pints","widget":{"classes":[],"options":{},"type":"text"},"permissions":{},"validators":[]}},"css":{"value":"body {\r\n color: #FFFFFF;\r\n background: #000000;\r\n font-family: 'Andale Mono', monospace;\r\n}\r\n.headline, .label {\r\n font-family: 'Helvetica', sans-serif;\r\n text-transform: uppercase;\r\n letter-spacing: 4px;\r\n}\r\n.headline {\r\n font-size: 36px;\r\n}\r\n.labels {\r\n display: none;\r\n}\r\n.label {\r\n padding: 0;\r\n color: #ff6000;\r\n font-weight: 700;\r\n text-align: left;\r\n display: inline-block;\r\n opacity: .7;\r\n}\r\n.char, .lower, .upper {\r\n -webkit-backface-visibility: hidden;\r\n backface-visibility: hidden;\r\n}\r\n.item {\r\n font-size: 36px;\r\n line-height: 1;\r\n text-transform: uppercase;\r\n}\r\n.item div {\r\n line-height: 68px;\r\n position: relative;\r\n}\r\n.status {\r\n display: none !important;\r\n height: 28px;\r\n width: 55px;\r\n position: relative;\r\n background: url('/img/national/tap-off.png') center center no-repeat;\r\n transition: background .5s ease-out;\r\n}\r\n.status.ontap {\r\n background-image: url('/img/national/tap-on.png');\r\n}\r\n\r\n@media (min-width: 1830px) {\r\n .navbar, .headline {\r\n display: none;\r\n }\r\n body {\r\n margin: 0;\r\n padding: 0;\r\n background: black url('/img/shortyspxp/bg.png') center center no-repeat;\r\n }\r\n /* body.menu2, body.menu4 {\r\n background: #000000;\r\n }\r\n body.menu2 .wrapper, body.menu4 .wrapper {\r\n padding-top: 120px;\r\n } */\r\n .wrapper {\r\n height: 100vh;\r\n width: 100vw;\r\n max-height: 1080px;\r\n max-width: 1920px;\r\n padding: 14vh 1.5vw 0;\r\n -webkit-perspective: 1880px;\r\n perspective: 1880px;\r\n }\r\n .item, .labels {\r\n display: flex;\r\n }\r\n .item {\r\n height: 73px;\r\n font-size: 50px;\r\n margin-bottom: 32px;\r\n padding-top: 78px;\r\n }\r\n .origin {\r\n font-size: 32px;\r\n }\r\n .status {\r\n height: 68px;\r\n }\r\n .item div {\r\n letter-spacing: .5rem;\r\n }\r\n .labels {\r\n padding: 0;\r\n height: 0px;\r\n font-size: 47px;\r\n margin-bottom: 0;\r\n /* border-bottom: solid 1px #909090; */\r\n margin-top: 70px;\r\n }\r\n .label:nth-of-type(1), .no {\r\n width: 88px;\r\n margin-left: 2%;\r\n }\r\n .label:nth-of-type(2), .origin {\r\n width: 91px;\r\n }\r\n .label:nth-of-type(3), .brewery, .label:nth-of-type(5), .name {\r\n width: 616px;\r\n }\r\n .label:nth-of-type(4), .name {\r\n width: 616px;\r\n }\r\n .label:nth-of-type(5), .abv {\r\n width: 170px;\r\n }\r\n .label:nth-of-type(6), .price {\r\n width: 120px;\r\n }\r\n .labels li:not(:last-of-type), .item > div:not(:last-of-type) {\r\n margin-right: 2%;\r\n }\r\n .origin img {\r\n vertical-align: baseline;\r\n }\r\n}\r\n@media (min-width: 1920px) {\r\n .wrapper {\r\n padding: 16px 30px 0;\r\n }\r\n .label:nth-of-type(1), .no {\r\n margin-left: 18px;\r\n }\r\n .labels li:not(:last-of-type), .item > div:not(:last-of-type) {\r\n margin-right: 22px;\r\n }\r\n}\r\n\r\nbody.editmode .ibu {\r\n display: none;\r\n}\r\nbody.editmode .item {\r\n font-size: 32px;\r\n}\r\nbody.editmode .item div {\r\n line-height: 50px;\r\n display: inline-block;\r\n}\r\nbody.editmode .origin, body.editmode .abv, body.editmode .ibu {\r\n font-size: 75%;\r\n}\r\nbody.editmode .status img {\r\n padding-bottom: 8px;\r\n}\r\nbody.editmode .item:nth-of-type(1) {\r\n padding-top: 20px;\r\n margin-top: 20px;\r\n border-top: solid 1px white;\r\n}\r\nbody.editmode .item:nth-of-type(8n):not(:last-of-type) {\r\n padding-bottom: 20px;\r\n margin-bottom: 20px;\r\n border-bottom: solid 1px white;\r\n}\r\n\r\n/* Pins */\r\n.leanmodal {\r\n z-index: 1025;\r\n position: relative;\r\n}\r\na[href$=document-modal] {\r\n position: absolute;\r\n margin-top: -18px;\r\n font-size: 46px;\r\n}\r\nbody.editmode {\r\n padding-top: 70px;\r\n}\r\nbody.editmode .navbar-collapse {\r\n padding-right: 60px;\r\n}\r\nbody.editmode .navbar-toggle {\r\n margin-right: 60px;\r\n}\r\na[href$=items-modal],\r\na[href$=description-modal],\r\na[href$=subhead-modal],\r\na[href$=category-modal],\r\na[href$=origin-modal],\r\na[href$=title-modal],\r\na[href$=abv-modal],\r\na[href$=style-modal],\r\na[href$=ibu-modal] {\r\n display: none;\r\n}\r\na[href$=pin-modal] {\r\n margin-left: -15px;\r\n}\r\na[href$=document-modal] {\r\n position: absolute;\r\n margin-top: -20px;\r\n font-size: 46px;\r\n z-index: 10001;\r\n}\r\n.navbar-form {\r\n margin-top: 8px;\r\n}\r\n.navbar {\r\n font-family: sans-serif;\r\n z-index: 10000;\r\n}\r\n.settings-global {\r\n z-index: 10002;\r\n}\r\nbody.editmode .wc-text-pin[id$=\"-pin\"] {\r\n display: none;\r\n}\r\nbody.editmode .hide {\r\n display: block !important;\r\n opacity: .5;\r\n}\r\n","type":"meta","options":{"className":"css","label":"CSS Overrides","required":false,"omit_empty":false,"default_value":"body {\r\n color: #FFFFFF;\r\n background: #000000;\r\n font-family: 'Andale Mono', monospace;\r\n}\r\n.headline, .label {\r\n font-family: 'Helvetica', sans-serif;\r\n text-transform: uppercase;\r\n letter-spacing: 4px;\r\n}\r\n.headline {\r\n font-size: 36px;\r\n}\r\n.labels {\r\n display: none;\r\n}\r\n.label {\r\n padding: 0;\r\n color: #ff6000;\r\n font-weight: 700;\r\n text-align: left;\r\n display: inline-block;\r\n opacity: .7;\r\n}\r\n.char, .lower, .upper {\r\n -webkit-backface-visibility: hidden;\r\n backface-visibility: hidden;\r\n}\r\n.item {\r\n font-size: 36px;\r\n line-height: 1;\r\n text-transform: uppercase;\r\n}\r\n.item div {\r\n line-height: 68px;\r\n position: relative;\r\n}\r\n.status {\r\n display: none !important;\r\n height: 28px;\r\n width: 55px;\r\n position: relative;\r\n background: url('/img/national/tap-off.png') center center no-repeat;\r\n transition: background .5s ease-out;\r\n}\r\n.status.ontap {\r\n background-image: url('/img/national/tap-on.png');\r\n}\r\n\r\n@media (min-width: 1830px) {\r\n .navbar, .headline {\r\n display: none;\r\n }\r\n body {\r\n margin: 0;\r\n padding: 0;\r\n background: black url('/img/shortyspxp/bg.png') center center no-repeat;\r\n }\r\n /* body.menu2, body.menu4 {\r\n background: #000000;\r\n }\r\n body.menu2 .wrapper, body.menu4 .wrapper {\r\n padding-top: 120px;\r\n } */\r\n .wrapper {\r\n height: 100vh;\r\n width: 100vw;\r\n max-height: 1080px;\r\n max-width: 1920px;\r\n padding: 14vh 1.5vw 0;\r\n -webkit-perspective: 1880px;\r\n perspective: 1880px;\r\n }\r\n .item, .labels {\r\n display: flex;\r\n }\r\n .item {\r\n height: 73px;\r\n font-size: 50px;\r\n margin-bottom: 32px;\r\n padding-top: 78px;\r\n }\r\n .origin {\r\n font-size: 32px;\r\n }\r\n .status {\r\n height: 68px;\r\n }\r\n .item div {\r\n letter-spacing: .5rem;\r\n }\r\n .labels {\r\n padding: 0;\r\n height: 0px;\r\n font-size: 47px;\r\n margin-bottom: 0;\r\n /* border-bottom: solid 1px #909090; */\r\n margin-top: 70px;\r\n }\r\n .label:nth-of-type(1), .no {\r\n width: 88px;\r\n margin-left: 2%;\r\n }\r\n .label:nth-of-type(2), .origin {\r\n width: 91px;\r\n }\r\n .label:nth-of-type(3), .brewery, .label:nth-of-type(5), .name {\r\n width: 616px;\r\n }\r\n .label:nth-of-type(4), .name {\r\n width: 616px;\r\n }\r\n .label:nth-of-type(5), .abv {\r\n width: 170px;\r\n }\r\n .label:nth-of-type(6), .price {\r\n width: 120px;\r\n }\r\n .labels li:not(:last-of-type), .item > div:not(:last-of-type) {\r\n margin-right: 2%;\r\n }\r\n .origin img {\r\n vertical-align: baseline;\r\n }\r\n}\r\n@media (min-width: 1920px) {\r\n .wrapper {\r\n padding: 16px 30px 0;\r\n }\r\n .label:nth-of-type(1), .no {\r\n margin-left: 18px;\r\n }\r\n .labels li:not(:last-of-type), .item > div:not(:last-of-type) {\r\n margin-right: 22px;\r\n }\r\n}\r\n\r\nbody.editmode .ibu {\r\n display: none;\r\n}\r\nbody.editmode .item {\r\n font-size: 32px;\r\n}\r\nbody.editmode .item div {\r\n line-height: 50px;\r\n display: inline-block;\r\n}\r\nbody.editmode .origin, body.editmode .abv, body.editmode .ibu {\r\n font-size: 75%;\r\n}\r\nbody.editmode .status img {\r\n padding-bottom: 8px;\r\n}\r\nbody.editmode .item:nth-of-type(1) {\r\n padding-top: 20px;\r\n margin-top: 20px;\r\n border-top: solid 1px white;\r\n}\r\nbody.editmode .item:nth-of-type(8n):not(:last-of-type) {\r\n padding-bottom: 20px;\r\n margin-bottom: 20px;\r\n border-bottom: solid 1px white;\r\n}\r\n\r\n/* Pins */\r\n.leanmodal {\r\n z-index: 1025;\r\n position: relative;\r\n}\r\na[href$=document-modal] {\r\n position: absolute;\r\n margin-top: -18px;\r\n font-size: 46px;\r\n}\r\nbody.editmode {\r\n padding-top: 70px;\r\n}\r\nbody.editmode .navbar-collapse {\r\n padding-right: 60px;\r\n}\r\nbody.editmode .navbar-toggle {\r\n margin-right: 60px;\r\n}\r\na[href$=items-modal],\r\na[href$=description-modal],\r\na[href$=subhead-modal],\r\na[href$=category-modal],\r\na[href$=origin-modal],\r\na[href$=title-modal],\r\na[href$=abv-modal],\r\na[href$=style-modal],\r\na[href$=ibu-modal] {\r\n display: none;\r\n}\r\na[href$=pin-modal] {\r\n margin-left: -15px;\r\n}\r\na[href$=document-modal] {\r\n position: absolute;\r\n margin-top: -20px;\r\n font-size: 46px;\r\n z-index: 10001;\r\n}\r\n.navbar-form {\r\n margin-top: 8px;\r\n}\r\n.navbar {\r\n font-family: sans-serif;\r\n z-index: 10000;\r\n}\r\n.settings-global {\r\n z-index: 10002;\r\n}\r\nbody.editmode .wc-text-pin[id$=\"-pin\"] {\r\n display: none;\r\n}\r\nbody.editmode .hide {\r\n display: block !important;\r\n opacity: .5;\r\n}\r\n","widget":{"classes":[],"options":{},"type":"textarea"},"permissions":{},"validators":[]}},"javascript":{"value":"if (!initialized) {\r\n initialized = true;\r\n setTimeout(function(){\r\n initiate();\r\n }, 500);\r\n}\r\n\r\n//load audio on body click\r\nvar audio = new Audio(\"//menuat.com/static/js/flap2.wav\");\r\nfunction initiate() {\r\n var i, arr, set1, set2, set3, set4;\r\n\r\n if (!$('body').hasClass('editmode')) {\r\n //console.log('Setting up DOM');\r\n $(document).on('click','body',function(){\r\n var playPromise = audio.play();\r\n if (playPromise !== undefined) {\r\n playPromise.then(_ => {\r\n //audio.pause();\r\n })\r\n .catch(error => {});\r\n }\r\n });\r\n setupDom();\r\n }\r\n if (!$('body').hasClass('editmode')) {\r\n // if (!$('body').hasClass('editmode') && $(window).width() >= 1830) {\r\n $('.name').each(function(i, obj) {\r\n $(this).text($(this).text().trimToLength(14));\r\n });\r\n $('.brewery').each(function(i, obj) {\r\n $(this).text($(this).text().trimToLength(14));\r\n });\r\n $('.abv').each(function(i, obj) {\r\n $(this).text($(this).text().defaultValue());\r\n });\r\n $('.price').each(function(i, obj) {\r\n $(this).text($(this).text().defaultValue());\r\n });\r\n setCharacters();\r\n //console.log('Fetching data');\r\n // main function\r\n getData();\r\n }\r\n setInterval(function(){\r\n eventFlag = true;\r\n }, 21600000);\r\n}\r\n\r\nfunction setupDom() {\r\n var $junk;\r\n\r\n // filter items based on hash\r\n if ( hash === 'menu1' || hash === 'menu5' || hash === 'menu6' || hash === 'menu7' || hash === 'menu8' || hash === 'menu9' ) {\r\n $junk = $('.item').filter(function(){\r\n return ($(this).attr('order') > 8);\r\n });\r\n }\r\n // else if ( hash === 'menu2' ) {\r\n // $junk = $('.item').filter(function(){\r\n // return ($(this).attr('order') > 16 || $(this).attr('order') <= 24);\r\n // });\r\n // }\r\n // else if ( hash === 'menu3' ) {\r\n // $junk = $('.item').filter(function(){\r\n // return ($(this).attr('order') > 24 || $(this).attr('order') <= 32);\r\n // });\r\n // }\r\n\r\n $junk.remove();\r\n\r\n // remove processing span so\r\n // it doesn't screw with code\r\n //console.log('Moving items');\r\n $('.item').appendTo('.item-container');\r\n $('.item-container > span').remove();\r\n}\r\n\r\nfunction setCharacters() {\r\n // abv\r\n $('.oz, .abv, .price').splitFlap({\r\n image: 'img/shortyspxp/abv.png',\r\n charWidth: 44,\r\n charsMap: '1234567890. ',\r\n speed: 8,\r\n speedVariation: 1\r\n });\r\n // numbers\r\n $('.no').splitFlap({\r\n image: 'img/shortyspxp/numbers-lg.png',\r\n charWidth: 44,\r\n charsMap: '1234567890 ',\r\n speed: 8,\r\n speedVariation: 1\r\n });\r\n // words\r\n $('.name').splitFlap({\r\n image: 'img/shortyspxp/chars-lg.png',\r\n charWidth: 44,\r\n maxWords: 22,\r\n speed: 8,\r\n wordMap: [\"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\"]\r\n });\r\n \r\n $('.brewery').splitFlap({\r\n image: 'img/shortyspxp/chars-lg.png',\r\n charWidth: 44,\r\n maxWords: 22,\r\n speed: 8,\r\n wordMap: [\"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \"]\r\n });\r\n // $('.style').splitFlap({\r\n // image: 'img/national/chars-lg.png',\r\n // wordMap: [\"PILSNER \", \"ORGANIC LAGER \", \"1516 \", \"PILSNER \", \"NOBLE PILSNER \", \"POW MTN LAGER \", \"GRAPEFRUIT \", \"GOLD KOLSCH \", \"BOSTON LAGER \", \"ELECTRIC AVE \", \"ORGANIC LAGER \", \"SWITCH HITTER \", \"78 KOLSCH \", \"WRASPBERRY \", \"FAT TIRE \", \"GYPSY TEARS \", \"DALES PALE \", \"HUCKLEBERRY \", \"1897 AMBER \", \"ENGLISH SUMMER\", \"BRUNETTE \", \"DEAD GUY \", \"RED RAGE \", \"ORIGINAL 16 \", \"BLACKSMITH \", \"THIRSTY BEAVR \", \"STEAM ALE \", \"GLUTENBERG \", \"PEOPLE SKILLS \", \"GRAPEFRUIT \", \"TRADITIONAL \", \"BITTER \", \"WHITE ISA \", \"BOONT AMBER \", \"MIRROR POND \", \"BLONDE \", \"SHOW PONY \", \"3 BERRY KOLSCH\", \"BLUE BUCK \", \"HOPWORKS IPA \", \"IPA \", \"LOST LAKE IPA \", \"BIG DIPA \", \"CHAINBREAKER \", \"DETOUR ISA \", \"IPA \", \"HOPCIRCLE IPA \", \"JASMINE IPA \", \"LAWLESS IPA \", \"ROCKET RYE IPA\", \"STARCHEEK IPA \", \"IPA \", \"SMASHBOMB IPA \", \"RED RACER IPA \", \"WIT \", \"BELGIAN WIT \", \"CHAMBLY \", \"WHAT THE HUCK \", \"APRICOT \", \"VELVET FOG \", \"HEFEHOPPER \", \"EPHEMERE PEAR \", \"EPHEMERE APPLE\", \"SUNSETTER SUM \", \"OATMEAL STOUT \", \"PORTER \"],\r\n // charWidth: 44,\r\n // maxWords: 22,\r\n // speed: 6\r\n // });\r\n}\r\n\r\nfunction getData() {\r\n var url = '/query?keys=[[%22item%22,%22shortyspxp%22]]&sort=order&template=raw&format=json';\r\n var padLeft = createPadDir(),\r\n padRight = createPadDir(true),\r\n oz, name, order, brewery, abv, style, price, ibu, status,\r\n theDate, theSeconds, theMS, msUntil, timeout;\r\n\r\n // get json data from server\r\n $.getJSON(url, function (data) {\r\n arr = [];\r\n // parse each item's data and add to array\r\n $.each(data, function (k,v) {\r\n\r\n if (!v.hide) {\r\n order = padLeft(v.order, 2, 0);\r\n oz = padLeft(v.oz, 2, 0);\r\n name = padRight(v.beer, 14, ' ');\r\n brewery = padRight(v.title, 14, ' ');\r\n abv = padRight(v.abv, 3, '.0');\r\n // style = padRight(v.style, 14);\r\n price = padRight(v.price, 3, '.0');\r\n status = v.status;\r\n arr.push([order, oz, name.toUpperCase(), brewery.toUpperCase(), abv, price, status]);\r\n }\r\n });\r\n var cnt = arr.length;\r\n if ( cnt < 32 ) {\r\n for (var i = cnt + 1; i < 32; i++) {\r\n arr.push([i, \"000\", \" \", \" \", \"000\", \"000\"]);\r\n }\r\n }\r\n return arr;\r\n })\r\n .done(function () {\r\n theDate = serverTime();\r\n theSeconds = theDate.getSeconds() * 1000;\r\n theMS = theDate.getMilliseconds();\r\n msUntil = 60000 - theSeconds - theMS;\r\n timeout = parseInt(msUntil, 10);\r\n i = 1;\r\n\r\n // split array data into sets\r\n splitMatrix();\r\n\r\n // only run the else the first time\r\n // the 5 secs stands for the amount of time it takes each line to rotate\r\n if (eventFlag === false) {\r\n checkMenusReady().done(function() {\r\n //console.log(\"Starting rotation!\");\r\n // sync screens\r\n setTimeout(function () {\r\n setRotation(5);\r\n }, timeout);\r\n });\r\n } else {\r\n //console.log('Rotating new sets ' + (timeout / 1000 + 5).toFixed(1) + ' sec');\r\n eventFlag = false;\r\n // sync screens\r\n setTimeout(function () {\r\n setRotation(5);\r\n }, timeout);\r\n }\r\n });\r\n}\r\n\r\nfunction checkServer () {\r\n // will return true or false\r\n var conn = hostReachable();\r\n //console.log('Checking server...');\r\n // also check eventFlag which will only be true if there\r\n // are changes made in the editor (to replace eventSource)\r\n if (conn && eventFlag) {\r\n //console.log('Fetching new data.');\r\n getData();\r\n } else {\r\n //console.log('No changes');\r\n setRotation(5);\r\n }\r\n}\r\n\r\nfunction setRotation(secs) {\r\n // cascade the animation by timeout\r\n var timeout = (secs - 3) * 9000 + 63000; // 60 second delay\r\n // itemLoop(secs, to, from)\r\n if (hash === 'menu1') {\r\n itemLoop(secs, set2, set1);\r\n setTimeout(function () {\r\n itemLoop(secs, set3, set2);\r\n setTimeout(function () {\r\n itemLoop(secs, set4, set3);\r\n setTimeout(function () {\r\n itemLoop(secs, set1, set4);\r\n setTimeout(function () {\r\n checkServer();\r\n }, timeout);\r\n }, timeout);\r\n }, timeout);\r\n }, timeout);\r\n }\r\n}\r\n\r\nfunction itemLoop(secs, t, f) {\r\n // loop through lines\r\n var timeout = (secs - 3) * 1000;\r\n setTimeout(function () {\r\n rotateLine(i, t, f);\r\n i++;\r\n if (i < 9) {\r\n itemLoop(secs, t, f);\r\n } else {\r\n i = 1;\r\n }\r\n }, timeout);\r\n}\r\n\r\nfunction rotateLine(line, arrTo, arrFrom) {\r\n audio.play();\r\n // loop through item divs\r\n for (var i = 0; i < 6; i++) {\r\n var $item = $('.item:nth-of-type('+ line +') > div:nth-of-type('+ (i + 1) +')'),\r\n $sf = $item.splitFlap('splitflap'),\r\n l = line - 1;\r\n\r\n if ($item.hasClass('brewery') || $item.hasClass('name')) {\r\n $sf.setWordText(arrTo[l][i], arrFrom[l][i]);\r\n } else if ($item.hasClass('status')) {\r\n arrTo[l][i] ? $item.addClass('ontap') : $item.removeClass('ontap');\r\n } else {\r\n $sf.setText(arrTo[l][i], arrFrom[l][i]);\r\n }\r\n }\r\n}\r\n\r\n// helper functions\r\nfunction splitMatrix() {\r\n set1 = arrayChunk(arr, 8)[0];\r\n set2 = arrayChunk(arr, 8)[1];\r\n set3 = arrayChunk(arr, 8)[2];\r\n set4 = arrayChunk(arr, 8)[3];\r\n}\r\n\r\nfunction arrayChunk (array, len) {\r\n var chunks = [],\r\n i = 0,\r\n n = array.length;\r\n while (i < n) {\r\n chunks.push(array.slice(i, i += len));\r\n }\r\n return chunks;\r\n}\r\n\r\nfunction baseToString(value) {\r\n return value == null ? '' : (value + '');\r\n}\r\n\r\nfunction createPadDir(fromRight) {\r\n return function (string, length, chars) {\r\n string = baseToString(string);\r\n return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string);\r\n };\r\n}\r\n\r\nfunction createPadding(string, length, chars) {\r\n var strLength = string.length;\r\n length = +length;\r\n if (strLength >= length) {\r\n return '';\r\n }\r\n var padLength = length - strLength;\r\n chars = chars == null ? ' ' : (chars + '');\r\n return repeatString(chars, Math.ceil(padLength / chars.length)).slice(0, padLength);\r\n}\r\n\r\nfunction repeatString(string, n) {\r\n var result = '';\r\n string = baseToString(string);\r\n n = +n;\r\n if (n < 1 || !string) {\r\n return result;\r\n }\r\n do {\r\n if (n % 2) {\r\n result += string;\r\n }\r\n n = Math.floor(n / 2);\r\n string += string;\r\n } while (n);\r\n return result;\r\n}\r\n\r\nfunction randomNum(str) {\r\n var num;\r\n num = Math.floor(Math.random() * 900) + 100;\r\n return str.length == 3 ? num.toString().slice(1) : num.toString();\r\n}\r\n\r\nfunction hostReachable() {\r\n var xhr = new ( window.ActiveXObject || XMLHttpRequest )( \"Microsoft.XMLHTTP\" );\r\n var status;\r\n xhr.open( \"HEAD\", \"//\" + window.location.hostname + \"/?rand=\" + Math.floor((1 + Math.random()) * 0x10000), false );\r\n try {\r\n xhr.send();\r\n return ( xhr.status >= 200 && (xhr.status < 300 || xhr.status === 304) );\r\n } catch (error) {\r\n return false;\r\n }\r\n}\r\n\r\nfunction serverTime() {\r\n var xmlHttp = new XMLHttpRequest();\r\n xmlHttp.open('HEAD',window.location.href.toString(),false);\r\n xmlHttp.setRequestHeader(\"Content-Type\", \"text/html\");\r\n xmlHttp.send('');\r\n return new Date(xmlHttp.getResponseHeader(\"Date\"));\r\n}\r\nfunction checkMenusReady() {\r\n var r = $.Deferred();\r\n var attempt = 0;\r\n var startTimer = setInterval(function() {\r\n var truevalues = [];\r\n var answer = $.getJSON('/menuat/shortyspxp', function (data) {\r\n var values = [];\r\n var searchFor = '';\r\n for(var i=1;i<=3;i++) {\r\n searchFor = 'menu'+i;\r\n values[i] = data[searchFor];\r\n truevalues[i] = values[i].value;\r\n }\r\n return truevalues;\r\n }).done(function() {\r\n if( truevalues[1] >= 0 && truevalues[2] >= 0 && attempt < 100 ){\r\n //console.log(\"Menus Synced!\");\r\n clearInterval(startTimer);\r\n r.resolve();\r\n return true;\r\n }\r\n else if(attempt >= 100){\r\n //console.log(\"Not Synced\");\r\n clearInterval(startTimer);\r\n r.resolve();\r\n return true;\r\n }\r\n else{\r\n //console.log(\"Attempting to Sync\");\r\n attempt+=1;\r\n return false;\r\n }\r\n });\r\n }, 5000);\r\n return r;\r\n}\r\nString.prototype.trimToLength = function(m) {\r\n return (this.length > m) ? $.trim(this).substring(0, m) : this;\r\n};\r\nString.prototype.defaultValue = function() {\r\n return (this.length <= 0) ? \"0.0\" : this;\r\n};","type":"meta","options":{"className":"javascript","label":"JS Overrides","required":false,"omit_empty":false,"default_value":"if (!initialized) {\r\n initialized = true;\r\n setTimeout(function(){\r\n initiate();\r\n }, 500);\r\n}\r\n\r\n//load audio on body click\r\nvar audio = new Audio(\"//menuat.com/static/js/flap2.wav\");\r\nfunction initiate() {\r\n var i, arr, set1, set2, set3, set4;\r\n\r\n if (!$('body').hasClass('editmode')) {\r\n //console.log('Setting up DOM');\r\n $(document).on('click','body',function(){\r\n var playPromise = audio.play();\r\n if (playPromise !== undefined) {\r\n playPromise.then(_ => {\r\n //audio.pause();\r\n })\r\n .catch(error => {});\r\n }\r\n });\r\n setupDom();\r\n }\r\n if (!$('body').hasClass('editmode')) {\r\n // if (!$('body').hasClass('editmode') && $(window).width() >= 1830) {\r\n $('.name').each(function(i, obj) {\r\n $(this).text($(this).text().trimToLength(14));\r\n });\r\n $('.brewery').each(function(i, obj) {\r\n $(this).text($(this).text().trimToLength(14));\r\n });\r\n $('.abv').each(function(i, obj) {\r\n $(this).text($(this).text().defaultValue());\r\n });\r\n $('.price').each(function(i, obj) {\r\n $(this).text($(this).text().defaultValue());\r\n });\r\n setCharacters();\r\n //console.log('Fetching data');\r\n // main function\r\n getData();\r\n }\r\n setInterval(function(){\r\n eventFlag = true;\r\n }, 21600000);\r\n}\r\n\r\nfunction setupDom() {\r\n var $junk;\r\n\r\n // filter items based on hash\r\n if ( hash === 'menu1' || hash === 'menu5' || hash === 'menu6' || hash === 'menu7' || hash === 'menu8' || hash === 'menu9' ) {\r\n $junk = $('.item').filter(function(){\r\n return ($(this).attr('order') > 8);\r\n });\r\n }\r\n // else if ( hash === 'menu2' ) {\r\n // $junk = $('.item').filter(function(){\r\n // return ($(this).attr('order') > 16 || $(this).attr('order') <= 24);\r\n // });\r\n // }\r\n // else if ( hash === 'menu3' ) {\r\n // $junk = $('.item').filter(function(){\r\n // return ($(this).attr('order') > 24 || $(this).attr('order') <= 32);\r\n // });\r\n // }\r\n\r\n $junk.remove();\r\n\r\n // remove processing span so\r\n // it doesn't screw with code\r\n //console.log('Moving items');\r\n $('.item').appendTo('.item-container');\r\n $('.item-container > span').remove();\r\n}\r\n\r\nfunction setCharacters() {\r\n // abv\r\n $('.oz, .abv, .price').splitFlap({\r\n image: 'img/shortyspxp/abv.png',\r\n charWidth: 44,\r\n charsMap: '1234567890. ',\r\n speed: 8,\r\n speedVariation: 1\r\n });\r\n // numbers\r\n $('.no').splitFlap({\r\n image: 'img/shortyspxp/numbers-lg.png',\r\n charWidth: 44,\r\n charsMap: '1234567890 ',\r\n speed: 8,\r\n speedVariation: 1\r\n });\r\n // words\r\n $('.name').splitFlap({\r\n image: 'img/shortyspxp/chars-lg.png',\r\n charWidth: 44,\r\n maxWords: 22,\r\n speed: 8,\r\n wordMap: [\"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\", \"H2O \", \"GOLDEN LAGER \", \"IPA \", \"BODEM IPA \", \"TROPICAL PALE \", \"MELTY HOPS HAZ\"]\r\n });\r\n \r\n $('.brewery').splitFlap({\r\n image: 'img/shortyspxp/chars-lg.png',\r\n charWidth: 44,\r\n maxWords: 22,\r\n speed: 8,\r\n wordMap: [\"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \", \"FOUR PEAKS \", \"DRAGOON \", \"HALF ACRE \", \"BLACK PLAGUE B\", \"BELCHING BEAVE\", \"LEAD DOG \"]\r\n });\r\n // $('.style').splitFlap({\r\n // image: 'img/national/chars-lg.png',\r\n // wordMap: [\"PILSNER \", \"ORGANIC LAGER \", \"1516 \", \"PILSNER \", \"NOBLE PILSNER \", \"POW MTN LAGER \", \"GRAPEFRUIT \", \"GOLD KOLSCH \", \"BOSTON LAGER \", \"ELECTRIC AVE \", \"ORGANIC LAGER \", \"SWITCH HITTER \", \"78 KOLSCH \", \"WRASPBERRY \", \"FAT TIRE \", \"GYPSY TEARS \", \"DALES PALE \", \"HUCKLEBERRY \", \"1897 AMBER \", \"ENGLISH SUMMER\", \"BRUNETTE \", \"DEAD GUY \", \"RED RAGE \", \"ORIGINAL 16 \", \"BLACKSMITH \", \"THIRSTY BEAVR \", \"STEAM ALE \", \"GLUTENBERG \", \"PEOPLE SKILLS \", \"GRAPEFRUIT \", \"TRADITIONAL \", \"BITTER \", \"WHITE ISA \", \"BOONT AMBER \", \"MIRROR POND \", \"BLONDE \", \"SHOW PONY \", \"3 BERRY KOLSCH\", \"BLUE BUCK \", \"HOPWORKS IPA \", \"IPA \", \"LOST LAKE IPA \", \"BIG DIPA \", \"CHAINBREAKER \", \"DETOUR ISA \", \"IPA \", \"HOPCIRCLE IPA \", \"JASMINE IPA \", \"LAWLESS IPA \", \"ROCKET RYE IPA\", \"STARCHEEK IPA \", \"IPA \", \"SMASHBOMB IPA \", \"RED RACER IPA \", \"WIT \", \"BELGIAN WIT \", \"CHAMBLY \", \"WHAT THE HUCK \", \"APRICOT \", \"VELVET FOG \", \"HEFEHOPPER \", \"EPHEMERE PEAR \", \"EPHEMERE APPLE\", \"SUNSETTER SUM \", \"OATMEAL STOUT \", \"PORTER \"],\r\n // charWidth: 44,\r\n // maxWords: 22,\r\n // speed: 6\r\n // });\r\n}\r\n\r\nfunction getData() {\r\n var url = '/query?keys=[[%22item%22,%22shortyspxp%22]]&sort=order&template=raw&format=json';\r\n var padLeft = createPadDir(),\r\n padRight = createPadDir(true),\r\n oz, name, order, brewery, abv, style, price, ibu, status,\r\n theDate, theSeconds, theMS, msUntil, timeout;\r\n\r\n // get json data from server\r\n $.getJSON(url, function (data) {\r\n arr = [];\r\n // parse each item's data and add to array\r\n $.each(data, function (k,v) {\r\n\r\n if (!v.hide) {\r\n order = padLeft(v.order, 2, 0);\r\n oz = padLeft(v.oz, 2, 0);\r\n name = padRight(v.beer, 14, ' ');\r\n brewery = padRight(v.title, 14, ' ');\r\n abv = padRight(v.abv, 3, '.0');\r\n // style = padRight(v.style, 14);\r\n price = padRight(v.price, 3, '.0');\r\n status = v.status;\r\n arr.push([order, oz, name.toUpperCase(), brewery.toUpperCase(), abv, price, status]);\r\n }\r\n });\r\n var cnt = arr.length;\r\n if ( cnt < 32 ) {\r\n for (var i = cnt + 1; i < 32; i++) {\r\n arr.push([i, \"000\", \" \", \" \", \"000\", \"000\"]);\r\n }\r\n }\r\n return arr;\r\n })\r\n .done(function () {\r\n theDate = serverTime();\r\n theSeconds = theDate.getSeconds() * 1000;\r\n theMS = theDate.getMilliseconds();\r\n msUntil = 60000 - theSeconds - theMS;\r\n timeout = parseInt(msUntil, 10);\r\n i = 1;\r\n\r\n // split array data into sets\r\n splitMatrix();\r\n\r\n // only run the else the first time\r\n // the 5 secs stands for the amount of time it takes each line to rotate\r\n if (eventFlag === false) {\r\n checkMenusReady().done(function() {\r\n //console.log(\"Starting rotation!\");\r\n // sync screens\r\n setTimeout(function () {\r\n setRotation(5);\r\n }, timeout);\r\n });\r\n } else {\r\n //console.log('Rotating new sets ' + (timeout / 1000 + 5).toFixed(1) + ' sec');\r\n eventFlag = false;\r\n // sync screens\r\n setTimeout(function () {\r\n setRotation(5);\r\n }, timeout);\r\n }\r\n });\r\n}\r\n\r\nfunction checkServer () {\r\n // will return true or false\r\n var conn = hostReachable();\r\n //console.log('Checking server...');\r\n // also check eventFlag which will only be true if there\r\n // are changes made in the editor (to replace eventSource)\r\n if (conn && eventFlag) {\r\n //console.log('Fetching new data.');\r\n getData();\r\n } else {\r\n //console.log('No changes');\r\n setRotation(5);\r\n }\r\n}\r\n\r\nfunction setRotation(secs) {\r\n // cascade the animation by timeout\r\n var timeout = (secs - 3) * 9000 + 63000; // 60 second delay\r\n // itemLoop(secs, to, from)\r\n if (hash === 'menu1') {\r\n itemLoop(secs, set2, set1);\r\n setTimeout(function () {\r\n itemLoop(secs, set3, set2);\r\n setTimeout(function () {\r\n itemLoop(secs, set4, set3);\r\n setTimeout(function () {\r\n itemLoop(secs, set1, set4);\r\n setTimeout(function () {\r\n checkServer();\r\n }, timeout);\r\n }, timeout);\r\n }, timeout);\r\n }, timeout);\r\n }\r\n}\r\n\r\nfunction itemLoop(secs, t, f) {\r\n // loop through lines\r\n var timeout = (secs - 3) * 1000;\r\n setTimeout(function () {\r\n rotateLine(i, t, f);\r\n i++;\r\n if (i < 9) {\r\n itemLoop(secs, t, f);\r\n } else {\r\n i = 1;\r\n }\r\n }, timeout);\r\n}\r\n\r\nfunction rotateLine(line, arrTo, arrFrom) {\r\n audio.play();\r\n // loop through item divs\r\n for (var i = 0; i < 6; i++) {\r\n var $item = $('.item:nth-of-type('+ line +') > div:nth-of-type('+ (i + 1) +')'),\r\n $sf = $item.splitFlap('splitflap'),\r\n l = line - 1;\r\n\r\n if ($item.hasClass('brewery') || $item.hasClass('name')) {\r\n $sf.setWordText(arrTo[l][i], arrFrom[l][i]);\r\n } else if ($item.hasClass('status')) {\r\n arrTo[l][i] ? $item.addClass('ontap') : $item.removeClass('ontap');\r\n } else {\r\n $sf.setText(arrTo[l][i], arrFrom[l][i]);\r\n }\r\n }\r\n}\r\n\r\n// helper functions\r\nfunction splitMatrix() {\r\n set1 = arrayChunk(arr, 8)[0];\r\n set2 = arrayChunk(arr, 8)[1];\r\n set3 = arrayChunk(arr, 8)[2];\r\n set4 = arrayChunk(arr, 8)[3];\r\n}\r\n\r\nfunction arrayChunk (array, len) {\r\n var chunks = [],\r\n i = 0,\r\n n = array.length;\r\n while (i < n) {\r\n chunks.push(array.slice(i, i += len));\r\n }\r\n return chunks;\r\n}\r\n\r\nfunction baseToString(value) {\r\n return value == null ? '' : (value + '');\r\n}\r\n\r\nfunction createPadDir(fromRight) {\r\n return function (string, length, chars) {\r\n string = baseToString(string);\r\n return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string);\r\n };\r\n}\r\n\r\nfunction createPadding(string, length, chars) {\r\n var strLength = string.length;\r\n length = +length;\r\n if (strLength >= length) {\r\n return '';\r\n }\r\n var padLength = length - strLength;\r\n chars = chars == null ? ' ' : (chars + '');\r\n return repeatString(chars, Math.ceil(padLength / chars.length)).slice(0, padLength);\r\n}\r\n\r\nfunction repeatString(string, n) {\r\n var result = '';\r\n string = baseToString(string);\r\n n = +n;\r\n if (n < 1 || !string) {\r\n return result;\r\n }\r\n do {\r\n if (n % 2) {\r\n result += string;\r\n }\r\n n = Math.floor(n / 2);\r\n string += string;\r\n } while (n);\r\n return result;\r\n}\r\n\r\nfunction randomNum(str) {\r\n var num;\r\n num = Math.floor(Math.random() * 900) + 100;\r\n return str.length == 3 ? num.toString().slice(1) : num.toString();\r\n}\r\n\r\nfunction hostReachable() {\r\n var xhr = new ( window.ActiveXObject || XMLHttpRequest )( \"Microsoft.XMLHTTP\" );\r\n var status;\r\n xhr.open( \"HEAD\", \"//\" + window.location.hostname + \"/?rand=\" + Math.floor((1 + Math.random()) * 0x10000), false );\r\n try {\r\n xhr.send();\r\n return ( xhr.status >= 200 && (xhr.status < 300 || xhr.status === 304) );\r\n } catch (error) {\r\n return false;\r\n }\r\n}\r\n\r\nfunction serverTime() {\r\n var xmlHttp = new XMLHttpRequest();\r\n xmlHttp.open('HEAD',window.location.href.toString(),false);\r\n xmlHttp.setRequestHeader(\"Content-Type\", \"text/html\");\r\n xmlHttp.send('');\r\n return new Date(xmlHttp.getResponseHeader(\"Date\"));\r\n}\r\nfunction checkMenusReady() {\r\n var r = $.Deferred();\r\n var attempt = 0;\r\n var startTimer = setInterval(function() {\r\n var truevalues = [];\r\n var answer = $.getJSON('/menuat/shortyspxp', function (data) {\r\n var values = [];\r\n var searchFor = '';\r\n for(var i=1;i<=3;i++) {\r\n searchFor = 'menu'+i;\r\n values[i] = data[searchFor];\r\n truevalues[i] = values[i].value;\r\n }\r\n return truevalues;\r\n }).done(function() {\r\n if( truevalues[1] >= 0 && truevalues[2] >= 0 && attempt < 100 ){\r\n //console.log(\"Menus Synced!\");\r\n clearInterval(startTimer);\r\n r.resolve();\r\n return true;\r\n }\r\n else if(attempt >= 100){\r\n //console.log(\"Not Synced\");\r\n clearInterval(startTimer);\r\n r.resolve();\r\n return true;\r\n }\r\n else{\r\n //console.log(\"Attempting to Sync\");\r\n attempt+=1;\r\n return false;\r\n }\r\n });\r\n }, 5000);\r\n return r;\r\n}\r\nString.prototype.trimToLength = function(m) {\r\n return (this.length > m) ? $.trim(this).substring(0, m) : this;\r\n};\r\nString.prototype.defaultValue = function() {\r\n return (this.length <= 0) ? \"0.0\" : this;\r\n};","widget":{"classes":[],"options":{},"type":"textarea"},"permissions":{},"validators":[]}},"items":{"value":{"keys":[["category","shortyspxp"]],"sort":"order"},"type":"string","options":{"className":"hidden","label":"","required":false,"omit_empty":false,"default_value":{"keys":[["category","shortyspxp"]],"sort":"order"},"widget":{"classes":[],"options":{},"type":"query"},"permissions":{},"validators":[]}},"menu1":{"value":1,"type":"meta","options":{"className":"poll","label":"","required":false,"omit_empty":false,"default_value":1,"widget":{"classes":[],"options":{},"type":"text"},"validators":[],"permissions":{}}},"menu2":{"value":1,"type":"meta","options":{"className":"poll","label":"","required":false,"omit_empty":false,"default_value":1,"widget":{"classes":[],"options":{},"type":"text"},"validators":[],"permissions":{}}},"menu3":{"value":1,"type":"meta","options":{"className":"poll","label":"","required":false,"omit_empty":false,"default_value":1,"widget":{"classes":[],"options":{},"type":"text"},"validators":[],"permissions":{}}},"menu4":{"value":1,"type":"meta","options":{"className":"poll","label":"","required":false,"omit_empty":false,"default_value":1,"widget":{"classes":[],"options":{},"type":"text"},"validators":[],"permissions":{}}},"menu5":{"value":1,"type":"meta","options":{"className":"poll","label":"","required":false,"omit_empty":false,"default_value":1,"widget":{"classes":[],"options":{},"type":"text"},"validators":[],"permissions":{}}},"menu6":{"value":1,"type":"meta","options":{"className":"poll","label":"","required":false,"omit_empty":false,"default_value":1,"widget":{"classes":[],"options":{},"type":"text"},"validators":[],"permissions":{}}},"menu7":{"value":1,"type":"meta","options":{"className":"poll","label":"","required":false,"omit_empty":false,"default_value":1,"widget":{"classes":[],"options":{},"type":"text"},"validators":[],"permissions":{}}},"menu8":{"value":1,"type":"meta","options":{"className":"poll","label":"","required":false,"omit_empty":false,"default_value":1,"widget":{"classes":[],"options":{},"type":"text"},"validators":[],"permissions":{}}},"menu9":{"value":1,"type":"meta","options":{"className":"poll","label":"","required":false,"omit_empty":false,"default_value":1,"widget":{"classes":[],"options":{},"type":"text"},"validators":[],"permissions":{}}},"permissions":{"add":true,"update":true,"remove":true,"owner":"shortyspxp"}}