//require('./bootstrap'); ; /// files: roblox.js, jquery.json-2.2.js, jquery.simplemodal-1.3.5.js, jquery.tipsy.js, AjaxAvatarThumbnail.js, extensions/string.js, StringTruncator.min.js, json2.min.js, webkit.js, GoogleAnalytics/GoogleAnalyticsEvents.js, MasterPageUI.js, jquery.cookie.js, jquery.jsoncookie.js, XsrfToken.js, RobloxEventManager.js, RobloxEventListener.js, KontagentEventListener.js, GoogleEventListener.js, MongoEventListener.js, SearchVisionListener.js, SiteTouchEvent.js, JSErrorTracker.js, Studio2Alert.js, ClientInstaller.js, InstallationInstructions.js, MadStatus.js, PlaceLauncher.js, VideoPreRoll.js ; /// roblox.js (function(n, t) { function p(n, i) { var r = i.split("."); for (i = r.shift(); r.length > 0; n = n[i], i = r.shift()) if (n[i] === t) return t; return n[i] } function k(n, i, r) { var u = i.split("."); for (i = u.shift(); u.length > 0; n = n[i], i = u.shift()) n[i] === t && (n[i] = {}); n[i] = r } function nt(n, t) { var i = f.createElement("link"); i.href = n, i.rel = "stylesheet", i.type = "text/css", u.parentNode.insertBefore(i, u), t() } function g(n, t) { var i = f.createElement("script"); i.type = "text/javascript", i.src = n, i.onload = i.onreadystatechange = function() { i.readyState && i.readyState != "loaded" && i.readyState != "complete" || (t(), i.onload = i.onreadystatechange = null) }, u.parentNode.insertBefore(i, u) } function d(n) { return n.split(".").pop().split("?").shift() } function o(n) { return n.indexOf(".js") < 0 ? n : n.indexOf(r.modulePath) >= 0 ? n.split(r.modulePath).pop().split(".js").shift().replace("/", ".") : n } function v(n) { var t, i; return t = n.indexOf(".js") >= 0 || n.indexOf(".css") >= 0 ? n : r.baseUrl + r.modulePath + n.replace(".", "/") + ".js", i = r.versions[t] || 1, t + "?v=" + i } function s(n) { for (var r, u = [], i = 0; i < n.length; i++) r = p(Roblox, o(n[i])), r !== t && u.push(r); return u } function e(n) { var t = i[n]; if (t.loaded && t.depsLoaded) while (t.listeners.length > 0) t.listeners.shift()() } function a(n, u) { var f, s, h; if (!b(n) || r.externalResources.toString().indexOf(n) >= 0) return u(); f = o(n), i[f] === t ? (i[f] = { loaded: !1, depsLoaded: !0, listeners: [] }, i[f].listeners.push(u), s = v(f), h = d(s) == "css" ? nt : g, h(s, function() { i[f].loaded = !0, e(f) })) : (i[f].listeners.push(u), e(f)) } function h(n, t) { var r = n.shift(), i = n.length == 0 ? t : function() { h(n, t) }; a(r, i) } function l(n, t) { c(n) || (n = [n]); var i = function() { t.apply(null, s(n)) }; h(n.slice(0), i) } function y(n, t, r) { w(t) ? (r = t, t = []) : c(t) || (t = [t]), i[n] = i[n] || { loaded: !0, listeners: [] }, i[n].depsLoaded = !1, i[n].listeners.unshift(function() { k(Roblox, n, r.apply(null, s(t))) }), l(t, function() { i[n].depsLoaded = !0, e(n) }) } var f = n.document, u = f.getElementsByTagName("script")[0], b = function(n) { return typeof n == "string" }, c = function(n) { return Object.prototype.toString.call(n) == "[object Array]" }, w = function(n) { return Object.prototype.toString.call(n) == "[object Function]" }, i = {}, r = { baseUrl: "/", modulePath: "js/modules/", versions: {}, externalResources: [] }; typeof Roblox == "undefined" && (Roblox = {}), Roblox.config = r, Roblox.require = l, Roblox.define = y })(window); ; /// jquery.json-2.2.js (function(n) { n.toJSON = function(t) { var s, o, p, h, f, e, r, v, c, a, u, l, i, y; if (typeof JSON == "object" && JSON.stringify) return JSON.stringify(t); if (i = typeof t, t === null) return "null"; if (i == "undefined") return undefined; if (i == "number" || i == "boolean") return t + ""; if (i == "string") return n.quoteString(t); if (i == "object") { if (typeof t.toJSON == "function") return n.toJSON(t.toJSON()); if (t.constructor === Date) return s = t.getUTCMonth() + 1, s < 10 && (s = "0" + s), o = t.getUTCDate(), o < 10 && (o = "0" + o), p = t.getUTCFullYear(), h = t.getUTCHours(), h < 10 && (h = "0" + h), f = t.getUTCMinutes(), f < 10 && (f = "0" + f), e = t.getUTCSeconds(), e < 10 && (e = "0" + e), r = t.getUTCMilliseconds(), r < 100 && (r = "0" + r), r < 10 && (r = "0" + r), '"' + p + "-" + s + "-" + o + "T" + h + ":" + f + ":" + e + "." + r + 'Z"'; if (t.constructor === Array) { for (v = [], c = 0; c < t.length; c++) v.push(n.toJSON(t[c]) || "null"); return "[" + v.join(",") + "]" } a = []; for (u in t) { if (i = typeof u, i == "number") l = '"' + u + '"'; else if (i == "string") l = n.quoteString(u); else continue; typeof t[u] != "function" && (y = n.toJSON(t[u]), a.push(l + ":" + y)) } return "{" + a.join(", ") + "}" } }, n.evalJSON = function(n) { return typeof JSON == "object" && JSON.parse ? JSON.parse(n) : eval("(" + n + ")") }, n.secureEvalJSON = function(n) { if (typeof JSON == "object" && JSON.parse) return JSON.parse(n); var t = n; if (t = t.replace(/\\["\\\/bfnrtu]/g, "@"), t = t.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]"), t = t.replace(/(?:^|:|,)(?:\s*\[)+/g, ""), /^[\],:{}\s]*$/.test(t)) return eval("(" + n + ")"); throw new SyntaxError("Error parsing JSON, source is not valid."); }, n.quoteString = function(n) { return n.match(t) ? '"' + n.replace(t, function(n) { var t = i[n]; return typeof t == "string" ? t : (t = n.charCodeAt(), "\\u00" + Math.floor(t / 16).toString(16) + (t % 16).toString(16)) }) + '"' : '"' + n + '"' }; var t = /["\\\x00-\x1f\x7f-\x9f]/g, i = { "\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\" } })(jQuery); ; /// jquery.simplemodal-1.3.5.js (function(n) { var i = n.browser.msie && parseInt(n.browser.version) == 6 && typeof window.XMLHttpRequest != "object", r = !1, t = []; n.modal = function(t, i) { return n.modal.impl.init(t, i) }, n.modal.close = function() { n.modal.impl.close() }, n.fn.modal = function(t) { return n.modal.impl.init(this, t) }, n.modal.defaults = { appendTo: "body", focus: !0, opacity: 50, overlayId: "simplemodal-overlay", overlayCss: {}, containerId: "simplemodal-container", containerCss: {}, dataId: "simplemodal-data", dataCss: {}, minHeight: null, minWidth: null, maxHeight: null, maxWidth: null, autoResize: !1, autoPosition: !0, zIndex: 1e3, close: !0, closeHTML: '', closeClass: "simplemodal-close", escClose: !0, overlayClose: !1, position: null, persist: !1, modal: !0, onOpen: null, onShow: null, onClose: null }, n.modal.impl = { o: null, d: {}, init: function(t, i) { var r = this; if (r.d.data) return !1; if (r.o = n.extend({}, n.modal.defaults, i), r.zIndex = r.o.zIndex, r.occb = !1, typeof t == "object") t = t instanceof jQuery ? t : n(t), r.d.placeholder = !1, t.parent().parent().size() > 0 && (t.before(n("").attr("id", "simplemodal-placeholder").css({ display: "none" })), r.d.placeholder = !0, r.display = t.css("display"), r.o.persist || (r.d.orig = t.clone(!0))); else if (typeof t == "string" || typeof t == "number") t = n("
").html(t); else return alert("SimpleModal Error: Unsupported data type: " + typeof t), r; return r.create(t), t = null, r.open(), n.isFunction(r.o.onShow) && r.o.onShow.apply(r, [r.d]), r }, create: function(r) { var u = this; t = u.getDimensions(), u.o.modal && i && (u.d.iframe = n('').css(n.extend(u.o.iframeCss, { display: "none", opacity: 0, position: "fixed", height: t[0], width: t[1], zIndex: u.o.zIndex, top: 0, left: 0 })).appendTo(u.o.appendTo)), u.d.overlay = n("
").attr("id", u.o.overlayId).addClass("simplemodal-overlay").css(n.extend(u.o.overlayCss, { display: "none", opacity: u.o.opacity / 100, height: u.o.modal ? t[0] : 0, width: u.o.modal ? t[1] : 0, position: "fixed", left: 0, top: 0, zIndex: u.o.zIndex + 1 })).appendTo(u.o.appendTo), u.d.container = n("
").attr("id", u.o.containerId).addClass("simplemodal-container").css(n.extend(u.o.containerCss, { display: "none", position: "fixed", zIndex: u.o.zIndex + 2 })).append(u.o.close && u.o.closeHTML ? n(u.o.closeHTML).addClass(u.o.closeClass) : "").appendTo(u.o.appendTo), u.d.wrap = n("
").attr("tabIndex", -1).addClass("simplemodal-wrap").css({ height: "100%", outline: 0, width: "100%", overflow: "visible" }).appendTo(u.d.container), u.d.data = r.attr("id", r.attr("id") || u.o.dataId).addClass("simplemodal-data").css(n.extend(u.o.dataCss, { display: "none" })).appendTo("body"), r = null, u.setContainerDimensions(), u.d.data.appendTo(u.d.wrap), i && u.fixIE() }, bindEvents: function() { var r = this; n("." + r.o.closeClass).bind("click.simplemodal", function(n) { n.preventDefault(), r.close() }), r.o.modal && r.o.close && r.o.overlayClose && r.d.overlay.bind("click.simplemodal", function(n) { n.preventDefault(), r.close() }), n(document).bind("keydown.simplemodal", function(n) { r.o.modal && r.o.focus && n.keyCode == 9 ? r.watchTab(n) : r.o.close && r.o.escClose && n.keyCode == 27 && (n.preventDefault(), r.close()) }), n(window).bind("resize.simplemodal", function() { t = r.getDimensions(), r.setContainerDimensions(!0), i ? r.fixIE() : r.o.modal && (r.d.iframe && r.d.iframe.css({ height: t[0], width: t[1] }), r.d.overlay.css({ height: t[0], width: t[1] })) }) }, unbindEvents: function() { n("." + this.o.closeClass).unbind("click.simplemodal"), n(document).unbind("keydown.simplemodal"), n(window).unbind("resize.simplemodal"), this.d.overlay.unbind("click.simplemodal") }, fixIE: function() { var i = this, t = i.o.position; n.each([i.d.iframe || null, i.o.modal ? i.d.overlay : null, i.d.container], function(n, i) { var l, c, o, e; if (i) { var s = "document.body.clientHeight", h = "document.body.clientWidth", b = "document.body.scrollHeight", a = "document.body.scrollLeft", v = "document.body.scrollTop", p = "document.body.scrollWidth", y = "document.documentElement.clientHeight", w = "document.documentElement.clientWidth", u = "document.documentElement.scrollLeft", f = "document.documentElement.scrollTop", r = i[0].style; r.position = "absolute", n < 2 ? (r.removeExpression("height"), r.removeExpression("width"), r.setExpression("height", "" + b + " > " + s + " ? " + b + " : " + s + ' + "px"'), r.setExpression("width", "" + p + " > " + h + " ? " + p + " : " + h + ' + "px"')) : (t && t.constructor == Array ? (o = t[0] ? typeof t[0] == "number" ? t[0].toString() : t[0].replace(/px/, "") : i.css("top").replace(/px/, ""), l = o.indexOf("%") == -1 ? o + " + (t = " + f + " ? " + f + " : " + v + ') + "px"' : parseInt(o.replace(/%/, "")) + " * ((" + y + " || " + s + ") / 100) + (t = " + f + " ? " + f + " : " + v + ') + "px"', t[1] && (e = typeof t[1] == "number" ? t[1].toString() : t[1].replace(/px/, ""), c = e.indexOf("%") == -1 ? e + " + (t = " + u + " ? " + u + " : " + a + ') + "px"' : parseInt(e.replace(/%/, "")) + " * ((" + w + " || " + h + ") / 100) + (t = " + u + " ? " + u + " : " + a + ') + "px"')) : (l = "(" + y + " || " + s + ") / 2 - (this.offsetHeight / 2) + (t = " + f + " ? " + f + " : " + v + ') + "px"', c = "(" + w + " || " + h + ") / 2 - (this.offsetWidth / 2) + (t = " + u + " ? " + u + " : " + a + ') + "px"'), r.removeExpression("top"), r.removeExpression("left"), r.setExpression("top", l), r.setExpression("left", c)) } }) }, focus: function(t) { var r = this, u = t || "first", i = n(":input:enabled:visible:" + u, r.d.wrap); i.length > 0 ? i.focus() : r.d.wrap.focus() }, getDimensions: function() { var t = n(window), i = n.browser.opera && n.browser.version > "9.5" && n.fn.jquery <= "1.2.6" ? document.documentElement.clientHeight : n.browser.opera && n.browser.version < "9.5" && n.fn.jquery > "1.2.6" ? window.innerHeight : t.height(); return [i, t.width()] }, getVal: function(n) { return n == "auto" ? 0 : n.indexOf("%") > 0 ? n : parseInt(n.replace(/px/, "")) }, setContainerDimensions: function(i) { var r = this; if (!i || i && r.o.autoResize) { var f = n.browser.opera ? r.d.container.height() : r.getVal(r.d.container.css("height")), u = n.browser.opera ? r.d.container.width() : r.getVal(r.d.container.css("width")), s = r.d.data.outerHeight(!0), h = r.d.data.outerWidth(!0), e = r.o.maxHeight && r.o.maxHeight < t[0] ? r.o.maxHeight : t[0], o = r.o.maxWidth && r.o.maxWidth < t[1] ? r.o.maxWidth : t[1]; f = f ? f > e ? e : f : s ? s > e ? e : s < r.o.minHeight ? r.o.minHeight : s : r.o.minHeight, u = u ? u > o ? o : u : h ? h > o ? o : h < r.o.minWidth ? r.o.minWidth : h : r.o.minWidth, r.d.container.css({ height: f, width: u }) } r.o.autoPosition && r.setPosition() }, setPosition: function() { var n = this, r, i, f = t[0] / 2 - n.d.container.outerHeight(!0) / 2, u = t[1] / 2 - n.d.container.outerWidth(!0) / 2; n.o.position && Object.prototype.toString.call(n.o.position) === "[object Array]" ? (r = n.o.position[0] || f, i = n.o.position[1] || u) : (r = f, i = u), n.d.container.css({ left: i, top: r }) }, watchTab: function(t) { var i = this, r; n(t.target).parents(".simplemodal-container").length > 0 ? (i.inputs = n(":input:enabled:visible:first, :input:enabled:visible:last", i.d.data[0]), (!t.shiftKey && t.target == i.inputs[i.inputs.length - 1] || t.shiftKey && t.target == i.inputs[0] || i.inputs.length == 0) && (t.preventDefault(), r = t.shiftKey ? "last" : "first", setTimeout(function() { i.focus(r) }, 10))) : (t.preventDefault(), setTimeout(function() { i.focus() }, 10)) }, open: function() { var t = this; t.d.iframe && t.d.iframe.show(), n.isFunction(t.o.onOpen) ? t.o.onOpen.apply(t, [t.d]) : (t.d.overlay.show(), t.d.container.show(), t.d.data.show()), t.focus(), t.bindEvents() }, close: function() { var t = this, i; if (!t.d.data) return !1; t.unbindEvents(), n.isFunction(t.o.onClose) && !t.occb ? (t.occb = !0, t.o.onClose.apply(t, [t.d])) : (t.d.placeholder ? (i = n("#simplemodal-placeholder"), t.o.persist ? i.replaceWith(t.d.data.removeClass("simplemodal-data").css("display", t.display)) : (t.d.data.hide().remove(), i.replaceWith(t.d.orig))) : t.d.data.hide().remove(), t.d.container.hide().remove(), t.d.overlay.hide().remove(), t.d.iframe && t.d.iframe.hide().remove(), t.d = {}) } } })(jQuery); ; /// jquery.tipsy.js (function(n) { n.fn.tipsy = function(t) { return t = n.extend({}, n.fn.tipsy.defaults, t), this.each(function() { var i = n.fn.tipsy.elementOptions(this, t); n(this).hover(function() { var t, e, r; n.data(this, "cancel.tipsy", !0), t = n.data(this, "active.tipsy"), t || (t = n('
'), t.css({ position: "absolute", zIndex: 999999 }), n.data(this, "active.tipsy", t)), (n(this).attr("title") || typeof n(this).attr("original-title") != "string") && n(this).attr("original-title", n(this).attr("title") || "").removeAttr("title"), typeof i.title == "string" ? e = n(this).attr(i.title == "title" ? "original-title" : i.title) : typeof i.title == "function" && (e = i.title.call(this)), t.find(".tipsy-inner")[i.html ? "html" : "text"](e || i.fallback), r = n.extend({}, n(this).offset(), { width: this.offsetWidth, height: this.offsetHeight }), t.get(0).className = "tipsy", t.remove().css({ top: 0, left: 0, visibility: "hidden", display: "block" }).appendTo(document.body); var f = t[0].offsetWidth, u = t[0].offsetHeight, o = typeof i.gravity == "function" ? i.gravity.call(this) : i.gravity; switch (o.charAt(0)) { case "n": t.css({ top: r.top + r.height, left: r.left + r.width / 2 - f / 2 }).addClass("tipsy-north"); break; case "s": t.css({ top: r.top - u, left: r.left + r.width / 2 - f / 2 }).addClass("tipsy-south"); break; case "e": t.css({ top: r.top + r.height / 2 - u / 2, left: r.left - f }).addClass("tipsy-east"); break; case "w": t.css({ top: r.top + r.height / 2 - u / 2, left: r.left + r.width }).addClass("tipsy-west") } i.fade ? t.css({ opacity: 0, display: "block", visibility: "visible" }).animate({ opacity: .8 }) : t.css({ visibility: "visible" }) }, function() { n.data(this, "cancel.tipsy", !1); var t = this; setTimeout(function() { if (!n.data(this, "cancel.tipsy")) { var r = n.data(t, "active.tipsy"); i.fade ? r.stop().fadeOut(function() { n(this).remove() }) : r.remove() } }, 100) }) }) }, n.fn.tipsy.elementOptions = function(t, i) { return n.metadata ? n.extend({}, i, n(t).metadata()) : i }, n.fn.tipsy.defaults = { fade: !1, fallback: "", gravity: "n", html: !1, title: "title" }, n.fn.tipsy.autoNS = function() { return n(this).offset().top > n(document).scrollTop() + n(window).height() / 2 ? "s" : "n" }, n.fn.tipsy.autoWE = function() { return n(this).offset().left > n(document).scrollLeft() + n(window).width() / 2 ? "e" : "w" } })(jQuery); ; /// AjaxAvatarThumbnail.js var RobloxThumbs = function() { function n(t, i, r) { $.get("/thumbs/rawavatar.ashx", { UserID: i, ThumbnailFormatID: r }, function(u) { u == "PENDING" ? window.setTimeout(function() { n(t, i, r) }, 3e3) : u.substring(5, 0) == "ERROR" || $("#" + t).attr("src", u) }) } return { GenerateAvatarThumb: function(t, i, r) { $("#" + t).attr("src", "/images/spinners/waiting.gif"), n(t, i, r) } } }(); ; /// extensions/string.js $.extend(String.prototype, function() { function n() { return this.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'") } return { escapeHTML: n } }()); ; /// StringTruncator.min.js function InitStringTruncator() { isInitialized || (fitStringSpan = document.createElement("span"), fitStringSpan.style.display = "inline", fitStringSpan.style.visibility = "hidden", fitStringSpan.style.padding = "0px", document.body.appendChild(fitStringSpan), isInitialized = !0) } function fitStringToWidth(n, t, i) { function f(n) { return n.replace("<", "<").replace(">", ">") } if (isInitialized || InitStringTruncator(), i && (fitStringSpan.className = i), i = f(n), fitStringSpan.innerHTML = i, fitStringSpan.offsetWidth > t) { for (var i = 0, r, u = n.length; r = u - i >> 1;) r = i + r, fitStringSpan.innerHTML = f(n.substring(0, r)) + "…", fitStringSpan.offsetWidth > t ? u = r : i = r; i = n.substring(0, i) + "…" } return i } function fitStringToWidthSafe(n, t, i) { return n = fitStringToWidth(n, t, i), n.indexOf("…") != -1 && (t = n.lastIndexOf(" "), t != -1 && t + 10 <= n.length && (n = n.substring(0, t + 2) + "…")), n } var isInitialized = !1, fitStringSpan = null; ; /// json2.min.js var JSON; JSON || (JSON = {}), function() { "use strict"; function i(n) { return n < 10 ? "0" + n : n } function f(n) { return o.lastIndex = 0, o.test(n) ? '"' + n.replace(o, function(n) { var t = s[n]; return typeof t == "string" ? t : "\\u" + ("0000" + n.charCodeAt(0).toString(16)).slice(-4) }) + '"' : '"' + n + '"' } function r(i, e) { var c, l, h, a, v = n, s, o = e[i]; o && typeof o == "object" && typeof o.toJSON == "function" && (o = o.toJSON(i)), typeof t == "function" && (o = t.call(e, i, o)); switch (typeof o) { case "string": return f(o); case "number": return isFinite(o) ? String(o) : "null"; case "boolean": case "null": return String(o); case "object": if (!o) return "null"; if (n += u, s = [], Object.prototype.toString.apply(o) === "[object Array]") { for (a = o.length, c = 0; c < a; c += 1) s[c] = r(c, o) || "null"; return h = s.length === 0 ? "[]" : n ? "[\n" + n + s.join(",\n" + n) + "\n" + v + "]" : "[" + s.join(",") + "]", n = v, h } if (t && typeof t == "object") for (a = t.length, c = 0; c < a; c += 1) l = t[c], typeof l == "string" && (h = r(l, o), h && s.push(f(l) + (n ? ": " : ":") + h)); else for (l in o) Object.hasOwnProperty.call(o, l) && (h = r(l, o), h && s.push(f(l) + (n ? ": " : ":") + h)); return h = s.length === 0 ? "{}" : n ? "{\n" + n + s.join(",\n" + n) + "\n" + v + "}" : "{" + s.join(",") + "}", n = v, h } } typeof Date.prototype.toJSON != "function" && (Date.prototype.toJSON = function() { return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + i(this.getUTCMonth() + 1) + "-" + i(this.getUTCDate()) + "T" + i(this.getUTCHours()) + ":" + i(this.getUTCMinutes()) + ":" + i(this.getUTCSeconds()) + "Z" : null }, String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function() { return this.valueOf() }); var e = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, o = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, n, u, s = { "\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\" }, t; typeof JSON.stringify != "function" && (JSON.stringify = function(i, f, e) { var o; if (n = "", u = "", typeof e == "number") for (o = 0; o < e; o += 1) u += " "; else typeof e == "string" && (u = e); if (t = f, f && typeof f != "function" && (typeof f != "object" || typeof f.length != "number")) throw new Error("JSON.stringify"); return r("", { "": i }) }), typeof JSON.parse != "function" && (JSON.parse = function(n, t) { function r(n, i) { var f, e, u = n[i]; if (u && typeof u == "object") for (f in u) Object.hasOwnProperty.call(u, f) && (e = r(u, f), e !== undefined ? u[f] = e : delete u[f]); return t.call(n, i, u) } var i; if (n = String(n), e.lastIndex = 0, e.test(n) && (n = n.replace(e, function(n) { return "\\u" + ("0000" + n.charCodeAt(0).toString(16)).slice(-4) })), /^[\],:{}\s]*$/.test(n.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) return i = eval("(" + n + ")"), typeof t == "function" ? r({ "": i }, "") : i; throw new SyntaxError("JSON.parse"); }) }(); ; /// webkit.js typeof Sys.Browser.WebKit == "undefined" && (Sys.Browser.WebKit = {}), navigator.userAgent.indexOf("WebKit/") > -1 && (Sys.Browser.agent = Sys.Browser.WebKit, Sys.Browser.version = parseFloat(navigator.userAgent.match(/WebKit\/(\d+(\.\d+)?)/)[1]), Sys.Browser.name = "WebKit"); ; /// GoogleAnalytics/GoogleAnalyticsEvents.js var GoogleAnalyticsEvents = new function() { this.FireEvent = function(n) { if (typeof _gaq != typeof undefined) { var i = ["_trackEvent"], t = ["b._trackEvent"]; _gaq.push(i.concat(n)), _gaq.push(t.concat(n)) } } }; ; /// MasterPageUI.js $(function() { $(".tooltip").tipsy(), $(".tooltip-top").tipsy({ gravity: "s" }), $(".tooltip-right").tipsy({ gravity: "w" }), $(".tooltip-left").tipsy({ gravity: "e" }), $(".tooltip-bottom").tipsy({ gravity: "n" }) }), typeof Roblox == "undefined" && (Roblox = {}), Roblox.FixedUI = function() { function s() { if (typeof pageYOffset != "undefined") return pageYOffset; var t = document.body, n = document.documentElement; return n = n.clientHeight ? n : t, n.scrollTop } function e() { var n = s(); t || (t = $("iframe.IframeAdHide")), t.each(function() { var t = $(this).offset().top - 73; !r.gutterAdsEnabled && n >= t ? $(this).css("visibility", "hidden") : $(this).css("visibility", "visible") }) } function i() { $("#Nav").css("cssText", "position: static !important;width:970px !important"), $("#SmallHeaderContainer").css("cssText", "position: relative !important;height: 36px !important;width:970px !important"), $(".forceSpace").css("cssText", "width: 970px !important; height:9px !important;padding-top: 0px !important;background:white"), $("#Container").css("cssText", "width: 970px !important"), $(".mySubmenuFixed").css("cssText", "position: relative; top: 0px;"), $("#MasterContainer").css("cssText", "width: 970px !important"), $(".mySubmenuFixed").length == 1 && ($(".forceSpaceUnderSubmenu").hide(), $(".forceSpace").css("cssText", "width: 910px !important; height:7px !important;padding-top: 0px !important;")), $(window).unbind("scroll") } function h() { $("#Nav").css("cssText", "position: fixed !important;width:100% !important"), $("#SmallHeaderContainer").css("cssText", "position: fixed !important;height: 40px !important;width:100% !important"), $(".forceSpace").css("cssText", "width: 100% !important; height:15px !important;padding-top: 62px !important;"), $("#Container").css("cssText", "width: 100% !important"), $(".mySubmenuFixed").css("cssText", "position: fixed; top: 68px;"), $("#MasterContainer").css("cssText", "width: 100%"), $(".mySubmenuFixed").length == 1 && $(".forceSpaceUnderSubmenu").show(), $(window).scroll(e) } function o() { var n = 1024; return document.body && document.body.offsetWidth && (n = document.body.offsetWidth), window.innerWidth && window.innerHeight && (n = window.innerWidth), n } function u() { o() < 978 ? i() : h() } var n = navigator.userAgent.toLowerCase(), f = /mobile/i.test(n) || /ipad/i.test(n) || /iphone/i.test(n) || /android/i.test(n) || /playbook/i.test(n) || /blackberry/i.test(n), t, r; return $(function() { f ? i() : $(window).load(u).resize(u) }), t = null, r = { isMobile: f, gutterAdsEnabled: !1, unfixHeader: i } }(); ; /// jquery.cookie.js jQuery.cookie = function(n, t, i) { var o, r, f, e, u, s; if (typeof t != "undefined") { i = i || {}, t === null && (t = "", i.expires = -1), o = "", i.expires && (typeof i.expires == "number" || i.expires.toUTCString) && (typeof i.expires == "number" ? (r = new Date, r.setTime(r.getTime() + i.expires * 864e5)) : r = i.expires, o = "; expires=" + r.toUTCString()); var h = i.path ? "; path=" + i.path : "", c = i.domain ? "; domain=" + i.domain : "", l = i.secure ? "; secure" : ""; document.cookie = [n, "=", encodeURIComponent(t), o, h, c, l].join("") } else { if (f = null, document.cookie && document.cookie != "") for (e = document.cookie.split(";"), u = 0; u < e.length; u++) if (s = jQuery.trim(e[u]), s.substring(0, n.length + 1) == n + "=") { f = decodeURIComponent(s.substring(n.length + 1)); break } return f } }; ; /// jquery.jsoncookie.js function RobloxJSONCookie(n) { this._cookiename = n }(function(n) { var t = function(n) { return typeof n == "object" && !(n instanceof Array) && n !== null }; n.extend({ getJSONCookie: function(t, i) { var r = n.cookie(t); return i ? r : r ? JSON.parse(r) : {} }, setJSONCookie: function(i, r, u) { var f = ""; return u = n.extend({ expires: 90, path: "/" }, u), f = t(r) ? JSON.stringify(r) : r, n.cookie(i, f, u) }, removeJSONCookie: function(t) { return n.cookie(t, null) }, JSONCookie: function(t, i, r) { return i && n.setJSONCookie(t, i, r), n.getJSONCookie(t) } }) })(jQuery), RobloxJSONCookie.prototype = { Delete: function() { return $.removeJSONCookie(this._cookiename) }, SetObj: function(n, t) { return t || (t = { path: "/" }), $.JSONCookie(this._cookiename, n, t) }, SetJSON: function(n, t) { return t || (t = { path: "/" }), $.JSONCookie(this._cookiename, n, t) }, GetObj: function() { var n = $.getJSONCookie(this._cookiename, !1); return n == null ? {} : n }, GetJSON: function() { return $.getJSONCookie(this._cookiename, !0) } }; ; /// XsrfToken.js typeof Roblox == "undefined" && (Roblox = {}), Roblox.XsrfToken = function() { function f(n) { var u, t; if (i.allUrlsEnabled) return !0; for (u = n.split("?")[0].toLowerCase(), t = 0; t < r.length; t++) if (r[t] === u) return !0; return !1 } function e(n) { r.push(n.toLowerCase()) } function o(t) { n = t } function u() { return n } var n = "", t = /(^|\?|&)token=[^&]*/, r = ["/chat/friendhandler.ashx", "/chat/party.ashx", "/chat/send.ashx", "/chat/utility.ashx", "/groups/rolesetupdater.ashx", "groups.aspx/exileuseranddeleteposts", "messageshandler.ashx", "emailupgrademe.ashx", "/services/usercheck.asmx/updatepersonalinfo", "/thumbs/assetmedia/placemediaitemsorthandler.ashx"], i; return $.ajaxPrefilter(function(i) { var o, e; i.dataType != "jsonp" && i.dataType != "script" && n != "" && f(i.url) && (o = $.param({ token: n }), t.test(i.url) || typeof i.data != "undefined" && t.test(i.data) || (i.url += /\?/.test(i.url) ? "&token=" + encodeURIComponent(n) : "?token=" + encodeURIComponent(n)), e = i.error, i.error = function(r, u, f) { if (r.status == 420) { var o = r.getResponseHeader("Token"); if (o == null) { typeof e == "function" && e(r, u, f); throw new Error("Null token returned by Xsrf enabled handler"); } t.test(i.url) ? i.url = i.url.replace(t, "$1token=" + encodeURIComponent(o)) : i.data = i.data.replace(t, "$1token=" + encodeURIComponent(o)), $.ajax(i), n = o } else typeof e == "function" && e(r, u, f) }) }), i = { setToken: o, getToken: u, allUrlsEnabled: !1, addEnabledUrl: e } }(); ; /// RobloxEventManager.js function RBXBaseEventListener() { if (!(this instanceof RBXBaseEventListener)) return new RBXBaseEventListener; this.init = function() { for (eventKey in this.events) $(document).bind(this.events[eventKey], $.proxy(this.localCopy, this)) }, this.events = [], this.localCopy = function(n, t) { var r = $.extend(!0, {}, n), i = $.extend(!0, {}, t); this.handleEvent(r, i) }, this.distillData = function() { return console.log("RBXEventListener distillData - Please implement me"), !1 }, this.handleEvent = function() { return console.log("EventListener handleEvent - Please implement me"), !1 }, this.fireEvent = function() { return console.log("EventListener fireEvent - Please implement me"), !1 } } RobloxEventManager = new function() { function u(n) { var i = new RegExp(n + "=([^;]*)"), t = i.exec(document.cookie); return t ? t[1] : null } function t(n) { for (var u = {}, r = n.split("&"), i, t = 0; t < r.length; t++) i = r[t].split("="), u[i[0]] = i[1]; return u } function i(n) { var i = u(n); return i ? t(i) : null } var n = [], r = {}; this.enabled = !1, this.initialized = !1, this.eventQueue = [], this.initialize = function(n) { for (this.initialized = !0, this.enabled = n; this.eventQueue.length > 0;) { var t = this.eventQueue.pop(); this.triggerEvent(t.eventName, t.args) } }, this.getMarketingGuid = function() { var n = i("RBXEventTracker"); return n != null ? n.browserid : -1 }, this.triggerEvent = function(n, t) { this.initialized ? this.enabled && (typeof t == "undefined" && (t = {}), t.guid = this.getMarketingGuid(), t.guid != -1 && $(document).trigger(n, [t])) : this.eventQueue.push({ eventName: n, args: t }) }, this.registerCookieStoreEvent = function(t) { n.push(t) }, this.insertDataStoreKeyValuePair = function(n, t) { r[n] = t }, this.monitorCookieStore = function() { var i, u, f, t, r; try { if (typeof Roblox == "undefined" || typeof Roblox.Client == "undefined" || window.location.protocol == "https:") return; if (i = Roblox.Client.CreateLauncher(!1), i == null) return; for (u = 0; u < n.length; u++) try { f = n[u], t = i.GetKeyValue(f), t != "" && t != "-1" && t != "RBX_NOT_VALID" && (r = eval("(" + t + ")"), r.userType = r.userId > 0 ? "user" : "guest", RobloxEventManager.triggerEvent(f, r), i.SetKeyValue(f, "RBX_NOT_VALID")) } catch (e) {} Roblox.Client.ReleaseLauncher(i, !1, !1) } catch (e) {} } }; ; /// RobloxEventListener.js RobloxListener = new RBXBaseEventListener, RobloxListener.handleEvent = function(n, t) { var r, u, i; switch (n.type) { case "rbx_evt_install_begin": i = { guid: "guid", userId: "userid" }, r = n.type; break; case "rbx_evt_initial_install_start": i = { guid: "guid", userId: "userid" }, r = n.type; break; case "rbx_evt_ftp": i = { guid: "guid", userId: "userid" }, r = n.type; break; case "rbx_evt_initial_install_success": i = { guid: "guid", userId: "userid" }, r = n.type; break; case "rbx_evt_fmp": i = { guid: "guid", userId: "userid" }, r = n.type; break; default: return console.log("RobloxEventListener - Event registered without handling instructions: " + n.type), !1 } return u = this.distillData(t, i), this.fireEvent(this.eventToString(r, u)), !0 }, RobloxListener.distillData = function(n, t) { var i = {}; for (dataKey in t) typeof n[dataKey] != typeof undefined && (i[t[dataKey]] = encodeURIComponent(n[dataKey])); return i }, RobloxListener.eventToString = function(n, t) { var i = RobloxListener.restUrl; if (i += "?event=" + n + "&", t != null) for (arg in t) typeof arg != typeof undefined && t.hasOwnProperty(arg) && (i += arg + "=" + t[arg] + "&"); return i = i.slice(0, i.length - 1) }, RobloxListener.fireEvent = function(n) { var t = $('') }, RobloxListener.events = ["rbx_evt_install_begin", "rbx_evt_initial_install_start", "rbx_evt_ftp", "rbx_evt_initial_install_success", "rbx_evt_fmp"]; ; /// KontagentEventListener.js KontagentListener = new RBXBaseEventListener, KontagentListener.restUrl = "", KontagentListener.APIKey = "", KontagentListener.StagingAPIKey = "", KontagentListener.StagingEvents = [], KontagentListener.handleEvent = function(n, t) { function f(n) { return n = n.toLowerCase(), n == "win32" ? n = "Windows" : n == "osx" && (n = "Mac"), n } var r, u, i, o, e; r = "evt"; switch (n.type) { case "rbx_evt_pageview": i = { guid: "s", path: "u", ts: "ts", user_ip: "ip" }, r = "pgr"; break; case "rbx_evt_userinfo": i = { guid: "s", age: "b", gender: "g" }, r = "cpu"; break; case "rbx_evt_ecomm_item": t.total = Math.round(t.total * 100), t.productName = t.productName.replace(/\s/g, "").replace("Outrageous", "O").replace("Turbo", "T").replace("Builders", "B").replace("Club", "C"), i = { guid: "s", total: "v", provider: "st1", category: "st2", productName: "st3", type: "tu" }, r = "mtu"; break; case "rbx_evt_ftp": t.tracking = "", t.shorttracking = "", i = { guid: "s", trackingtag: "u", shorttracking: "su" }, u = this.distillData(t, i), r = "apa", this.fireEvent(this.eventToString(n.type, r, u)), t.eventName = "Install Success Funnel", t.eventType = "Install Success Funnel", t.os = f(t.os), i = { guid: "s", eventType: "st1", os: "st2", userType: "st3", eventName: "n" }, u = this.distillData(t, i), r = "evt", this.fireEvent(this.eventToString(n.type, r, u)), t.eventType = "Install Success Place", i = { guid: "s", eventType: "st1", os: "st2", userType: "st3", placeId: "n" }; break; case "rbx_evt_initial_install_success": t.tracking = "", t.shorttracking = "", i = { guid: "s", trackingtag: "u", shorttracking: "su" }, u = this.distillData(t, i), r = "apa", this.fireEvent(this.eventToString(n.type, r, u)), t.eventName = "Bootstrapper Install Success Funnel", t.eventType = "Bootstrapper Install Success Funnel", t.os = f(t.os), i = { guid: "s", eventType: "st1", os: "st2", userType: "st3", eventName: "n" }, u = this.distillData(t, i), r = "evt", this.fireEvent(this.eventToString(n.type, r, u)), t.eventType = "Bootstrapper Install Success Place", i = { guid: "s", eventType: "st1", os: "st2", userType: "st3", placeId: "n" }; break; case "rbx_evt_install_begin": t.eventName = "Install Begin", t.eventType = "Install Begin", i = { guid: "s", eventType: "st1", os: "st2", eventName: "n" }; break; case "rbx_evt_initial_install_start": t.eventName = "Bootstrapper Install Begin", t.eventType = "Bootstrapper Install Begin", i = { guid: "s", eventType: "st1", os: "st2", eventName: "n" }; break; case "rbx_evt_fmp": t.eventName = "Five Minute Play Funnel", t.eventType = "Five Minute Play Funnel", t.os = f(t.os), i = { guid: "s", eventType: "st1", os: "st2", userType: "st3", eventName: "n" }, u = this.distillData(t, i), this.fireEvent(this.eventToString(n.type, r, u)), t.eventType = "Five Minute Play Place", i = { guid: "s", eventType: "st1", os: "st2", userType: "st3", placeId: "n" }; break; case "rbx_evt_play_user": t.eventName = "Play User", t.eventType = "Play User", t.gender = t.gender, i = { guid: "s", eventType: "st1", gender: "st2", age: "st3", placeId: "l", eventName: "n" }; break; case "rbx_evt_play_guest": t.eventName = "Play Guest", t.eventType = "Play Guest", t.gender = t.gender, i = { guid: "s", eventType: "st1", gender: "st2", placeId: "l", eventName: "n" }; break; case "rbx_evt_signup": t.eventName = "Sign Up Funnel", t.eventType = "Sign Up Funnel", i = { guid: "s", eventType: "st1", eventName: "n" }, u = this.distillData(t, i), r = "evt", this.fireEvent(this.eventToString(n.type, r, u)), t.eventName = "Sign Up", t.eventType = "Sign Up", t.gender = t.gender, i = { guid: "s", eventType: "st1", gender: "st2", age: "st3", eventName: "n" }; break; case "rbx_evt_ecomm_custom": t.eventType = "Purchase", t.productName = t.productName.replace(/\s/g, "").replace("Outrageous", "O").replace("Turbo", "T").replace("Builders", "B").replace("Club", "C"), i = { guid: "s", eventType: "st1", provider: "st2", category: "st3", productName: "n" }; break; case "rbx_evt_abtest": i = { guid: "s", experiment: "st1", variation: "n" }; break; case "rbx_evt_pageview_custom": t.eventName = t.page, i = typeof t.userType == "undefined" ? { guid: "s", page: "st1", eventName: "n" } : { guid: "s", page: "st1", userType: "st2", eventName: "n" }; break; case "rbx_evt_generic": t.eventName = t.type, i = { guid: "s", type: "st1", eventName: "n" }, typeof t.opt1 != "undefined" && (i.opt1 = "st2"), typeof t.opt2 != "undefined" && typeof t.opt1 != "undefined" && (i.opt2 = "st3"); break; case "rbx_evt_source_tracking": t.installed = 0, t.sourceType = "ad", i = { guid: "s", sourceType: "tu", installed: "i", source: "st1", campaign: "st2", medium: "st3" }, r = "ucc"; break; case "rbx_evt_card_redemption": t.eventType = "CardRedemption", t.eventName = "CardRedemption", i = { guid: "s", eventType: "st1", merchant: "st2", cardValue: "st3", eventName: "n" }; break; case "rbx_evt_popup_action": t.eventType = "GuestPlayPopupAction", t.eventName = "GuestPlayPopupAction", i = { guid: "s", eventType: "st1", action: "st2", eventName: "n" }; break; default: return console.log("KontagentListener - Event registered without handling instructions: " + n.type), !1 } return u = this.distillData(t, i), this.fireEvent(this.eventToString(n.type, r, u)), !0 }, KontagentListener.distillData = function(n, t) { var i = {}; for (dataKey in t) typeof n[dataKey] != typeof undefined && (i[t[dataKey]] = encodeURIComponent(n[dataKey])); return i }, KontagentListener.eventToString = function(n, t, i) { var r = KontagentListener.restUrl, u = this.isStagingEvent(n, i) ? KontagentListener.StagingAPIKey : KontagentListener.APIKey; if (r += u + "/" + t + "/?", i != null) for (arg in i) typeof arg != typeof undefined && i.hasOwnProperty(arg) && (r += arg + "=" + i[arg] + "&"); return r = r.slice(0, r.length - 1) }, KontagentListener.isStagingEvent = function(n, t) { var r, i; staging = !1; try { for (r in this.StagingEvents) if (i = this.StagingEvents[r], typeof i == "string") { if (n == i) { staging = !0; break } } else if (typeof i == "object" && typeof i[n] != "undefined" && i[n] == t.st1) { staging = !0; break } } catch (u) {} return staging }, KontagentListener.fireEvent = function(n) { var t = $('') }, KontagentListener.events = ["rbx_evt_pageview", "rbx_evt_install_begin", "rbx_evt_initial_install_start", "rbx_evt_ftp", "rbx_evt_initial_install_success", "rbx_evt_fmp", "rbx_evt_play_user", "rbx_evt_play_guest", "rbx_evt_signup", "rbx_evt_ecomm_item", "rbx_evt_ecomm_custom", "rbx_evt_userinfo", "rbx_evt_abtest", "rbx_evt_pageview_custom", "rbx_evt_generic", "rbx_evt_source_tracking", "rbx_evt_card_redemption", "rbx_evt_popup_action"]; ; /// GoogleEventListener.js GoogleListener = new RBXBaseEventListener, GoogleListener.handleEvent = function(n, t) { function r(n) { return n = n.toLowerCase(), n == "win32" ? n = "Windows" : n == "osx" && (n = "Mac"), n } var f, u, i; switch (n.type) { case "rbx_evt_initial_install_begin": t.os = r(t.os), t.category = "Bootstrapper Install Begin", i = { os: "action" }; break; case "rbx_evt_ftp": t.os = r(t.os), t.category = "Install Success", i = { os: "action" }; break; case "rbx_evt_initial_install_success": t.os = r(t.os), t.category = "Bootstrapper Install Success", i = { os: "action" }; break; case "rbx_evt_fmp": t.os = r(t.os), t.category = "Five Minute Play", i = { os: "action" }; break; case "rbx_evt_abtest": i = { experiment: "category", variation: "action", version: "opt_label" }; break; case "rbx_evt_card_redemption": t.category = "CardRedemption", i = { merchant: "action", cardValue: "opt_label" }; break; default: return console.log("GoogleListener - Event registered without handling instructions: " + n.type), !1 } return i.category = "category", u = this.distillData(t, i), this.fireEvent(u), !0 }, GoogleListener.distillData = function(n, t) { var i = {}, r; for (dataKey in t) typeof n[dataKey] != typeof undefined && (i[t[dataKey]] = n[dataKey]); return r = [i.category, i.action], i.opt_label != null && (r = r.concat(i.opt_label)), i.opt_value != null && (r = r.concat(i.opt_value)), r }, GoogleListener.fireEvent = function(n) { if (typeof _gaq != typeof undefined) { var i = ["_trackEvent"], t = ["b._trackEvent"]; _gaq.push(i.concat(n)), _gaq.push(t.concat(n)) } }, GoogleListener.events = ["rbx_evt_initial_install_begin", "rbx_evt_ftp", "rbx_evt_initial_install_success", "rbx_evt_fmp", "rbx_evt_abtest", "rbx_evt_card_redemption"]; ; /// MongoEventListener.js MongoListener = new RBXBaseEventListener, MongoListener.handleEvent = function(n, t) { var i; return i = typeof t.shard == "undefined" ? this.defaultShard : t.shard, typeof t.eventName == "undefined" && (t.eventName = n.type), t.eventName === "JavascriptExceptionLoggingEvent" ? dataMap = { category: "category", url: "url", msg: "msg", line: "line", ua: "UA" } : (typeof t.category == "undefined" && (t.category = MongoListener.getCategoryFromEventName(t.eventName)), t.userId = MongoListener.userId, t.ip = MongoListener.clientIpAddress, dataMap = { guid: "guid", category: "category", userId: "userid", ip: "ip" }), this.fireEvent(i, this.distillData(t, dataMap)), !0 }, MongoListener.getCategoryFromEventName = function(n) { switch (n) { case "rbx_evt_sitetouch": return "SiteTouch"; case "rbx_evt_fmp": return "FiveMinutePlay"; case "rbx_evt_play_user": case "rbx_evt_play_guest": return "Play"; default: return n } }, MongoListener.distillData = function(n, t) { var i = {}; for (dataKey in t) typeof n[dataKey] != typeof undefined && (i[t[dataKey]] = encodeURIComponent(n[dataKey])); return i }, MongoListener.fireEvent = function(n, t) { $.ajax({ url: MongoListener.loggingURI + n, dataType: "jsonp", jsonpCallback: "MongoListener.callback", data: t }) }, MongoListener.callback = function() {}, MongoListener.events = ["JavascriptExceptionLoggingEvent"]; ; /// SearchVisionListener.js SearchVisionListener = new RBXBaseEventListener, SearchVisionListener.handleEvent = function(n, t) { var i = null; switch (n.type) { case "rbx_evt_fmp": i = { esvtk_v: "1", esvtk_esvid: "A40125", event: "five_minute_play" }; break; case "rbx_evt_ftp": i = { esvtk_v: "1", esvtk_esvid: "A40125", event: "first_play" }; break; case "rbx_evt_install_begin": i = { esvtk_v: "1", esvtk_esvid: "A40125", event: "download" }; break; case "rbx_evt_signup": i = { esvtk_v: "1", esvtk_esvid: "A40125", event: "esv_signup" }; break; case "rbx_evt_generic": t.type === "OneDayReturn" && (i = { esvtk_v: "1", esvtk_esvid: "A40125", event: "return" }) } return i !== null && (i.orderid = t.guid, this.fireEvent(i)), !0 }, SearchVisionListener.fireEvent = function(n) { typeof esvtk_track != "undefined" ? esvtk_track(n) : setTimeout(function() { SearchVisionListener.fireEvent(n) }, 500) }, SearchVisionListener.events = ["rbx_evt_fmp", "rbx_evt_ftp", "rbx_evt_install_begin", "rbx_evt_signup", "rbx_evt_generic"]; ; /// SiteTouchEvent.js typeof Roblox == "undefined" && (Roblox = {}), Roblox.SiteTouchEvent = function() { function r() { var t, i; return typeof localStorage != "undefined" && (t = localStorage.getItem(n)), (typeof t == "undefined" || t === null) && (t = $.cookie(n)), i = Date.parse(t), t && !isNaN(i) ? new Date(i) : new Date(0) } function i(i) { typeof i == "undefined" && (i = new Date), typeof localStorage != "undefined" && (t.useLocalStorage ? $.cookie(n, null) : localStorage.removeItem(n)), t.useLocalStorage && typeof localStorage != "undefined" ? localStorage.setItem(n, i) : $.cookie(n, i, { expires: 100 }) } function u() { var n = r(); Math.floor((new Date - n) / 36e5) >= t.dateDiffThresholdInHours && RobloxEventManager.triggerEvent("rbx_evt_sitetouch"), i() } var n = "LastActivity", t = { updateLastActivityAndFireEvent: u, getLastActivity: r, setLastActivity: i, dateDiffThresholdInHours: 3, useLocalStorage: !1 }; return t }(); ; /// JSErrorTracker.js typeof Roblox == "undefined" && (Roblox = {}), Roblox.JSErrorTracker = { showAlert: !1, defaultPixel: "GA", internalEventListenerPixelEnabled: !1, javascriptStackTraceEnabled: !1, data: { category: "Javascript Errors" }, initialize: function(n) { typeof n != "undefined" && (typeof n.showAlert != "undefined" && (this.showAlert = n.showAlert), typeof n.internalEventListenerPixelEnabled != "undefined" && (this.internalEventListenerPixelEnabled = n.internalEventListenerPixelEnabled)), this.addOnErrorEventHandler(this.errorHandler) }, errorHandler: function(n, t, i) { try { Roblox.JSErrorTracker.data.msg = n, Roblox.JSErrorTracker.data.url = t, Roblox.JSErrorTracker.data.line = i, Roblox.JSErrorTracker.data.ua = window.navigator.userAgent, Roblox.JSErrorTracker.logException(Roblox.JSErrorTracker.data) } catch (r) {} return !0 }, addOnErrorEventHandler: function(n) { var t = window.onerror; window.onerror = typeof window.onerror == "function" ? function(i, r, u) { t(i, r, u), n(i, r, u) } : n }, processException: function(n, t) { if (typeof n != "undefined") { typeof n.category == "undefined" && (n.category = Roblox.JSErrorTracker.data.category); switch (t) { case "GA": var i = { category: "category", url: "action", msg: "opt_label", line: "opt_value" }; Roblox.JSErrorTracker.fireGAPixel(Roblox.JSErrorTracker.distillGAData(n, i)); break; case "Diag": Roblox.JSErrorTracker.internalEventListenerPixelEnabled && (n.category = "JavascriptExceptions", n.shard = "WebMetrics", n.eventName = "JavascriptExceptionLoggingEvent", RobloxEventManager.triggerEvent("JavascriptExceptionLoggingEvent", n)); break; default: console.log("Roblox JSErrorTracker received an unknown pixel to fire") } return !0 } }, logException: function(n) { Roblox.JSErrorTracker.processException(n, Roblox.JSErrorTracker.defaultPixel), Roblox.JSErrorTracker.internalEventListenerPixelEnabled && Roblox.JSErrorTracker.processException(n, "Diag"), Roblox.JSErrorTracker.showErrorMessage(n.msg) }, distillData: function(n, t) { var r = {}, i; for (i in t) typeof n[i] != "undefined" && (r[t[i]] = encodeURIComponent(n[i])); return r }, distillGAData: function(n, t) { var r = Roblox.JSErrorTracker.distillData(n, t), i = [decodeURIComponent([r.category])]; return typeof r.action != typeof undefined ? (i = i.concat(decodeURIComponent(r.action)), typeof r.opt_label != typeof undefined && (i = i.concat(decodeURIComponent(r.opt_label)), typeof r.opt_value != typeof undefined && (i = i.concat(parseInt(decodeURIComponent(r.opt_value)))))) : Roblox.JSErrorTracker.showAlert && alert("Missing a required parameter for GA"), i }, createURL: function(n, t, i) { var r = n, f = Roblox.JSErrorTracker.distillData(t, i), u; if (r += "?", f != null) for (u in f) typeof u != typeof undefined && t.hasOwnProperty(u) && (r += u + "=" + f[u] + "&"); return r = r.slice(0, r.length - 1) }, fireGAPixel: function(n) { typeof _gaq != "undefined" && _gaq.push(["c._trackEvent"].concat(n)) }, showErrorMessage: function(n) { Roblox.JSErrorTracker.showAlert && (n !== null ? alert(n) : alert("An error occured")) } }; ; /// Studio2Alert.js var studio2AlertModal = { showPrompt: !1, userId: 0, updateStudioAlertUserPreference: function() { $.ajax({ type: "GET", url: "/WebHandlers/Studio2Alert.ashx?uId=" + studio2AlertModal.userId }) }, close: function() { studio2AlertModal.updateStudioAlertUserPreference(), $.modal.close("#Studio2AlertModal") }, init: function() { studio2AlertModal.showPrompt = $("#Studio2AlertModal").data("showprompt"), studio2AlertModal.userId = $("#Studio2AlertModal").data("userid"); var n = { escClose: !0, opacity: 80, overlayCss: { backgroundColor: "#000" } }; studio2AlertModal.showPrompt && Roblox.Client.isIDE() && (studio2AlertModal.updateStudioAlertUserPreference(), $("#Studio2AlertModal").modal(n)) } }; $("#closeStudio2Alert").click(function() { studio2AlertModal.close() }), $(function() { studio2AlertModal.init() }); ; /// ClientInstaller.js function tryToDownload() { oIFrm = document.getElementById("downloadInstallerIFrame"), oIFrm.src = "/install/setup.ashx" } function logStatistics(n) { $.get("/install/VisitButtonHandler.ashx?reqtype=" + n, function() {}) } Type.registerNamespace("Roblox.Client"), Roblox.Client._installHost = null, Roblox.Client._installSuccess = null, Roblox.Client._CLSID = null, Roblox.Client._continuation = null, Roblox.Client._skip = null, Roblox.Client._isIDE = null, Roblox.Client._isRobloxBrowser = null, Roblox.Client._isPlaceLaunch = !1, Roblox.Client._silentModeEnabled = !1, Roblox.Client._bringAppToFrontEnabled = !1, Roblox.Client._numLocks = 0, Roblox.Client._logTiming = !1, Roblox.Client._logStartTime = null, Roblox.Client._logEndTime = null, Roblox.Client._hiddenModeEnabled = !1, Roblox.Client._runInstallABTest = function() {}, Roblox.Client.ReleaseLauncher = function(n, t, i) { if (t && Roblox.Client._numLocks--, (i || Roblox.Client._numLocks <= 0) && (n != null && (document.getElementById("pluginObjDiv").innerHTML = "", n = null), Roblox.Client._numLocks = 0), Roblox.Client._logTiming) { Roblox.Client._logEndTime = new Date; var r = Roblox.Client._logEndTime.getTime() - Roblox.Client._logStartTime.getTime(); console && console.log && console.log("Roblox.Client: " + r + "ms from Create to Release.") } }, Roblox.Client.GetInstallHost = function(n) { if (window.ActiveXObject) return n.InstallHost; var t = n.Get_InstallHost(); return t.match(/roblox.com$/) ? t : t.substring(0, t.length - 1) }, Roblox.Client.CreateLauncher = function(n) { var i, u, t, r; Roblox.Client._logTiming && (Roblox.Client._logStartTime = new Date), n && Roblox.Client._numLocks++, (Roblox.Client._installHost == null || Roblox.Client._CLSID == null) && typeof initClientProps == "function" && initClientProps(), i = document.getElementById("robloxpluginobj"), u = $("#pluginObjDiv"), i || (Roblox.Client._hiddenModeEnabled = !1, window.ActiveXObject ? (t = 'Failed to INIT Plugin', $(u).append(t)) : (t = '', t += "

You need Our Plugin for this. Get the latest version from", t += 'here.

', $(u).append(t)), i = document.getElementById("robloxpluginobj")); try { if (i || (typeof console.log == "undefined" ? alert("Plugin installation failed!") : console.log("Plugin installation failed!")), i.Hello(), r = Roblox.Client.GetInstallHost(i), !r || r != Roblox.Client._installHost) throw "wrong InstallHost: (plugins): " + r + " (servers): " + Roblox.Client._installHost; return i } catch (f) { return Roblox.Client.ReleaseLauncher(i, n, !1), null } }, Roblox.Client.isIDE = function() { if (Roblox.Client._isIDE == null && (Roblox.Client._isIDE = !1, Roblox.Client._isRobloxBrowser = !1, window.external)) try { window.external.IsRobloxAppIDE !== undefined && (Roblox.Client._isIDE = window.external.IsRobloxAppIDE, Roblox.Client._isRobloxBrowser = !0) } catch (n) {} return Roblox.Client._isIDE }, Roblox.Client.isRobloxBrowser = function() { return Roblox.Client.isIDE(), Roblox.Client._isRobloxBrowser }, Roblox.Client.robloxBrowserInstallHost = function() { if (window.external) try { return window.external.InstallHost } catch (n) {} return "" }, Roblox.Client.IsRobloxProxyInstalled = function() { var t = Roblox.Client.CreateLauncher(!1), n = !1; return (t != null && (n = !0), Roblox.Client.ReleaseLauncher(t, !1, !1), n || Roblox.Client.isRobloxBrowser()) ? !0 : !1 }, Roblox.Client.IsRobloxInstalled = function() { try { var t = Roblox.Client.CreateLauncher(!1), n = Roblox.Client.GetInstallHost(t); return Roblox.Client.ReleaseLauncher(t, !1, !1), n == Roblox.Client._installHost } catch (i) { return Roblox.Client.isRobloxBrowser() ? (n = Roblox.Client.robloxBrowserInstallHost(), n == Roblox.Client._installHost) : !1 } }, Roblox.Client.SetStartInHiddenMode = function(n) { try { var t = Roblox.Client.CreateLauncher(!1); if (t !== null) return t.SetStartInHiddenMode(n), Roblox.Client._hiddenModeEnabled = n, !0 } catch (i) {} return !1 }, Roblox.Client.UnhideApp = function() { try { if (Roblox.Client._hiddenModeEnabled) { var n = Roblox.Client.CreateLauncher(!1); n.UnhideApp() } } catch (t) {} }, Roblox.Client.Update = function() { try { var n = Roblox.Client.CreateLauncher(!1); n.Update(), Roblox.Client.ReleaseLauncher(n, !1, !1) } catch (t) { alert("Error updating: " + t) } }, Roblox.Client.WaitForRoblox = function(n) { if (Roblox.Client._skip) return window.location = Roblox.Client._skip, !1; if (Roblox.Client._continuation = n, Roblox.Client._cancelled = !1, !Roblox.Client.IsRobloxProxyInstalled() && Roblox.Client.ImplementsProxy) { Roblox.InstallationInstructions.show(), Roblox.Client.runInstallABTest(); var t = "Windows"; return navigator.appVersion.indexOf("Mac") != -1 && (t = "Mac"), typeof _gaq != typeof undefined && (_gaq.push(["_trackEvent", "Install Begin", t]), _gaq.push(["b._trackEvent", "Install Begin", t])), RobloxEventManager.triggerEvent("rbx_evt_install_begin", { os: t }), window.chrome && (window.location.hash = "#chromeInstall", $.cookie("chromeInstall", n.toString().replace(/play_placeId/, play_placeId.toString()))), window.setTimeout(function() { Roblox.Client._ontimer() }, 1e3), tryToDownload(), !0 } return Roblox.Client._continuation(), !1 }, Roblox.Client.ResumeTimer = function(n) { Roblox.Client._continuation = n, Roblox.Client._cancelled = !1, window.setTimeout(function() { Roblox.Client._ontimer() }, 0) }, Roblox.Client.Refresh = function() { try { navigator.plugins.refresh(!1) } catch (n) {} }, Roblox.Client._onCancel = function() { return Roblox.InstallationInstructions.hide(), Roblox.Client._cancelled = !0, !1 }, Roblox.Client._ontimer = function() { Roblox.Client._cancelled || (Roblox.Client.Refresh(), Roblox.Client.IsRobloxProxyInstalled() ? (Roblox.InstallationInstructions.hide(), window.setTimeout(function() { window.chrome && window.location.hash == "#chromeInstall" && (window.location.hash = "", $.cookie("chromeInstall", null)) }, 5e3), Roblox.Client._continuation(), Roblox.Client._installSuccess && Roblox.Client._installSuccess()) : window.setTimeout(function() { Roblox.Client._ontimer() }, 1e3)) }; ; /// InstallationInstructions.js typeof Roblox == "undefined" && (Roblox = {}), Roblox.InstallationInstructions = function() { function i() { var t, i, r; n(), t = 0, i = $(".InstallInstructionsImage"), i && typeof $(i).attr("modalwidth") != "undefined" && (t = $(".InstallInstructionsImage").attr("modalwidth")), t > 0 ? (r = ($(window).width() - (t - 10)) / 2, $("#InstallationInstructions").modal({ escClose: !0, opacity: 50, minWidth: t, maxWidth: t, overlayCss: { backgroundColor: "#000" }, position: [20, r] })) : $("#InstallationInstructions").modal({ escClose: !0, opacity: 50, maxWidth: $(window).width() / 2, minWidth: $(window).width() / 2, overlayCss: { backgroundColor: "#000" }, position: [20, "25%"] }) } function r() { $.modal.close() } function n() { var n = $(".InstallInstructionsImage"); navigator.userAgent.match(/Mac OS X 10[_|\.]5/) ? n && typeof $(n).attr("oldmacdelaysrc") != "undefined" && $(".InstallInstructionsImage").attr("src", $(".InstallInstructionsImage").attr("oldmacdelaysrc")) : n && typeof $(n).attr("delaysrc") != "undefined" && $(".InstallInstructionsImage").attr("src", $(".InstallInstructionsImage").attr("delaysrc")) } return { show: i, hide: r } }(); ; /// MadStatus.js MadStatus = { running: !1, init: function(n, t, i, r) { MadStatus.running && MadStatus.stop(), MadStatus.updateInterval = i ? i : 2e3, MadStatus.fadeInterval = r ? r : 1e3, MadStatus.timeout = null, MadStatus.running = !0, MadStatus.field = n, MadStatus.backBuffer = t, MadStatus.field.show(), MadStatus.backBuffer.hide() }, participle: ["Accelerating", "Aggregating", "Allocating", "Aquiring", "Automating", "Backtracing", "Bloxxing", "Bootstraping", "Calibrating", "Correlating", "De-noobing", "De-ionizing", "Deriving", "Energizing", "Filtering", "Generating", "Indexing", "Loading", "Noobing", "Optimizing", "Oxidizing", "Queueing", "Parsing", "Processing", "Rasterizing", "Reading", "Registering", "Re-routing", "Resolving", "Sampling", "Updating", "Writing"], modifier: ["Blox", "Count Zero", "Cylon", "Data", "Ectoplasm", "Encryption", "Event", "Farnsworth", "Bebop", "Flux Capacitor", "Fusion", "Game", "Gibson", "Host", "Mainframe", "Metaverse", "Nerf Herder", "Neutron", "Noob", "Photon", "Profile", "Script", "Skynet", "TARDIS", "Virtual"], subject: ["Analogs", "Blocks", "Cannon", "Channels", "Core", "Database", "Dimensions", "Directives", "Engine", "Files", "Gear", "Index", "Layer", "Matrix", "Paradox", "Parameters", "Parsecs", "Pipeline", "Players", "Ports", "Protocols", "Reactors", "Sphere", "Spooler", "Stream", "Switches", "Table", "Targets", "Throttle", "Tokens", "Torpedoes", "Tubes"], newLib: function() { return libString = this.participle[Math.floor(Math.random() * this.participle.length)] + " " + this.modifier[Math.floor(Math.random() * this.modifier.length)] + " " + this.subject[Math.floor(Math.random() * this.subject.length)] + "..." }, start: function() { MadStatus.timeout == null && (MadStatus.timeout = setInterval("MadStatus.update()", MadStatus.updateInterval), MadStatus.running = !0) }, stop: function(n) { clearInterval(MadStatus.timeout), MadStatus.timeout = null, MadStatus.field[0].innerHTML = typeof n != typeof undefined ? n : "", MadStatus.running = !1 }, manualUpdate: function(n, t, i) { MadStatus.timeout && MadStatus.stop(), this.update(n, i), t && setTimeout("MadStatus.start()", 1e3) }, update: function(n, t) { (MadStatus.backBuffer[0].innerHTML = typeof n != typeof undefined ? n : this.newLib(), typeof noAnim == typeof undefined || t != !1) && (this.field.hide(), this.backBuffer.fadeIn(this.fadeInterval + 2, function() { MadStatus.field[0].innerHTML = MadStatus.backBuffer[0].innerHTML, MadStatus.field.show(), MadStatus.backBuffer.hide() })) } }; ; /// PlaceLauncher.js var RBX = {}, RobloxLaunchStates = { StartingServer: "StartingServer", StartingClient: "StartingClient", Upgrading: "Upgrading", None: "None" }, RobloxLaunch = { launchGamePage: null, timer: null, clientMetricType: null, launcher: null, googleAnalyticsCallback: function() { RobloxLaunch._GoogleAnalyticsCallback && RobloxLaunch._GoogleAnalyticsCallback() }, state: RobloxLaunchStates.None, secureAuthenticate: !1 }, RobloxPlaceLauncherService = { LogJoinClick: function() { $.get("/Game/Placelauncher.ashx", { request: "LogJoinClick" }) }, RequestGame: function(n, t, i, r, u, f) { i = i !== null && i !== undefined ? i : "", $.getJSON("/Game/PlaceLauncher.ashx", { request: "RequestGame", placeId: n, isPartyLeader: t, gender: i }, function(n) { n.Error ? u(n.Error, f) : r(n, f) }) }, RequestPlayWithParty: function(n, t, i, r, u, f) { $.getJSON("/Game/PlaceLauncher.ashx", { request: "RequestPlayWithParty", placeId: n, partyGuid: t, gameId: i }, function(n) { n.Error ? u(n.Error, f) : r(n, f) }) }, RequestGroupBuildGame: function(n, t, i, r) { $.getJSON("/Game/PlaceLauncher.ashx", { request: "RequestGroupBuildGame", placeId: n }, function(n) { n.Error ? i(n.Error, r) : t(n, r) }) }, RequestFollowUser: function(n, t, i, r) { $.getJSON("/Game/PlaceLauncher.ashx", { request: "RequestFollowUser", userId: n }, function(n) { n.Error ? i(n.Error, r) : t(n, r) }) }, RequestGameJob: function(n, t, i, r, u, f) { $.getJSON("/Game/PlaceLauncher.ashx", { request: "RequestGameJob", placeId: n, gameId: t, gameJobId: i }, function(n) { n.Error ? u(n.Error, f) : r(n, f) }) }, CheckGameJobStatus: function(n, t, i, r) { $.getJSON("/Game/PlaceLauncher.ashx", { request: "CheckGameJobStatus", jobId: n }, function(n) { n.Error ? i(n.Error, r) : t(n, r) }) } }; RobloxLaunch.RequestPlayWithParty = function(n, t, i, r) { RobloxPlaceLauncherService.LogJoinClick(), RobloxLaunch.timer = new Date, RobloxLaunch.state = RobloxLaunchStates.None, RobloxLaunch.clientMetricType = "WebPlay", checkRobloxInstall() && (RobloxLaunch.launcher === null && (RobloxLaunch.launcher = new RBX.PlaceLauncher(n)), RobloxLaunch.launcher.RequestPlayWithParty(t, i, r)) }, RobloxLaunch.RequestGame = function(n, t, i) { RobloxPlaceLauncherService.LogJoinClick(), RobloxLaunch.timer = new Date, RobloxLaunch.state = RobloxLaunchStates.None, RobloxLaunch.clientMetricType = "WebPlay", checkRobloxInstall() && (RobloxLaunch.launcher === null && (RobloxLaunch.launcher = new RBX.PlaceLauncher(n)), RobloxLaunch.launcher.RequestGame(t, i)) }, RobloxLaunch.RequestGroupBuildGame = function(n, t) { RobloxPlaceLauncherService.LogJoinClick(), RobloxLaunch.timer = new Date, RobloxLaunch.state = RobloxLaunchStates.None, RobloxLaunch.clientMetricType = "WebPlay", checkRobloxInstall() && (RobloxLaunch.launcher === null && (RobloxLaunch.launcher = new RBX.PlaceLauncher(n)), RobloxLaunch.launcher.RequestGroupBuildGame(t)) }, RobloxLaunch.RequestGameJob = function(n, t, i, r) { RobloxPlaceLauncherService.LogJoinClick(), RobloxLaunch.timer = new Date, RobloxLaunch.state = RobloxLaunchStates.None, RobloxLaunch.clientMetricType = "WebJoin", checkRobloxInstall() && (RobloxLaunch.launcher === null && (RobloxLaunch.launcher = new RBX.PlaceLauncher(n)), RobloxLaunch.launcher.RequestGameJob(t, i, r)) }, RobloxLaunch.RequestFollowUser = function(n, t) { RobloxPlaceLauncherService.LogJoinClick(), RobloxLaunch.timer = new Date, RobloxLaunch.state = RobloxLaunchStates.None, RobloxLaunch.clientMetricType = "WebFollow", checkRobloxInstall() && (RobloxLaunch.launcher === null && (RobloxLaunch.launcher = new RBX.PlaceLauncher(n)), RobloxLaunch.launcher.RequestFollowUser(t)) }, RobloxLaunch.StartGame = function(n, t, i, r, u) { var o, f, e, s; RobloxLaunch.secureAuthenticate && (i = i.replace("http://", "https://")), n = typeof RobloxLaunch.SeleniumTestMode == "undefined" ? n + "&testmode=false" : n + "&testmode=true", typeof urchinTracker != "undefined" && urchinTracker("Visit/Try/" + t), RobloxLaunch.state = RobloxLaunchStates.StartingClient, RobloxLaunch.googleAnalyticsCallback !== null && RobloxLaunch.googleAnalyticsCallback(), o = null; try { if (typeof window.external != "undefined" && window.external.IsRobloxABApp) window.external.StartGame(r, i, n); else if (typeof window.external != "undefined" && window.external.IsRoblox2App && (n.indexOf("visit") != -1 || u)) window.external.StartGame(r, i, n); else if (o = "RobloxProxy/", f = Roblox.Client.CreateLauncher(!0), f) { o = "RobloxProxy/StartGame/"; try { try { window.ActiveXObject ? f.AuthenticationTicket = r : f.Put_AuthenticationTicket(r), u && f.SetEditMode() } catch (a) {} try { if (Roblox.Client._silentModeEnabled) f.SetSilentModeEnabled(!0), Roblox.VideoPreRoll.videoInitialized && Roblox.VideoPreRoll.isPlaying() && Roblox.Client.SetStartInHiddenMode(!0), f.StartGame(i, n), RobloxLaunch.CheckGameStarted(f); else throw "silent mode is disabled, fall back"; } catch (a) { if (f.StartGame(i, n), Roblox.Client._bringAppToFrontEnabled) try { f.BringAppToFront() } catch (h) {} Roblox.Client.ReleaseLauncher(f, !0, !1), $.modal.close() } } catch (a) { Roblox.Client.ReleaseLauncher(f, !0, !1); throw a; } } else { try { parent.playFromUrl(n); return } catch (l) {} if (Roblox.Client.isRobloxBrowser()) try { window.external.StartGame(r, i, n) } catch (l) { throw "window.external fallback failed, Roblox must not be installed or IE cannot access ActiveX"; } else throw "launcher is null or undefined and external is missing"; RobloxLaunch.state = RobloxLaunchStates.None, $.modal.close() } } catch (a) { if (e = a.message, e === "User cancelled" && typeof urchinTracker != "undefined") return urchinTracker("Visit/UserCancelled/" + t), !1; try { s = new ActiveXObject("Microsoft.XMLHTTP") } catch (c) { e = "FailedXMLHTTP/" + e } return Roblox.Client.isRobloxBrowser() ? typeof urchinTracker != "undefined" && urchinTracker("Visit/Fail/" + o + encodeURIComponent(e)) : (typeof urchinTracker != "undefined" && urchinTracker("Visit/Redirect/" + o + encodeURIComponent(e)), window.location = RobloxLaunch.launchGamePage), !1 } return typeof urchinTracker != "undefined" && urchinTracker("Visit/Success/" + t), !0 }, RobloxLaunch.CheckGameStarted = function(n) { function r() { var e = !1; try { if (i || (i = window.ActiveXObject ? n.IsGameStarted : n.Get_GameStarted()), i && !Roblox.VideoPreRoll.isPlaying()) { if (MadStatus.stop("Connecting to Players..."), RobloxLaunch.state = RobloxLaunchStates.None, $.modal.close(), t._cancelled = !0, Roblox.Client._hiddenModeEnabled && Roblox.Client.UnhideApp(), Roblox.Client._bringAppToFrontEnabled) try { n.BringAppToFront() } catch (f) {} Roblox.Client.ReleaseLauncher(n, !0, !1) } else t._cancelled || setTimeout(r, 1e3) } catch (u) { t._cancelled || setTimeout(r, 1e3) } } var t = RobloxLaunch.launcher, i; t === null && (t = new RBX.PlaceLauncher("PlaceLauncherStatusPanel"), t._showDialog(), t._updateStatus(0)), i = !1, r() }, RobloxLaunch.CheckRobloxInstall = function(n) { if (Roblox.Client.IsRobloxInstalled()) return Roblox.Client.Update(), !0; window.location = n }, RBX.PlaceLauncher = function(n) { this._cancelled = !1, this._popupID = n, this._popup = $("#" + n) }, RBX.PlaceLauncher.prototype = { _showDialog: function() { this._cancelled = !1, _popupOptions = { escClose: !0, opacity: 80, overlayCss: { backgroundColor: "#000" } }, this._popupID == "PlaceLauncherStatusPanel" && (Roblox.VideoPreRoll && Roblox.VideoPreRoll.showVideoPreRoll && !Roblox.VideoPreRoll.isExcluded() ? (this._popup = $("#videoPrerollPanel"), _popupOptions.onShow = function(n) { Roblox.VideoPreRoll.correctIEModalPosition(n), Roblox.VideoPreRoll.start() }, _popupOptions.onClose = function() { Roblox.VideoPreRoll.close() }, _popupOptions.closeHTML = '') : (this._popup = $("#" + this._popupID), _popupOptions.onClose = function() { Roblox.VideoPreRoll.logVideoPreRoll(), $.modal.close() })), this._popup.modal(_popupOptions); var n = this; $(".CancelPlaceLauncherButton").click(function() { n.CancelLaunch() }), $(".CancelPlaceLauncherButton").show() }, _reportDuration: function(n, t) { $.ajax({ type: "GET", async: !0, cache: !1, timeout: 5e4, url: "/Game/JoinRate.ashx?c=" + RobloxLaunch.clientMetricType + "&r=" + t + "&d=" + n, success: function() {} }) }, _onGameStatus: function(n) { var r, i, t; if (this._cancelled) { r = +new Date - RobloxLaunch.timer.getTime(), this._reportDuration(r, "Cancel"); return } if (this._updateStatus(n.status), n.status === 2) RobloxLaunch.StartGame(n.joinScriptUrl, "Join", n.authenticationUrl, n.authenticationTicket), i = +new Date - RobloxLaunch.timer.getTime(), this._reportDuration(i, "Success"); else if (n.status < 2 || n.status === 6) { var f = function(n, t) { t._onGameStatus(n) }, e = function(n, t) { t._onGameError(n) }, o = this, u = function() { RobloxPlaceLauncherService.CheckGameJobStatus(n.jobId, f, e, o) }; window.setTimeout(u, 2e3) } else n.status === 4 && (t = +new Date - RobloxLaunch.timer.getTime(), this._reportDuration(t, "Failure")) }, _updateStatus: function(n) { MadStatus.running || (MadStatus.init($(this._popup).find(".MadStatusField"), $(this._popup).find(".MadStatusBackBuffer"), 2e3, 800), MadStatus.start()); switch (n) { case 0: break; case 1: MadStatus.manualUpdate("A server is loading the game...", !0); break; case 2: MadStatus.manualUpdate("The server is ready. Joining the game...", !0); break; case 3: MadStatus.manualUpdate("Joining games is temporarily disabled while we upgrade. Please try again soon.", !1); break; case 4: MadStatus.manualUpdate("An error occurred. Please try again later.", !1); break; case 5: MadStatus.manualUpdate("The game you requested has ended.", !1); break; case 6: MadStatus.manualUpdate("The game you requested is currently full. Waiting for an opening...", !0, !1); break; case 7: MadStatus.manualUpdate("Roblox is updating. Please wait...", !0); break; case 8: MadStatus.manualUpdate("Requesting a server", !0); break; default: MadStatus.stop("Connecting to Players...") } $(this._popup).find(".MadStatusStarting").css("display", "none"), $(this._popup).find(".MadStatusSpinner").css("visibility", n === 3 || n === 4 || n === 5 ? "hidden" : "visible") }, _onGameError: function() { this._updateStatus(4) }, _startUpdatePolling: function(n) { var t, i; try { if (RobloxLaunch.state = RobloxLaunchStates.Upgrading, t = Roblox.Client.CreateLauncher(!0), i = window.ActiveXObject ? t.IsUpToDate : t.Get_IsUpToDate(), i || i === undefined) { try { t.PreStartGame() } catch (e) {} Roblox.Client.ReleaseLauncher(t, !0, !1), RobloxLaunch.state = RobloxLaunchStates.StartingServer, n(); return } var f = function(t, i, r) { r._onUpdateStatus(t, i, n) }, u = function(n, t) { t._onUpdateError(n) }, r = this; this.CheckUpdateStatus(f, u, t, n, r) } catch (e) { Roblox.Client.ReleaseLauncher(t, !0, !1), n() } }, _onUpdateStatus: function(n, t, i) { if (!this._cancelled) if (this._updateStatus(n), n === 8) Roblox.Client.ReleaseLauncher(t, !0, !0), Roblox.Client.Refresh(), RobloxLaunch.state = RobloxLaunchStates.StartingServer, i(); else if (n === 7) { var f = function(n, t, r) { r._onUpdateStatus(n, t, i) }, e = function(n, t) { t._onUpdateError(n) }, r = this, u = function() { r.CheckUpdateStatus(f, e, t, i, r) }; window.setTimeout(u, 2e3) } else alert("Unknown status from CheckUpdateStatus") }, _onUpdateError: function() { this._updateStatus(2) }, CheckUpdateStatus: function(n, t, i, r, u) { try { if (i.PreStartGame(), window.ActiveXObject) var f = i.IsUpToDate; else f = i.Get_IsUpToDate(); f || f === undefined ? n(8, i, u) : n(7, i, u) } catch (e) { n(8, i, u) } }, RequestGame: function(n, t) { var r; this._showDialog(); var f = function(n, t) { t._onGameStatus(n) }, u = function(n, t) { t._onGameError(n) }, e = this, i = !1; return typeof Party != "undefined" && typeof Party.AmILeader == "function" && (i = Party.AmILeader()), r = function() { RobloxPlaceLauncherService.RequestGame(n, i, t, f, u, e) }, this._startUpdatePolling(r), !1 }, RequestPlayWithParty: function(n, t, i) { this._showDialog(); var f = function(n, t) { t._onGameStatus(n) }, e = function(n, t) { t._onGameError(n) }, r = this, u = function() { RobloxPlaceLauncherService.RequestPlayWithParty(n, t, i, f, e, r) }; return this._startUpdatePolling(u), !1 }, RequestGroupBuildGame: function(n) { this._showDialog(); var r = function(n, t) { t._onGameStatus(n, !0) }, u = function(n, t) { t._onGameError(n) }, t = this, i = function() { RobloxPlaceLauncherService.RequestGroupBuildGame(n, r, u, t) }; return this._startUpdatePolling(i), !1 }, RequestFollowUser: function(n) { this._showDialog(); var r = function(n, t) { t._onGameStatus(n) }, u = function(n, t) { t._onError(n) }, t = this, i = function() { RobloxPlaceLauncherService.RequestFollowUser(n, r, u, t) }; return this._startUpdatePolling(i), !1 }, RequestGameJob: function(n, t, i) { this._showDialog(); var f = function(n, t) { t._onGameStatus(n) }, e = function(n, t) { t._onGameError(n) }, r = this, u = function() { RobloxPlaceLauncherService.RequestGameJob(n, t, i, f, e, r) }; return this._startUpdatePolling(u), !1 }, CancelLaunch: function() { return this._cancelled = !0, $.modal.close(), !1 }, dispose: function() { RBX.PlaceLauncher.callBaseMethod(this, "dispose") } }; ; /// VideoPreRoll.js function openVideoPreroll2(n) { Roblox.VideoPreRoll.test(n) } function flashCheck(n) { var i = !1, t, r; if (window.ActiveXObject) try { t = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + n), i = !0 } catch (u) {} else navigator.plugins && navigator.mimeTypes.length > 0 && (t = navigator.plugins["Shockwave Flash"], t && (r = navigator.plugins["Shockwave Flash"].description.replace(/.*\s(\d+\.\d+).*/, "$1"), r >= n && (i = !0))); return i } typeof Roblox == "undefined" && (Roblox = {}), Roblox.VideoPreRoll = { newValue: "", showVideoPreRoll: !1, videoInitialized: !1, videoStarted: !1, videoCompleted: !1, videoSkipped: !1, videoCancelled: !1, videoErrored: !1, videoOptions: { key: "integration_test", companionId: "videoPrerollCompanionAd" }, myvpaidad: null, loadingBarMaxTime: 3e4, loadingBarCurrentTime: 0, loadingBarIntervalID: 0, loadingBarID: "videoPrerollLoadingBar", loadingBarInnerID: "videoPrerollLoadingBarCompleted", loadingBarPercentageID: "videoPrerollLoadingPercent", videoLoadingTimeout: 7e3, videoPlayingTimeout: 23e3, videoLogNote: "", logsEnabled: !1, excludedPlaceIds: "", specificAdOnPlacePageEnabled: !1, specificAdOnPlacePageId: 0, specificAdOnPlacePageCategory: "", checkEligibility: function() { Roblox.VideoPreRoll.showVideoPreRoll && (flashCheck(8) ? typeof __adaptv__ == "undefined" ? (Roblox.VideoPreRoll.videoLogNote = "NoAdapTv", Roblox.VideoPreRoll.showVideoPreRoll = !1) : Roblox.Client.IsRobloxInstalled() ? Roblox.Client.isIDE() ? (Roblox.VideoPreRoll.videoLogNote = "RobloxStudio", Roblox.VideoPreRoll.showVideoPreRoll = !1) : Roblox.Client.isRobloxBrowser() ? (Roblox.VideoPreRoll.videoLogNote = "RobloxPlayer", Roblox.VideoPreRoll.showVideoPreRoll = !1) : window.chrome && window.location.hash == "#chromeInstall" && (Roblox.VideoPreRoll.showVideoPreRoll = !1) : Roblox.VideoPreRoll.showVideoPreRoll = !1 : (Roblox.VideoPreRoll.videoLogNote = "NoFlash", Roblox.VideoPreRoll.showVideoPreRoll = !1)) }, isExcluded: function() { var t, n; if (Roblox.VideoPreRoll.showVideoPreRoll && Roblox.VideoPreRoll.excludedPlaceIds !== "" && (t = Roblox.VideoPreRoll.excludedPlaceIds.split(","), typeof play_placeId != "undefined")) for (n = 0; n < t.length; n++) if (play_placeId == t[n]) return Roblox.VideoPreRoll.videoLogNote = "ExcludedPlace", !0; return !1 }, start: function() { var i, r, t, n; this.videoInitialized = !0, this.videoStarted = !1, this.videoCancelled = !1, this.videoCompleted = !1, this.videoSkipped = !1, this.loadingBarCurrentTime = 0, this.videoLogNote = "", Roblox.VideoPreRoll.specificAdOnPlacePageEnabled && typeof play_placeId != "undefined" && (i = "," + Roblox.VideoPreRoll.specificAdOnPlacePageCategory, play_placeId == Roblox.VideoPreRoll.specificAdOnPlacePageId && Roblox.VideoPreRoll.videoOptions.categories.indexOf(i) == -1 && (Roblox.VideoPreRoll.videoOptions.categories += i)), r = __adaptv__, this.myvpaidad = new r.ads.vpaid.VPAIDAd("videoPrerollMainDiv"), t = 1e3, LoadingBar.init(this.loadingBarID, this.loadingBarInnerID, this.loadingBarPercentageID), this.loadingBarIntervalID = setInterval(function() { Roblox.VideoPreRoll.loadingBarCurrentTime += t, LoadingBar.update(Roblox.VideoPreRoll.loadingBarID, Roblox.VideoPreRoll.loadingBarCurrentTime / Roblox.VideoPreRoll.loadingBarMaxTime) }, t), n = r.ads.vpaid.VPAIDEvent; this.myvpaidad.on(n.AdLoaded, function(n) { Roblox.VideoPreRoll._onVideoLoaded(n) }); this.myvpaidad.on(n.AdStarted, function(n) { Roblox.VideoPreRoll._onVideoStart(n) }); this.myvpaidad.on(n.AdStopped, function(n) { Roblox.VideoPreRoll._onVideoComplete(n) }); this.myvpaidad.on(n.AdError, function(n) { Roblox.VideoPreRoll._onVideoError(n) }); try { this.myvpaidad.initAd(391, 312, this.videoOptions) } catch (u) { f() } }, error: function() { clearInterval(loadingBarInterval) }, cancel: function() { this.videoCancelled = !0, $.modal.close() }, skip: function() { this.videoCompleted = !0, this.videoSkipped = !0, this.showVideoPreRoll = !1 }, close: function() { MadStatus.running && MadStatus.stop(""), RobloxLaunch.launcher && (RobloxLaunch.launcher._cancelled = !0), clearInterval(this.loadingBarIntervalID), LoadingBar.dispose(this.loadingBarID); try { this.myvpaidad.stopAd() } catch (n) {} this.isPlaying() && (this.videoCancelled = !0), $.modal.close(), this.logVideoPreRoll() }, _onVideoError: function f() { this.videoCompleted = !0, this.videoErrored = !0 }, _onVideoLoaded: function(n) { try { this.myvpaidad.startAd() } catch (t) { f(n) } }, _onVideoStart: function() { this.videoStarted = !0 }, _onVideoComplete: function() { this.videoStarted && this.videoCancelled == !1 && (this.videoCompleted = !0, this.showVideoPreRoll = !1, this.newValue != "" && $.cookie("RBXVPR", this.newValue, 180)) }, logVideoPreRoll: function() { if (Roblox.VideoPreRoll.logsEnabled) { var n = ""; if (Roblox.VideoPreRoll.videoCompleted) n = "Complete", Roblox.VideoPreRoll.videoLogNote == "" && (Roblox.VideoPreRoll.videoLogNote = "NoTimeout"), Roblox.VideoPreRoll.logsEnabled = !1; else if (Roblox.VideoPreRoll.videoCancelled) n = "Cancelled", Roblox.VideoPreRoll.videoLogNote = RobloxLaunch.state; else if (Roblox.VideoPreRoll.videoInitialized == !1 && Roblox.VideoPreRoll.videoLogNote != "") n = "Failed", Roblox.VideoPreRoll.logsEnabled = !1; else return; GoogleAnalyticsEvents.FireEvent(["PreRoll", n, Roblox.VideoPreRoll.videoLogNote]) } }, isPlaying: function() { return Roblox.VideoPreRoll.videoInitialized ? (Roblox.VideoPreRoll.videoInitialized && !Roblox.VideoPreRoll.videoStarted && Roblox.VideoPreRoll.loadingBarCurrentTime > Roblox.VideoPreRoll.videoLoadingTimeout && (Roblox.VideoPreRoll.videoCompleted = !0, Roblox.VideoPreRoll.videoLogNote = "LoadingTimeout"), Roblox.VideoPreRoll.videoStarted && !Roblox.VideoPreRoll.videoCompleted && Roblox.VideoPreRoll.loadingBarCurrentTime > Roblox.VideoPreRoll.videoPlayingTimeout && (Roblox.VideoPreRoll.videoCompleted = !0, Roblox.VideoPreRoll.videoLogNote = "PlayingTimeout"), !Roblox.VideoPreRoll.videoCompleted) : !1 }, correctIEModalPosition: function(n) { if (n.container.innerHeight() <= 30) { var i = $("#videoPrerollPanel"), t = -Math.floor(i.innerHeight() / 2); i.css({ position: "relative", top: t + "px" }), n.container.find(".VprCloseButton").css({ top: t - 10 + "px", "z-index": "1003" }) } }, test: function() { _popupOptions = { escClose: !0, opacity: 80, overlayCss: { backgroundColor: "#000" }, onShow: function(n) { Roblox.VideoPreRoll.correctIEModalPosition(n), Roblox.VideoPreRoll.start() }, onClose: function() { Roblox.VideoPreRoll.close() }, closeHTML: '' }, $("#videoPrerollPanel").modal(_popupOptions), MadStatus.running || (MadStatus.init($("#videoPrerollPanel").find(".MadStatusField"), $("#videoPrerollPanel").find(".MadStatusBackBuffer"), 2e3, 800), MadStatus.start()), $("#videoPrerollPanel").find(".MadStatusStarting").css("display", "none"), $("#videoPrerollPanel").find(".MadStatusSpinner").css("visibility", status === 3 || status === 4 || status === 5 ? "hidden" : "visible") } }; var LoadingBar = { bars: [], init: function(n, t, i, r) { var u = this.get(n); u == null && (u = {}), u.barID = n, u.innerBarID = t, u.percentageID = i, typeof r == "undefined" && (u.percentComplete = 0), this.bars.push(u), this.update(n, u.percentComplete) }, get: function(n) { for (var t = 0; t < this.bars.length; t++) if (this.bars[t].barID == n) return this.bars[t]; return null }, dispose: function(n) { for (var t = 0; t < this.bars.length; t++) this.bars[t].barID == n && this.bars.splice(t, 1) }, update: function(n, t) { var i = this.get(n), u, r; i && (t > 1 && (t = 1), u = $("#" + n).width(), r = Math.round(u * t), $("#" + i.innerBarID).animate({ width: r }, 200, "swing"), i.percentageID && $("#" + i.percentageID).length > 0 && $("#" + i.percentageID).html(Math.round(t * 100) + "%"), i.percentComplete = t) } }; // end roblox.js