Created
April 20, 2012 01:11
-
-
Save chrisinajar/2425138 to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (function () { | |
| var v = 0, | |
| q = [], | |
| o = {}, | |
| s = {}, | |
| A = { | |
| "<": "lt", | |
| ">": "gt", | |
| "&": "amp", | |
| '"': "quot", | |
| "'": "#39" | |
| }, | |
| p = /[<>&\"\']/g, | |
| z, y = window.setTimeout, | |
| x = {}, | |
| w; | |
| function t() { | |
| this.returnValue = false; | |
| } | |
| function r() { | |
| this.cancelBubble = true; | |
| }(function (e) { | |
| var d = e.split(/,/), | |
| c, a, b; | |
| for (c = 0; c < d.length; c += 2) { | |
| b = d[c + 1].split(/ /); | |
| for (a = 0; a < b.length; a++) { | |
| s[b[a]] = d[c]; | |
| } | |
| } | |
| })("application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats,docx pptx xlsx,audio/mpeg,mpga mpega mp2 mp3,audio/x-wav,wav,audio/mp4,m4a,image/bmp,bmp,image/gif,gif,image/jpeg,jpeg jpg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/html,htm html xhtml,text/rtf,rtf,video/mpeg,mpeg mpg mpe,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/vnd.rn-realvideo,rv,text/csv,csv,text/plain,asc txt text diff log,application/octet-stream,exe"); | |
| var u = { | |
| VERSION: "1.4.3.2", | |
| STOPPED: 1, | |
| STARTED: 2, | |
| QUEUED: 1, | |
| UPLOADING: 2, | |
| FAILED: 4, | |
| DONE: 5, | |
| GENERIC_ERROR: -100, | |
| HTTP_ERROR: -200, | |
| IO_ERROR: -300, | |
| SECURITY_ERROR: -400, | |
| INIT_ERROR: -500, | |
| FILE_SIZE_ERROR: -600, | |
| FILE_EXTENSION_ERROR: -601, | |
| IMAGE_FORMAT_ERROR: -700, | |
| IMAGE_MEMORY_ERROR: -701, | |
| IMAGE_DIMENSIONS_ERROR: -702, | |
| mimeTypes: s, | |
| extend: function (a) { | |
| u.each(arguments, function (c, b) { | |
| if (b > 0) { | |
| u.each(c, function (d, e) { | |
| a[e] = d; | |
| }); | |
| } | |
| }); | |
| return a; | |
| }, | |
| cleanName: function (c) { | |
| var b, a; | |
| a = [/[\300-\306]/g, "A", /[\340-\346]/g, "a", /\307/g, "C", /\347/g, "c", /[\310-\313]/g, "E", /[\350-\353]/g, "e", /[\314-\317]/g, "I", /[\354-\357]/g, "i", /\321/g, "N", /\361/g, "n", /[\322-\330]/g, "O", /[\362-\370]/g, "o", /[\331-\334]/g, "U", /[\371-\374]/g, "u"]; | |
| for (b = 0; b < a.length; b += 2) { | |
| c = c.replace(a[b], a[b + 1]); | |
| } | |
| c = c.replace(/\s+/g, "_"); | |
| c = c.replace(/[^a-z0-9_\-\.]+/gi, ""); | |
| return c; | |
| }, | |
| addRuntime: function (b, a) { | |
| a.name = b; | |
| q[b] = a; | |
| q.push(a); | |
| return a; | |
| }, | |
| guid: function () { | |
| var b = new Date().getTime().toString(32), | |
| a; | |
| for (a = 0; a < 5; a++) { | |
| b += Math.floor(Math.random() * 65535).toString(32); | |
| } | |
| return (u.guidPrefix || "p") + b + (v++).toString(32); | |
| }, | |
| buildUrl: function (b, c) { | |
| var a = ""; | |
| u.each(c, function (d, e) { | |
| a += (a ? "&" : "") + encodeURIComponent(e) + "=" + encodeURIComponent(d); | |
| }); | |
| if (a) { | |
| b += (b.indexOf("?") > 0 ? "&" : "?") + a; | |
| } | |
| return b; | |
| }, | |
| each: function (b, a) { | |
| var c, d, e; | |
| if (b) { | |
| c = b.length; | |
| if (c === z) { | |
| for (d in b) { | |
| if (b.hasOwnProperty(d)) { | |
| if (a(b[d], d) === false) { | |
| return; | |
| } | |
| } | |
| } | |
| } else { | |
| for (e = 0; e < c; e++) { | |
| if (a(b[e], e) === false) { | |
| return; | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| formatSize: function (a) { | |
| if (a === z || /\D/.test(a)) { | |
| return u.translate("N/A"); | |
| } | |
| if (a > 1073741824) { | |
| return Math.round(a / 1073741824, 1) + " GB"; | |
| } | |
| if (a > 1048576) { | |
| return Math.round(a / 1048576, 1) + " MB"; | |
| } | |
| if (a > 1024) { | |
| return Math.round(a / 1024, 1) + " KB"; | |
| } | |
| return a + " b"; | |
| }, | |
| getPos: function (c, h) { | |
| var g = 0, | |
| j = 0, | |
| e, f = document, | |
| b, a; | |
| c = c; | |
| h = h || f.body; | |
| function d(n) { | |
| var k, E, m = 0, | |
| l = 0; | |
| if (n) { | |
| E = n.getBoundingClientRect(); | |
| k = f.compatMode === "CSS1Compat" ? f.documentElement : f.body; | |
| m = E.left + k.scrollLeft; | |
| l = E.top + k.scrollTop; | |
| } | |
| return { | |
| x: m, | |
| y: l | |
| }; | |
| } | |
| if (c && c.getBoundingClientRect && (navigator.userAgent.indexOf("MSIE") > 0 && f.documentMode !== 8)) { | |
| b = d(c); | |
| a = d(h); | |
| return { | |
| x: b.x - a.x, | |
| y: b.y - a.y | |
| }; | |
| } | |
| e = c; | |
| while (e && e != h && e.nodeType) { | |
| g += e.offsetLeft || 0; | |
| j += e.offsetTop || 0; | |
| e = e.offsetParent; | |
| } | |
| e = c.parentNode; | |
| while (e && e != h && e.nodeType) { | |
| g -= e.scrollLeft || 0; | |
| j -= e.scrollTop || 0; | |
| e = e.parentNode; | |
| } | |
| return { | |
| x: g, | |
| y: j | |
| }; | |
| }, | |
| getSize: function (a) { | |
| return { | |
| w: a.offsetWidth || a.clientWidth, | |
| h: a.offsetHeight || a.clientHeight | |
| }; | |
| }, | |
| parseSize: function (b) { | |
| var a; | |
| if (typeof (b) == "string") { | |
| b = /^([0-9]+)([mgk]?)$/.exec(b.toLowerCase().replace(/[^0-9mkg]/g, "")); | |
| a = b[2]; | |
| b = +b[1]; | |
| if (a == "g") { | |
| b *= 1073741824; | |
| } | |
| if (a == "m") { | |
| b *= 1048576; | |
| } | |
| if (a == "k") { | |
| b *= 1024; | |
| } | |
| } | |
| return b; | |
| }, | |
| xmlEncode: function (a) { | |
| return a ? ("" + a).replace(p, function (b) { | |
| return A[b] ? "&" + A[b] + ";" : b; | |
| }) : a; | |
| }, | |
| toArray: function (a) { | |
| var b, c = []; | |
| for (b = 0; b < a.length; b++) { | |
| c[b] = a[b]; | |
| } | |
| return c; | |
| }, | |
| addI18n: function (a) { | |
| return u.extend(o, a); | |
| }, | |
| translate: function (a) { | |
| return o[a] || a; | |
| }, | |
| isEmptyObj: function (b) { | |
| if (b === z) { | |
| return true; | |
| } | |
| for (var a in b) { | |
| return false; | |
| } | |
| return true; | |
| }, | |
| hasClass: function (a, b) { | |
| var c; | |
| if (a.className == "") { | |
| return false; | |
| } | |
| c = new RegExp("(^|\\s+)" + b + "(\\s+|$)"); | |
| return c.test(a.className); | |
| }, | |
| addClass: function (a, b) { | |
| if (!u.hasClass(a, b)) { | |
| a.className = a.className == "" ? b : a.className.replace(/\s+$/, "") + " " + b; | |
| } | |
| }, | |
| removeClass: function (a, b) { | |
| var c = new RegExp("(^|\\s+)" + b + "(\\s+|$)"); | |
| a.className = a.className.replace(c, function (e, f, d) { | |
| return f === " " && d === " " ? " " : ""; | |
| }); | |
| }, | |
| getStyle: function (a, b) { | |
| if (a.currentStyle) { | |
| return a.currentStyle[b]; | |
| } else { | |
| if (window.getComputedStyle) { | |
| return window.getComputedStyle(a, null)[b]; | |
| } | |
| } | |
| }, | |
| addEvent: function (b, g, a) { | |
| var c, d, e, f; | |
| f = arguments[3]; | |
| g = g.toLowerCase(); | |
| if (w === z) { | |
| w = "Plupload_" + u.guid(); | |
| } | |
| if (b.addEventListener) { | |
| c = a; | |
| b.addEventListener(g, c, false); | |
| } else { | |
| if (b.attachEvent) { | |
| c = function () { | |
| var h = window.event; | |
| if (!h.target) { | |
| h.target = h.srcElement; | |
| } | |
| h.preventDefault = t; | |
| h.stopPropagation = r; | |
| a(h); | |
| }; | |
| b.attachEvent("on" + g, c); | |
| } | |
| } | |
| if (b[w] === z) { | |
| b[w] = u.guid(); | |
| } | |
| if (!x.hasOwnProperty(b[w])) { | |
| x[b[w]] = {}; | |
| } | |
| d = x[b[w]]; | |
| if (!d.hasOwnProperty(g)) { | |
| d[g] = []; | |
| } | |
| d[g].push({ | |
| func: c, | |
| orig: a, | |
| key: f | |
| }); | |
| }, | |
| removeEvent: function (b, g) { | |
| var d, a, e; | |
| if (typeof (arguments[2]) == "function") { | |
| a = arguments[2]; | |
| } else { | |
| e = arguments[2]; | |
| } | |
| g = g.toLowerCase(); | |
| if (b[w] && x[b[w]] && x[b[w]][g]) { | |
| d = x[b[w]][g]; | |
| } else { | |
| return; | |
| } | |
| for (var f = d.length - 1; f >= 0; f--) { | |
| if (d[f].key === e || d[f].orig === a) { | |
| if (b.detachEvent) { | |
| b.detachEvent("on" + g, d[f].func); | |
| } else { | |
| if (b.removeEventListener) { | |
| b.removeEventListener(g, d[f].func, false); | |
| } | |
| } | |
| d[f].orig = null; | |
| d[f].func = null; | |
| d.splice(f, 1); | |
| if (a !== z) { | |
| break; | |
| } | |
| } | |
| } | |
| if (!d.length) { | |
| delete x[b[w]][g]; | |
| } | |
| if (u.isEmptyObj(x[b[w]])) { | |
| delete x[b[w]]; | |
| try { | |
| delete b[w]; | |
| } catch (c) { | |
| b[w] = z; | |
| } | |
| } | |
| }, | |
| removeAllEvents: function (a) { | |
| var b = arguments[1]; | |
| if (a[w] === z || !a[w]) { | |
| return; | |
| } | |
| u.each(x[a[w]], function (c, d) { | |
| u.removeEvent(a, d, b); | |
| }); | |
| } | |
| }; | |
| u.Uploader = function (d) { | |
| var f = {}, | |
| a, b = [], | |
| e; | |
| a = new u.QueueProgress(); | |
| d = u.extend({ | |
| chunk_size: 0, | |
| multipart: true, | |
| multi_selection: true, | |
| file_data_name: "file", | |
| filters: [] | |
| }, d); | |
| function c() { | |
| var j, h = 0, | |
| k; | |
| if (this.state == u.STARTED) { | |
| for (k = 0; k < b.length; k++) { | |
| if (!j && b[k].status == u.QUEUED) { | |
| j = b[k]; | |
| j.status = u.UPLOADING; | |
| if (this.trigger("BeforeUpload", j)) { | |
| this.trigger("UploadFile", j); | |
| } | |
| } else { | |
| h++; | |
| } | |
| } | |
| if (h == b.length) { | |
| this.trigger("UploadComplete", b); | |
| this.stop(); | |
| } | |
| } | |
| } | |
| function g() { | |
| var h, j; | |
| a.reset(); | |
| for (h = 0; h < b.length; h++) { | |
| j = b[h]; | |
| if (j.size !== z) { | |
| a.size += j.size; | |
| a.loaded += j.loaded; | |
| } else { | |
| a.size = z; | |
| } | |
| if (j.status == u.DONE) { | |
| a.uploaded++; | |
| } else { | |
| if (j.status == u.FAILED) { | |
| a.failed++; | |
| } else { | |
| a.queued++; | |
| } | |
| } | |
| } | |
| if (a.size === z) { | |
| a.percent = b.length > 0 ? Math.ceil(a.uploaded / b.length * 100) : 0; | |
| } else { | |
| a.bytesPerSec = Math.ceil(a.loaded / ((+new Date() - e || 1) / 1000)); | |
| a.percent = a.size > 0 ? Math.ceil(a.loaded / a.size * 100) : 0; | |
| } | |
| } | |
| u.extend(this, { | |
| state: u.STOPPED, | |
| runtime: "", | |
| features: {}, | |
| files: b, | |
| settings: d, | |
| total: a, | |
| id: u.guid(), | |
| init: function () { | |
| var j = this, | |
| C, h, k, m = 0, | |
| n; | |
| if (typeof (d.preinit) == "function") { | |
| d.preinit(j); | |
| } else { | |
| u.each(d.preinit, function (B, E) { | |
| j.bind(E, B); | |
| }); | |
| } | |
| d.page_url = d.page_url || document.location.pathname.replace(/\/[^\/]+$/g, "/"); | |
| if (!/^(\w+:\/\/|\/)/.test(d.url)) { | |
| d.url = d.page_url + d.url; | |
| } | |
| d.chunk_size = u.parseSize(d.chunk_size); | |
| d.max_file_size = u.parseSize(d.max_file_size); | |
| j.bind("FilesAdded", function (O, L) { | |
| var M, N, J = 0, | |
| B, K = d.filters; | |
| if (K && K.length) { | |
| B = []; | |
| u.each(K, function (D) { | |
| u.each(D.extensions.split(/,/), function (E) { | |
| if (/^\s*\*\s*$/.test(E)) { | |
| B.push("\\.*"); | |
| } else { | |
| B.push("\\." + E.replace(new RegExp("[" + ("/^$.*+?|()[]{}\\".replace(/./g, "\\$&")) + "]", "g"), "\\$&")); | |
| } | |
| }); | |
| }); | |
| B = new RegExp(B.join("|") + "$", "i"); | |
| } | |
| for (M = 0; M < L.length; M++) { | |
| N = L[M]; | |
| N.loaded = 0; | |
| N.percent = 0; | |
| N.status = u.QUEUED; | |
| if (B && !B.test(N.name)) { | |
| O.trigger("Error", { | |
| code: u.FILE_EXTENSION_ERROR, | |
| message: u.translate("File extension error."), | |
| file: N | |
| }); | |
| continue; | |
| } | |
| if (N.size !== z && N.size > d.max_file_size) { | |
| O.trigger("Error", { | |
| code: u.FILE_SIZE_ERROR, | |
| message: u.translate("File size error."), | |
| file: N | |
| }); | |
| continue; | |
| } | |
| b.push(N); | |
| J++; | |
| } | |
| if (J) { | |
| y(function () { | |
| j.trigger("QueueChanged"); | |
| j.refresh(); | |
| }, 1); | |
| } else { | |
| return false; | |
| } | |
| }); | |
| if (d.unique_names) { | |
| j.bind("UploadFile", function (I, H) { | |
| var B = H.name.match(/\.([^.]+)$/), | |
| G = "tmp"; | |
| if (B) { | |
| G = B[1]; | |
| } | |
| H.target_name = H.id + "." + G; | |
| }); | |
| } | |
| j.bind("UploadProgress", function (E, B) { | |
| B.percent = B.size > 0 ? Math.ceil(B.loaded / B.size * 100) : 100; | |
| g(); | |
| }); | |
| j.bind("StateChanged", function (B) { | |
| if (B.state == u.STARTED) { | |
| e = (+new Date()); | |
| } else { | |
| if (B.state == u.STOPPED) { | |
| for (C = B.files.length - 1; C >= 0; C--) { | |
| if (B.files[C].status == u.UPLOADING) { | |
| B.files[C].status = u.QUEUED; | |
| g(); | |
| } | |
| } | |
| } | |
| } | |
| }); | |
| j.bind("QueueChanged", g); | |
| j.bind("Error", function (E, B) { | |
| if (B.file) { | |
| B.file.status = u.FAILED; | |
| g(); | |
| if (E.state == u.STARTED) { | |
| y(function () { | |
| c.call(j); | |
| }, 1); | |
| } | |
| } | |
| }); | |
| j.bind("FileUploaded", function (E, B) { | |
| B.status = u.DONE; | |
| B.loaded = B.size; | |
| E.trigger("UploadProgress", B); | |
| y(function () { | |
| c.call(j); | |
| }, 1); | |
| }); | |
| if (d.runtimes) { | |
| h = []; | |
| n = d.runtimes.split(/\s?,\s?/); | |
| for (C = 0; C < n.length; C++) { | |
| if (q[n[C]]) { | |
| h.push(q[n[C]]); | |
| } | |
| } | |
| } else { | |
| h = q; | |
| } | |
| function l() { | |
| var B = h[m++], | |
| G, I, H; | |
| if (B) { | |
| G = B.getFeatures(); | |
| I = j.settings.required_features; | |
| if (I) { | |
| I = I.split(","); | |
| for (H = 0; H < I.length; H++) { | |
| if (!G[I[H]]) { | |
| l(); | |
| return; | |
| } | |
| } | |
| } | |
| B.init(j, function (D) { | |
| if (D && D.success) { | |
| j.features = G; | |
| j.runtime = B.name; | |
| j.trigger("Init", { | |
| runtime: B.name | |
| }); | |
| j.trigger("PostInit"); | |
| j.refresh(); | |
| } else { | |
| l(); | |
| } | |
| }); | |
| } else { | |
| j.trigger("Error", { | |
| code: u.INIT_ERROR, | |
| message: u.translate("Init error.") | |
| }); | |
| } | |
| } | |
| l(); | |
| if (typeof (d.init) == "function") { | |
| d.init(j); | |
| } else { | |
| u.each(d.init, function (B, E) { | |
| j.bind(E, B); | |
| }); | |
| } | |
| }, | |
| refresh: function () { | |
| this.trigger("Refresh"); | |
| }, | |
| start: function () { | |
| if (this.state != u.STARTED) { | |
| this.state = u.STARTED; | |
| this.trigger("StateChanged"); | |
| c.call(this); | |
| } | |
| }, | |
| stop: function () { | |
| if (this.state != u.STOPPED) { | |
| this.state = u.STOPPED; | |
| this.trigger("StateChanged"); | |
| } | |
| }, | |
| getFile: function (h) { | |
| var j; | |
| for (j = b.length - 1; j >= 0; j--) { | |
| if (b[j].id === h) { | |
| return b[j]; | |
| } | |
| } | |
| }, | |
| removeFile: function (h) { | |
| var j; | |
| for (j = b.length - 1; j >= 0; j--) { | |
| if (b[j].id === h.id) { | |
| return this.splice(j, 1)[0]; | |
| } | |
| } | |
| }, | |
| splice: function (h, k) { | |
| var j; | |
| j = b.splice(h === z ? 0 : h, k === z ? b.length : k); | |
| this.trigger("FilesRemoved", j); | |
| this.trigger("QueueChanged"); | |
| return j; | |
| }, | |
| trigger: function (j) { | |
| var l = f[j.toLowerCase()], | |
| h, k; | |
| if (l) { | |
| k = Array.prototype.slice.call(arguments); | |
| k[0] = this; | |
| for (h = 0; h < l.length; h++) { | |
| if (l[h].func.apply(l[h].scope, k) === false) { | |
| return false; | |
| } | |
| } | |
| } | |
| return true; | |
| }, | |
| hasEventListener: function (h) { | |
| return !!f[h.toLowerCase()]; | |
| }, | |
| bind: function (k, h, j) { | |
| var l; | |
| k = k.toLowerCase(); | |
| l = f[k] || []; | |
| l.push({ | |
| func: h, | |
| scope: j || this | |
| }); | |
| f[k] = l; | |
| }, | |
| unbind: function (k) { | |
| k = k.toLowerCase(); | |
| var l = f[k], | |
| j, h = arguments[1]; | |
| if (l) { | |
| if (h !== z) { | |
| for (j = l.length - 1; j >= 0; j--) { | |
| if (l[j].func === h) { | |
| l.splice(j, 1); | |
| break; | |
| } | |
| } | |
| } else { | |
| l = []; | |
| } | |
| if (!l.length) { | |
| delete f[k]; | |
| } | |
| } | |
| }, | |
| unbindAll: function () { | |
| var h = this; | |
| u.each(f, function (j, k) { | |
| h.unbind(k); | |
| }); | |
| }, | |
| destroy: function () { | |
| this.trigger("Destroy"); | |
| this.unbindAll(); | |
| } | |
| }); | |
| }; | |
| u.File = function (a, c, b) { | |
| var d = this; | |
| d.id = a; | |
| d.name = c; | |
| d.size = b; | |
| d.loaded = 0; | |
| d.percent = 0; | |
| d.status = 0; | |
| }; | |
| u.Runtime = function () { | |
| this.getFeatures = function () {}; | |
| this.init = function (b, a) {}; | |
| }; | |
| u.QueueProgress = function () { | |
| var a = this; | |
| a.size = 0; | |
| a.loaded = 0; | |
| a.uploaded = 0; | |
| a.failed = 0; | |
| a.queued = 0; | |
| a.percent = 0; | |
| a.bytesPerSec = 0; | |
| a.reset = function () { | |
| a.size = a.loaded = a.uploaded = a.failed = a.queued = a.percent = a.bytesPerSec = 0; | |
| }; | |
| }; | |
| u.runtimes = {}; | |
| window.plupload = u; | |
| })(); | |
| (function () { | |
| if (window.google && google.gears) { | |
| return; | |
| } | |
| var d = null; | |
| if (typeof GearsFactory != "undefined") { | |
| d = new GearsFactory(); | |
| } else { | |
| try { | |
| d = new ActiveXObject("Gears.Factory"); | |
| if (d.getBuildInfo().indexOf("ie_mobile") != -1) { | |
| d.privateSetGlobalObject(this); | |
| } | |
| } catch (c) { | |
| if ((typeof navigator.mimeTypes != "undefined") && navigator.mimeTypes["application/x-googlegears"]) { | |
| d = document.createElement("object"); | |
| d.style.display = "none"; | |
| d.width = 0; | |
| d.height = 0; | |
| d.type = "application/x-googlegears"; | |
| document.documentElement.appendChild(d); | |
| } | |
| } | |
| } | |
| if (!d) { | |
| return; | |
| } | |
| if (!window.google) { | |
| window.google = {}; | |
| } | |
| if (!google.gears) { | |
| google.gears = { | |
| factory: d | |
| }; | |
| } | |
| })(); | |
| (function (k, g, m, l) { | |
| var j = {}; | |
| function h(e, c, a) { | |
| var f, d, b, p; | |
| d = google.gears.factory.create("beta.canvas"); | |
| try { | |
| d.decode(e); | |
| if (!c.width) { | |
| c.width = d.width; | |
| } | |
| if (!c.height) { | |
| c.height = d.height; | |
| } | |
| p = Math.min(width / d.width, height / d.height); | |
| if (p < 1 || (p === 1 && a === "image/jpeg")) { | |
| d.resize(Math.round(d.width * p), Math.round(d.height * p)); | |
| if (c.quality) { | |
| return d.encode(a, { | |
| quality: c.quality / 100 | |
| }); | |
| } | |
| return d.encode(a); | |
| } | |
| } catch (q) {} | |
| return e; | |
| } | |
| m.runtimes.Gears = m.addRuntime("gears", { | |
| getFeatures: function () { | |
| return { | |
| dragdrop: true, | |
| jpgresize: true, | |
| pngresize: true, | |
| chunks: true, | |
| progress: true, | |
| multipart: true | |
| }; | |
| }, | |
| init: function (c, a) { | |
| var b; | |
| if (!k.google || !google.gears) { | |
| return a({ | |
| success: false | |
| }); | |
| } | |
| try { | |
| b = google.gears.factory.create("beta.desktop"); | |
| } catch (d) { | |
| return a({ | |
| success: false | |
| }); | |
| } | |
| function e(t) { | |
| var u, f, s = [], | |
| r; | |
| for (f = 0; f < t.length; f++) { | |
| u = t[f]; | |
| r = m.guid(); | |
| j[r] = u.blob; | |
| s.push(new m.File(r, u.name, u.blob.length)); | |
| } | |
| c.trigger("FilesAdded", s); | |
| } | |
| c.bind("PostInit", function () { | |
| var o = c.settings, | |
| f = g.getElementById(o.drop_element); | |
| if (f) { | |
| m.addEvent(f, "dragover", function (n) { | |
| b.setDropEffect(n, "copy"); | |
| n.preventDefault(); | |
| }, c.id); | |
| m.addEvent(f, "drop", function (n) { | |
| var q = b.getDragData(n, "application/x-gears-files"); | |
| if (q) { | |
| e(q.files); | |
| } | |
| n.preventDefault(); | |
| }, c.id); | |
| f = 0; | |
| } | |
| m.addEvent(g.getElementById(o.browse_button), "click", function (n) { | |
| var t = [], | |
| v, w, u; | |
| n.preventDefault(); | |
| no_type_restriction: for (v = 0; v < o.filters.length; v++) { | |
| u = o.filters[v].extensions.split(","); | |
| for (w = 0; w < u.length; w++) { | |
| if (u[w] === "*") { | |
| t = []; | |
| break no_type_restriction; | |
| } | |
| t.push("." + u[w]); | |
| } | |
| } | |
| b.openFiles(e, { | |
| singleFile: !o.multi_selection, | |
| filter: t | |
| }); | |
| }, c.id); | |
| }); | |
| c.bind("UploadFile", function (C, w) { | |
| var A = 0, | |
| B, v, f = 0, | |
| x = C.settings.resize, | |
| z; | |
| if (x && /\.(png|jpg|jpeg)$/i.test(w.name)) { | |
| j[w.id] = h(j[w.id], x, /\.png$/i.test(w.name) ? "image/png" : "image/jpeg"); | |
| } | |
| w.size = j[w.id].length; | |
| v = C.settings.chunk_size; | |
| z = v > 0; | |
| B = Math.ceil(w.size / v); | |
| if (!z) { | |
| v = w.size; | |
| B = 1; | |
| } | |
| function y() { | |
| var r, t, p = C.settings.multipart, | |
| q = 0, | |
| o = { | |
| name: w.target_name || w.name | |
| }, | |
| n = C.settings.url; | |
| function s(N) { | |
| var O, u = "----pluploadboundary" + m.guid(), | |
| L = "--", | |
| J = "\r\n", | |
| M, K; | |
| if (p) { | |
| r.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + u); | |
| O = google.gears.factory.create("beta.blobbuilder"); | |
| m.each(m.extend(o, C.settings.multipart_params), function (D, E) { | |
| O.append(L + u + J + 'Content-Disposition: form-data; name="' + E + '"' + J + J); | |
| O.append(D + J); | |
| }); | |
| K = m.mimeTypes[w.name.replace(/^.+\.([^.]+)/, "$1").toLowerCase()] || "application/octet-stream"; | |
| O.append(L + u + J + 'Content-Disposition: form-data; name="' + C.settings.file_data_name + '"; filename="' + w.name + '"' + J + "Content-Type: " + K + J + J); | |
| O.append(N); | |
| O.append(J + L + u + L + J); | |
| M = O.getAsBlob(); | |
| q = M.length - N.length; | |
| N = M; | |
| } | |
| r.send(N); | |
| } | |
| if (w.status == m.DONE || w.status == m.FAILED || C.state == m.STOPPED) { | |
| return; | |
| } | |
| if (z) { | |
| o.chunk = A; | |
| o.chunks = B; | |
| } | |
| t = Math.min(v, w.size - (A * v)); | |
| if (!p) { | |
| n = m.buildUrl(C.settings.url, o); | |
| } | |
| r = google.gears.factory.create("beta.httprequest"); | |
| r.open("POST", n); | |
| if (!p) { | |
| r.setRequestHeader("Content-Disposition", 'attachment; filename="' + w.name + '"'); | |
| r.setRequestHeader("Content-Type", "application/octet-stream"); | |
| } | |
| m.each(C.settings.headers, function (u, E) { | |
| r.setRequestHeader(E, u); | |
| }); | |
| r.upload.onprogress = function (u) { | |
| w.loaded = f + u.loaded - q; | |
| C.trigger("UploadProgress", w); | |
| }; | |
| r.onreadystatechange = function () { | |
| var u; | |
| if (r.readyState == 4) { | |
| if (r.status == 200) { | |
| u = { | |
| chunk: A, | |
| chunks: B, | |
| response: r.responseText, | |
| status: r.status | |
| }; | |
| C.trigger("ChunkUploaded", w, u); | |
| if (u.cancelled) { | |
| w.status = m.FAILED; | |
| return; | |
| } | |
| f += t; | |
| if (++A >= B) { | |
| w.status = m.DONE; | |
| C.trigger("FileUploaded", w, { | |
| response: r.responseText, | |
| status: r.status | |
| }); | |
| } else { | |
| y(); | |
| } | |
| } else { | |
| C.trigger("Error", { | |
| code: m.HTTP_ERROR, | |
| message: m.translate("HTTP Error."), | |
| file: w, | |
| chunk: A, | |
| chunks: B, | |
| status: r.status | |
| }); | |
| } | |
| } | |
| }; | |
| if (A < B) { | |
| s(j[w.id].slice(A * v, t)); | |
| } | |
| } | |
| y(); | |
| }); | |
| c.bind("Destroy", function (f) { | |
| var s, r, q = { | |
| browseButton: f.settings.browse_button, | |
| dropElm: f.settings.drop_element | |
| }; | |
| for (s in q) { | |
| r = g.getElementById(q[s]); | |
| if (r) { | |
| m.removeAllEvents(r, f.id); | |
| } | |
| } | |
| }); | |
| a({ | |
| success: true | |
| }); | |
| } | |
| }); | |
| })(window, document, plupload); | |
| (function (m, j, p, o) { | |
| var k = {}, | |
| l = {}; | |
| function q(e) { | |
| var f, a = typeof e, | |
| d, b, c; | |
| if (a === "string") { | |
| f = "\bb\tt\nn\ff\rr\"\"''\\\\"; | |
| return '"' + e.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g, function (g, h) { | |
| var s = f.indexOf(h); | |
| if (s + 1) { | |
| return "\\" + f.charAt(s + 1); | |
| } | |
| g = h.charCodeAt().toString(16); | |
| return "\\u" + "0000".substring(g.length) + g; | |
| }) + '"'; | |
| } | |
| if (a == "object") { | |
| d = e.length !== o; | |
| f = ""; | |
| if (d) { | |
| for (b = 0; b < e.length; b++) { | |
| if (f) { | |
| f += ","; | |
| } | |
| f += q(e[b]); | |
| } | |
| f = "[" + f + "]"; | |
| } else { | |
| for (c in e) { | |
| if (e.hasOwnProperty(c)) { | |
| if (f) { | |
| f += ","; | |
| } | |
| f += q(c) + ":" + q(e[c]); | |
| } | |
| } | |
| f = "{" + f + "}"; | |
| } | |
| return f; | |
| } | |
| if (e === o) { | |
| return "null"; | |
| } | |
| return "" + e; | |
| } | |
| function n(A) { | |
| var x = false, | |
| w = null, | |
| d = null, | |
| h, g, f, y, e, b = 0; | |
| try { | |
| try { | |
| d = new ActiveXObject("AgControl.AgControl"); | |
| if (d.IsVersionSupported(A)) { | |
| x = true; | |
| } | |
| d = null; | |
| } catch (a) { | |
| var c = navigator.plugins["Silverlight Plug-In"]; | |
| if (c) { | |
| h = c.description; | |
| if (h === "1.0.30226.2") { | |
| h = "2.0.30226.2"; | |
| } | |
| g = h.split("."); | |
| while (g.length > 3) { | |
| g.pop(); | |
| } | |
| while (g.length < 4) { | |
| g.push(0); | |
| } | |
| f = A.split("."); | |
| while (f.length > 4) { | |
| f.pop(); | |
| } | |
| do { | |
| y = parseInt(f[b], 10); | |
| e = parseInt(g[b], 10); | |
| b++; | |
| } while (b < f.length && y === e); | |
| if (y <= e && !isNaN(y)) { | |
| x = true; | |
| } | |
| } | |
| } | |
| } catch (z) { | |
| x = false; | |
| } | |
| return x; | |
| } | |
| p.silverlight = { | |
| trigger: function (e, c) { | |
| var a = k[e], | |
| b, d; | |
| if (a) { | |
| d = p.toArray(arguments).slice(1); | |
| d[0] = "Silverlight:" + c; | |
| setTimeout(function () { | |
| a.trigger.apply(a, d); | |
| }, 0); | |
| } | |
| } | |
| }; | |
| p.runtimes.Silverlight = p.addRuntime("silverlight", { | |
| getFeatures: function () { | |
| return { | |
| jpgresize: true, | |
| pngresize: true, | |
| chunks: true, | |
| progress: true, | |
| multipart: true | |
| }; | |
| }, | |
| init: function (f, e) { | |
| var g, a = "", | |
| h = f.settings.filters, | |
| b, c = j.body; | |
| if (!n("2.0.31005.0") || (m.opera && m.opera.buildNumber)) { | |
| e({ | |
| success: false | |
| }); | |
| return; | |
| } | |
| l[f.id] = false; | |
| k[f.id] = f; | |
| g = j.createElement("div"); | |
| g.id = f.id + "_silverlight_container"; | |
| p.extend(g.style, { | |
| position: "absolute", | |
| top: "0px", | |
| background: f.settings.shim_bgcolor || "transparent", | |
| zIndex: 99999, | |
| width: "100px", | |
| height: "100px", | |
| overflow: "hidden", | |
| opacity: f.settings.shim_bgcolor || j.documentMode > 8 ? "" : 0.01 | |
| }); | |
| g.className = "plupload silverlight"; | |
| if (f.settings.container) { | |
| c = j.getElementById(f.settings.container); | |
| if (p.getStyle(c, "position") === "static") { | |
| c.style.position = "relative"; | |
| } | |
| } | |
| c.appendChild(g); | |
| for (b = 0; b < h.length; b++) { | |
| a += (a != "" ? "|" : "") + h[b].title + " | *." + h[b].extensions.replace(/,/g, ";*."); | |
| } | |
| g.innerHTML = '<object id="' + f.id + '_silverlight" data="data:application/x-silverlight," type="application/x-silverlight-2" style="outline:none;" width="1024" height="1024"><param name="source" value="' + f.settings.silverlight_xap_url + '"/><param name="background" value="Transparent"/><param name="windowless" value="true"/><param name="enablehtmlaccess" value="true"/><param name="initParams" value="id=' + f.id + ",filter=" + a + ",multiselect=" + f.settings.multi_selection + '"/></object>'; | |
| function d() { | |
| return j.getElementById(f.id + "_silverlight").content.Upload; | |
| } | |
| f.bind("Silverlight:Init", function () { | |
| var u, t = {}; | |
| if (l[f.id]) { | |
| return; | |
| } | |
| l[f.id] = true; | |
| f.bind("Silverlight:StartSelectFiles", function (r) { | |
| u = []; | |
| }); | |
| f.bind("Silverlight:SelectFile", function (A, s, z, y) { | |
| var r; | |
| r = p.guid(); | |
| t[r] = s; | |
| t[s] = r; | |
| u.push(new p.File(r, z, y)); | |
| }); | |
| f.bind("Silverlight:SelectSuccessful", function () { | |
| if (u.length) { | |
| f.trigger("FilesAdded", u); | |
| } | |
| }); | |
| f.bind("Silverlight:UploadChunkError", function (A, s, z, r, y) { | |
| f.trigger("Error", { | |
| code: p.IO_ERROR, | |
| message: "IO Error.", | |
| details: y, | |
| file: A.getFile(t[s]) | |
| }); | |
| }); | |
| f.bind("Silverlight:UploadFileProgress", function (A, r, z, s) { | |
| var y = A.getFile(t[r]); | |
| if (y.status != p.FAILED) { | |
| y.size = s; | |
| y.loaded = z; | |
| A.trigger("UploadProgress", y); | |
| } | |
| }); | |
| f.bind("Refresh", function (y) { | |
| var x, s, r; | |
| x = j.getElementById(y.settings.browse_button); | |
| if (x) { | |
| s = p.getPos(x, j.getElementById(y.settings.container)); | |
| r = p.getSize(x); | |
| p.extend(j.getElementById(y.id + "_silverlight_container").style, { | |
| top: s.y + "px", | |
| left: s.x + "px", | |
| width: r.w + "px", | |
| height: r.h + "px" | |
| }); | |
| } | |
| }); | |
| f.bind("Silverlight:UploadChunkSuccessful", function (C, s, B, D, E) { | |
| var r, A = C.getFile(t[s]); | |
| r = { | |
| chunk: B, | |
| chunks: D, | |
| response: E | |
| }; | |
| C.trigger("ChunkUploaded", A, r); | |
| if (A.status != p.FAILED) { | |
| d().UploadNextChunk(); | |
| } | |
| if (B == D - 1) { | |
| A.status = p.DONE; | |
| C.trigger("FileUploaded", A, { | |
| response: E | |
| }); | |
| } | |
| }); | |
| f.bind("Silverlight:UploadSuccessful", function (y, r, x) { | |
| var s = y.getFile(t[r]); | |
| s.status = p.DONE; | |
| y.trigger("FileUploaded", s, { | |
| response: x | |
| }); | |
| }); | |
| f.bind("FilesRemoved", function (w, r) { | |
| var s; | |
| for (s = 0; s < r.length; s++) { | |
| d().RemoveFile(t[r[s].id]); | |
| } | |
| }); | |
| f.bind("UploadFile", function (y, s) { | |
| var r = y.settings, | |
| x = r.resize || {}; | |
| d().UploadFile(t[s.id], y.settings.url, q({ | |
| name: s.target_name || s.name, | |
| mime: p.mimeTypes[s.name.replace(/^.+\.([^.]+)/, "$1").toLowerCase()] || "application/octet-stream", | |
| chunk_size: r.chunk_size, | |
| image_width: x.width, | |
| image_height: x.height, | |
| image_quality: x.quality || 90, | |
| multipart: !! r.multipart, | |
| multipart_params: r.multipart_params || {}, | |
| file_data_name: r.file_data_name, | |
| headers: r.headers | |
| })); | |
| }); | |
| f.bind("Silverlight:MouseEnter", function (w) { | |
| var s, r; | |
| s = j.getElementById(f.settings.browse_button); | |
| r = w.settings.browse_button_hover; | |
| if (s && r) { | |
| p.addClass(s, r); | |
| } | |
| }); | |
| f.bind("Silverlight:MouseLeave", function (w) { | |
| var s, r; | |
| s = j.getElementById(f.settings.browse_button); | |
| r = w.settings.browse_button_hover; | |
| if (s && r) { | |
| p.removeClass(s, r); | |
| } | |
| }); | |
| f.bind("Silverlight:MouseLeftButtonDown", function (w) { | |
| var s, r; | |
| s = j.getElementById(f.settings.browse_button); | |
| r = w.settings.browse_button_active; | |
| if (s && r) { | |
| p.addClass(s, r); | |
| p.addEvent(j.body, "mouseup", function () { | |
| p.removeClass(s, r); | |
| }); | |
| } | |
| }); | |
| f.bind("Sliverlight:StartSelectFiles", function (w) { | |
| var s, r; | |
| s = j.getElementById(f.settings.browse_button); | |
| r = w.settings.browse_button_active; | |
| if (s && r) { | |
| p.removeClass(s, r); | |
| } | |
| }); | |
| f.bind("Destroy", function (s) { | |
| var r; | |
| p.removeAllEvents(j.body, s.id); | |
| delete l[s.id]; | |
| delete k[s.id]; | |
| r = j.getElementById(s.id + "_silverlight_container"); | |
| if (r) { | |
| c.removeChild(r); | |
| } | |
| }); | |
| e({ | |
| success: true | |
| }); | |
| }); | |
| } | |
| }); | |
| })(window, document, plupload); | |
| (function (l, h, n, m) { | |
| var j = {}, | |
| k = {}; | |
| function o() { | |
| var c; | |
| try { | |
| c = navigator.plugins["Shockwave Flash"]; | |
| c = c.description; | |
| } catch (a) { | |
| try { | |
| c = new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version"); | |
| } catch (b) { | |
| c = "0.0"; | |
| } | |
| } | |
| c = c.match(/\d+/g); | |
| return parseFloat(c[0] + "." + c[1]); | |
| } | |
| n.flash = { | |
| trigger: function (a, c, b) { | |
| setTimeout(function () { | |
| var f = j[a], | |
| d, e; | |
| if (f) { | |
| f.trigger("Flash:" + c, b); | |
| } | |
| }, 0); | |
| } | |
| }; | |
| n.runtimes.Flash = n.addRuntime("flash", { | |
| getFeatures: function () { | |
| return { | |
| jpgresize: true, | |
| pngresize: true, | |
| maxWidth: 8091, | |
| maxHeight: 8091, | |
| chunks: true, | |
| progress: true, | |
| multipart: true | |
| }; | |
| }, | |
| init: function (g, b) { | |
| var c, r, f, a = 0, | |
| s = h.body; | |
| if (o() < 10) { | |
| b({ | |
| success: false | |
| }); | |
| return; | |
| } | |
| k[g.id] = false; | |
| j[g.id] = g; | |
| c = h.getElementById(g.settings.browse_button); | |
| r = h.createElement("div"); | |
| r.id = g.id + "_flash_container"; | |
| n.extend(r.style, { | |
| position: "absolute", | |
| top: "0px", | |
| background: g.settings.shim_bgcolor || "transparent", | |
| zIndex: 99999, | |
| width: "100%", | |
| height: "100%" | |
| }); | |
| r.className = "plupload flash"; | |
| if (g.settings.container) { | |
| s = h.getElementById(g.settings.container); | |
| if (n.getStyle(s, "position") === "static") { | |
| s.style.position = "relative"; | |
| } | |
| } | |
| s.appendChild(r); | |
| f = "id=" + escape(g.id); | |
| r.innerHTML = '<object id="' + g.id + '_flash" width="100%" height="100%" style="outline:0" type="application/x-shockwave-flash" data="' + g.settings.flash_swf_url + '"><param name="movie" value="' + g.settings.flash_swf_url + '" /><param name="flashvars" value="' + f + '" /><param name="wmode" value="transparent" /><param name="allowscriptaccess" value="always" /></object>'; | |
| function d() { | |
| return h.getElementById(g.id + "_flash"); | |
| } | |
| function e() { | |
| if (a++ > 5000) { | |
| b({ | |
| success: false | |
| }); | |
| return; | |
| } | |
| if (!k[g.id]) { | |
| setTimeout(e, 1); | |
| } | |
| } | |
| e(); | |
| c = r = null; | |
| g.bind("Flash:Init", function () { | |
| var p = {}, | |
| q; | |
| d().setFileFilters(g.settings.filters, g.settings.multi_selection); | |
| if (k[g.id]) { | |
| return; | |
| } | |
| k[g.id] = true; | |
| g.bind("UploadFile", function (A, y) { | |
| var x = A.settings, | |
| z = g.settings.resize || {}; | |
| d().uploadFile(p[y.id], x.url, { | |
| name: y.target_name || y.name, | |
| mime: n.mimeTypes[y.name.replace(/^.+\.([^.]+)/, "$1").toLowerCase()] || "application/octet-stream", | |
| chunk_size: x.chunk_size, | |
| width: z.width, | |
| height: z.height, | |
| quality: z.quality, | |
| multipart: x.multipart, | |
| multipart_params: x.multipart_params || {}, | |
| file_data_name: x.file_data_name, | |
| format: /\.(jpg|jpeg)$/i.test(y.name) ? "jpg" : "png", | |
| headers: x.headers, | |
| urlstream_upload: x.urlstream_upload | |
| }); | |
| }); | |
| g.bind("Flash:UploadProcess", function (x, y) { | |
| var w = x.getFile(p[y.id]); | |
| if (w.status != n.FAILED) { | |
| w.loaded = y.loaded; | |
| w.size = y.size; | |
| x.trigger("UploadProgress", w); | |
| } | |
| }); | |
| g.bind("Flash:UploadChunkComplete", function (A, y) { | |
| var x, z = A.getFile(p[y.id]); | |
| x = { | |
| chunk: y.chunk, | |
| chunks: y.chunks, | |
| response: y.text | |
| }; | |
| A.trigger("ChunkUploaded", z, x); | |
| if (z.status != n.FAILED) { | |
| d().uploadNextChunk(); | |
| } | |
| if (y.chunk == y.chunks - 1) { | |
| z.status = n.DONE; | |
| A.trigger("FileUploaded", z, { | |
| response: y.text | |
| }); | |
| } | |
| }); | |
| g.bind("Flash:SelectFiles", function (D, A) { | |
| var B, C, z = [], | |
| E; | |
| for (C = 0; C < A.length; C++) { | |
| B = A[C]; | |
| E = n.guid(); | |
| p[E] = B.id; | |
| p[B.id] = E; | |
| z.push(new n.File(E, B.name, B.size)); | |
| } | |
| if (z.length) { | |
| g.trigger("FilesAdded", z); | |
| } | |
| }); | |
| g.bind("Flash:SecurityError", function (w, v) { | |
| g.trigger("Error", { | |
| code: n.SECURITY_ERROR, | |
| message: n.translate("Security error."), | |
| details: v.message, | |
| file: g.getFile(p[v.id]) | |
| }); | |
| }); | |
| g.bind("Flash:GenericError", function (w, v) { | |
| g.trigger("Error", { | |
| code: n.GENERIC_ERROR, | |
| message: n.translate("Generic error."), | |
| details: v.message, | |
| file: g.getFile(p[v.id]) | |
| }); | |
| }); | |
| g.bind("Flash:IOError", function (w, v) { | |
| g.trigger("Error", { | |
| code: n.IO_ERROR, | |
| message: n.translate("IO error."), | |
| details: v.message, | |
| file: g.getFile(p[v.id]) | |
| }); | |
| }); | |
| g.bind("Flash:ImageError", function (w, v) { | |
| g.trigger("Error", { | |
| code: parseInt(v.code, 10), | |
| message: n.translate("Image error."), | |
| file: g.getFile(p[v.id]) | |
| }); | |
| }); | |
| g.bind("Flash:StageEvent:rollOver", function (y) { | |
| var x, w; | |
| x = h.getElementById(g.settings.browse_button); | |
| w = y.settings.browse_button_hover; | |
| if (x && w) { | |
| n.addClass(x, w); | |
| } | |
| }); | |
| g.bind("Flash:StageEvent:rollOut", function (y) { | |
| var x, w; | |
| x = h.getElementById(g.settings.browse_button); | |
| w = y.settings.browse_button_hover; | |
| if (x && w) { | |
| n.removeClass(x, w); | |
| } | |
| }); | |
| g.bind("Flash:StageEvent:mouseDown", function (y) { | |
| var x, w; | |
| x = h.getElementById(g.settings.browse_button); | |
| w = y.settings.browse_button_active; | |
| if (x && w) { | |
| n.addClass(x, w); | |
| n.addEvent(h.body, "mouseup", function () { | |
| n.removeClass(x, w); | |
| }, y.id); | |
| } | |
| }); | |
| g.bind("Flash:StageEvent:mouseUp", function (y) { | |
| var x, w; | |
| x = h.getElementById(g.settings.browse_button); | |
| w = y.settings.browse_button_active; | |
| if (x && w) { | |
| n.removeClass(x, w); | |
| } | |
| }); | |
| g.bind("Flash:ExifData", function (w, v) { | |
| g.trigger("ExifData", g.getFile(p[v.id]), v.data); | |
| }); | |
| g.bind("Flash:GpsData", function (w, v) { | |
| g.trigger("GpsData", g.getFile(p[v.id]), v.data); | |
| }); | |
| g.bind("QueueChanged", function (u) { | |
| g.refresh(); | |
| }); | |
| g.bind("FilesRemoved", function (y, w) { | |
| var x; | |
| for (x = 0; x < w.length; x++) { | |
| d().removeFile(p[w[x].id]); | |
| } | |
| }); | |
| g.bind("StateChanged", function (u) { | |
| g.refresh(); | |
| }); | |
| g.bind("Refresh", function (A) { | |
| var z, y, x; | |
| d().setFileFilters(g.settings.filters, g.settings.multi_selection); | |
| z = h.getElementById(A.settings.browse_button); | |
| if (z) { | |
| y = n.getPos(z, h.getElementById(A.settings.container)); | |
| x = n.getSize(z); | |
| n.extend(h.getElementById(A.id + "_flash_container").style, { | |
| top: y.y + "px", | |
| left: y.x + "px", | |
| width: x.w + "px", | |
| height: x.h + "px" | |
| }); | |
| } | |
| }); | |
| g.bind("Destroy", function (w) { | |
| var v; | |
| n.removeAllEvents(h.body, w.id); | |
| delete k[w.id]; | |
| delete j[w.id]; | |
| v = h.getElementById(w.id + "_flash_container"); | |
| if (v) { | |
| s.removeChild(v); | |
| } | |
| }); | |
| b({ | |
| success: true | |
| }); | |
| }); | |
| } | |
| }); | |
| })(window, document, plupload); | |
| (function (b) { | |
| b.runtimes.BrowserPlus = b.addRuntime("browserplus", { | |
| getFeatures: function () { | |
| return { | |
| dragdrop: true, | |
| jpgresize: true, | |
| pngresize: true, | |
| chunks: true, | |
| progress: true, | |
| multipart: true | |
| }; | |
| }, | |
| init: function (m, k) { | |
| var o = window.BrowserPlus, | |
| l = {}, | |
| p = m.settings, | |
| q = p.resize; | |
| function n(g) { | |
| var h, c, e = [], | |
| d, f; | |
| for (c = 0; c < g.length; c++) { | |
| d = g[c]; | |
| f = b.guid(); | |
| l[f] = d; | |
| e.push(new b.File(f, d.name, d.size)); | |
| } | |
| if (c) { | |
| m.trigger("FilesAdded", e); | |
| } | |
| } | |
| function a() { | |
| m.bind("PostInit", function () { | |
| var j, d = p.drop_element, | |
| g = m.id + "_droptarget", | |
| e = document.getElementById(d), | |
| c; | |
| function f(t, u) { | |
| o.DragAndDrop.AddDropTarget({ | |
| id: t | |
| }, function (r) { | |
| o.DragAndDrop.AttachCallbacks({ | |
| id: t, | |
| hover: function (s) { | |
| if (!s && u) { | |
| u(); | |
| } | |
| }, | |
| drop: function (s) { | |
| if (u) { | |
| u(); | |
| } | |
| n(s); | |
| } | |
| }, function () {}); | |
| }); | |
| } | |
| function h() { | |
| document.getElementById(g).style.top = "-1000px"; | |
| } | |
| if (e) { | |
| if (document.attachEvent && (/MSIE/gi).test(navigator.userAgent)) { | |
| j = document.createElement("div"); | |
| j.setAttribute("id", g); | |
| b.extend(j.style, { | |
| position: "absolute", | |
| top: "-1000px", | |
| background: "red", | |
| filter: "alpha(opacity=0)", | |
| opacity: 0 | |
| }); | |
| document.body.appendChild(j); | |
| b.addEvent(e, "dragenter", function (v) { | |
| var w, u; | |
| w = document.getElementById(d); | |
| u = b.getPos(w); | |
| b.extend(document.getElementById(g).style, { | |
| top: u.y + "px", | |
| left: u.x + "px", | |
| width: w.offsetWidth + "px", | |
| height: w.offsetHeight + "px" | |
| }); | |
| }); | |
| f(g, h); | |
| } else { | |
| f(d); | |
| } | |
| } | |
| b.addEvent(document.getElementById(p.browse_button), "click", function (x) { | |
| var z = [], | |
| B, C, y = p.filters, | |
| A; | |
| x.preventDefault(); | |
| no_type_restriction: for (B = 0; B < y.length; B++) { | |
| A = y[B].extensions.split(","); | |
| for (C = 0; C < A.length; C++) { | |
| if (A[C] === "*") { | |
| z = []; | |
| break no_type_restriction; | |
| } | |
| z.push(b.mimeTypes[A[C]]); | |
| } | |
| } | |
| o.FileBrowse.OpenBrowseDialog({ | |
| mimeTypes: z | |
| }, function (r) { | |
| if (r.success) { | |
| n(r.value); | |
| } | |
| }); | |
| }); | |
| e = j = null; | |
| }); | |
| m.bind("UploadFile", function (g, t) { | |
| var h = l[t.id], | |
| u = {}, | |
| j = g.settings.chunk_size, | |
| f, e = []; | |
| function c(w, r) { | |
| var s; | |
| if (t.status == b.FAILED) { | |
| return; | |
| } | |
| u.name = t.target_name || t.name; | |
| if (j) { | |
| u.chunk = "" + w; | |
| u.chunks = "" + r; | |
| } | |
| s = e.shift(); | |
| o.Uploader.upload({ | |
| url: g.settings.url, | |
| files: { | |
| file: s | |
| }, | |
| cookies: document.cookies, | |
| postvars: b.extend(u, g.settings.multipart_params), | |
| progressCallback: function (A) { | |
| var v, z = 0; | |
| f[w] = parseInt(A.filePercent * s.size / 100, 10); | |
| for (v = 0; v < f.length; v++) { | |
| z += f[v]; | |
| } | |
| t.loaded = z; | |
| g.trigger("UploadProgress", t); | |
| } | |
| }, function (v) { | |
| var z, A; | |
| if (v.success) { | |
| z = v.value.statusCode; | |
| if (j) { | |
| g.trigger("ChunkUploaded", t, { | |
| chunk: w, | |
| chunks: r, | |
| response: v.value.body, | |
| status: z | |
| }); | |
| } | |
| if (e.length > 0) { | |
| c(++w, r); | |
| } else { | |
| t.status = b.DONE; | |
| g.trigger("FileUploaded", t, { | |
| response: v.value.body, | |
| status: z | |
| }); | |
| if (z >= 400) { | |
| g.trigger("Error", { | |
| code: b.HTTP_ERROR, | |
| message: b.translate("HTTP Error."), | |
| file: t, | |
| status: z | |
| }); | |
| } | |
| } | |
| } else { | |
| g.trigger("Error", { | |
| code: b.GENERIC_ERROR, | |
| message: b.translate("Generic Error."), | |
| file: t, | |
| details: v.error | |
| }); | |
| } | |
| }); | |
| } | |
| function d(r) { | |
| t.size = r.size; | |
| if (j) { | |
| o.FileAccess.chunk({ | |
| file: r, | |
| chunkSize: j | |
| }, function (y) { | |
| if (y.success) { | |
| var s = y.value, | |
| A = s.length; | |
| f = Array(A); | |
| for (var z = 0; z < A; z++) { | |
| f[z] = 0; | |
| e.push(s[z]); | |
| } | |
| c(0, A); | |
| } | |
| }); | |
| } else { | |
| f = Array(1); | |
| e.push(r); | |
| c(0, 1); | |
| } | |
| } | |
| if (q && /\.(png|jpg|jpeg)$/i.test(t.name)) { | |
| BrowserPlus.ImageAlter.transform({ | |
| file: h, | |
| quality: q.quality || 90, | |
| actions: [{ | |
| scale: { | |
| maxwidth: q.width, | |
| maxheight: q.height | |
| } | |
| }] | |
| }, function (r) { | |
| if (r.success) { | |
| d(r.value.file); | |
| } | |
| }); | |
| } else { | |
| d(h); | |
| } | |
| }); | |
| k({ | |
| success: true | |
| }); | |
| } | |
| if (o) { | |
| o.init(function (c) { | |
| var d = [{ | |
| service: "Uploader", | |
| version: "3" | |
| }, { | |
| service: "DragAndDrop", | |
| version: "1" | |
| }, { | |
| service: "FileBrowse", | |
| version: "1" | |
| }, { | |
| service: "FileAccess", | |
| version: "2" | |
| }]; | |
| if (q) { | |
| d.push({ | |
| service: "ImageAlter", | |
| version: "4" | |
| }); | |
| } | |
| if (c.success) { | |
| o.require({ | |
| services: d | |
| }, function (e) { | |
| if (e.success) { | |
| a(); | |
| } else { | |
| k(); | |
| } | |
| }); | |
| } else { | |
| k(); | |
| } | |
| }); | |
| } else { | |
| k(); | |
| } | |
| } | |
| }); | |
| })(plupload); | |
| (function (r, p, q, u) { | |
| var w = {}, | |
| s; | |
| function n(b, a) { | |
| var c; | |
| if ("FileReader" in r) { | |
| c = new FileReader(); | |
| c.readAsDataURL(b); | |
| c.onload = function () { | |
| a(c.result); | |
| }; | |
| } else { | |
| return a(b.getAsDataURL()); | |
| } | |
| } | |
| function o(b, a) { | |
| var c; | |
| if ("FileReader" in r) { | |
| c = new FileReader(); | |
| c.readAsBinaryString(b); | |
| c.onload = function () { | |
| a(c.result); | |
| }; | |
| } else { | |
| return a(b.getAsBinary()); | |
| } | |
| } | |
| function v(a, c, e, f) { | |
| var b, d, g, j, h = this; | |
| n(w[a.id], function (k) { | |
| b = p.createElement("canvas"); | |
| b.style.display = "none"; | |
| p.body.appendChild(b); | |
| d = b.getContext("2d"); | |
| g = new Image(); | |
| g.onerror = g.onabort = function () { | |
| f({ | |
| success: false | |
| }); | |
| }; | |
| g.onload = function () { | |
| var G, m, E, F, l; | |
| if (!c.width) { | |
| c.width = g.width; | |
| } | |
| if (!c.height) { | |
| c.height = g.height; | |
| } | |
| j = Math.min(c.width / g.width, c.height / g.height); | |
| if (j < 1 || (j === 1 && e === "image/jpeg")) { | |
| G = Math.round(g.width * j); | |
| m = Math.round(g.height * j); | |
| b.width = G; | |
| b.height = m; | |
| d.drawImage(g, 0, 0, G, m); | |
| if (e === "image/jpeg") { | |
| F = new t(atob(k.substring(k.indexOf("base64,") + 7))); | |
| if (F.headers && F.headers.length) { | |
| l = new y(); | |
| if (l.init(F.get("exif")[0])) { | |
| l.setExif("PixelXDimension", G); | |
| l.setExif("PixelYDimension", m); | |
| F.set("exif", l.getBinary()); | |
| if (h.hasEventListener("ExifData")) { | |
| h.trigger("ExifData", a, l.EXIF()); | |
| } | |
| if (h.hasEventListener("GpsData")) { | |
| h.trigger("GpsData", a, l.GPS()); | |
| } | |
| } | |
| } | |
| if (c.quality) { | |
| try { | |
| k = b.toDataURL(e, c.quality / 100); | |
| } catch (D) { | |
| k = b.toDataURL(e); | |
| } | |
| } | |
| } else { | |
| k = b.toDataURL(e); | |
| } | |
| k = k.substring(k.indexOf("base64,") + 7); | |
| k = atob(k); | |
| if (F && F.headers && F.headers.length) { | |
| k = F.restore(k); | |
| F.purge(); | |
| } | |
| b.parentNode.removeChild(b); | |
| f({ | |
| success: true, | |
| data: k | |
| }); | |
| } else { | |
| f({ | |
| success: false | |
| }); | |
| } | |
| }; | |
| g.src = k; | |
| }); | |
| } | |
| q.runtimes.Html5 = q.addRuntime("html5", { | |
| getFeatures: function () { | |
| var a, f, b, c, e, g, d = r; | |
| f = b = e = g = false; | |
| if (d.XMLHttpRequest) { | |
| a = new XMLHttpRequest(); | |
| b = !! a.upload; | |
| f = !! (a.sendAsBinary || a.upload); | |
| } | |
| if (f) { | |
| c = !! (a.sendAsBinary || (r.Uint8Array && r.ArrayBuffer)); | |
| e = !! (File && (File.prototype.getAsDataURL || d.FileReader) && c); | |
| g = !! (File && (File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice)); | |
| } | |
| s = navigator.userAgent.indexOf("Safari") > 0 && navigator.vendor.indexOf("Apple") !== -1; | |
| return { | |
| html5: f, | |
| dragdrop: d.mozInnerScreenX !== u || g || s, | |
| jpgresize: e, | |
| pngresize: e, | |
| multipart: e || !! d.FileReader || !! d.FormData, | |
| canSendBinary: c, | |
| cantSendBlobInFormData: !! (a && a.sendAsBinary && r.FormData && r.FileReader && !FileReader.prototype.readAsArrayBuffer), | |
| progress: b, | |
| chunks: g, | |
| triggerDialog: navigator.userAgent.indexOf("WebKit") !== -1 | |
| }; | |
| }, | |
| init: function (b, a) { | |
| var d; | |
| function c(f) { | |
| var h, j, g = [], | |
| e, k = {}; | |
| for (j = 0; j < f.length; j++) { | |
| h = f[j]; | |
| if (k[h.name]) { | |
| continue; | |
| } | |
| k[h.name] = true; | |
| e = q.guid(); | |
| w[e] = h; | |
| g.push(new q.File(e, h.fileName || h.name, h.fileSize || h.size)); | |
| } | |
| if (g.length) { | |
| b.trigger("FilesAdded", g); | |
| } | |
| } | |
| d = this.getFeatures(); | |
| if (!d.html5) { | |
| a({ | |
| success: false | |
| }); | |
| return; | |
| } | |
| b.bind("Init", function (G) { | |
| var I, K, h = [], | |
| H, g, L = G.settings.filters, | |
| J, j, f = p.body, | |
| e; | |
| I = p.createElement("div"); | |
| I.id = G.id + "_html5_container"; | |
| q.extend(I.style, { | |
| position: "absolute", | |
| background: b.settings.shim_bgcolor || "transparent", | |
| width: "100px", | |
| height: "100px", | |
| overflow: "hidden", | |
| zIndex: 99999, | |
| opacity: b.settings.shim_bgcolor ? "" : 0 | |
| }); | |
| I.className = "plupload html5"; | |
| if (b.settings.container) { | |
| f = p.getElementById(b.settings.container); | |
| if (q.getStyle(f, "position") === "static") { | |
| f.style.position = "relative"; | |
| } | |
| } | |
| f.appendChild(I); | |
| no_type_restriction: for (H = 0; H < L.length; H++) { | |
| J = L[H].extensions.split(/,/); | |
| for (g = 0; g < J.length; g++) { | |
| if (J[g] === "*") { | |
| h = []; | |
| break no_type_restriction; | |
| } | |
| j = q.mimeTypes[J[g]]; | |
| if (j) { | |
| h.push(j); | |
| } | |
| } | |
| } | |
| I.innerHTML = '<input id="' + b.id + '_html5" style="width:100%;height:100%;font-size:99px" type="file" accept="' + h.join(",") + '" ' + (b.settings.multi_selection ? 'multiple="multiple"' : "") + " />"; | |
| e = p.getElementById(b.id + "_html5"); | |
| e.onchange = function () { | |
| c(this.files); | |
| this.value = ""; | |
| }; | |
| K = p.getElementById(G.settings.browse_button); | |
| if (K) { | |
| var l = G.settings.browse_button_hover, | |
| k = G.settings.browse_button_active, | |
| m = G.features.triggerDialog ? K : I; | |
| if (l) { | |
| q.addEvent(m, "mouseover", function () { | |
| q.addClass(K, l); | |
| }, G.id); | |
| q.addEvent(m, "mouseout", function () { | |
| q.removeClass(K, l); | |
| }, G.id); | |
| } | |
| if (k) { | |
| q.addEvent(m, "mousedown", function () { | |
| q.addClass(K, k); | |
| }, G.id); | |
| q.addEvent(p.body, "mouseup", function () { | |
| q.removeClass(K, k); | |
| }, G.id); | |
| } | |
| if (G.features.triggerDialog) { | |
| q.addEvent(K, "click", function (z) { | |
| p.getElementById(G.id + "_html5").click(); | |
| z.preventDefault(); | |
| }, G.id); | |
| } | |
| } | |
| }); | |
| b.bind("PostInit", function () { | |
| var e = p.getElementById(b.settings.drop_element); | |
| if (e) { | |
| if (s) { | |
| q.addEvent(e, "dragenter", function (f) { | |
| var g, j, h; | |
| g = p.getElementById(b.id + "_drop"); | |
| if (!g) { | |
| g = p.createElement("input"); | |
| g.setAttribute("type", "file"); | |
| g.setAttribute("id", b.id + "_drop"); | |
| g.setAttribute("multiple", "multiple"); | |
| q.addEvent(g, "change", function () { | |
| c(this.files); | |
| q.removeEvent(g, "change", b.id); | |
| g.parentNode.removeChild(g); | |
| }, b.id); | |
| e.appendChild(g); | |
| } | |
| j = q.getPos(e, p.getElementById(b.settings.container)); | |
| h = q.getSize(e); | |
| if (q.getStyle(e, "position") === "static") { | |
| q.extend(e.style, { | |
| position: "relative" | |
| }); | |
| } | |
| q.extend(g.style, { | |
| position: "absolute", | |
| display: "block", | |
| top: 0, | |
| left: 0, | |
| width: h.w + "px", | |
| height: h.h + "px", | |
| opacity: 0 | |
| }); | |
| }, b.id); | |
| return; | |
| } | |
| q.addEvent(e, "dragover", function (f) { | |
| f.preventDefault(); | |
| }, b.id); | |
| q.addEvent(e, "drop", function (f) { | |
| var g = f.dataTransfer; | |
| if (g && g.files) { | |
| c(g.files); | |
| } | |
| f.preventDefault(); | |
| }, b.id); | |
| } | |
| }); | |
| b.bind("Refresh", function (k) { | |
| var j, g, f, e, h; | |
| j = p.getElementById(b.settings.browse_button); | |
| if (j) { | |
| g = q.getPos(j, p.getElementById(k.settings.container)); | |
| f = q.getSize(j); | |
| e = p.getElementById(b.id + "_html5_container"); | |
| q.extend(e.style, { | |
| top: g.y + "px", | |
| left: g.x + "px", | |
| width: f.w + "px", | |
| height: f.h + "px" | |
| }); | |
| if (b.features.triggerDialog) { | |
| h = parseInt(j.parentNode.style.zIndex, 10); | |
| if (isNaN(h)) { | |
| h = 0; | |
| } | |
| q.extend(j.style, { | |
| zIndex: h | |
| }); | |
| if (q.getStyle(j, "position") === "static") { | |
| q.extend(j.style, { | |
| position: "relative" | |
| }); | |
| } | |
| q.extend(e.style, { | |
| zIndex: h - 1 | |
| }); | |
| } | |
| } | |
| }); | |
| b.bind("UploadFile", function (l, j) { | |
| var h = l.settings, | |
| e, k; | |
| function f(E, D, G) { | |
| var m; | |
| if (File.prototype.slice) { | |
| try { | |
| E.slice(); | |
| return E.slice(D, G); | |
| } catch (F) { | |
| return E.slice(D, G - D); | |
| } | |
| } else { | |
| if (m = File.prototype.webkitSlice || File.prototype.mozSlice) { | |
| return m.call(E, D, G); | |
| } else { | |
| return null; | |
| } | |
| } | |
| } | |
| function g(K) { | |
| var I = 0, | |
| J = 0, | |
| M = ("FileReader" in r ? new FileReader : null), | |
| G = new XMLHttpRequest, | |
| L = G.upload, | |
| H = typeof (K) === "string"; | |
| function m() { | |
| var D, z, B, A, E, C, P, Q = l.settings.url; | |
| function F(N) { | |
| var Y = 0, | |
| ae = "----pluploadboundary" + q.guid(), | |
| ad, ac = "--", | |
| O = "\r\n", | |
| aa = ""; | |
| if (L) { | |
| L.onprogress = function (R) { | |
| j.loaded = Math.min(j.size, J + R.loaded - Y); | |
| l.trigger("UploadProgress", j); | |
| }; | |
| } | |
| G.onreadystatechange = function () { | |
| var T, S; | |
| if (G.readyState == 4) { | |
| try { | |
| T = G.status; | |
| } catch (R) { | |
| T = 0; | |
| } | |
| if (T >= 400) { | |
| l.trigger("Error", { | |
| code: q.HTTP_ERROR, | |
| message: q.translate("HTTP Error."), | |
| file: j, | |
| status: T | |
| }); | |
| } else { | |
| if (B) { | |
| S = { | |
| chunk: I, | |
| chunks: B, | |
| response: G.responseText, | |
| status: T | |
| }; | |
| l.trigger("ChunkUploaded", j, S); | |
| J += C; | |
| if (S.cancelled) { | |
| j.status = q.FAILED; | |
| return; | |
| } | |
| j.loaded = Math.min(j.size, (I + 1) * E); | |
| } else { | |
| j.loaded = j.size; | |
| } | |
| l.trigger("UploadProgress", j); | |
| N = D = ad = aa = null; | |
| if (!B || ++I >= B) { | |
| j.status = q.DONE; | |
| l.trigger("FileUploaded", j, { | |
| response: G.responseText, | |
| status: T | |
| }); | |
| } else { | |
| m(); | |
| } | |
| } | |
| G = null; | |
| } | |
| }; | |
| if (l.settings.multipart && d.multipart) { | |
| A.name = j.target_name || j.name; | |
| G.open("post", Q, true); | |
| q.each(l.settings.headers, function (R, S) { | |
| G.setRequestHeader(S, R); | |
| }); | |
| if (!H && !! r.FormData) { | |
| ad = new FormData(); | |
| q.each(q.extend(A, l.settings.multipart_params), function (R, S) { | |
| ad.append(S, R); | |
| }); | |
| ad.append(l.settings.file_data_name, N); | |
| G.send(ad); | |
| return; | |
| } | |
| if (H) { | |
| G.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + ae); | |
| q.each(q.extend(A, l.settings.multipart_params), function (R, S) { | |
| aa += ac + ae + O + 'Content-Disposition: form-data; name="' + S + '"' + O + O; | |
| aa += unescape(encodeURIComponent(R)) + O; | |
| }); | |
| P = q.mimeTypes[j.name.replace(/^.+\.([^.]+)/, "$1").toLowerCase()] || "application/octet-stream"; | |
| aa += ac + ae + O + 'Content-Disposition: form-data; name="' + l.settings.file_data_name + '"; filename="' + unescape(encodeURIComponent(j.name)) + '"' + O + "Content-Type: " + P + O + O + N + O + ac + ae + ac + O; | |
| Y = aa.length - N.length; | |
| N = aa; | |
| if (G.sendAsBinary) { | |
| G.sendAsBinary(N); | |
| } else { | |
| if (d.canSendBinary) { | |
| var Z = new Uint8Array(N.length); | |
| for (var ab = 0; ab < N.length; ab++) { | |
| Z[ab] = (N.charCodeAt(ab) & 255); | |
| } | |
| G.send(Z.buffer); | |
| } | |
| } | |
| return; | |
| } | |
| } | |
| Q = q.buildUrl(l.settings.url, q.extend(A, l.settings.multipart_params)); | |
| G.open("post", Q, true); | |
| G.setRequestHeader("Content-Type", "application/octet-stream"); | |
| q.each(l.settings.headers, function (R, S) { | |
| G.setRequestHeader(S, R); | |
| }); | |
| G.send(N); | |
| } | |
| if (j.status == q.DONE || j.status == q.FAILED || l.state == q.STOPPED) { | |
| return; | |
| } | |
| A = { | |
| name: j.target_name || j.name | |
| }; | |
| if (h.chunk_size && j.size > h.chunk_size && (d.chunks || typeof (K) == "string")) { | |
| E = h.chunk_size; | |
| B = Math.ceil(j.size / E); | |
| C = Math.min(E, j.size - (I * E)); | |
| if (typeof (K) == "string") { | |
| D = K.substring(I * E, I * E + C); | |
| } else { | |
| D = f(K, I * E, I * E + C); | |
| } | |
| A.chunk = I; | |
| A.chunks = B; | |
| } else { | |
| C = j.size; | |
| D = K; | |
| } | |
| if (M && d.cantSendBlobInFormData && d.chunks && l.settings.chunk_size) { | |
| M.onload = function () { | |
| H = true; | |
| F(M.result); | |
| }; | |
| M.readAsBinaryString(D); | |
| } else { | |
| F(D); | |
| } | |
| } | |
| m(); | |
| } | |
| e = w[j.id]; | |
| if (d.jpgresize && l.settings.resize && /\.(png|jpg|jpeg)$/i.test(j.name)) { | |
| v.call(l, j, l.settings.resize, /\.png$/i.test(j.name) ? "image/png" : "image/jpeg", function (m) { | |
| if (m.success) { | |
| j.size = m.data.length; | |
| g(m.data); | |
| } else { | |
| g(e); | |
| } | |
| }); | |
| } else { | |
| if (!d.chunks && d.jpgresize) { | |
| o(e, g); | |
| } else { | |
| g(e); | |
| } | |
| } | |
| }); | |
| b.bind("Destroy", function (j) { | |
| var g, f, h = p.body, | |
| e = { | |
| inputContainer: j.id + "_html5_container", | |
| inputFile: j.id + "_html5", | |
| browseButton: j.settings.browse_button, | |
| dropElm: j.settings.drop_element | |
| }; | |
| for (g in e) { | |
| f = p.getElementById(e[g]); | |
| if (f) { | |
| q.removeAllEvents(f, j.id); | |
| } | |
| } | |
| q.removeAllEvents(p.body, j.id); | |
| if (j.settings.container) { | |
| h = p.getElementById(j.settings.container); | |
| } | |
| h.removeChild(p.getElementById(e.inputContainer)); | |
| }); | |
| a({ | |
| success: true | |
| }); | |
| } | |
| }); | |
| function x() { | |
| var b = false, | |
| d; | |
| function a(j, g) { | |
| var k = b ? 0 : -8 * (g - 1), | |
| f = 0, | |
| h; | |
| for (h = 0; h < g; h++) { | |
| f |= (d.charCodeAt(j + h) << Math.abs(k + h * 8)); | |
| } | |
| return f; | |
| } | |
| function e(f, h, g) { | |
| var g = arguments.length === 3 ? g : d.length - h - 1; | |
| d = d.substr(0, h) + f + d.substr(g + h); | |
| } | |
| function c(k, j, g) { | |
| var f = "", | |
| l = b ? 0 : -8 * (g - 1), | |
| h; | |
| for (h = 0; h < g; h++) { | |
| f += String.fromCharCode((j >> Math.abs(l + h * 8)) & 255); | |
| } | |
| e(f, k, g); | |
| } | |
| return { | |
| II: function (f) { | |
| if (f === u) { | |
| return b; | |
| } else { | |
| b = f; | |
| } | |
| }, | |
| init: function (f) { | |
| b = false; | |
| d = f; | |
| }, | |
| SEGMENT: function (h, f, g) { | |
| switch (arguments.length) { | |
| case 1: | |
| return d.substr(h, d.length - h - 1); | |
| case 2: | |
| return d.substr(h, f); | |
| case 3: | |
| e(g, h, f); | |
| break; | |
| default: | |
| return d; | |
| } | |
| }, | |
| BYTE: function (f) { | |
| return a(f, 1); | |
| }, | |
| SHORT: function (f) { | |
| return a(f, 2); | |
| }, | |
| LONG: function (g, f) { | |
| if (f === u) { | |
| return a(g, 4); | |
| } else { | |
| c(g, f, 4); | |
| } | |
| }, | |
| SLONG: function (g) { | |
| var f = a(g, 4); | |
| return (f > 2147483647 ? f - 4294967296 : f); | |
| }, | |
| STRING: function (h, g) { | |
| var f = ""; | |
| for (g += h; h < g; h++) { | |
| f += String.fromCharCode(a(h, 1)); | |
| } | |
| return f; | |
| } | |
| }; | |
| } | |
| function t(c) { | |
| var a = { | |
| 65505: { | |
| app: "EXIF", | |
| name: "APP1", | |
| signature: "Exif\0" | |
| }, | |
| 65506: { | |
| app: "ICC", | |
| name: "APP2", | |
| signature: "ICC_PROFILE\0" | |
| }, | |
| 65517: { | |
| app: "IPTC", | |
| name: "APP13", | |
| signature: "Photoshop 3.0\0" | |
| } | |
| }, | |
| b = [], | |
| d, h, f = u, | |
| e = 0, | |
| g; | |
| d = new x(); | |
| d.init(c); | |
| if (d.SHORT(0) !== 65496) { | |
| return; | |
| } | |
| h = 2; | |
| g = Math.min(1048576, c.length); | |
| while (h <= g) { | |
| f = d.SHORT(h); | |
| if (f >= 65488 && f <= 65495) { | |
| h += 2; | |
| continue; | |
| } | |
| if (f === 65498 || f === 65497) { | |
| break; | |
| } | |
| e = d.SHORT(h + 2) + 2; | |
| if (a[f] && d.STRING(h + 4, a[f].signature.length) === a[f].signature) { | |
| b.push({ | |
| hex: f, | |
| app: a[f].app.toUpperCase(), | |
| name: a[f].name.toUpperCase(), | |
| start: h, | |
| length: e, | |
| segment: d.SEGMENT(h, e) | |
| }); | |
| } | |
| h += e; | |
| } | |
| d.init(null); | |
| return { | |
| headers: b, | |
| restore: function (A) { | |
| d.init(A); | |
| var k = new t(A); | |
| if (!k.headers) { | |
| return false; | |
| } | |
| for (var j = k.headers.length; j > 0; j--) { | |
| var m = k.headers[j - 1]; | |
| d.SEGMENT(m.start, m.length, ""); | |
| } | |
| k.purge(); | |
| h = d.SHORT(2) == 65504 ? 4 + d.SHORT(4) : 2; | |
| for (var j = 0, l = b.length; j < l; j++) { | |
| d.SEGMENT(h, 0, b[j].segment); | |
| h += b[j].length; | |
| } | |
| return d.SEGMENT(); | |
| }, | |
| get: function (j) { | |
| var m = []; | |
| for (var k = 0, l = b.length; k < l; k++) { | |
| if (b[k].app === j.toUpperCase()) { | |
| m.push(b[k].segment); | |
| } | |
| } | |
| return m; | |
| }, | |
| set: function (A, j) { | |
| var m = []; | |
| if (typeof (j) === "string") { | |
| m.push(j); | |
| } else { | |
| m = j; | |
| } | |
| for (var k = ii = 0, l = b.length; k < l; k++) { | |
| if (b[k].app === A.toUpperCase()) { | |
| b[k].segment = m[ii]; | |
| b[k].length = m[ii].length; | |
| ii++; | |
| } | |
| if (ii >= m.length) { | |
| break; | |
| } | |
| } | |
| }, | |
| purge: function () { | |
| b = []; | |
| d.init(null); | |
| } | |
| }; | |
| } | |
| function y() { | |
| var d, g, f = {}, | |
| a; | |
| d = new x(); | |
| g = { | |
| tiff: { | |
| 274: "Orientation", | |
| 34665: "ExifIFDPointer", | |
| 34853: "GPSInfoIFDPointer" | |
| }, | |
| exif: { | |
| 36864: "ExifVersion", | |
| 40961: "ColorSpace", | |
| 40962: "PixelXDimension", | |
| 40963: "PixelYDimension", | |
| 36867: "DateTimeOriginal", | |
| 33434: "ExposureTime", | |
| 33437: "FNumber", | |
| 34855: "ISOSpeedRatings", | |
| 37377: "ShutterSpeedValue", | |
| 37378: "ApertureValue", | |
| 37383: "MeteringMode", | |
| 37384: "LightSource", | |
| 37385: "Flash", | |
| 41986: "ExposureMode", | |
| 41987: "WhiteBalance", | |
| 41990: "SceneCaptureType", | |
| 41988: "DigitalZoomRatio", | |
| 41992: "Contrast", | |
| 41993: "Saturation", | |
| 41994: "Sharpness" | |
| }, | |
| gps: { | |
| 0: "GPSVersionID", | |
| 1: "GPSLatitudeRef", | |
| 2: "GPSLatitude", | |
| 3: "GPSLongitudeRef", | |
| 4: "GPSLongitude" | |
| } | |
| }; | |
| a = { | |
| ColorSpace: { | |
| 1: "sRGB", | |
| 0: "Uncalibrated" | |
| }, | |
| MeteringMode: { | |
| 0: "Unknown", | |
| 1: "Average", | |
| 2: "CenterWeightedAverage", | |
| 3: "Spot", | |
| 4: "MultiSpot", | |
| 5: "Pattern", | |
| 6: "Partial", | |
| 255: "Other" | |
| }, | |
| LightSource: { | |
| 1: "Daylight", | |
| 2: "Fliorescent", | |
| 3: "Tungsten", | |
| 4: "Flash", | |
| 9: "Fine weather", | |
| 10: "Cloudy weather", | |
| 11: "Shade", | |
| 12: "Daylight fluorescent (D 5700 - 7100K)", | |
| 13: "Day white fluorescent (N 4600 -5400K)", | |
| 14: "Cool white fluorescent (W 3900 - 4500K)", | |
| 15: "White fluorescent (WW 3200 - 3700K)", | |
| 17: "Standard light A", | |
| 18: "Standard light B", | |
| 19: "Standard light C", | |
| 20: "D55", | |
| 21: "D65", | |
| 22: "D75", | |
| 23: "D50", | |
| 24: "ISO studio tungsten", | |
| 255: "Other" | |
| }, | |
| Flash: { | |
| 0: "Flash did not fire.", | |
| 1: "Flash fired.", | |
| 5: "Strobe return light not detected.", | |
| 7: "Strobe return light detected.", | |
| 9: "Flash fired, compulsory flash mode", | |
| 13: "Flash fired, compulsory flash mode, return light not detected", | |
| 15: "Flash fired, compulsory flash mode, return light detected", | |
| 16: "Flash did not fire, compulsory flash mode", | |
| 24: "Flash did not fire, auto mode", | |
| 25: "Flash fired, auto mode", | |
| 29: "Flash fired, auto mode, return light not detected", | |
| 31: "Flash fired, auto mode, return light detected", | |
| 32: "No flash function", | |
| 65: "Flash fired, red-eye reduction mode", | |
| 69: "Flash fired, red-eye reduction mode, return light not detected", | |
| 71: "Flash fired, red-eye reduction mode, return light detected", | |
| 73: "Flash fired, compulsory flash mode, red-eye reduction mode", | |
| 77: "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected", | |
| 79: "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected", | |
| 89: "Flash fired, auto mode, red-eye reduction mode", | |
| 93: "Flash fired, auto mode, return light not detected, red-eye reduction mode", | |
| 95: "Flash fired, auto mode, return light detected, red-eye reduction mode" | |
| }, | |
| ExposureMode: { | |
| 0: "Auto exposure", | |
| 1: "Manual exposure", | |
| 2: "Auto bracket" | |
| }, | |
| WhiteBalance: { | |
| 0: "Auto white balance", | |
| 1: "Manual white balance" | |
| }, | |
| SceneCaptureType: { | |
| 0: "Standard", | |
| 1: "Landscape", | |
| 2: "Portrait", | |
| 3: "Night scene" | |
| }, | |
| Contrast: { | |
| 0: "Normal", | |
| 1: "Soft", | |
| 2: "Hard" | |
| }, | |
| Saturation: { | |
| 0: "Normal", | |
| 1: "Low saturation", | |
| 2: "High saturation" | |
| }, | |
| Sharpness: { | |
| 0: "Normal", | |
| 1: "Soft", | |
| 2: "Hard" | |
| }, | |
| GPSLatitudeRef: { | |
| N: "North latitude", | |
| S: "South latitude" | |
| }, | |
| GPSLongitudeRef: { | |
| E: "East longitude", | |
| W: "West longitude" | |
| } | |
| }; | |
| function e(M, j) { | |
| var J = d.SHORT(M), | |
| m, N, L, k, l, K, I, h, O = [], | |
| H = {}; | |
| for (m = 0; m < J; m++) { | |
| I = K = M + 12 * m + 2; | |
| L = j[d.SHORT(I)]; | |
| if (L === u) { | |
| continue; | |
| } | |
| k = d.SHORT(I += 2); | |
| l = d.LONG(I += 2); | |
| I += 4; | |
| O = []; | |
| switch (k) { | |
| case 1: | |
| case 7: | |
| if (l > 4) { | |
| I = d.LONG(I) + f.tiffHeader; | |
| } | |
| for (N = 0; N < l; N++) { | |
| O[N] = d.BYTE(I + N); | |
| } | |
| break; | |
| case 2: | |
| if (l > 4) { | |
| I = d.LONG(I) + f.tiffHeader; | |
| } | |
| H[L] = d.STRING(I, l - 1); | |
| continue; | |
| case 3: | |
| if (l > 2) { | |
| I = d.LONG(I) + f.tiffHeader; | |
| } | |
| for (N = 0; N < l; N++) { | |
| O[N] = d.SHORT(I + N * 2); | |
| } | |
| break; | |
| case 4: | |
| if (l > 1) { | |
| I = d.LONG(I) + f.tiffHeader; | |
| } | |
| for (N = 0; N < l; N++) { | |
| O[N] = d.LONG(I + N * 4); | |
| } | |
| break; | |
| case 5: | |
| I = d.LONG(I) + f.tiffHeader; | |
| for (N = 0; N < l; N++) { | |
| O[N] = d.LONG(I + N * 4) / d.LONG(I + N * 4 + 4); | |
| } | |
| break; | |
| case 9: | |
| I = d.LONG(I) + f.tiffHeader; | |
| for (N = 0; N < l; N++) { | |
| O[N] = d.SLONG(I + N * 4); | |
| } | |
| break; | |
| case 10: | |
| I = d.LONG(I) + f.tiffHeader; | |
| for (N = 0; N < l; N++) { | |
| O[N] = d.SLONG(I + N * 4) / d.SLONG(I + N * 4 + 4); | |
| } | |
| break; | |
| default: | |
| continue; | |
| } | |
| h = (l == 1 ? O[0] : O); | |
| if (a.hasOwnProperty(L) && typeof h != "object") { | |
| H[L] = a[L][h]; | |
| } else { | |
| H[L] = h; | |
| } | |
| } | |
| return H; | |
| } | |
| function b() { | |
| var h = u, | |
| j = f.tiffHeader; | |
| d.II(d.SHORT(j) == 18761); | |
| if (d.SHORT(j += 2) !== 42) { | |
| return false; | |
| } | |
| f.IFD0 = f.tiffHeader + d.LONG(j += 2); | |
| h = e(f.IFD0, g.tiff); | |
| f.exifIFD = ("ExifIFDPointer" in h ? f.tiffHeader + h.ExifIFDPointer : u); | |
| f.gpsIFD = ("GPSInfoIFDPointer" in h ? f.tiffHeader + h.GPSInfoIFDPointer : u); | |
| return true; | |
| } | |
| function c(k, m, C) { | |
| var E, D, j, h = 0; | |
| if (typeof (m) === "string") { | |
| var l = g[k.toLowerCase()]; | |
| for (hex in l) { | |
| if (l[hex] === m) { | |
| m = hex; | |
| break; | |
| } | |
| } | |
| } | |
| E = f[k.toLowerCase() + "IFD"]; | |
| D = d.SHORT(E); | |
| for (i = 0; i < D; i++) { | |
| j = E + 12 * i + 2; | |
| if (d.SHORT(j) == m) { | |
| h = j + 8; | |
| break; | |
| } | |
| } | |
| if (!h) { | |
| return false; | |
| } | |
| d.LONG(h, C); | |
| return true; | |
| } | |
| return { | |
| init: function (h) { | |
| f = { | |
| tiffHeader: 10 | |
| }; | |
| if (h === u || !h.length) { | |
| return false; | |
| } | |
| d.init(h); | |
| if (d.SHORT(0) === 65505 && d.STRING(4, 5).toUpperCase() === "EXIF\0") { | |
| return b(); | |
| } | |
| return false; | |
| }, | |
| EXIF: function () { | |
| var h; | |
| h = e(f.exifIFD, g.exif); | |
| if (h.ExifVersion) { | |
| h.ExifVersion = String.fromCharCode(h.ExifVersion[0], h.ExifVersion[1], h.ExifVersion[2], h.ExifVersion[3]); | |
| } | |
| return h; | |
| }, | |
| GPS: function () { | |
| var h; | |
| h = e(f.gpsIFD, g.gps); | |
| if (h.GPSVersionID) { | |
| h.GPSVersionID = h.GPSVersionID.join("."); | |
| } | |
| return h; | |
| }, | |
| setExif: function (j, h) { | |
| if (j !== "PixelXDimension" && j !== "PixelYDimension") { | |
| return false; | |
| } | |
| return c("exif", j, h); | |
| }, | |
| getBinary: function () { | |
| return d.SEGMENT(); | |
| } | |
| }; | |
| } | |
| })(window, document, plupload); | |
| (function (j, g, f, k) { | |
| function h(a) { | |
| return g.getElementById(a); | |
| } | |
| f.runtimes.Html4 = f.addRuntime("html4", { | |
| getFeatures: function () { | |
| return { | |
| multipart: true, | |
| canOpenDialog: navigator.userAgent.indexOf("WebKit") !== -1 | |
| }; | |
| }, | |
| init: function (b, a) { | |
| b.bind("Init", function (e) { | |
| var E = g.body, | |
| A, F = "javascript", | |
| D, H, d, G = [], | |
| c = /MSIE/.test(navigator.userAgent), | |
| L = [], | |
| B = e.settings.filters, | |
| y, C, M, I; | |
| no_type_restriction: for (y = 0; y < B.length; y++) { | |
| C = B[y].extensions.split(/,/); | |
| for (I = 0; I < C.length; I++) { | |
| if (C[I] === "*") { | |
| L = []; | |
| break no_type_restriction; | |
| } | |
| M = f.mimeTypes[C[I]]; | |
| if (M) { | |
| L.push(M); | |
| } | |
| } | |
| } | |
| L = L.join(","); | |
| function J() { | |
| var m, l, o, n; | |
| d = f.guid(); | |
| G.push(d); | |
| m = g.createElement("form"); | |
| m.setAttribute("id", "form_" + d); | |
| m.setAttribute("method", "post"); | |
| m.setAttribute("enctype", "multipart/form-data"); | |
| m.setAttribute("encoding", "multipart/form-data"); | |
| m.setAttribute("target", e.id + "_iframe"); | |
| m.style.position = "absolute"; | |
| l = g.createElement("input"); | |
| l.setAttribute("id", "input_" + d); | |
| l.setAttribute("type", "file"); | |
| l.setAttribute("accept", L); | |
| l.setAttribute("size", 1); | |
| n = h(e.settings.browse_button); | |
| if (e.features.canOpenDialog && n) { | |
| f.addEvent(h(e.settings.browse_button), "click", function (p) { | |
| l.click(); | |
| p.preventDefault(); | |
| }, e.id); | |
| } | |
| f.extend(l.style, { | |
| width: "100%", | |
| height: "100%", | |
| opacity: 0, | |
| fontSize: "99px" | |
| }); | |
| f.extend(m.style, { | |
| overflow: "hidden" | |
| }); | |
| o = e.settings.shim_bgcolor; | |
| if (o) { | |
| m.style.background = o; | |
| } | |
| if (c) { | |
| f.extend(l.style, { | |
| filter: "alpha(opacity=0)" | |
| }); | |
| } | |
| f.addEvent(l, "change", function (q) { | |
| var s = q.target, | |
| t, r = [], | |
| p; | |
| if (s.value) { | |
| h("form_" + d).style.top = -1048575 + "px"; | |
| t = s.value.replace(/\\/g, "/"); | |
| t = t.substring(t.length, t.lastIndexOf("/") + 1); | |
| r.push(new f.File(d, t)); | |
| if (!e.features.canOpenDialog) { | |
| f.removeAllEvents(m, e.id); | |
| } else { | |
| f.removeEvent(n, "click", e.id); | |
| } | |
| f.removeEvent(l, "change", e.id); | |
| J(); | |
| if (r.length) { | |
| b.trigger("FilesAdded", r); | |
| } | |
| } | |
| }, e.id); | |
| m.appendChild(l); | |
| E.appendChild(m); | |
| e.refresh(); | |
| } | |
| function K() { | |
| var l = g.createElement("div"); | |
| l.innerHTML = '<iframe id="' + e.id + '_iframe" name="' + e.id + '_iframe" src="' + F + ':""" style="display:none"></iframe>'; | |
| A = l.firstChild; | |
| E.appendChild(A); | |
| f.addEvent(A, "load", function (o) { | |
| var n = o.target, | |
| p, m; | |
| if (!D) { | |
| return; | |
| } | |
| try { | |
| p = n.contentWindow.document || n.contentDocument || j.frames[n.id].document; | |
| } catch (q) { | |
| e.trigger("Error", { | |
| code: f.SECURITY_ERROR, | |
| message: f.translate("Security error."), | |
| file: D | |
| }); | |
| return; | |
| } | |
| m = p.documentElement.innerText || p.documentElement.textContent; | |
| if (m) { | |
| D.status = f.DONE; | |
| D.loaded = 1025; | |
| D.percent = 100; | |
| e.trigger("UploadProgress", D); | |
| e.trigger("FileUploaded", D, { | |
| response: m | |
| }); | |
| } | |
| }, e.id); | |
| } | |
| if (e.settings.container) { | |
| E = h(e.settings.container); | |
| if (f.getStyle(E, "position") === "static") { | |
| E.style.position = "relative"; | |
| } | |
| } | |
| e.bind("UploadFile", function (o, n) { | |
| var m, l; | |
| if (n.status == f.DONE || n.status == f.FAILED || o.state == f.STOPPED) { | |
| return; | |
| } | |
| m = h("form_" + n.id); | |
| l = h("input_" + n.id); | |
| l.setAttribute("name", o.settings.file_data_name); | |
| m.setAttribute("action", o.settings.url); | |
| f.each(f.extend({ | |
| name: n.target_name || n.name | |
| }, o.settings.multipart_params), function (p, r) { | |
| var q = g.createElement("input"); | |
| f.extend(q, { | |
| type: "hidden", | |
| name: r, | |
| value: p | |
| }); | |
| m.insertBefore(q, m.firstChild); | |
| }); | |
| D = n; | |
| h("form_" + d).style.top = -1048575 + "px"; | |
| m.submit(); | |
| m.parentNode.removeChild(m); | |
| }); | |
| e.bind("FileUploaded", function (l) { | |
| l.refresh(); | |
| }); | |
| e.bind("StateChanged", function (l) { | |
| if (l.state == f.STARTED) { | |
| K(); | |
| } | |
| if (l.state == f.STOPPED) { | |
| j.setTimeout(function () { | |
| f.removeEvent(A, "load", l.id); | |
| A.parentNode.removeChild(A); | |
| }, 0); | |
| } | |
| }); | |
| e.bind("Refresh", function (n) { | |
| var s, m, l, u, p, r, q, t, o; | |
| s = h(n.settings.browse_button); | |
| if (s) { | |
| p = f.getPos(s, h(n.settings.container)); | |
| r = f.getSize(s); | |
| q = h("form_" + d); | |
| t = h("input_" + d); | |
| f.extend(q.style, { | |
| top: p.y + "px", | |
| left: p.x + "px", | |
| width: r.w + "px", | |
| height: r.h + "px" | |
| }); | |
| if (n.features.canOpenDialog) { | |
| o = parseInt(s.parentNode.style.zIndex, 10); | |
| if (isNaN(o)) { | |
| o = 0; | |
| } | |
| f.extend(s.style, { | |
| zIndex: o | |
| }); | |
| if (f.getStyle(s, "position") === "static") { | |
| f.extend(s.style, { | |
| position: "relative" | |
| }); | |
| } | |
| f.extend(q.style, { | |
| zIndex: o - 1 | |
| }); | |
| } | |
| l = n.settings.browse_button_hover; | |
| u = n.settings.browse_button_active; | |
| m = n.features.canOpenDialog ? s : q; | |
| if (l) { | |
| f.addEvent(m, "mouseover", function () { | |
| f.addClass(s, l); | |
| }, n.id); | |
| f.addEvent(m, "mouseout", function () { | |
| f.removeClass(s, l); | |
| }, n.id); | |
| } | |
| if (u) { | |
| f.addEvent(m, "mousedown", function () { | |
| f.addClass(s, u); | |
| }, n.id); | |
| f.addEvent(g.body, "mouseup", function () { | |
| f.removeClass(s, u); | |
| }, n.id); | |
| } | |
| } | |
| }); | |
| b.bind("FilesRemoved", function (o, n) { | |
| var l, m; | |
| for (l = 0; l < n.length; l++) { | |
| m = h("form_" + n[l].id); | |
| if (m) { | |
| m.parentNode.removeChild(m); | |
| } | |
| } | |
| }); | |
| b.bind("Destroy", function (p) { | |
| var l, o, n, m = { | |
| inputContainer: "form_" + d, | |
| inputFile: "input_" + d, | |
| browseButton: p.settings.browse_button | |
| }; | |
| for (l in m) { | |
| o = h(m[l]); | |
| if (o) { | |
| f.removeAllEvents(o, p.id); | |
| } | |
| } | |
| f.removeAllEvents(g.body, p.id); | |
| f.each(G, function (q, r) { | |
| n = h("form_" + q); | |
| if (n) { | |
| E.removeChild(n); | |
| } | |
| }); | |
| }); | |
| J(); | |
| }); | |
| a({ | |
| success: true | |
| }); | |
| } | |
| }); | |
| })(window, document, plupload); | |
| var io = this.io = { | |
| SOCKET_LOG: function (a) { | |
| if (window.turntable) { | |
| turntable.socketLog(String(a) == "[object Object]" ? "[]" : a); | |
| } | |
| }, | |
| version: "0.6.3", | |
| setPath: function (a) { | |
| if (window.console && console.error) { | |
| console.error("io.setPath will be removed. Please set the variable WEB_SOCKET_SWF_LOCATION pointing to WebSocketMain.swf"); | |
| } | |
| this.path = /\/$/.test(a) ? a : a + "/"; | |
| WEB_SOCKET_SWF_LOCATION = a + "lib/vendor/web-socket-js/WebSocketMain.swf"; | |
| } | |
| }; | |
| if ("jQuery" in this) { | |
| jQuery.io = this.io; | |
| } | |
| if (typeof window != "undefined") { | |
| if (typeof WEB_SOCKET_SWF_LOCATION === "undefined") { | |
| WEB_SOCKET_SWF_LOCATION = "/socket.io/lib/vendor/web-socket-js/WebSocketMain.swf"; | |
| } | |
| }(function () { | |
| var b = this.io, | |
| a = false; | |
| b.util = { | |
| load: function (c) { | |
| if (/loaded|complete/.test(document.readyState) || a) { | |
| return c(); | |
| } | |
| if ("attachEvent" in window) { | |
| window.attachEvent("onload", c); | |
| } else { | |
| window.addEventListener("load", c, false); | |
| } | |
| }, | |
| defer: function (c) { | |
| if (!b.util.webkit) { | |
| return c(); | |
| } | |
| b.util.load(function () { | |
| setTimeout(c, 100); | |
| }); | |
| }, | |
| inherit: function (e, c) { | |
| for (var d in c.prototype) { | |
| e.prototype[d] = c.prototype[d]; | |
| } | |
| }, | |
| indexOf: function (c, f, g) { | |
| for (var d = c.length, e = (g < 0) ? Math.max(0, d + g) : g || 0; e < d; e++) { | |
| if (c[e] === f) { | |
| return e; | |
| } | |
| } | |
| return -1; | |
| }, | |
| isArray: function (c) { | |
| return Object.prototype.toString.call(c) === "[object Array]"; | |
| }, | |
| merge: function (e, c) { | |
| for (var d in c) { | |
| if (c.hasOwnProperty(d)) { | |
| e[d] = c[d]; | |
| } | |
| } | |
| } | |
| }; | |
| b.util.webkit = /webkit/i.test(navigator.userAgent); | |
| b.util.load(function () { | |
| a = true; | |
| }); | |
| })(); | |
| (function () { | |
| var d = this.io, | |
| a = "~m~", | |
| c = function (f) { | |
| if (Object.prototype.toString.call(f) == "[object Object]") { | |
| if (!("JSON" in window)) { | |
| var e = "Socket.IO Error: Trying to encode as JSON, but JSON.stringify is missing."; | |
| if ("console" in window && console.error) { | |
| console.error(e); | |
| } else { | |
| throw new Error(e); | |
| } | |
| return '{ "$error": "' + e + '" }'; | |
| } | |
| return "~j~" + JSON.stringify(f); | |
| } else { | |
| return String(f); | |
| } | |
| }, | |
| b = d.Transport = function (f, e) { | |
| this.base = f; | |
| this.options = { | |
| timeout: 15000 | |
| }; | |
| d.util.merge(this.options, e); | |
| }; | |
| b.prototype.send = function () { | |
| throw new Error("Missing send() implementation"); | |
| }; | |
| b.prototype.connect = function () { | |
| throw new Error("Missing connect() implementation"); | |
| }; | |
| b.prototype.disconnect = function () { | |
| throw new Error("Missing disconnect() implementation"); | |
| }; | |
| b.prototype.encode = function (j) { | |
| var f = "", | |
| h; | |
| j = d.util.isArray(j) ? j : [j]; | |
| for (var g = 0, e = j.length; g < e; g++) { | |
| h = j[g] === null || j[g] === undefined ? "" : c(j[g]); | |
| f += a + h.length + a + h; | |
| } | |
| return f; | |
| }; | |
| b.prototype.decode = function (j) { | |
| var h = [], | |
| g, k; | |
| do { | |
| if (j.substr(0, 3) !== a) { | |
| return h; | |
| } | |
| j = j.substr(3); | |
| g = "", k = ""; | |
| for (var f = 0, e = j.length; f < e; f++) { | |
| k = Number(j.substr(f, 1)); | |
| if (j.substr(f, 1) == k) { | |
| g += k; | |
| } else { | |
| j = j.substr(g.length + a.length); | |
| g = Number(g); | |
| break; | |
| } | |
| } | |
| h.push(j.substr(0, g)); | |
| j = j.substr(g); | |
| } while (j !== ""); | |
| return h; | |
| }; | |
| b.prototype.onData = function (h) { | |
| this.setTimeout(); | |
| var g = this.decode(h); | |
| if (g && g.length) { | |
| for (var f = 0, e = g.length; f < e; f++) { | |
| this.onMessage(g[f]); | |
| } | |
| } | |
| }; | |
| b.prototype.setTimeout = function () { | |
| var e = this; | |
| if (this.timeout) { | |
| clearTimeout(this.timeout); | |
| } | |
| this.timeout = setTimeout(function () { | |
| e.onTimeout(); | |
| }, this.options.timeout); | |
| }; | |
| b.prototype.onTimeout = function () { | |
| d.SOCKET_LOG("timeout"); | |
| this.onDisconnect(); | |
| }; | |
| b.prototype.onMessage = function (e) { | |
| if (!this.sessionid) { | |
| this.sessionid = e; | |
| this.onConnect(); | |
| } else { | |
| if (e.substr(0, 3) == "~h~") { | |
| this.onHeartbeat(e.substr(3)); | |
| } else { | |
| if (e.substr(0, 3) == "~j~") { | |
| this.base.onMessage(JSON.parse(e.substr(3))); | |
| } else { | |
| this.base.onMessage(e); | |
| } | |
| } | |
| } | |
| }, b.prototype.onHeartbeat = function (e) { | |
| if (this.type == "websocket") { | |
| d.SOCKET_LOG(this.sockets[0].id + ":hb"); | |
| } | |
| this.send("~h~" + e); | |
| }; | |
| b.prototype.onConnect = function () { | |
| this.connected = true; | |
| this.connecting = false; | |
| this.base.onConnect(); | |
| this.setTimeout(); | |
| }; | |
| b.prototype.onDisconnect = function () { | |
| if (this.timeout) { | |
| clearTimeout(this.timeout); | |
| } | |
| this.connecting = false; | |
| this.connected = false; | |
| this.sessionid = null; | |
| this.base.onDisconnect(); | |
| }; | |
| b.prototype.prepareUrl = function () { | |
| return (this.base.options.secure ? "https" : "http") + "://" + this.base.host + ":" + this.base.options.port + "/" + this.base.options.resource + "/" + this.type + (this.sessionid ? ("/" + this.sessionid) : "/"); | |
| }; | |
| })(); | |
| (function () { | |
| var e = this.io, | |
| d = new Function, | |
| a = (function () { | |
| if (!("XMLHttpRequest" in window)) { | |
| return false; | |
| } | |
| var f = new XMLHttpRequest(); | |
| return f.withCredentials != undefined; | |
| })(), | |
| c = function (h) { | |
| if ("XDomainRequest" in window && h) { | |
| return new XDomainRequest(); | |
| } | |
| if ("XMLHttpRequest" in window && (!h || a)) { | |
| return new XMLHttpRequest(); | |
| } | |
| if (!h) { | |
| try { | |
| var g = new ActiveXObject("MSXML2.XMLHTTP"); | |
| return g; | |
| } catch (i) {} | |
| try { | |
| var f = new ActiveXObject("Microsoft.XMLHTTP"); | |
| return f; | |
| } catch (i) {} | |
| } | |
| return false; | |
| }, | |
| b = e.Transport.XHR = function () { | |
| e.Transport.apply(this, arguments); | |
| this.sendBuffer = []; | |
| }; | |
| e.util.inherit(b, e.Transport); | |
| b.prototype.connect = function () { | |
| this.get(); | |
| return this; | |
| }; | |
| b.prototype.checkSend = function () { | |
| if (!this.posting && this.sendBuffer.length) { | |
| var f = this.encode(this.sendBuffer); | |
| this.sendBuffer = []; | |
| this.sendIORequest(f); | |
| } | |
| }; | |
| b.prototype.send = function (f) { | |
| if (e.util.isArray(f)) { | |
| this.sendBuffer.push.apply(this.sendBuffer, f); | |
| } else { | |
| this.sendBuffer.push(f); | |
| } | |
| this.checkSend(); | |
| return this; | |
| }; | |
| b.prototype.sendIORequest = function (g) { | |
| var f = this; | |
| this.posting = true; | |
| this.sendXHR = this.request("send", "POST"); | |
| this.sendXHR.onreadystatechange = function () { | |
| var h; | |
| if (f.sendXHR.readyState == 4) { | |
| f.sendXHR.onreadystatechange = d; | |
| try { | |
| h = f.sendXHR.status; | |
| } catch (i) {} | |
| f.posting = false; | |
| if (h == 200) { | |
| f.checkSend(); | |
| } else { | |
| f.onDisconnect(); | |
| } | |
| } | |
| }; | |
| this.sendXHR.send("data=" + encodeURIComponent(g)); | |
| }; | |
| b.prototype.disconnect = function () { | |
| this.onDisconnect(); | |
| return this; | |
| }; | |
| b.prototype.onDisconnect = function () { | |
| if (this.xhr) { | |
| this.xhr.onreadystatechange = d; | |
| try { | |
| this.xhr.abort(); | |
| } catch (f) {} | |
| this.xhr = null; | |
| } | |
| if (this.sendXHR) { | |
| this.sendXHR.onreadystatechange = d; | |
| try { | |
| this.sendXHR.abort(); | |
| } catch (f) {} | |
| this.sendXHR = null; | |
| } | |
| this.sendBuffer = []; | |
| e.Transport.prototype.onDisconnect.call(this); | |
| }; | |
| b.prototype.request = function (g, i, f) { | |
| var h = c(this.base.isXDomain()); | |
| if (f) { | |
| h.multipart = true; | |
| } | |
| h.open(i || "GET", this.prepareUrl() + (g ? "/" + g : "")); | |
| if (i == "POST" && "setRequestHeader" in h) { | |
| h.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8"); | |
| } | |
| return h; | |
| }; | |
| b.check = function (f) { | |
| try { | |
| if (c(f)) { | |
| return true; | |
| } | |
| } catch (g) {} | |
| return false; | |
| }; | |
| b.xdomainCheck = function () { | |
| return b.check(true); | |
| }; | |
| b.request = c; | |
| })(); | |
| (function () { | |
| var b = this.io, | |
| a = b.Transport.websocket = function () { | |
| b.Transport.apply(this, arguments); | |
| }; | |
| b.util.inherit(a, b.Transport); | |
| a.prototype.type = "websocket"; | |
| a.prototype.connect = function () { | |
| var d = this; | |
| if (!this.sockets) { | |
| this.sockets = []; | |
| } | |
| var c = new WebSocket(this.prepareUrl()); | |
| this.sockets.unshift(c); | |
| b.socketsCreated = (b.socketsCreated || 0) + 1; | |
| c.id = "ws" + b.socketsCreated; | |
| b.SOCKET_LOG(c.id + ":create"); | |
| c.onmessage = function (g) { | |
| if (!d.base.connected || d.base.connecting) { | |
| b.SOCKET_LOG(c.id + ":awake"); | |
| } | |
| if (d.sockets.length > 1) { | |
| var e = $.inArray(c, d.sockets); | |
| if (e == -1) { | |
| return; | |
| } | |
| d.sockets.splice(e, 1); | |
| for (var f = 0; f < d.sockets.length; f++) { | |
| d.sockets[f].onmessage = null; | |
| d.sockets[f].onclose = null; | |
| d.sockets[f].onerror = null; | |
| d.sockets[f].close(); | |
| b.SOCKET_LOG(d.sockets[f].id + ":kill"); | |
| } | |
| d.sockets = [c]; | |
| } | |
| d.onData(g.data); | |
| }; | |
| c.onclose = function (f) { | |
| b.SOCKET_LOG(c.id + ":die"); | |
| var e = $.inArray(c, d.sockets); | |
| if (e != -1) { | |
| d.sockets.splice(e, 1); | |
| } | |
| d.onDisconnect(); | |
| }; | |
| c.onerror = function (f) { | |
| d.onError(f); | |
| }; | |
| return this; | |
| }; | |
| a.prototype.send = function (c) { | |
| if (this.sockets.length) { | |
| this.sockets[0].send(this.encode(c)); | |
| } | |
| return this; | |
| }; | |
| a.prototype.disconnect = function () { | |
| if (this.sockets.length) { | |
| while (this.sockets.length) { | |
| var c = this.sockets.pop(); | |
| c.onmessage = null; | |
| c.onclose = null; | |
| c.onerror = null; | |
| c.close(); | |
| } | |
| this.onDisconnect(); | |
| } | |
| return this; | |
| }; | |
| a.prototype.onError = function (c) { | |
| this.base.emit("error", [c]); | |
| }; | |
| a.prototype.prepareUrl = function () { | |
| return (this.base.options.secure ? "wss" : "ws") + "://" + this.base.host + ":" + this.base.options.port + "/" + this.base.options.resource + "/" + this.type + (this.sessionid ? ("/" + this.sessionid) : ""); | |
| }; | |
| a.check = function () { | |
| return "WebSocket" in window && WebSocket.prototype && (WebSocket.prototype.send && !! WebSocket.prototype.send.toString().match(/native/i)) && typeof WebSocket !== "undefined"; | |
| }; | |
| a.xdomainCheck = function () { | |
| return true; | |
| }; | |
| })(); | |
| (function () { | |
| var b = this.io, | |
| a = b.Transport.flashsocket = function () { | |
| b.Transport.websocket.apply(this, arguments); | |
| }; | |
| b.util.inherit(a, b.Transport.websocket); | |
| a.prototype.type = "flashsocket"; | |
| a.prototype.connect = function () { | |
| b.SOCKET_LOG("fsock:connect"); | |
| var c = this, | |
| d = arguments; | |
| WebSocket.__addTask(function () { | |
| b.Transport.websocket.prototype.connect.apply(c, d); | |
| }); | |
| return this; | |
| }; | |
| a.prototype.send = function () { | |
| var c = this, | |
| d = arguments; | |
| WebSocket.__addTask(function () { | |
| b.Transport.websocket.prototype.send.apply(c, d); | |
| }); | |
| return this; | |
| }; | |
| a.check = function () { | |
| if (typeof WebSocket == "undefined" || !("__addTask" in WebSocket) || !swfobject) { | |
| return false; | |
| } | |
| return swfobject.hasFlashPlayerVersion("10.0.0"); | |
| }; | |
| a.xdomainCheck = function () { | |
| return true; | |
| }; | |
| })(); | |
| (function () { | |
| var b = this.io, | |
| a = b.Transport.htmlfile = function () { | |
| b.Transport.XHR.apply(this, arguments); | |
| }; | |
| b.util.inherit(a, b.Transport.XHR); | |
| a.prototype.type = "htmlfile"; | |
| a.prototype.get = function () { | |
| var c = this; | |
| this.open(); | |
| window.attachEvent("onunload", function () { | |
| c.destroy(); | |
| }); | |
| }; | |
| a.prototype.open = function () { | |
| this.doc = new ActiveXObject("htmlfile"); | |
| this.doc.open(); | |
| this.doc.write("<html></html>"); | |
| this.doc.parentWindow.s = this; | |
| this.doc.close(); | |
| var c = this.doc.createElement("div"); | |
| this.doc.body.appendChild(c); | |
| this.iframe = this.doc.createElement("iframe"); | |
| c.appendChild(this.iframe); | |
| this.iframe.src = this.prepareUrl() + "/" + (+new Date); | |
| }; | |
| a.prototype._ = function (d, e) { | |
| this.onData(d); | |
| var c = e.getElementsByTagName("script")[0]; | |
| c.parentNode.removeChild(c); | |
| }; | |
| a.prototype.destroy = function () { | |
| if (this.iframe) { | |
| try { | |
| this.iframe.src = "about:blank"; | |
| } catch (c) {} | |
| this.doc = null; | |
| CollectGarbage(); | |
| } | |
| }; | |
| a.prototype.disconnect = function () { | |
| this.destroy(); | |
| return b.Transport.XHR.prototype.disconnect.call(this); | |
| }; | |
| a.check = function () { | |
| if ("ActiveXObject" in window) { | |
| try { | |
| var c = new ActiveXObject("htmlfile"); | |
| return c && b.Transport.XHR.check(); | |
| } catch (d) {} | |
| } | |
| return false; | |
| }; | |
| a.xdomainCheck = function () { | |
| return false; | |
| }; | |
| })(); | |
| (function () { | |
| var b = this.io, | |
| a = b.Transport["xhr-multipart"] = function () { | |
| b.Transport.XHR.apply(this, arguments); | |
| }; | |
| b.util.inherit(a, b.Transport.XHR); | |
| a.prototype.type = "xhr-multipart"; | |
| a.prototype.get = function () { | |
| var c = this; | |
| this.xhr = this.request("", "GET", true); | |
| this.xhr.onreadystatechange = function () { | |
| if (c.xhr.readyState == 4) { | |
| c.onData(c.xhr.responseText); | |
| } | |
| }; | |
| this.xhr.send(null); | |
| }; | |
| a.check = function () { | |
| return "XMLHttpRequest" in window && "prototype" in XMLHttpRequest && "multipart" in XMLHttpRequest.prototype; | |
| }; | |
| a.xdomainCheck = function () { | |
| return true; | |
| }; | |
| })(); | |
| (function () { | |
| var c = this.io, | |
| a = new Function(), | |
| b = c.Transport["xhr-polling"] = function () { | |
| c.Transport.XHR.apply(this, arguments); | |
| }; | |
| c.util.inherit(b, c.Transport.XHR); | |
| b.prototype.type = "xhr-polling"; | |
| b.prototype.connect = function () { | |
| var d = this; | |
| c.util.defer(function () { | |
| c.Transport.XHR.prototype.connect.call(d); | |
| }); | |
| return false; | |
| }; | |
| b.prototype.get = function () { | |
| var d = this; | |
| this.xhr = this.request(+new Date, "GET"); | |
| this.xhr.onreadystatechange = function () { | |
| var f; | |
| if (d.xhr.readyState == 4) { | |
| d.xhr.onreadystatechange = a; | |
| try { | |
| f = d.xhr.status; | |
| } catch (g) {} | |
| if (f == 200) { | |
| d.onData(d.xhr.responseText); | |
| d.get(); | |
| } else { | |
| d.onDisconnect(); | |
| } | |
| } | |
| }; | |
| this.xhr.send(null); | |
| }; | |
| b.check = function () { | |
| return c.Transport.XHR.check(); | |
| }; | |
| b.xdomainCheck = function () { | |
| return c.Transport.XHR.xdomainCheck(); | |
| }; | |
| })(); | |
| (function () { | |
| var b = this.io, | |
| a = b.Transport["jsonp-polling"] = function () { | |
| b.Transport.XHR.apply(this, arguments); | |
| this.insertAt = document.getElementsByTagName("head")[0]; | |
| this.index = b.JSONP.length; | |
| b.JSONP.push(this); | |
| }; | |
| b.util.inherit(a, b.Transport["xhr-polling"]); | |
| b.JSONP = []; | |
| a.prototype.type = "jsonp-polling"; | |
| a.prototype.sendIORequest = function (j) { | |
| var l = this; | |
| if (!("form" in this)) { | |
| var d = document.createElement("FORM"), | |
| f = document.createElement("TEXTAREA"), | |
| c = this.iframeId = "socket_io_iframe_" + this.index, | |
| i; | |
| d.style.position = "absolute"; | |
| d.style.top = "-1000px"; | |
| d.style.left = "-1000px"; | |
| d.target = c; | |
| d.method = "POST"; | |
| d.action = this.prepareUrl() + "/" + (+new Date) + "/" + this.index; | |
| f.name = "data"; | |
| d.appendChild(f); | |
| this.insertAt.insertBefore(d, null); | |
| document.body.appendChild(d); | |
| this.form = d; | |
| this.area = f; | |
| } | |
| function g() { | |
| h(); | |
| l.posting = false; | |
| l.checkSend(); | |
| } | |
| function h() { | |
| if (l.iframe) { | |
| l.form.removeChild(l.iframe); | |
| } | |
| try { | |
| i = document.createElement('<iframe name="' + l.iframeId + '">'); | |
| } catch (m) { | |
| i = document.createElement("iframe"); | |
| i.name = l.iframeId; | |
| } | |
| i.id = l.iframeId; | |
| l.form.appendChild(i); | |
| l.iframe = i; | |
| } | |
| h(); | |
| this.posting = true; | |
| this.area.value = j; | |
| try { | |
| this.form.submit(); | |
| } catch (k) {} | |
| if (this.iframe.attachEvent) { | |
| i.onreadystatechange = function () { | |
| if (l.iframe.readyState == "complete") { | |
| g(); | |
| } | |
| }; | |
| } else { | |
| this.iframe.onload = g; | |
| } | |
| }; | |
| a.prototype.get = function () { | |
| var d = this, | |
| c = document.createElement("SCRIPT"); | |
| if (this.script) { | |
| this.script.parentNode.removeChild(this.script); | |
| this.script = null; | |
| } | |
| c.async = true; | |
| c.src = this.prepareUrl() + "/" + (+new Date) + "/" + this.index; | |
| c.onerror = function () { | |
| d.onDisconnect(); | |
| }; | |
| this.insertAt.insertBefore(c, null); | |
| this.script = c; | |
| }; | |
| a.prototype._ = function () { | |
| this.onData.apply(this, arguments); | |
| this.get(); | |
| return this; | |
| }; | |
| a.check = function () { | |
| return true; | |
| }; | |
| a.xdomainCheck = function () { | |
| return true; | |
| }; | |
| })(); | |
| (function () { | |
| var b = this.io; | |
| var a = b.Socket = function (d, c) { | |
| this.host = d || document.domain; | |
| this.options = { | |
| secure: false, | |
| document: document, | |
| port: document.location.port || 80, | |
| resource: "socket.io", | |
| transports: ["websocket", "flashsocket", "htmlfile", "xhr-multipart", "xhr-polling", "jsonp-polling"], | |
| transportOptions: { | |
| "xhr-polling": { | |
| timeout: 25000 | |
| }, | |
| "jsonp-polling": { | |
| timeout: 25000 | |
| } | |
| }, | |
| connectTimeout: 5000, | |
| tryTransportsOnConnectTimeout: true, | |
| reconnect: true, | |
| reconnectionDelay: 500, | |
| maxReconnectionAttempts: 10, | |
| rememberTransport: true | |
| }; | |
| b.util.merge(this.options, c); | |
| this.connected = false; | |
| this.connecting = false; | |
| this.reconnecting = false; | |
| this.events = {}; | |
| this.transport = this.getTransport(); | |
| if (!this.transport && "console" in window) { | |
| console.error("No transport available"); | |
| } | |
| }; | |
| a.prototype.getTransport = function (f) { | |
| var c = f || this.options.transports, | |
| d; | |
| if (this.options.rememberTransport && !f) { | |
| d = this.options.document.cookie.match("(?:^|;)\\s*socketio=([^;]*)"); | |
| if (d) { | |
| this.rememberedTransport = true; | |
| c = [decodeURIComponent(d[1])]; | |
| } | |
| } | |
| for (var e = 0, g; g = c[e]; e++) { | |
| if (b.Transport[g] && b.Transport[g].check() && (!this.isXDomain() || b.Transport[g].xdomainCheck())) { | |
| return new b.Transport[g](this, this.options.transportOptions[g] || {}); | |
| } | |
| } | |
| return null; | |
| }; | |
| a.prototype.connect = function (d) { | |
| if (this.transport && !this.connected) { | |
| if (this.connecting && this.transport.type != "websocket") { | |
| this.disconnect(true); | |
| } | |
| this.connecting = true; | |
| this.emit("connecting", [this.transport.type]); | |
| this.transport.connect(); | |
| if (this.options.connectTimeout && !this.reconnecting) { | |
| var c = this; | |
| this.connectTimeoutTimer = setTimeout(function () { | |
| if (!c.connected) { | |
| c.disconnect(true); | |
| if (c.options.tryTransportsOnConnectTimeout && !c.rememberedTransport) { | |
| if (!c.remainingTransports) { | |
| c.remainingTransports = c.options.transports.slice(0); | |
| } | |
| var e = c.remainingTransports; | |
| while (e.length > 0 && e.splice(0, 1)[0] != c.transport.type) {} | |
| if (e.length) { | |
| c.transport = c.getTransport(e); | |
| c.connect(); | |
| } | |
| } | |
| if (!c.remainingTransports || c.remainingTransports.length == 0) { | |
| c.emit("connect_failed"); | |
| } | |
| } | |
| if (c.remainingTransports && c.remainingTransports.length == 0) { | |
| delete c.remainingTransports; | |
| } | |
| }, this.options.connectTimeout); | |
| } | |
| } | |
| if (d && typeof d == "function") { | |
| this.once("connect", d); | |
| } | |
| return this; | |
| }; | |
| a.prototype.send = function (c) { | |
| if (!this.transport || !this.transport.connected) { | |
| return this.queue(c); | |
| } | |
| this.transport.send(c); | |
| return this; | |
| }; | |
| a.prototype.disconnect = function (c) { | |
| if (this.connectTimeoutTimer) { | |
| clearTimeout(this.connectTimeoutTimer); | |
| } | |
| if (!c) { | |
| this.options.reconnect = false; | |
| } | |
| this.transport.disconnect(); | |
| return this; | |
| }; | |
| a.prototype.on = function (c, d) { | |
| if (!(c in this.events)) { | |
| this.events[c] = []; | |
| } | |
| this.events[c].push(d); | |
| return this; | |
| }; | |
| a.prototype.once = function (d, f) { | |
| var c = this, | |
| e = function () { | |
| c.removeEvent(d, e); | |
| f.apply(c, arguments); | |
| }; | |
| e.ref = f; | |
| c.on(d, e); | |
| return this; | |
| }; | |
| a.prototype.emit = function (d, c) { | |
| if (d in this.events) { | |
| var f = this.events[d].concat(); | |
| for (var e = 0, g = f.length; e < g; e++) { | |
| f[e].apply(this, c === undefined ? [] : c); | |
| } | |
| } | |
| return this; | |
| }; | |
| a.prototype.removeEvent = function (e, f) { | |
| if (e in this.events) { | |
| for (var d = 0, c = this.events[e].length; d < c; d++) { | |
| if (this.events[e][d] == f || this.events[e][d].ref && this.events[e][d].ref == f) { | |
| this.events[e].splice(d, 1); | |
| } | |
| } | |
| } | |
| return this; | |
| }; | |
| a.prototype.queue = function (c) { | |
| if (!("queueStack" in this)) { | |
| this.queueStack = []; | |
| } | |
| this.queueStack.push(c); | |
| return this; | |
| }; | |
| a.prototype.doQueue = function () { | |
| if (!("queueStack" in this) || !this.queueStack.length) { | |
| return this; | |
| } | |
| this.transport.send(this.queueStack); | |
| this.queueStack = []; | |
| return this; | |
| }; | |
| a.prototype.isXDomain = function () { | |
| var c = window.location.port || 80; | |
| return this.host !== document.domain || this.options.port != c; | |
| }; | |
| a.prototype.onConnect = function () { | |
| this.connected = true; | |
| this.connecting = false; | |
| this.doQueue(); | |
| if (this.options.rememberTransport) { | |
| this.options.document.cookie = "socketio=" + encodeURIComponent(this.transport.type); | |
| } | |
| this.emit("connect"); | |
| }; | |
| a.prototype.onMessage = function (c) { | |
| this.emit("message", [c]); | |
| }; | |
| a.prototype.onDisconnect = function () { | |
| var c = this.connected; | |
| this.connected = false; | |
| this.connecting = false; | |
| this.queueStack = []; | |
| if (c) { | |
| b.SOCKET_LOG("dc"); | |
| this.emit("disconnect"); | |
| if (this.options.reconnect && !this.reconnecting) { | |
| this.onReconnect(); | |
| } | |
| } | |
| }; | |
| a.prototype.onReconnect = function () { | |
| this.reconnecting = true; | |
| this.reconnectionAttempts = 0; | |
| this.reconnectionDelay = this.options.reconnectionDelay; | |
| var c = this, | |
| e = this.options.tryTransportsOnConnectTimeout, | |
| g = this.options.rememberTransport; | |
| function d() { | |
| if (c.connected) { | |
| c.emit("reconnect", [c.transport.type, c.reconnectionAttempts]); | |
| } | |
| c.removeEvent("connect_failed", f).removeEvent("connect", f); | |
| c.reconnecting = false; | |
| delete c.reconnectionAttempts; | |
| delete c.reconnectionDelay; | |
| delete c.reconnectionTimer; | |
| delete c.redoTransports; | |
| c.options.tryTransportsOnConnectTimeout = e; | |
| c.options.rememberTransport = g; | |
| return; | |
| } | |
| function f() { | |
| if (!c.reconnecting) { | |
| return; | |
| } | |
| if (!c.connected) { | |
| var h = (!c.connecting || c.transport.type == "websocket"); | |
| if (!h) { | |
| return c.reconnectionTimer = setTimeout(f, 1000); | |
| } | |
| if (c.reconnectionAttempts++ >= c.options.maxReconnectionAttempts) { | |
| if (!c.redoTransports) { | |
| c.on("connect_failed", f); | |
| c.options.tryTransportsOnConnectTimeout = true; | |
| c.disconnect(true); | |
| c.transport = c.getTransport(c.options.transports); | |
| c.redoTransports = true; | |
| c.connect(); | |
| } else { | |
| c.emit("reconnect_failed"); | |
| d(); | |
| } | |
| } else { | |
| c.reconnectionDelay *= 2; | |
| c.connect(); | |
| c.emit("reconnecting", [c.reconnectionDelay, c.reconnectionAttempts]); | |
| c.reconnectionTimer = setTimeout(f, c.reconnectionDelay); | |
| } | |
| } else { | |
| d(); | |
| } | |
| } | |
| this.options.tryTransportsOnConnectTimeout = false; | |
| this.reconnectionTimer = setTimeout(f, this.reconnectionDelay); | |
| this.on("connect", f); | |
| }; | |
| a.prototype.fire = a.prototype.emit; | |
| a.prototype.addListener = a.prototype.addEvent = a.prototype.addEventListener = a.prototype.on; | |
| a.prototype.removeListener = a.prototype.removeEventListener = a.prototype.removeEvent; | |
| })(); | |
| var swfobject = function () { | |
| var aq = "undefined", | |
| aD = "object", | |
| ab = "Shockwave Flash", | |
| X = "ShockwaveFlash.ShockwaveFlash", | |
| aE = "application/x-shockwave-flash", | |
| ac = "SWFObjectExprInst", | |
| ax = "onreadystatechange", | |
| af = window, | |
| aL = document, | |
| aB = navigator, | |
| aa = false, | |
| Z = [aN], | |
| aG = [], | |
| ag = [], | |
| al = [], | |
| aJ, ad, ap, at, ak = false, | |
| aU = false, | |
| aH, an, aI = true, | |
| ah = function () { | |
| var a = typeof aL.getElementById != aq && typeof aL.getElementsByTagName != aq && typeof aL.createElement != aq, | |
| e = aB.userAgent.toLowerCase(), | |
| c = aB.platform.toLowerCase(), | |
| h = c ? /win/.test(c) : /win/.test(e), | |
| j = c ? /mac/.test(c) : /mac/.test(e), | |
| g = /webkit/.test(e) ? parseFloat(e.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, | |
| d = !+"\v1", | |
| f = [0, 0, 0], | |
| k = null; | |
| if (typeof aB.plugins != aq && typeof aB.plugins[ab] == aD) { | |
| k = aB.plugins[ab].description; | |
| if (k && !(typeof aB.mimeTypes != aq && aB.mimeTypes[aE] && !aB.mimeTypes[aE].enabledPlugin)) { | |
| aa = true; | |
| d = false; | |
| k = k.replace(/^.*\s+(\S+\s+\S+$)/, "$1"); | |
| f[0] = parseInt(k.replace(/^(.*)\..*$/, "$1"), 10); | |
| f[1] = parseInt(k.replace(/^.*\.(.*)\s.*$/, "$1"), 10); | |
| f[2] = /[a-zA-Z]/.test(k) ? parseInt(k.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0; | |
| } | |
| } else { | |
| if (typeof af.ActiveXObject != aq) { | |
| try { | |
| var i = new ActiveXObject(X); | |
| if (i) { | |
| k = i.GetVariable("$version"); | |
| if (k) { | |
| d = true; | |
| k = k.split(" ")[1].split(","); | |
| f = [parseInt(k[0], 10), parseInt(k[1], 10), parseInt(k[2], 10)]; | |
| } | |
| } | |
| } catch (b) {} | |
| } | |
| } | |
| return { | |
| w3: a, | |
| pv: f, | |
| wk: g, | |
| ie: d, | |
| win: h, | |
| mac: j | |
| }; | |
| }(), | |
| aK = function () { | |
| if (!ah.w3) { | |
| return; | |
| } | |
| if ((typeof aL.readyState != aq && aL.readyState == "complete") || (typeof aL.readyState == aq && (aL.getElementsByTagName("body")[0] || aL.body))) { | |
| aP(); | |
| } | |
| if (!ak) { | |
| if (typeof aL.addEventListener != aq) { | |
| aL.addEventListener("DOMContentLoaded", aP, false); | |
| } | |
| if (ah.ie && ah.win) { | |
| aL.attachEvent(ax, function () { | |
| if (aL.readyState == "complete") { | |
| aL.detachEvent(ax, arguments.callee); | |
| aP(); | |
| } | |
| }); | |
| if (af == top) { | |
| (function () { | |
| if (ak) { | |
| return; | |
| } | |
| try { | |
| aL.documentElement.doScroll("left"); | |
| } catch (a) { | |
| setTimeout(arguments.callee, 0); | |
| return; | |
| } | |
| aP(); | |
| })(); | |
| } | |
| } | |
| if (ah.wk) { | |
| (function () { | |
| if (ak) { | |
| return; | |
| } | |
| if (!/loaded|complete/.test(aL.readyState)) { | |
| setTimeout(arguments.callee, 0); | |
| return; | |
| } | |
| aP(); | |
| })(); | |
| } | |
| aC(aP); | |
| } | |
| }(); | |
| function aP() { | |
| if (ak) { | |
| return; | |
| } | |
| try { | |
| var b = aL.getElementsByTagName("body")[0].appendChild(ar("span")); | |
| b.parentNode.removeChild(b); | |
| } catch (a) { | |
| return; | |
| } | |
| ak = true; | |
| var d = Z.length; | |
| for (var c = 0; c < d; c++) { | |
| Z[c](); | |
| } | |
| } | |
| function aj(a) { | |
| if (ak) { | |
| a(); | |
| } else { | |
| Z[Z.length] = a; | |
| } | |
| } | |
| function aC(a) { | |
| if (typeof af.addEventListener != aq) { | |
| af.addEventListener("load", a, false); | |
| } else { | |
| if (typeof aL.addEventListener != aq) { | |
| aL.addEventListener("load", a, false); | |
| } else { | |
| if (typeof af.attachEvent != aq) { | |
| aM(af, "onload", a); | |
| } else { | |
| if (typeof af.onload == "function") { | |
| var b = af.onload; | |
| af.onload = function () { | |
| b(); | |
| a(); | |
| }; | |
| } else { | |
| af.onload = a; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| function aN() { | |
| if (aa) { | |
| Y(); | |
| } else { | |
| am(); | |
| } | |
| } | |
| function Y() { | |
| var d = aL.getElementsByTagName("body")[0]; | |
| var b = ar(aD); | |
| b.setAttribute("type", aE); | |
| var a = d.appendChild(b); | |
| if (a) { | |
| var c = 0; | |
| (function () { | |
| if (typeof a.GetVariable != aq) { | |
| var e = a.GetVariable("$version"); | |
| if (e) { | |
| e = e.split(" ")[1].split(","); | |
| ah.pv = [parseInt(e[0], 10), parseInt(e[1], 10), parseInt(e[2], 10)]; | |
| } | |
| } else { | |
| if (c < 10) { | |
| c++; | |
| setTimeout(arguments.callee, 10); | |
| return; | |
| } | |
| } | |
| d.removeChild(b); | |
| a = null; | |
| am(); | |
| })(); | |
| } else { | |
| am(); | |
| } | |
| } | |
| function am() { | |
| var g = aG.length; | |
| if (g > 0) { | |
| for (var h = 0; h < g; h++) { | |
| var c = aG[h].id; | |
| var l = aG[h].callbackFn; | |
| var a = { | |
| success: false, | |
| id: c | |
| }; | |
| if (ah.pv[0] > 0) { | |
| var i = aS(c); | |
| if (i) { | |
| if (ao(aG[h].swfVersion) && !(ah.wk && ah.wk < 312)) { | |
| ay(c, true); | |
| if (l) { | |
| a.success = true; | |
| a.ref = av(c); | |
| l(a); | |
| } | |
| } else { | |
| if (aG[h].expressInstall && au()) { | |
| var e = {}; | |
| e.data = aG[h].expressInstall; | |
| e.width = i.getAttribute("width") || "0"; | |
| e.height = i.getAttribute("height") || "0"; | |
| if (i.getAttribute("class")) { | |
| e.styleclass = i.getAttribute("class"); | |
| } | |
| if (i.getAttribute("align")) { | |
| e.align = i.getAttribute("align"); | |
| } | |
| var f = {}; | |
| var d = i.getElementsByTagName("param"); | |
| var k = d.length; | |
| for (var j = 0; j < k; j++) { | |
| if (d[j].getAttribute("name").toLowerCase() != "movie") { | |
| f[d[j].getAttribute("name")] = d[j].getAttribute("value"); | |
| } | |
| } | |
| ae(e, f, c, l); | |
| } else { | |
| aF(i); | |
| if (l) { | |
| l(a); | |
| } | |
| } | |
| } | |
| } | |
| } else { | |
| ay(c, true); | |
| if (l) { | |
| var b = av(c); | |
| if (b && typeof b.SetVariable != aq) { | |
| a.success = true; | |
| a.ref = b; | |
| } | |
| l(a); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| function av(b) { | |
| var d = null; | |
| var c = aS(b); | |
| if (c && c.nodeName == "OBJECT") { | |
| if (typeof c.SetVariable != aq) { | |
| d = c; | |
| } else { | |
| var a = c.getElementsByTagName(aD)[0]; | |
| if (a) { | |
| d = a; | |
| } | |
| } | |
| } | |
| return d; | |
| } | |
| function au() { | |
| return !aU && ao("6.0.65") && (ah.win || ah.mac) && !(ah.wk && ah.wk < 312); | |
| } | |
| function ae(f, d, h, e) { | |
| aU = true; | |
| ap = e || null; | |
| at = { | |
| success: false, | |
| id: h | |
| }; | |
| var a = aS(h); | |
| if (a) { | |
| if (a.nodeName == "OBJECT") { | |
| aJ = aO(a); | |
| ad = null; | |
| } else { | |
| aJ = a; | |
| ad = h; | |
| } | |
| f.id = ac; | |
| if (typeof f.width == aq || (!/%$/.test(f.width) && parseInt(f.width, 10) < 310)) { | |
| f.width = "310"; | |
| } | |
| if (typeof f.height == aq || (!/%$/.test(f.height) && parseInt(f.height, 10) < 137)) { | |
| f.height = "137"; | |
| } | |
| aL.title = aL.title.slice(0, 47) + " - Flash Player Installation"; | |
| var b = ah.ie && ah.win ? "ActiveX" : "PlugIn", | |
| c = "MMredirectURL=" + af.location.toString().replace(/&/g, "%26") + "&MMplayerType=" + b + "&MMdoctitle=" + aL.title; | |
| if (typeof d.flashvars != aq) { | |
| d.flashvars += "&" + c; | |
| } else { | |
| d.flashvars = c; | |
| } | |
| if (ah.ie && ah.win && a.readyState != 4) { | |
| var g = ar("div"); | |
| h += "SWFObjectNew"; | |
| g.setAttribute("id", h); | |
| a.parentNode.insertBefore(g, a); | |
| a.style.display = "none"; | |
| (function () { | |
| if (a.readyState == 4) { | |
| a.parentNode.removeChild(a); | |
| } else { | |
| setTimeout(arguments.callee, 10); | |
| } | |
| })(); | |
| } | |
| aA(f, d, h); | |
| } | |
| } | |
| function aF(a) { | |
| if (ah.ie && ah.win && a.readyState != 4) { | |
| var b = ar("div"); | |
| a.parentNode.insertBefore(b, a); | |
| b.parentNode.replaceChild(aO(a), b); | |
| a.style.display = "none"; | |
| (function () { | |
| if (a.readyState == 4) { | |
| a.parentNode.removeChild(a); | |
| } else { | |
| setTimeout(arguments.callee, 10); | |
| } | |
| })(); | |
| } else { | |
| a.parentNode.replaceChild(aO(a), a); | |
| } | |
| } | |
| function aO(b) { | |
| var d = ar("div"); | |
| if (ah.win && ah.ie) { | |
| d.innerHTML = b.innerHTML; | |
| } else { | |
| var e = b.getElementsByTagName(aD)[0]; | |
| if (e) { | |
| var a = e.childNodes; | |
| if (a) { | |
| var f = a.length; | |
| for (var c = 0; c < f; c++) { | |
| if (!(a[c].nodeType == 1 && a[c].nodeName == "PARAM") && !(a[c].nodeType == 8)) { | |
| d.appendChild(a[c].cloneNode(true)); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| return d; | |
| } | |
| function aA(e, g, c) { | |
| var d, a = aS(c); | |
| if (ah.wk && ah.wk < 312) { | |
| return d; | |
| } | |
| if (a) { | |
| if (typeof e.id == aq) { | |
| e.id = c; | |
| } | |
| if (ah.ie && ah.win) { | |
| var f = ""; | |
| for (var i in e) { | |
| if (e[i] != Object.prototype[i]) { | |
| if (i.toLowerCase() == "data") { | |
| g.movie = e[i]; | |
| } else { | |
| if (i.toLowerCase() == "styleclass") { | |
| f += ' class="' + e[i] + '"'; | |
| } else { | |
| if (i.toLowerCase() != "classid") { | |
| f += " " + i + '="' + e[i] + '"'; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| var h = ""; | |
| for (var j in g) { | |
| if (g[j] != Object.prototype[j]) { | |
| h += '<param name="' + j + '" value="' + g[j] + '" />'; | |
| } | |
| } | |
| a.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + f + ">" + h + "</object>"; | |
| ag[ag.length] = e.id; | |
| d = aS(e.id); | |
| } else { | |
| var b = ar(aD); | |
| b.setAttribute("type", aE); | |
| for (var k in e) { | |
| if (e[k] != Object.prototype[k]) { | |
| if (k.toLowerCase() == "styleclass") { | |
| b.setAttribute("class", e[k]); | |
| } else { | |
| if (k.toLowerCase() != "classid") { | |
| b.setAttribute(k, e[k]); | |
| } | |
| } | |
| } | |
| } | |
| for (var l in g) { | |
| if (g[l] != Object.prototype[l] && l.toLowerCase() != "movie") { | |
| aQ(b, l, g[l]); | |
| } | |
| } | |
| a.parentNode.replaceChild(b, a); | |
| d = b; | |
| } | |
| } | |
| return d; | |
| } | |
| function aQ(b, d, c) { | |
| var a = ar("param"); | |
| a.setAttribute("name", d); | |
| a.setAttribute("value", c); | |
| b.appendChild(a); | |
| } | |
| function aw(a) { | |
| var b = aS(a); | |
| if (b && b.nodeName == "OBJECT") { | |
| if (ah.ie && ah.win) { | |
| b.style.display = "none"; | |
| (function () { | |
| if (b.readyState == 4) { | |
| aT(a); | |
| } else { | |
| setTimeout(arguments.callee, 10); | |
| } | |
| })(); | |
| } else { | |
| b.parentNode.removeChild(b); | |
| } | |
| } | |
| } | |
| function aT(a) { | |
| var b = aS(a); | |
| if (b) { | |
| for (var c in b) { | |
| if (typeof b[c] == "function") { | |
| b[c] = null; | |
| } | |
| } | |
| b.parentNode.removeChild(b); | |
| } | |
| } | |
| function aS(a) { | |
| var c = null; | |
| try { | |
| c = aL.getElementById(a); | |
| } catch (b) {} | |
| return c; | |
| } | |
| function ar(a) { | |
| return aL.createElement(a); | |
| } | |
| function aM(a, c, b) { | |
| a.attachEvent(c, b); | |
| al[al.length] = [a, c, b]; | |
| } | |
| function ao(a) { | |
| var b = ah.pv, | |
| c = a.split("."); | |
| c[0] = parseInt(c[0], 10); | |
| c[1] = parseInt(c[1], 10) || 0; | |
| c[2] = parseInt(c[2], 10) || 0; | |
| return (b[0] > c[0] || (b[0] == c[0] && b[1] > c[1]) || (b[0] == c[0] && b[1] == c[1] && b[2] >= c[2])) ? true : false; | |
| } | |
| function az(b, f, a, c) { | |
| if (ah.ie && ah.mac) { | |
| return; | |
| } | |
| var e = aL.getElementsByTagName("head")[0]; | |
| if (!e) { | |
| return; | |
| } | |
| var g = (a && typeof a == "string") ? a : "screen"; | |
| if (c) { | |
| aH = null; | |
| an = null; | |
| } | |
| if (!aH || an != g) { | |
| var d = ar("style"); | |
| d.setAttribute("type", "text/css"); | |
| d.setAttribute("media", g); | |
| aH = e.appendChild(d); | |
| if (ah.ie && ah.win && typeof aL.styleSheets != aq && aL.styleSheets.length > 0) { | |
| aH = aL.styleSheets[aL.styleSheets.length - 1]; | |
| } | |
| an = g; | |
| } | |
| if (ah.ie && ah.win) { | |
| if (aH && typeof aH.addRule == aD) { | |
| aH.addRule(b, f); | |
| } | |
| } else { | |
| if (aH && typeof aL.createTextNode != aq) { | |
| aH.appendChild(aL.createTextNode(b + " {" + f + "}")); | |
| } | |
| } | |
| } | |
| function ay(a, c) { | |
| if (!aI) { | |
| return; | |
| } | |
| var b = c ? "visible" : "hidden"; | |
| if (ak && aS(a)) { | |
| aS(a).style.visibility = b; | |
| } else { | |
| az("#" + a, "visibility:" + b); | |
| } | |
| } | |
| function ai(b) { | |
| var a = /[\\\"<>\.;]/; | |
| var c = a.exec(b) != null; | |
| return c && typeof encodeURIComponent != aq ? encodeURIComponent(b) : b; | |
| } | |
| var aR = function () { | |
| if (ah.ie && ah.win) { | |
| window.attachEvent("onunload", function () { | |
| var a = al.length; | |
| for (var b = 0; b < a; b++) { | |
| al[b][0].detachEvent(al[b][1], al[b][2]); | |
| } | |
| var d = ag.length; | |
| for (var c = 0; c < d; c++) { | |
| aw(ag[c]); | |
| } | |
| for (var e in ah) { | |
| ah[e] = null; | |
| } | |
| ah = null; | |
| for (var f in swfobject) { | |
| swfobject[f] = null; | |
| } | |
| swfobject = null; | |
| }); | |
| } | |
| }(); | |
| return { | |
| registerObject: function (a, e, c, b) { | |
| if (ah.w3 && a && e) { | |
| var d = {}; | |
| d.id = a; | |
| d.swfVersion = e; | |
| d.expressInstall = c; | |
| d.callbackFn = b; | |
| aG[aG.length] = d; | |
| ay(a, false); | |
| } else { | |
| if (b) { | |
| b({ | |
| success: false, | |
| id: a | |
| }); | |
| } | |
| } | |
| }, | |
| getObjectById: function (a) { | |
| if (ah.w3) { | |
| return av(a); | |
| } | |
| }, | |
| embedSWF: function (k, e, h, f, c, a, b, i, g, j) { | |
| var d = { | |
| success: false, | |
| id: e | |
| }; | |
| if (ah.w3 && !(ah.wk && ah.wk < 312) && k && e && h && f && c) { | |
| ay(e, false); | |
| aj(function () { | |
| h += ""; | |
| f += ""; | |
| var q = {}; | |
| if (g && typeof g === aD) { | |
| for (var o in g) { | |
| q[o] = g[o]; | |
| } | |
| } | |
| q.data = k; | |
| q.width = h; | |
| q.height = f; | |
| var n = {}; | |
| if (i && typeof i === aD) { | |
| for (var p in i) { | |
| n[p] = i[p]; | |
| } | |
| } | |
| if (b && typeof b === aD) { | |
| for (var l in b) { | |
| if (typeof n.flashvars != aq) { | |
| n.flashvars += "&" + l + "=" + b[l]; | |
| } else { | |
| n.flashvars = l + "=" + b[l]; | |
| } | |
| } | |
| } | |
| if (ao(c)) { | |
| var m = aA(q, n, e); | |
| if (q.id == e) { | |
| ay(e, true); | |
| } | |
| d.success = true; | |
| d.ref = m; | |
| } else { | |
| if (a && au()) { | |
| q.data = a; | |
| ae(q, n, e, j); | |
| return; | |
| } else { | |
| ay(e, true); | |
| } | |
| } | |
| if (j) { | |
| j(d); | |
| } | |
| }); | |
| } else { | |
| if (j) { | |
| j(d); | |
| } | |
| } | |
| }, | |
| switchOffAutoHideShow: function () { | |
| aI = false; | |
| }, | |
| ua: ah, | |
| getFlashPlayerVersion: function () { | |
| return { | |
| major: ah.pv[0], | |
| minor: ah.pv[1], | |
| release: ah.pv[2] | |
| }; | |
| }, | |
| hasFlashPlayerVersion: ao, | |
| createSWF: function (a, b, c) { | |
| if (ah.w3) { | |
| return aA(a, b, c); | |
| } else { | |
| return undefined; | |
| } | |
| }, | |
| showExpressInstall: function (b, a, d, c) { | |
| if (ah.w3 && au()) { | |
| ae(b, a, d, c); | |
| } | |
| }, | |
| removeSWF: function (a) { | |
| if (ah.w3) { | |
| aw(a); | |
| } | |
| }, | |
| createCSS: function (b, a, c, d) { | |
| if (ah.w3) { | |
| az(b, a, c, d); | |
| } | |
| }, | |
| addDomLoadEvent: aj, | |
| addLoadEvent: aC, | |
| getQueryParamValue: function (b) { | |
| var a = aL.location.search || aL.location.hash; | |
| if (a) { | |
| if (/\?/.test(a)) { | |
| a = a.split("?")[1]; | |
| } | |
| if (b == null) { | |
| return ai(a); | |
| } | |
| var c = a.split("&"); | |
| for (var d = 0; d < c.length; d++) { | |
| if (c[d].substring(0, c[d].indexOf("=")) == b) { | |
| return ai(c[d].substring((c[d].indexOf("=") + 1))); | |
| } | |
| } | |
| } | |
| return ""; | |
| }, | |
| expressInstallCallback: function () { | |
| if (aU) { | |
| var a = aS(ac); | |
| if (a && aJ) { | |
| a.parentNode.replaceChild(aJ, a); | |
| if (ad) { | |
| ay(ad, true); | |
| if (ah.ie && ah.win) { | |
| aJ.style.display = "block"; | |
| } | |
| } | |
| if (ap) { | |
| ap(at); | |
| } | |
| } | |
| aU = false; | |
| } | |
| } | |
| }; | |
| }(); | |
| (function () { | |
| if (window.WebSocket) { | |
| return; | |
| } | |
| var a = window.console; | |
| if (!a || !a.log || !a.error) { | |
| a = { | |
| log: function () {}, | |
| error: function () {} | |
| }; | |
| } | |
| if (!swfobject.hasFlashPlayerVersion("10.0.0")) { | |
| a.error("Flash Player >= 10.0.0 is required."); | |
| return; | |
| } | |
| if (location.protocol == "file:") { | |
| a.error("WARNING: web-socket-js doesn't work in file:///... URL unless you set Flash Security Settings properly. Open the page via Web server i.e. http://..."); | |
| } | |
| WebSocket = function (d, e, c, g, f) { | |
| var b = this; | |
| b.__id = WebSocket.__nextId++; | |
| WebSocket.__instances[b.__id] = b; | |
| b.readyState = WebSocket.CONNECTING; | |
| b.bufferedAmount = 0; | |
| b.__events = {}; | |
| if (!e) { | |
| e = []; | |
| } else { | |
| if (typeof e == "string") { | |
| e = [e]; | |
| } | |
| } | |
| setTimeout(function () { | |
| WebSocket.__addTask(function () { | |
| WebSocket.__flash.create(b.__id, d, e, c || null, g || 0, f || null); | |
| }); | |
| }, 0); | |
| }; | |
| WebSocket.prototype.send = function (c) { | |
| if (this.readyState == WebSocket.CONNECTING) { | |
| throw "INVALID_STATE_ERR: Web Socket connection has not been established"; | |
| } | |
| var b = WebSocket.__flash.send(this.__id, encodeURIComponent(c)); | |
| if (b < 0) { | |
| return true; | |
| } else { | |
| this.bufferedAmount += b; | |
| return false; | |
| } | |
| }; | |
| WebSocket.prototype.close = function () { | |
| if (this.readyState == WebSocket.CLOSED || this.readyState == WebSocket.CLOSING) { | |
| return; | |
| } | |
| this.readyState = WebSocket.CLOSING; | |
| WebSocket.__flash.close(this.__id); | |
| }; | |
| WebSocket.prototype.addEventListener = function (c, d, b) { | |
| if (!(c in this.__events)) { | |
| this.__events[c] = []; | |
| } | |
| this.__events[c].push(d); | |
| }; | |
| WebSocket.prototype.removeEventListener = function (e, f, b) { | |
| if (!(e in this.__events)) { | |
| return; | |
| } | |
| var d = this.__events[e]; | |
| for (var c = d.length - 1; c >= 0; --c) { | |
| if (d[c] === f) { | |
| d.splice(c, 1); | |
| break; | |
| } | |
| } | |
| }; | |
| WebSocket.prototype.dispatchEvent = function (e) { | |
| var c = this.__events[e.type] || []; | |
| for (var b = 0; b < c.length; ++b) { | |
| c[b](e); | |
| } | |
| var d = this["on" + e.type]; | |
| if (d) { | |
| d(e); | |
| } | |
| }; | |
| WebSocket.prototype.__handleEvent = function (d) { | |
| if ("readyState" in d) { | |
| this.readyState = d.readyState; | |
| } | |
| if ("protocol" in d) { | |
| this.protocol = d.protocol; | |
| } | |
| var b; | |
| if (d.type == "open" || d.type == "error") { | |
| b = this.__createSimpleEvent(d.type); | |
| } else { | |
| if (d.type == "close") { | |
| b = this.__createSimpleEvent("close"); | |
| } else { | |
| if (d.type == "message") { | |
| var c = decodeURIComponent(d.message); | |
| b = this.__createMessageEvent("message", c); | |
| } else { | |
| throw "unknown event type: " + d.type; | |
| } | |
| } | |
| } | |
| this.dispatchEvent(b); | |
| }; | |
| WebSocket.prototype.__createSimpleEvent = function (b) { | |
| if (document.createEvent && window.Event) { | |
| var c = document.createEvent("Event"); | |
| c.initEvent(b, false, false); | |
| return c; | |
| } else { | |
| return { | |
| type: b, | |
| bubbles: false, | |
| cancelable: false | |
| }; | |
| } | |
| }; | |
| WebSocket.prototype.__createMessageEvent = function (b, d) { | |
| if (document.createEvent && window.MessageEvent && !window.opera) { | |
| var c = document.createEvent("MessageEvent"); | |
| c.initMessageEvent("message", false, false, d, null, null, window, null); | |
| return c; | |
| } else { | |
| return { | |
| type: b, | |
| data: d, | |
| bubbles: false, | |
| cancelable: false | |
| }; | |
| } | |
| }; | |
| WebSocket.CONNECTING = 0; | |
| WebSocket.OPEN = 1; | |
| WebSocket.CLOSING = 2; | |
| WebSocket.CLOSED = 3; | |
| WebSocket.__flash = null; | |
| WebSocket.__instances = {}; | |
| WebSocket.__tasks = []; | |
| WebSocket.__nextId = 0; | |
| WebSocket.loadFlashPolicyFile = function (b) { | |
| WebSocket.__addTask(function () { | |
| WebSocket.__flash.loadManualPolicyFile(b); | |
| }); | |
| }; | |
| WebSocket.__initialize = function () { | |
| if (WebSocket.__flash) { | |
| return; | |
| } | |
| if (WebSocket.__swfLocation) { | |
| window.WEB_SOCKET_SWF_LOCATION = WebSocket.__swfLocation; | |
| } | |
| if (!window.WEB_SOCKET_SWF_LOCATION) { | |
| a.error("[WebSocket] set WEB_SOCKET_SWF_LOCATION to location of WebSocketMain.swf"); | |
| return; | |
| } | |
| var b = document.createElement("div"); | |
| b.id = "webSocketContainer"; | |
| b.style.position = "absolute"; | |
| if (WebSocket.__isFlashLite()) { | |
| b.style.left = "0px"; | |
| b.style.top = "0px"; | |
| } else { | |
| b.style.left = "-100px"; | |
| b.style.top = "-100px"; | |
| } | |
| var c = document.createElement("div"); | |
| c.id = "webSocketFlash"; | |
| b.appendChild(c); | |
| document.body.appendChild(b); | |
| swfobject.embedSWF(WEB_SOCKET_SWF_LOCATION, "webSocketFlash", "1", "1", "10.0.0", null, null, { | |
| hasPriority: true, | |
| swliveconnect: true, | |
| allowScriptAccess: "always" | |
| }, null, function (d) { | |
| if (!d.success) { | |
| a.error("[WebSocket] swfobject.embedSWF failed"); | |
| } | |
| }); | |
| }; | |
| WebSocket.__onFlashInitialized = function () { | |
| setTimeout(function () { | |
| WebSocket.__flash = document.getElementById("webSocketFlash"); | |
| WebSocket.__flash.setCallerUrl(location.href); | |
| WebSocket.__flash.setDebug( !! window.WEB_SOCKET_DEBUG); | |
| for (var b = 0; b < WebSocket.__tasks.length; ++b) { | |
| WebSocket.__tasks[b](); | |
| } | |
| WebSocket.__tasks = []; | |
| }, 0); | |
| }; | |
| WebSocket.__onFlashEvent = function () { | |
| setTimeout(function () { | |
| try { | |
| var c = WebSocket.__flash.receiveEvents(); | |
| for (var b = 0; b < c.length; ++b) { | |
| WebSocket.__instances[c[b].webSocketId].__handleEvent(c[b]); | |
| } | |
| } catch (d) { | |
| a.error(d); | |
| } | |
| }, 0); | |
| return true; | |
| }; | |
| WebSocket.__log = function (b) { | |
| a.log(decodeURIComponent(b)); | |
| }; | |
| WebSocket.__error = function (b) { | |
| a.error(decodeURIComponent(b)); | |
| }; | |
| WebSocket.__addTask = function (b) { | |
| if (WebSocket.__flash) { | |
| b(); | |
| } else { | |
| WebSocket.__tasks.push(b); | |
| } | |
| }; | |
| WebSocket.__isFlashLite = function () { | |
| if (!window.navigator || !window.navigator.mimeTypes) { | |
| return false; | |
| } | |
| var b = window.navigator.mimeTypes["application/x-shockwave-flash"]; | |
| if (!b || !b.enabledPlugin || !b.enabledPlugin.filename) { | |
| return false; | |
| } | |
| return b.enabledPlugin.filename.match(/flashlite/i) ? true : false; | |
| }; | |
| if (!window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION) { | |
| if (window.addEventListener) { | |
| window.addEventListener("load", function () { | |
| WebSocket.__initialize(); | |
| }, false); | |
| } else { | |
| window.attachEvent("onload", function () { | |
| WebSocket.__initialize(); | |
| }); | |
| } | |
| } | |
| })(); | |
| (function (c) { | |
| var b = null; | |
| function a(aC, O) { | |
| this.flashVersion = 8; | |
| this.debugMode = true; | |
| this.debugFlash = false; | |
| this.useConsole = true; | |
| this.consoleOnly = false; | |
| this.waitForWindowLoad = false; | |
| this.nullURL = "about:blank"; | |
| this.allowPolling = true; | |
| this.useFastPolling = false; | |
| this.useMovieStar = true; | |
| this.bgColor = "#ffffff"; | |
| this.useHighPerformance = false; | |
| this.flashPollingInterval = null; | |
| this.flashLoadTimeout = 1000; | |
| this.wmode = null; | |
| this.allowScriptAccess = "always"; | |
| this.useFlashBlock = false; | |
| this.useHTML5Audio = false; | |
| this.html5Test = /^probably$/i; | |
| this.useGlobalHTML5Audio = true; | |
| this.requireFlash = false; | |
| this.audioFormats = { | |
| mp3: { | |
| type: ['audio/mpeg; codecs="mp3"', "audio/mpeg", "audio/mp3", "audio/MPA", "audio/mpa-robust"], | |
| required: true | |
| }, | |
| mp4: { | |
| related: ["aac", "m4a"], | |
| type: ['audio/mp4; codecs="mp4a.40.2"', "audio/aac", "audio/x-m4a", "audio/MP4A-LATM", "audio/mpeg4-generic"], | |
| required: true | |
| }, | |
| ogg: { | |
| type: ["audio/ogg; codecs=vorbis"], | |
| required: false | |
| }, | |
| wav: { | |
| type: ['audio/wav; codecs="1"', "audio/wav", "audio/wave", "audio/x-wav"], | |
| required: false | |
| } | |
| }; | |
| this.defaultOptions = { | |
| autoLoad: false, | |
| stream: true, | |
| autoPlay: false, | |
| loops: 1, | |
| onid3: null, | |
| onload: null, | |
| whileloading: null, | |
| onplay: null, | |
| onpause: null, | |
| onresume: null, | |
| whileplaying: null, | |
| onstop: null, | |
| onfailure: null, | |
| onfinish: null, | |
| onbeforefinish: null, | |
| onbeforefinishtime: 5000, | |
| onbeforefinishcomplete: null, | |
| onjustbeforefinish: null, | |
| onjustbeforefinishtime: 200, | |
| multiShot: true, | |
| multiShotEvents: false, | |
| position: null, | |
| pan: 0, | |
| type: null, | |
| usePolicyFile: false, | |
| volume: 100 | |
| }; | |
| this.flash9Options = { | |
| isMovieStar: null, | |
| usePeakData: false, | |
| useWaveformData: false, | |
| useEQData: false, | |
| onbufferchange: null, | |
| ondataerror: null | |
| }; | |
| this.movieStarOptions = { | |
| bufferTime: 3, | |
| serverURL: null, | |
| onconnect: null, | |
| duration: null | |
| }; | |
| this.version = null; | |
| this.versionNumber = "V2.97a.20110424"; | |
| this.movieURL = null; | |
| this.url = (aC || null); | |
| this.altURL = null; | |
| this.swfLoaded = false; | |
| this.enabled = false; | |
| this.o = null; | |
| this.movieID = "sm2-container"; | |
| this.id = (O || "sm2movie"); | |
| this.swfCSS = { | |
| swfBox: "sm2-object-box", | |
| swfDefault: "movieContainer", | |
| swfError: "swf_error", | |
| swfTimedout: "swf_timedout", | |
| swfLoaded: "swf_loaded", | |
| swfUnblocked: "swf_unblocked", | |
| sm2Debug: "sm2_debug", | |
| highPerf: "high_performance", | |
| flashDebug: "flash_debug" | |
| }; | |
| this.oMC = null; | |
| this.sounds = {}; | |
| this.soundIDs = []; | |
| this.muted = false; | |
| this.debugID = "soundmanager-debug"; | |
| this.debugURLParam = /([#?&])debug=1/i; | |
| this.specialWmodeCase = false; | |
| this.didFlashBlock = false; | |
| this.filePattern = null; | |
| this.filePatterns = { | |
| flash8: /\.mp3(\?.*)?$/i, | |
| flash9: /\.mp3(\?.*)?$/i | |
| }; | |
| this.baseMimeTypes = /^\s*audio\/(?:x-)?(?:mp(?:eg|3))\s*(?:$|;)/i; | |
| this.netStreamMimeTypes = /^\s*audio\/(?:x-)?(?:mp(?:eg|3))\s*(?:$|;)/i; | |
| this.netStreamTypes = ["aac", "flv", "mov", "mp4", "m4v", "f4v", "m4a", "mp4v", "3gp", "3g2"]; | |
| this.netStreamPattern = new RegExp("\\.(" + this.netStreamTypes.join("|") + ")(\\?.*)?$", "i"); | |
| this.mimePattern = this.baseMimeTypes; | |
| this.features = { | |
| buffering: false, | |
| peakData: false, | |
| waveformData: false, | |
| eqData: false, | |
| movieStar: false | |
| }; | |
| this.sandbox = { | |
| type: null, | |
| types: { | |
| remote: "remote (domain-based) rules", | |
| localWithFile: "local with file access (no internet access)", | |
| localWithNetwork: "local with network (internet access only, no local access)", | |
| localTrusted: "local, trusted (local+internet access)" | |
| }, | |
| description: null, | |
| noRemote: null, | |
| noLocal: null | |
| }; | |
| this.hasHTML5 = null; | |
| this.html5 = { | |
| usingFlash: null | |
| }; | |
| this.ignoreFlash = false; | |
| var R, aR = this, | |
| aA = "soundManager", | |
| ao = aA + "::", | |
| aF = "HTML5::", | |
| W, aa = navigator.userAgent, | |
| k = c, | |
| l = k.location.href.toString(), | |
| e = this.flashVersion, | |
| aD = document, | |
| ac, aw, aj = [], | |
| m = true, | |
| af, at = false, | |
| aK = false, | |
| aI = false, | |
| F = false, | |
| u = false, | |
| z, aG = 0, | |
| T, ai, aL, aP, ap, au, ah, t, J, aB, S, L, s, aM, ax, an, aH, ay, ak, V = ["log", "info", "warn", "error"], | |
| N = 8, | |
| U, am, h, o = null, | |
| aq = null, | |
| X, i, I, x, Z, w, d, ad, aS = false, | |
| C = false, | |
| y, q, v, Q, ag = null, | |
| ae, A, aQ = false, | |
| av, p, P, aO, r, j = Array.prototype.slice, | |
| aJ = false, | |
| g, aN, Y, ar = aa.match(/pre\//i), | |
| D = aa.match(/(ipad|iphone|ipod)/i), | |
| K = (aa.match(/mobile/i) || ar || D), | |
| f = aa.match(/msie/i), | |
| n = aa.match(/webkit/i), | |
| B = (aa.match(/safari/i) && !aa.match(/chrome/i)), | |
| H = (aa.match(/opera/i)), | |
| al = (!l.match(/usehtml5audio/i) && !l.match(/sm2\-ignorebadua/i) && B && aa.match(/OS X 10_6_([3-9])/i)), | |
| az = (typeof console !== "undefined" && typeof console.log !== "undefined"), | |
| aE = (typeof aD.hasFocus !== "undefined" ? aD.hasFocus() : null), | |
| ab = (typeof aD.hasFocus === "undefined" && B), | |
| G = !ab; | |
| this._use_maybe = (l.match(/sm2\-useHTML5Maybe\=1/i)); | |
| this._overHTTP = (aD.location ? aD.location.protocol.match(/http/i) : null); | |
| this._http = (!this._overHTTP ? "http:" : ""); | |
| this.useAltURL = !this._overHTTP; | |
| this._global_a = null; | |
| if (D || ar) { | |
| aR.useHTML5Audio = true; | |
| aR.ignoreFlash = true; | |
| if (aR.useGlobalHTML5Audio) { | |
| aJ = true; | |
| } | |
| } | |
| if (ar || this._use_maybe) { | |
| aR.html5Test = /^(probably|maybe)$/i; | |
| }(function () { | |
| var aV = "#sm2-usehtml5audio=", | |
| aU = l, | |
| aT = null; | |
| if (aU.indexOf(aV) !== -1) { | |
| aT = (aU.charAt(aU.indexOf(aV) + aV.length) === "1"); | |
| if (typeof console !== "undefined" && typeof console.log !== "undefined") { | |
| console.log((aT ? "Enabling " : "Disabling ") + "useHTML5Audio via URL parameter"); | |
| } | |
| aR.useHTML5Audio = aT; | |
| } | |
| }()); | |
| this.ok = function () { | |
| return (ag ? (aI && !F) : (aR.useHTML5Audio && aR.hasHTML5)); | |
| }; | |
| this.supported = this.ok; | |
| this.getMovie = function (aT) { | |
| return f ? k[aT] : (B ? W(aT) || aD[aT] : W(aT)); | |
| }; | |
| this.createSound = function (aV) { | |
| var aY = aA + ".createSound(): ", | |
| aX = null, | |
| aW = null, | |
| aU = null; | |
| if (!aI || !aR.ok()) { | |
| d(aY + X(!aI ? "notReady" : "notOK")); | |
| return false; | |
| } | |
| if (arguments.length === 2) { | |
| aV = { | |
| id: arguments[0], | |
| url: arguments[1] | |
| }; | |
| } | |
| aX = ai(aV); | |
| aU = aX; | |
| if (aU.id.toString().charAt(0).match(/^[0-9]$/)) { | |
| aR._wD(aY + X("badID", aU.id), 2); | |
| } | |
| aR._wD(aY + aU.id + " (" + aU.url + ")", 1); | |
| if (ad(aU.id, true)) { | |
| aR._wD(aY + aU.id + " exists", 1); | |
| return aR.sounds[aU.id]; | |
| } | |
| function aT() { | |
| aX = Z(aX); | |
| aR.sounds[aU.id] = new R(aU); | |
| aR.soundIDs.push(aU.id); | |
| return aR.sounds[aU.id]; | |
| } | |
| if (A(aU)) { | |
| aW = aT(); | |
| aR._wD("Loading sound " + aU.id + " via HTML5"); | |
| aW._setup_html5(aU); | |
| } else { | |
| if (e > 8 && aR.useMovieStar) { | |
| if (aU.isMovieStar === null) { | |
| aU.isMovieStar = ((aU.serverURL || (aU.type ? aU.type.match(aR.netStreamPattern) : false) || aU.url.match(aR.netStreamPattern)) ? true : false); | |
| } | |
| if (aU.isMovieStar) { | |
| aR._wD(aY + "using MovieStar handling"); | |
| } | |
| if (aU.isMovieStar) { | |
| if (aU.usePeakData) { | |
| z("noPeak"); | |
| aU.usePeakData = false; | |
| } | |
| if (aU.loops > 1) { | |
| z("noNSLoop"); | |
| } | |
| } | |
| } | |
| aU = w(aU, aY); | |
| aW = aT(); | |
| if (e === 8) { | |
| aR.o._createSound(aU.id, aU.onjustbeforefinishtime, aU.loops || 1, aU.usePolicyFile); | |
| } else { | |
| aR.o._createSound(aU.id, aU.url, aU.onjustbeforefinishtime, aU.usePeakData, aU.useWaveformData, aU.useEQData, aU.isMovieStar, (aU.isMovieStar ? aU.bufferTime : false), aU.loops || 1, aU.serverURL, aU.duration || null, aU.autoPlay, true, aU.autoLoad, aU.usePolicyFile); | |
| if (!aU.serverURL) { | |
| aW.connected = true; | |
| if (aU.onconnect) { | |
| aU.onconnect.apply(aW); | |
| } | |
| } | |
| } | |
| if ((aU.autoLoad || aU.autoPlay) && !aU.serverURL) { | |
| aW.load(aU); | |
| } | |
| } | |
| if (aU.autoPlay && !aU.serverURL) { | |
| aW.play(); | |
| } | |
| return aW; | |
| }; | |
| this.destroySound = function (aT, aW) { | |
| if (!ad(aT)) { | |
| return false; | |
| } | |
| var aV = aR.sounds[aT], | |
| aU; | |
| aV._iO = {}; | |
| aV.stop(); | |
| aV.unload(); | |
| for (aU = 0; aU < aR.soundIDs.length; aU++) { | |
| if (aR.soundIDs[aU] === aT) { | |
| aR.soundIDs.splice(aU, 1); | |
| break; | |
| } | |
| } | |
| if (!aW) { | |
| aV.destruct(true); | |
| } | |
| aV = null; | |
| delete aR.sounds[aT]; | |
| return true; | |
| }; | |
| this.load = function (aT, aU) { | |
| if (!ad(aT)) { | |
| return false; | |
| } | |
| return aR.sounds[aT].load(aU); | |
| }; | |
| this.unload = function (aT) { | |
| if (!ad(aT)) { | |
| return false; | |
| } | |
| return aR.sounds[aT].unload(); | |
| }; | |
| this.play = function (aT, aU) { | |
| var aV = aA + ".play(): "; | |
| if (!aI || !aR.ok()) { | |
| d(aV + X(!aI ? "notReady" : "notOK")); | |
| return false; | |
| } | |
| if (!ad(aT)) { | |
| if (!(aU instanceof Object)) { | |
| aU = { | |
| url: aU | |
| }; | |
| } | |
| if (aU && aU.url) { | |
| aR._wD(aV + 'attempting to create "' + aT + '"', 1); | |
| aU.id = aT; | |
| return aR.createSound(aU).play(); | |
| } else { | |
| return false; | |
| } | |
| } | |
| return aR.sounds[aT].play(aU); | |
| }; | |
| this.start = this.play; | |
| this.setPosition = function (aT, aU) { | |
| if (!ad(aT)) { | |
| return false; | |
| } | |
| return aR.sounds[aT].setPosition(aU); | |
| }; | |
| this.stop = function (aT) { | |
| if (!ad(aT)) { | |
| return false; | |
| } | |
| aR._wD(aA + ".stop(" + aT + ")", 1); | |
| return aR.sounds[aT].stop(); | |
| }; | |
| this.stopAll = function () { | |
| aR._wD(aA + ".stopAll()", 1); | |
| for (var aT in aR.sounds) { | |
| if (aR.sounds[aT] instanceof R) { | |
| aR.sounds[aT].stop(); | |
| } | |
| } | |
| }; | |
| this.pause = function (aT) { | |
| if (!ad(aT)) { | |
| return false; | |
| } | |
| return aR.sounds[aT].pause(); | |
| }; | |
| this.pauseAll = function () { | |
| for (var aT = aR.soundIDs.length; aT--;) { | |
| aR.sounds[aR.soundIDs[aT]].pause(); | |
| } | |
| }; | |
| this.resume = function (aT) { | |
| if (!ad(aT)) { | |
| return false; | |
| } | |
| return aR.sounds[aT].resume(); | |
| }; | |
| this.resumeAll = function () { | |
| for (var aT = aR.soundIDs.length; aT--;) { | |
| aR.sounds[aR.soundIDs[aT]].resume(); | |
| } | |
| }; | |
| this.togglePause = function (aT) { | |
| if (!ad(aT)) { | |
| return false; | |
| } | |
| return aR.sounds[aT].togglePause(); | |
| }; | |
| this.setPan = function (aT, aU) { | |
| if (!ad(aT)) { | |
| return false; | |
| } | |
| return aR.sounds[aT].setPan(aU); | |
| }; | |
| this.setVolume = function (aU, aT) { | |
| if (!ad(aU)) { | |
| return false; | |
| } | |
| return aR.sounds[aU].setVolume(aT); | |
| }; | |
| this.mute = function (aT) { | |
| var aV = aA + ".mute(): ", | |
| aU = 0; | |
| if (typeof aT !== "string") { | |
| aT = null; | |
| } | |
| if (!aT) { | |
| aR._wD(aV + "Muting all sounds"); | |
| for (aU = aR.soundIDs.length; aU--;) { | |
| aR.sounds[aR.soundIDs[aU]].mute(); | |
| } | |
| aR.muted = true; | |
| } else { | |
| if (!ad(aT)) { | |
| return false; | |
| } | |
| aR._wD(aV + 'Muting "' + aT + '"'); | |
| return aR.sounds[aT].mute(); | |
| } | |
| return true; | |
| }; | |
| this.muteAll = function () { | |
| aR.mute(); | |
| }; | |
| this.unmute = function (aT) { | |
| var aV = aA + ".unmute(): ", | |
| aU; | |
| if (typeof aT !== "string") { | |
| aT = null; | |
| } | |
| if (!aT) { | |
| aR._wD(aV + "Unmuting all sounds"); | |
| for (aU = aR.soundIDs.length; aU--;) { | |
| aR.sounds[aR.soundIDs[aU]].unmute(); | |
| } | |
| aR.muted = false; | |
| } else { | |
| if (!ad(aT)) { | |
| return false; | |
| } | |
| aR._wD(aV + 'Unmuting "' + aT + '"'); | |
| return aR.sounds[aT].unmute(); | |
| } | |
| return true; | |
| }; | |
| this.unmuteAll = function () { | |
| aR.unmute(); | |
| }; | |
| this.toggleMute = function (aT) { | |
| if (!ad(aT)) { | |
| return false; | |
| } | |
| return aR.sounds[aT].toggleMute(); | |
| }; | |
| this.getMemoryUse = function () { | |
| if (e === 8) { | |
| return 0; | |
| } | |
| if (aR.o) { | |
| return parseInt(aR.o._getMemoryUse(), 10); | |
| } | |
| }; | |
| this.disable = function (aU) { | |
| if (typeof aU === "undefined") { | |
| aU = false; | |
| } | |
| if (F) { | |
| return false; | |
| } | |
| F = true; | |
| z("shutdown", 1); | |
| for (var aT = aR.soundIDs.length; aT--;) { | |
| U(aR.sounds[aR.soundIDs[aT]]); | |
| } | |
| T(aU); | |
| r.remove(k, "load", ap); | |
| return true; | |
| }; | |
| this.canPlayMIME = function (aU) { | |
| var aT; | |
| if (aR.hasHTML5) { | |
| aT = av({ | |
| type: aU | |
| }); | |
| } | |
| if (!ag || aT) { | |
| return aT; | |
| } else { | |
| return (aU ? (aU.match(aR.mimePattern) ? true : false) : null); | |
| } | |
| }; | |
| this.canPlayURL = function (aU) { | |
| var aT; | |
| if (aR.hasHTML5) { | |
| aT = av(aU); | |
| } | |
| if (!ag || aT) { | |
| return aT; | |
| } else { | |
| return (aU ? (aU.match(aR.filePattern) ? true : false) : null); | |
| } | |
| }; | |
| this.canPlayLink = function (aT) { | |
| if (typeof aT.type !== "undefined" && aT.type) { | |
| if (aR.canPlayMIME(aT.type)) { | |
| return true; | |
| } | |
| } | |
| return aR.canPlayURL(aT.href); | |
| }; | |
| this.getSoundById = function (aU, aV) { | |
| if (!aU) { | |
| throw new Error(aA + ".getSoundById(): sID is null/undefined"); | |
| } | |
| var aT = aR.sounds[aU]; | |
| if (!aT && !aV) { | |
| aR._wD('"' + aU + '" is an invalid sound ID.', 2); | |
| } | |
| return aT; | |
| }; | |
| this.onready = function (aU, aT) { | |
| var aV = "onready"; | |
| if (aU && aU instanceof Function) { | |
| if (aI) { | |
| z("queue", aV); | |
| } | |
| if (!aT) { | |
| aT = k; | |
| } | |
| aL(aV, aU, aT); | |
| aP(); | |
| return true; | |
| } else { | |
| throw X("needFunction", aV); | |
| } | |
| }; | |
| this.ontimeout = function (aU, aT) { | |
| var aV = "ontimeout"; | |
| if (aU && aU instanceof Function) { | |
| if (aI) { | |
| z("queue"); | |
| } | |
| if (!aT) { | |
| aT = k; | |
| } | |
| aL(aV, aU, aT); | |
| aP({ | |
| type: aV | |
| }); | |
| return true; | |
| } else { | |
| throw X("needFunction", aV); | |
| } | |
| }; | |
| this.getMoviePercent = function () { | |
| return (aR.o && typeof aR.o.PercentLoaded !== "undefined" ? aR.o.PercentLoaded() : null); | |
| }; | |
| this._writeDebug = function (aU, a0, aW) { | |
| var aZ = "soundmanager-debug", | |
| aY, aX, aT; | |
| if (!aR.debugMode) { | |
| return false; | |
| } | |
| if (typeof aW !== "undefined" && aW) { | |
| aU = aU + " | " + new Date().getTime(); | |
| } | |
| if (az && aR.useConsole) { | |
| aT = V[a0]; | |
| if (typeof console[aT] !== "undefined") { | |
| console[aT](aU); | |
| } else { | |
| console.log(aU); | |
| } | |
| if (aR.useConsoleOnly) { | |
| return true; | |
| } | |
| } | |
| try { | |
| aY = W(aZ); | |
| if (!aY) { | |
| return false; | |
| } | |
| aX = aD.createElement("div"); | |
| if (++aG % 2 === 0) { | |
| aX.className = "sm2-alt"; | |
| } | |
| if (typeof a0 === "undefined") { | |
| a0 = 0; | |
| } else { | |
| a0 = parseInt(a0, 10); | |
| } | |
| aX.appendChild(aD.createTextNode(aU)); | |
| if (a0) { | |
| if (a0 >= 2) { | |
| aX.style.fontWeight = "bold"; | |
| } | |
| if (a0 === 3) { | |
| aX.style.color = "#ff3333"; | |
| } | |
| } | |
| aY.insertBefore(aX, aY.firstChild); | |
| } catch (aV) {} | |
| aY = null; | |
| return true; | |
| }; | |
| this._wD = this._writeDebug; | |
| this._debug = function () { | |
| z("currentObj", 1); | |
| for (var aU = 0, aT = aR.soundIDs.length; aU < aT; aU++) { | |
| aR.sounds[aR.soundIDs[aU]]._debug(); | |
| } | |
| }; | |
| this.reboot = function () { | |
| aR._wD(aA + ".reboot()"); | |
| if (aR.soundIDs.length) { | |
| aR._wD("Destroying " + aR.soundIDs.length + " SMSound objects..."); | |
| } | |
| var aU, aT; | |
| for (aU = aR.soundIDs.length; aU--;) { | |
| aR.sounds[aR.soundIDs[aU]].destruct(); | |
| } | |
| try { | |
| if (f) { | |
| aq = aR.o.innerHTML; | |
| } | |
| o = aR.o.parentNode.removeChild(aR.o); | |
| aR._wD("Flash movie removed."); | |
| } catch (aV) { | |
| z("badRemove", 2); | |
| } | |
| aq = o = null; | |
| aR.enabled = aI = aS = C = at = aK = F = aR.swfLoaded = false; | |
| aR.soundIDs = aR.sounds = []; | |
| aR.o = null; | |
| for (aU in aj) { | |
| if (aj.hasOwnProperty(aU)) { | |
| for (aT = aj[aU].length; aT--;) { | |
| aj[aU][aT].fired = false; | |
| } | |
| } | |
| } | |
| aR._wD(aA + ": Rebooting..."); | |
| k.setTimeout(function () { | |
| aR.beginDelayedInit(); | |
| }, 20); | |
| }; | |
| this.destruct = function () { | |
| aR._wD(aA + ".destruct()"); | |
| aR.disable(true); | |
| }; | |
| this.beginDelayedInit = function () { | |
| u = true; | |
| aM(); | |
| setTimeout(S, 20); | |
| ah(); | |
| }; | |
| function M(aT) { | |
| return function (aU) { | |
| if (!this._t || !this._t._a) { | |
| if (this._t && this._t.sID) { | |
| aR._wD(aF + "ignoring " + aU.type + ": " + this._t.sID); | |
| } else { | |
| aR._wD(aF + "ignoring " + aU.type); | |
| } | |
| return null; | |
| } else { | |
| return aT.call(this, aU); | |
| } | |
| }; | |
| } | |
| this._html5_events = { | |
| abort: M(function (aT) { | |
| aR._wD(aF + "abort: " + this._t.sID); | |
| }), | |
| canplay: M(function (aV) { | |
| aR._wD(aF + "canplay: " + this._t.sID + ", " + this._t.url); | |
| this._t._onbufferchange(0); | |
| var aU = (!isNaN(this._t.position) ? this._t.position / 1000 : null); | |
| this._t._html5_canplay = true; | |
| if (this._t.position && this.currentTime !== aU) { | |
| aR._wD(aF + "canplay: setting position to " + aU + ""); | |
| try { | |
| this.currentTime = aU; | |
| } catch (aT) { | |
| aR._wD(aF + "setting position failed: " + aT.message, 2); | |
| } | |
| } | |
| }), | |
| load: M(function (aT) { | |
| if (!this._t.loaded) { | |
| this._t._onbufferchange(0); | |
| this._t._whileloading(this._t.bytesTotal, this._t.bytesTotal, this._t._get_html5_duration()); | |
| this._t._onload(true); | |
| } | |
| }), | |
| emptied: M(function (aT) { | |
| aR._wD(aF + "emptied: " + this._t.sID); | |
| }), | |
| ended: M(function (aT) { | |
| aR._wD(aF + "ended: " + this._t.sID); | |
| this._t._onfinish(); | |
| }), | |
| error: M(function (aT) { | |
| aR._wD(aF + "error: " + this.error.code); | |
| this._t._onload(false); | |
| }), | |
| loadeddata: M(function (aT) { | |
| aR._wD(aF + "loadeddata: " + this._t.sID); | |
| }), | |
| loadedmetadata: M(function (aT) { | |
| aR._wD(aF + "loadedmetadata: " + this._t.sID); | |
| }), | |
| loadstart: M(function (aT) { | |
| aR._wD(aF + "loadstart: " + this._t.sID); | |
| this._t._onbufferchange(1); | |
| }), | |
| play: M(function (aT) { | |
| aR._wD(aF + "play: " + this._t.sID + ", " + this._t.url); | |
| this._t._onbufferchange(0); | |
| }), | |
| playing: M(function (aT) { | |
| aR._wD(aF + "playing: " + this._t.sID + ", " + this._t.url); | |
| this._t._onbufferchange(0); | |
| }), | |
| progress: M(function (aY) { | |
| if (this._t.loaded) { | |
| return false; | |
| } | |
| var aX, aV, aZ, a2 = 0, | |
| aU = 0, | |
| a1 = (aY.type === "progress"), | |
| aT = aY.target.buffered, | |
| aW = (aY.loaded || 0), | |
| a0 = (aY.total || 1); | |
| if (aT && aT.length) { | |
| for (aX = aT.length; aX--;) { | |
| aU = (aT.end(aX) - aT.start(aX)); | |
| } | |
| aW = aU / aY.target.duration; | |
| if (a1 && aT.length > 1) { | |
| aZ = []; | |
| aV = aT.length; | |
| for (aX = 0; aX < aV; aX++) { | |
| aZ.push(aY.target.buffered.start(aX) + "-" + aY.target.buffered.end(aX)); | |
| } | |
| aR._wD(aF + "progress: timeRanges: " + aZ.join(", ")); | |
| } | |
| if (a1 && !isNaN(aW)) { | |
| aR._wD(aF + "progress: " + this._t.sID + ": " + Math.floor(aW * 100) + "% loaded"); | |
| } | |
| } | |
| if (!isNaN(aW)) { | |
| this._t._onbufferchange(0); | |
| this._t._whileloading(aW, a0, this._t._get_html5_duration()); | |
| if (aW && a0 && aW === a0) { | |
| aR._html5_events.load.call(this, aY); | |
| } | |
| } | |
| }), | |
| ratechange: M(function (aT) { | |
| aR._wD(aF + "ratechange: " + this._t.sID); | |
| }), | |
| suspend: M(function (aT) { | |
| aR._wD(aF + "suspend: " + this._t.sID); | |
| aR._html5_events.progress.call(this, aT); | |
| }), | |
| stalled: M(function (aT) { | |
| aR._wD(aF + "stalled: " + this._t.sID); | |
| }), | |
| timeupdate: M(function (aT) { | |
| this._t._onTimer(); | |
| }), | |
| waiting: M(function (aT) { | |
| aR._wD(aF + "waiting: " + this._t.sID); | |
| this._t._onbufferchange(1); | |
| }) | |
| }; | |
| R = function (aU) { | |
| var aW = this, | |
| aX, aV, aT; | |
| this.sID = aU.id; | |
| this.url = aU.url; | |
| this.options = ai(aU); | |
| this.instanceOptions = this.options; | |
| this._iO = this.instanceOptions; | |
| this.pan = this.options.pan; | |
| this.volume = this.options.volume; | |
| this._lastURL = null; | |
| this.isHTML5 = false; | |
| this._a = null; | |
| this.id3 = {}; | |
| this._debug = function () { | |
| if (aR.debugMode) { | |
| var a0 = null, | |
| a2 = [], | |
| aZ, a1, aY = 64; | |
| for (a0 in aW.options) { | |
| if (aW.options[a0] !== null) { | |
| if (aW.options[a0] instanceof Function) { | |
| aZ = aW.options[a0].toString(); | |
| aZ = aZ.replace(/\s\s+/g, " "); | |
| a1 = aZ.indexOf("{"); | |
| a2.push(" " + a0 + ": {" + aZ.substr(a1 + 1, (Math.min(Math.max(aZ.indexOf("\n") - 1, aY), aY))).replace(/\n/g, "") + "... }"); | |
| } else { | |
| a2.push(" " + a0 + ": " + aW.options[a0]); | |
| } | |
| } | |
| } | |
| aR._wD("SMSound() merged options: {\n" + a2.join(", \n") + "\n}"); | |
| } | |
| }; | |
| this._debug(); | |
| this.load = function (aY) { | |
| var aZ = null; | |
| if (typeof aY !== "undefined") { | |
| aW._iO = ai(aY, aW.options); | |
| aW.instanceOptions = aW._iO; | |
| } else { | |
| aY = aW.options; | |
| aW._iO = aY; | |
| aW.instanceOptions = aW._iO; | |
| if (aW._lastURL && aW._lastURL !== aW.url) { | |
| z("manURL"); | |
| aW._iO.url = aW.url; | |
| aW.url = null; | |
| } | |
| } | |
| if (!aW._iO.url) { | |
| aW._iO.url = aW.url; | |
| } | |
| aR._wD("SMSound.load(): " + aW._iO.url, 1); | |
| if (aW._iO.url === aW.url && aW.readyState !== 0 && aW.readyState !== 2) { | |
| z("onURL", 1); | |
| return aW; | |
| } | |
| aW._lastURL = aW.url; | |
| aW.loaded = false; | |
| aW.readyState = 1; | |
| aW.playState = 0; | |
| if (A(aW._iO)) { | |
| aZ = aW._setup_html5(aW._iO); | |
| if (!aZ._called_load) { | |
| aR._wD(aF + "load: " + aW.sID); | |
| aZ.load(); | |
| aZ._called_load = true; | |
| if (aW._iO.autoPlay) { | |
| aW.play(); | |
| } | |
| } else { | |
| aR._wD("HTML5 ignoring request to load again: " + aW.sID); | |
| } | |
| } else { | |
| try { | |
| aW.isHTML5 = false; | |
| aW._iO = w(Z(aW._iO)); | |
| if (e === 8) { | |
| aR.o._load(aW.sID, aW._iO.url, aW._iO.stream, aW._iO.autoPlay, (aW._iO.whileloading ? 1 : 0), aW._iO.loops || 1, aW._iO.usePolicyFile); | |
| } else { | |
| aR.o._load(aW.sID, aW._iO.url, aW._iO.stream ? true : false, aW._iO.autoPlay ? true : false, aW._iO.loops || 1, aW._iO.autoLoad ? true : false, aW._iO.usePolicyFile); | |
| } | |
| } catch (a0) { | |
| z("smError", 2); | |
| af("onload", false); | |
| ay(); | |
| } | |
| } | |
| return aW; | |
| }; | |
| this.unload = function () { | |
| if (aW.readyState !== 0) { | |
| aR._wD('SMSound.unload(): "' + aW.sID + '"'); | |
| if (!aW.isHTML5) { | |
| if (e === 8) { | |
| aR.o._unload(aW.sID, aR.nullURL); | |
| } else { | |
| aR.o._unload(aW.sID); | |
| } | |
| } else { | |
| aV(); | |
| if (aW._a) { | |
| aW._a.pause(); | |
| aW._a.src = ""; | |
| } | |
| } | |
| aX(); | |
| } | |
| return aW; | |
| }; | |
| this.destruct = function (aY) { | |
| aR._wD('SMSound.destruct(): "' + aW.sID + '"'); | |
| if (!aW.isHTML5) { | |
| aW._iO.onfailure = null; | |
| aR.o._destroySound(aW.sID); | |
| } else { | |
| aV(); | |
| if (aW._a) { | |
| aW._a.pause(); | |
| aW._a.src = ""; | |
| if (!aJ) { | |
| aW._remove_html5_events(); | |
| } | |
| } | |
| } | |
| if (!aY) { | |
| aR.destroySound(aW.sID, true); | |
| } | |
| }; | |
| this.play = function (a0, aZ) { | |
| var a1 = "SMSound.play(): ", | |
| aY; | |
| aZ = aZ === undefined ? true : aZ; | |
| if (!a0) { | |
| a0 = {}; | |
| } | |
| aW._iO = ai(a0, aW._iO); | |
| aW._iO = ai(aW._iO, aW.options); | |
| aW.instanceOptions = aW._iO; | |
| if (aW._iO.serverURL) { | |
| if (!aW.connected) { | |
| if (!aW.getAutoPlay()) { | |
| aR._wD(a1 + " Netstream not connected yet - setting autoPlay"); | |
| aW.setAutoPlay(true); | |
| } | |
| return aW; | |
| } | |
| } | |
| if (A(aW._iO)) { | |
| aW._setup_html5(aW._iO); | |
| aT(); | |
| } | |
| if (aW.playState === 1 && !aW.paused) { | |
| aY = aW._iO.multiShot; | |
| if (!aY) { | |
| aR._wD(a1 + '"' + aW.sID + '" already playing (one-shot)', 1); | |
| return aW; | |
| } else { | |
| aR._wD(a1 + '"' + aW.sID + '" already playing (multi-shot)', 1); | |
| if (aW.isHTML5) { | |
| aW.setPosition(aW._iO.position); | |
| } | |
| } | |
| } | |
| if (!aW.loaded) { | |
| if (aW.readyState === 0) { | |
| aR._wD(a1 + 'Attempting to load "' + aW.sID + '"', 1); | |
| if (!aW.isHTML5) { | |
| aW._iO.autoPlay = true; | |
| aW.load(aW._iO); | |
| } else { | |
| aW.load(aW._iO); | |
| } | |
| } else { | |
| if (aW.readyState === 2) { | |
| aR._wD(a1 + 'Could not load "' + aW.sID + '" - exiting', 2); | |
| return aW; | |
| } else { | |
| aR._wD(a1 + '"' + aW.sID + '" is loading - attempting to play..', 1); | |
| } | |
| } | |
| } else { | |
| aR._wD(a1 + '"' + aW.sID + '"'); | |
| } | |
| if (aW.paused && aW.position && aW.position > 0) { | |
| aR._wD(a1 + '"' + aW.sID + '" is resuming from paused state', 1); | |
| aW.resume(); | |
| } else { | |
| aR._wD(a1 + '"' + aW.sID + '" is starting to play'); | |
| aW.playState = 1; | |
| aW.paused = false; | |
| if (!aW.instanceCount || aW._iO.multiShotEvents || (e > 8 && !aW.isHTML5 && !aW.getAutoPlay())) { | |
| aW.instanceCount++; | |
| } | |
| aW.position = (typeof aW._iO.position !== "undefined" && !isNaN(aW._iO.position) ? aW._iO.position : 0); | |
| if (!aW.isHTML5) { | |
| aW._iO = w(Z(aW._iO)); | |
| } | |
| if (aW._iO.onplay && aZ) { | |
| aW._iO.onplay.apply(aW); | |
| aW._onplay_called = true; | |
| } | |
| aW.setVolume(aW._iO.volume, true); | |
| aW.setPan(aW._iO.pan, true); | |
| if (!aW.isHTML5) { | |
| aR.o._start(aW.sID, aW._iO.loops || 1, (e === 9 ? aW.position : aW.position / 1000)); | |
| } else { | |
| aT(); | |
| aW._setup_html5().play(); | |
| } | |
| } | |
| return aW; | |
| }; | |
| this.start = this.play; | |
| this.stop = function (aY) { | |
| if (aW.playState === 1) { | |
| aW._onbufferchange(0); | |
| aW.resetOnPosition(0); | |
| if (!aW.isHTML5) { | |
| aW.playState = 0; | |
| } | |
| aW.paused = false; | |
| if (aW._iO.onstop) { | |
| aW._iO.onstop.apply(aW); | |
| } | |
| if (!aW.isHTML5) { | |
| aR.o._stop(aW.sID, aY); | |
| if (aW._iO.serverURL) { | |
| aW.unload(); | |
| } | |
| } else { | |
| if (aW._a) { | |
| aW.setPosition(0); | |
| aW._a.pause(); | |
| aW.playState = 0; | |
| aW._onTimer(); | |
| aV(); | |
| aW.unload(); | |
| } | |
| } | |
| aW.instanceCount = 0; | |
| aW._iO = {}; | |
| } | |
| return aW; | |
| }; | |
| this.setAutoPlay = function (aY) { | |
| aR._wD("sound " + aW.sID + " turned autoplay " + (aY ? "on" : "off")); | |
| aW._iO.autoPlay = aY; | |
| if (aW.isHTML5) { | |
| if (aW._a && aY) { | |
| aW.play(); | |
| } | |
| } else { | |
| aR.o._setAutoPlay(aW.sID, aY); | |
| } | |
| if (aY) { | |
| if (!aW.instanceCount && aW.readyState === 1) { | |
| aW.instanceCount++; | |
| aR._wD("sound " + aW.sID + " incremented instance count to " + aW.instanceCount); | |
| } | |
| } | |
| }; | |
| this.getAutoPlay = function () { | |
| return aW._iO.autoPlay; | |
| }; | |
| this.setPosition = function (a2, a1) { | |
| if (a2 === undefined) { | |
| a2 = 0; | |
| } | |
| var a0, aY, aZ, a4 = (aW.isHTML5 ? Math.max(a2, 0) : Math.min(aW.duration || aW._iO.duration, Math.max(a2, 0))); | |
| a0 = aW.position; | |
| aW.position = a4; | |
| aZ = aW.position / 1000; | |
| aW.resetOnPosition(aW.position); | |
| aW._iO.position = a4; | |
| if (!aW.isHTML5) { | |
| aY = e === 9 ? aW.position : aZ; | |
| if (aW.readyState && aW.readyState !== 2) { | |
| aR.o._setPosition(aW.sID, aY, (aW.paused || !aW.playState)); | |
| } | |
| } else { | |
| if (aW._a) { | |
| if (aW._html5_canplay) { | |
| if (aW._a.currentTime !== aZ) { | |
| aR._wD("setPosition(" + aZ + "): setting position"); | |
| try { | |
| aW._a.currentTime = aZ; | |
| } catch (a3) { | |
| aR._wD("setPosition(" + aZ + "): setting position failed: " + a3.message, 2); | |
| } | |
| } | |
| } else { | |
| aR._wD("setPosition(" + aZ + "): delaying, sound not ready"); | |
| } | |
| } | |
| } | |
| if (aW.isHTML5) { | |
| if (aW.paused) { | |
| aW._onTimer(true); | |
| } | |
| } | |
| return aW; | |
| }; | |
| this.pause = function (aY) { | |
| if (aW.paused || (aW.playState === 0 && aW.readyState !== 1)) { | |
| return aW; | |
| } | |
| aR._wD("SMSound.pause()"); | |
| aW.paused = true; | |
| if (!aW.isHTML5) { | |
| if (aY || aY === undefined) { | |
| aR.o._pause(aW.sID); | |
| } | |
| } else { | |
| aW._setup_html5().pause(); | |
| aV(); | |
| } | |
| if (aW._iO.onpause) { | |
| aW._iO.onpause.apply(aW); | |
| } | |
| return aW; | |
| }; | |
| this.resume = function () { | |
| if (!aW.paused) { | |
| return aW; | |
| } | |
| aR._wD("SMSound.resume()"); | |
| aW.paused = false; | |
| aW.playState = 1; | |
| if (!aW.isHTML5) { | |
| if (aW._iO.isMovieStar) { | |
| aW.setPosition(aW.position); | |
| } | |
| aR.o._pause(aW.sID); | |
| } else { | |
| aW._setup_html5().play(); | |
| aT(); | |
| } | |
| if (!aW._onplay_called && aW._iO.onplay) { | |
| aW._iO.onplay.apply(aW); | |
| aW._onplay_called = true; | |
| } else { | |
| if (aW._iO.onresume) { | |
| aW._iO.onresume.apply(aW); | |
| } | |
| } | |
| return aW; | |
| }; | |
| this.togglePause = function () { | |
| aR._wD("SMSound.togglePause()"); | |
| if (aW.playState === 0) { | |
| aW.play({ | |
| position: (e === 9 && !aW.isHTML5 ? aW.position : aW.position / 1000) | |
| }); | |
| return aW; | |
| } | |
| if (aW.paused) { | |
| aW.resume(); | |
| } else { | |
| aW.pause(); | |
| } | |
| return aW; | |
| }; | |
| this.setPan = function (aZ, aY) { | |
| if (typeof aZ === "undefined") { | |
| aZ = 0; | |
| } | |
| if (typeof aY === "undefined") { | |
| aY = false; | |
| } | |
| if (!aW.isHTML5) { | |
| aR.o._setPan(aW.sID, aZ); | |
| } | |
| aW._iO.pan = aZ; | |
| if (!aY) { | |
| aW.pan = aZ; | |
| aW.options.pan = aZ; | |
| } | |
| return aW; | |
| }; | |
| this.setVolume = function (aY, aZ) { | |
| if (typeof aY === "undefined") { | |
| aY = 100; | |
| } | |
| if (typeof aZ === "undefined") { | |
| aZ = false; | |
| } | |
| if (!aW.isHTML5) { | |
| aR.o._setVolume(aW.sID, (aR.muted && !aW.muted) || aW.muted ? 0 : aY); | |
| } else { | |
| if (aW._a) { | |
| aW._a.volume = Math.max(0, Math.min(1, aY / 100)); | |
| } | |
| } | |
| aW._iO.volume = aY; | |
| if (!aZ) { | |
| aW.volume = aY; | |
| aW.options.volume = aY; | |
| } | |
| return aW; | |
| }; | |
| this.mute = function () { | |
| aW.muted = true; | |
| if (!aW.isHTML5) { | |
| aR.o._setVolume(aW.sID, 0); | |
| } else { | |
| if (aW._a) { | |
| aW._a.muted = true; | |
| } | |
| } | |
| return aW; | |
| }; | |
| this.unmute = function () { | |
| aW.muted = false; | |
| var aY = typeof aW._iO.volume !== "undefined"; | |
| if (!aW.isHTML5) { | |
| aR.o._setVolume(aW.sID, aY ? aW._iO.volume : aW.options.volume); | |
| } else { | |
| if (aW._a) { | |
| aW._a.muted = false; | |
| } | |
| } | |
| return aW; | |
| }; | |
| this.toggleMute = function () { | |
| return (aW.muted ? aW.unmute() : aW.mute()); | |
| }; | |
| this.onposition = function (a0, aZ, aY) { | |
| aW._onPositionItems.push({ | |
| position: a0, | |
| method: aZ, | |
| scope: (typeof aY !== "undefined" ? aY : aW), | |
| fired: false | |
| }); | |
| return aW; | |
| }; | |
| this.processOnPosition = function () { | |
| var aZ, a0, aY = aW._onPositionItems.length; | |
| if (!aY || !aW.playState || aW._onPositionFired >= aY) { | |
| return false; | |
| } | |
| for (aZ = aY; aZ--;) { | |
| a0 = aW._onPositionItems[aZ]; | |
| if (!a0.fired && aW.position >= a0.position) { | |
| a0.method.apply(a0.scope, [a0.position]); | |
| a0.fired = true; | |
| aR._onPositionFired++; | |
| } | |
| } | |
| return true; | |
| }; | |
| this.resetOnPosition = function (aY) { | |
| var a0, a1, aZ = aW._onPositionItems.length; | |
| if (!aZ) { | |
| return false; | |
| } | |
| for (a0 = aZ; a0--;) { | |
| a1 = aW._onPositionItems[a0]; | |
| if (a1.fired && aY <= a1.position) { | |
| a1.fired = false; | |
| aR._onPositionFired--; | |
| } | |
| } | |
| return true; | |
| }; | |
| this._onTimer = function (aZ) { | |
| var a0, aY = {}; | |
| if (aW._hasTimer || aZ) { | |
| if (aW._a && (aZ || ((aW.playState > 0 || aW.readyState === 1) && !aW.paused))) { | |
| aW.duration = aW._get_html5_duration(); | |
| aW.durationEstimate = aW.duration; | |
| a0 = aW._a.currentTime ? aW._a.currentTime * 1000 : 0; | |
| aW._whileplaying(a0, aY, aY, aY, aY); | |
| return true; | |
| } else { | |
| aR._wD('_onTimer: Warn for "' + aW.sID + '": ' + (!aW._a ? "Could not find element. " : "") + (aW.playState === 0 ? "playState bad, 0?" : "playState = " + aW.playState + ", OK")); | |
| return false; | |
| } | |
| } | |
| }; | |
| this._get_html5_duration = function () { | |
| var aY = (aW._a ? aW._a.duration * 1000 : (aW._iO ? aW._iO.duration : undefined)); | |
| return (aY && !isNaN(aY) && aY !== Infinity ? aY : (aW._iO ? aW._iO.duration : null)); | |
| }; | |
| aT = function () { | |
| if (aW.isHTML5) { | |
| v(aW); | |
| } | |
| }; | |
| aV = function () { | |
| if (aW.isHTML5) { | |
| Q(aW); | |
| } | |
| }; | |
| aX = function (aY) { | |
| aW._onPositionItems = []; | |
| aW._onPositionFired = 0; | |
| aW._hasTimer = null; | |
| aW._onplay_called = false; | |
| aW._a = null; | |
| aW._html5_canplay = false; | |
| aW.bytesLoaded = null; | |
| aW.bytesTotal = null; | |
| aW.position = null; | |
| aW.duration = (aW._iO && aW._iO.duration ? aW._iO.duration : null); | |
| aW.durationEstimate = null; | |
| aW.failures = 0; | |
| aW.loaded = false; | |
| aW.playState = 0; | |
| aW.paused = false; | |
| aW.readyState = 0; | |
| aW.muted = false; | |
| aW.didBeforeFinish = false; | |
| aW.didJustBeforeFinish = false; | |
| aW.isBuffering = false; | |
| aW.instanceOptions = {}; | |
| aW.instanceCount = 0; | |
| aW.peakData = { | |
| left: 0, | |
| right: 0 | |
| }; | |
| aW.waveformData = { | |
| left: [], | |
| right: [] | |
| }; | |
| aW.eqData = []; | |
| aW.eqData.left = []; | |
| aW.eqData.right = []; | |
| }; | |
| aX(); | |
| this._setup_html5 = function (a0) { | |
| var aZ = ai(aW._iO, a0), | |
| a3 = decodeURI, | |
| a1 = aJ ? aR._global_a : aW._a, | |
| a2 = a3(aZ.url), | |
| aY = (a1 && a1._t ? a1._t.instanceOptions : null); | |
| if (a1) { | |
| if (a1._t && aY.url === aZ.url && (!aW._lastURL || (aW._lastURL === aY.url))) { | |
| return a1; | |
| } | |
| aR._wD("setting new URL on existing object: " + a2 + (aW._lastURL ? ", old URL: " + aW._lastURL : "")); | |
| if (aJ && a1._t && a1._t.playState && aZ.url !== aY.url) { | |
| a1._t.stop(); | |
| } | |
| aX(); | |
| a1.src = aZ.url; | |
| aW.url = aZ.url; | |
| aW._lastURL = aZ.url; | |
| a1._called_load = false; | |
| } else { | |
| aR._wD("creating HTML5 Audio() element with URL: " + a2); | |
| a1 = new Audio(aZ.url); | |
| a1._called_load = false; | |
| if (aJ) { | |
| aR._global_a = a1; | |
| } | |
| } | |
| aW.isHTML5 = true; | |
| aW._a = a1; | |
| a1._t = aW; | |
| aW._add_html5_events(); | |
| a1.loop = (aZ.loops > 1 ? "loop" : ""); | |
| if (aZ.autoLoad || aZ.autoPlay) { | |
| a1.autobuffer = "auto"; | |
| a1.preload = "auto"; | |
| aW.load(); | |
| a1._called_load = true; | |
| } else { | |
| a1.autobuffer = false; | |
| a1.preload = "none"; | |
| } | |
| a1.loop = (aZ.loops > 1 ? "loop" : ""); | |
| return a1; | |
| }; | |
| this._add_html5_events = function () { | |
| if (aW._a._added_events) { | |
| return false; | |
| } | |
| var aY; | |
| function aZ(a1, a0, a2) { | |
| return aW._a ? aW._a.addEventListener(a1, a0, a2 || false) : null; | |
| } | |
| aR._wD(aF + "adding event listeners: " + aW.sID); | |
| aW._a._added_events = true; | |
| for (aY in aR._html5_events) { | |
| if (aR._html5_events.hasOwnProperty(aY)) { | |
| aZ(aY, aR._html5_events[aY]); | |
| } | |
| } | |
| return true; | |
| }; | |
| this._remove_html5_events = function () { | |
| function aY(a1, a0, a2) { | |
| return (aW._a ? aW._a.removeEventListener(a1, a0, a2 || false) : null); | |
| } | |
| aR._wD(aF + "removing event listeners: " + aW.sID); | |
| aW._a._added_events = false; | |
| for (var aZ in aR._html5_events) { | |
| if (aR._html5_events.hasOwnProperty(aZ)) { | |
| aY(aZ, aR._html5_events[aZ]); | |
| } | |
| } | |
| }; | |
| this._whileloading = function (aY, aZ, a1, a0) { | |
| aW.bytesLoaded = aY; | |
| aW.bytesTotal = aZ; | |
| aW.duration = Math.floor(a1); | |
| aW.bufferLength = a0; | |
| if (!aW._iO.isMovieStar) { | |
| if (aW._iO.duration) { | |
| aW.durationEstimate = (aW.duration > aW._iO.duration) ? aW.duration : aW._iO.duration; | |
| } else { | |
| aW.durationEstimate = parseInt((aW.bytesTotal / aW.bytesLoaded) * aW.duration, 10); | |
| } | |
| if (aW.durationEstimate === undefined) { | |
| aW.durationEstimate = aW.duration; | |
| } | |
| if (aW.readyState !== 3 && aW._iO.whileloading) { | |
| aW._iO.whileloading.apply(aW); | |
| } | |
| } else { | |
| aW.durationEstimate = aW.duration; | |
| if (aW.readyState !== 3 && aW._iO.whileloading) { | |
| aW._iO.whileloading.apply(aW); | |
| } | |
| } | |
| }; | |
| this._onid3 = function (a1, aY) { | |
| aR._wD('SMSound._onid3(): "' + this.sID + '" ID3 data received.'); | |
| var a2 = [], | |
| a0, aZ; | |
| for (a0 = 0, aZ = a1.length; a0 < aZ; a0++) { | |
| a2[a1[a0]] = aY[a0]; | |
| } | |
| aW.id3 = ai(aW.id3, a2); | |
| if (aW._iO.onid3) { | |
| aW._iO.onid3.apply(aW); | |
| } | |
| }; | |
| this._whileplaying = function (a0, a1, a3, aZ, a2) { | |
| if (isNaN(a0) || a0 === null) { | |
| return false; | |
| } | |
| if (aW.playState === 0 && a0 > 0) { | |
| a0 = 0; | |
| } | |
| aW.position = a0; | |
| aW.processOnPosition(); | |
| if (e > 8 && !aW.isHTML5) { | |
| if (aW._iO.usePeakData && typeof a1 !== "undefined" && a1) { | |
| aW.peakData = { | |
| left: a1.leftPeak, | |
| right: a1.rightPeak | |
| }; | |
| } | |
| if (aW._iO.useWaveformData && typeof a3 !== "undefined" && a3) { | |
| aW.waveformData = { | |
| left: a3.split(","), | |
| right: aZ.split(",") | |
| }; | |
| } | |
| if (aW._iO.useEQData) { | |
| if (typeof a2 !== "undefined" && a2 && a2.leftEQ) { | |
| var aY = a2.leftEQ.split(","); | |
| aW.eqData = aY; | |
| aW.eqData.left = aY; | |
| if (typeof a2.rightEQ !== "undefined" && a2.rightEQ) { | |
| aW.eqData.right = a2.rightEQ.split(","); | |
| } | |
| } | |
| } | |
| } | |
| if (aW.playState === 1) { | |
| if (!aW.isHTML5 && aR.flashVersion === 8 && !aW.position && aW.isBuffering) { | |
| aW._onbufferchange(0); | |
| } | |
| if (aW._iO.whileplaying) { | |
| aW._iO.whileplaying.apply(aW); | |
| } | |
| if ((aW.loaded || (!aW.loaded && aW._iO.isMovieStar)) && aW._iO.onbeforefinish && aW._iO.onbeforefinishtime && !aW.didBeforeFinish && aW.duration - aW.position <= aW._iO.onbeforefinishtime) { | |
| aW._onbeforefinish(); | |
| } | |
| } | |
| return true; | |
| }; | |
| this._onconnect = function (aY) { | |
| var aZ = "SMSound._onconnect(): "; | |
| aY = (aY === 1); | |
| aR._wD(aZ + '"' + aW.sID + '"' + (aY ? " connected." : " failed to connect? - " + aW.url), (aY ? 1 : 2)); | |
| aW.connected = aY; | |
| if (aY) { | |
| aW.failures = 0; | |
| if (ad(aW.sID)) { | |
| if (aW.getAutoPlay()) { | |
| aW.play(undefined, aW.getAutoPlay()); | |
| } else { | |
| if (aW._iO.autoLoad) { | |
| aW.load(); | |
| } | |
| } | |
| } | |
| if (aW._iO.onconnect) { | |
| aW._iO.onconnect.apply(aW, [aY]); | |
| } | |
| } | |
| }; | |
| this._onload = function (a0) { | |
| var aY = "SMSound._onload(): ", | |
| aZ = (a0 ? true : false); | |
| aR._wD(aY + '"' + aW.sID + '"' + (aZ ? " loaded." : " failed to load? - " + aW.url), (aZ ? 1 : 2)); | |
| if (!aZ && !aW.isHTML5) { | |
| if (aR.sandbox.noRemote === true) { | |
| aR._wD(aY + X("noNet"), 1); | |
| } | |
| if (aR.sandbox.noLocal === true) { | |
| aR._wD(aY + X("noLocal"), 1); | |
| } | |
| } | |
| aW.loaded = aZ; | |
| aW.readyState = aZ ? 3 : 2; | |
| aW._onbufferchange(0); | |
| if (aW._iO.onload) { | |
| aW._iO.onload.apply(aW, [aZ]); | |
| } | |
| return true; | |
| }; | |
| this._onfailure = function (aZ, a0, aY) { | |
| aW.failures++; | |
| aR._wD('SMSound._onfailure(): "' + aW.sID + '" count ' + aW.failures); | |
| if (aW._iO.onfailure && aW.failures === 1) { | |
| aW._iO.onfailure(aW, aZ, a0, aY); | |
| } else { | |
| aR._wD("SMSound._onfailure(): ignoring"); | |
| } | |
| }; | |
| this._onbeforefinish = function () { | |
| if (!aW.didBeforeFinish) { | |
| aW.didBeforeFinish = true; | |
| if (aW._iO.onbeforefinish) { | |
| aR._wD('SMSound._onbeforefinish(): "' + aW.sID + '"'); | |
| aW._iO.onbeforefinish.apply(aW); | |
| } | |
| } | |
| }; | |
| this._onjustbeforefinish = function (aY) { | |
| if (!aW.didJustBeforeFinish) { | |
| aW.didJustBeforeFinish = true; | |
| if (aW._iO.onjustbeforefinish) { | |
| aR._wD('SMSound._onjustbeforefinish(): "' + aW.sID + '"'); | |
| aW._iO.onjustbeforefinish.apply(aW); | |
| } | |
| } | |
| }; | |
| this._onfinish = function () { | |
| var aY = aW._iO.onfinish; | |
| aW._onbufferchange(0); | |
| aW.resetOnPosition(0); | |
| if (aW._iO.onbeforefinishcomplete) { | |
| aW._iO.onbeforefinishcomplete.apply(aW); | |
| } | |
| aW.didBeforeFinish = false; | |
| aW.didJustBeforeFinish = false; | |
| if (aW.instanceCount) { | |
| aW.instanceCount--; | |
| if (!aW.instanceCount) { | |
| aW.playState = 0; | |
| aW.paused = false; | |
| aW.instanceCount = 0; | |
| aW.instanceOptions = {}; | |
| aW._iO = {}; | |
| aV(); | |
| } | |
| if (!aW.instanceCount || aW._iO.multiShotEvents) { | |
| if (aY) { | |
| aR._wD('SMSound._onfinish(): "' + aW.sID + '"'); | |
| aY.apply(aW); | |
| } | |
| } | |
| } | |
| }; | |
| this._onbufferchange = function (aY) { | |
| var aZ = "SMSound._onbufferchange()"; | |
| if (aW.playState === 0) { | |
| return false; | |
| } | |
| if ((aY && aW.isBuffering) || (!aY && !aW.isBuffering)) { | |
| return false; | |
| } | |
| aW.isBuffering = (aY === 1); | |
| if (aW._iO.onbufferchange) { | |
| aR._wD(aZ + ": " + aY); | |
| aW._iO.onbufferchange.apply(aW); | |
| } | |
| return true; | |
| }; | |
| this._ondataerror = function (aY) { | |
| if (aW.playState > 0) { | |
| aR._wD("SMSound._ondataerror(): " + aY); | |
| if (aW._iO.ondataerror) { | |
| aW._iO.ondataerror.apply(aW); | |
| } | |
| } | |
| }; | |
| }; | |
| an = function () { | |
| return (aD.body ? aD.body : (aD._docElement ? aD.documentElement : aD.getElementsByTagName("div")[0])); | |
| }; | |
| W = function (aT) { | |
| return aD.getElementById(aT); | |
| }; | |
| ai = function (aU, aT) { | |
| var aX = {}, | |
| aV, aW, aY; | |
| for (aV in aU) { | |
| if (aU.hasOwnProperty(aV)) { | |
| aX[aV] = aU[aV]; | |
| } | |
| } | |
| aW = (typeof aT === "undefined" ? aR.defaultOptions : aT); | |
| for (aY in aW) { | |
| if (aW.hasOwnProperty(aY) && typeof aX[aY] === "undefined") { | |
| aX[aY] = aW[aY]; | |
| } | |
| } | |
| return aX; | |
| }; | |
| r = (function () { | |
| var aV = (k.attachEvent), | |
| aU = { | |
| add: (aV ? "attachEvent" : "addEventListener"), | |
| remove: (aV ? "detachEvent" : "removeEventListener") | |
| }; | |
| function aX(a1) { | |
| var a0 = j.call(a1), | |
| aZ = a0.length; | |
| if (aV) { | |
| a0[1] = "on" + a0[1]; | |
| if (aZ > 3) { | |
| a0.pop(); | |
| } | |
| } else { | |
| if (aZ === 3) { | |
| a0.push(false); | |
| } | |
| } | |
| return a0; | |
| } | |
| function aW(aZ, a2) { | |
| var a0 = aZ.shift(), | |
| a1 = [aU[a2]]; | |
| if (aV) { | |
| a0[a1](aZ[0], aZ[1]); | |
| } else { | |
| a0[a1].apply(a0, aZ); | |
| } | |
| } | |
| function aY() { | |
| aW(aX(arguments), "add"); | |
| } | |
| function aT() { | |
| aW(aX(arguments), "remove"); | |
| } | |
| return { | |
| add: aY, | |
| remove: aT | |
| }; | |
| }()); | |
| A = function (aT) { | |
| return (!aT.serverURL && (aT.type ? av({ | |
| type: aT.type | |
| }) : av(aT.url) || aQ)); | |
| }; | |
| av = function (aY) { | |
| if (!aR.useHTML5Audio || !aR.hasHTML5) { | |
| return false; | |
| } | |
| var aT, aX, aZ, aV, aW, aU = aR.audioFormats; | |
| if (!p) { | |
| p = []; | |
| for (aW in aU) { | |
| if (aU.hasOwnProperty(aW)) { | |
| p.push(aW); | |
| if (aU[aW].related) { | |
| p = p.concat(aU[aW].related); | |
| } | |
| } | |
| } | |
| p = new RegExp("\\.(" + p.join("|") + ")", "i"); | |
| } | |
| aX = (typeof aY.type !== "undefined" ? aY.type : null); | |
| aV = (typeof aY === "string" ? aY.toLowerCase().match(p) : null); | |
| if (!aV || !aV.length) { | |
| if (!aX) { | |
| return false; | |
| } else { | |
| aZ = aX.indexOf(";"); | |
| aV = (aZ !== -1 ? aX.substr(0, aZ) : aX).substr(6); | |
| } | |
| } else { | |
| aV = aV[0].substr(1); | |
| } | |
| if (aV && typeof aR.html5[aV] !== "undefined") { | |
| return aR.html5[aV]; | |
| } else { | |
| if (!aX) { | |
| if (aV && aR.html5[aV]) { | |
| return aR.html5[aV]; | |
| } else { | |
| aX = "audio/" + aV; | |
| } | |
| } | |
| aT = aR.html5.canPlayType(aX); | |
| aR.html5[aV] = aT; | |
| return aT; | |
| } | |
| }; | |
| aO = function () { | |
| if (!aR.useHTML5Audio || typeof Audio === "undefined") { | |
| return false; | |
| } | |
| var aU = (typeof Audio !== "undefined" ? (H ? new Audio(null) : new Audio()) : null), | |
| aZ, aY = {}, | |
| aW, aX, aT = aN(); | |
| function aV(a1) { | |
| var a3, a4, a2, a0 = false; | |
| if (!aU || typeof aU.canPlayType !== "function") { | |
| return false; | |
| } | |
| if (a1 instanceof Array) { | |
| for (a4 = 0, a2 = a1.length; a4 < a2 && !a0; a4++) { | |
| if (aR.html5[a1[a4]] || aU.canPlayType(a1[a4]).match(aR.html5Test)) { | |
| a0 = true; | |
| aR.html5[a1[a4]] = true; | |
| } | |
| } | |
| return a0; | |
| } else { | |
| a3 = (aU && typeof aU.canPlayType === "function" ? aU.canPlayType(a1) : false); | |
| return (a3 && (a3.match(aR.html5Test) ? true : false)); | |
| } | |
| } | |
| aW = aR.audioFormats; | |
| for (aZ in aW) { | |
| if (aW.hasOwnProperty(aZ)) { | |
| aY[aZ] = aV(aW[aZ].type); | |
| if (aW[aZ] && aW[aZ].related) { | |
| for (aX = aW[aZ].related.length; aX--;) { | |
| aR.html5[aW[aZ].related[aX]] = aY[aZ]; | |
| } | |
| } | |
| } | |
| } | |
| aY.canPlayType = (aU ? aV : null); | |
| aR.html5 = ai(aR.html5, aY); | |
| return true; | |
| }; | |
| L = { | |
| notReady: "Not loaded yet - wait for soundManager.onload()/onready()", | |
| notOK: "Audio support is not available.", | |
| appXHTML: ao + "createMovie(): appendChild/innerHTML set failed. May be app/xhtml+xml DOM-related.", | |
| spcWmode: ao + "createMovie(): Removing wmode, preventing known SWF loading issue(s)", | |
| swf404: aA + ": Verify that %s is a valid path.", | |
| tryDebug: "Try " + aA + ".debugFlash = true for more security details (output goes to SWF.)", | |
| checkSWF: "See SWF output for more debug info.", | |
| localFail: aA + ": Non-HTTP page (" + aD.location.protocol + " URL?) Review Flash player security settings for this special case:\nhttp://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html\nMay need to add/allow path, eg. c:/sm2/ or /users/me/sm2/", | |
| waitFocus: aA + ": Special case: Waiting for focus-related event..", | |
| waitImpatient: aA + ": Getting impatient, still waiting for Flash%s...", | |
| waitForever: aA + ": Waiting indefinitely for Flash (will recover if unblocked)...", | |
| needFunction: aA + ": Function object expected for %s", | |
| badID: 'Warning: Sound ID "%s" should be a string, starting with a non-numeric character', | |
| noMS: "MovieStar mode not enabled. Exiting.", | |
| currentObj: "--- " + aA + "._debug(): Current sound objects ---", | |
| waitEI: ao + "initMovie(): Waiting for ExternalInterface call from Flash..", | |
| waitOnload: aA + ": Waiting for window.onload()", | |
| docLoaded: aA + ": Document already loaded", | |
| onload: ao + "initComplete(): calling soundManager.onload()", | |
| onloadOK: aA + ".onload() complete", | |
| init: "-- " + ao + "init() --", | |
| didInit: ao + "init(): Already called?", | |
| flashJS: aA + ": Attempting to call Flash from JS..", | |
| noPolling: aA + ": Polling (whileloading()/whileplaying() support) is disabled.", | |
| secNote: "Flash security note: Network/internet URLs will not load due to security restrictions. Access can be configured via Flash Player Global Security Settings Page: http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html", | |
| badRemove: "Warning: Failed to remove flash movie.", | |
| noPeak: "Warning: peakData features unsupported for movieStar formats", | |
| shutdown: aA + ".disable(): Shutting down", | |
| queue: aA + ": Queueing %s handler", | |
| smFail: aA + ": Failed to initialise.", | |
| smError: "SMSound.load(): Exception: JS-Flash communication failed, or JS error.", | |
| fbTimeout: "No flash response, applying ." + aR.swfCSS.swfTimedout + " CSS..", | |
| fbLoaded: "Flash loaded", | |
| fbHandler: ao + "flashBlockHandler()", | |
| manURL: "SMSound.load(): Using manually-assigned URL", | |
| onURL: aA + ".load(): current URL already assigned.", | |
| badFV: aA + '.flashVersion must be 8 or 9. "%s" is invalid. Reverting to %s.', | |
| as2loop: "Note: Setting stream:false so looping can work (flash 8 limitation)", | |
| noNSLoop: "Note: Looping not implemented for MovieStar formats", | |
| needfl9: "Note: Switching to flash 9, required for MP4 formats.", | |
| mfTimeout: "Setting flashLoadTimeout = 0 (infinite) for off-screen, mobile flash case", | |
| mfOn: "mobileFlash::enabling on-screen flash repositioning", | |
| policy: "Enabling usePolicyFile for data access" | |
| }; | |
| X = function () { | |
| var aU = j.call(arguments), | |
| aX = aU.shift(), | |
| aW = (L && L[aX] ? L[aX] : ""), | |
| aV, aT; | |
| if (aW && aU && aU.length) { | |
| for (aV = 0, aT = aU.length; aV < aT; aV++) { | |
| aW = aW.replace("%s", aU[aV]); | |
| } | |
| } | |
| return aW; | |
| }; | |
| Z = function (aT) { | |
| if (e === 8 && aT.loops > 1 && aT.stream) { | |
| z("as2loop"); | |
| aT.stream = false; | |
| } | |
| return aT; | |
| }; | |
| w = function (aU, aT) { | |
| if (aU && !aU.usePolicyFile && (aU.onid3 || aU.usePeakData || aU.useWaveformData || aU.useEQData)) { | |
| aR._wD((aT ? aT + ":" : "") + X("policy")); | |
| aU.usePolicyFile = true; | |
| } | |
| return aU; | |
| }; | |
| d = function (aT) { | |
| if (typeof console !== "undefined" && typeof console.warn !== "undefined") { | |
| console.warn(aT); | |
| } else { | |
| aR._wD(aT); | |
| } | |
| }; | |
| ac = function () { | |
| return false; | |
| }; | |
| U = function (aU) { | |
| for (var aT in aU) { | |
| if (aU.hasOwnProperty(aT) && typeof aU[aT] === "function") { | |
| aU[aT] = ac; | |
| } | |
| } | |
| aT = null; | |
| }; | |
| am = function (aT) { | |
| if (typeof aT === "undefined") { | |
| aT = false; | |
| } | |
| if (F || aT) { | |
| z("smFail", 2); | |
| aR.disable(aT); | |
| } | |
| }; | |
| h = function (aT) { | |
| var aU = null; | |
| if (aT) { | |
| if (aT.match(/\.swf(\?.*)?$/i)) { | |
| aU = aT.substr(aT.toLowerCase().lastIndexOf(".swf?") + 4); | |
| if (aU) { | |
| return aT; | |
| } | |
| } else { | |
| if (aT.lastIndexOf("/") !== aT.length - 1) { | |
| aT = aT + "/"; | |
| } | |
| } | |
| } | |
| return (aT && aT.lastIndexOf("/") !== -1 ? aT.substr(0, aT.lastIndexOf("/") + 1) : "./") + aR.movieURL; | |
| }; | |
| J = function () { | |
| if (e !== 8 && e !== 9) { | |
| aR._wD(X("badFV", e, N)); | |
| aR.flashVersion = N; | |
| } | |
| var aT = (aR.debugMode || aR.debugFlash ? "_debug.swf" : ".swf"); | |
| if (aR.useHTML5Audio && !aQ && aR.audioFormats.mp4.required && aR.flashVersion < 9) { | |
| aR._wD(X("needfl9")); | |
| aR.flashVersion = 9; | |
| } | |
| e = aR.flashVersion; | |
| aR.version = aR.versionNumber + (aQ ? " (HTML5-only mode)" : (e === 9 ? " (AS3/Flash 9)" : " (AS2/Flash 8)")); | |
| if (e > 8) { | |
| aR.defaultOptions = ai(aR.defaultOptions, aR.flash9Options); | |
| aR.features.buffering = true; | |
| } | |
| if (e > 8 && aR.useMovieStar) { | |
| aR.defaultOptions = ai(aR.defaultOptions, aR.movieStarOptions); | |
| aR.filePatterns.flash9 = new RegExp("\\.(mp3|" + aR.netStreamTypes.join("|") + ")(\\?.*)?$", "i"); | |
| aR.mimePattern = aR.netStreamMimeTypes; | |
| aR.features.movieStar = true; | |
| } else { | |
| aR.useMovieStar = false; | |
| aR.features.movieStar = false; | |
| } | |
| aR.filePattern = aR.filePatterns[(e !== 8 ? "flash9" : "flash8")]; | |
| aR.movieURL = (e === 8 ? "soundmanager2.swf" : "soundmanager2_flash9.swf").replace(".swf", aT); | |
| aR.features.peakData = aR.features.waveformData = aR.features.eqData = (e > 8); | |
| }; | |
| ak = function (aT, aU) { | |
| if (!aR.o || !aR.allowPolling) { | |
| return false; | |
| } | |
| aR.o._setPolling(aT, aU); | |
| }; | |
| function E() { | |
| if (aR.debugURLParam.test(l)) { | |
| aR.debugMode = true; | |
| } | |
| if (W(aR.debugID)) { | |
| return false; | |
| } | |
| var aY, aX, aT, aV, aU; | |
| if (aR.debugMode && !W(aR.debugID) && ((!az || !aR.useConsole) || (aR.useConsole && az && !aR.consoleOnly))) { | |
| aY = aD.createElement("div"); | |
| aY.id = aR.debugID + "-toggle"; | |
| aV = { | |
| position: "fixed", | |
| bottom: "0px", | |
| right: "0px", | |
| width: "1.2em", | |
| height: "1.2em", | |
| lineHeight: "1.2em", | |
| margin: "2px", | |
| textAlign: "center", | |
| border: "1px solid #999", | |
| cursor: "pointer", | |
| background: "#fff", | |
| color: "#333", | |
| zIndex: 10001 | |
| }; | |
| aY.appendChild(aD.createTextNode("-")); | |
| aY.onclick = x; | |
| aY.title = "Toggle SM2 debug console"; | |
| if (aa.match(/msie 6/i)) { | |
| aY.style.position = "absolute"; | |
| aY.style.cursor = "hand"; | |
| } | |
| for (aU in aV) { | |
| if (aV.hasOwnProperty(aU)) { | |
| aY.style[aU] = aV[aU]; | |
| } | |
| } | |
| aX = aD.createElement("div"); | |
| aX.id = aR.debugID; | |
| aX.style.display = (aR.debugMode ? "block" : "none"); | |
| if (aR.debugMode && !W(aY.id)) { | |
| try { | |
| aT = an(); | |
| aT.appendChild(aY); | |
| } catch (aW) { | |
| throw new Error(X("appXHTML")); | |
| } | |
| aT.appendChild(aX); | |
| } | |
| } | |
| aT = null; | |
| } | |
| aH = function (a8, aX) { | |
| var a2 = null, | |
| a7 = (aX ? aX : aR.url), | |
| a1 = (aR.altURL ? aR.altURL : a7), | |
| ba, aY, a5 = an(), | |
| bb, a3, a0, a4 = I(), | |
| aZ, aV, bc, aT = "100%", | |
| aU = null, | |
| aW = aD.getElementsByTagName("html")[0]; | |
| aU = (aW && aW.dir && aW.dir.match(/rtl/i)); | |
| a8 = (typeof a8 === "undefined" ? aR.id : a8); | |
| if (at && aK) { | |
| return false; | |
| } | |
| function a6() { | |
| aR._wD("-- SoundManager 2 " + aR.version + (!aQ && aR.useHTML5Audio ? (aR.hasHTML5 ? " + HTML5 audio" : ", no HTML5 audio support") : "") + (!aQ ? (aR.useMovieStar ? ", MovieStar mode" : "") + (aR.useHighPerformance ? ", high performance mode, " : ", ") + ((aR.flashPollingInterval ? "custom (" + aR.flashPollingInterval + "ms)" : (aR.useFastPolling ? "fast" : "normal")) + " polling") + (aR.wmode ? ", wmode: " + aR.wmode : "") + (aR.debugFlash ? ", flash debug mode" : "") + (aR.useFlashBlock ? ", flashBlock mode" : "") : "") + " --", 1); | |
| } | |
| if (aQ) { | |
| J(); | |
| a6(); | |
| aR.oMC = W(aR.movieID); | |
| aw(); | |
| at = true; | |
| aK = true; | |
| return false; | |
| } | |
| at = true; | |
| J(); | |
| aR.url = h(aR._overHTTP ? a7 : a1); | |
| aX = aR.url; | |
| aR.wmode = (!aR.wmode && aR.useHighPerformance && !aR.useMovieStar ? "transparent" : aR.wmode); | |
| if (aR.wmode !== null && (aa.match(/msie 8/i) || (!f && !aR.useHighPerformance)) && navigator.platform.match(/win32|win64/i)) { | |
| aR.specialWmodeCase = true; | |
| z("spcWmode"); | |
| aR.wmode = null; | |
| } | |
| ba = { | |
| name: a8, | |
| id: a8, | |
| src: aX, | |
| width: aT, | |
| height: aT, | |
| quality: "high", | |
| allowScriptAccess: aR.allowScriptAccess, | |
| bgcolor: aR.bgColor, | |
| pluginspage: aR._http + "//www.macromedia.com/go/getflashplayer", | |
| type: "application/x-shockwave-flash", | |
| wmode: aR.wmode, | |
| hasPriority: "true" | |
| }; | |
| if (aR.debugFlash) { | |
| ba.FlashVars = "debug=1"; | |
| } | |
| if (!aR.wmode) { | |
| delete ba.wmode; | |
| } | |
| if (f) { | |
| aY = aD.createElement("div"); | |
| a3 = '<object id="' + a8 + '" data="' + aX + '" type="' + ba.type + '" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="' + aR._http + '//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="' + ba.width + '" height="' + ba.height + '"><param name="movie" value="' + aX + '" /><param name="AllowScriptAccess" value="' + aR.allowScriptAccess + '" /><param name="quality" value="' + ba.quality + '" />' + (aR.wmode ? '<param name="wmode" value="' + aR.wmode + '" /> ' : "") + '<param name="bgcolor" value="' + aR.bgColor + '" />' + (aR.debugFlash ? '<param name="FlashVars" value="' + ba.FlashVars + '" />' : "") + "</object>"; | |
| } else { | |
| aY = aD.createElement("embed"); | |
| for (bb in ba) { | |
| if (ba.hasOwnProperty(bb)) { | |
| aY.setAttribute(bb, ba[bb]); | |
| } | |
| } | |
| } | |
| E(); | |
| a4 = I(); | |
| a5 = an(); | |
| if (a5) { | |
| aR.oMC = W(aR.movieID) ? W(aR.movieID) : aD.createElement("div"); | |
| if (!aR.oMC.id) { | |
| aR.oMC.id = aR.movieID; | |
| aR.oMC.className = aR.swfCSS.swfDefault + " " + a4; | |
| aZ = null; | |
| a0 = null; | |
| if (!aR.useFlashBlock) { | |
| if (aR.useHighPerformance) { | |
| aZ = { | |
| position: "fixed", | |
| width: "8px", | |
| height: "8px", | |
| bottom: "0px", | |
| left: "0px", | |
| overflow: "hidden" | |
| }; | |
| } else { | |
| aZ = { | |
| position: "absolute", | |
| width: "6px", | |
| height: "6px", | |
| top: "-9999px", | |
| left: "-9999px" | |
| }; | |
| if (aU) { | |
| aZ.left = Math.abs(parseInt(aZ.left, 10)) + "px"; | |
| } | |
| } | |
| } | |
| if (n) { | |
| aR.oMC.style.zIndex = 10000; | |
| } | |
| if (!aR.debugFlash) { | |
| for (aV in aZ) { | |
| if (aZ.hasOwnProperty(aV)) { | |
| aR.oMC.style[aV] = aZ[aV]; | |
| } | |
| } | |
| } | |
| try { | |
| if (!f) { | |
| aR.oMC.appendChild(aY); | |
| } | |
| a5.appendChild(aR.oMC); | |
| if (f) { | |
| a0 = aR.oMC.appendChild(aD.createElement("div")); | |
| a0.className = aR.swfCSS.swfBox; | |
| a0.innerHTML = a3; | |
| } | |
| aK = true; | |
| } catch (a9) { | |
| throw new Error(X("appXHTML")); | |
| } | |
| } else { | |
| bc = aR.oMC.className; | |
| aR.oMC.className = (bc ? bc + " " : aR.swfCSS.swfDefault) + (a4 ? " " + a4 : ""); | |
| aR.oMC.appendChild(aY); | |
| if (f) { | |
| a0 = aR.oMC.appendChild(aD.createElement("div")); | |
| a0.className = aR.swfCSS.swfBox; | |
| a0.innerHTML = a3; | |
| } | |
| aK = true; | |
| } | |
| } | |
| if (a2) { | |
| aR._wD(a2); | |
| } | |
| a6(); | |
| aR._wD(ao + "createMovie(): Trying to load " + aX + (!aR._overHTTP && aR.altURL ? " (alternate URL)" : ""), 1); | |
| return true; | |
| }; | |
| ad = this.getSoundById; | |
| s = function () { | |
| if (aQ) { | |
| aH(); | |
| return false; | |
| } | |
| if (aR.o) { | |
| return false; | |
| } | |
| aR.o = aR.getMovie(aR.id); | |
| if (!aR.o) { | |
| if (!o) { | |
| aH(aR.id, aR.url); | |
| } else { | |
| if (!f) { | |
| aR.oMC.appendChild(o); | |
| } else { | |
| aR.oMC.innerHTML = aq; | |
| } | |
| o = null; | |
| at = true; | |
| } | |
| aR.o = aR.getMovie(aR.id); | |
| } | |
| if (aR.o) { | |
| aR._wD(ao + "initMovie(): Got " + aR.o.nodeName + " element (" + (at ? "created via JS" : "static HTML") + ")"); | |
| z("waitEI"); | |
| } | |
| if (aR.oninitmovie instanceof Function) { | |
| setTimeout(aR.oninitmovie, 1); | |
| } | |
| return true; | |
| }; | |
| au = function (aT) { | |
| if (aT) { | |
| aR.url = aT; | |
| } | |
| s(); | |
| }; | |
| ah = function () { | |
| setTimeout(t, 500); | |
| }; | |
| t = function () { | |
| if (aS) { | |
| return false; | |
| } | |
| aS = true; | |
| r.remove(k, "load", ah); | |
| if (ab && !aE) { | |
| z("waitFocus"); | |
| return false; | |
| } | |
| var aT; | |
| if (!aI) { | |
| aT = aR.getMoviePercent(); | |
| aR._wD(X("waitImpatient", (aT === 100 ? " (SWF loaded)" : (aT > 0 ? " (SWF " + aT + "% loaded)" : "")))); | |
| } | |
| setTimeout(function () { | |
| aT = aR.getMoviePercent(); | |
| if (!aI) { | |
| aR._wD(aA + ": No Flash response within expected time.\nLikely causes: " + (aT === 0 ? "Loading " + aR.movieURL + " may have failed (and/or Flash " + e + "+ not present?), " : "") + "Flash blocked or JS-Flash security error." + (aR.debugFlash ? " " + X("checkSWF") : ""), 2); | |
| if (!aR._overHTTP && aT) { | |
| z("localFail", 2); | |
| if (!aR.debugFlash) { | |
| z("tryDebug", 2); | |
| } | |
| } | |
| if (aT === 0) { | |
| aR._wD(X("swf404", aR.url)); | |
| } | |
| af("flashtojs", false, ": Timed out" + aR._overHTTP ? " (Check flash security or flash blockers)" : " (No plugin/missing SWF?)"); | |
| } | |
| if (!aI && G) { | |
| if (aT === null) { | |
| if (aR.useFlashBlock || aR.flashLoadTimeout === 0) { | |
| if (aR.useFlashBlock) { | |
| i(); | |
| } | |
| z("waitForever"); | |
| } else { | |
| am(true); | |
| } | |
| } else { | |
| if (aR.flashLoadTimeout === 0) { | |
| z("waitForever"); | |
| } else { | |
| am(true); | |
| } | |
| } | |
| } | |
| }, aR.flashLoadTimeout); | |
| }; | |
| au = function (aT) { | |
| if (aT) { | |
| aR.url = aT; | |
| } | |
| s(); | |
| }; | |
| z = function (aU, aT) { | |
| if (!aU) { | |
| return ""; | |
| } else { | |
| return aR._wD(X(aU), aT); | |
| } | |
| }; | |
| if (l.indexOf("debug=alert") + 1 && aR.debugMode) { | |
| aR._wD = function (aT) { | |
| c.alert(aT); | |
| }; | |
| } | |
| x = function () { | |
| var aU = W(aR.debugID), | |
| aT = W(aR.debugID + "-toggle"); | |
| if (!aU) { | |
| return false; | |
| } | |
| if (m) { | |
| aT.innerHTML = "+"; | |
| aU.style.display = "none"; | |
| } else { | |
| aT.innerHTML = "-"; | |
| aU.style.display = "block"; | |
| } | |
| m = !m; | |
| }; | |
| af = function (aW, aT, aU) { | |
| if (typeof sm2Debugger !== "undefined") { | |
| try { | |
| sm2Debugger.handleEvent(aW, aT, aU); | |
| } catch (aV) {} | |
| } | |
| return true; | |
| }; | |
| I = function () { | |
| var aT = []; | |
| if (aR.debugMode) { | |
| aT.push(aR.swfCSS.sm2Debug); | |
| } | |
| if (aR.debugFlash) { | |
| aT.push(aR.swfCSS.flashDebug); | |
| } | |
| if (aR.useHighPerformance) { | |
| aT.push(aR.swfCSS.highPerf); | |
| } | |
| return aT.join(" "); | |
| }; | |
| i = function () { | |
| var aT = X("fbHandler"), | |
| aV = aR.getMoviePercent(), | |
| aU = aR.swfCSS; | |
| if (!aR.ok()) { | |
| if (ag) { | |
| aR.oMC.className = I() + " " + aU.swfDefault + " " + (aV === null ? aU.swfTimedout : aU.swfError); | |
| aR._wD(aT + ": " + X("fbTimeout") + (aV ? " (" + X("fbLoaded") + ")" : "")); | |
| } | |
| aR.didFlashBlock = true; | |
| aP({ | |
| type: "ontimeout", | |
| ignoreInit: true | |
| }); | |
| if (aR.onerror instanceof Function) { | |
| aR.onerror.apply(k); | |
| } | |
| } else { | |
| if (aR.didFlashBlock) { | |
| aR._wD(aT + ": Unblocked"); | |
| } | |
| if (aR.oMC) { | |
| aR.oMC.className = [I(), aU.swfDefault, aU.swfLoaded + (aR.didFlashBlock ? " " + aU.swfUnblocked : "")].join(" "); | |
| } | |
| } | |
| }; | |
| aB = function () { | |
| function aT() { | |
| r.remove(k, "focus", aB); | |
| r.remove(k, "load", aB); | |
| } | |
| if (aE || !ab) { | |
| aT(); | |
| return true; | |
| } | |
| G = true; | |
| aE = true; | |
| aR._wD(ao + "handleFocus()"); | |
| if (B && ab) { | |
| r.remove(k, "mousemove", aB); | |
| } | |
| aS = false; | |
| aT(); | |
| return true; | |
| }; | |
| T = function (aU) { | |
| if (aI) { | |
| return false; | |
| } | |
| if (aQ) { | |
| aR._wD("-- SoundManager 2: loaded --"); | |
| aI = true; | |
| aP(); | |
| ap(); | |
| return true; | |
| } | |
| var aV = aR.oMC.className, | |
| aT = (aR.useFlashBlock && aR.flashLoadTimeout && !aR.getMoviePercent()); | |
| if (!aT) { | |
| aI = true; | |
| } | |
| aR._wD("-- SoundManager 2 " + (F ? "failed to load" : "loaded") + " (" + (F ? "security/load error" : "OK") + ") --", 1); | |
| if (F || aU) { | |
| if (aR.useFlashBlock) { | |
| aR.oMC.className = I() + " " + (aR.getMoviePercent() === null ? aR.swfCSS.swfTimedout : aR.swfCSS.swfError); | |
| } | |
| aP({ | |
| type: "ontimeout" | |
| }); | |
| af("onload", false); | |
| if (aR.onerror instanceof Function) { | |
| aR.onerror.apply(k); | |
| } | |
| return false; | |
| } else { | |
| af("onload", true); | |
| } | |
| r.add(k, "unload", ac); | |
| if (aR.waitForWindowLoad && !u) { | |
| z("waitOnload"); | |
| r.add(k, "load", ap); | |
| return false; | |
| } else { | |
| if (aR.waitForWindowLoad && u) { | |
| z("docLoaded"); | |
| } | |
| ap(); | |
| } | |
| return true; | |
| }; | |
| aL = function (aV, aU, aT) { | |
| if (typeof aj[aV] === "undefined") { | |
| aj[aV] = []; | |
| } | |
| aj[aV].push({ | |
| method: aU, | |
| scope: (aT || null), | |
| fired: false | |
| }); | |
| }; | |
| aP = function (aY) { | |
| if (!aY) { | |
| aY = { | |
| type: "onready" | |
| }; | |
| } | |
| if (!aI && aY && !aY.ignoreInit) { | |
| return false; | |
| } | |
| var aV = { | |
| success: (aY && aY.ignoreInit ? aR.ok() : !F) | |
| }, | |
| aU = (aY && aY.type ? aj[aY.type] || [] : []), | |
| aT = [], | |
| aZ, aX, aW = (ag && aR.useFlashBlock && !aR.ok()); | |
| for (aZ = 0; aZ < aU.length; aZ++) { | |
| if (aU[aZ].fired !== true) { | |
| aT.push(aU[aZ]); | |
| } | |
| } | |
| if (aT.length) { | |
| aR._wD(aA + ": Firing " + aT.length + " " + aY.type + "() item" + (aT.length === 1 ? "" : "s")); | |
| for (aZ = 0, aX = aT.length; aZ < aX; aZ++) { | |
| if (aT[aZ].scope) { | |
| aT[aZ].method.apply(aT[aZ].scope, [aV]); | |
| } else { | |
| aT[aZ].method(aV); | |
| } | |
| if (!aW) { | |
| aT[aZ].fired = true; | |
| } | |
| } | |
| } | |
| return true; | |
| }; | |
| ap = function () { | |
| k.setTimeout(function () { | |
| if (aR.useFlashBlock) { | |
| i(); | |
| } | |
| aP(); | |
| if (aR.onload instanceof Function) { | |
| z("onload", 1); | |
| aR.onload.apply(k); | |
| z("onloadOK", 1); | |
| } | |
| if (aR.waitForWindowLoad) { | |
| r.add(k, "load", ap); | |
| } | |
| }, 1); | |
| }; | |
| aN = function () { | |
| if (g !== undefined) { | |
| return g; | |
| } | |
| var aT = false, | |
| a0 = navigator, | |
| aW = a0.plugins, | |
| aZ, aV, aU, aY = k.ActiveXObject; | |
| if (aW && aW.length) { | |
| aV = "application/x-shockwave-flash"; | |
| aU = a0.mimeTypes; | |
| if (aU && aU[aV] && aU[aV].enabledPlugin && aU[aV].enabledPlugin.description) { | |
| aT = true; | |
| } | |
| } else { | |
| if (typeof aY !== "undefined") { | |
| try { | |
| aZ = new aY("ShockwaveFlash.ShockwaveFlash"); | |
| } catch (aX) {} | |
| aT = ( !! aZ); | |
| } | |
| } | |
| g = aT; | |
| return aT; | |
| }; | |
| ae = function () { | |
| var aV, aU, aT = (aa.match(/iphone os (1|2|3_0|3_1)/i) ? true : false); | |
| if (aT) { | |
| aR.hasHTML5 = false; | |
| aQ = true; | |
| if (aR.oMC) { | |
| aR.oMC.style.display = "none"; | |
| } | |
| return false; | |
| } | |
| if (aR.useHTML5Audio) { | |
| if (!aR.html5 || !aR.html5.canPlayType) { | |
| aR._wD("SoundManager: No HTML5 Audio() support detected."); | |
| aR.hasHTML5 = false; | |
| return true; | |
| } else { | |
| aR.hasHTML5 = true; | |
| } | |
| if (al) { | |
| aR._wD(ao + "Note: Buggy HTML5 Audio in Safari on this OS X release, see https://bugs.webkit.org/show_bug.cgi?id=32159 - " + (!g ? " would use flash fallback for MP3/MP4, but none detected." : "will use flash fallback for MP3/MP4, if available"), 1); | |
| if (aN()) { | |
| return true; | |
| } | |
| } | |
| } else { | |
| return true; | |
| } | |
| for (aU in aR.audioFormats) { | |
| if (aR.audioFormats.hasOwnProperty(aU) && aR.audioFormats[aU].required && !aR.html5.canPlayType(aR.audioFormats[aU].type)) { | |
| aV = true; | |
| } | |
| } | |
| if (aR.ignoreFlash) { | |
| aV = false; | |
| } | |
| aQ = (aR.useHTML5Audio && aR.hasHTML5 && !aV && !aR.requireFlash); | |
| return (aN() && aV); | |
| }; | |
| aw = function () { | |
| var aV, aU = []; | |
| z("init"); | |
| if (aI) { | |
| z("didInit"); | |
| return false; | |
| } | |
| function aT() { | |
| r.remove(k, "load", aR.beginDelayedInit); | |
| } | |
| if (aR.hasHTML5) { | |
| for (aV in aR.audioFormats) { | |
| if (aR.audioFormats.hasOwnProperty(aV)) { | |
| aU.push(aV + ": " + aR.html5[aV]); | |
| } | |
| } | |
| aR._wD("-- SoundManager 2: HTML5 support tests (" + aR.html5Test + "): " + aU.join(", ") + " --", 1); | |
| } | |
| if (aQ) { | |
| if (!aI) { | |
| aT(); | |
| aR.enabled = true; | |
| T(); | |
| } | |
| return true; | |
| } | |
| s(); | |
| try { | |
| z("flashJS"); | |
| aR.o._externalInterfaceTest(false); | |
| if (!aR.allowPolling) { | |
| z("noPolling", 1); | |
| } else { | |
| ak(true, aR.flashPollingInterval ? aR.flashPollingInterval : (aR.useFastPolling ? 10 : 50)); | |
| } | |
| if (!aR.debugMode) { | |
| aR.o._disableDebug(); | |
| } | |
| aR.enabled = true; | |
| af("jstoflash", true); | |
| } catch (aW) { | |
| aR._wD("js/flash exception: " + aW.toString()); | |
| af("jstoflash", false); | |
| am(true); | |
| T(); | |
| return false; | |
| } | |
| T(); | |
| aT(); | |
| return true; | |
| }; | |
| S = function () { | |
| if (C) { | |
| return false; | |
| } | |
| aH(); | |
| s(); | |
| C = true; | |
| return true; | |
| }; | |
| aM = function () { | |
| if (ax) { | |
| return false; | |
| } | |
| ax = true; | |
| E(); | |
| if (!aR.useHTML5Audio) { | |
| if (!aN()) { | |
| aR._wD("SoundManager: No Flash detected, trying HTML5"); | |
| aR.useHTML5Audio = true; | |
| } | |
| } | |
| aO(); | |
| aR.html5.usingFlash = ae(); | |
| ag = aR.html5.usingFlash; | |
| ax = true; | |
| if (aD.removeEventListener) { | |
| aD.removeEventListener("DOMContentLoaded", aM, false); | |
| } | |
| au(); | |
| return true; | |
| }; | |
| v = function (aT) { | |
| if (!aT._hasTimer) { | |
| aT._hasTimer = true; | |
| } | |
| }; | |
| Q = function (aT) { | |
| if (aT._hasTimer) { | |
| aT._hasTimer = false; | |
| } | |
| }; | |
| ay = function () { | |
| if (aR.onerror instanceof Function) { | |
| aR.onerror(); | |
| } | |
| aR.disable(); | |
| }; | |
| Y = function () { | |
| if (!al || !aN()) { | |
| return false; | |
| } | |
| var aT = aR.audioFormats, | |
| aU, aV; | |
| for (aV in aT) { | |
| if (aT.hasOwnProperty(aV)) { | |
| if (aV === "mp3" || aV === "mp4") { | |
| aR._wD(aA + ": Using flash fallback for " + aV + " format"); | |
| aR.html5[aV] = false; | |
| if (aT[aV] && aT[aV].related) { | |
| for (aU = aT[aV].related.length; aU--;) { | |
| aR.html5[aT[aV].related[aU]] = false; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }; | |
| this._setSandboxType = function (aT) { | |
| var aU = aR.sandbox; | |
| aU.type = aT; | |
| aU.description = aU.types[(typeof aU.types[aT] !== "undefined" ? aT : "unknown")]; | |
| aR._wD("Flash security sandbox type: " + aU.type); | |
| if (aU.type === "localWithFile") { | |
| aU.noRemote = true; | |
| aU.noLocal = false; | |
| z("secNote", 2); | |
| } else { | |
| if (aU.type === "localWithNetwork") { | |
| aU.noRemote = false; | |
| aU.noLocal = true; | |
| } else { | |
| if (aU.type === "localTrusted") { | |
| aU.noRemote = false; | |
| aU.noLocal = false; | |
| } | |
| } | |
| } | |
| }; | |
| this._externalInterfaceOK = function (aT) { | |
| if (aR.swfLoaded) { | |
| return false; | |
| } | |
| var aU = new Date().getTime(); | |
| aR._wD(ao + "externalInterfaceOK()" + (aT ? " (~" + (aU - aT) + " ms)" : "")); | |
| af("swf", true); | |
| af("flashtojs", true); | |
| aR.swfLoaded = true; | |
| ab = false; | |
| if (al) { | |
| Y(); | |
| } | |
| if (f) { | |
| setTimeout(aw, 100); | |
| } else { | |
| aw(); | |
| } | |
| }; | |
| P = function () { | |
| if (aD.readyState === "complete") { | |
| aM(); | |
| aD.detachEvent("onreadystatechange", P); | |
| } | |
| return true; | |
| }; | |
| if (!aR.hasHTML5 || ag) { | |
| r.add(k, "focus", aB); | |
| r.add(k, "load", aB); | |
| r.add(k, "load", ah); | |
| if (B && ab) { | |
| r.add(k, "mousemove", aB); | |
| } | |
| } | |
| if (aD.addEventListener) { | |
| aD.addEventListener("DOMContentLoaded", aM, false); | |
| } else { | |
| if (aD.attachEvent) { | |
| aD.attachEvent("onreadystatechange", P); | |
| } else { | |
| af("onload", false); | |
| ay(); | |
| } | |
| } | |
| if (aD.readyState === "complete") { | |
| setTimeout(aM, 100); | |
| } | |
| } | |
| if (typeof SM2_DEFER === "undefined" || !SM2_DEFER) { | |
| b = new a(); | |
| } | |
| c.SoundManager = a; | |
| c.soundManager = b; | |
| }(window)); | |
| jQuery.cookie = function (d, e, b) { | |
| if (arguments.length > 1 && String(e) !== "[object Object]") { | |
| b = jQuery.extend({}, b); | |
| if (e === null || e === undefined) { | |
| b.expires = -1; | |
| } | |
| if (typeof b.expires === "number") { | |
| var g = b.expires, | |
| c = b.expires = new Date(); | |
| c.setDate(c.getDate() + g); | |
| } | |
| e = String(e); | |
| return (document.cookie = [encodeURIComponent(d), "=", b.raw ? e : encodeURIComponent(e), b.expires ? "; expires=" + b.expires.toUTCString() : "", b.path ? "; path=" + b.path : "", b.domain ? "; domain=" + b.domain : "", b.secure ? "; secure" : ""].join("")); | |
| } | |
| b = e || {}; | |
| var a, f = b.raw ? | |
| function (h) { | |
| return h; | |
| } : decodeURIComponent; | |
| return (a = new RegExp("(?:^|; )" + encodeURIComponent(d) + "=([^;]*)").exec(document.cookie)) ? f(a[1]) : null; | |
| }; | |
| (function (d) { | |
| var c = function (g, f) { | |
| return (g << f) | (g >>> (32 - f)); | |
| }; | |
| var b = function (j) { | |
| var f = ""; | |
| var g; | |
| var k; | |
| var h; | |
| for (g = 0; g <= 6; g += 2) { | |
| k = (j >>> (g * 4 + 4)) & 15; | |
| h = (j >>> (g * 4)) & 15; | |
| f += k.toString(16) + h.toString(16); | |
| } | |
| return f; | |
| }; | |
| var a = function (j) { | |
| var g = ""; | |
| var h; | |
| var f; | |
| for (h = 7; h >= 0; h--) { | |
| f = (j >>> (h * 4)) & 15; | |
| g += f.toString(16); | |
| } | |
| return g; | |
| }; | |
| var e = function (g) { | |
| g = g.replace(/\x0d\x0a/g, "\x0a"); | |
| var f = ""; | |
| for (var i = 0; i < g.length; i++) { | |
| var h = g.charCodeAt(i); | |
| if (h < 128) { | |
| f += String.fromCharCode(h); | |
| } else { | |
| if ((h > 127) && (h < 2048)) { | |
| f += String.fromCharCode((h >> 6) | 192); | |
| f += String.fromCharCode((h & 63) | 128); | |
| } else { | |
| f += String.fromCharCode((h >> 12) | 224); | |
| f += String.fromCharCode(((h >> 6) & 63) | 128); | |
| f += String.fromCharCode((h & 63) | 128); | |
| } | |
| } | |
| } | |
| return f; | |
| }; | |
| d.extend({ | |
| sha1: function (f) { | |
| var l; | |
| var x, w; | |
| var g = new Array(80); | |
| var o = 1732584193; | |
| var n = 4023233417; | |
| var m = 2562383102; | |
| var k = 271733878; | |
| var h = 3285377520; | |
| var v, t, s, r, q; | |
| var y; | |
| f = e(f); | |
| var p = f.length; | |
| var u = new Array(); | |
| for (x = 0; x < p - 3; x += 4) { | |
| w = f.charCodeAt(x) << 24 | f.charCodeAt(x + 1) << 16 | f.charCodeAt(x + 2) << 8 | f.charCodeAt(x + 3); | |
| u.push(w); | |
| } | |
| switch (p % 4) { | |
| case 0: | |
| x = 2147483648; | |
| break; | |
| case 1: | |
| x = f.charCodeAt(p - 1) << 24 | 8388608; | |
| break; | |
| case 2: | |
| x = f.charCodeAt(p - 2) << 24 | f.charCodeAt(p - 1) << 16 | 32768; | |
| break; | |
| case 3: | |
| x = f.charCodeAt(p - 3) << 24 | f.charCodeAt(p - 2) << 16 | f.charCodeAt(p - 1) << 8 | 128; | |
| break; | |
| } | |
| u.push(x); | |
| while ((u.length % 16) != 14) { | |
| u.push(0); | |
| } | |
| u.push(p >>> 29); | |
| u.push((p << 3) & 4294967295); | |
| for (l = 0; l < u.length; l += 16) { | |
| for (x = 0; x < 16; x++) { | |
| g[x] = u[l + x]; | |
| } | |
| for (x = 16; x <= 79; x++) { | |
| g[x] = c(g[x - 3] ^ g[x - 8] ^ g[x - 14] ^ g[x - 16], 1); | |
| } | |
| v = o; | |
| t = n; | |
| s = m; | |
| r = k; | |
| q = h; | |
| for (x = 0; x <= 19; x++) { | |
| y = (c(v, 5) + ((t & s) | (~t & r)) + q + g[x] + 1518500249) & 4294967295; | |
| q = r; | |
| r = s; | |
| s = c(t, 30); | |
| t = v; | |
| v = y; | |
| } | |
| for (x = 20; x <= 39; x++) { | |
| y = (c(v, 5) + (t ^ s ^ r) + q + g[x] + 1859775393) & 4294967295; | |
| q = r; | |
| r = s; | |
| s = c(t, 30); | |
| t = v; | |
| v = y; | |
| } | |
| for (x = 40; x <= 59; x++) { | |
| y = (c(v, 5) + ((t & s) | (t & r) | (s & r)) + q + g[x] + 2400959708) & 4294967295; | |
| q = r; | |
| r = s; | |
| s = c(t, 30); | |
| t = v; | |
| v = y; | |
| } | |
| for (x = 60; x <= 79; x++) { | |
| y = (c(v, 5) + (t ^ s ^ r) + q + g[x] + 3395469782) & 4294967295; | |
| q = r; | |
| r = s; | |
| s = c(t, 30); | |
| t = v; | |
| v = y; | |
| } | |
| o = (o + v) & 4294967295; | |
| n = (n + t) & 4294967295; | |
| m = (m + s) & 4294967295; | |
| k = (k + r) & 4294967295; | |
| h = (h + q) & 4294967295; | |
| } | |
| var y = a(o) + a(n) + a(m) + a(k) + a(h); | |
| return y.toLowerCase(); | |
| } | |
| }); | |
| })(jQuery); | |
| $.fn.egrep = function (b) { | |
| var a = []; | |
| var c = function (e) { | |
| if (e.nodeType == Node.TEXT_NODE) { | |
| var d = typeof b == "string" ? e.nodeValue.indexOf(b) != -1 : b.test(e.nodeValue); | |
| if (d) { | |
| a.push(e.parentNode); | |
| } | |
| } else { | |
| $.each(e.childNodes, function (g, f) { | |
| c(f); | |
| }); | |
| } | |
| }; | |
| this.each(function () { | |
| c(this); | |
| }); | |
| return a; | |
| }; | |
| var swfobject = function () { | |
| var aq = "undefined", | |
| aD = "object", | |
| ab = "Shockwave Flash", | |
| X = "ShockwaveFlash.ShockwaveFlash", | |
| aE = "application/x-shockwave-flash", | |
| ac = "SWFObjectExprInst", | |
| ax = "onreadystatechange", | |
| af = window, | |
| aL = document, | |
| aB = navigator, | |
| aa = false, | |
| Z = [aN], | |
| aG = [], | |
| ag = [], | |
| al = [], | |
| aJ, ad, ap, at, ak = false, | |
| aU = false, | |
| aH, an, aI = true, | |
| ah = function () { | |
| var a = typeof aL.getElementById != aq && typeof aL.getElementsByTagName != aq && typeof aL.createElement != aq, | |
| e = aB.userAgent.toLowerCase(), | |
| c = aB.platform.toLowerCase(), | |
| h = c ? /win/.test(c) : /win/.test(e), | |
| j = c ? /mac/.test(c) : /mac/.test(e), | |
| g = /webkit/.test(e) ? parseFloat(e.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, | |
| d = !+"\v1", | |
| f = [0, 0, 0], | |
| k = null; | |
| if (typeof aB.plugins != aq && typeof aB.plugins[ab] == aD) { | |
| k = aB.plugins[ab].description; | |
| if (k && !(typeof aB.mimeTypes != aq && aB.mimeTypes[aE] && !aB.mimeTypes[aE].enabledPlugin)) { | |
| aa = true; | |
| d = false; | |
| k = k.replace(/^.*\s+(\S+\s+\S+$)/, "$1"); | |
| f[0] = parseInt(k.replace(/^(.*)\..*$/, "$1"), 10); | |
| f[1] = parseInt(k.replace(/^.*\.(.*)\s.*$/, "$1"), 10); | |
| f[2] = /[a-zA-Z]/.test(k) ? parseInt(k.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0; | |
| } | |
| } else { | |
| if (typeof af.ActiveXObject != aq) { | |
| try { | |
| var i = new ActiveXObject(X); | |
| if (i) { | |
| k = i.GetVariable("$version"); | |
| if (k) { | |
| d = true; | |
| k = k.split(" ")[1].split(","); | |
| f = [parseInt(k[0], 10), parseInt(k[1], 10), parseInt(k[2], 10)]; | |
| } | |
| } | |
| } catch (b) {} | |
| } | |
| } | |
| return { | |
| w3: a, | |
| pv: f, | |
| wk: g, | |
| ie: d, | |
| win: h, | |
| mac: j | |
| }; | |
| }(), | |
| aK = function () { | |
| if (!ah.w3) { | |
| return; | |
| } | |
| if ((typeof aL.readyState != aq && aL.readyState == "complete") || (typeof aL.readyState == aq && (aL.getElementsByTagName("body")[0] || aL.body))) { | |
| aP(); | |
| } | |
| if (!ak) { | |
| if (typeof aL.addEventListener != aq) { | |
| aL.addEventListener("DOMContentLoaded", aP, false); | |
| } | |
| if (ah.ie && ah.win) { | |
| aL.attachEvent(ax, function () { | |
| if (aL.readyState == "complete") { | |
| aL.detachEvent(ax, arguments.callee); | |
| aP(); | |
| } | |
| }); | |
| if (af == top) { | |
| (function () { | |
| if (ak) { | |
| return; | |
| } | |
| try { | |
| aL.documentElement.doScroll("left"); | |
| } catch (a) { | |
| setTimeout(arguments.callee, 0); | |
| return; | |
| } | |
| aP(); | |
| })(); | |
| } | |
| } | |
| if (ah.wk) { | |
| (function () { | |
| if (ak) { | |
| return; | |
| } | |
| if (!/loaded|complete/.test(aL.readyState)) { | |
| setTimeout(arguments.callee, 0); | |
| return; | |
| } | |
| aP(); | |
| })(); | |
| } | |
| aC(aP); | |
| } | |
| }(); | |
| function aP() { | |
| if (ak) { | |
| return; | |
| } | |
| try { | |
| var b = aL.getElementsByTagName("body")[0].appendChild(ar("span")); | |
| b.parentNode.removeChild(b); | |
| } catch (a) { | |
| return; | |
| } | |
| ak = true; | |
| var d = Z.length; | |
| for (var c = 0; c < d; c++) { | |
| Z[c](); | |
| } | |
| } | |
| function aj(a) { | |
| if (ak) { | |
| a(); | |
| } else { | |
| Z[Z.length] = a; | |
| } | |
| } | |
| function aC(a) { | |
| if (typeof af.addEventListener != aq) { | |
| af.addEventListener("load", a, false); | |
| } else { | |
| if (typeof aL.addEventListener != aq) { | |
| aL.addEventListener("load", a, false); | |
| } else { | |
| if (typeof af.attachEvent != aq) { | |
| aM(af, "onload", a); | |
| } else { | |
| if (typeof af.onload == "function") { | |
| var b = af.onload; | |
| af.onload = function () { | |
| b(); | |
| a(); | |
| }; | |
| } else { | |
| af.onload = a; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| function aN() { | |
| if (aa) { | |
| Y(); | |
| } else { | |
| am(); | |
| } | |
| } | |
| function Y() { | |
| var d = aL.getElementsByTagName("body")[0]; | |
| var b = ar(aD); | |
| b.setAttribute("type", aE); | |
| var a = d.appendChild(b); | |
| if (a) { | |
| var c = 0; | |
| (function () { | |
| if (typeof a.GetVariable != aq) { | |
| var e = a.GetVariable("$version"); | |
| if (e) { | |
| e = e.split(" ")[1].split(","); | |
| ah.pv = [parseInt(e[0], 10), parseInt(e[1], 10), parseInt(e[2], 10)]; | |
| } | |
| } else { | |
| if (c < 10) { | |
| c++; | |
| setTimeout(arguments.callee, 10); | |
| return; | |
| } | |
| } | |
| d.removeChild(b); | |
| a = null; | |
| am(); | |
| })(); | |
| } else { | |
| am(); | |
| } | |
| } | |
| function am() { | |
| var g = aG.length; | |
| if (g > 0) { | |
| for (var h = 0; h < g; h++) { | |
| var c = aG[h].id; | |
| var l = aG[h].callbackFn; | |
| var a = { | |
| success: false, | |
| id: c | |
| }; | |
| if (ah.pv[0] > 0) { | |
| var i = aS(c); | |
| if (i) { | |
| if (ao(aG[h].swfVersion) && !(ah.wk && ah.wk < 312)) { | |
| ay(c, true); | |
| if (l) { | |
| a.success = true; | |
| a.ref = av(c); | |
| l(a); | |
| } | |
| } else { | |
| if (aG[h].expressInstall && au()) { | |
| var e = {}; | |
| e.data = aG[h].expressInstall; | |
| e.width = i.getAttribute("width") || "0"; | |
| e.height = i.getAttribute("height") || "0"; | |
| if (i.getAttribute("class")) { | |
| e.styleclass = i.getAttribute("class"); | |
| } | |
| if (i.getAttribute("align")) { | |
| e.align = i.getAttribute("align"); | |
| } | |
| var f = {}; | |
| var d = i.getElementsByTagName("param"); | |
| var k = d.length; | |
| for (var j = 0; j < k; j++) { | |
| if (d[j].getAttribute("name").toLowerCase() != "movie") { | |
| f[d[j].getAttribute("name")] = d[j].getAttribute("value"); | |
| } | |
| } | |
| ae(e, f, c, l); | |
| } else { | |
| aF(i); | |
| if (l) { | |
| l(a); | |
| } | |
| } | |
| } | |
| } | |
| } else { | |
| ay(c, true); | |
| if (l) { | |
| var b = av(c); | |
| if (b && typeof b.SetVariable != aq) { | |
| a.success = true; | |
| a.ref = b; | |
| } | |
| l(a); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| function av(b) { | |
| var d = null; | |
| var c = aS(b); | |
| if (c && c.nodeName == "OBJECT") { | |
| if (typeof c.SetVariable != aq) { | |
| d = c; | |
| } else { | |
| var a = c.getElementsByTagName(aD)[0]; | |
| if (a) { | |
| d = a; | |
| } | |
| } | |
| } | |
| return d; | |
| } | |
| function au() { | |
| return !aU && ao("6.0.65") && (ah.win || ah.mac) && !(ah.wk && ah.wk < 312); | |
| } | |
| function ae(f, d, h, e) { | |
| aU = true; | |
| ap = e || null; | |
| at = { | |
| success: false, | |
| id: h | |
| }; | |
| var a = aS(h); | |
| if (a) { | |
| if (a.nodeName == "OBJECT") { | |
| aJ = aO(a); | |
| ad = null; | |
| } else { | |
| aJ = a; | |
| ad = h; | |
| } | |
| f.id = ac; | |
| if (typeof f.width == aq || (!/%$/.test(f.width) && parseInt(f.width, 10) < 310)) { | |
| f.width = "310"; | |
| } | |
| if (typeof f.height == aq || (!/%$/.test(f.height) && parseInt(f.height, 10) < 137)) { | |
| f.height = "137"; | |
| } | |
| aL.title = aL.title.slice(0, 47) + " - Flash Player Installation"; | |
| var b = ah.ie && ah.win ? "ActiveX" : "PlugIn", | |
| c = "MMredirectURL=" + af.location.toString().replace(/&/g, "%26") + "&MMplayerType=" + b + "&MMdoctitle=" + aL.title; | |
| if (typeof d.flashvars != aq) { | |
| d.flashvars += "&" + c; | |
| } else { | |
| d.flashvars = c; | |
| } | |
| if (ah.ie && ah.win && a.readyState != 4) { | |
| var g = ar("div"); | |
| h += "SWFObjectNew"; | |
| g.setAttribute("id", h); | |
| a.parentNode.insertBefore(g, a); | |
| a.style.display = "none"; | |
| (function () { | |
| if (a.readyState == 4) { | |
| a.parentNode.removeChild(a); | |
| } else { | |
| setTimeout(arguments.callee, 10); | |
| } | |
| })(); | |
| } | |
| aA(f, d, h); | |
| } | |
| } | |
| function aF(a) { | |
| if (ah.ie && ah.win && a.readyState != 4) { | |
| var b = ar("div"); | |
| a.parentNode.insertBefore(b, a); | |
| b.parentNode.replaceChild(aO(a), b); | |
| a.style.display = "none"; | |
| (function () { | |
| if (a.readyState == 4) { | |
| a.parentNode.removeChild(a); | |
| } else { | |
| setTimeout(arguments.callee, 10); | |
| } | |
| })(); | |
| } else { | |
| a.parentNode.replaceChild(aO(a), a); | |
| } | |
| } | |
| function aO(b) { | |
| var d = ar("div"); | |
| if (ah.win && ah.ie) { | |
| d.innerHTML = b.innerHTML; | |
| } else { | |
| var e = b.getElementsByTagName(aD)[0]; | |
| if (e) { | |
| var a = e.childNodes; | |
| if (a) { | |
| var f = a.length; | |
| for (var c = 0; c < f; c++) { | |
| if (!(a[c].nodeType == 1 && a[c].nodeName == "PARAM") && !(a[c].nodeType == 8)) { | |
| d.appendChild(a[c].cloneNode(true)); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| return d; | |
| } | |
| function aA(e, g, c) { | |
| var d, a = aS(c); | |
| if (ah.wk && ah.wk < 312) { | |
| return d; | |
| } | |
| if (a) { | |
| if (typeof e.id == aq) { | |
| e.id = c; | |
| } | |
| if (ah.ie && ah.win) { | |
| var f = ""; | |
| for (var i in e) { | |
| if (e[i] != Object.prototype[i]) { | |
| if (i.toLowerCase() == "data") { | |
| g.movie = e[i]; | |
| } else { | |
| if (i.toLowerCase() == "styleclass") { | |
| f += ' class="' + e[i] + '"'; | |
| } else { | |
| if (i.toLowerCase() != "classid") { | |
| f += " " + i + '="' + e[i] + '"'; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| var h = ""; | |
| for (var j in g) { | |
| if (g[j] != Object.prototype[j]) { | |
| h += '<param name="' + j + '" value="' + g[j] + '" />'; | |
| } | |
| } | |
| a.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + f + ">" + h + "</object>"; | |
| ag[ag.length] = e.id; | |
| d = aS(e.id); | |
| } else { | |
| var b = ar(aD); | |
| b.setAttribute("type", aE); | |
| for (var k in e) { | |
| if (e[k] != Object.prototype[k]) { | |
| if (k.toLowerCase() == "styleclass") { | |
| b.setAttribute("class", e[k]); | |
| } else { | |
| if (k.toLowerCase() != "classid") { | |
| b.setAttribute(k, e[k]); | |
| } | |
| } | |
| } | |
| } | |
| for (var l in g) { | |
| if (g[l] != Object.prototype[l] && l.toLowerCase() != "movie") { | |
| aQ(b, l, g[l]); | |
| } | |
| } | |
| a.parentNode.replaceChild(b, a); | |
| d = b; | |
| } | |
| } | |
| return d; | |
| } | |
| function aQ(b, d, c) { | |
| var a = ar("param"); | |
| a.setAttribute("name", d); | |
| a.setAttribute("value", c); | |
| b.appendChild(a); | |
| } | |
| function aw(a) { | |
| var b = aS(a); | |
| if (b && b.nodeName == "OBJECT") { | |
| if (ah.ie && ah.win) { | |
| b.style.display = "none"; | |
| (function () { | |
| if (b.readyState == 4) { | |
| aT(a); | |
| } else { | |
| setTimeout(arguments.callee, 10); | |
| } | |
| })(); | |
| } else { | |
| b.parentNode.removeChild(b); | |
| } | |
| } | |
| } | |
| function aT(a) { | |
| var b = aS(a); | |
| if (b) { | |
| for (var c in b) { | |
| if (typeof b[c] == "function") { | |
| b[c] = null; | |
| } | |
| } | |
| b.parentNode.removeChild(b); | |
| } | |
| } | |
| function aS(a) { | |
| var c = null; | |
| try { | |
| c = aL.getElementById(a); | |
| } catch (b) {} | |
| return c; | |
| } | |
| function ar(a) { | |
| return aL.createElement(a); | |
| } | |
| function aM(a, c, b) { | |
| a.attachEvent(c, b); | |
| al[al.length] = [a, c, b]; | |
| } | |
| function ao(a) { | |
| var b = ah.pv, | |
| c = a.split("."); | |
| c[0] = parseInt(c[0], 10); | |
| c[1] = parseInt(c[1], 10) || 0; | |
| c[2] = parseInt(c[2], 10) || 0; | |
| return (b[0] > c[0] || (b[0] == c[0] && b[1] > c[1]) || (b[0] == c[0] && b[1] == c[1] && b[2] >= c[2])) ? true : false; | |
| } | |
| function az(b, f, a, c) { | |
| if (ah.ie && ah.mac) { | |
| return; | |
| } | |
| var e = aL.getElementsByTagName("head")[0]; | |
| if (!e) { | |
| return; | |
| } | |
| var g = (a && typeof a == "string") ? a : "screen"; | |
| if (c) { | |
| aH = null; | |
| an = null; | |
| } | |
| if (!aH || an != g) { | |
| var d = ar("style"); | |
| d.setAttribute("type", "text/css"); | |
| d.setAttribute("media", g); | |
| aH = e.appendChild(d); | |
| if (ah.ie && ah.win && typeof aL.styleSheets != aq && aL.styleSheets.length > 0) { | |
| aH = aL.styleSheets[aL.styleSheets.length - 1]; | |
| } | |
| an = g; | |
| } | |
| if (ah.ie && ah.win) { | |
| if (aH && typeof aH.addRule == aD) { | |
| aH.addRule(b, f); | |
| } | |
| } else { | |
| if (aH && typeof aL.createTextNode != aq) { | |
| aH.appendChild(aL.createTextNode(b + " {" + f + "}")); | |
| } | |
| } | |
| } | |
| function ay(a, c) { | |
| if (!aI) { | |
| return; | |
| } | |
| var b = c ? "visible" : "hidden"; | |
| if (ak && aS(a)) { | |
| aS(a).style.visibility = b; | |
| } else { | |
| az("#" + a, "visibility:" + b); | |
| } | |
| } | |
| function ai(b) { | |
| var a = /[\\\"<>\.;]/; | |
| var c = a.exec(b) != null; | |
| return c && typeof encodeURIComponent != aq ? encodeURIComponent(b) : b; | |
| } | |
| var aR = function () { | |
| if (ah.ie && ah.win) { | |
| window.attachEvent("onunload", function () { | |
| var a = al.length; | |
| for (var b = 0; b < a; b++) { | |
| al[b][0].detachEvent(al[b][1], al[b][2]); | |
| } | |
| var d = ag.length; | |
| for (var c = 0; c < d; c++) { | |
| aw(ag[c]); | |
| } | |
| for (var e in ah) { | |
| ah[e] = null; | |
| } | |
| ah = null; | |
| for (var f in swfobject) { | |
| swfobject[f] = null; | |
| } | |
| swfobject = null; | |
| }); | |
| } | |
| }(); | |
| return { | |
| registerObject: function (a, e, c, b) { | |
| if (ah.w3 && a && e) { | |
| var d = {}; | |
| d.id = a; | |
| d.swfVersion = e; | |
| d.expressInstall = c; | |
| d.callbackFn = b; | |
| aG[aG.length] = d; | |
| ay(a, false); | |
| } else { | |
| if (b) { | |
| b({ | |
| success: false, | |
| id: a | |
| }); | |
| } | |
| } | |
| }, | |
| getObjectById: function (a) { | |
| if (ah.w3) { | |
| return av(a); | |
| } | |
| }, | |
| embedSWF: function (k, e, h, f, c, a, b, i, g, j) { | |
| var d = { | |
| success: false, | |
| id: e | |
| }; | |
| if (ah.w3 && !(ah.wk && ah.wk < 312) && k && e && h && f && c) { | |
| ay(e, false); | |
| aj(function () { | |
| h += ""; | |
| f += ""; | |
| var q = {}; | |
| if (g && typeof g === aD) { | |
| for (var o in g) { | |
| q[o] = g[o]; | |
| } | |
| } | |
| q.data = k; | |
| q.width = h; | |
| q.height = f; | |
| var n = {}; | |
| if (i && typeof i === aD) { | |
| for (var p in i) { | |
| n[p] = i[p]; | |
| } | |
| } | |
| if (b && typeof b === aD) { | |
| for (var l in b) { | |
| if (typeof n.flashvars != aq) { | |
| n.flashvars += "&" + l + "=" + b[l]; | |
| } else { | |
| n.flashvars = l + "=" + b[l]; | |
| } | |
| } | |
| } | |
| if (ao(c)) { | |
| var m = aA(q, n, e); | |
| if (q.id == e) { | |
| ay(e, true); | |
| } | |
| d.success = true; | |
| d.ref = m; | |
| } else { | |
| if (a && au()) { | |
| q.data = a; | |
| ae(q, n, e, j); | |
| return; | |
| } else { | |
| ay(e, true); | |
| } | |
| } | |
| if (j) { | |
| j(d); | |
| } | |
| }); | |
| } else { | |
| if (j) { | |
| j(d); | |
| } | |
| } | |
| }, | |
| switchOffAutoHideShow: function () { | |
| aI = false; | |
| }, | |
| ua: ah, | |
| getFlashPlayerVersion: function () { | |
| return { | |
| major: ah.pv[0], | |
| minor: ah.pv[1], | |
| release: ah.pv[2] | |
| }; | |
| }, | |
| hasFlashPlayerVersion: ao, | |
| createSWF: function (a, b, c) { | |
| if (ah.w3) { | |
| return aA(a, b, c); | |
| } else { | |
| return undefined; | |
| } | |
| }, | |
| showExpressInstall: function (b, a, d, c) { | |
| if (ah.w3 && au()) { | |
| ae(b, a, d, c); | |
| } | |
| }, | |
| removeSWF: function (a) { | |
| if (ah.w3) { | |
| aw(a); | |
| } | |
| }, | |
| createCSS: function (b, a, c, d) { | |
| if (ah.w3) { | |
| az(b, a, c, d); | |
| } | |
| }, | |
| addDomLoadEvent: aj, | |
| addLoadEvent: aC, | |
| getQueryParamValue: function (b) { | |
| var a = aL.location.search || aL.location.hash; | |
| if (a) { | |
| if (/\?/.test(a)) { | |
| a = a.split("?")[1]; | |
| } | |
| if (b == null) { | |
| return ai(a); | |
| } | |
| var c = a.split("&"); | |
| for (var d = 0; d < c.length; d++) { | |
| if (c[d].substring(0, c[d].indexOf("=")) == b) { | |
| return ai(c[d].substring((c[d].indexOf("=") + 1))); | |
| } | |
| } | |
| } | |
| return ""; | |
| }, | |
| expressInstallCallback: function () { | |
| if (aU) { | |
| var a = aS(ac); | |
| if (a && aJ) { | |
| a.parentNode.replaceChild(aJ, a); | |
| if (ad) { | |
| ay(ad, true); | |
| if (ah.ie && ah.win) { | |
| aJ.style.display = "block"; | |
| } | |
| } | |
| if (ap) { | |
| ap(at); | |
| } | |
| } | |
| aU = false; | |
| } | |
| } | |
| }; | |
| }(); | |
| var EventHelpers = new function () { | |
| var me = this; | |
| var safariTimer; | |
| var isSafari = /WebKit/i.test(navigator.userAgent); | |
| var globalEvent; | |
| me.init = function () { | |
| if (me.hasPageLoadHappened(arguments)) { | |
| return; | |
| } | |
| if (document.createEventObject) { | |
| globalEvent = document.createEventObject(); | |
| } else { | |
| if (document.createEvent) { | |
| globalEvent = document.createEvent("HTMLEvents"); | |
| } | |
| } | |
| me.docIsLoaded = true; | |
| }; | |
| me.addEvent = function (obj, evType, fn) { | |
| if (obj.addEventListener) { | |
| obj.addEventListener(evType, fn, false); | |
| } else { | |
| if (obj.attachEvent) { | |
| obj["e" + evType + fn] = fn; | |
| obj[evType + fn] = function () { | |
| obj["e" + evType + fn](self.event); | |
| }; | |
| obj.attachEvent("on" + evType, obj[evType + fn]); | |
| } | |
| } | |
| }; | |
| me.removeEvent = function (obj, evType, fn) { | |
| if (obj.removeEventListener) { | |
| obj.removeEventListener(evType, fn, false); | |
| } else { | |
| if (obj.detachEvent) { | |
| try { | |
| obj.detachEvent("on" + evType, obj[evType + fn]); | |
| obj[evType + fn] = null; | |
| obj["e" + evType + fn] = null; | |
| } catch (ex) {} | |
| } | |
| } | |
| }; | |
| function removeEventAttribute(obj, beginName) { | |
| var attributes = obj.attributes; | |
| for (var i = 0; i < attributes.length; i++) { | |
| var attribute = attributes[i]; | |
| var name = attribute.name; | |
| if (name.indexOf(beginName) == 0) { | |
| attribute.specified = false; | |
| } | |
| } | |
| } | |
| me.addScrollWheelEvent = function (obj, fn) { | |
| if (obj.addEventListener) { | |
| obj.addEventListener("DOMMouseScroll", fn, true); | |
| } | |
| if (obj.attachEvent) { | |
| obj.attachEvent("onmousewheel", fn); | |
| } | |
| }; | |
| me.removeScrollWheelEvent = function (obj, fn) { | |
| if (obj.removeEventListener) { | |
| obj.removeEventListener("DOMMouseScroll", fn, true); | |
| } | |
| if (obj.detachEvent) { | |
| obj.detatchEvent("onmousewheel", fn); | |
| } | |
| }; | |
| me.getMouseX = function (e) { | |
| if (!e) { | |
| return; | |
| } | |
| if (e.pageX != null) { | |
| return e.pageX; | |
| } else { | |
| if (window.event != null && window.event.clientX != null && document.body != null && document.body.scrollLeft != null) { | |
| return window.event.clientX + document.body.scrollLeft; | |
| } else { | |
| if (e.clientX != null) { | |
| return e.clientX; | |
| } else { | |
| return null; | |
| } | |
| } | |
| } | |
| }; | |
| me.getMouseY = function (e) { | |
| if (e.pageY != null) { | |
| return e.pageY; | |
| } else { | |
| if (window.event != null && window.event.clientY != null && document.body != null && document.body.scrollTop != null) { | |
| return window.event.clientY + document.body.scrollTop; | |
| } else { | |
| if (e.clientY != null) { | |
| return e.clientY; | |
| } | |
| } | |
| } | |
| }; | |
| me.getScrollWheelDelta = function (e) { | |
| var delta = 0; | |
| if (!e) { | |
| e = window.event; | |
| } | |
| if (e.wheelDelta) { | |
| delta = e.wheelDelta / 120; | |
| if (window.opera) { | |
| delta = -delta; | |
| } | |
| } else { | |
| if (e.detail) { | |
| delta = -e.detail / 3; | |
| } | |
| } | |
| return delta; | |
| }; | |
| me.addMouseEvent = function (func) { | |
| if (document.captureEvents) { | |
| document.captureEvents(Event.MOUSEMOVE); | |
| } | |
| document.onmousemove = func; | |
| window.onmousemove = func; | |
| window.onmouseover = func; | |
| }; | |
| me.getEventTarget = function (e) { | |
| if (e.toElement) { | |
| return e.toElement; | |
| } else { | |
| if (e.currentTarget) { | |
| return e.currentTarget; | |
| } else { | |
| if (e.srcElement) { | |
| return e.srcElement; | |
| } else { | |
| return null; | |
| } | |
| } | |
| } | |
| }; | |
| me.getKey = function (e) { | |
| if (e.keyCode) { | |
| return e.keyCode; | |
| } else { | |
| if (e.event && e.event.keyCode) { | |
| return window.event.keyCode; | |
| } else { | |
| if (e.which) { | |
| return e.which; | |
| } | |
| } | |
| } | |
| }; | |
| me.addPageLoadEvent = function (funcName) { | |
| var func = eval(funcName); | |
| /*@cc_on @*/ | |
| /*@if (@_win32) | |
| pageLoadEventArray.push(func); | |
| return; | |
| /*@end @*/ | |
| if (isSafari) { | |
| pageLoadEventArray.push(func); | |
| if (!safariTimer) { | |
| safariTimer = setInterval(function () { | |
| if (/loaded|complete/.test(document.readyState)) { | |
| clearInterval(safariTimer); | |
| me.runPageLoadEvents(); | |
| return; | |
| } | |
| set = true; | |
| }, 10); | |
| } | |
| } else { | |
| if (document.addEventListener) { | |
| var x = document.addEventListener("DOMContentLoaded", func, null); | |
| } else { | |
| me.addEvent(window, "load", func); | |
| } | |
| } | |
| }; | |
| var pageLoadEventArray = new Array(); | |
| me.runPageLoadEvents = function (e) { | |
| if (isSafari || e.srcElement.readyState == "complete") { | |
| for (var i = 0; i < pageLoadEventArray.length; i++) { | |
| pageLoadEventArray[i](); | |
| } | |
| } | |
| }; | |
| me.hasPageLoadHappened = function (funcArgs) { | |
| if (funcArgs.callee.done) { | |
| return true; | |
| } | |
| funcArgs.callee.done = true; | |
| }; | |
| me.preventDefault = function (e) { | |
| if (e.preventDefault) { | |
| e.preventDefault(); | |
| } | |
| try { | |
| e.returnValue = false; | |
| } catch (ex) {} | |
| }; | |
| me.cancelBubble = function (e) { | |
| if (e.stopPropagation) { | |
| e.stopPropagation(); | |
| } | |
| try { | |
| e.cancelBubble = true; | |
| } catch (ex) {} | |
| }; | |
| me.fireEvent = function (element, event, options) { | |
| if (!element) { | |
| return; | |
| } | |
| if (document.createEventObject) { | |
| return element.fireEvent("on" + event, globalEvent); | |
| jslog.debug("ss"); | |
| } else { | |
| globalEvent.initEvent(event, true, true); | |
| return !element.dispatchEvent(globalEvent); | |
| } | |
| }; | |
| function init() { | |
| /*@cc_on @*/ | |
| /*@if (@_win32) | |
| document.write('<script id="__ie_onload" defer src="' + | |
| ((location.protocol == 'https:') ? '//0' : 'javascript:void(0)') + '"><\/script>'); | |
| var script = document.getElementById("__ie_onload"); | |
| me.addEvent(script, 'readystatechange', me.runPageLoadEvents); | |
| /*@end @*/ | |
| } | |
| init(); | |
| }; | |
| EventHelpers.addPageLoadEvent("EventHelpers.init"); | |
| eval(function (h, b, j, f, g, i) { | |
| g = function (a) { | |
| return (a < b ? "" : g(parseInt(a / b))) + ((a = a % b) > 35 ? String.fromCharCode(a + 29) : a.toString(36)); | |
| }; | |
| if (!"".replace(/^/, String)) { | |
| while (j--) { | |
| i[g(j)] = f[j] || g(j); | |
| } | |
| f = [function (a) { | |
| return i[a]; | |
| }]; | |
| g = function () { | |
| return "\\w+"; | |
| }; | |
| j = 1; | |
| } | |
| while (j--) { | |
| if (f[j]) { | |
| h = h.replace(new RegExp("\\b" + g(j) + "\\b", "g"), f[j]); | |
| } | |
| } | |
| return h; | |
| }('7 x=6(){7 1D="2.0.2";7 C=/\\s*,\\s*/;7 x=6(s,A){33{7 m=[];7 u=1z.32.2c&&!A;7 b=(A)?(A.31==22)?A:[A]:[1g];7 1E=18(s).1l(C),i;9(i=0;i<1E.y;i++){s=1y(1E[i]);8(U&&s.Z(0,3).2b("")==" *#"){s=s.Z(2);A=24([],b,s[1])}1A A=b;7 j=0,t,f,a,c="";H(j<s.y){t=s[j++];f=s[j++];c+=t+f;a="";8(s[j]=="("){H(s[j++]!=")")a+=s[j];a=a.Z(0,-1);c+="("+a+")"}A=(u&&V[c])?V[c]:21(A,t,f,a);8(u)V[c]=A}m=m.30(A)}2a x.2d;5 m}2Z(e){x.2d=e;5[]}};x.1Z=6(){5"6 x() {\\n [1D "+1D+"]\\n}"};7 V={};x.2c=L;x.2Y=6(s){8(s){s=1y(s).2b("");2a V[s]}1A V={}};7 29={};7 19=L;x.15=6(n,s){8(19)1i("s="+1U(s));29[n]=12 s()};x.2X=6(c){5 c?1i(c):o};7 D={};7 h={};7 q={P:/\\[([\\w-]+(\\|[\\w-]+)?)\\s*(\\W?=)?\\s*([^\\]]*)\\]/};7 T=[];D[" "]=6(r,f,t,n){7 e,i,j;9(i=0;i<f.y;i++){7 s=X(f[i],t,n);9(j=0;(e=s[j]);j++){8(M(e)&&14(e,n))r.z(e)}}};D["#"]=6(r,f,i){7 e,j;9(j=0;(e=f[j]);j++)8(e.B==i)r.z(e)};D["."]=6(r,f,c){c=12 1t("(^|\\\\s)"+c+"(\\\\s|$)");7 e,i;9(i=0;(e=f[i]);i++)8(c.l(e.1V))r.z(e)};D[":"]=6(r,f,p,a){7 t=h[p],e,i;8(t)9(i=0;(e=f[i]);i++)8(t(e,a))r.z(e)};h["2W"]=6(e){7 d=Q(e);8(d.1C)9(7 i=0;i<d.1C.y;i++){8(d.1C[i]==e)5 K}};h["2V"]=6(e){};7 M=6(e){5(e&&e.1c==1&&e.1f!="!")?e:23};7 16=6(e){H(e&&(e=e.2U)&&!M(e))28;5 e};7 G=6(e){H(e&&(e=e.2T)&&!M(e))28;5 e};7 1r=6(e){5 M(e.27)||G(e.27)};7 1P=6(e){5 M(e.26)||16(e.26)};7 1o=6(e){7 c=[];e=1r(e);H(e){c.z(e);e=G(e)}5 c};7 U=K;7 1h=6(e){7 d=Q(e);5(2S d.25=="2R")?/\\.1J$/i.l(d.2Q):2P(d.25=="2O 2N")};7 Q=6(e){5 e.2M||e.1g};7 X=6(e,t){5(t=="*"&&e.1B)?e.1B:e.X(t)};7 17=6(e,t,n){8(t=="*")5 M(e);8(!14(e,n))5 L;8(!1h(e))t=t.2L();5 e.1f==t};7 14=6(e,n){5!n||(n=="*")||(e.2K==n)};7 1e=6(e){5 e.1G};6 24(r,f,B){7 m,i,j;9(i=0;i<f.y;i++){8(m=f[i].1B.2J(B)){8(m.B==B)r.z(m);1A 8(m.y!=23){9(j=0;j<m.y;j++){8(m[j].B==B)r.z(m[j])}}}}5 r};8(![].z)22.2I.z=6(){9(7 i=0;i<1z.y;i++){o[o.y]=1z[i]}5 o.y};7 N=/\\|/;6 21(A,t,f,a){8(N.l(f)){f=f.1l(N);a=f[0];f=f[1]}7 r=[];8(D[t]){D[t](r,A,f,a)}5 r};7 S=/^[^\\s>+~]/;7 20=/[\\s#.:>+~()@]|[^\\s#.:>+~()@]+/g;6 1y(s){8(S.l(s))s=" "+s;5 s.P(20)||[]};7 W=/\\s*([\\s>+~(),]|^|$)\\s*/g;7 I=/([\\s>+~,]|[^(]\\+|^)([#.:@])/g;7 18=6(s){5 s.O(W,"$1").O(I,"$1*$2")};7 1u={1Z:6(){5"\'"},P:/^(\'[^\']*\')|("[^"]*")$/,l:6(s){5 o.P.l(s)},1S:6(s){5 o.l(s)?s:o+s+o},1Y:6(s){5 o.l(s)?s.Z(1,-1):s}};7 1s=6(t){5 1u.1Y(t)};7 E=/([\\/()[\\]?{}|*+-])/g;6 R(s){5 s.O(E,"\\\\$1")};x.15("1j-2H",6(){D[">"]=6(r,f,t,n){7 e,i,j;9(i=0;i<f.y;i++){7 s=1o(f[i]);9(j=0;(e=s[j]);j++)8(17(e,t,n))r.z(e)}};D["+"]=6(r,f,t,n){9(7 i=0;i<f.y;i++){7 e=G(f[i]);8(e&&17(e,t,n))r.z(e)}};D["@"]=6(r,f,a){7 t=T[a].l;7 e,i;9(i=0;(e=f[i]);i++)8(t(e))r.z(e)};h["2G-10"]=6(e){5!16(e)};h["1x"]=6(e,c){c=12 1t("^"+c,"i");H(e&&!e.13("1x"))e=e.1n;5 e&&c.l(e.13("1x"))};q.1X=/\\\\:/g;q.1w="@";q.J={};q.O=6(m,a,n,c,v){7 k=o.1w+m;8(!T[k]){a=o.1W(a,c||"",v||"");T[k]=a;T.z(a)}5 T[k].B};q.1Q=6(s){s=s.O(o.1X,"|");7 m;H(m=s.P(o.P)){7 r=o.O(m[0],m[1],m[2],m[3],m[4]);s=s.O(o.P,r)}5 s};q.1W=6(p,t,v){7 a={};a.B=o.1w+T.y;a.2F=p;t=o.J[t];t=t?t(o.13(p),1s(v)):L;a.l=12 2E("e","5 "+t);5 a};q.13=6(n){1d(n.2D()){F"B":5"e.B";F"2C":5"e.1V";F"9":5"e.2B";F"1T":8(U){5"1U((e.2A.P(/1T=\\\\1v?([^\\\\s\\\\1v]*)\\\\1v?/)||[])[1]||\'\')"}}5"e.13(\'"+n.O(N,":")+"\')"};q.J[""]=6(a){5 a};q.J["="]=6(a,v){5 a+"=="+1u.1S(v)};q.J["~="]=6(a,v){5"/(^| )"+R(v)+"( |$)/.l("+a+")"};q.J["|="]=6(a,v){5"/^"+R(v)+"(-|$)/.l("+a+")"};7 1R=18;18=6(s){5 1R(q.1Q(s))}});x.15("1j-2z",6(){D["~"]=6(r,f,t,n){7 e,i;9(i=0;(e=f[i]);i++){H(e=G(e)){8(17(e,t,n))r.z(e)}}};h["2y"]=6(e,t){t=12 1t(R(1s(t)));5 t.l(1e(e))};h["2x"]=6(e){5 e==Q(e).1H};h["2w"]=6(e){7 n,i;9(i=0;(n=e.1F[i]);i++){8(M(n)||n.1c==3)5 L}5 K};h["1N-10"]=6(e){5!G(e)};h["2v-10"]=6(e){e=e.1n;5 1r(e)==1P(e)};h["2u"]=6(e,s){7 n=x(s,Q(e));9(7 i=0;i<n.y;i++){8(n[i]==e)5 L}5 K};h["1O-10"]=6(e,a){5 1p(e,a,16)};h["1O-1N-10"]=6(e,a){5 1p(e,a,G)};h["2t"]=6(e){5 e.B==2s.2r.Z(1)};h["1M"]=6(e){5 e.1M};h["2q"]=6(e){5 e.1q===L};h["1q"]=6(e){5 e.1q};h["1L"]=6(e){5 e.1L};q.J["^="]=6(a,v){5"/^"+R(v)+"/.l("+a+")"};q.J["$="]=6(a,v){5"/"+R(v)+"$/.l("+a+")"};q.J["*="]=6(a,v){5"/"+R(v)+"/.l("+a+")"};6 1p(e,a,t){1d(a){F"n":5 K;F"2p":a="2n";1a;F"2o":a="2n+1"}7 1m=1o(e.1n);6 1k(i){7 i=(t==G)?1m.y-i:i-1;5 1m[i]==e};8(!Y(a))5 1k(a);a=a.1l("n");7 m=1K(a[0]);7 s=1K(a[1]);8((Y(m)||m==1)&&s==0)5 K;8(m==0&&!Y(s))5 1k(s);8(Y(s))s=0;7 c=1;H(e=t(e))c++;8(Y(m)||m==1)5(t==G)?(c<=s):(s>=c);5(c%m)==s}});x.15("1j-2m",6(){U=1i("L;/*@2l@8(@\\2k)U=K@2j@*/");8(!U){X=6(e,t,n){5 n?e.2i("*",t):e.X(t)};14=6(e,n){5!n||(n=="*")||(e.2h==n)};1h=1g.1I?6(e){5/1J/i.l(Q(e).1I)}:6(e){5 Q(e).1H.1f!="2g"};1e=6(e){5 e.2f||e.1G||1b(e)};6 1b(e){7 t="",n,i;9(i=0;(n=e.1F[i]);i++){1d(n.1c){F 11:F 1:t+=1b(n);1a;F 3:t+=n.2e;1a}}5 t}}});19=K;5 x}();', 62, 190, "|||||return|function|var|if|for||||||||pseudoClasses||||test|||this||AttributeSelector|||||||cssQuery|length|push|fr|id||selectors||case|nextElementSibling|while||tests|true|false|thisElement||replace|match|getDocument|regEscape||attributeSelectors|isMSIE|cache||getElementsByTagName|isNaN|slice|child||new|getAttribute|compareNamespace|addModule|previousElementSibling|compareTagName|parseSelector|loaded|break|_0|nodeType|switch|getTextContent|tagName|document|isXML|eval|css|_1|split|ch|parentNode|childElements|nthChild|disabled|firstElementChild|getText|RegExp|Quote|x22|PREFIX|lang|_2|arguments|else|all|links|version|se|childNodes|innerText|documentElement|contentType|xml|parseInt|indeterminate|checked|last|nth|lastElementChild|parse|_3|add|href|String|className|create|NS_IE|remove|toString|ST|select|Array|null|_4|mimeType|lastChild|firstChild|continue|modules|delete|join|caching|error|nodeValue|textContent|HTML|prefix|getElementsByTagNameNS|end|x5fwin32|cc_on|standard||odd|even|enabled|hash|location|target|not|only|empty|root|contains|level3|outerHTML|htmlFor|class|toLowerCase|Function|name|first|level2|prototype|item|scopeName|toUpperCase|ownerDocument|Document|XML|Boolean|URL|unknown|typeof|nextSibling|previousSibling|visited|link|valueOf|clearCache|catch|concat|constructor|callee|try".split("|"), 0, {})); | |
| eval(function (h, b, i, d, g, f) { | |
| g = function (a) { | |
| return (a < b ? "" : g(parseInt(a / b))) + ((a = a % b) > 35 ? String.fromCharCode(a + 29) : a.toString(36)); | |
| }; | |
| if (!"".replace(/^/, String)) { | |
| while (i--) { | |
| f[g(i)] = d[i] || g(i); | |
| } | |
| d = [function (a) { | |
| return f[a]; | |
| }]; | |
| g = function () { | |
| return "\\w+"; | |
| }; | |
| i = 1; | |
| } | |
| while (i--) { | |
| if (d[i]) { | |
| h = h.replace(new RegExp("\\b" + g(i) + "\\b", "g"), d[i]); | |
| } | |
| } | |
| return h; | |
| }("9 17={3i:'0.1.3',16:1e-6};l v(){}v.23={e:l(i){8(i<1||i>7.4.q)?w:7.4[i-1]},2R:l(){8 7.4.q},1u:l(){8 F.1x(7.2u(7))},24:l(a){9 n=7.4.q;9 V=a.4||a;o(n!=V.q){8 1L}J{o(F.13(7.4[n-1]-V[n-1])>17.16){8 1L}}H(--n);8 2x},1q:l(){8 v.u(7.4)},1b:l(a){9 b=[];7.28(l(x,i){b.19(a(x,i))});8 v.u(b)},28:l(a){9 n=7.4.q,k=n,i;J{i=k-n;a(7.4[i],i+1)}H(--n)},2q:l(){9 r=7.1u();o(r===0){8 7.1q()}8 7.1b(l(x){8 x/r})},1C:l(a){9 V=a.4||a;9 n=7.4.q,k=n,i;o(n!=V.q){8 w}9 b=0,1D=0,1F=0;7.28(l(x,i){b+=x*V[i-1];1D+=x*x;1F+=V[i-1]*V[i-1]});1D=F.1x(1D);1F=F.1x(1F);o(1D*1F===0){8 w}9 c=b/(1D*1F);o(c<-1){c=-1}o(c>1){c=1}8 F.37(c)},1m:l(a){9 b=7.1C(a);8(b===w)?w:(b<=17.16)},34:l(a){9 b=7.1C(a);8(b===w)?w:(F.13(b-F.1A)<=17.16)},2k:l(a){9 b=7.2u(a);8(b===w)?w:(F.13(b)<=17.16)},2j:l(a){9 V=a.4||a;o(7.4.q!=V.q){8 w}8 7.1b(l(x,i){8 x+V[i-1]})},2C:l(a){9 V=a.4||a;o(7.4.q!=V.q){8 w}8 7.1b(l(x,i){8 x-V[i-1]})},22:l(k){8 7.1b(l(x){8 x*k})},x:l(k){8 7.22(k)},2u:l(a){9 V=a.4||a;9 i,2g=0,n=7.4.q;o(n!=V.q){8 w}J{2g+=7.4[n-1]*V[n-1]}H(--n);8 2g},2f:l(a){9 B=a.4||a;o(7.4.q!=3||B.q!=3){8 w}9 A=7.4;8 v.u([(A[1]*B[2])-(A[2]*B[1]),(A[2]*B[0])-(A[0]*B[2]),(A[0]*B[1])-(A[1]*B[0])])},2A:l(){9 m=0,n=7.4.q,k=n,i;J{i=k-n;o(F.13(7.4[i])>F.13(m)){m=7.4[i]}}H(--n);8 m},2Z:l(x){9 a=w,n=7.4.q,k=n,i;J{i=k-n;o(a===w&&7.4[i]==x){a=i+1}}H(--n);8 a},3g:l(){8 S.2X(7.4)},2d:l(){8 7.1b(l(x){8 F.2d(x)})},2V:l(x){8 7.1b(l(y){8(F.13(y-x)<=17.16)?x:y})},1o:l(a){o(a.K){8 a.1o(7)}9 V=a.4||a;o(V.q!=7.4.q){8 w}9 b=0,2b;7.28(l(x,i){2b=x-V[i-1];b+=2b*2b});8 F.1x(b)},3a:l(a){8 a.1h(7)},2T:l(a){8 a.1h(7)},1V:l(t,a){9 V,R,x,y,z;2S(7.4.q){27 2:V=a.4||a;o(V.q!=2){8 w}R=S.1R(t).4;x=7.4[0]-V[0];y=7.4[1]-V[1];8 v.u([V[0]+R[0][0]*x+R[0][1]*y,V[1]+R[1][0]*x+R[1][1]*y]);1I;27 3:o(!a.U){8 w}9 C=a.1r(7).4;R=S.1R(t,a.U).4;x=7.4[0]-C[0];y=7.4[1]-C[1];z=7.4[2]-C[2];8 v.u([C[0]+R[0][0]*x+R[0][1]*y+R[0][2]*z,C[1]+R[1][0]*x+R[1][1]*y+R[1][2]*z,C[2]+R[2][0]*x+R[2][1]*y+R[2][2]*z]);1I;2P:8 w}},1t:l(a){o(a.K){9 P=7.4.2O();9 C=a.1r(P).4;8 v.u([C[0]+(C[0]-P[0]),C[1]+(C[1]-P[1]),C[2]+(C[2]-(P[2]||0))])}1d{9 Q=a.4||a;o(7.4.q!=Q.q){8 w}8 7.1b(l(x,i){8 Q[i-1]+(Q[i-1]-x)})}},1N:l(){9 V=7.1q();2S(V.4.q){27 3:1I;27 2:V.4.19(0);1I;2P:8 w}8 V},2n:l(){8'['+7.4.2K(', ')+']'},26:l(a){7.4=(a.4||a).2O();8 7}};v.u=l(a){9 V=25 v();8 V.26(a)};v.i=v.u([1,0,0]);v.j=v.u([0,1,0]);v.k=v.u([0,0,1]);v.2J=l(n){9 a=[];J{a.19(F.2F())}H(--n);8 v.u(a)};v.1j=l(n){9 a=[];J{a.19(0)}H(--n);8 v.u(a)};l S(){}S.23={e:l(i,j){o(i<1||i>7.4.q||j<1||j>7.4[0].q){8 w}8 7.4[i-1][j-1]},33:l(i){o(i>7.4.q){8 w}8 v.u(7.4[i-1])},2E:l(j){o(j>7.4[0].q){8 w}9 a=[],n=7.4.q,k=n,i;J{i=k-n;a.19(7.4[i][j-1])}H(--n);8 v.u(a)},2R:l(){8{2D:7.4.q,1p:7.4[0].q}},2D:l(){8 7.4.q},1p:l(){8 7.4[0].q},24:l(a){9 M=a.4||a;o(1g(M[0][0])=='1f'){M=S.u(M).4}o(7.4.q!=M.q||7.4[0].q!=M[0].q){8 1L}9 b=7.4.q,15=b,i,G,10=7.4[0].q,j;J{i=15-b;G=10;J{j=10-G;o(F.13(7.4[i][j]-M[i][j])>17.16){8 1L}}H(--G)}H(--b);8 2x},1q:l(){8 S.u(7.4)},1b:l(a){9 b=[],12=7.4.q,15=12,i,G,10=7.4[0].q,j;J{i=15-12;G=10;b[i]=[];J{j=10-G;b[i][j]=a(7.4[i][j],i+1,j+1)}H(--G)}H(--12);8 S.u(b)},2i:l(a){9 M=a.4||a;o(1g(M[0][0])=='1f'){M=S.u(M).4}8(7.4.q==M.q&&7.4[0].q==M[0].q)},2j:l(a){9 M=a.4||a;o(1g(M[0][0])=='1f'){M=S.u(M).4}o(!7.2i(M)){8 w}8 7.1b(l(x,i,j){8 x+M[i-1][j-1]})},2C:l(a){9 M=a.4||a;o(1g(M[0][0])=='1f'){M=S.u(M).4}o(!7.2i(M)){8 w}8 7.1b(l(x,i,j){8 x-M[i-1][j-1]})},2B:l(a){9 M=a.4||a;o(1g(M[0][0])=='1f'){M=S.u(M).4}8(7.4[0].q==M.q)},22:l(a){o(!a.4){8 7.1b(l(x){8 x*a})}9 b=a.1u?2x:1L;9 M=a.4||a;o(1g(M[0][0])=='1f'){M=S.u(M).4}o(!7.2B(M)){8 w}9 d=7.4.q,15=d,i,G,10=M[0].q,j;9 e=7.4[0].q,4=[],21,20,c;J{i=15-d;4[i]=[];G=10;J{j=10-G;21=0;20=e;J{c=e-20;21+=7.4[i][c]*M[c][j]}H(--20);4[i][j]=21}H(--G)}H(--d);9 M=S.u(4);8 b?M.2E(1):M},x:l(a){8 7.22(a)},32:l(a,b,c,d){9 e=[],12=c,i,G,j;9 f=7.4.q,1p=7.4[0].q;J{i=c-12;e[i]=[];G=d;J{j=d-G;e[i][j]=7.4[(a+i-1)%f][(b+j-1)%1p]}H(--G)}H(--12);8 S.u(e)},31:l(){9 a=7.4.q,1p=7.4[0].q;9 b=[],12=1p,i,G,j;J{i=1p-12;b[i]=[];G=a;J{j=a-G;b[i][j]=7.4[j][i]}H(--G)}H(--12);8 S.u(b)},1y:l(){8(7.4.q==7.4[0].q)},2A:l(){9 m=0,12=7.4.q,15=12,i,G,10=7.4[0].q,j;J{i=15-12;G=10;J{j=10-G;o(F.13(7.4[i][j])>F.13(m)){m=7.4[i][j]}}H(--G)}H(--12);8 m},2Z:l(x){9 a=w,12=7.4.q,15=12,i,G,10=7.4[0].q,j;J{i=15-12;G=10;J{j=10-G;o(7.4[i][j]==x){8{i:i+1,j:j+1}}}H(--G)}H(--12);8 w},30:l(){o(!7.1y){8 w}9 a=[],n=7.4.q,k=n,i;J{i=k-n;a.19(7.4[i][i])}H(--n);8 v.u(a)},1K:l(){9 M=7.1q(),1c;9 n=7.4.q,k=n,i,1s,1n=7.4[0].q,p;J{i=k-n;o(M.4[i][i]==0){2e(j=i+1;j<k;j++){o(M.4[j][i]!=0){1c=[];1s=1n;J{p=1n-1s;1c.19(M.4[i][p]+M.4[j][p])}H(--1s);M.4[i]=1c;1I}}}o(M.4[i][i]!=0){2e(j=i+1;j<k;j++){9 a=M.4[j][i]/M.4[i][i];1c=[];1s=1n;J{p=1n-1s;1c.19(p<=i?0:M.4[j][p]-M.4[i][p]*a)}H(--1s);M.4[j]=1c}}}H(--n);8 M},3h:l(){8 7.1K()},2z:l(){o(!7.1y()){8 w}9 M=7.1K();9 a=M.4[0][0],n=M.4.q-1,k=n,i;J{i=k-n+1;a=a*M.4[i][i]}H(--n);8 a},3f:l(){8 7.2z()},2y:l(){8(7.1y()&&7.2z()===0)},2Y:l(){o(!7.1y()){8 w}9 a=7.4[0][0],n=7.4.q-1,k=n,i;J{i=k-n+1;a+=7.4[i][i]}H(--n);8 a},3e:l(){8 7.2Y()},1Y:l(){9 M=7.1K(),1Y=0;9 a=7.4.q,15=a,i,G,10=7.4[0].q,j;J{i=15-a;G=10;J{j=10-G;o(F.13(M.4[i][j])>17.16){1Y++;1I}}H(--G)}H(--a);8 1Y},3d:l(){8 7.1Y()},2W:l(a){9 M=a.4||a;o(1g(M[0][0])=='1f'){M=S.u(M).4}9 T=7.1q(),1p=T.4[0].q;9 b=T.4.q,15=b,i,G,10=M[0].q,j;o(b!=M.q){8 w}J{i=15-b;G=10;J{j=10-G;T.4[i][1p+j]=M[i][j]}H(--G)}H(--b);8 T},2w:l(){o(!7.1y()||7.2y()){8 w}9 a=7.4.q,15=a,i,j;9 M=7.2W(S.I(a)).1K();9 b,1n=M.4[0].q,p,1c,2v;9 c=[],2c;J{i=a-1;1c=[];b=1n;c[i]=[];2v=M.4[i][i];J{p=1n-b;2c=M.4[i][p]/2v;1c.19(2c);o(p>=15){c[i].19(2c)}}H(--b);M.4[i]=1c;2e(j=0;j<i;j++){1c=[];b=1n;J{p=1n-b;1c.19(M.4[j][p]-M.4[i][p]*M.4[j][i])}H(--b);M.4[j]=1c}}H(--a);8 S.u(c)},3c:l(){8 7.2w()},2d:l(){8 7.1b(l(x){8 F.2d(x)})},2V:l(x){8 7.1b(l(p){8(F.13(p-x)<=17.16)?x:p})},2n:l(){9 a=[];9 n=7.4.q,k=n,i;J{i=k-n;a.19(v.u(7.4[i]).2n())}H(--n);8 a.2K('\\n')},26:l(a){9 i,4=a.4||a;o(1g(4[0][0])!='1f'){9 b=4.q,15=b,G,10,j;7.4=[];J{i=15-b;G=4[i].q;10=G;7.4[i]=[];J{j=10-G;7.4[i][j]=4[i][j]}H(--G)}H(--b);8 7}9 n=4.q,k=n;7.4=[];J{i=k-n;7.4.19([4[i]])}H(--n);8 7}};S.u=l(a){9 M=25 S();8 M.26(a)};S.I=l(n){9 a=[],k=n,i,G,j;J{i=k-n;a[i]=[];G=k;J{j=k-G;a[i][j]=(i==j)?1:0}H(--G)}H(--n);8 S.u(a)};S.2X=l(a){9 n=a.q,k=n,i;9 M=S.I(n);J{i=k-n;M.4[i][i]=a[i]}H(--n);8 M};S.1R=l(b,a){o(!a){8 S.u([[F.1H(b),-F.1G(b)],[F.1G(b),F.1H(b)]])}9 d=a.1q();o(d.4.q!=3){8 w}9 e=d.1u();9 x=d.4[0]/e,y=d.4[1]/e,z=d.4[2]/e;9 s=F.1G(b),c=F.1H(b),t=1-c;8 S.u([[t*x*x+c,t*x*y-s*z,t*x*z+s*y],[t*x*y+s*z,t*y*y+c,t*y*z-s*x],[t*x*z-s*y,t*y*z+s*x,t*z*z+c]])};S.3b=l(t){9 c=F.1H(t),s=F.1G(t);8 S.u([[1,0,0],[0,c,-s],[0,s,c]])};S.39=l(t){9 c=F.1H(t),s=F.1G(t);8 S.u([[c,0,s],[0,1,0],[-s,0,c]])};S.38=l(t){9 c=F.1H(t),s=F.1G(t);8 S.u([[c,-s,0],[s,c,0],[0,0,1]])};S.2J=l(n,m){8 S.1j(n,m).1b(l(){8 F.2F()})};S.1j=l(n,m){9 a=[],12=n,i,G,j;J{i=n-12;a[i]=[];G=m;J{j=m-G;a[i][j]=0}H(--G)}H(--12);8 S.u(a)};l 14(){}14.23={24:l(a){8(7.1m(a)&&7.1h(a.K))},1q:l(){8 14.u(7.K,7.U)},2U:l(a){9 V=a.4||a;8 14.u([7.K.4[0]+V[0],7.K.4[1]+V[1],7.K.4[2]+(V[2]||0)],7.U)},1m:l(a){o(a.W){8 a.1m(7)}9 b=7.U.1C(a.U);8(F.13(b)<=17.16||F.13(b-F.1A)<=17.16)},1o:l(a){o(a.W){8 a.1o(7)}o(a.U){o(7.1m(a)){8 7.1o(a.K)}9 N=7.U.2f(a.U).2q().4;9 A=7.K.4,B=a.K.4;8 F.13((A[0]-B[0])*N[0]+(A[1]-B[1])*N[1]+(A[2]-B[2])*N[2])}1d{9 P=a.4||a;9 A=7.K.4,D=7.U.4;9 b=P[0]-A[0],2a=P[1]-A[1],29=(P[2]||0)-A[2];9 c=F.1x(b*b+2a*2a+29*29);o(c===0)8 0;9 d=(b*D[0]+2a*D[1]+29*D[2])/c;9 e=1-d*d;8 F.13(c*F.1x(e<0?0:e))}},1h:l(a){9 b=7.1o(a);8(b!==w&&b<=17.16)},2T:l(a){8 a.1h(7)},1v:l(a){o(a.W){8 a.1v(7)}8(!7.1m(a)&&7.1o(a)<=17.16)},1U:l(a){o(a.W){8 a.1U(7)}o(!7.1v(a)){8 w}9 P=7.K.4,X=7.U.4,Q=a.K.4,Y=a.U.4;9 b=X[0],1z=X[1],1B=X[2],1T=Y[0],1S=Y[1],1M=Y[2];9 c=P[0]-Q[0],2s=P[1]-Q[1],2r=P[2]-Q[2];9 d=-b*c-1z*2s-1B*2r;9 e=1T*c+1S*2s+1M*2r;9 f=b*b+1z*1z+1B*1B;9 g=1T*1T+1S*1S+1M*1M;9 h=b*1T+1z*1S+1B*1M;9 k=(d*g/f+h*e)/(g-h*h);8 v.u([P[0]+k*b,P[1]+k*1z,P[2]+k*1B])},1r:l(a){o(a.U){o(7.1v(a)){8 7.1U(a)}o(7.1m(a)){8 w}9 D=7.U.4,E=a.U.4;9 b=D[0],1l=D[1],1k=D[2],1P=E[0],1O=E[1],1Q=E[2];9 x=(1k*1P-b*1Q),y=(b*1O-1l*1P),z=(1l*1Q-1k*1O);9 N=v.u([x*1Q-y*1O,y*1P-z*1Q,z*1O-x*1P]);9 P=11.u(a.K,N);8 P.1U(7)}1d{9 P=a.4||a;o(7.1h(P)){8 v.u(P)}9 A=7.K.4,D=7.U.4;9 b=D[0],1l=D[1],1k=D[2],1w=A[0],18=A[1],1a=A[2];9 x=b*(P[1]-18)-1l*(P[0]-1w),y=1l*((P[2]||0)-1a)-1k*(P[1]-18),z=1k*(P[0]-1w)-b*((P[2]||0)-1a);9 V=v.u([1l*x-1k*z,1k*y-b*x,b*z-1l*y]);9 k=7.1o(P)/V.1u();8 v.u([P[0]+V.4[0]*k,P[1]+V.4[1]*k,(P[2]||0)+V.4[2]*k])}},1V:l(t,a){o(1g(a.U)=='1f'){a=14.u(a.1N(),v.k)}9 R=S.1R(t,a.U).4;9 C=a.1r(7.K).4;9 A=7.K.4,D=7.U.4;9 b=C[0],1E=C[1],1J=C[2],1w=A[0],18=A[1],1a=A[2];9 x=1w-b,y=18-1E,z=1a-1J;8 14.u([b+R[0][0]*x+R[0][1]*y+R[0][2]*z,1E+R[1][0]*x+R[1][1]*y+R[1][2]*z,1J+R[2][0]*x+R[2][1]*y+R[2][2]*z],[R[0][0]*D[0]+R[0][1]*D[1]+R[0][2]*D[2],R[1][0]*D[0]+R[1][1]*D[1]+R[1][2]*D[2],R[2][0]*D[0]+R[2][1]*D[1]+R[2][2]*D[2]])},1t:l(a){o(a.W){9 A=7.K.4,D=7.U.4;9 b=A[0],18=A[1],1a=A[2],2N=D[0],1l=D[1],1k=D[2];9 c=7.K.1t(a).4;9 d=b+2N,2h=18+1l,2o=1a+1k;9 Q=a.1r([d,2h,2o]).4;9 e=[Q[0]+(Q[0]-d)-c[0],Q[1]+(Q[1]-2h)-c[1],Q[2]+(Q[2]-2o)-c[2]];8 14.u(c,e)}1d o(a.U){8 7.1V(F.1A,a)}1d{9 P=a.4||a;8 14.u(7.K.1t([P[0],P[1],(P[2]||0)]),7.U)}},1Z:l(a,b){a=v.u(a);b=v.u(b);o(a.4.q==2){a.4.19(0)}o(b.4.q==2){b.4.19(0)}o(a.4.q>3||b.4.q>3){8 w}9 c=b.1u();o(c===0){8 w}7.K=a;7.U=v.u([b.4[0]/c,b.4[1]/c,b.4[2]/c]);8 7}};14.u=l(a,b){9 L=25 14();8 L.1Z(a,b)};14.X=14.u(v.1j(3),v.i);14.Y=14.u(v.1j(3),v.j);14.Z=14.u(v.1j(3),v.k);l 11(){}11.23={24:l(a){8(7.1h(a.K)&&7.1m(a))},1q:l(){8 11.u(7.K,7.W)},2U:l(a){9 V=a.4||a;8 11.u([7.K.4[0]+V[0],7.K.4[1]+V[1],7.K.4[2]+(V[2]||0)],7.W)},1m:l(a){9 b;o(a.W){b=7.W.1C(a.W);8(F.13(b)<=17.16||F.13(F.1A-b)<=17.16)}1d o(a.U){8 7.W.2k(a.U)}8 w},2k:l(a){9 b=7.W.1C(a.W);8(F.13(F.1A/2-b)<=17.16)},1o:l(a){o(7.1v(a)||7.1h(a)){8 0}o(a.K){9 A=7.K.4,B=a.K.4,N=7.W.4;8 F.13((A[0]-B[0])*N[0]+(A[1]-B[1])*N[1]+(A[2]-B[2])*N[2])}1d{9 P=a.4||a;9 A=7.K.4,N=7.W.4;8 F.13((A[0]-P[0])*N[0]+(A[1]-P[1])*N[1]+(A[2]-(P[2]||0))*N[2])}},1h:l(a){o(a.W){8 w}o(a.U){8(7.1h(a.K)&&7.1h(a.K.2j(a.U)))}1d{9 P=a.4||a;9 A=7.K.4,N=7.W.4;9 b=F.13(N[0]*(A[0]-P[0])+N[1]*(A[1]-P[1])+N[2]*(A[2]-(P[2]||0)));8(b<=17.16)}},1v:l(a){o(1g(a.U)=='1f'&&1g(a.W)=='1f'){8 w}8!7.1m(a)},1U:l(a){o(!7.1v(a)){8 w}o(a.U){9 A=a.K.4,D=a.U.4,P=7.K.4,N=7.W.4;9 b=(N[0]*(P[0]-A[0])+N[1]*(P[1]-A[1])+N[2]*(P[2]-A[2]))/(N[0]*D[0]+N[1]*D[1]+N[2]*D[2]);8 v.u([A[0]+D[0]*b,A[1]+D[1]*b,A[2]+D[2]*b])}1d o(a.W){9 c=7.W.2f(a.W).2q();9 N=7.W.4,A=7.K.4,O=a.W.4,B=a.K.4;9 d=S.1j(2,2),i=0;H(d.2y()){i++;d=S.u([[N[i%3],N[(i+1)%3]],[O[i%3],O[(i+1)%3]]])}9 e=d.2w().4;9 x=N[0]*A[0]+N[1]*A[1]+N[2]*A[2];9 y=O[0]*B[0]+O[1]*B[1]+O[2]*B[2];9 f=[e[0][0]*x+e[0][1]*y,e[1][0]*x+e[1][1]*y];9 g=[];2e(9 j=1;j<=3;j++){g.19((i==j)?0:f[(j+(5-i)%3)%3])}8 14.u(g,c)}},1r:l(a){9 P=a.4||a;9 A=7.K.4,N=7.W.4;9 b=(A[0]-P[0])*N[0]+(A[1]-P[1])*N[1]+(A[2]-(P[2]||0))*N[2];8 v.u([P[0]+N[0]*b,P[1]+N[1]*b,(P[2]||0)+N[2]*b])},1V:l(t,a){9 R=S.1R(t,a.U).4;9 C=a.1r(7.K).4;9 A=7.K.4,N=7.W.4;9 b=C[0],1E=C[1],1J=C[2],1w=A[0],18=A[1],1a=A[2];9 x=1w-b,y=18-1E,z=1a-1J;8 11.u([b+R[0][0]*x+R[0][1]*y+R[0][2]*z,1E+R[1][0]*x+R[1][1]*y+R[1][2]*z,1J+R[2][0]*x+R[2][1]*y+R[2][2]*z],[R[0][0]*N[0]+R[0][1]*N[1]+R[0][2]*N[2],R[1][0]*N[0]+R[1][1]*N[1]+R[1][2]*N[2],R[2][0]*N[0]+R[2][1]*N[1]+R[2][2]*N[2]])},1t:l(a){o(a.W){9 A=7.K.4,N=7.W.4;9 b=A[0],18=A[1],1a=A[2],2M=N[0],2L=N[1],2Q=N[2];9 c=7.K.1t(a).4;9 d=b+2M,2p=18+2L,2m=1a+2Q;9 Q=a.1r([d,2p,2m]).4;9 e=[Q[0]+(Q[0]-d)-c[0],Q[1]+(Q[1]-2p)-c[1],Q[2]+(Q[2]-2m)-c[2]];8 11.u(c,e)}1d o(a.U){8 7.1V(F.1A,a)}1d{9 P=a.4||a;8 11.u(7.K.1t([P[0],P[1],(P[2]||0)]),7.W)}},1Z:l(a,b,c){a=v.u(a);a=a.1N();o(a===w){8 w}b=v.u(b);b=b.1N();o(b===w){8 w}o(1g(c)=='1f'){c=w}1d{c=v.u(c);c=c.1N();o(c===w){8 w}}9 d=a.4[0],18=a.4[1],1a=a.4[2];9 e=b.4[0],1W=b.4[1],1X=b.4[2];9 f,1i;o(c!==w){9 g=c.4[0],2l=c.4[1],2t=c.4[2];f=v.u([(1W-18)*(2t-1a)-(1X-1a)*(2l-18),(1X-1a)*(g-d)-(e-d)*(2t-1a),(e-d)*(2l-18)-(1W-18)*(g-d)]);1i=f.1u();o(1i===0){8 w}f=v.u([f.4[0]/1i,f.4[1]/1i,f.4[2]/1i])}1d{1i=F.1x(e*e+1W*1W+1X*1X);o(1i===0){8 w}f=v.u([b.4[0]/1i,b.4[1]/1i,b.4[2]/1i])}7.K=a;7.W=f;8 7}};11.u=l(a,b,c){9 P=25 11();8 P.1Z(a,b,c)};11.2I=11.u(v.1j(3),v.k);11.2H=11.u(v.1j(3),v.i);11.2G=11.u(v.1j(3),v.j);11.36=11.2I;11.35=11.2H;11.3j=11.2G;9 $V=v.u;9 $M=S.u;9 $L=14.u;9 $P=11.u;", 62, 206, "||||elements|||this|return|var||||||||||||function|||if||length||||create|Vector|null|||||||||Math|nj|while||do|anchor||||||||Matrix||direction||normal||||kj|Plane|ni|abs|Line|ki|precision|Sylvester|A2|push|A3|map|els|else||undefined|typeof|contains|mod|Zero|D3|D2|isParallelTo|kp|distanceFrom|cols|dup|pointClosestTo|np|reflectionIn|modulus|intersects|A1|sqrt|isSquare|X2|PI|X3|angleFrom|mod1|C2|mod2|sin|cos|break|C3|toRightTriangular|false|Y3|to3D|E2|E1|E3|Rotation|Y2|Y1|intersectionWith|rotate|v12|v13|rank|setVectors|nc|sum|multiply|prototype|eql|new|setElements|case|each|PA3|PA2|part|new_element|round|for|cross|product|AD2|isSameSizeAs|add|isPerpendicularTo|v22|AN3|inspect|AD3|AN2|toUnitVector|PsubQ3|PsubQ2|v23|dot|divisor|inverse|true|isSingular|determinant|max|canMultiplyFromLeft|subtract|rows|col|random|ZX|YZ|XY|Random|join|N2|N1|D1|slice|default|N3|dimensions|switch|liesIn|translate|snapTo|augment|Diagonal|trace|indexOf|diagonal|transpose|minor|row|isAntiparallelTo|ZY|YX|acos|RotationZ|RotationY|liesOn|RotationX|inv|rk|tr|det|toDiagonalMatrix|toUpperTriangular|version|XZ".split("|"), 0, {})); | |
| if (!document.querySelectorAll) { | |
| document.querySelectorAll = cssQuery; | |
| } | |
| var cssSandpaper = new function () { | |
| var A = this; | |
| var n, c = new Array(); | |
| var d = /[^\{]*{[^\}]*}/g; | |
| var q = /[\{\}]/g; | |
| var t = /gradient\([\s\S]*\)/g; | |
| var u = /hsl\([\s\S]*\)/g; | |
| var a = /\/\/.+?(?=\n|\r|$)|\/\*[\s\S]+?\*\//g; | |
| var f = /@[^\{\};]*;|@[^\{\};]*\{[^\}]*\}/g; | |
| var s = /\(\s*/g; | |
| var e = new Array(); | |
| var z; | |
| var o; | |
| var k; | |
| A.init = function (B) { | |
| if (EventHelpers.hasPageLoadHappened(arguments) && !B) { | |
| return; | |
| } | |
| k = document.body; | |
| o = document.createElement("div"); | |
| i(); | |
| b(); | |
| h(); | |
| m(); | |
| r(); | |
| v(); | |
| p(); | |
| y(); | |
| l(); | |
| }; | |
| A.setOpacity = function (E, D) { | |
| var C = CSS3Helpers.findProperty(document.body, "opacity"); | |
| if (C == "filter") { | |
| E.style.zoom = "100%"; | |
| var B = CSS3Helpers.addFilter(E, "DXImageTransform.Microsoft.Alpha", StringHelpers.sprintf("opacity=%d", ((D) * 100))); | |
| B.opacity = D * 100; | |
| } else { | |
| if (E.style[C] != null) { | |
| E.style[C] = D; | |
| } | |
| } | |
| }; | |
| function y() { | |
| var F = j("opacity").values; | |
| for (var D in F) { | |
| var E = F[D]; | |
| var B = document.querySelectorAll(E.selector); | |
| for (var C = 0; C < B.length; C++) { | |
| A.setOpacity(B[C], E.value); | |
| } | |
| } | |
| } | |
| A.setTransform = function (E, C) { | |
| var D = CSS3Helpers.findProperty(E, "transform"); | |
| if (D == "filter") { | |
| var B = CSS3Helpers.getTransformationMatrix(C); | |
| CSS3Helpers.setMatrixFilter(E, B); | |
| } else { | |
| if (E.style[D] != null) { | |
| E.style[D] = C; | |
| } | |
| } | |
| }; | |
| function h() { | |
| var G = j("-sand-transform").values; | |
| var E = CSS3Helpers.findProperty(document.body, "transform"); | |
| for (var D in G) { | |
| var F = G[D]; | |
| var B = document.querySelectorAll(F.selector); | |
| for (var C = 0; C < B.length; C++) { | |
| A.setTransform(B[C], F.value); | |
| } | |
| } | |
| } | |
| A.setBoxShadow = function (F, E) { | |
| var D = CSS3Helpers.findProperty(F, "boxShadow"); | |
| var B = CSS3Helpers.getBoxShadowValues(E); | |
| if (D == "filter") { | |
| var C = CSS3Helpers.addFilter(F, "DXImageTransform.Microsoft.DropShadow", StringHelpers.sprintf("color=%s,offX=%d,offY=%d", B.color, B.offsetX, B.offsetY)); | |
| C.color = B.color; | |
| C.offX = B.offsetX; | |
| C.offY = B.offsetY; | |
| } else { | |
| if (F.style[D] != null) { | |
| F.style[D] = E; | |
| } | |
| } | |
| }; | |
| function m() { | |
| var F = j("-sand-box-shadow").values; | |
| for (var D in F) { | |
| var E = F[D]; | |
| var B = document.querySelectorAll(E.selector); | |
| for (var C = 0; C < B.length; C++) { | |
| A.setBoxShadow(B[C], E.value); | |
| } | |
| } | |
| } | |
| function g(E, B) { | |
| if (B.colorStops.length == 2 && B.colorStops[0].stop == 0 && B.colorStops[1].stop == 1) { | |
| var F = new RGBColor(B.colorStops[0].color); | |
| var D = new RGBColor(B.colorStops[1].color); | |
| F = F.toHex(); | |
| D = D.toHex(); | |
| var C = CSS3Helpers.addFilter(E, "DXImageTransform.Microsoft.Gradient", StringHelpers.sprintf("GradientType = %s, StartColorStr = '%s', EndColorStr = '%s'", B.IEdir, F, D)); | |
| C.GradientType = B.IEdir; | |
| C.StartColorStr = F; | |
| C.EndColorStr = D; | |
| E.style.zoom = 1; | |
| } | |
| } | |
| A.setGradient = function (F, G) { | |
| var E = CSS3Helpers.reportGradientSupport(); | |
| var B = CSS3Helpers.getGradient(G); | |
| if (B == null) { | |
| return; | |
| } | |
| if (F.filters) { | |
| g(F, B); | |
| } else { | |
| if (E == implementation.MOZILLA) { | |
| F.style.backgroundImage = StringHelpers.sprintf("-moz-gradient( %s, %s, from(%s), to(%s))", B.dirBegin, B.dirEnd, B.colorStops[0].color, B.colorStops[1].color); | |
| } else { | |
| if (E == implementation.WEBKIT) { | |
| var D = StringHelpers.sprintf("-webkit-gradient(%s, %s, %s %s, %s %s)", B.type, B.dirBegin, B.r0 ? B.r0 + ", " : "", B.dirEnd, B.r1 ? B.r1 + ", " : "", w(B.colorStops)); | |
| F.style.backgroundImage = D; | |
| } else { | |
| if (E == implementation.CANVAS_WORKAROUND) { | |
| try { | |
| CSS3Helpers.applyCanvasGradient(F, B); | |
| } catch (C) {} | |
| } | |
| } | |
| } | |
| } | |
| }; | |
| A.setRGBABackground = function (C, D) { | |
| var B = CSS3Helpers.reportColorSpaceSupport("RGBA", colorType.BACKGROUND); | |
| switch (B) { | |
| case implementation.NATIVE: | |
| C.style.value = D; | |
| break; | |
| case implementation.FILTER_WORKAROUND: | |
| g(C, { | |
| IEdir: 0, | |
| colorStops: [{ | |
| stop: 0, | |
| color: D | |
| }, { | |
| stop: 1, | |
| color: D | |
| }] | |
| }); | |
| break; | |
| } | |
| }; | |
| A.setHSLABackground = function (E, F) { | |
| var C = CSS3Helpers.reportColorSpaceSupport("HSLA", colorType.BACKGROUND); | |
| switch (C) { | |
| case implementation.NATIVE: | |
| case implementation.FILTER_WORKAROUND: | |
| var D = new RGBColor(F); | |
| if (D.a == 1) { | |
| E.style.backgroundColor = D.toHex(); | |
| } else { | |
| var B = D.toRGBA(); | |
| g(E, { | |
| IEdir: 0, | |
| colorStops: [{ | |
| stop: 0, | |
| color: B | |
| }, { | |
| stop: 1, | |
| color: B | |
| }] | |
| }); | |
| } | |
| break; | |
| } | |
| }; | |
| A.camelize = function (C) { | |
| var D = ""; | |
| for (var B = 0; B < C.length; B++) { | |
| if (C.substring(B, B + 1) == "-") { | |
| B++; | |
| D += C.substring(B, B + 1).toUpperCase(); | |
| } else { | |
| D += C.substring(B, B + 1); | |
| } | |
| } | |
| return D; | |
| }; | |
| A.setHSLColor = function (E, H, G) { | |
| var D = CSS3Helpers.reportColorSpaceSupport("HSL", colorType.FOREGROUND); | |
| switch (D) { | |
| case implementation.NATIVE: | |
| case implementation.HEX_WORKAROUND: | |
| var B = G.match(u)[0]; | |
| var C = new RGBColor(B).toHex(); | |
| var F = G.replace(u, C); | |
| E.style[A.camelize(H)] = F; | |
| break; | |
| } | |
| }; | |
| function r() { | |
| var F = j("background").values.concat(j("background-image").values); | |
| for (var D in F) { | |
| var E = F[D]; | |
| var B = document.querySelectorAll(E.selector); | |
| for (var C = 0; C < B.length; C++) { | |
| A.setGradient(B[C], E.value); | |
| } | |
| } | |
| } | |
| function v() { | |
| var E = CSS3Helpers.reportColorSpaceSupport("RGBA", colorType.BACKGROUND); | |
| if (E == implementation.NATIVE) { | |
| return; | |
| } | |
| var G = j("background").values.concat(j("background-color").values); | |
| for (var D in G) { | |
| var F = G[D]; | |
| var B = document.querySelectorAll(F.selector); | |
| for (var C = 0; C < B.length; C++) { | |
| if (F.value.indexOf("rgba(") == 0) { | |
| A.setRGBABackground(B[C], F.value); | |
| } else { | |
| if (F.value.indexOf("hsla(") == 0 || F.value.indexOf("hsl(") == 0) { | |
| A.setHSLABackground(B[C], F.value); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| A.getProperties = function (F, E) { | |
| var B = ""; | |
| if (!F) { | |
| return B; | |
| } | |
| for (var D in F) { | |
| try { | |
| B += E + "." + D.toString() + " = " + F[D] + ", "; | |
| } catch (C) {} | |
| } | |
| return B; | |
| }; | |
| function p() { | |
| var J = CSS3Helpers.reportColorSpaceSupport("HSL", colorType.FOREGROUND); | |
| if (J == implementation.NATIVE) { | |
| return; | |
| } | |
| var C = j("color").values; | |
| var G = ["color", "border", "border-left", "border-right", "border-bottom", "border-top", "border-left-color", "border-right-color", "border-bottom-color", "border-top-color"]; | |
| for (var F = 0; F < G.length; F++) { | |
| var K = j(G[F]).values; | |
| C = C.concat(K); | |
| } | |
| for (var F in C) { | |
| var I = C[F]; | |
| var B = document.querySelectorAll(I.selector); | |
| for (var E = 0; E < B.length; E++) { | |
| var L = (I.name.indexOf("border") == 0); | |
| var D = I.value.match(u); | |
| if (D) { | |
| var H; | |
| if (L && I.name.indexOf("-color") < 0) { | |
| H = I.name; | |
| } else { | |
| H = I.name; | |
| } | |
| A.setHSLColor(B[E], H, I.value); | |
| } | |
| } | |
| } | |
| } | |
| function w(B) { | |
| var D = new StringBuffer(); | |
| for (var C = 0; C < B.length; C++) { | |
| D.append(StringHelpers.sprintf("color-stop(%s, %s)", B[C].stop, B[C].color)); | |
| if (C < B.length - 1) { | |
| D.append(", "); | |
| } | |
| } | |
| return D.toString(); | |
| } | |
| function x(C) { | |
| var B; | |
| switch (C.nodeName.toLowerCase()) { | |
| case "style": | |
| B = StringHelpers.uncommentHTML(C.innerHTML); | |
| break; | |
| case "link": | |
| var D = XMLHelpers.getXMLHttpRequest(C.href, null, "GET", null, false); | |
| B = D.responseText; | |
| break; | |
| } | |
| B = B.replace(a, "").replace(f, ""); | |
| return B; | |
| } | |
| function i() { | |
| n = document.querySelectorAll('style, link[rel="stylesheet"]'); | |
| for (var B = 0; B < n.length; B++) { | |
| if (!CSSHelpers.isMemberOfClass(n[B], "cssSandpaper-noIndex")) { | |
| c.push(x(n[B])); | |
| } | |
| } | |
| } | |
| function b() { | |
| for (var G = 0; G < c.length; G++) { | |
| var I = c[G]; | |
| rules = I.match(d); | |
| if (rules) { | |
| for (var F = 0; F < rules.length; F++) { | |
| var C = rules[F].split(q); | |
| var D = C[0].trim(); | |
| var L = C[1]; | |
| var J = L.split(";"); | |
| for (var E = 0; E < J.length; E++) { | |
| if (J[E].trim() != "") { | |
| var H = J[E].split(":"); | |
| var B = H[0].trim().toLowerCase(); | |
| var K = H[1]; | |
| if (!e[B]) { | |
| e[B] = new RuleList(B); | |
| } | |
| if (K && typeof (e[B]) == "object") { | |
| e[B].add(D, K.trim()); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| function j(B) { | |
| var C = e[B]; | |
| if (!C) { | |
| C = new RuleList(B); | |
| } | |
| return C; | |
| } | |
| function l() { | |
| var E = document.getElementsByTagName("html")[0]; | |
| var C = ["transform", "opacity"]; | |
| for (var B = 0; B < C.length; B++) { | |
| var F = C[B]; | |
| if (CSS3Helpers.supports(F)) { | |
| CSSHelpers.addClass(E, "cssSandpaper-" + F); | |
| } | |
| } | |
| var D = CSSHelpers.getElementsByClassName(document, "cssSandpaper-initiallyHidden"); | |
| for (var B = 0; B < D.length; B++) { | |
| CSSHelpers.removeClass(D[B], "cssSandpaper-initiallyHidden"); | |
| } | |
| } | |
| }; | |
| function RuleList(a) { | |
| var b = this; | |
| b.values = new Array(); | |
| b.propertyName = a; | |
| b.add = function (c, d) { | |
| b.values.push(new CSSRule(c, b.propertyName, d)); | |
| }; | |
| } | |
| function CSSRule(a, b, d) { | |
| var c = this; | |
| c.selector = a; | |
| c.name = b; | |
| c.value = d; | |
| c.toString = function () { | |
| return StringHelpers.sprintf("%s { %s: %s}", c.selector, c.name, c.value); | |
| }; | |
| } | |
| var MatrixGenerator = new function () { | |
| var c = this; | |
| var b = /[a-z]+$/; | |
| c.identity = $M([ | |
| [1, 0, 0], | |
| [0, 1, 0], | |
| [0, 0, 1] | |
| ]); | |
| function a(e) { | |
| return (e - 360) * Math.PI / 180; | |
| } | |
| function d(h) { | |
| var f = parseFloat(h); | |
| var g = h.match(b); | |
| if (h.trim() == "0") { | |
| f = 0; | |
| g = "rad"; | |
| } | |
| if (g.length != 1 || f == 0) { | |
| return 0; | |
| } | |
| g = g[0]; | |
| var e; | |
| switch (g) { | |
| case "deg": | |
| e = a(f); | |
| break; | |
| case "rad": | |
| e = f; | |
| break; | |
| default: | |
| throw "Not an angle: " + h; | |
| } | |
| return e; | |
| } | |
| c.prettyPrint = function (e) { | |
| return StringHelpers.sprintf("| %s %s %s | - | %s %s %s | - |%s %s %s|", e.e(1, 1), e.e(1, 2), e.e(1, 3), e.e(2, 1), e.e(2, 2), e.e(2, 3), e.e(3, 1), e.e(3, 2), e.e(3, 3)); | |
| }; | |
| c.rotate = function (f) { | |
| var e = d(f); | |
| return Matrix.RotationZ(e); | |
| }; | |
| c.scale = function (f, e) { | |
| f = parseFloat(f); | |
| if (!e) { | |
| e = f; | |
| } else { | |
| e = parseFloat(e); | |
| } | |
| return $M([ | |
| [f, 0, 0], | |
| [0, e, 0], | |
| [0, 0, 1] | |
| ]); | |
| }; | |
| c.scaleX = function (e) { | |
| return c.scale(e, 1); | |
| }; | |
| c.scaleY = function (e) { | |
| return c.scale(1, e); | |
| }; | |
| c.skew = function (g, e) { | |
| var h = d(g); | |
| var f; | |
| if (e != null) { | |
| f = d(e); | |
| } else { | |
| f = h; | |
| } | |
| if (h != null && f != null) { | |
| return $M([ | |
| [1, Math.tan(h), 0], | |
| [Math.tan(f), 1, 0], | |
| [0, 0, 1] | |
| ]); | |
| } else { | |
| return null; | |
| } | |
| }; | |
| c.skewX = function (e) { | |
| return c.skew(e, "0"); | |
| }; | |
| c.skewY = function (e) { | |
| return c.skew("0", e); | |
| }; | |
| c.translate = function (g, e) { | |
| var h = parseInt(g); | |
| var f = parseInt(e); | |
| return $M([ | |
| [1, 0, h], | |
| [0, 1, f], | |
| [0, 0, 1] | |
| ]); | |
| }; | |
| c.translateX = function (e) { | |
| return c.translate(e, 0); | |
| }; | |
| c.translateY = function (e) { | |
| return c.translate(0, e); | |
| }; | |
| c.matrix = function (h, g, l, k, j, i) { | |
| return $M([ | |
| [h, l, parseInt(j)], | |
| [g, k, parseInt(i)], | |
| [0, 0, 1] | |
| ]); | |
| }; | |
| }; | |
| var CSS3Helpers = new function () { | |
| var me = this; | |
| var reTransformListSplitter = /[a-zA-Z]+\([^\)]*\)\s*/g; | |
| var reLeftBracket = /\(/g; | |
| var reRightBracket = /\)/g; | |
| var reComma = /,/g; | |
| var reSpaces = /\s+/g; | |
| var reFilterNameSplitter = /progid:([^\(]*)/g; | |
| var reLinearGradient; | |
| var canvas; | |
| var cache = new Array(); | |
| me.supports = function (cssProperty) { | |
| if (CSS3Helpers.findProperty(document.body, cssProperty) != null) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| }; | |
| me.getCanvas = function () { | |
| if (canvas) { | |
| return canvas; | |
| } else { | |
| canvas = document.createElement("canvas"); | |
| return canvas; | |
| } | |
| }; | |
| me.getTransformationMatrix = function (CSS3TransformProperty, doThrowIfError) { | |
| var transforms = CSS3TransformProperty.match(reTransformListSplitter); | |
| if (doThrowIfError) { | |
| var checkString = transforms.join(" ").replace(/\s*/g, " "); | |
| var normalizedCSSProp = CSS3TransformProperty.replace(/\s*/g, " "); | |
| if (checkString != normalizedCSSProp) { | |
| throw ("An invalid transform was given."); | |
| } | |
| } | |
| var resultantMatrix = MatrixGenerator.identity; | |
| for (var j = 0; j < transforms.length; j++) { | |
| var transform = transforms[j]; | |
| transform = transform.replace(reLeftBracket, '("').replace(reComma, '", "').replace(reRightBracket, '")'); | |
| try { | |
| var matrix = eval("MatrixGenerator." + transform); | |
| resultantMatrix = resultantMatrix.x(matrix); | |
| } catch (ex) { | |
| if (doThrowIfError) { | |
| var method = transform.split("(")[0]; | |
| var funcCall = transform.replace(/\"/g, ""); | |
| if (MatrixGenerator[method] == undefined) { | |
| throw "Error: invalid tranform function: " + funcCall; | |
| } else { | |
| throw "Error: Invalid or missing parameters in function call: " + funcCall; | |
| } | |
| } | |
| } | |
| } | |
| return resultantMatrix; | |
| }; | |
| me.getBoxShadowValues = function (propertyValue) { | |
| var r = new Object(); | |
| var values = propertyValue.split(reSpaces); | |
| if (values[0] == "inset") { | |
| r.inset = true; | |
| values = values.reverse().pop().reverse(); | |
| } else { | |
| r.inset = false; | |
| } | |
| r.offsetX = parseInt(values[0]); | |
| r.offsetY = parseInt(values[1]); | |
| if (values.length > 3) { | |
| r.blurRadius = values[2]; | |
| if (values.length > 4) { | |
| r.spreadRadius = values[3]; | |
| } | |
| } | |
| r.color = values[values.length - 1]; | |
| return r; | |
| }; | |
| me.getGradient = function (propertyValue) { | |
| var r = new Object(); | |
| r.colorStops = new Array(); | |
| var substring = me.getBracketedSubstring(propertyValue, "-sand-gradient"); | |
| if (substring == undefined) { | |
| return null; | |
| } | |
| var parameters = substring.match(/[^\(,]+(\([^\)]*\))?[^,]*/g); | |
| r.type = parameters[0].trim(); | |
| if (r.type == "linear") { | |
| r.dirBegin = parameters[1].trim(); | |
| r.dirEnd = parameters[2].trim(); | |
| var beginCoord = r.dirBegin.split(reSpaces); | |
| var endCoord = r.dirEnd.split(reSpaces); | |
| for (var i = 3; i < parameters.length; i++) { | |
| r.colorStops.push(parseColorStop(parameters[i].trim(), i - 3)); | |
| } | |
| if (document.body.filters) { | |
| if (r.x0 == r.x1) { | |
| switch (beginCoord[1]) { | |
| case "top": | |
| r.IEdir = 0; | |
| break; | |
| case "bottom": | |
| swapIndices(r.colorStops, 0, 1); | |
| r.IEdir = 0; | |
| break; | |
| } | |
| } | |
| if (r.y0 == r.y1) { | |
| switch (beginCoord[0]) { | |
| case "left": | |
| r.IEdir = 1; | |
| break; | |
| case "right": | |
| r.IEdir = 1; | |
| swapIndices(r.colorStops, 0, 1); | |
| break; | |
| } | |
| } | |
| } | |
| } else { | |
| if (document.body.filters) { | |
| return null; | |
| } | |
| r.dirBegin = parameters[1].trim(); | |
| r.r0 = parameters[2].trim(); | |
| r.dirEnd = parameters[3].trim(); | |
| r.r1 = parameters[4].trim(); | |
| var beginCoord = r.dirBegin.split(reSpaces); | |
| var endCoord = r.dirEnd.split(reSpaces); | |
| for (var i = 5; i < parameters.length; i++) { | |
| r.colorStops.push(parseColorStop(parameters[i].trim(), i - 5)); | |
| } | |
| } | |
| r.x0 = beginCoord[0]; | |
| r.y0 = beginCoord[1]; | |
| r.x1 = endCoord[0]; | |
| r.y1 = endCoord[1]; | |
| return r; | |
| }; | |
| function swapIndices(array, index1, index2) { | |
| var tmp = array[index1]; | |
| array[index1] = array[index2]; | |
| array[index2] = tmp; | |
| } | |
| function parseColorStop(colorStop, index) { | |
| var r = new Object(); | |
| var substring = me.getBracketedSubstring(colorStop, "color-stop"); | |
| var from = me.getBracketedSubstring(colorStop, "from"); | |
| var to = me.getBracketedSubstring(colorStop, "to"); | |
| if (substring) { | |
| var parameters = substring.split(","); | |
| r.stop = normalizePercentage(parameters[0].trim()); | |
| r.color = parameters[1].trim(); | |
| } else { | |
| if (from) { | |
| r.stop = 0; | |
| r.color = from.trim(); | |
| } else { | |
| if (to) { | |
| r.stop = 1; | |
| r.color = to.trim(); | |
| } else { | |
| if (index <= 1) { | |
| r.color = colorStop; | |
| if (index == 0) { | |
| r.stop = 0; | |
| } else { | |
| r.stop = 1; | |
| } | |
| } else { | |
| throw (StringHelpers.sprintf('invalid argument "%s"', colorStop)); | |
| } | |
| } | |
| } | |
| } | |
| return r; | |
| } | |
| function normalizePercentage(s) { | |
| if (s.substring(s.length - 1, s.length) == "%") { | |
| return parseFloat(s) / 100 + ""; | |
| } else { | |
| return s; | |
| } | |
| } | |
| me.reportGradientSupport = function () { | |
| if (!cache.gradientSupport) { | |
| var r; | |
| var div = document.createElement("div"); | |
| div.style.cssText = "background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(red), to(blue));"; | |
| if (div.style.backgroundImage) { | |
| r = implementation.WEBKIT; | |
| } else { | |
| var canvas = CSS3Helpers.getCanvas(); | |
| if (canvas.getContext && canvas.toDataURL) { | |
| r = implementation.CANVAS_WORKAROUND; | |
| } else { | |
| r = implementation.NONE; | |
| } | |
| } | |
| cache.gradientSupport = r; | |
| } | |
| return cache.gradientSupport; | |
| }; | |
| me.reportColorSpaceSupport = function (colorSpace, type) { | |
| if (!cache[colorSpace + type]) { | |
| var r; | |
| var div = document.createElement("div"); | |
| switch (type) { | |
| case colorType.BACKGROUND: | |
| switch (colorSpace) { | |
| case "RGBA": | |
| div.style.cssText = "background-color: rgba(255, 32, 34, 0.5)"; | |
| break; | |
| case "HSL": | |
| div.style.cssText = "background-color: hsl(0,0%,100%)"; | |
| break; | |
| case "HSLA": | |
| div.style.cssText = "background-color: hsla(0,0%,100%,.5)"; | |
| break; | |
| default: | |
| break; | |
| } | |
| var body = document.body; | |
| if (div.style.backgroundColor) { | |
| r = implementation.NATIVE; | |
| } else { | |
| if (body.filters && body.filters != undefined) { | |
| r = implementation.FILTER_WORKAROUND; | |
| } else { | |
| r = implementation.NONE; | |
| } | |
| } | |
| break; | |
| case colorType.FOREGROUND: | |
| switch (colorSpace) { | |
| case "RGBA": | |
| div.style.cssText = "color: rgba(255, 32, 34, 0.5)"; | |
| break; | |
| case "HSL": | |
| div.style.cssText = "color: hsl(0,0%,100%)"; | |
| break; | |
| case "HSLA": | |
| div.style.cssText = "color: hsla(0,0%,100%,.5)"; | |
| break; | |
| default: | |
| break; | |
| } | |
| if (div.style.color) { | |
| r = implementation.NATIVE; | |
| } else { | |
| if (colorSpace == "HSL") { | |
| r = implementation.HEX_WORKAROUND; | |
| } else { | |
| r = implementation.NONE; | |
| } | |
| } | |
| break; | |
| } | |
| cache[colorSpace] = r; | |
| } | |
| return cache[colorSpace]; | |
| }; | |
| me.getBracketedSubstring = function (s, header) { | |
| var gradientIndex = s.indexOf(header + "("); | |
| if (gradientIndex != -1) { | |
| var substring = s.substring(gradientIndex); | |
| var openBrackets = 1; | |
| for (var i = header.length + 1; i < 100 || i < substring.length; i++) { | |
| var c = substring.substring(i, i + 1); | |
| switch (c) { | |
| case "(": | |
| openBrackets++; | |
| break; | |
| case ")": | |
| openBrackets--; | |
| break; | |
| } | |
| if (openBrackets == 0) { | |
| break; | |
| } | |
| } | |
| return substring.substring(gradientIndex + header.length + 1, i); | |
| } | |
| }; | |
| me.setMatrixFilter = function (obj, matrix) { | |
| if (!hasIETransformWorkaround(obj)) { | |
| addIETransformWorkaround(obj); | |
| } | |
| var container = obj.parentNode; | |
| filter = obj.filters.item("DXImageTransform.Microsoft.Matrix"); | |
| filter.M11 = matrix.e(1, 1); | |
| filter.M12 = matrix.e(1, 2); | |
| filter.M21 = matrix.e(2, 1); | |
| filter.M22 = matrix.e(2, 2); | |
| var offsets = me.getIEMatrixOffsets(obj, matrix, container.xOriginalWidth, container.xOriginalHeight); | |
| container.style.marginLeft = offsets.x; | |
| container.style.marginTop = offsets.y; | |
| container.style.marginRight = 0; | |
| container.style.marginBottom = 0; | |
| }; | |
| me.getTransformedDimensions = function (obj, matrix) { | |
| var r = {}; | |
| if (hasIETransformWorkaround(obj)) { | |
| r.width = obj.offsetWidth; | |
| r.height = obj.offsetHeight; | |
| } else { | |
| var pts = [matrix.x($V([0, 0, 1])), matrix.x($V([0, obj.offsetHeight, 1])), matrix.x($V([obj.offsetWidth, 0, 1])), matrix.x($V([obj.offsetWidth, obj.offsetHeight, 1]))]; | |
| var maxX = 0, | |
| maxY = 0, | |
| minX = 0, | |
| minY = 0; | |
| for (var i = 0; i < pts.length; i++) { | |
| var pt = pts[i]; | |
| var x = pt.e(1), | |
| y = pt.e(2); | |
| var minX = Math.min(minX, x); | |
| var maxX = Math.max(maxX, x); | |
| var minY = Math.min(minY, y); | |
| var maxY = Math.max(maxY, y); | |
| } | |
| r.width = maxX - minX; | |
| r.height = maxY - minY; | |
| } | |
| return r; | |
| }; | |
| me.getIEMatrixOffsets = function (obj, matrix, width, height) { | |
| var r = {}; | |
| var originalWidth = parseFloat(width); | |
| var originalHeight = parseFloat(height); | |
| var offset; | |
| if (CSSHelpers.getComputedStyle(obj, "display") == "inline") { | |
| offset = 0; | |
| } else { | |
| offset = 13; | |
| } | |
| var transformedDimensions = me.getTransformedDimensions(obj, matrix); | |
| r.x = (((originalWidth - transformedDimensions.width) / 2) - offset + matrix.e(1, 3)) + "px"; | |
| r.y = (((originalHeight - transformedDimensions.height) / 2) - offset + matrix.e(2, 3)) + "px"; | |
| return r; | |
| }; | |
| function hasIETransformWorkaround(obj) { | |
| return CSSHelpers.isMemberOfClass(obj.parentNode, "IETransformContainer"); | |
| } | |
| function addIETransformWorkaround(obj) { | |
| if (!hasIETransformWorkaround(obj)) { | |
| var parentNode = obj.parentNode; | |
| var filter; | |
| var container = document.createElement("div"); | |
| CSSHelpers.addClass(container, "IETransformContainer"); | |
| container.style.width = obj.offsetWidth + "px"; | |
| container.style.height = obj.offsetHeight + "px"; | |
| container.xOriginalWidth = obj.offsetWidth; | |
| container.xOriginalHeight = obj.offsetHeight; | |
| container.style.position = "absolute"; | |
| container.style.zIndex = obj.currentStyle.zIndex; | |
| var horizPaddingFactor = 0; | |
| var vertPaddingFactor = 0; | |
| if (obj.currentStyle.display == "block") { | |
| container.style.left = obj.offsetLeft + 13 - horizPaddingFactor + "px"; | |
| container.style.top = obj.offsetTop + 13 + -vertPaddingFactor + "px"; | |
| } else { | |
| container.style.left = obj.offsetLeft + "px"; | |
| container.style.top = obj.offsetTop + "px"; | |
| } | |
| obj.style.top = "auto"; | |
| obj.style.left = "auto"; | |
| obj.style.bottom = "auto"; | |
| obj.style.right = "auto"; | |
| var replacement = obj.cloneNode(true); | |
| replacement.style.visibility = "hidden"; | |
| obj.replaceNode(replacement); | |
| obj.style.position = "absolute"; | |
| container.appendChild(obj); | |
| parentNode.insertBefore(container, replacement); | |
| container.style.backgroundColor = "transparent"; | |
| container.style.padding = "0"; | |
| filter = me.addFilter(obj, "DXImageTransform.Microsoft.Matrix", "M11=1, M12=0, M21=0, M22=1, sizingMethod='auto expand'"); | |
| var bgImage = obj.currentStyle.backgroundImage.split('"')[1]; | |
| } | |
| } | |
| me.addFilter = function (obj, filterName, filterValue) { | |
| var filter; | |
| try { | |
| filter = obj.filters.item(filterName); | |
| } catch (ex) { | |
| var filterList = new MSFilterList(obj); | |
| filterList.fixFilterStyle(); | |
| var comma = ", "; | |
| if (obj.filters.length == 0) { | |
| comma = ""; | |
| } | |
| obj.style.filter += StringHelpers.sprintf("%sprogid:%s(%s)", comma, filterName, filterValue); | |
| filter = obj.filters.item(filterName); | |
| } | |
| return filter; | |
| }; | |
| function degreesToRadians(degrees) { | |
| return (degrees - 360) * Math.PI / 180; | |
| } | |
| me.findProperty = function (obj, type) { | |
| capType = type.capitalize(); | |
| var r = cache[type]; | |
| if (!r) { | |
| var style = obj.style; | |
| var properties = [type, "Moz" + capType, "Webkit" + capType, "O" + capType, "filter"]; | |
| for (var i = 0; i < properties.length; i++) { | |
| if (style[properties[i]] != null) { | |
| r = properties[i]; | |
| break; | |
| } | |
| } | |
| if (r == "filter" && document.body.filters == undefined) { | |
| r = null; | |
| } | |
| cache[type] = r; | |
| } | |
| return r; | |
| }; | |
| me.parseCoordinate = function (value, max) { | |
| switch (value) { | |
| case "top": | |
| case "left": | |
| return 0; | |
| case "bottom": | |
| case "right": | |
| return max; | |
| case "center": | |
| return max / 2; | |
| } | |
| if (value.indexOf("%") != -1) { | |
| value = parseFloat(value.substr(0, value.length - 1)) / 100 * max; | |
| } else { | |
| value = parseFloat(value); | |
| } | |
| if (isNaN(value)) { | |
| throw Error("Unable to parse coordinate: " + value); | |
| } | |
| return value; | |
| }; | |
| me.applyCanvasGradient = function (el, gradient) { | |
| var canvas = me.getCanvas(); | |
| var computedStyle = document.defaultView.getComputedStyle(el, null); | |
| canvas.width = parseInt(computedStyle.width) + parseInt(computedStyle.paddingLeft) + parseInt(computedStyle.paddingRight) + 1; | |
| canvas.height = parseInt(computedStyle.height) + parseInt(computedStyle.paddingTop) + parseInt(computedStyle.paddingBottom) + 2; | |
| var ctx = canvas.getContext("2d"); | |
| var canvasGradient; | |
| if (gradient.type == "linear") { | |
| canvasGradient = ctx.createLinearGradient(me.parseCoordinate(gradient.x0, canvas.width), me.parseCoordinate(gradient.y0, canvas.height), me.parseCoordinate(gradient.x1, canvas.width), me.parseCoordinate(gradient.y1, canvas.height)); | |
| } else { | |
| canvasGradient = ctx.createRadialGradient(me.parseCoordinate(gradient.x0, canvas.width), me.parseCoordinate(gradient.y0, canvas.height), gradient.r0, me.parseCoordinate(gradient.x1, canvas.width), me.parseCoordinate(gradient.y1, canvas.height), gradient.r1); | |
| } | |
| for (var i = 0; i < gradient.colorStops.length; i++) { | |
| var cs = gradient.colorStops[i]; | |
| canvasGradient.addColorStop(cs.stop, cs.color); | |
| } | |
| ctx.fillStyle = canvasGradient; | |
| ctx.fillRect(0, 0, canvas.width, canvas.height); | |
| el.style.backgroundImage = "url('" + canvas.toDataURL() + "')"; | |
| }; | |
| }; | |
| function MSFilterList(d) { | |
| var c = this; | |
| c.list = new Array(); | |
| c.node = d; | |
| var a = /[\s\S]*\([\s\S]*\)/g; | |
| var b = d.style; | |
| function e() { | |
| var h = b.filter.match(a); | |
| if (h != null) { | |
| for (var f = 0; f < h.length; f++) { | |
| var g = h[f]; | |
| c.list.push(new MSFilter(d, g)); | |
| } | |
| } | |
| } | |
| c.toString = function () { | |
| var g = new StringBuffer(); | |
| for (var f = 0; f < c.list.length; f++) { | |
| g.append(c.list[f].toString()); | |
| if (f < c.list.length - 1) { | |
| g.append(","); | |
| } | |
| } | |
| return g.toString(); | |
| }; | |
| c.fixFilterStyle = function () { | |
| try { | |
| c.node.style.filter = c.toString(); | |
| } catch (f) {} | |
| }; | |
| e(); | |
| } | |
| function MSFilter(d, c) { | |
| var b = this; | |
| b.node = d; | |
| b.filterCall = c; | |
| var f = /progid:([^\(]*)/g; | |
| var a = /([a-zA-Z0-9]+\s*)=/g; | |
| function e() { | |
| b.name = b.filterCall.match(f)[0].replace("progid:", ""); | |
| var h = c.split("(")[1].replace(")", ""); | |
| b.parameters = h.match(a); | |
| for (var g = 0; g < b.parameters.length; g++) { | |
| b.parameters[g] = b.parameters[g].replace("=", ""); | |
| } | |
| } | |
| b.toString = function () { | |
| var l = new StringBuffer(); | |
| l.append(StringHelpers.sprintf("progid:%s(", b.name)); | |
| for (var g = 0; g < b.parameters.length; g++) { | |
| var k = b.parameters[g]; | |
| var j = b.node.filters.item(b.name); | |
| var h = j[k]; | |
| if (typeof (h) == "string") { | |
| l.append(StringHelpers.sprintf('%s="%s"', k, j[k])); | |
| } else { | |
| l.append(StringHelpers.sprintf("%s=%s", k, j[k])); | |
| } | |
| if (g != b.parameters.length - 1) { | |
| l.append(", "); | |
| } | |
| } | |
| l.append(")"); | |
| return l.toString(); | |
| }; | |
| e(); | |
| } | |
| var implementation = new function () { | |
| this.NONE = 0; | |
| this.NATIVE = 1; | |
| this.MOZILLA = 2; | |
| this.WEBKIT = 3; | |
| this.IE = 4; | |
| this.OPERA = 5; | |
| this.CANVAS_WORKAROUND = 6; | |
| this.FILTER_WORKAROUND = 7; | |
| this.HEX_WORKAROUND = 8; | |
| }; | |
| var colorType = new function () { | |
| this.BACKGROUND = 0; | |
| this.FOREGROUND = 1; | |
| }; | |
| if (!window.StringHelpers) { | |
| StringHelpers = new function () { | |
| var a = this; | |
| a.initWhitespaceRe = /^\s\s*/; | |
| a.endWhitespaceRe = /\s\s*$/; | |
| a.whitespaceRe = /\s/; | |
| a.sprintf = function (c) { | |
| var d = function (l, j, g) { | |
| var k = ""; | |
| for (var h = 0; h < Math.abs(g); h++) { | |
| k += j; | |
| } | |
| return g > 0 ? l + k : k + l; | |
| }; | |
| var f = function (h, l, i, g) { | |
| var k = function (o, n, p) { | |
| if (n >= 0) { | |
| if (o.indexOf(" ") >= 0) { | |
| p = " " + p; | |
| } else { | |
| if (o.indexOf("+") >= 0) { | |
| p = "+" + p; | |
| } | |
| } | |
| } else { | |
| p = "-" + p; | |
| } | |
| return p; | |
| }; | |
| var m = parseInt(l, 10); | |
| if (l.charAt(0) == "0") { | |
| var j = 0; | |
| if (h.indexOf(" ") >= 0 || h.indexOf("+") >= 0) { | |
| j++; | |
| } | |
| if (i.length < (m - j)) { | |
| i = d(i, "0", i.length - (m - j)); | |
| } | |
| return k(h, g, i); | |
| } | |
| i = k(h, g, i); | |
| if (i.length < m) { | |
| if (h.indexOf("-") < 0) { | |
| i = d(i, " ", i.length - m); | |
| } else { | |
| i = d(i, " ", m - i.length); | |
| } | |
| } | |
| return i; | |
| }; | |
| var e = new Array(); | |
| e.c = function (i, j, h, g) { | |
| if (typeof (g) == "number") { | |
| return String.fromCharCode(g); | |
| } | |
| if (typeof (g) == "string") { | |
| return g.charAt(0); | |
| } | |
| return ""; | |
| }; | |
| e.d = function (i, j, h, g) { | |
| return e.i(i, j, h, g); | |
| }; | |
| e.u = function (i, j, h, g) { | |
| return e.i(i, j, h, Math.abs(g)); | |
| }; | |
| e.i = function (i, k, h, g) { | |
| var l = parseInt(h); | |
| var j = ((Math.abs(g)).toString().split("."))[0]; | |
| if (j.length < l) { | |
| j = d(j, " ", l - j.length); | |
| } | |
| return f(i, k, j, g); | |
| }; | |
| e.E = function (i, j, h, g) { | |
| return (e.e(i, j, h, g)).toUpperCase(); | |
| }; | |
| e.e = function (i, j, h, g) { | |
| iPrecision = parseInt(h); | |
| if (isNaN(iPrecision)) { | |
| iPrecision = 6; | |
| } | |
| rs = (Math.abs(g)).toExponential(iPrecision); | |
| if (rs.indexOf(".") < 0 && i.indexOf("#") >= 0) { | |
| rs = rs.replace(/^(.*)(e.*)$/, "$1.$2"); | |
| } | |
| return f(i, j, rs, g); | |
| }; | |
| e.f = function (i, j, h, g) { | |
| iPrecision = parseInt(h); | |
| if (isNaN(iPrecision)) { | |
| iPrecision = 6; | |
| } | |
| rs = (Math.abs(g)).toFixed(iPrecision); | |
| if (rs.indexOf(".") < 0 && i.indexOf("#") >= 0) { | |
| rs = rs + "."; | |
| } | |
| return f(i, j, rs, g); | |
| }; | |
| e.G = function (i, j, h, g) { | |
| return (e.g(i, j, h, g)).toUpperCase(); | |
| }; | |
| e.g = function (i, j, h, g) { | |
| iPrecision = parseInt(h); | |
| absArg = Math.abs(g); | |
| rse = absArg.toExponential(); | |
| rsf = absArg.toFixed(6); | |
| if (!isNaN(iPrecision)) { | |
| rsep = absArg.toExponential(iPrecision); | |
| rse = rsep.length < rse.length ? rsep : rse; | |
| rsfp = absArg.toFixed(iPrecision); | |
| rsf = rsfp.length < rsf.length ? rsfp : rsf; | |
| } | |
| if (rse.indexOf(".") < 0 && i.indexOf("#") >= 0) { | |
| rse = rse.replace(/^(.*)(e.*)$/, "$1.$2"); | |
| } | |
| if (rsf.indexOf(".") < 0 && i.indexOf("#") >= 0) { | |
| rsf = rsf + "."; | |
| } | |
| rs = rse.length < rsf.length ? rse : rsf; | |
| return f(i, j, rs, g); | |
| }; | |
| e.o = function (i, k, h, g) { | |
| var l = parseInt(h); | |
| var j = Math.round(Math.abs(g)).toString(8); | |
| if (j.length < l) { | |
| j = d(j, " ", l - j.length); | |
| } | |
| if (i.indexOf("#") >= 0) { | |
| j = "0" + j; | |
| } | |
| return f(i, k, j, g); | |
| }; | |
| e.X = function (i, j, h, g) { | |
| return (e.x(i, j, h, g)).toUpperCase(); | |
| }; | |
| e.x = function (i, k, h, g) { | |
| var l = parseInt(h); | |
| g = Math.abs(g); | |
| var j = Math.round(g).toString(16); | |
| if (j.length < l) { | |
| j = d(j, " ", l - j.length); | |
| } | |
| if (i.indexOf("#") >= 0) { | |
| j = "0x" + j; | |
| } | |
| return f(i, k, j, g); | |
| }; | |
| e.s = function (i, k, h, g) { | |
| var l = parseInt(h); | |
| var j = g; | |
| if (j.length > l) { | |
| j = j.substring(0, l); | |
| } | |
| return f(i, k, j, 0); | |
| }; | |
| farr = c.split("%"); | |
| retstr = farr[0]; | |
| fpRE = /^([-+ #]*)(\d*)\.?(\d*)([cdieEfFgGosuxX])(.*)$/; | |
| for (var b = 1; b < farr.length; b++) { | |
| fps = fpRE.exec(farr[b]); | |
| if (!fps) { | |
| continue; | |
| } | |
| if (arguments[b] != null) { | |
| retstr += e[fps[4]](fps[1], fps[2], fps[3], arguments[b]); | |
| } | |
| retstr += fps[5]; | |
| } | |
| return retstr; | |
| }; | |
| a.uncommentHTML = function (b) { | |
| if (b.indexOf("-->") != -1 && b.indexOf("<!--") != -1) { | |
| return b.replace("<!--", "").replace("-->", ""); | |
| } else { | |
| return b; | |
| } | |
| }; | |
| }; | |
| } | |
| if (!window.XMLHelpers) { | |
| XMLHelpers = new function () { | |
| var a = this; | |
| a.getXMLHttpRequest = function (b, e) { | |
| var h = a.getXMLHttpRequest.arguments; | |
| var f = a.getXMLHttpRequest.arguments.length; | |
| var c = (f > 2) ? h[2] : "GET"; | |
| var g = (f > 3) ? h[3] : ""; | |
| var d = (f > 4) ? h[4] : true; | |
| var j; | |
| if (window.XMLHttpRequest) { | |
| j = new XMLHttpRequest(); | |
| } else { | |
| if (window.ActiveXObject) { | |
| try { | |
| j = new ActiveXObject("Msxml2.XMLHTTP"); | |
| } catch (i) { | |
| j = new ActiveXObject("Microsoft.XMLHTTP"); | |
| } | |
| } else { | |
| return null; | |
| } | |
| } | |
| if (d) { | |
| j.onreadystatechange = e; | |
| } | |
| if (c == "GET" && g != "") { | |
| b += "?" + g; | |
| } | |
| j.open(c, b, d); | |
| j.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); | |
| j.send(g); | |
| return j; | |
| }; | |
| }; | |
| } | |
| if (!window.CSSHelpers) { | |
| CSSHelpers = new function () { | |
| var b = this; | |
| var a = new RegExp("\\s"); | |
| b.getComputedStyle = function (f, e) { | |
| var d; | |
| if (typeof f.currentStyle != "undefined") { | |
| d = f.currentStyle; | |
| } else { | |
| d = document.defaultView.getComputedStyle(f, null); | |
| } | |
| return d[e]; | |
| }; | |
| b.isMemberOfClass = function (f, e) { | |
| if (a.test(e)) { | |
| return false; | |
| } | |
| var d = new RegExp(c(e), "g"); | |
| return (d.test(f.className)); | |
| }; | |
| b.addClass = function (e, d) { | |
| if (a.test(d)) { | |
| return; | |
| } | |
| if (!b.isMemberOfClass(e, d)) { | |
| e.className += " " + d; | |
| } | |
| }; | |
| b.removeClass = function (g, f) { | |
| if (a.test(f)) { | |
| return; | |
| } | |
| var e = new RegExp(c(f), "g"); | |
| var d = g.className; | |
| if (g.className) { | |
| g.className = d.replace(e, ""); | |
| } | |
| }; | |
| function c(d) { | |
| return "\\s" + d + "\\s|^" + d + "\\s|\\s" + d + "$|^" + d + "$"; | |
| } | |
| b.getElementsByClassName = function (l, k) { | |
| if (l.getElementsByClassName) { | |
| return DOMHelpers.nodeListToArray(l.getElementsByClassName(k)); | |
| } else { | |
| var d = []; | |
| var h = new RegExp(c(k)); | |
| var g = DOMHelpers.getAllDescendants(l); | |
| for (var f = 0, e = g.length; f < e; f++) { | |
| if (h.test(g[f].className)) { | |
| d.push(g[f]); | |
| } | |
| } | |
| return d; | |
| } | |
| }; | |
| function c(d) { | |
| return "\\s" + d + "\\s|^" + d + "\\s|\\s" + d + "$|^" + d + "$"; | |
| } | |
| }; | |
| } | |
| String.prototype.trim = function () { | |
| var b = this; | |
| if (this.length > 6000) { | |
| b = this.replace(StringHelpers.initWhitespaceRe, ""); | |
| var a = b.length; | |
| while (StringHelpers.whitespaceRe.test(b.charAt(--a))) {} | |
| return b.slice(0, a + 1); | |
| } else { | |
| return this.replace(StringHelpers.initWhitespaceRe, "").replace(StringHelpers.endWhitespaceRe, ""); | |
| } | |
| }; | |
| if (!window.DOMHelpers) { | |
| DOMHelpers = new function () { | |
| var a = this; | |
| a.getAllDescendants = function (b) { | |
| return b.all ? b.all : b.getElementsByTagName("*"); | |
| }; | |
| a.nodeListToArray = function (c) { | |
| var e = []; | |
| for (var d = 0, b = c.length; d < b; d++) { | |
| e.push(c[d]); | |
| } | |
| return e; | |
| }; | |
| }; | |
| } | |
| String.prototype.capitalize = function () { | |
| return this.charAt(0).toUpperCase() + this.substr(1); | |
| }; | |
| function StringBuffer() { | |
| var b = this; | |
| var a = []; | |
| b.append = function (c) { | |
| a.push(c); | |
| return b; | |
| }; | |
| b.appendBuffer = function (c) { | |
| a = a.concat(c); | |
| }; | |
| b.toString = function () { | |
| return a.join(""); | |
| }; | |
| b.getLength = function () { | |
| return a.length; | |
| }; | |
| b.flush = function () { | |
| a.length = 0; | |
| }; | |
| } | |
| function RGBColor(f) { | |
| var g = this; | |
| g.ok = false; | |
| if (f.charAt(0) == "#") { | |
| f = f.substr(1, 6); | |
| } | |
| f = f.replace(/ /g, ""); | |
| f = f.toLowerCase(); | |
| var c = { | |
| aliceblue: "f0f8ff", | |
| antiquewhite: "faebd7", | |
| aqua: "00ffff", | |
| aquamarine: "7fffd4", | |
| azure: "f0ffff", | |
| beige: "f5f5dc", | |
| bisque: "ffe4c4", | |
| black: "000000", | |
| blanchedalmond: "ffebcd", | |
| blue: "0000ff", | |
| blueviolet: "8a2be2", | |
| brown: "a52a2a", | |
| burlywood: "deb887", | |
| cadetblue: "5f9ea0", | |
| chartreuse: "7fff00", | |
| chocolate: "d2691e", | |
| coral: "ff7f50", | |
| cornflowerblue: "6495ed", | |
| cornsilk: "fff8dc", | |
| crimson: "dc143c", | |
| cyan: "00ffff", | |
| darkblue: "00008b", | |
| darkcyan: "008b8b", | |
| darkgoldenrod: "b8860b", | |
| darkgray: "a9a9a9", | |
| darkgreen: "006400", | |
| darkkhaki: "bdb76b", | |
| darkmagenta: "8b008b", | |
| darkolivegreen: "556b2f", | |
| darkorange: "ff8c00", | |
| darkorchid: "9932cc", | |
| darkred: "8b0000", | |
| darksalmon: "e9967a", | |
| darkseagreen: "8fbc8f", | |
| darkslateblue: "483d8b", | |
| darkslategray: "2f4f4f", | |
| darkturquoise: "00ced1", | |
| darkviolet: "9400d3", | |
| deeppink: "ff1493", | |
| deepskyblue: "00bfff", | |
| dimgray: "696969", | |
| dodgerblue: "1e90ff", | |
| feldspar: "d19275", | |
| firebrick: "b22222", | |
| floralwhite: "fffaf0", | |
| forestgreen: "228b22", | |
| fuchsia: "ff00ff", | |
| gainsboro: "dcdcdc", | |
| ghostwhite: "f8f8ff", | |
| gold: "ffd700", | |
| goldenrod: "daa520", | |
| gray: "808080", | |
| green: "008000", | |
| greenyellow: "adff2f", | |
| honeydew: "f0fff0", | |
| hotpink: "ff69b4", | |
| indianred: "cd5c5c", | |
| indigo: "4b0082", | |
| ivory: "fffff0", | |
| khaki: "f0e68c", | |
| lavender: "e6e6fa", | |
| lavenderblush: "fff0f5", | |
| lawngreen: "7cfc00", | |
| lemonchiffon: "fffacd", | |
| lightblue: "add8e6", | |
| lightcoral: "f08080", | |
| lightcyan: "e0ffff", | |
| lightgoldenrodyellow: "fafad2", | |
| lightgrey: "d3d3d3", | |
| lightgreen: "90ee90", | |
| lightpink: "ffb6c1", | |
| lightsalmon: "ffa07a", | |
| lightseagreen: "20b2aa", | |
| lightskyblue: "87cefa", | |
| lightslateblue: "8470ff", | |
| lightslategray: "778899", | |
| lightsteelblue: "b0c4de", | |
| lightyellow: "ffffe0", | |
| lime: "00ff00", | |
| limegreen: "32cd32", | |
| linen: "faf0e6", | |
| magenta: "ff00ff", | |
| maroon: "800000", | |
| mediumaquamarine: "66cdaa", | |
| mediumblue: "0000cd", | |
| mediumorchid: "ba55d3", | |
| mediumpurple: "9370d8", | |
| mediumseagreen: "3cb371", | |
| mediumslateblue: "7b68ee", | |
| mediumspringgreen: "00fa9a", | |
| mediumturquoise: "48d1cc", | |
| mediumvioletred: "c71585", | |
| midnightblue: "191970", | |
| mintcream: "f5fffa", | |
| mistyrose: "ffe4e1", | |
| moccasin: "ffe4b5", | |
| navajowhite: "ffdead", | |
| navy: "000080", | |
| oldlace: "fdf5e6", | |
| olive: "808000", | |
| olivedrab: "6b8e23", | |
| orange: "ffa500", | |
| orangered: "ff4500", | |
| orchid: "da70d6", | |
| palegoldenrod: "eee8aa", | |
| palegreen: "98fb98", | |
| paleturquoise: "afeeee", | |
| palevioletred: "d87093", | |
| papayawhip: "ffefd5", | |
| peachpuff: "ffdab9", | |
| peru: "cd853f", | |
| pink: "ffc0cb", | |
| plum: "dda0dd", | |
| powderblue: "b0e0e6", | |
| purple: "800080", | |
| red: "ff0000", | |
| rosybrown: "bc8f8f", | |
| royalblue: "4169e1", | |
| saddlebrown: "8b4513", | |
| salmon: "fa8072", | |
| sandybrown: "f4a460", | |
| seagreen: "2e8b57", | |
| seashell: "fff5ee", | |
| sienna: "a0522d", | |
| silver: "c0c0c0", | |
| skyblue: "87ceeb", | |
| slateblue: "6a5acd", | |
| slategray: "708090", | |
| snow: "fffafa", | |
| springgreen: "00ff7f", | |
| steelblue: "4682b4", | |
| tan: "d2b48c", | |
| teal: "008080", | |
| metle: "d8bfd8", | |
| tomato: "ff6347", | |
| turquoise: "40e0d0", | |
| violet: "ee82ee", | |
| violetred: "d02090", | |
| wheat: "f5deb3", | |
| white: "ffffff", | |
| whitesmoke: "f5f5f5", | |
| yellow: "ffff00", | |
| yellowgreen: "9acd32" | |
| }; | |
| for (var h in c) { | |
| if (f == h) { | |
| f = c[h]; | |
| } | |
| } | |
| var e = [{ | |
| re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, | |
| example: ["rgb(123, 234, 45)", "rgb(255,234,245)"], | |
| process: function (i) { | |
| return [parseInt(i[1]), parseInt(i[2]), parseInt(i[3])]; | |
| } | |
| }, { | |
| re: /^(\w{2})(\w{2})(\w{2})$/, | |
| example: ["#00ff00", "336699"], | |
| process: function (i) { | |
| return [parseInt(i[1], 16), parseInt(i[2], 16), parseInt(i[3], 16)]; | |
| } | |
| }, { | |
| re: /^(\w{1})(\w{1})(\w{1})$/, | |
| example: ["#fb0", "f0f"], | |
| process: function (i) { | |
| return [parseInt(i[1] + i[1], 16), parseInt(i[2] + i[2], 16), parseInt(i[3] + i[3], 16)]; | |
| } | |
| }, { | |
| re: /^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*(0{0,1}\.\d{1,}|0\.{0,}0*|1\.{0,}0*)\)$/, | |
| example: ["rgba(123, 234, 45, 22)", "rgba(255, 234,245, 34)"], | |
| process: function (i) { | |
| return [parseInt(i[1]), parseInt(i[2]), parseInt(i[3]), parseFloat(i[4])]; | |
| } | |
| }, { | |
| re: /^hsla\((\d{1,3}),\s*(\d{1,3}%),\s*(\d{1,3}%),\s*(0{0,1}\.\d{1,}|0\.{0,}0*|1\.{0,}0*)\)$/, | |
| example: ["hsla(0,100%,50%,0.2)"], | |
| process: function (m) { | |
| var i = k(parseInt(m[1]), parseInt(m[2]), parseInt(m[3]), parseFloat(m[4])); | |
| return [i.r, i.g, i.b, parseFloat(m[4])]; | |
| } | |
| }, { | |
| re: /^hsl\((\d{1,3}),\s*(\d{1,3}%),\s*(\d{1,3}%)\)$/, | |
| example: ["hsl(0,100%,50%)"], | |
| process: function (m) { | |
| var i = k(parseInt(m[1]), parseInt(m[2]), parseInt(m[3]), 1); | |
| return [i.r, i.g, i.b, 1]; | |
| } | |
| }]; | |
| for (var d = 0; d < e.length; d++) { | |
| var l = e[d].re; | |
| var b = e[d].process; | |
| var j = l.exec(f); | |
| if (j) { | |
| channels = b(j); | |
| g.r = channels[0]; | |
| g.g = channels[1]; | |
| g.b = channels[2]; | |
| g.a = channels[3]; | |
| g.ok = true; | |
| } | |
| } | |
| g.r = (g.r < 0 || isNaN(g.r)) ? 0 : ((g.r > 255) ? 255 : g.r); | |
| g.g = (g.g < 0 || isNaN(g.g)) ? 0 : ((g.g > 255) ? 255 : g.g); | |
| g.b = (g.b < 0 || isNaN(g.b)) ? 0 : ((g.b > 255) ? 255 : g.b); | |
| g.a = (isNaN(g.a)) ? 1 : ((g.a > 255) ? 255 : (g.a < 0) ? 0 : g.a); | |
| g.toRGB = function () { | |
| return "rgb(" + g.r + ", " + g.g + ", " + g.b + ")"; | |
| }; | |
| g.toRGBA = function () { | |
| return "rgba(" + g.r + ", " + g.g + ", " + g.b + ", " + g.a + ")"; | |
| }; | |
| g.toHSV = function () { | |
| var i = g.r / 255, | |
| o = g.g / 255, | |
| q = g.b / 255; | |
| var t = Math.max(i, o, q), | |
| m = Math.min(i, o, q); | |
| var n, w, u = t; | |
| var p = t - m; | |
| w = t == 0 ? 0 : p / t; | |
| if (t == m) { | |
| n = 0; | |
| } else { | |
| switch (t) { | |
| case i: | |
| n = (o - q) / p + (o < q ? 6 : 0); | |
| break; | |
| case o: | |
| n = (q - i) / p + 2; | |
| break; | |
| case q: | |
| n = (i - o) / p + 4; | |
| break; | |
| } | |
| n /= 6; | |
| } | |
| return { | |
| h: n, | |
| s: w, | |
| v: u | |
| }; | |
| }; | |
| function k(n, v, m) { | |
| var u, t, p; | |
| var i, o, q; | |
| v /= 100; | |
| m /= 100; | |
| if (v == 0) { | |
| i = o = q = (m * 255); | |
| } else { | |
| if (m <= 0.5) { | |
| t = m * (v + 1); | |
| } else { | |
| t = m + v - m * v; | |
| } | |
| u = m * 2 - t; | |
| p = n / 360; | |
| i = a(u, t, p + 1 / 3); | |
| o = a(u, t, p); | |
| q = a(u, t, p - 1 / 3); | |
| } | |
| return { | |
| r: Math.round(i), | |
| g: Math.round(o), | |
| b: Math.round(q) | |
| }; | |
| } | |
| function a(o, n, m) { | |
| var i; | |
| if (m < 0) { | |
| m += 1; | |
| } else { | |
| if (m > 1) { | |
| m -= 1; | |
| } | |
| } | |
| if (6 * m < 1) { | |
| i = o + (n - o) * m * 6; | |
| } else { | |
| if (2 * m < 1) { | |
| i = n; | |
| } else { | |
| if (3 * m < 2) { | |
| i = o + (n - o) * (2 / 3 - m) * 6; | |
| } else { | |
| i = o; | |
| } | |
| } | |
| } | |
| return 255 * i; | |
| } | |
| g.toHex = function () { | |
| var o = g.r.toString(16); | |
| var n = g.g.toString(16); | |
| var i = g.b.toString(16); | |
| var m = Math.floor((g.a * 255)).toString(16); | |
| if (o.length == 1) { | |
| o = "0" + o; | |
| } | |
| if (n.length == 1) { | |
| n = "0" + n; | |
| } | |
| if (i.length == 1) { | |
| i = "0" + i; | |
| } | |
| if (m == "ff") { | |
| m = ""; | |
| } else { | |
| if (m.length == 1) { | |
| m = "0" + m; | |
| } | |
| } | |
| return "#" + m + o + n + i; | |
| }; | |
| } | |
| document.write('<style type="text/css">.cssSandpaper-initiallyHidden { visibility: hidden;} </style>'); | |
| EventHelpers.addPageLoadEvent("cssSandpaper.init"); | |
| var BLACKSWAN_FRAMERATE = 20; | |
| var BLACKSWAN_ROOMDEPTH = 0.6; | |
| function blackswan(d, c, a, b) { | |
| this.div = d; | |
| this.framerate = BLACKSWAN_FRAMERATE; | |
| this.dancers = []; | |
| this.width = c; | |
| this.height = a; | |
| this.floorYRange = b; | |
| this.div.css("width", c + "px"); | |
| this.div.css("height", a + "px"); | |
| this.div.css("background-color", "#cccccc"); | |
| this.div.css("position", "absolute"); | |
| this.div.css("overflow", "hidden"); | |
| this.add_dancer = function (i, h, f, e, g, k) { | |
| var j = new blackswan_dancer(i, f, this.floorYRange, e, g); | |
| if (h) { | |
| j.state(h); | |
| } | |
| this.dancers.push(j); | |
| if (!k && !g) { | |
| k = f[1]; | |
| } | |
| if (f) { | |
| this.add_element(j.div, f, k); | |
| } | |
| return j; | |
| }; | |
| this.remove_dancer = function (f) { | |
| var e = $.inArray(f, this.dancers); | |
| if (e != -1) { | |
| this.dancers.splice(e, 1); | |
| } | |
| $(f.div).remove(); | |
| }; | |
| this.add_props = function (h) { | |
| for (var e = 0; e < h.length; ++e) { | |
| var f = new Image(); | |
| f.src = h[e][0]; | |
| this.add_element(f, [h[e][1], h[e][2]], h[e][3]); | |
| if (h[e].length > 4) { | |
| for (var g in h[e][4]) { | |
| $(f).attr(g, h[e][4][g]); | |
| } | |
| } | |
| } | |
| }; | |
| this.add_element = function (i, e, h, f) { | |
| var g = $(i); | |
| g.css({ | |
| position: "absolute", | |
| left: e[0] + "px", | |
| top: e[1] + "px", | |
| }); | |
| if (h) { | |
| g.css("z-index", h); | |
| } | |
| if (!f) { | |
| $(i).mousedown(function (j) { | |
| j.preventDefault(); | |
| }); | |
| } | |
| this.div.append(i); | |
| }; | |
| this.remove_element = function (e) { | |
| $(e).remove(); | |
| }; | |
| this.move_element = function (f, e) { | |
| $(f).css("left", e[0] + "px"); | |
| $(f).css("top", e[1] + "px"); | |
| }; | |
| this.start = function () { | |
| this.draw(); | |
| }; | |
| this.draw = function () { | |
| var f = this; | |
| for (var e = 0; e < this.dancers.length; ++e) { | |
| this.dancers[e].step(); | |
| } | |
| setTimeout(function () { | |
| f.draw(); | |
| }, 1000 / this.framerate); | |
| }; | |
| } | |
| function blackswan_dancer(e, b, d, a, c) { | |
| this.framerate = BLACKSWAN_FRAMERATE; | |
| this.size = null; | |
| this.scene = null; | |
| this.ani = null; | |
| this.loop = false; | |
| this.anistate = null; | |
| this.layers = {}; | |
| this.layerstate = {}; | |
| this.scaledStates = {}; | |
| this.scaledAnimations = false; | |
| this.position = b; | |
| this.floorYRange = d; | |
| this.isAvatar = a; | |
| this.isDj = c; | |
| this.div = $("<div></div>"); | |
| this.div.css("position", "absolute"); | |
| this.internals = $("<div></div>"); | |
| this.internals.css("position", "absolute"); | |
| this.div.append(this.internals); | |
| this.data = e; | |
| this.body = function () { | |
| return this.internals; | |
| }; | |
| this.scale = function () { | |
| possibleSizes = [55, 65, 75, 85]; | |
| if (this.isDj) { | |
| this.size = possibleSizes[0]; | |
| } else { | |
| var k = this.position[1]; | |
| var q = (k - this.floorYRange[0]) / (this.floorYRange[1] - this.floorYRange[0]); | |
| var p = Math.floor(q * ((possibleSizes.length - 1) - 0.001)) + 1; | |
| this.size = possibleSizes[p]; | |
| } | |
| this.scaledStates = $.extend(true, {}, this.data.states); | |
| for (var n in this.scaledStates) { | |
| var r = this.scaledStates[n]; | |
| for (var m = 0, s = r.length; m < s; m++) { | |
| r[m][1] *= (this.size / 100); | |
| r[m][2] *= (this.size / 100); | |
| } | |
| } | |
| if (!window.avatar_animations_scaled) { | |
| window.avatar_animations_scaled = {}; | |
| } | |
| if (window.avatar_animations_scaled[this.size]) { | |
| this.scaledAnimations = window.avatar_animations_scaled[this.size]; | |
| } else { | |
| this.scaledAnimations = $.extend(true, {}, window.avatar_animations); | |
| for (var t in this.scaledAnimations) { | |
| if (this.scaledAnimations[t][t]) { | |
| var o = this.scaledAnimations[t][t]; | |
| for (var f = 0, s = o.length; f < s; f++) { | |
| for (var h in o[f]) { | |
| for (var n = 0, l = o[f][h].length; n < l; n++) { | |
| var g = o[f][h][n]; | |
| if (g.x) { | |
| g.x = (g.x < 0) ? Math.round(g.x * -1 * (this.size / 100)) * -1 : Math.round(g.x * (this.size / 100)); | |
| } | |
| if (g.y) { | |
| g.y = (g.y < 0) ? Math.round(g.y * -1 * (this.size / 100)) * -1 : Math.round(g.y * (this.size / 100)); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| window.avatar_animations_scaled[this.size] = this.scaledAnimations; | |
| } | |
| }; | |
| if (this.isAvatar) { | |
| this.scale(); | |
| } else { | |
| this.scaledStates = this.data.states; | |
| } | |
| this.load_images = function () { | |
| if (this.data.images) { | |
| for (var g = 0; g < this.data.images.length; ++g) { | |
| var i = this.data.images[g][1]; | |
| var f = i.slice(0, 21) == "data:image/png;base64"; | |
| if (this.isAvatar && !f) { | |
| i = i.split("/"); | |
| i.splice(-1, 0, "scaled/" + this.size); | |
| i = i.join("/"); | |
| } | |
| var h = new Image(); | |
| h.src = i; | |
| var j = this.data.images[g][0]; | |
| this.layers[j] = h; | |
| $(h).hide(); | |
| $(h).css("position", "absolute"); | |
| this.internals.append(h); | |
| if (this.isAvatar && f) { | |
| $(h).addClass("scaleAv" + this.size); | |
| } | |
| } | |
| } | |
| if (this.data.offset) { | |
| this.internals.css("margin-left", this.data.offset[0]); | |
| this.internals.css("margin-top", this.data.offset[1]); | |
| } | |
| }; | |
| this.load_images(); | |
| this.state = function (g) { | |
| for (var j in this.layers) { | |
| $(this.layers[j]).hide(); | |
| } | |
| if (this.scaledStates && this.scaledStates[g]) { | |
| var k = this.scaledStates[g]; | |
| for (var f = 0; f < k.length; ++f) { | |
| var h = $(this.layers[k[f][0]]); | |
| h.css("left", k[f][1] + "px"); | |
| h.css("top", k[f][2] + "px"); | |
| h.css("z-index", f); | |
| if (k[f][3]) { | |
| cssSandpaper.setTransform(h[0], "rotate(" + k[f][3] + "deg)"); | |
| } | |
| h.show(); | |
| } | |
| } | |
| }; | |
| this.add_source_animation = function (g, f, j) { | |
| if (!this.data.animations) { | |
| this.data.animations = {}; | |
| } | |
| for (var h in f) { | |
| if (!j || !this.data.animations[h]) { | |
| this.data.animations[h] = f[h]; | |
| } | |
| } | |
| }; | |
| this.animation = function (f, g) { | |
| if (this.data.animations && this.data.animations[f]) { | |
| ani = this.data.animations[f]; | |
| loop = this.data.animations[f + ".loop"]; | |
| if (this.ani && !g) { | |
| this.next_ani = ani; | |
| this.next_loop = loop; | |
| } else { | |
| this.ani = ani; | |
| this.loop = loop; | |
| } | |
| } | |
| }; | |
| this.step = function () { | |
| if (this.ani) { | |
| var k = this.ani; | |
| var g = this.anistate; | |
| if (!g) { | |
| g = this.anistate = { | |
| action: 0 | |
| }; | |
| } | |
| var m = k[g.action]; | |
| if (m) { | |
| var u = 0; | |
| var p = 0; | |
| for (var h in m) { | |
| var f = g[h]; | |
| if (!f) { | |
| f = g[h] = {}; | |
| } | |
| moves = m[h]; | |
| var l = 0; | |
| for (var q = 0; q < moves.length; ++q) { | |
| var j = moves[q]; | |
| if (!j.time) { | |
| j.time = 0; | |
| } | |
| if (j.pause) { | |
| j.time = j.pause; | |
| } | |
| var s = g[h]["move" + q]; | |
| if (!s) { | |
| s = g[h]["move" + q] = { | |
| curframe: 0, | |
| frames: Math.ceil(j.time * this.framerate / 1000) | |
| }; | |
| } | |
| if (j.random && !s.rolldice) { | |
| if (Math.random() > j.random) { | |
| s.playaction = false; | |
| } else { | |
| s.playaction = true; | |
| } | |
| s.rolldice = true; | |
| } | |
| if (s.rolldice && !s.playaction) { | |
| l++; | |
| continue; | |
| } | |
| if (s.curframe > s.frames) { | |
| l++; | |
| continue; | |
| } | |
| var i = h.split(","); | |
| for (var r = 0; r < i.length; ++r) { | |
| var t = i[r]; | |
| if (t == "div") { | |
| var n = this.div[0]; | |
| } else { | |
| var n = this.layers[t]; | |
| } | |
| if (!this.layerstate[t]) { | |
| this.layerstate[t] = { | |
| x: $(n).position().left, | |
| y: $(n).position().top, | |
| rot: 0 | |
| }; | |
| } | |
| if (j.rotate) { | |
| if (s.curframe == 0) { | |
| this.layerstate[t]["initial_rot"] = this.layerstate[t]["rot"]; | |
| } else { | |
| if (s.curframe == s.frames) { | |
| this.layerstate[t]["rot"] = this.layerstate[t]["initial_rot"] + j.rotate; | |
| } else { | |
| this.layerstate[t]["rot"] += (j.rotate / s.frames); | |
| } | |
| } | |
| cssSandpaper.setTransform(n, "rotate(" + this.layerstate[t]["rot"] + "deg)"); | |
| } else { | |
| if (j.x) { | |
| if (s.curframe == 0) { | |
| this.layerstate[t]["initial_x"] = this.layerstate[t]["x"]; | |
| } else { | |
| if (s.curframe == s.frames) { | |
| this.layerstate[t]["x"] = this.layerstate[t]["initial_x"] + j.x; | |
| } else { | |
| this.layerstate[t]["x"] += (j.x / s.frames); | |
| } | |
| } | |
| $(n).css("left", this.layerstate[t]["x"] + "px"); | |
| } else { | |
| if (j.y) { | |
| if (s.curframe == 0) { | |
| this.layerstate[t]["initial_y"] = this.layerstate[t]["y"]; | |
| } else { | |
| if (s.curframe == s.frames) { | |
| this.layerstate[t]["y"] = this.layerstate[t]["initial_y"] + j.y; | |
| } else { | |
| this.layerstate[t]["y"] += (j.y / s.frames); | |
| } | |
| } | |
| $(n).css("top", this.layerstate[t]["y"] + "px"); | |
| } else { | |
| if (j.swap) { | |
| $(n).hide(); | |
| $(this.layers[j.swap]).show(); | |
| } else { | |
| if (j.hide) { | |
| $(n).hide(); | |
| } else { | |
| if (j.show) { | |
| $(n).show(); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| g[h]["move" + q]["curframe"]++; | |
| } | |
| if (l == moves.length) { | |
| u++; | |
| } | |
| p++; | |
| } | |
| if (u == p) { | |
| var o = g.action; | |
| g = this.anistate = { | |
| action: ++o | |
| }; | |
| } | |
| } else { | |
| if (this.loop) { | |
| g = this.anistate = { | |
| action: 0 | |
| }; | |
| } else { | |
| this.ani = null; | |
| this.anistate = null; | |
| } | |
| } | |
| } else { | |
| if (this.next_ani) { | |
| this.ani = this.next_ani; | |
| this.loop = this.next_loop; | |
| this.next_ani = null; | |
| this.next_loop = null; | |
| } | |
| } | |
| }; | |
| this.stop = function () { | |
| this.loop = false; | |
| this.next_ani = null; | |
| this.next_loop = null; | |
| }; | |
| }(function (b) { | |
| function a(d, c) { | |
| this.$element = b(d); | |
| this.options = c; | |
| this.enabled = true; | |
| this.showing = false; | |
| this.fixTitle(); | |
| } | |
| a.prototype = { | |
| show: function () { | |
| this.showing = true; | |
| var f = this.getTitle(); | |
| if (f && this.enabled) { | |
| var e = this.tip(); | |
| e.find(".tipsy-inner")[this.options.html ? "html" : "text"](f); | |
| e[0].className = "tipsy"; | |
| e.remove().css({ | |
| top: 0, | |
| left: 0, | |
| visibility: "hidden", | |
| display: "block" | |
| }).appendTo(this.$element); | |
| var i = b.extend({}, { | |
| width: this.$element[0].offsetWidth, | |
| height: this.$element[0].offsetHeight, | |
| top: 0, | |
| left: 0 | |
| }); | |
| var c = e[0].offsetWidth, | |
| h = e[0].offsetHeight; | |
| var g = (typeof this.options.gravity == "function") ? this.options.gravity.call(this.$element[0]) : this.options.gravity; | |
| var d; | |
| switch (g.charAt(0)) { | |
| case "n": | |
| d = { | |
| top: i.top + i.height + this.options.offset, | |
| left: i.left + i.width / 2 - c / 2 | |
| }; | |
| break; | |
| case "s": | |
| d = { | |
| top: i.top - h - this.options.offset, | |
| left: i.left + i.width / 2 - c / 2 | |
| }; | |
| break; | |
| case "e": | |
| d = { | |
| top: i.top + i.height / 2 - h / 2, | |
| left: i.left - c - this.options.offset | |
| }; | |
| break; | |
| case "w": | |
| d = { | |
| top: i.top + i.height / 2 - h / 2, | |
| left: i.left + i.width + this.options.offset | |
| }; | |
| break; | |
| } | |
| if (g.length == 2) { | |
| if (g.charAt(1) == "w") { | |
| d.left = i.left + i.width / 2 - 15; | |
| } else { | |
| d.left = i.left + i.width / 2 - c + 15; | |
| } | |
| } | |
| e.css(d).addClass("tipsy-" + g); | |
| if (this.options.fade) { | |
| e.stop().css({ | |
| opacity: 0, | |
| display: "block", | |
| visibility: "visible" | |
| }).animate({ | |
| opacity: this.options.opacity | |
| }); | |
| } else { | |
| e.css({ | |
| visibility: "visible", | |
| opacity: this.options.opacity | |
| }); | |
| } | |
| } | |
| }, | |
| hide: function () { | |
| this.showing = false; | |
| if (this.options.fade) { | |
| this.tip().stop().fadeOut(function () { | |
| b(this).remove(); | |
| }); | |
| } else { | |
| this.tip().remove(); | |
| } | |
| }, | |
| fixTitle: function () { | |
| var c = this.$element; | |
| if (c.attr("title") || typeof (c.attr("original-title")) != "string") { | |
| c.attr("original-title", c.attr("title") || "").removeAttr("title"); | |
| } | |
| }, | |
| getTitle: function () { | |
| var e, c = this.$element, | |
| d = this.options; | |
| this.fixTitle(); | |
| var e, d = this.options; | |
| if (typeof d.title == "string") { | |
| e = c.attr(d.title == "title" ? "original-title" : d.title); | |
| } else { | |
| if (typeof d.title == "function") { | |
| e = d.title.call(c[0]); | |
| } | |
| } | |
| e = ("" + e).replace(/(^\s*|\s*$)/, ""); | |
| return e || d.fallback; | |
| }, | |
| tip: function () { | |
| if (!this.$tip) { | |
| this.$tip = b('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"></div>'); | |
| } | |
| return this.$tip; | |
| }, | |
| validate: function () { | |
| if (!this.$element[0].parentNode) { | |
| this.hide(); | |
| this.$element = null; | |
| this.options = null; | |
| } | |
| }, | |
| enable: function () { | |
| this.enabled = true; | |
| }, | |
| disable: function () { | |
| this.enabled = false; | |
| }, | |
| toggleEnabled: function () { | |
| this.enabled = !this.enabled; | |
| } | |
| }; | |
| b.fn.tipsy = function (g) { | |
| if (g === true) { | |
| return this.data("tipsy"); | |
| } else { | |
| if (typeof g == "string") { | |
| var i = this.data("tipsy"); | |
| if (i) { | |
| i[g](); | |
| } | |
| return this; | |
| } | |
| } | |
| g = b.extend({}, b.fn.tipsy.defaults, g); | |
| function f(k) { | |
| var l = b.data(k, "tipsy"); | |
| if (!l) { | |
| l = new a(k, b.fn.tipsy.elementOptions(k, g)); | |
| b.data(k, "tipsy", l); | |
| } | |
| return l; | |
| } | |
| function j() { | |
| var k = f(this); | |
| if (k.showing) { | |
| return; | |
| } | |
| k.hoverState = "in"; | |
| if (g.delayIn == 0) { | |
| k.show(); | |
| } else { | |
| k.fixTitle(); | |
| setTimeout(function () { | |
| if (k.hoverState == "in") { | |
| k.show(); | |
| } | |
| }, g.delayIn); | |
| } | |
| } | |
| function e() { | |
| var k = f(this); | |
| if (!k.showing) { | |
| return; | |
| } | |
| k.hoverState = "out"; | |
| if (g.delayOut == 0) { | |
| k.hide(); | |
| } else { | |
| setTimeout(function () { | |
| if (k.hoverState == "out") { | |
| k.hide(); | |
| } | |
| }, g.delayOut); | |
| } | |
| } | |
| if (!g.live) { | |
| this.each(function () { | |
| f(this); | |
| }); | |
| } | |
| if (g.trigger != "manual") { | |
| var c = g.live ? "live" : "bind", | |
| h = g.trigger == "hover" ? "mouseenter" : "focus", | |
| d = g.trigger == "hover" ? "mouseleave" : "blur"; | |
| this[c](h, j)[c](d, e); | |
| } | |
| return this; | |
| }; | |
| b.fn.tipsy.defaults = { | |
| delayIn: 0, | |
| delayOut: 0, | |
| fade: false, | |
| fallback: "", | |
| gravity: "n", | |
| html: false, | |
| live: false, | |
| offset: 0, | |
| opacity: 0.8, | |
| title: "title", | |
| trigger: "hover" | |
| }; | |
| b.fn.tipsy.elementOptions = function (d, c) { | |
| return b.metadata ? b.extend({}, c, b(d).metadata()) : c; | |
| }; | |
| b.fn.tipsy.autoNS = function () { | |
| return b(this).offset().top > (b(document).scrollTop() + b(window).height() / 2) ? "s" : "n"; | |
| }; | |
| b.fn.tipsy.autoWE = function () { | |
| return b(this).offset().left > (b(document).scrollLeft() + b(window).width() / 2) ? "e" : "w"; | |
| }; | |
| })(jQuery); | |
| jQuery.fn.limitMaxLength = function (a) { | |
| var c = jQuery.extend({ | |
| attribute: "maxlength", | |
| onLimit: function () {}, | |
| onEdit: function () {} | |
| }, a); | |
| var b = function () { | |
| var d = jQuery(this); | |
| var e = parseInt(d.attr(c.attribute)); | |
| if (d.val().length > e) { | |
| d.val(d.val().substr(0, e)); | |
| jQuery.proxy(c.onLimit, this)(); | |
| } | |
| jQuery.proxy(c.onEdit, this)(e - d.val().length); | |
| }; | |
| this.each(b); | |
| return this.keyup(b).keydown(b).focus(b); | |
| }; | |
| var room_props = [ | |
| ["https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/props/wallpaper.png", 0, 0, 0], | |
| ["https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/props/floor.png", 0, 176, 0], | |
| ["https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/props/dj_table.png", 8, 111, 115], | |
| ["https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/props/gauge.png", 122, 384, 10000, | |
| { | |
| id: "meterGauge" | |
| }] | |
| ]; | |
| var room_elements = { | |
| laptop_mac: "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/props/laptop_mac.png", | |
| laptop_pc: "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/props/laptop_pc.png", | |
| laptop_linux: "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/props/laptop_linux.png", | |
| laptop_chrome: "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/props/laptop_chrome.png", | |
| laptop_iphone: "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/props/laptop_iphone.png", | |
| laptop_cake: "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/props/cake.png", | |
| laptop_intel: "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/props/laptop_intel.png" | |
| }; | |
| var laptop_locations = [ | |
| [50, 73], | |
| [135, 73], | |
| [220, 73], | |
| [305, 73], | |
| [390, 73], | |
| [50, 73] | |
| ]; | |
| var record_pile_locations = [ | |
| [58, 81], | |
| [143, 81], | |
| [228, 81], | |
| [313, 81], | |
| [398, 81] | |
| ]; | |
| var becomedj_locations = [ | |
| [55, 38], | |
| [140, 38], | |
| [225, 38], | |
| [310, 38], | |
| [395, 38] | |
| ]; | |
| var dj_locations = [ | |
| [70, 30], | |
| [155, 30], | |
| [240, 30], | |
| [325, 30], | |
| [410, 30] | |
| ]; | |
| var spotlight_locations = [ | |
| [5, 0], | |
| [92, 0], | |
| [177, 0], | |
| [262, 0], | |
| [347, 0] | |
| ]; | |
| var speaker = { | |
| images: [ | |
| ["lspeaker1", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/speaker/lspeaker1.png"], | |
| ["lspeaker2", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/speaker/lspeaker2.png"], | |
| ["lspeaker3", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/speaker/lspeaker3.png"], | |
| ["rspeaker1", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/speaker/rspeaker1.png"], | |
| ["rspeaker2", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/speaker/rspeaker2.png"], | |
| ["rspeaker3", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/speaker/rspeaker3.png"] | |
| ], | |
| states: { | |
| on: [ | |
| ["lspeaker1", 0, 0], | |
| ["rspeaker1", 434, 0], | |
| ["rspeaker2", 434, 0], | |
| ["rspeaker3", 434, 0] | |
| ], | |
| off: [] | |
| }, | |
| animations: { | |
| vibrate: [{ | |
| lspeaker1: [{ | |
| swap: "lspeaker2", | |
| time: 50 | |
| }], | |
| rspeaker1: [{ | |
| swap: "rspeaker2", | |
| time: 50 | |
| }] | |
| }, { | |
| lspeaker2: [{ | |
| swap: "lspeaker3", | |
| time: 50 | |
| }], | |
| rspeaker2: [{ | |
| swap: "rspeaker3", | |
| time: 50 | |
| }] | |
| }, { | |
| lspeaker3: [{ | |
| swap: "lspeaker1", | |
| time: 50 | |
| }], | |
| rspeaker3: [{ | |
| swap: "rspeaker1", | |
| time: 50 | |
| }] | |
| }, { | |
| lspeaker1: [{ | |
| hide: true, | |
| time: 50 | |
| }], | |
| rspeaker1: [{ | |
| hide: true, | |
| time: 50 | |
| }] | |
| }, ], | |
| "vibrate.loop": true | |
| } | |
| }; | |
| var needle = { | |
| images: [ | |
| ["needle", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/props/needle.png"] | |
| ], | |
| states: { | |
| "default": [ | |
| ["needle", 42, -68] | |
| ] | |
| } | |
| }; | |
| var avatar_animations = { | |
| rock: { | |
| rock: [{ | |
| "headback,headfront": [{ | |
| y: 3, | |
| time: 200 | |
| }, { | |
| x: 6, | |
| time: 200 | |
| }, { | |
| rotate: 10, | |
| time: 100 | |
| }] | |
| }, { | |
| "headback,headfront": [{ | |
| y: -3, | |
| time: 200 | |
| }, { | |
| x: -6, | |
| time: 200 | |
| }, { | |
| rotate: -10, | |
| time: 100 | |
| }] | |
| }, { | |
| "headback,headfront": [{ | |
| y: 3, | |
| time: 200 | |
| }, { | |
| x: -6, | |
| time: 200 | |
| }, { | |
| rotate: -10, | |
| time: 100 | |
| }] | |
| }, { | |
| "headback,headfront": [{ | |
| y: -3, | |
| time: 200 | |
| }, { | |
| x: 6, | |
| time: 200 | |
| }, { | |
| rotate: 10, | |
| time: 100 | |
| }] | |
| }], | |
| "rock.loop": true | |
| }, | |
| bob: { | |
| bob: [{ | |
| "headback,headfront": [{ | |
| y: 7, | |
| time: 200 | |
| }, ] | |
| }, { | |
| "headback,headfront": [{ | |
| y: -7, | |
| time: 200 | |
| }, ] | |
| }], | |
| "bob.loop": true | |
| }, | |
| smallbob: { | |
| smallbob: [{ | |
| "headback,headfront": [{ | |
| y: 2, | |
| time: 200 | |
| }, { | |
| x: 4, | |
| time: 200 | |
| }, { | |
| rotate: 6, | |
| time: 100 | |
| }] | |
| }, { | |
| "headback,headfront": [{ | |
| y: -2, | |
| time: 200 | |
| }, { | |
| x: -4, | |
| time: 200 | |
| }, { | |
| rotate: -6, | |
| time: 100 | |
| }] | |
| }, { | |
| "headback,headfront": [{ | |
| y: 2, | |
| time: 200 | |
| }, { | |
| x: -4, | |
| time: 200 | |
| }, { | |
| rotate: -6, | |
| time: 100 | |
| }] | |
| }, { | |
| "headback,headfront": [{ | |
| y: -2, | |
| time: 200 | |
| }, { | |
| x: 4, | |
| time: 200 | |
| }, { | |
| rotate: 6, | |
| time: 100 | |
| }] | |
| }], | |
| "smallbob.loop": true | |
| } | |
| }; | |
| var avatars = { | |
| "1": { | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/1/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/1/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/1/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/1/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/1/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/1/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/1/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 37, 100], | |
| ["backtorso", 37, 89], | |
| ["leftarm", 25, 88], | |
| ["rightarm", 55, 88], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 32, 98], | |
| ["fronttorso", 32, 87], | |
| ["leftarm", 20, 86], | |
| ["rightarm", 50, 86], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "2": { | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/2/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/2/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/2/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/2/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/2/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/2/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/2/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 36, 97], | |
| ["backtorso", 37, 86], | |
| ["leftarm", 25, 83], | |
| ["rightarm", 53, 83], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 31, 95], | |
| ["fronttorso", 32, 83], | |
| ["leftarm", 20, 83], | |
| ["rightarm", 48, 83], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "3": { | |
| offset: [1, -2], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/3/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/3/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/3/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/3/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/3/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/3/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/3/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 30, 102], | |
| ["backtorso", 30, 91], | |
| ["leftarm", 17, 89], | |
| ["rightarm", 49, 89], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 31, 101], | |
| ["fronttorso", 32, 90], | |
| ["leftarm", 20, 91], | |
| ["rightarm", 49, 91], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "4": { | |
| offset: [-7, 13], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/4/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/4/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/4/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/4/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/4/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/4/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/4/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 39, 76], | |
| ["backtorso", 40, 63], | |
| ["leftarm", 26, 63], | |
| ["rightarm", 62, 63], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 39, 76], | |
| ["fronttorso", 39, 63], | |
| ["leftarm", 26, 63], | |
| ["rightarm", 61, 63], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "5": { | |
| offset: [1, -2], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/5/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/5/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/5/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/5/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/5/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/5/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/5/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 30, 98], | |
| ["backtorso", 31, 91], | |
| ["leftarm", 19, 91], | |
| ["rightarm", 47, 91], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 30, 97], | |
| ["fronttorso", 31, 90], | |
| ["leftarm", 19, 90], | |
| ["rightarm", 47, 90], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "6": { | |
| offset: [-8, 9], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/6/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/6/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/6/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/6/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/6/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/6/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/6/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 39, 78], | |
| ["backtorso", 40, 65], | |
| ["leftarm", 25, 65], | |
| ["rightarm", 62, 65], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 40, 78], | |
| ["fronttorso", 40, 65], | |
| ["leftarm", 25, 65], | |
| ["rightarm", 62, 65], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "7": { | |
| offset: [2, 13], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/7/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/7/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/7/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/7/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/7/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/7/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/7/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 27, 76], | |
| ["backtorso", 28, 61], | |
| ["leftarm", 13, 65], | |
| ["rightarm", 47, 63], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 27, 76], | |
| ["fronttorso", 28, 61], | |
| ["leftarm", 13, 65], | |
| ["rightarm", 47, 63], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "8": { | |
| offset: [1, 5], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/8/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/8/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/8/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/8/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/8/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/8/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/8/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 27, 87], | |
| ["backtorso", 28, 72], | |
| ["leftarm", 15, 69], | |
| ["rightarm", 47, 72], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 29, 87], | |
| ["fronttorso", 30, 72], | |
| ["leftarm", 17, 69], | |
| ["rightarm", 49, 72], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "9": { | |
| offset: [-5, 10], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/9/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/9/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/9/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/9/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/9/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/9/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/9/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 27, 79], | |
| ["backtorso", 35, 68], | |
| ["leftarm", 18, 66], | |
| ["rightarm", 58, 68], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 28, 80], | |
| ["fronttorso", 35, 69], | |
| ["leftarm", 19, 67], | |
| ["rightarm", 59, 69], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "10": { | |
| offset: [-6, -2], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/10/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/10/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/10/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/10/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/10/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/10/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/10/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 41, 100], | |
| ["backtorso", 41, 89], | |
| ["leftarm", 27, 90], | |
| ["rightarm", 63, 90], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 37, 98], | |
| ["fronttorso", 37, 88], | |
| ["leftarm", 23, 88], | |
| ["rightarm", 59, 88], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "11": { | |
| offset: [-6, 10], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/11/legs.png"], | |
| ["torso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/11/torso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/11/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/11/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/11/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/11/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 32, 80], | |
| ["torso", 37, 70], | |
| ["leftarm", 17, 68], | |
| ["rightarm", 60, 68], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 32, 80], | |
| ["torso", 37, 70], | |
| ["leftarm", 17, 68], | |
| ["rightarm", 60, 68], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "12": { | |
| offset: [-6, -2], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/12/legs.png"], | |
| ["torso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/12/torso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/12/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/12/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/12/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/12/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 37, 95], | |
| ["torso", 37, 85], | |
| ["leftarm", 10, 82], | |
| ["rightarm", 59, 82], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 37, 93], | |
| ["torso", 37, 83], | |
| ["leftarm", 10, 80], | |
| ["rightarm", 59, 80], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "13": { | |
| offset: [-6, 10], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/13/legs.png"], | |
| ["torso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/13/torso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/13/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/13/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/13/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/13/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 33, 80], | |
| ["torso", 37, 70], | |
| ["leftarm", 17, 68], | |
| ["rightarm", 60, 68], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 33, 80], | |
| ["torso", 37, 70], | |
| ["leftarm", 17, 68], | |
| ["rightarm", 60, 68], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "14": { | |
| offset: [-6, 13], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/14/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/14/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/14/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/14/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/14/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/14/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/14/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 35, 77], | |
| ["backtorso", 36, 68], | |
| ["leftarm", 20, 68], | |
| ["rightarm", 58, 68], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 36, 77], | |
| ["fronttorso", 36, 68], | |
| ["leftarm", 21, 68], | |
| ["rightarm", 58, 68], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "15": { | |
| offset: [-6, -2], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/15/legs.png"], | |
| ["torso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/15/torso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/15/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/15/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/15/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/15/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 37, 95], | |
| ["torso", 37, 85], | |
| ["leftarm", 22, 81], | |
| ["rightarm", 59, 82], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 37, 93], | |
| ["torso", 37, 83], | |
| ["leftarm", 22, 79], | |
| ["rightarm", 59, 80], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "16": { | |
| offset: [-6, 0], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/16/legs.png"], | |
| ["torso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/16/torso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/16/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/16/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/16/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/16/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 37, 95], | |
| ["torso", 37, 84], | |
| ["leftarm", 24, 84], | |
| ["rightarm", 62, 84], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 37, 95], | |
| ["torso", 37, 84], | |
| ["leftarm", 24, 84], | |
| ["rightarm", 62, 84], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "17": { | |
| offset: [-6, 13], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/17/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/17/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/17/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/17/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/17/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/17/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/17/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 36, 77], | |
| ["backtorso", 36, 68], | |
| ["leftarm", 22, 68], | |
| ["rightarm", 58, 68], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 35, 77], | |
| ["fronttorso", 36, 68], | |
| ["leftarm", 21, 68], | |
| ["rightarm", 58, 68], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "18": { | |
| offset: [-16, -6], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/18/legs.png"], | |
| ["torso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/18/torso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/18/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/18/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/18/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/18/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 39, 95], | |
| ["torso", 60, 85], | |
| ["leftarm", 45, 85], | |
| ["rightarm", 73, 85], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 39, 95], | |
| ["torso", 60, 85], | |
| ["leftarm", 45, 85], | |
| ["rightarm", 73, 85], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "19": { | |
| offset: [-16, -3], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/19/legs.png"], | |
| ["torso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/19/torso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/19/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/19/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/19/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/19/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 42, 95], | |
| ["torso", 60, 85], | |
| ["leftarm", 45, 85], | |
| ["rightarm", 73, 85], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 42, 95], | |
| ["torso", 60, 85], | |
| ["leftarm", 45, 85], | |
| ["rightarm", 73, 85], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "20": { | |
| offset: [-24, -27], | |
| images: [ | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/20/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/20/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/20/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/20/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/20/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/20/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["leftarm", 28, 135], | |
| ["rightarm", 93, 135], | |
| ["backtorso", 33, 135], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["leftarm", 28, 133], | |
| ["rightarm", 93, 133], | |
| ["fronttorso", 33, 133], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "21": { | |
| offset: [-24, -27], | |
| images: [ | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/21/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/21/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/21/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/21/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/21/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/21/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["leftarm", 31, 132], | |
| ["rightarm", 87, 132], | |
| ["backtorso", 33, 132], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["leftarm", 31, 132], | |
| ["rightarm", 87, 132], | |
| ["fronttorso", 33, 132], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "22": { | |
| offset: [-22, -30], | |
| images: [ | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/22/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/22/backtorso.png"], | |
| ["frontlegs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/22/frontlegs.png"], | |
| ["backlegs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/22/backlegs.png"], | |
| ["leftarm_back", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/22/leftarm_back.png"], | |
| ["rightarm_back", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/22/rightarm_back.png"], | |
| ["leftarm_front", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/22/leftarm_front.png"], | |
| ["rightarm_front", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/22/rightarm_front.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/22/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/22/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["leftarm_back", 42, 132], | |
| ["rightarm_back", 92, 132], | |
| ["backtorso", 62, 136], | |
| ["backlegs", 57, 150], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["leftarm_front", 43, 132], | |
| ["rightarm_front", 96, 132], | |
| ["fronttorso", 62, 136], | |
| ["frontlegs", 57, 150], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "23": { | |
| offset: [10, -10], | |
| images: [ | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/23/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/23/backtorso.png"], | |
| ["frontlegs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/23/frontlegs.png"], | |
| ["backlegs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/23/backlegs.png"], | |
| ["leftarm_back", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/23/leftarm_back.png"], | |
| ["rightarm_back", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/23/rightarm_back.png"], | |
| ["leftarm_front", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/23/leftarm_front.png"], | |
| ["rightarm_front", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/23/rightarm_front.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/23/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/23/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["leftarm_back", -117, 25], | |
| ["rightarm_back", 60, 30], | |
| ["backtorso", -68, 28], | |
| ["backlegs", -25, 140], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["leftarm_front", -108, 45], | |
| ["rightarm_front", 84, 45], | |
| ["fronttorso", -71, 28], | |
| ["frontlegs", -28, 139], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "24": { | |
| offset: [-43, -35], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/24/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/24/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/24/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/24/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/24/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/24/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/24/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 98, 180], | |
| ["leftarm", 83, 153], | |
| ["rightarm", 138, 153], | |
| ["backtorso", 103, 153], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 98, 180], | |
| ["leftarm", 83, 153], | |
| ["rightarm", 138, 153], | |
| ["fronttorso", 103, 153], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "25": { | |
| offset: [-43, -35], | |
| images: [ | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/25/head.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/25/head.png"], | |
| ["body", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/25/body.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["body", -12, 60], | |
| ["headback", 28, 8] | |
| ], | |
| front: [ | |
| ["body", -12, 60], | |
| ["headfront", 28, 8] | |
| ] | |
| } | |
| }, | |
| "26": { | |
| offset: [-6, -7], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/26/legs.png"], | |
| ["torso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/26/torso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/26/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/26/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/26/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/26/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 39, 119], | |
| ["torso", 39, 97], | |
| ["leftarm", 25, 97], | |
| ["rightarm", 61, 97], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 39, 117], | |
| ["torso", 39, 95], | |
| ["leftarm", 25, 95], | |
| ["rightarm", 61, 95], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "27": { | |
| offset: [0, 2], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/27/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/27/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/27/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/27/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 7, 72], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 7, 74], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "28": { | |
| offset: [-2, 2], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/28/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/28/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/28/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/28/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 9, 73], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 9, 73], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "29": { | |
| offset: [-2, 2], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/29/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/29/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/29/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/29/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", -7, 73], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", -7, 73], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "30": { | |
| offset: [-2, 2], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/30/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/30/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/30/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/30/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 7, 73], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 7, 73], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "31": { | |
| offset: [-2, 2], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/31/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/31/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/31/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/31/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 7, 73], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 9, 73], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "32": { | |
| offset: [-2, 2], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/32/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/32/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/32/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/32/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 7, 73], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 8, 73], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "33": { | |
| offset: [-2, 2], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/33/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/33/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/33/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/33/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 7, 73], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 8, 73], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "34": { | |
| offset: [1, -2], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/34/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/34/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/34/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/34/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 15, 84], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 13, 81], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "35": { | |
| offset: [-6, -7], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/35/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/35/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/35/headfront.png"], | |
| ["headfrontplay", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/35/headfront_heart.png"], | |
| ["headfrontplay2", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/35/headfront_arrow.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/35/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 18, 95], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 18, 95], | |
| ["headfront", 0, 0] | |
| ], | |
| frontplay: [ | |
| ["bodyfront", 18, 95], | |
| ["headfrontplay", 0, 0] | |
| ] | |
| }, | |
| animations: { | |
| bob: [{ | |
| "headback,headfront,headfrontplay": [{ | |
| swap: "headfrontplay" | |
| }, { | |
| y: 7, | |
| time: 200 | |
| }] | |
| }, { | |
| "headback,headfront,headfrontplay": [{ | |
| y: -7, | |
| time: 200 | |
| }, { | |
| swap: "headfront" | |
| }] | |
| }, { | |
| "headback,headfront,headfrontplay,headfrontplay2": [{ | |
| swap: "headfrontplay2" | |
| }, { | |
| y: 7, | |
| time: 200 | |
| }] | |
| }, { | |
| "headback,headfront,headfrontplay,headfrontplay2": [{ | |
| y: -7, | |
| time: 200 | |
| }, { | |
| swap: "headfront" | |
| }] | |
| }, { | |
| "headback,headfront": [{ | |
| swap: "headfront" | |
| }, { | |
| y: 7, | |
| time: 200 | |
| }] | |
| }, { | |
| "headback,headfront": [{ | |
| y: -7, | |
| time: 200 | |
| }, { | |
| swap: "headfront" | |
| }] | |
| }], | |
| "bob.loop": true | |
| } | |
| }, | |
| "36": { | |
| offset: [-15, -15], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/36/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/36/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/36/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/36/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 40, 107], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 40, 107], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "37": { | |
| offset: [-15, -15], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/37/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/37/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/37/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/37/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 40, 107], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 40, 107], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "38": { | |
| offset: [-15, -12], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/38/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/38/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/38/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/38/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 40, 96], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 40, 96], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "39": { | |
| offset: [-5, -12], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/39/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/39/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/39/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/39/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 5], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 5], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "40": { | |
| offset: [-5, -8], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/40/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/40/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/40/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/40/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "41": { | |
| offset: [-5, -8], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/41/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/41/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/41/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/41/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "42": { | |
| offset: [-5, -8], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/42/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/42/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/42/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/42/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "43": { | |
| offset: [-5, -8], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/43/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/43/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/43/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/43/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "44": { | |
| offset: [-5, -8], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/44/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/44/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/44/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/44/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "45": { | |
| offset: [-5, -8], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/45/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/45/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/45/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/45/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "46": { | |
| offset: [-5, -8], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/46/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/46/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/46/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/46/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "47": { | |
| offset: [-5, -8], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/47/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/47/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/47/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/47/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "48": { | |
| offset: [-5, -8], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/48/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/48/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/48/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/48/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "49": { | |
| offset: [-8, -10], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/49/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/49/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/49/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/49/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "50": { | |
| offset: [-8, -10], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/50/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/50/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/50/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/50/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "51": { | |
| offset: [-8, -5], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/51/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/51/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/51/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/51/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "52": { | |
| offset: [-8, -5], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/52/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/52/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/52/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/52/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "53": { | |
| offset: [-8, -5], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/53/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/53/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/53/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/53/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "54": { | |
| offset: [-8, -5], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/54/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/54/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/54/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/54/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "55": { | |
| offset: [-8, -5], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/55/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/55/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/55/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/55/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "56": { | |
| offset: [-8, -5], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/56/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/56/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/56/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/56/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "57": { | |
| offset: [-8, -5], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/57/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/57/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/57/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/57/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 1, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "58": { | |
| offset: [-5, -5], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/58/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/58/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/58/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/58/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", -8, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "59": { | |
| offset: [-11, -12], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/59/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/59/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/59/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/59/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 2, 3], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "60": { | |
| offset: [-9, -10], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/60/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/60/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/60/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/60/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", -3, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 1, 3], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "61": { | |
| offset: [-4, -3], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/61/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/61/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/61/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/61/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 5, 70], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 75], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "62": { | |
| offset: [1, -2], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/62/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/62/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/62/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/62/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 15, 84], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 13, 81], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "63": { | |
| offset: [1, -6], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/63/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/63/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/63/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/63/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/63/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/63/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/63/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 30, 98], | |
| ["backtorso", 31, 91], | |
| ["leftarm", 19, 91], | |
| ["rightarm", 47, 91], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 30, 97], | |
| ["fronttorso", 31, 90], | |
| ["leftarm", 19, 90], | |
| ["rightarm", 47, 90], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "64": { | |
| offset: [-2, -5], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/64/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/64/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/64/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/64/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 23, 81], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 23, 81], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "65": { | |
| offset: [-2, -5], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/65/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/65/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/65/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/65/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 23, 81], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 23, 81], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "66": { | |
| offset: [1, -3], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/66/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/66/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/66/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/66/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 15, 74], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 17, 74], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "67": { | |
| offset: [3, -3], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/67/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/67/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/67/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/67/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 14, 84], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 12, 84], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "68": { | |
| offset: [1, 3], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/68/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/68/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/68/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/68/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/68/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/68/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/68/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 32, 81], | |
| ["backtorso", 32, 66], | |
| ["leftarm", 19, 69], | |
| ["rightarm", 53, 69], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 30, 81], | |
| ["fronttorso", 30, 66], | |
| ["leftarm", 19, 69], | |
| ["rightarm", 53, 69], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "69": { | |
| offset: [-5, 3], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/69/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/69/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/69/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/69/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/69/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/69/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/69/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 39, 81], | |
| ["backtorso", 39, 66], | |
| ["leftarm", 27, 69], | |
| ["rightarm", 60, 69], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 37, 81], | |
| ["fronttorso", 37, 66], | |
| ["leftarm", 25, 69], | |
| ["rightarm", 60, 69], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "70": { | |
| offset: [2, -1], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/70/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/70/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/70/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/70/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/70/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/70/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/70/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 29, 82], | |
| ["backtorso", 29, 69], | |
| ["leftarm", 16, 70], | |
| ["rightarm", 46, 68], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 30, 83], | |
| ["fronttorso", 30, 68], | |
| ["leftarm", 17, 71], | |
| ["rightarm", 49, 69], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "71": { | |
| offset: [2, 5], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/71/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/71/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/71/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/71/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/71/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/71/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/71/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 28, 72], | |
| ["backtorso", 29, 59], | |
| ["leftarm", 16, 60], | |
| ["rightarm", 46, 58], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 30, 73], | |
| ["fronttorso", 30, 58], | |
| ["leftarm", 17, 61], | |
| ["rightarm", 49, 59], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "72": { | |
| offset: [-7, -5], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/72/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/72/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/72/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/72/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 30, 84], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 28, 84], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "73": { | |
| offset: [2, 0], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/73/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/73/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/73/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/73/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/73/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/73/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/73/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 28, 83], | |
| ["backtorso", 29, 71], | |
| ["leftarm", 17, 71], | |
| ["rightarm", 48, 73], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 31, 86], | |
| ["fronttorso", 32, 74], | |
| ["leftarm", 18, 70], | |
| ["rightarm", 51, 70], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "74": { | |
| offset: [1, 0], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/74/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/74/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/74/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/74/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/74/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/74/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/74/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 27, 87], | |
| ["backtorso", 28, 72], | |
| ["leftarm", 15, 69], | |
| ["rightarm", 47, 72], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 29, 87], | |
| ["fronttorso", 30, 72], | |
| ["leftarm", 17, 69], | |
| ["rightarm", 49, 72], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "75": { | |
| offset: [-1, -14], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/75/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/75/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/75/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/75/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 9, 90], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 9, 90], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "76": { | |
| offset: [-35, -18], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/76/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/76/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/76/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/76/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "77": { | |
| offset: [-3, -16], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/77/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/77/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/77/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/77/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 18, 86], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 18, 88], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "78": { | |
| offset: [0, 4], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/78/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/78/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/78/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/78/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 16, 87], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 16, 87], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "79": { | |
| offset: [0, -2], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/79/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/79/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/79/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/79/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 16, 87], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 16, 87], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "80": { | |
| offset: [0, 4], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/80/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/80/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/80/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/80/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 18, 72], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 18, 72], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "81": { | |
| offset: [-4, 3], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/81/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/81/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/81/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/81/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 25, 75], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 25, 75], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "82": { | |
| offset: [-6, -1], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/82/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/82/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/82/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/82/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 25, 84], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 25, 84], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "83": { | |
| offset: [-5, -1], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/83/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/83/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/83/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/83/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 25, 87], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 25, 87], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "84": { | |
| offset: [-4, 7], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/84/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/84/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/84/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/84/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 26, 68], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 26, 68], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "85": { | |
| offset: [-4, 7], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/85/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/85/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/85/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/85/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 26, 68], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 26, 68], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "86": { | |
| offset: [0, 0], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/86/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/86/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/86/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/86/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["headback", 0, 0], | |
| ["bodyback", -67, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", -67, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "87": { | |
| offset: [-14, -15], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/87/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/87/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/87/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/87/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 41, 97], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 41, 97], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "88": { | |
| offset: [-2, -27], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/88/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/88/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/88/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/88/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 12, 98], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 12, 98], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "89": { | |
| offset: [-4, -9], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/89/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/89/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/89/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/89/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 25, 94], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 25, 94], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "90": { | |
| offset: [3, -13], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/90/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/90/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/90/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/90/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 13, 91], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 13, 91], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "91": { | |
| offset: [-12, -15], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/91/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/91/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/91/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/91/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 36, 105], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 36, 105], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "92": { | |
| offset: [-3, -14], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/92/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/92/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/92/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/92/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 24, 105], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 24, 105], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "93": { | |
| offset: [-5, -16], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/93/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/93/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/93/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/93/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 24, 99], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 24, 99], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "94": { | |
| offset: [1, -9], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/94/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/94/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/94/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/94/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 11, 80], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 11, 80], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "95": { | |
| offset: [-7, -13], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/95/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/95/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/95/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/95/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 32, 105], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 32, 105], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "96": { | |
| offset: [-7, -21], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/96/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/96/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/96/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/96/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "97": { | |
| offset: [3, -13], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/97/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/97/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/97/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/97/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 12, 78], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 12, 78], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "98": { | |
| offset: [0, -13], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/98/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/98/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/98/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/98/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 15, 100], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 15, 100], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "99": { | |
| offset: [3, -16], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/99/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/99/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/99/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/99/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 16, 100], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 16, 100], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "100": { | |
| offset: [-4, -20], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/100/legs.png"], | |
| ["fronttorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/100/fronttorso.png"], | |
| ["backtorso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/100/backtorso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/100/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/100/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/100/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/100/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 36, 116], | |
| ["backtorso", 36, 107], | |
| ["leftarm", 22, 107], | |
| ["rightarm", 58, 107], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 37, 116], | |
| ["fronttorso", 38, 107], | |
| ["leftarm", 23, 107], | |
| ["rightarm", 60, 107], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "101": { | |
| offset: [-5, -22], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/101/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/101/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/101/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/101/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 26, 107], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 24, 107], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "102": { | |
| offset: [-8, -17], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/102/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/102/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/102/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/102/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 30, 108], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 30, 108], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "103": { | |
| offset: [-12, -18], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/103/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/103/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/103/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/103/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 38, 107], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 38, 107], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "104": { | |
| offset: [-1, 6], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/104/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/104/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/104/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/104/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 19, 66], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 19, 70], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "105": { | |
| offset: [0, 0], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/105/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/105/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/105/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/105/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 17, 84], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 17, 84], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "106": { | |
| offset: [0, -18], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/106/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/106/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/106/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/106/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 17, 116], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 19, 116], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "107": { | |
| offset: [0, 0], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/107/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/107/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/107/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/107/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 34, 82], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 18, 83], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "108": { | |
| offset: [-4, -18], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/108/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/108/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/108/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/108/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 26, 116], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 26, 116], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "109": { | |
| offset: [-5, 0], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/109/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/109/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/109/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/109/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 35, 83], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 26, 80], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "110": { | |
| offset: [2, 15], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/110/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/110/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/110/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/110/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 9, 59], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 10, 60], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "111": { | |
| offset: [-4, 7], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/111/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/111/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/111/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/111/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 19, 67], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 26, 68], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "112": { | |
| offset: [-2, -3], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/112/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/112/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/112/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/112/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 19, 85], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 19, 85], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "113": { | |
| offset: [1, 0], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/113/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/113/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/113/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/113/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 33, 82], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 13, 84], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "114": { | |
| offset: [0, 10], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/114/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/114/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/114/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/114/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 17, 63], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 17, 65], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "115": { | |
| offset: [0, 5], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/115/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/115/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/115/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/115/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 17, 74], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 19, 74], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "116": { | |
| offset: [-4, -14], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/116/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/116/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/116/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/116/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 30, 107], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 25, 107], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "117": { | |
| offset: [-2, -13], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/117/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/117/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/117/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/117/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 18, 90], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 19, 92], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "118": { | |
| offset: [-1, -11], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/118/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/118/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/118/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/118/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 18, 90], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 19, 92], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "119": { | |
| offset: [-15, -10], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/119/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/119/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/119/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/119/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", -38, 72], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", -12, 90], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "120": { | |
| offset: [4, -25], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/120/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/120/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/120/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/120/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", -31, 89], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", -32, 94], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "121": { | |
| offset: [-16, -4], | |
| images: [ | |
| ["legs", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/121/legs.png"], | |
| ["torso", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/121/torso.png"], | |
| ["leftarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/121/leftarm.png"], | |
| ["rightarm", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/121/rightarm.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/121/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/121/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["legs", 44, 95], | |
| ["torso", 62, 85], | |
| ["leftarm", 47, 85], | |
| ["rightarm", 75, 85], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["legs", 42, 95], | |
| ["torso", 60, 85], | |
| ["leftarm", 45, 85], | |
| ["rightarm", 73, 85], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "122": { | |
| offset: [-5, -18], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/122/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/122/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/122/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/122/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 6], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 6], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "123": { | |
| offset: [-5, -23], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/123/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/123/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/123/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/123/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 6], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 6], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "124": { | |
| offset: [-2, -16], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/124/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/124/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/124/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/124/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 17, 92], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 17, 92], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "125": { | |
| offset: [0, -17], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/125/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/125/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/125/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/125/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 14, 100], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 14, 100], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "126": { | |
| offset: [-7, -20], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/126/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/126/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/126/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/126/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 28, 108], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 28, 108], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "127": { | |
| offset: [-1, -11], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/127/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/127/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/127/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/127/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 20, 88], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 20, 88], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "128": { | |
| offset: [2, -11], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/128/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/128/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/128/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/128/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 14, 74], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 14, 74], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "129": { | |
| offset: [-5, -13], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/129/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/129/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/129/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/129/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 28, 87], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 28, 87], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "130": { | |
| offset: [2, -9], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/130/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/130/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/130/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/130/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 14, 79], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 14, 79], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "131": { | |
| offset: [2, -14], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/131/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/131/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/131/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/131/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", -8, 81], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", -8, 81], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "132": { | |
| offset: [-4, -18], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/132/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/132/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/132/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/132/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["headback", 0, 0], | |
| ["bodyback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "133": { | |
| offset: [-23, -32], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/133/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/133/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/133/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/133/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 51, 124], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 51, 127], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "134": { | |
| offset: [-24, -32], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/134/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/134/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/134/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/134/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 54, 124], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 54, 124], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "135": { | |
| offset: [-3, -18], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/135/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/135/bodyfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/135/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/135/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 20, 99], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 20, 99], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "136": { | |
| offset: [-5, -16], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/136/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/136/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/136/fullback.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/136/headback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/136/fullfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/136/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 23, 100], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 23, 100], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "137": { | |
| offset: [-4, -13], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/137/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/137/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/137/fullback.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/137/headback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/137/fullfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/137/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 22, 99], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 22, 99], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "138": { | |
| offset: [2, -15], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/138/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/138/bodyfront.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/138/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/138/headback.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/138/fullback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/138/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 13, 86], | |
| ["headback", -2, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 13, 86], | |
| ["headfront", -2, 0] | |
| ] | |
| } | |
| }, | |
| "139": { | |
| offset: [-9, -14], | |
| images: [ | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/139/fullfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/139/headfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/139/fullback.png"], | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/139/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/139/bodyfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/139/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 7], | |
| ["headback", 1, 0] | |
| ], | |
| front: [ | |
| ["headfront", 1, 0], | |
| ["bodyfront", 0, 7] | |
| ] | |
| } | |
| }, | |
| "140": { | |
| offset: [-9, -15], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/140/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/140/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/140/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/140/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/140/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/140/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "141": { | |
| offset: [-1, -13], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/141/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/141/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/141/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/141/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/141/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/141/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 16, 100], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 17, 100], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "142": { | |
| offset: [-1, -4], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/142/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/142/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/142/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/142/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/142/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/142/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 16, 85], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 18, 85], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "143": { | |
| offset: [-4, -9], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/143/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/143/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/143/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/143/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/143/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/143/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 22, 79], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 22, 87], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "144": { | |
| offset: [-12, -14], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/144/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/144/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/144/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/144/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/144/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/144/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 40, 102], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 40, 105], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "145": { | |
| offset: [-1, -12], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/145/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/145/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/145/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/145/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/145/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/145/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 0], | |
| ["headback", 1, -4] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 1, -4] | |
| ] | |
| } | |
| }, | |
| "146": { | |
| offset: [-9, -18], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/146/bodyback.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/146/fullback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/146/bodyfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/146/headback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/146/fullfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/146/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 30, 94], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 30, 94], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "147": { | |
| offset: [-6, -15], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/147/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/147/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/147/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/147/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/147/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/147/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 25, 100], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 25, 100], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "148": { | |
| offset: [-7, -15], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/148/bodyback.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/148/fullback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/148/bodyfront.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/148/fullfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/148/headfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/148/headback.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "149": { | |
| offset: [-2, -8], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/149/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/149/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/149/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/149/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/149/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/149/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 15, 93], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 18, 93], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "150": { | |
| offset: [0, -9], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/150/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/150/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/150/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/150/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/150/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/150/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 15, 92], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 15, 92], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "151": { | |
| offset: [6, -8], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/151/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/151/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/151/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/151/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/151/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/151/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 7, 80], | |
| ["headback", -2, 1] | |
| ], | |
| front: [ | |
| ["bodyfront", 7, 90], | |
| ["headfront", -2, 1] | |
| ] | |
| } | |
| }, | |
| "152": { | |
| offset: [4, -7], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/152/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/152/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/152/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/152/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/152/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/152/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 8, 84], | |
| ["headback", -2, 5] | |
| ], | |
| front: [ | |
| ["bodyfront", 8, 90], | |
| ["headfront", -2, 5] | |
| ] | |
| } | |
| }, | |
| "153": { | |
| offset: [-2, -17], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/153/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/153/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/153/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/153/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/153/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/153/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 21, 101], | |
| ["headback", -1, 10] | |
| ], | |
| front: [ | |
| ["bodyfront", 21, 101], | |
| ["headfront", -1, -1] | |
| ] | |
| } | |
| }, | |
| "154": { | |
| offset: [7, -1], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/154/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/154/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/154/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/154/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/154/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/154/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 4, 87], | |
| ["headback", -2, 1] | |
| ], | |
| front: [ | |
| ["bodyfront", 4, 79], | |
| ["headfront", -2, 1] | |
| ] | |
| } | |
| }, | |
| "155": { | |
| offset: [8, -17], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/155/bodyback.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/155/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/155/fullfront.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/155/bodyfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/155/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/155/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 90], | |
| ["headback", -9, 1] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 100], | |
| ["headfront", -9, 1] | |
| ] | |
| } | |
| }, | |
| "156": { | |
| offset: [-2, -6], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/156/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/156/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/156/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/156/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/156/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/156/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 19, 99], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 20, 99], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "157": { | |
| offset: [-2, -13], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/157/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/157/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/157/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/157/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/157/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/157/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 21, 107], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 21, 107], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "158": { | |
| offset: [-11, -16], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/158/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/158/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/158/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/158/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/158/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/158/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "159": { | |
| offset: [-5, -6], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/159/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/159/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/159/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/159/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/159/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/159/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 28, 96], | |
| ["headback", -4, -17] | |
| ], | |
| front: [ | |
| ["bodyfront", 28, 96], | |
| ["headfront", -4, -30] | |
| ] | |
| } | |
| }, | |
| "160": { | |
| offset: [-8, -15], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/160/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/160/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/160/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/160/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/160/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/160/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "161": { | |
| offset: [-11, -11], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/161/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/161/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/161/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/161/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/161/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/161/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "162": { | |
| offset: [-9, -10], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/162/bodyback.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/162/fullback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/162/bodyfront.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/162/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/162/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/162/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "163": { | |
| offset: [-9, -18], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/163/bodyback.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/163/fullback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/163/bodyfront.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/163/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/163/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/163/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["headback", 0, 0], | |
| ["bodyback", 0, 21] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 21], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "164": { | |
| offset: [-10, -7], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/164/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/164/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/164/fullback.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/164/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/164/headfront.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/164/fullfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "165": { | |
| offset: [-2, -6], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/165/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/165/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/165/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/165/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/165/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/165/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 18, 92], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 18, 92], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "166": { | |
| offset: [3, -5], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/166/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/166/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/166/fullback.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/166/headback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/166/fullfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/166/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 10, 86], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 10, 86], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "167": { | |
| offset: [4, -8], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/167/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/167/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/167/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/167/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/167/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/167/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 9, 93], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 9, 93], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "168": { | |
| offset: [0, -6], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/168/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/168/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/168/fullback.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/168/headback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/168/fullfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/168/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 15, 97], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 15, 95], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "169": { | |
| offset: [4, -3], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/169/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/169/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/169/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/169/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/169/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/169/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 8, 84], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 8, 84], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "170": { | |
| offset: [-1, -2], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/170/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/170/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/170/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/170/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/170/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/170/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 19, 96], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 17, 96], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "171": { | |
| offset: [5, 2], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/171/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/171/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/171/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/171/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/171/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/171/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 7, 77], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 7, 77], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "172": { | |
| offset: [3, -5], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/172/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/172/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/172/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/172/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/172/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/172/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 12, 81], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 12, 92], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "173": { | |
| offset: [-2, -8], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/173/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/173/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/173/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/173/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/173/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/173/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 22, 100], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 20, 100], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "174": { | |
| offset: [3, -3], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/174/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/174/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/174/fullback.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/174/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/174/headfront.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/174/fullfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 7, 86], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 8, 88], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "175": { | |
| offset: [-6, -8], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/175/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/175/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/175/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/175/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/175/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/175/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 24, 100], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 24, 101], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "176": { | |
| offset: [-9, -10], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/176/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/176/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/176/fullback.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/176/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/176/headfront.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/176/fullfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "177": { | |
| offset: [-8, -11], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/177/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/177/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/177/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/177/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/177/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/177/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "178": { | |
| offset: [-39, -18], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/178/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/178/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/178/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/178/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/178/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/178/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 30, 100], | |
| ["headback", -24, -16] | |
| ], | |
| front: [ | |
| ["bodyfront", 30, 100], | |
| ["headfront", -24, -16] | |
| ] | |
| } | |
| }, | |
| "179": { | |
| offset: [8, -10], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/179/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/179/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/179/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/179/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/179/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/179/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 101], | |
| ["headback", -11, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 101], | |
| ["headfront", -11, 0] | |
| ] | |
| } | |
| }, | |
| "180": { | |
| offset: [8, -12], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/180/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/180/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/180/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/180/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/180/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/180/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 101], | |
| ["headback", -19, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 101], | |
| ["headfront", -19, 0] | |
| ] | |
| } | |
| }, | |
| "181": { | |
| offset: [8, -8], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/181/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/181/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/181/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/181/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/181/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/181/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 99], | |
| ["headback", -13, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 99], | |
| ["headfront", -13, 0] | |
| ] | |
| } | |
| }, | |
| "182": { | |
| offset: [7, -10], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/182/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/182/bodyfront.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/182/fullfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/182/fullback.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/182/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/182/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 103], | |
| ["headback", -30, -8] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 103], | |
| ["headfront", -30, -8] | |
| ] | |
| } | |
| }, | |
| "183": { | |
| offset: [-10, -29], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/183/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/183/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/183/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/183/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/183/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/183/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "184": { | |
| offset: [-10, -18], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/184/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/184/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/184/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/184/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/184/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/184/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "185": { | |
| offset: [0, 0], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/185/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/185/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/185/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/185/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/185/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/185/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 10, 93], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 12, 85], | |
| ["headfront", 5, -15] | |
| ] | |
| } | |
| }, | |
| "186": { | |
| offset: [-9, -10], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/186/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/186/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/186/fullback.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/186/headback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/186/fullfront.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/186/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| }, | |
| "187": { | |
| offset: [-9, -14], | |
| images: [ | |
| ["bodyback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/187/bodyback.png"], | |
| ["bodyfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/187/bodyfront.png"], | |
| ["fullback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/187/fullback.png"], | |
| ["fullfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/187/fullfront.png"], | |
| ["headback", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/187/headback.png"], | |
| ["headfront", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/187/headfront.png"] | |
| ], | |
| states: { | |
| back: [ | |
| ["bodyback", 0, 0], | |
| ["headback", 0, 0] | |
| ], | |
| front: [ | |
| ["bodyfront", 0, 0], | |
| ["headfront", 0, 0] | |
| ] | |
| } | |
| } | |
| }; | |
| var volume_control = '<div class="volume_container"><div class="volume_bar volume_bar1 group1"></div><div class="volume_bar volume_bar2 group1 group2"></div><div class="volume_bar volume_bar3 group1 group2 group3"></div><div class="volume_bar volume_bar4 group1 group2 group3 group4"></div></div>'; | |
| ZpMdsdrXly = null; | |
| ROOM_INTERVAL = null; | |
| MARQUEE_INTERVALS = {}; | |
| function VoTrUR(a, d, b, j, h, f, c) { | |
| ZpMdsdrXly = this; | |
| this.div = a; | |
| this.dj_spots = d; | |
| this.width = b; | |
| this.height = j; | |
| this.callback = h; | |
| this.myuserid = f; | |
| this.roomid = c; | |
| this.floorRects = [{ | |
| rect: [20, 325, 50, 180], | |
| weight: 0.25 | |
| }, { | |
| rect: [20, 225, 450, 100], | |
| weight: 0.75 | |
| }]; | |
| var e = this.floorRects[1].rect[1]; | |
| var g = this.floorRects[0].rect[1] + this.floorRects[0].rect[3]; | |
| this.floorYRange = [e, g]; | |
| this.blackswan = new blackswan(a, b, j, this.floorYRange); | |
| this.blackswan.add_props(room_props); | |
| this.blackswan.start(); | |
| this.speaker = this.blackswan.add_dancer(speaker, false, [15, 194], false, false); | |
| this.listeners = {}; | |
| this.djs = {}; | |
| this.djs_uid = {}; | |
| this.record_piles = {}; | |
| this.become_dj = null; | |
| this.invite_dj = null; | |
| this.taken_dj_map = [-1, -1, -1, -1, -1]; | |
| this.moderator = false; | |
| this.volume_bars = 4; | |
| this.last_volume_bars = this.volume_bars; | |
| this.marquee_texts = {}; | |
| this.moderators = []; | |
| this.spotlight_index = -1; | |
| this.setup = function () { | |
| if (ROOM_INTERVAL) { | |
| clearInterval(ROOM_INTERVAL); | |
| ROOM_INTERVAL = null; | |
| } | |
| this.clear_marquees(); | |
| for (var k = 0; k < d; ++k) { | |
| var l = $('<div class="record_pile"></div>'); | |
| l.data("spot", k); | |
| if (k == 0) { | |
| l.hide(); | |
| } | |
| this.record_piles[k] = l; | |
| this.blackswan.add_element(l, this.dj_offset(record_pile_locations[k]), 116); | |
| } | |
| this.become_dj = $('<a class="SaVmVWjqPxYD"></a>'); | |
| this.become_dj.data("spot", 0); | |
| this.become_dj.click(function (m) { | |
| if (!(m.pageX && m.pageY)) { | |
| return; | |
| } | |
| ZpMdsdrXly.callback("become_dj", $(this).data("spot")); | |
| }); | |
| this.blackswan.add_element(this.become_dj, this.dj_offset(becomedj_locations[0]), 116, true); | |
| this.invite_dj = $('<a class="invite_dj"></a>'); | |
| this.invite_dj.click(function () { | |
| ZpMdsdrXly.callback("invite_dj"); | |
| }); | |
| this.blackswan.add_element(this.invite_dj, this.dj_offset(becomedj_locations[0]), 116, true); | |
| this.invite_dj.hide(); | |
| var l = $('<a id="lJPpaCmIsljgxR"></a>'); | |
| l.click(function (m) { | |
| if (m.pageX && m.pageY && turntable.HBQLNPd() < 5000) { | |
| ZpMdsdrXly.callback("upvote"); | |
| } | |
| }); | |
| this.blackswan.add_element(l, [370, 555], 10001, true); | |
| var l = $('<a id="BGTTUU"></a>'); | |
| l.click(function (m) { | |
| if (m.pageX && m.pageY && turntable.HBQLNPd() < 5000) { | |
| ZpMdsdrXly.callback("downvote"); | |
| } | |
| }); | |
| this.blackswan.add_element(l, [154, 555], 10001, true); | |
| this.setup_mute_volume(); | |
| this.needle = this.blackswan.add_dancer(needle, "default", [274, 494], false, false, 10001); | |
| $(this.needle.div).attr("id", "meterNeedle"); | |
| $(this.needle.div).css("width", "100px"); | |
| $(this.needle.div).css("height", "100px"); | |
| this.needle_pos = 0; | |
| this.songboard = $('<div id="songboard"><div id="songboard_artist"></div><div id="songboard_title"></div></div>'); | |
| this.blackswan.add_element(this.songboard, [84, 147], 116, true); | |
| this.add_add_to(); | |
| }; | |
| this.add_moderator = function (k) { | |
| if (!k) { | |
| return; | |
| } | |
| this.moderators = k; | |
| this.moderator = true; | |
| }; | |
| this.rem_moderator = function (k) { | |
| if (!k) { | |
| return; | |
| } | |
| this.moderators = k; | |
| this.moderator = false; | |
| }; | |
| this.getRandFloorLocation = function (k) { | |
| if (!k) { | |
| k = Math; | |
| } | |
| var l = k.random(); | |
| var n, m, p = false; | |
| for (i = 0, len = this.floorRects.length; i < len; i++) { | |
| n = m ? m : 0; | |
| m = n + this.floorRects[i].weight; | |
| if (l >= n && l < m) { | |
| p = this.floorRects[i].rect; | |
| break; | |
| } | |
| } | |
| if (!p) { | |
| p = this.floorRects[0].rect; | |
| } | |
| var q = Math.floor(k.random() * p[2]) + p[0]; | |
| var o = Math.floor(k.random() * p[3]) + p[1]; | |
| return [q, o]; | |
| }; | |
| this.getExistingAvatarById = function (k) { | |
| k = String(k); | |
| return avatars[k in avatars ? k : String(Math.floor(Math.random() * 8) + 1)]; | |
| }; | |
| this.add_listener = function (m, o) { | |
| var l = this.getExistingAvatarById(m.avatarid); | |
| var n = this.getRandFloorLocation(o); | |
| var p = this.blackswan.add_dancer(l, "back", n, true, false); | |
| this.add_tooltip(p.div, m); | |
| p.body().click(function () { | |
| ZpMdsdrXly.callback("profile", m.userid); | |
| }); | |
| p.body().css("cursor", "pointer"); | |
| var k = m.userid; | |
| this.listeners[k] = p; | |
| if (this.myuserid == k) { | |
| var q = $("<div></div>"); | |
| $(p.div).append(q); | |
| this.quick_tooltip(q, "you_marker", "YOU", -15); | |
| } | |
| }; | |
| this.toggle_listener = function (k) { | |
| var l = this.get_user_div(k); | |
| if (l[0]) { | |
| var m = l[0]; | |
| if (!m.find(".tipsy").length) { | |
| m.mouseover(); | |
| } else { | |
| m.mouseout(); | |
| } | |
| } | |
| }; | |
| this.rem_listener = function (l) { | |
| var k = l.userid; | |
| var m = this.listeners[k]; | |
| if (m) { | |
| this.blackswan.remove_dancer(m); | |
| delete this.listeners[k]; | |
| } | |
| }; | |
| this.get_user_div = function (l) { | |
| var n = this.listeners[l]; | |
| var o = null; | |
| var m = false; | |
| if (n) { | |
| o = n.div; | |
| } else { | |
| var k = this.djs_uid[l]; | |
| if (k) { | |
| o = k[0].body().parent(); | |
| } | |
| m = true; | |
| } | |
| return [o, m]; | |
| }; | |
| this.speak = function (l, p) { | |
| var k = l.userid; | |
| var m = this.get_user_div(k); | |
| var o = m[1]; | |
| var q = m[0]; | |
| if (!q) { | |
| return; | |
| } | |
| var n = $('<div class="speak_bubble"></div>'); | |
| n.tipsy({ | |
| fade: true, | |
| gravity: (o) ? "w" : "sw", | |
| offset: (o) ? 0 : -35, | |
| opacity: 0.9, | |
| html: true, | |
| trigger: "manual" | |
| }); | |
| p = util.emojify(this.safeText(util.stripComboDiacritics(p))); | |
| n.tipsy(true).tip().children(".tipsy-arrow").css("display", "block"); | |
| n.tipsy(true).options.title = function () { | |
| return '<div class="tooltip_info">' + p + "</div>"; | |
| }; | |
| n.tipsy("show"); | |
| $(document.body).append(n); | |
| n.css("left", q.offset().left + "px"); | |
| n.css("top", (q.offset().top - 60 - (Math.floor(p.length / 20) * 10)) + "px"); | |
| setTimeout(function () { | |
| n.tipsy("hide"); | |
| setTimeout(function () { | |
| n.remove(); | |
| }, 2000); | |
| }, 2000); | |
| }; | |
| this.dj_offset = function (l) { | |
| var k = l.concat(); | |
| k[0] += 168 - ((this.dj_spots - 1) * 42); | |
| return k; | |
| }; | |
| this.add_dj = function (m, q) { | |
| var l = m.userid; | |
| var k = this.getExistingAvatarById(m.avatarid); | |
| var n = new Date(); | |
| if (m.userid == "4e08f595a3f7517d1204e33c" && n.getDate() == 11 && n.getMonth() == 0) { | |
| m.laptop = "cake"; | |
| } | |
| if (this.roomid == "4f49105da3f75128a7000db9") { | |
| m.laptop = "intel"; | |
| } | |
| var o = $('<div class="avatar_laptop"><img src="' + room_elements["laptop_" + m.laptop] + '"></div>'); | |
| o.data("userid", l).attr("data-userid", l); | |
| this.blackswan.add_element(o, this.dj_offset(laptop_locations[q]), 117); | |
| $(document).trigger("draw_dj_laptop", l); | |
| var r = $('<div class="point_display"></div>'); | |
| r.hide(); | |
| o.append(r); | |
| var t = this.blackswan.add_dancer(k, "front", this.dj_offset(dj_locations[q]), true, true); | |
| this.djs[q] = [l, t, o, r, m]; | |
| this.djs_uid[l] = [t, o]; | |
| t.body().css({ | |
| cursor: "pointer" | |
| }); | |
| this.add_tooltip(t.body().parent(), m, true); | |
| this.shuffle_dj_spots(q, 1); | |
| }; | |
| this.rem_dj = function (l) { | |
| var k = this.djs[l]; | |
| if (k) { | |
| this.blackswan.remove_dancer(k[1]); | |
| this.blackswan.remove_element(k[2]); | |
| var m = this.djs[l]; | |
| delete this.djs_uid[m[0]]; | |
| delete this.djs[l]; | |
| this.shuffle_dj_spots(l, -1); | |
| } | |
| }; | |
| this.rightmost_spot = function () { | |
| for (var k = this.taken_dj_map.length; k >= 0; --k) { | |
| if (this.taken_dj_map[k] == 1) { | |
| return k; | |
| } | |
| } | |
| return -1; | |
| }; | |
| this.shuffle_dj_spots = function (m, n) { | |
| this.taken_dj_map[m] = n; | |
| var l = this.rightmost_spot() + 1; | |
| this.become_dj.hide(); | |
| this.invite_dj.hide(); | |
| for (var k = 0; k < this.dj_spots; ++k) { | |
| this.record_piles[k].hide(); | |
| } | |
| if (l < this.dj_spots) { | |
| for (var k = 0; k < this.dj_spots; ++k) { | |
| if (k > 0 && k != m) { | |
| this.record_piles[k].show(); | |
| } | |
| } | |
| if (this.djs_uid[this.myuserid]) { | |
| var o = this.invite_dj; | |
| } else { | |
| var o = this.become_dj; | |
| } | |
| o.show(); | |
| o.data("spot", l); | |
| this.blackswan.move_element(o, this.dj_offset(becomedj_locations[l])); | |
| this.record_piles[l].hide(); | |
| } | |
| }; | |
| this.set_dj_points = function (k) { | |
| if (this.current_dj) { | |
| this.current_dj[3].show(); | |
| this.current_dj[3].html(ZpMdsdrXly.commafy(k) + " points"); | |
| this.current_dj[4].points = k; | |
| } | |
| }; | |
| this.set_active_dj = function (l) { | |
| var k = this.djs[l]; | |
| if (k) { | |
| var m = k[1]; | |
| this.add_animation_to(m, "bob"); | |
| this.current_dj = k; | |
| this.set_dj_points(k[4].points); | |
| if (this.spotlight_index != l) { | |
| if (this.spotlight) { | |
| this.spotlight.attr("id", "").fadeOut(400, function () { | |
| $(this).remove(); | |
| }); | |
| } | |
| this.spotlight = $('<div id="spotlight"></div>'); | |
| this.spotlight_index = l; | |
| this.blackswan.add_element(this.spotlight, this.dj_offset(spotlight_locations[l]), 210); | |
| this.spotlight.hide(); | |
| this.spotlight.fadeIn(); | |
| } | |
| } | |
| }; | |
| this.stop_active_dj = function () { | |
| if (this.current_dj) { | |
| this.current_dj[1].stop(); | |
| this.current_dj[3].hide(); | |
| if (this.spotlight) { | |
| this.spotlight.attr("id", "").fadeOut(400, function () { | |
| $(this).remove(); | |
| }); | |
| this.spotlight = null; | |
| this.spotlight_index = -1; | |
| } | |
| } | |
| }; | |
| this.loadingsong = function (k) { | |
| this.nosong(); | |
| this.set_active_dj(k); | |
| $("#songboard_artist").html("Loading"); | |
| msgs = ["the bits are breeding", "go ahead - hold your breath", "at least you're not on hold", "we're testing your patience", "as if you had any other choice", "don't think of purple hippos", "follow the white rabbit", "reticulating splines", "frobulating widgets", "pc load letter"]; | |
| $("#songboard_title").html(msgs[Math.floor(Math.random() * msgs.length)]); | |
| }; | |
| this.newsong = function (m, k, o, n) { | |
| k = util.cleanText(k); | |
| o = util.cleanText(o); | |
| this.speaker.state("on"); | |
| this.speaker.animation("vibrate"); | |
| this.set_active_dj(m); | |
| this.time_left = n; | |
| var l = function () { | |
| ZpMdsdrXly.update_songboard(k, o); | |
| ZpMdsdrXly.time_left -= 1; | |
| }; | |
| l(); | |
| if (ROOM_INTERVAL) { | |
| clearInterval(ROOM_INTERVAL); | |
| } | |
| ROOM_INTERVAL = setInterval(l, 1000); | |
| }; | |
| this.nosong = function () { | |
| if (ROOM_INTERVAL) { | |
| clearInterval(ROOM_INTERVAL); | |
| ROOM_INTERVAL = null; | |
| } | |
| this.clear_marquees(); | |
| this.speaker.state("off"); | |
| this.speaker.stop(); | |
| this.stop_active_dj(); | |
| for (var k in this.listeners) { | |
| var m = this.listeners[k]; | |
| if (m) { | |
| m.stop(); | |
| } | |
| } | |
| for (var k in this.djs_uid) { | |
| var l = this.djs_uid[k]; | |
| if (l) { | |
| l[0].stop(); | |
| } | |
| } | |
| this.time_left = 0; | |
| $("#songboard_artist").html(""); | |
| $("#songboard_title").html(""); | |
| }; | |
| this.update_vote = function (l, n) { | |
| var k = l.userid; | |
| var o = this.listeners[k]; | |
| if (o) { | |
| if (n == "up") { | |
| this.add_animation_to(o, "rock"); | |
| } else { | |
| o.stop(); | |
| } | |
| } | |
| var m = this.djs_uid[k]; | |
| if (m) { | |
| var o = m[0]; | |
| if (n == "up") { | |
| this.add_animation_to(o, "smallbob"); | |
| } else { | |
| o.stop(); | |
| } | |
| } | |
| }; | |
| this.move_needle = function (o) { | |
| var n = -55; | |
| var k = 110; | |
| var m = o * k + n; | |
| var l = m - this.needle_pos; | |
| var p = { | |
| div: [{ | |
| rotate: l, | |
| time: 1000 | |
| }] | |
| }; | |
| if (this.needle.ani) { | |
| this.needle.ani.push(p); | |
| } else { | |
| this.needle.add_source_animation("move", { | |
| move: [p] | |
| }); | |
| } | |
| this.needle.animation("move", true); | |
| this.needle_pos = m; | |
| }; | |
| this.update_songboard = function (k, m) { | |
| if (this.time_left <= 0) { | |
| this.nosong(); | |
| $("#songboard_artist").html(""); | |
| $("#songboard_title").html(""); | |
| } else { | |
| var l = this.format_time(this.time_left); | |
| this.marquee("songboard_artist", 800, 12, k); | |
| this.marquee("songboard_title", 200, 30, m + " - " + l); | |
| } | |
| }; | |
| this.show_songboard_add = function () { | |
| if (ZpMdsdrXly.time_left) { | |
| $("#songboard_add").fadeIn(); | |
| $("#songboard_artist").fadeOut(); | |
| $("#songboard_title").fadeOut(); | |
| } | |
| }; | |
| this.hide_songboard_add = function () { | |
| $("#songboard_add").fadeOut(); | |
| $("#songboard_artist").fadeIn(); | |
| $("#songboard_title").fadeIn(); | |
| }; | |
| this.show_heart = function (l) { | |
| $.fx.step.path = function (r) { | |
| var q = r.end.css(1 - r.pos); | |
| for (var p in q) { | |
| r.elem.style[p] = q[p]; | |
| } | |
| }; | |
| var o = function (q) { | |
| var p = $(q).position(); | |
| this.css = function (w) { | |
| var v = Math.sin(w * 10); | |
| var r = p.left + (1 - w) * v * 20; | |
| var u = p.top + (1 - w) * -150; | |
| var y = w * 5 - 1; | |
| return { | |
| top: u + "px", | |
| left: r + "px", | |
| opacity: y | |
| }; | |
| }; | |
| }; | |
| if (!l) { | |
| return; | |
| } | |
| var m; | |
| if (l in this.listeners) { | |
| m = $(this.listeners[l].layers.headback); | |
| } else { | |
| if (l in this.djs_uid) { | |
| var n = this.djs_uid[l][0]; | |
| if (n) { | |
| m = $(n.layers.headfront); | |
| } | |
| } else { | |
| return; | |
| } | |
| } | |
| if (!m) { | |
| return; | |
| } | |
| var k = $("<img></img>"); | |
| k.attr("src", "https://s3.amazonaws.com/static.turntable.fm/images/room/heart.png"); | |
| k.css({ | |
| position: "absolute", | |
| top: m.offset().top, | |
| left: m.offset().left + (m.width() / 3), | |
| height: 20, | |
| width: 25, | |
| "z-index": 2 | |
| }).appendTo($("body")); | |
| k.animate({ | |
| path: new o(k) | |
| }, 5000, function () { | |
| k.remove(); | |
| }); | |
| }; | |
| this.add_add_to = function () { | |
| this.blackswan.add_element($('<div id="songboard_hotspot"><div id="songboard_add">Add song to:<br><div class="btn queue"></div><div class="btn amazon"></div><div class="btn itunes"></div><div class="btn lastfm"></div><div class="btn spotify"></div><div class="btn rdio"></div></div></div>'), [84, 147], 148, true); | |
| $("#songboard_hotspot").mouseenter(this.show_songboard_add); | |
| $("#songboard_hotspot").mouseleave(this.hide_songboard_add); | |
| $("#songboard_hotspot .queue").click(function () { | |
| ZpMdsdrXly.callback("add_song_to", "queue"); | |
| }); | |
| $("#songboard_hotspot .amazon").click(function () { | |
| ZpMdsdrXly.callback("add_song_to", "amazon"); | |
| }); | |
| $("#songboard_hotspot .itunes").click(function () { | |
| ZpMdsdrXly.callback("add_song_to", "itunes"); | |
| }); | |
| $("#songboard_hotspot .lastfm").click(function () { | |
| ZpMdsdrXly.callback("add_song_to", "lastfm"); | |
| }); | |
| $("#songboard_hotspot .spotify").click(function () { | |
| ZpMdsdrXly.callback("add_song_to", "spotify"); | |
| }); | |
| $("#songboard_hotspot .rdio").click(function () { | |
| ZpMdsdrXly.callback("add_song_to", "rdio"); | |
| }); | |
| this.tiny_tooltip($("#songboard_hotspot .queue"), "turntable queue"); | |
| this.tiny_tooltip($("#songboard_hotspot .amazon"), "amazon"); | |
| this.tiny_tooltip($("#songboard_hotspot .itunes"), "itunes"); | |
| this.tiny_tooltip($("#songboard_hotspot .lastfm"), "lastfm"); | |
| this.tiny_tooltip($("#songboard_hotspot .spotify"), "spotify"); | |
| this.tiny_tooltip($("#songboard_hotspot .rdio"), "rdio"); | |
| }; | |
| this.tiny_tooltip = function (l, k) { | |
| $(l).tipsy({ | |
| title: function () { | |
| return '<div class="tiny_tooltip">' + k + "</div>"; | |
| }, | |
| fade: true, | |
| gravity: "s", | |
| offset: -7, | |
| html: true, | |
| opacity: 0.9 | |
| }); | |
| }; | |
| this.quick_tooltip = function (n, k, m, l) { | |
| n.tipsy({ | |
| title: function () { | |
| return '<div class="' + k + '">' + m + "</div>"; | |
| }, | |
| fade: true, | |
| gravity: "sw", | |
| offset: (l ? l : 0), | |
| html: true, | |
| opacity: 0.9, | |
| delayOut: 200, | |
| trigger: "manual" | |
| }); | |
| n.tipsy("show"); | |
| setTimeout(function () { | |
| n.tipsy("hide"); | |
| }, 3000); | |
| }; | |
| this.hide_tip = function (k) { | |
| var l = this.get_user_div(k); | |
| if (l[0]) { | |
| l[0].tipsy("hide"); | |
| } | |
| }; | |
| this.add_tooltip = function (n, k, m, l) { | |
| n.tipsy({ | |
| title: function () { | |
| var s = "<br>" + ZpMdsdrXly.commafy(k.points) + " DJ point" + (k.points == 1 ? "" : "s") + "<br>" + ZpMdsdrXly.commafy(k.fans || 0) + " fan" + (k.fans == 1 ? "" : "s"); | |
| var t = "<a class=\"tooltip_info tooltip_btn gold\" href=\"javascript:ZpMdsdrXly.callback('become_fan','" + k.userid + "')\">Become a Fan</a>"; | |
| var q = "<a class=\"tooltip_info tooltip_btn gold\" href=\"javascript:ZpMdsdrXly.callback('remove_fan','" + k.userid + "')\">Unfan</a>"; | |
| var y = "<a class=\"tooltip_info tooltip_btn\" href=\"javascript:ZpMdsdrXly.callback('remove_dj','" + k.userid + "')\">Remove DJ</a>"; | |
| var p = "<a class=\"tooltip_info tooltip_btn\" href=\"javascript:ZpMdsdrXly.callback('boot_user','" + k.userid + "')\">Boot User</a>"; | |
| var u = "<a class=\"tooltip_info tooltip_btn\" href=\"javascript:ZpMdsdrXly.callback('add_moderator','" + k.userid + "');ZpMdsdrXly.hide_tip('" + k.userid + "')\">Make a Moderator</a>"; | |
| var r = "<a class=\"tooltip_info tooltip_btn\" href=\"javascript:ZpMdsdrXly.callback('rem_moderator','" + k.userid + "');ZpMdsdrXly.hide_tip('" + k.userid + "')\">Remove Moderator</a>"; | |
| var o = '<a class="tooltip_info tooltip_btn" href="javascript:ZpMdsdrXly.callback(\'stop_song\')">Skip My Song</a>'; | |
| var w = '<a class="tooltip_info tooltip_btn" href="javascript:ZpMdsdrXly.callback(\'rem_dj\')">Quit DJing</a>'; | |
| var v = ""; | |
| v += s; | |
| v += "</a>"; | |
| if (m) { | |
| if (k.userid == ZpMdsdrXly.myuserid) { | |
| v += w; | |
| if (ZpMdsdrXly.current_dj && ZpMdsdrXly.current_dj[0] == ZpMdsdrXly.myuserid) { | |
| v += o; | |
| } | |
| } | |
| } | |
| if (ZpMdsdrXly.moderator && k.userid != ZpMdsdrXly.myuserid) { | |
| if (turntable.user.acl >= k.acl) { | |
| v += p; | |
| if ($.inArray(k.userid, ZpMdsdrXly.moderators) >= 0) { | |
| v += r; | |
| } else { | |
| v += u; | |
| } | |
| } | |
| if (m) { | |
| v += y; | |
| } | |
| } | |
| if (k.userid != ZpMdsdrXly.myuserid) { | |
| if (k.fanof) { | |
| v += q; | |
| } else { | |
| v += t; | |
| } | |
| } | |
| return '<div class="' + ((l) ? l : "") + '"><a class="tooltip_info tooltip_btn blue" href="javascript:ZpMdsdrXly.callback(\'profile\',\'' + k.userid + "')\"><b>" + ZpMdsdrXly.safeText(k.name) + "</b>" + v + "</div>"; | |
| }, | |
| fade: true, | |
| gravity: (m) ? "nw" : "sw", | |
| offset: (m) ? -30 : -20, | |
| html: true, | |
| opacity: 0.9, | |
| delayOut: 200 | |
| }); | |
| }; | |
| this.safeText = function (k) { | |
| return k.replace(/</g, "<").replace(/>/g, ">"); | |
| }; | |
| this.add_animation_to = function (l, k) { | |
| if (l.scaledAnimations) { | |
| l.add_source_animation(k, l.scaledAnimations[k], true); | |
| } else { | |
| l.add_source_animation(k, avatar_animations[k], true); | |
| } | |
| l.animation(k); | |
| }; | |
| this.format_time = function (n) { | |
| var l = Math.floor(n / (60 * 60)); | |
| var p = n % (60 * 60); | |
| var m = Math.floor(p / 60); | |
| var k = p % 60; | |
| var q = Math.ceil(k); | |
| if (l && m < 10) { | |
| m = "0" + m; | |
| } | |
| if (q < 10) { | |
| q = "0" + q; | |
| } | |
| var o = ""; | |
| if (l) { | |
| o += l + ":"; | |
| } | |
| o += m + ":"; | |
| o += q; | |
| return o; | |
| }; | |
| this.setup_mute_volume = function () { | |
| function o() { | |
| $(".volume_container").css("visibility", "visible"); | |
| $(".mv_container").show(); | |
| } | |
| function p() { | |
| if (ZpMdsdrXly.volume_bars) { | |
| $(".mv_container").hide(); | |
| } else { | |
| $(".volume_container").css("visibility", "hidden"); | |
| } | |
| } | |
| var l = this._mv_construct("left", o, p); | |
| var n = this._mv_construct("right", o, p); | |
| var m = $('<div id="left_speaker"></div>'); | |
| m.mouseenter(o); | |
| m.mouseleave(p); | |
| this.blackswan.add_element(m, [0, 132], 117); | |
| var k = $('<div id="right_speaker"></div>'); | |
| this.blackswan.add_element(k, [441, 132], 117); | |
| k.mouseenter(o); | |
| k.mouseleave(p); | |
| }; | |
| this._mv_construct = function (k, t, o) { | |
| if (k == "left") { | |
| var p = [0, 130]; | |
| var s = 0; | |
| } else { | |
| var p = [441, 130]; | |
| var s = 1; | |
| } | |
| var n = $('<div class="mv_container"></div>'); | |
| this.blackswan.add_element(n, p, 10001, true); | |
| var r = $(volume_control); | |
| n.append(r); | |
| n.mouseenter(t); | |
| n.mouseleave(o); | |
| function q(m, u) { | |
| $(".volume_bar" + m).mouseenter(function () { | |
| $(".group" + m).addClass("volume_bar_hover"); | |
| }); | |
| $(".volume_bar" + m).mouseleave(function () { | |
| $(".group" + m).removeClass("volume_bar_hover"); | |
| }); | |
| $($(".volume_bar" + m)[s]).click(function () { | |
| ZpMdsdrXly.set_volume(u); | |
| ZpMdsdrXly.callback("set_volume", u); | |
| }); | |
| } | |
| q(1, 4); | |
| q(2, 3); | |
| q(3, 2); | |
| q(4, 1); | |
| var l = $('<a class="mute_btn"></a>'); | |
| l.mouseenter(function () { | |
| $(".mute_btn").addClass("mute_btn_hover"); | |
| }); | |
| l.mouseleave(function () { | |
| $(".mute_btn").removeClass("mute_btn_hover"); | |
| }); | |
| l.click(function () { | |
| ZpMdsdrXly.set_volume(ZpMdsdrXly.volume_bars ? 0 : ZpMdsdrXly.last_volume_bars); | |
| ZpMdsdrXly.callback("set_volume", ZpMdsdrXly.volume_bars); | |
| }); | |
| n.append(l); | |
| if (k == "right") { | |
| r.css("margin-right", "20px"); | |
| l.css("margin-left", "5px"); | |
| } | |
| n.hide(); | |
| return n; | |
| }; | |
| this.set_volume = function (k) { | |
| $(".volume_bar").removeClass("volume_bar_empty"); | |
| if (k <= 3) { | |
| $(".volume_bar1").addClass("volume_bar_empty"); | |
| } | |
| if (k <= 2) { | |
| $(".volume_bar2").addClass("volume_bar_empty"); | |
| } | |
| if (k <= 1) { | |
| $(".volume_bar3").addClass("volume_bar_empty"); | |
| } | |
| if (k == 0) { | |
| $(".volume_bar4").addClass("volume_bar_empty"); | |
| } | |
| this.last_volume_bars = this.volume_bars; | |
| this.volume_bars = k; | |
| if (ZpMdsdrXly.time_left && k) { | |
| this.speaker.state("on"); | |
| this.speaker.animation("vibrate"); | |
| } else { | |
| ZpMdsdrXly.speaker.state("off"); | |
| ZpMdsdrXly.speaker.stop(); | |
| } | |
| }; | |
| this.marquee = function (n, l, m, k) { | |
| this.marquee_texts[n] = k; | |
| this._marquee_helper(n, l, m); | |
| }; | |
| this._marquee_helper = function (q, l, n) { | |
| var p = $("#" + q); | |
| var o = 0; | |
| var k = this; | |
| if (this.marquee_texts[q].length < n) { | |
| p.text(this.marquee_texts[q]); | |
| return; | |
| } | |
| if (MARQUEE_INTERVALS[q]) { | |
| return; | |
| } | |
| function m() { | |
| var s = true; | |
| var r = k.marquee_texts[q]; | |
| while (r[o] == " " || s) { | |
| o += 1; | |
| var s = false; | |
| } | |
| if (o == r.length) { | |
| o = 0; | |
| } | |
| cur_text = r.substring(o) + " - " + r.substring(0, o - 1); | |
| p.text(cur_text); | |
| } | |
| MARQUEE_INTERVALS[q] = setInterval(m, l); | |
| m(); | |
| }; | |
| this.clear_marquees = function () { | |
| for (var k in MARQUEE_INTERVALS) { | |
| if (MARQUEE_INTERVALS[k]) { | |
| clearInterval(MARQUEE_INTERVALS[k]); | |
| MARQUEE_INTERVALS[k] = null; | |
| } | |
| } | |
| }; | |
| this.commafy = function (l) { | |
| l += ""; | |
| x = l.split("."); | |
| x1 = x[0]; | |
| x2 = x.length > 1 ? "." + x[1] : ""; | |
| var k = /(\d+)(\d{3})/; | |
| while (k.test(x1)) { | |
| x1 = x1.replace(k, "$1,$2"); | |
| } | |
| return x1 + x2; | |
| }; | |
| this.setup(); | |
| }(function () { | |
| var a = false, | |
| b = /xyz/.test(function () { | |
| xyz; | |
| }) ? /\b_super\b/ : /.*/; | |
| this.Class = function () {}; | |
| Class.extend = function (g) { | |
| var f = this.prototype; | |
| a = true; | |
| var e = new this(); | |
| a = false; | |
| for (var d in g) { | |
| e[d] = typeof g[d] == "function" && typeof f[d] == "function" && b.test(g[d]) ? (function (h, i) { | |
| return function () { | |
| var k = this._super; | |
| this._super = f[h]; | |
| var j = i.apply(this, arguments); | |
| this._super = k; | |
| return j; | |
| }; | |
| })(d, g[d]) : g[d]; | |
| } | |
| function c() { | |
| if (!a && this.init) { | |
| this.init.apply(this, arguments); | |
| } | |
| } | |
| c.prototype = e; | |
| c.constructor = c; | |
| c.extend = arguments.callee; | |
| return c; | |
| }; | |
| })(); | |
| var util = { | |
| alphabetize: function (b, a) { | |
| b.sort(function (e, d) { | |
| var c, f; | |
| if (a) { | |
| c = e[a].toLowerCase(); | |
| f = d[a].toLowerCase(); | |
| } else { | |
| c = e.toLowerCase(); | |
| f = d.toLowerCase(); | |
| } | |
| return (f > c) ? -1 : (f < c) ? 1 : 0; | |
| }); | |
| return b; | |
| }, | |
| applyAttributes: function (g, c, a) { | |
| for (var f in c) { | |
| if (f == "style") { | |
| var e = c[f]; | |
| for (var h in e) { | |
| $(g).css(h, e[h]); | |
| } | |
| } else { | |
| if (f == "data") { | |
| var b = c[f]; | |
| for (var d in b) { | |
| $(g).data(d, b[d]); | |
| } | |
| } else { | |
| if (f == "event") { | |
| util.applyEvents(g, c[f], a); | |
| } else { | |
| $(g).attr(f, c[f]); | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| applyEvents: function (f, b, a) { | |
| if ($.type(b) != "object") { | |
| LOG("WARNING: 'events' " + String(b) + " is not a dict"); | |
| return; | |
| } | |
| for (var d in b) { | |
| var c = b[d]; | |
| if ($.type(c) == "string") { | |
| if (!a) { | |
| LOG("WARNING: no owner provided for event handler '" + c + "'"); | |
| continue; | |
| } | |
| var e = a[c]; | |
| if (!e) { | |
| LOG("WARNING: no event handler " + String(a) + "." + c); | |
| continue; | |
| } | |
| c = e; | |
| } | |
| if (!c) { | |
| continue; | |
| } | |
| $(f).bind(d, util.eventHandlerDecorator(c)); | |
| } | |
| }, | |
| buildTree: function (g, c) { | |
| var k = $.type(g); | |
| if (k == "string" || k == "number") { | |
| return document.createTextNode(String(g)); | |
| } | |
| if (k != "array") { | |
| return g; | |
| } | |
| var d = g[0]; | |
| var a, b, j = []; | |
| if (d.indexOf(".") > -1) { | |
| d = d.split("."); | |
| a = d.slice(1); | |
| d = d[0]; | |
| } | |
| if (d.indexOf("##") > -1) { | |
| d = d.split("##"); | |
| j = (c ? d.slice(1) : []); | |
| d = d[0]; | |
| } | |
| if (d.indexOf("#") > -1) { | |
| d = d.split("#"); | |
| b = d[1]; | |
| d = d[0]; | |
| } | |
| var e = document.createElement(d); | |
| if (a) { | |
| e.className = a.join(" "); | |
| } | |
| for (var f = 0; f < j.length; f++) { | |
| c[j[f]] = e; | |
| } | |
| if (b) { | |
| e.id = b; | |
| } | |
| var f = 1; | |
| var h = g[f]; | |
| if (h) { | |
| if (util.typeOf(h) == "object") { | |
| util.applyAttributes(e, h, c); | |
| if (d.toLowerCase() == "a" && !e.href) { | |
| e.href = "#"; | |
| } | |
| f = 2; | |
| } | |
| for (; f < g.length; f++) { | |
| if (g[f] !== null && g[f] !== undefined) { | |
| e.appendChild(util.buildTree(g[f], c)); | |
| } | |
| } | |
| } | |
| if (d == "input") { | |
| util.setupPlaceholders(e); | |
| } | |
| return e; | |
| }, | |
| createImageWithLoader: function (c) { | |
| var b = $.Deferred(); | |
| var a = util.buildTree(["img", | |
| { | |
| src: c | |
| }]); | |
| a.onload = function () { | |
| b.resolve(); | |
| }; | |
| return [a, b]; | |
| }, | |
| eventHandlerDecorator: function (a) { | |
| return function () { | |
| try { | |
| a.apply(this, arguments); | |
| } catch (b) { | |
| LOG("Exception in event handler: " + String(b)); | |
| } | |
| return false; | |
| }; | |
| }, | |
| now: function () { | |
| return (new Date()).getTime(); | |
| }, | |
| nowStr: function () { | |
| return String(new Date()).substr(16, 8); | |
| }, | |
| typeOf: function (a) { | |
| if (a == null) { | |
| return "null"; | |
| } | |
| if (a.nodeName) { | |
| if (a.nodeType == 1) { | |
| return "element"; | |
| } | |
| if (a.nodeType == 3) { | |
| return /\S/.test(a.nodeValue) ? "textnode" : "whitespace"; | |
| } | |
| } else { | |
| if (typeof a.length == "number") { | |
| if (a.callee) { | |
| return "arguments"; | |
| } | |
| } | |
| } | |
| return $.type(a); | |
| }, | |
| asciify: function (a) { | |
| return a.replace(/[\u00E0-\u00E5]/g, "a").replace(/[\u00E8-\u00EB\u0112-\u011B]/g, "e").replace(/[\u00EC-\u00EF]/g, "i").replace(/[\u00F1\u0143-\u014B]/g, "n").replace(/[\u00F2-\u00F6\u00F8\u014C-\u0151]/g, "o").replace(/[\u00D9-\u00DC\u00F9-\u00FC]/, "u").replace(/[\u00DD\u00FD\u00FF]/, "y"); | |
| }, | |
| normalize: function (a) { | |
| return a.replace(/\0.*/, ""); | |
| }, | |
| stripComboDiacritics: function (a) { | |
| return a.replace(/[\u0300-\u036F\u0483-\u0489\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/g, ""); | |
| }, | |
| cleanText: function (a) { | |
| return util.asciify(util.normalize(util.stripComboDiacritics(a))); | |
| }, | |
| messageFilter: function (a) { | |
| return util.emojify(util.linkify(util.safeText(util.memeify(a)))); | |
| }, | |
| linkify: function (d) { | |
| var c = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;\(\)]*[-A-Z0-9+&@#\/%=~_\(\)|])/gim; | |
| var b = d.replace(c, '<a href="$1" target="_blank">$1</a>'); | |
| var a = /(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})/gim; | |
| var b = b.replace(a, '<a href="mailto:$1">$1</a>'); | |
| return b; | |
| }, | |
| emojify: function (f) { | |
| f = f.replace(/[:=]-?\)/g, ":smile:"); | |
| f = f.replace(/[:=]-?\(/g, ":unamused:"); | |
| f = f.replace(/;-?\)/g, ":wink:"); | |
| f = f.replace(/[:=]-?[Pp]\b/g, ":tongue:"); | |
| f = f.replace(/<3/g, ":heart:"); | |
| f = f.replace(/:\+1:/g, ":thumbsup:"); | |
| var d = /:([\w\d-_]+):/g; | |
| matches = f.match(d); | |
| if (matches) { | |
| for (var c = 0, a = matches.length; c < a; c++) { | |
| var b = matches[c].replace(/:/g, "").toLowerCase(); | |
| if (b in util.emoji_images) { | |
| var e = "<span title='" + b + "' class='emoji emoji-" + b + "'></span>"; | |
| f = f.replace(matches[c], e); | |
| } | |
| } | |
| } | |
| return f; | |
| }, | |
| memeify: function (a) { | |
| if (a && a.indexOf("/") > -1) { | |
| return a.replace(/\/seriousface/g, "\u0ca0_\u0ca0").replace(/\/monocle/g, "\u0ca0\u005f\u0cb0\u0cc3").replace(/\/tableflip/g, "(\u256f\u00b0\u25a1\u00b0)\u256f\ufe35\u0020\u253b\u2501\u253b").replace(/\/tablefix/g, "\u252c\u2500\u252c\u30ce\u0028\u0020\u00ba\u0020\u005f\u0020\u00ba\u30ce\u0029").replace(/\/whatever/g, "\u00af\u005c\u005f\u0028\u30c4\u0029\u005f\u002f\u00af"); | |
| } else { | |
| return a; | |
| } | |
| }, | |
| safeText: function (a) { | |
| return a.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">"); | |
| }, | |
| brText: function (a) { | |
| return a.replace(/\n/g, "<br>"); | |
| }, | |
| title: function (a) { | |
| return a.replace(/(^|\s)([a-z])/g, function (b, d, c) { | |
| return d + c.toUpperCase(); | |
| }); | |
| }, | |
| setupPlaceholders: function (b) { | |
| if ($.browser.webkit) { | |
| return; | |
| } | |
| var a = $(b); | |
| var c = a.attr("placeholder"); | |
| if (!c) { | |
| return; | |
| } | |
| a.addClass("placeholder"); | |
| a.attr("value", c); | |
| a.focus(function (d) { | |
| if (a.val() == c) { | |
| a.removeClass("placeholder"); | |
| a.attr("value", ""); | |
| } | |
| }); | |
| a.blur(function (d) { | |
| if ($.trim(a.val()) == "") { | |
| a.addClass("placeholder"); | |
| a.attr("value", c); | |
| } | |
| }); | |
| }, | |
| QIQOxBrdu: function (b) { | |
| if (b) { | |
| for (var a in b) { | |
| if (typeof b[a] == "function") { | |
| b[a].toString = function () {}; | |
| } | |
| } | |
| } | |
| }, | |
| prettyDate: function (e) { | |
| var d = [ | |
| [120, "1 minute ago", "1 minute from now"], | |
| [3600, "minutes", 60], | |
| [7200, "1 hour ago", "1 hour from now"], | |
| [86400, "hours", 3600], | |
| [172800, "yesterday", "tomorrow"], | |
| [604800, "days", 86400], | |
| [1209600, "last week", "next week"], | |
| [2419200, "weeks", 604800], | |
| [4838400, "last month", "next month"], | |
| [29030400, "months", 2419200], | |
| [58060800, "last year", "next year"], | |
| [2903040000, "years", 29030400], | |
| [5806080000, "last century", "next century"], | |
| [58060800000, "centuries", 2903040000] | |
| ]; | |
| var g = util.now() / 1000 - e; | |
| var b = "ago"; | |
| var f = 1; | |
| if (g < 0) { | |
| g = -g; | |
| b = "from now"; | |
| f = 2; | |
| } | |
| if (g < 60) { | |
| return "just now"; | |
| } | |
| for (var a = 0; a < d.length; a++) { | |
| var c = d[a]; | |
| if (g < c[0]) { | |
| if (typeof c[2] == "string") { | |
| return c[f]; | |
| } else { | |
| return Math.floor(g / c[2]) + " " + c[1] + " " + b; | |
| } | |
| } | |
| } | |
| return e; | |
| }, | |
| mergeDicts: function () { | |
| var a = {}; | |
| for (var c = 0; c < arguments.length; c++) { | |
| var d = arguments[c]; | |
| for (var b in d) { | |
| a[b] = d[b]; | |
| } | |
| } | |
| return a; | |
| }, | |
| showOverlay: function (a) { | |
| $("#overlay").empty().css("height", $(document).height()).show().append(a); | |
| var b = ($(window).height() - $(".modal").outerHeight()) / 2; | |
| $(".modal").css("margin-top", Math.max(b, 10)); | |
| }, | |
| hideOverlay: function () { | |
| $("#overlay").empty().hide(); | |
| }, | |
| getSetting: function (a) { | |
| var b = $.cookie("setting_" + a); | |
| util.setSetting(a, b); | |
| return b; | |
| }, | |
| setSetting: function (a, b) { | |
| $.cookie("setting_" + a, b, { | |
| path: "/", | |
| expires: 365 | |
| }); | |
| }, | |
| prepApiData: function (b, a) { | |
| if (!a && typeof (turntable) !== "undefined") { | |
| a = turntable.user; | |
| } | |
| if (typeof (a) !== "undefined" && a.id && !b.userid) { | |
| b.userid = a.id; | |
| b.userauth = a.auth; | |
| } | |
| b.decache = new Date().valueOf(); | |
| return b; | |
| }, | |
| apiGet: function (d, a, c, b) { | |
| d = this.prepApiData(d, b); | |
| if (!c) { | |
| c = this; | |
| } | |
| var f = d.api; | |
| delete d.api; | |
| var e = JSON.stringify(d); | |
| LOG(util.nowStr() + " Preparing API GET for " + f + ": " + e); | |
| return $.getJSON("/api/" + f, d, $.proxy(function (g) { | |
| LOG("Received API GET: " + JSON.stringify(g)); | |
| $.proxy(a, this)(g); | |
| }, c)); | |
| }, | |
| apiPost: function (d, a, c, b) { | |
| d = this.prepApiData(d, b); | |
| if (!c) { | |
| c = this; | |
| } | |
| var f = d.api; | |
| delete d.api; | |
| var e = JSON.stringify(d); | |
| LOG(util.nowStr() + " Preparing API POST for " + f + ": " + e); | |
| return $.post("/api/" + f, d, $.proxy(function (g) { | |
| LOG("Received API POST: " + JSON.stringify(g)); | |
| $.proxy(a, this)(g); | |
| }, c), "json"); | |
| }, | |
| emoji_images: { | |
| "-1": null, | |
| "0": null, | |
| "1": null, | |
| "109": null, | |
| "2": null, | |
| "3": null, | |
| "4": null, | |
| "5": null, | |
| "6": null, | |
| "7": null, | |
| "8": null, | |
| "8ball": null, | |
| "9": null, | |
| a: null, | |
| ab: null, | |
| airplane: null, | |
| alien: null, | |
| ambulance: null, | |
| angel: null, | |
| anger: null, | |
| angry: null, | |
| apple: null, | |
| aquarius: null, | |
| aries: null, | |
| arrow_backward: null, | |
| arrow_down: null, | |
| arrow_forward: null, | |
| arrow_left: null, | |
| arrow_lower_left: null, | |
| arrow_lower_right: null, | |
| arrow_right: null, | |
| arrow_up: null, | |
| arrow_upper_left: null, | |
| arrow_upper_right: null, | |
| art: null, | |
| astonished: null, | |
| atm: null, | |
| b: null, | |
| baby: null, | |
| baby_chick: null, | |
| baby_symbol: null, | |
| balloon: null, | |
| bamboo: null, | |
| bank: null, | |
| barber: null, | |
| baseball: null, | |
| basketball: null, | |
| bath: null, | |
| bear: null, | |
| beer: null, | |
| beers: null, | |
| beginner: null, | |
| bell: null, | |
| bento: null, | |
| bike: null, | |
| bikini: null, | |
| bird: null, | |
| birthday: null, | |
| black_square: null, | |
| blue_car: null, | |
| blue_heart: null, | |
| blush: null, | |
| boar: null, | |
| boat: null, | |
| bomb: null, | |
| book: null, | |
| boot: null, | |
| bouquet: null, | |
| bow: null, | |
| bowtie: null, | |
| boy: null, | |
| bread: null, | |
| briefcase: null, | |
| broken_heart: null, | |
| bug: null, | |
| bulb: null, | |
| bullettrain_front: null, | |
| bullettrain_side: null, | |
| bus: null, | |
| busstop: null, | |
| cactus: null, | |
| cake: null, | |
| calling: null, | |
| camel: null, | |
| camera: null, | |
| cancer: null, | |
| capricorn: null, | |
| car: null, | |
| cat: null, | |
| cd: null, | |
| chart: null, | |
| checkered_flag: null, | |
| cherry_blossom: null, | |
| chicken: null, | |
| christmas_tree: null, | |
| church: null, | |
| cinema: null, | |
| city_sunrise: null, | |
| city_sunset: null, | |
| clap: null, | |
| clapper: null, | |
| clock1: null, | |
| clock10: null, | |
| clock11: null, | |
| clock12: null, | |
| clock2: null, | |
| clock3: null, | |
| clock4: null, | |
| clock5: null, | |
| clock6: null, | |
| clock7: null, | |
| clock8: null, | |
| clock9: null, | |
| closed_umbrella: null, | |
| cloud: null, | |
| clubs: null, | |
| cn: null, | |
| cocktail: null, | |
| coffee: null, | |
| cold_sweat: null, | |
| computer: null, | |
| confounded: null, | |
| congratulations: null, | |
| construction: null, | |
| construction_worker: null, | |
| convenience_store: null, | |
| cool: null, | |
| cop: null, | |
| copyright: null, | |
| couple: null, | |
| couple_with_heart: null, | |
| couplekiss: null, | |
| cow: null, | |
| crossed_flags: null, | |
| crown: null, | |
| cry: null, | |
| cupid: null, | |
| currency_exchange: null, | |
| curry: null, | |
| cyclone: null, | |
| dancer: null, | |
| dancers: null, | |
| dango: null, | |
| dart: null, | |
| dash: null, | |
| de: null, | |
| department_store: null, | |
| diamonds: null, | |
| disappointed: null, | |
| dog: null, | |
| dolls: null, | |
| dolphin: null, | |
| dress: null, | |
| dvd: null, | |
| ear: null, | |
| ear_of_rice: null, | |
| egg: null, | |
| eggplant: null, | |
| eight_pointed_black_star: null, | |
| eight_spoked_asterisk: null, | |
| elephant: null, | |
| email: null, | |
| es: null, | |
| european_castle: null, | |
| exclamation: null, | |
| eyes: null, | |
| factory: null, | |
| fallen_leaf: null, | |
| fast_forward: null, | |
| fax: null, | |
| fearful: null, | |
| feelsgood: null, | |
| feet: null, | |
| ferris_wheel: null, | |
| finnadie: null, | |
| fire: null, | |
| fire_engine: null, | |
| fireworks: null, | |
| fish: null, | |
| fist: null, | |
| flags: null, | |
| flushed: null, | |
| football: null, | |
| fork_and_knife: null, | |
| fountain: null, | |
| four_leaf_clover: null, | |
| fr: null, | |
| fries: null, | |
| frog: null, | |
| fuelpump: null, | |
| gb: null, | |
| gem: null, | |
| gemini: null, | |
| ghost: null, | |
| gift: null, | |
| gift_heart: null, | |
| girl: null, | |
| goberserk: null, | |
| godmode: null, | |
| golf: null, | |
| green_heart: null, | |
| grey_exclamation: null, | |
| grey_question: null, | |
| grin: null, | |
| guardsman: null, | |
| guitar: null, | |
| gun: null, | |
| haircut: null, | |
| hamburger: null, | |
| hammer: null, | |
| hamster: null, | |
| hand: null, | |
| handbag: null, | |
| hankey: null, | |
| hash: null, | |
| headphones: null, | |
| heart: null, | |
| heart_decoration: null, | |
| heart_eyes: null, | |
| heartbeat: null, | |
| heartpulse: null, | |
| hearts: null, | |
| hibiscus: null, | |
| high_heel: null, | |
| horse: null, | |
| hospital: null, | |
| hotel: null, | |
| hotsprings: null, | |
| house: null, | |
| hurtrealbad: null, | |
| icecream: null, | |
| id: null, | |
| ideograph_advantage: null, | |
| imp: null, | |
| information_desk_person: null, | |
| iphone: null, | |
| it: null, | |
| jack_o_lantern: null, | |
| japanese_castle: null, | |
| joy: null, | |
| jp: null, | |
| key: null, | |
| kimono: null, | |
| kiss: null, | |
| kissing_face: null, | |
| kissing_heart: null, | |
| koala: null, | |
| koko: null, | |
| kr: null, | |
| leaves: null, | |
| leo: null, | |
| libra: null, | |
| lips: null, | |
| lipstick: null, | |
| lock: null, | |
| loop: null, | |
| loudspeaker: null, | |
| love_hotel: null, | |
| mag: null, | |
| mahjong: null, | |
| mailbox: null, | |
| man: null, | |
| man_with_gua_pi_mao: null, | |
| man_with_turban: null, | |
| maple_leaf: null, | |
| mask: null, | |
| massage: null, | |
| mega: null, | |
| memo: null, | |
| mens: null, | |
| metal: null, | |
| metro: null, | |
| microphone: null, | |
| minidisc: null, | |
| mobile_phone_off: null, | |
| moneybag: null, | |
| monkey: null, | |
| monkey_face: null, | |
| moon: null, | |
| mortar_board: null, | |
| mount_fuji: null, | |
| mouse: null, | |
| movie_camera: null, | |
| muscle: null, | |
| musical_note: null, | |
| nail_care: null, | |
| necktie: null, | |
| "new": null, | |
| no_good: null, | |
| no_smoking: null, | |
| nose: null, | |
| notes: null, | |
| o: null, | |
| o2: null, | |
| ocean: null, | |
| octocat: null, | |
| octopus: null, | |
| oden: null, | |
| office: null, | |
| ok: null, | |
| ok_hand: null, | |
| ok_woman: null, | |
| older_man: null, | |
| older_woman: null, | |
| open_hands: null, | |
| ophiuchus: null, | |
| palm_tree: null, | |
| parking: null, | |
| part_alternation_mark: null, | |
| pencil: null, | |
| penguin: null, | |
| pensive: null, | |
| persevere: null, | |
| person_with_blond_hair: null, | |
| phone: null, | |
| pig: null, | |
| pill: null, | |
| pisces: null, | |
| plus1: null, | |
| point_down: null, | |
| point_left: null, | |
| point_right: null, | |
| point_up: null, | |
| point_up_2: null, | |
| police_car: null, | |
| poop: null, | |
| post_office: null, | |
| postbox: null, | |
| pray: null, | |
| princess: null, | |
| punch: null, | |
| purple_heart: null, | |
| question: null, | |
| rabbit: null, | |
| racehorse: null, | |
| radio: null, | |
| rage: null, | |
| rage1: null, | |
| rage2: null, | |
| rage3: null, | |
| rage4: null, | |
| rainbow: null, | |
| raised_hands: null, | |
| ramen: null, | |
| red_car: null, | |
| red_circle: null, | |
| registered: null, | |
| relaxed: null, | |
| relieved: null, | |
| restroom: null, | |
| rewind: null, | |
| ribbon: null, | |
| rice: null, | |
| rice_ball: null, | |
| rice_cracker: null, | |
| rice_scene: null, | |
| ring: null, | |
| rocket: null, | |
| roller_coaster: null, | |
| rose: null, | |
| ru: null, | |
| runner: null, | |
| sa: null, | |
| sagittarius: null, | |
| sailboat: null, | |
| sake: null, | |
| sandal: null, | |
| santa: null, | |
| satellite: null, | |
| satisfied: null, | |
| saxophone: null, | |
| school: null, | |
| school_satchel: null, | |
| scissors: null, | |
| scorpius: null, | |
| scream: null, | |
| seat: null, | |
| secret: null, | |
| shaved_ice: null, | |
| sheep: null, | |
| shell: null, | |
| ship: null, | |
| shipit: null, | |
| shirt: null, | |
| shit: null, | |
| shoe: null, | |
| signal_strength: null, | |
| six_pointed_star: null, | |
| ski: null, | |
| skull: null, | |
| sleepy: null, | |
| slot_machine: null, | |
| smile: null, | |
| smiley: null, | |
| smirk: null, | |
| smoking: null, | |
| snake: null, | |
| snowman: null, | |
| sob: null, | |
| soccer: null, | |
| space_invader: null, | |
| spades: null, | |
| spaghetti: null, | |
| sparkler: null, | |
| sparkles: null, | |
| speaker: null, | |
| speedboat: null, | |
| squirrel: null, | |
| star: null, | |
| star2: null, | |
| stars: null, | |
| station: null, | |
| statue_of_liberty: null, | |
| stew: null, | |
| strawberry: null, | |
| sunflower: null, | |
| sunny: null, | |
| sunrise: null, | |
| sunrise_over_mountains: null, | |
| surfer: null, | |
| sushi: null, | |
| suspect: null, | |
| sweat: null, | |
| sweat_drops: null, | |
| swimmer: null, | |
| syringe: null, | |
| tada: null, | |
| tangerine: null, | |
| taurus: null, | |
| taxi: null, | |
| tea: null, | |
| telephone: null, | |
| tennis: null, | |
| tent: null, | |
| thumbsdown: null, | |
| thumbsup: null, | |
| ticket: null, | |
| tiger: null, | |
| tm: null, | |
| toilet: null, | |
| tokyo_tower: null, | |
| tomato: null, | |
| tongue: null, | |
| top: null, | |
| tophat: null, | |
| traffic_light: null, | |
| train: null, | |
| trident: null, | |
| trollface: null, | |
| trophy: null, | |
| tropical_fish: null, | |
| truck: null, | |
| trumpet: null, | |
| tshirt: null, | |
| tulip: null, | |
| tv: null, | |
| u5272: null, | |
| u55b6: null, | |
| u6307: null, | |
| u6708: null, | |
| u6709: null, | |
| u6e80: null, | |
| u7121: null, | |
| u7533: null, | |
| u7a7a: null, | |
| umbrella: null, | |
| unamused: null, | |
| underage: null, | |
| unlock: null, | |
| up: null, | |
| us: null, | |
| v: null, | |
| vhs: null, | |
| vibration_mode: null, | |
| virgo: null, | |
| vs: null, | |
| walking: null, | |
| warning: null, | |
| watermelon: null, | |
| wave: null, | |
| wc: null, | |
| wedding: null, | |
| whale: null, | |
| wheelchair: null, | |
| white_square: null, | |
| wind_chime: null, | |
| wink: null, | |
| wink2: null, | |
| wolf: null, | |
| woman: null, | |
| womans_hat: null, | |
| womens: null, | |
| x: null, | |
| yellow_heart: null, | |
| zap: null, | |
| zzz: null | |
| } | |
| }; | |
| function LOG(b) { | |
| if (window.DEBUG_MODE) { | |
| try { | |
| console.log(b); | |
| } catch (a) {} | |
| } | |
| } | |
| function ASSERT(a, c) { | |
| if (!a) { | |
| c = "Failed assert: " + c; | |
| if (DEBUG_MODE) { | |
| alert(c); | |
| } else { | |
| var b = { | |
| api: "room.log", | |
| error: c, | |
| clientid: turntable.clientId | |
| }; | |
| if (turntable.user.id) { | |
| b.userid = turntable.user.id; | |
| b.userauth = turntable.user.auth; | |
| } | |
| turntable.socket.send(JSON.stringify(b)); | |
| } | |
| throw c; | |
| } | |
| } | |
| turntableCommon = { | |
| logout: function () { | |
| $.cookie("turntableUserId", null, { | |
| path: "/", | |
| expires: 0 | |
| }); | |
| $.cookie("turntableUserAuth", null, { | |
| path: "/", | |
| expires: 0 | |
| }); | |
| $.cookie("turntableUserNamed", null, { | |
| path: "/", | |
| expires: 0 | |
| }); | |
| var a = function () { | |
| window.location.replace("/"); | |
| }; | |
| if (FB.getAuthResponse()) { | |
| FB.logout(a); | |
| } else { | |
| a(); | |
| } | |
| } | |
| }; | |
| var thost = window.location.host; | |
| DEBUG_MODE = (thost != "turntable.fm" || $.sha1(location.hash) == "47381f2767629f64daa0d70c79d91baaeb702835"); | |
| DEMO_MODE = (location.pathname != "/lobby" && $.sha1(location.hash) == "1309dbac26cf64a7f1671c206230a3bf31229006"); | |
| var dmca = { | |
| showPreview: function (c) { | |
| var a = []; | |
| for (var b = 0; b < a.length; ++b) { | |
| if (c.metadata.labelid == a[b]) { | |
| return false; | |
| } | |
| } | |
| return true; | |
| } | |
| }; | |
| var httpStream = (function () { | |
| var a = null; | |
| var i = null; | |
| var k = null; | |
| var j = false; | |
| function h(l) { | |
| if (k) { | |
| k(l); | |
| } | |
| if (l == "initialized") { | |
| if (a) { | |
| return; | |
| } | |
| LOG("HTTPSimpleStream initialized"); | |
| a = $("#httpstream")[0]; | |
| a.setVolume(String(httpStream.volume)); | |
| if (i) { | |
| f(); | |
| } | |
| } else { | |
| if (l == "streamstart") { | |
| j = true; | |
| } else { | |
| if (l == "resync") { | |
| j = false; | |
| } | |
| } | |
| } | |
| } | |
| function d(l) { | |
| k = l; | |
| } | |
| function b(o, m, l, n) { | |
| i = { | |
| args: [o, m, l, Number(n)], | |
| time: util.now() | |
| }; | |
| if (a) { | |
| f(); | |
| } | |
| } | |
| function g() { | |
| i = null; | |
| j = false; | |
| if (a) { | |
| a.closeStream(""); | |
| } | |
| } | |
| function c(l) { | |
| httpStream.volume = l; | |
| if (a) { | |
| a.setVolume(String(l)); | |
| } | |
| } | |
| function e() { | |
| return j; | |
| } | |
| function f() { | |
| var m = i; | |
| var l = util.now() - m.time; | |
| m[3] += l; | |
| m.time += l; | |
| a.loadStream(m.args.join(",")); | |
| } | |
| return { | |
| volume: 100, | |
| setVolume: c, | |
| callback: h, | |
| setCallback: d, | |
| loadStream: b, | |
| closeStream: g, | |
| isPlaying: e | |
| }; | |
| })(); | |
| HTTPSimpleStreamCallback = httpStream.callback; | |
| WEB_SOCKET_SWF_LOCATION = "/static/web-socket-js/WebSocketMain.swf"; | |
| soundManager.url = "/static/soundmanager2/swf/"; | |
| soundManager.audioFormats.mp4.required = false; | |
| soundManager.consoleOnly = true; | |
| soundManager.debugMode = false; | |
| soundManager.debugFlash = false; | |
| soundManager.flashVersion = 9; | |
| soundManager.useFavIcon = false; | |
| soundManager.useFlashBlock = true; | |
| soundManager.useMovieStar = false; | |
| httpStream.url = "/static/swf/HTTPSimpleStream.swf"; | |
| swfobject.embedSWF(httpStream.url + "?" + util.now(), "httpstream", "1", "1", "10.1.0", null, {}, { | |
| bgcolor: "red" | |
| }); | |
| if ($.browser.msie) { | |
| alert("Turntable.fm doesn't work too well in Internet Explorer right now. Please use Firefox, Chrome or Safari web browsers."); | |
| } | |
| var turntable = { | |
| NLcgRGlUht: null, | |
| pendingCalls: [], | |
| deferreds: [], | |
| clientId: util.now() + "-" + Math.random(), | |
| clientTimeDelta: 0, | |
| eventListeners: { | |
| auth: [], | |
| avatarchange: [], | |
| message: [], | |
| messagefinish: [], | |
| reconnect: [], | |
| trackstart: [], | |
| trackfinish: [], | |
| unidle: [], | |
| userinfo: [] | |
| }, | |
| socket: null, | |
| socketVerbose: true, | |
| socketErrors: [], | |
| messageId: 0, | |
| currentSocketPort: 0, | |
| currentSocketServer: null, | |
| favorites: false, | |
| buddyList: false, | |
| syncServerClock: function () { | |
| turntable.updatePresence(); | |
| }, | |
| main: function () { | |
| turntable.loadTime = util.now(); | |
| var a = window.TURNTABLE_ROOMID || String(Math.random()); | |
| turntable.setSocketAddr(turntable.getHashedAddr(a)); | |
| LOG("Initializing Facebook..."); | |
| if (typeof (FB) != "undefined" && FB != null) { | |
| FB.init({ | |
| appId: "127146244018710", | |
| status: true, | |
| cookie: false, | |
| xfbml: true | |
| }); | |
| } | |
| turntable.user.init().done(function () { | |
| $(window).trigger("userInitDone"); | |
| turntable.initFavorites(); | |
| turntable.syncServerClock(); | |
| turntable.playlist.init(); | |
| $(window).bind("keydown", function (c) { | |
| if (c.keyCode == 8 && $.inArray(c.target.tagName.toLowerCase(), ["input", "textarea"]) == -1) { | |
| c.preventDefault(); | |
| } | |
| }); | |
| if (window.history && window.history.pushState) { | |
| $(window).bind("popstate", function (c) { | |
| if (util.now() - turntable.loadTime < 10 * 1000) { | |
| return; | |
| } | |
| turntable.reloadPage(c.state || c.originalEvent.state || { | |
| roomid: TURNTABLE_ROOMID | |
| }); | |
| }); | |
| } | |
| turntable.reloadPage({ | |
| roomid: TURNTABLE_ROOMID | |
| }); | |
| var b = util.getSetting("isUnavailable"); | |
| turntable.isUnavailable = (b == "true") ? true : false; | |
| turntable.CHWtDFA(); | |
| turntable.trackPresence(); | |
| turntable.initBuddyPresencePolling(); | |
| turntable.buddyList = new BuddyListPM(turntable.NLcgRGlUht); | |
| }); | |
| util.QIQOxBrdu(turntable); | |
| util.QIQOxBrdu(turntable.user); | |
| }, | |
| socketsByPort: {}, | |
| flushUnsentMessages: function () { | |
| for (var a = 0; a < turntable.unsentMessageCallbacks.length; a++) { | |
| turntable.unsentMessageCallbacks[a](); | |
| } | |
| turntable.unsentMessageCallbacks = []; | |
| }, | |
| setSocketAddr: function (a) { | |
| LOG("Setting socket addr to " + a); | |
| if (a[0] == turntable.currentSocketServer && a[1] == turntable.currentSocketPort) { | |
| return; | |
| } | |
| turntable.socketKeepAlive(false); | |
| turntable.currentSocketServer = a[0]; | |
| turntable.currentSocketPort = a[1]; | |
| var b = function () { | |
| turntable.removeEventListener("messagefinish", b); | |
| if (turntable.socket) { | |
| LOG("Disconnecting " + turntable.socket.host); | |
| turntable.socket.removeListener("reconnect", turntable.socketReconnected); | |
| turntable.socket.send("disconnect"); | |
| var c = turntable.socket; | |
| setTimeout(function () { | |
| c.disconnect(); | |
| }, 1000); | |
| } | |
| LOG("Switching to addr " + a); | |
| turntable.socket = new io.Socket(a[0], { | |
| port: a[1], | |
| transports: ["websocket", "flashsocket", "xhr-polling"], | |
| rememberTransport: false, | |
| connectTimeout: 5000 | |
| }); | |
| if (turntable.socket.transport.type == "websocket") { | |
| turntable.socket.transport.options.timeout = 25000; | |
| } | |
| turntable.connectionTimeout = setTimeout(function () { | |
| turntable.die("Could not connect to turntable. Please try again. If you still cannot connect, you might have a firewall blocking your connection. (" + a[1] + ")"); | |
| turntable.connectionTimeout = null; | |
| }, 30000); | |
| turntable.socket.connect(); | |
| turntable.socket.on("connect", turntable.socketConnected); | |
| turntable.socket.on("message", turntable.messageReceived); | |
| turntable.socket.on("reconnect", turntable.socketReconnected); | |
| }; | |
| if (turntable.socket && turntable.socket.connected && turntable.numRecentPendingCalls(15) > 0) { | |
| turntable.addEventListener("messagefinish", b); | |
| LOG("There are " + turntable.pendingCalls.length + " pending calls on old socket! Waiting..."); | |
| } else { | |
| LOG("No pending calls on old socket... setting up new socket"); | |
| b(); | |
| } | |
| }, | |
| socketConnected: function () { | |
| if (turntable.connectionTimeout) { | |
| clearTimeout(turntable.connectionTimeout); | |
| turntable.connectionTimeout = null; | |
| } | |
| turntable.resetPresenceThrottle(); | |
| turntable.syncServerClock(); | |
| turntable.flushUnsentMessages(); | |
| turntable.socket.removeListener("connect", turntable.socketConnected); | |
| }, | |
| socketKeepAlive: function (a) { | |
| if (turntable.socketKeepAliveTimer) { | |
| clearTimeout(turntable.socketKeepAliveTimer); | |
| turntable.socketKeepAliveTimer = null; | |
| } | |
| if (a) { | |
| turntable.socketKeepAliveTimer = setTimeout(turntable.syncServerClock, 20000); | |
| } | |
| }, | |
| socketLog: function (a) { | |
| while (turntable.socketErrors.length && turntable.socketErrors[0].time + 60000 < util.now()) { | |
| turntable.socketErrors.shift(); | |
| } | |
| turntable.socketErrors.push({ | |
| time: util.now(), | |
| msg: a | |
| }); | |
| }, | |
| socketDumpLog: function () { | |
| while (turntable.socketErrors.length && turntable.socketErrors[0].time + 60000 < util.now()) { | |
| turntable.socketErrors.shift(); | |
| } | |
| if (util.now() < turntable.socketDumpLogLast + 60000) { | |
| return; | |
| } | |
| turntable.socketDumpLogLast = util.now(); | |
| if (turntable.socketErrors.length) { | |
| var c = ""; | |
| for (var a = 0; a < turntable.socketErrors.length; a++) { | |
| var b = turntable.socketErrors[a]; | |
| c += Math.round((util.now() - b.time) / 100) / 10 + ":" + b.msg + ","; | |
| } | |
| } | |
| }, | |
| isIdle: false, | |
| isUnavailable: false, | |
| CHWtDFA: function () { | |
| $(window).bind("focus keydown mousemove", function () { | |
| turntable.jnVpWIOfjQcRDt = util.now(); | |
| }); | |
| setTimeout(turntable.checkIdle, 1000); | |
| turntable.jnVpWIOfjQcRDt = util.now(); | |
| }, | |
| idleTime: function () { | |
| return util.now() - turntable.jnVpWIOfjQcRDt; | |
| }, | |
| HBQLNPd: function () { | |
| return util.now() - turntable.jnVpWIOfjQcRDt; | |
| }, | |
| checkIdle: function () { | |
| var a = turntable.HBQLNPd(); | |
| var c = (a > 3 * 60 * 1000); | |
| if (!turntable.isIdle && c) { | |
| for (var f in turntable.idleTimers) { | |
| var b = turntable.idleTimers[f]; | |
| b.timeout = setTimeout(b.callback, Number(f) * 1000 - a); | |
| } | |
| } else { | |
| if (turntable.isIdle && !c) { | |
| for (var f in turntable.idleTimers) { | |
| clearTimeout(turntable.idleTimers[f].timeout); | |
| } | |
| turntable.dispatchEvent("unidle"); | |
| turntable.lastBuddyPresencePoll = 0; | |
| turntable.fetchBuddyPresence(); | |
| } | |
| } | |
| turntable.isIdle = c; | |
| try { | |
| turntable.buddyList.updateMyStatus(turntable.currentStatus()); | |
| } catch (d) { | |
| LOG(d); | |
| } | |
| setTimeout(turntable.checkIdle, 1000); | |
| }, | |
| currentStatus: function () { | |
| if (turntable.isUnavailable) { | |
| return "unavailable"; | |
| } else { | |
| return turntable.isIdle ? "away" : "available"; | |
| } | |
| }, | |
| presenceTimer: null, | |
| trackPresence: function () { | |
| if (turntable.presenceTimer) { | |
| return; | |
| } | |
| turntable.presenceTimer = setInterval(turntable.updatePresence, 10000); | |
| }, | |
| updatePresence: function (a) { | |
| turntable.sendPresence(turntable.currentStatus(), a); | |
| }, | |
| resetPresenceThrottle: function () { | |
| turntable.syncServerClockLast = 0; | |
| }, | |
| sendPresence: function (b, d, c) { | |
| if (util.now() < turntable.syncServerClockLast + 10000 && !c) { | |
| return; | |
| } | |
| turntable.syncServerClockLast = util.now(); | |
| var a = util.now(); | |
| turntable.ImGCdVsOO({ | |
| api: "presence.update", | |
| status: b | |
| }, function (f) { | |
| var e = util.now(); | |
| turntable.clientTimeDelta = (e + a) / 2000 - f.now; | |
| if (d && typeof (d) == "function") { | |
| d(f); | |
| } | |
| }); | |
| }, | |
| buddyPresenceTimer: null, | |
| initBuddyPresencePolling: function () { | |
| if (turntable.buddyPresenceTimer) { | |
| return; | |
| } | |
| turntable.buddyPresenceTimer = setInterval(turntable.fetchBuddyPresence, 60000); | |
| }, | |
| lastBuddyPresencePoll: false, | |
| fetchBuddyPresence: function () { | |
| var a = new Date().getTime(); | |
| if (turntable.isIdle && turntable.lastBuddyPresencePoll && (a - turntable.lastBuddyPresencePoll < (10 * 60 * 1000) + 200)) { | |
| return; | |
| } | |
| turntable.ImGCdVsOO({ | |
| api: "room.directory_graph" | |
| }, function (b) { | |
| turntable.lastBuddyPresencePoll = new Date().getTime(); | |
| try { | |
| turntable.buddyList.updateBuddies(b); | |
| } catch (c) { | |
| LOG(c); | |
| } | |
| }); | |
| }, | |
| pingTimer: null, | |
| numPings: 0, | |
| socketReconnected: function () { | |
| turntable.socketLog("rc"); | |
| LOG("socket reconnected?"); | |
| if (turntable.pingTimer) { | |
| return; | |
| } | |
| turntable.numPings = 0; | |
| turntable.pingTimer = setInterval(turntable.pingSocket, 5000); | |
| turntable.pingSocket(); | |
| }, | |
| pingSocket: function () { | |
| turntable.resetPresenceThrottle(); | |
| turntable.updatePresence(function (a) { | |
| if (a && a.success && turntable.pingTimer) { | |
| turntable.numPings = 0; | |
| clearInterval(turntable.pingTimer); | |
| turntable.pingTimer = null; | |
| turntable.dispatchEvent("reconnect"); | |
| } | |
| }); | |
| turntable.numPings += 1; | |
| if (turntable.numPings > 5) { | |
| clearInterval(turntable.pingTimer); | |
| turntable.pingTimer = null; | |
| } | |
| }, | |
| closeSocket: function () { | |
| turntable.socket.send('{"api":"room.deregister","userid":"' + turntable.user.id + '","userauth":"' + turntable.user.auth + '","roomid":"' + (turntable.NLcgRGlUht.roomId || "") + '"}'); | |
| }, | |
| addEventListener: function (b, c) { | |
| var a = turntable.eventListeners[b]; | |
| ASSERT(a, "Unknown event '" + b + "'"); | |
| if ($.inArray(c, a) == -1) { | |
| a.push(c); | |
| } | |
| }, | |
| removeEventListener: function (c, d) { | |
| var b = turntable.eventListeners[c]; | |
| ASSERT(b, "Unknown event " + c); | |
| var a = $.inArray(d, b); | |
| if (a != -1) { | |
| b.splice(a, 1); | |
| } | |
| }, | |
| dispatchEvent: function (c) { | |
| args = []; | |
| for (var a = 1; a < arguments.length; a++) { | |
| args.push(arguments[a]); | |
| } | |
| var b = turntable.eventListeners[c]; | |
| ASSERT(b, "Unknown event " + c); | |
| b = b.slice(); | |
| for (var a = 0; a < b.length; a++) { | |
| b[a].apply(turntable, args); | |
| } | |
| }, | |
| idleTimers: {}, | |
| addIdleListener: function (a, c) { | |
| var b = turntable.idleTimers[String(a)]; | |
| var d = a * 1000 - turntable.idleTime(); | |
| if (!b) { | |
| b = { | |
| timeout: null, | |
| listeners: [c], | |
| callback: function () { | |
| for (var e = 0; e < b.listeners.length; e++) { | |
| b.listeners[e](); | |
| } | |
| } | |
| }; | |
| turntable.idleTimers[String(a)] = b; | |
| if (turntable.isIdle) { | |
| b.timeout = setTimeout(b.callback, d); | |
| } | |
| } else { | |
| if ($.inArray(c, b.listeners) == -1) { | |
| b.listeners.push(c); | |
| if (d <= 0) { | |
| c(); | |
| } | |
| } | |
| } | |
| }, | |
| removeIdleListener: function (a, d) { | |
| var b = turntable.idleTimers[String(a)]; | |
| var c = (b ? $.inArray(d, b.listeners) : -1); | |
| if (c != -1) { | |
| b.listeners.splice(c, 1); | |
| } | |
| }, | |
| setPage: function (a, b) { | |
| var c = "/" + (a || b); | |
| if (window.history && window.history.pushState) { | |
| var d = { | |
| shortcut: a, | |
| roomid: b | |
| }; | |
| window.history.pushState(d, c, c); | |
| this.reloadPage(d); | |
| } else { | |
| window.location.href = c; | |
| } | |
| }, | |
| reloadPage: function (a) { | |
| if (turntable.NLcgRGlUht && turntable.NLcgRGlUht.cleanup) { | |
| turntable.NLcgRGlUht.cleanup(); | |
| } | |
| $("#turntable").empty(); | |
| LOG("Turntable page is empty"); | |
| if (a && a.shortcut != "lobby" && a.roomid) { | |
| turntable.NLcgRGlUht = new Room(a.roomid); | |
| } else { | |
| welcome.init(); | |
| turntable.NLcgRGlUht = welcome; | |
| } | |
| $("#turntable").append(turntable.NLcgRGlUht.view); | |
| if (turntable.NLcgRGlUht.onAddedToStage) { | |
| turntable.NLcgRGlUht.onAddedToStage(); | |
| } | |
| }, | |
| initFavorites: function () { | |
| turntable.ImGCdVsOO({ | |
| api: "room.get_favorites" | |
| }, function (c) { | |
| if (c.success) { | |
| turntable.favorites = {}; | |
| for (var b = 0, a = c.list.length; b < a; b++) { | |
| turntable.favorites[c.list[b]] = true; | |
| } | |
| if (turntable.NLcgRGlUht && "roomId" in turntable.NLcgRGlUht && !turntable.NLcgRGlUht.hasLoadedFavorites) { | |
| turntable.NLcgRGlUht.initFavorite(); | |
| } | |
| } | |
| }); | |
| }, | |
| hashMod: function (e, b) { | |
| var d = $.sha1(e); | |
| var c = 0; | |
| for (var a = 0; a < d.length; a++) { | |
| c += d.charCodeAt(a); | |
| } | |
| return c % b; | |
| }, | |
| getHashedAddr: function (a) { | |
| return CHATSERVER_ADDRS[turntable.hashMod(a, CHATSERVER_ADDRS.length)]; | |
| }, | |
| ImGCdVsOO: function (c, a) { | |
| if (c.api == "room.now") { | |
| return; | |
| } | |
| c.msgid = turntable.messageId; | |
| turntable.messageId += 1; | |
| c.clientid = turntable.clientId; | |
| if (turntable.user.id && !c.userid) { | |
| c.userid = turntable.user.id; | |
| c.userauth = turntable.user.auth; | |
| } | |
| var d = JSON.stringify(c); | |
| if (turntable.socketVerbose) { | |
| LOG(util.nowStr() + " Preparing message " + d); | |
| } | |
| var b = $.Deferred(); | |
| turntable.whenSocketConnected(function () { | |
| if (turntable.socketVerbose) { | |
| LOG(util.nowStr() + " Sending message " + c.msgid + " to " + turntable.socket.host); | |
| } | |
| if (turntable.socket.transport.type == "websocket") { | |
| turntable.socketLog(turntable.socket.transport.sockets[0].id + ":<" + c.msgid); | |
| } | |
| turntable.socket.send(d); | |
| turntable.socketKeepAlive(true); | |
| turntable.pendingCalls.push({ | |
| msgid: c.msgid, | |
| handler: a, | |
| deferred: b, | |
| time: util.now() | |
| }); | |
| }); | |
| return b.promise(); | |
| }, | |
| numRecentPendingCalls: function (a) { | |
| var c = util.now(); | |
| var b = 0; | |
| for (var d = 0; d < turntable.pendingCalls.length; d++) { | |
| if (c - turntable.pendingCalls[d].time < a * 1000) { | |
| b += 1; | |
| } | |
| } | |
| return b; | |
| }, | |
| unsentMessageCallbacks: [], | |
| whenSocketConnected: function (a) { | |
| if (turntable.socket.connected && turntable.socket.host == turntable.currentSocketServer && turntable.socket.options.port == turntable.currentSocketPort) { | |
| a(); | |
| } else { | |
| turntable.unsentMessageCallbacks.push(a); | |
| } | |
| }, | |
| messageReceived: function (d) { | |
| try { | |
| if (turntable.socketVerbose) { | |
| LOG(util.nowStr() + " Received: " + d); | |
| } | |
| if (d == "no_session") { | |
| return; | |
| } else { | |
| d = JSON.parse(d); | |
| } | |
| if (d.command == "killdashnine") { | |
| turntable.socket.disconnect(); | |
| turntable.socket = null; | |
| var b = d.msg || "This session has been disconnected because you signed on from another location. Refresh this page if you want to continue."; | |
| turntable.die(b); | |
| return; | |
| } | |
| turntable.dispatchEvent("message", d); | |
| if (turntable.socket.transport.type == "websocket") { | |
| turntable.socketLog(turntable.socket.transport.sockets[0].id + ":>" + (d.hasOwnProperty("msgid") ? d.msgid : (d.command || "?"))); | |
| } | |
| if (d.hasOwnProperty("msgid")) { | |
| ASSERT(d.msgid < turntable.messageId, "Future msg " + JSON.stringify(d)); | |
| var g = turntable.pendingCalls.length; | |
| var f = false; | |
| for (var e = 0; e < g; e++) { | |
| var j = turntable.pendingCalls[e]; | |
| if (j.msgid == d.msgid) { | |
| var h = j.handler; | |
| var k = j.deferred; | |
| if (h) { | |
| h(d); | |
| }(d.success ? k.resolve : k.reject)(d); | |
| var a = util.now(); | |
| if (a - turntable.loadTime > 60 * 1000 && a - j.time > 10 * 1000) { | |
| turntable.socketDumpLog(); | |
| } | |
| turntable.pendingCalls.splice(e, 1); | |
| f = true; | |
| break; | |
| } | |
| } | |
| if (!f) { | |
| LOG("Unexpected msg " + JSON.stringify(d)); | |
| } else { | |
| if (turntable.pendingCalls.length == 0) { | |
| turntable.dispatchEvent("messagefinish"); | |
| } | |
| } | |
| } | |
| } catch (c) { | |
| LOG("Exception in MessageReceived"); | |
| LOG(c); | |
| } | |
| }, | |
| logMessage: function (c) { | |
| if (turntable.pendingLogMessage) { | |
| turntable.pendingLogMessage = c; | |
| return; | |
| } | |
| var a = (turntable.lastLogPacket || 0) + 5000 - util.now(); | |
| if (a <= 0) { | |
| var b = navigator.userAgent.substr(navigator.userAgent.lastIndexOf(")") + 2); | |
| turntable.ImGCdVsOO({ | |
| api: "room.log", | |
| error: "v3 " + b + " " + c | |
| }); | |
| turntable.lastLogPacket = util.now(); | |
| return; | |
| } | |
| turntable.pendingLogMessage = c; | |
| setTimeout(function () { | |
| turntable.ImGCdVsOO({ | |
| api: "room.log", | |
| error: turntable.pendingLogMessage | |
| }); | |
| turntable.pendingLogMessage = null; | |
| turntable.lastLogPacket = util.now(); | |
| }, a); | |
| }, | |
| randomRoom: function () { | |
| turntable.ImGCdVsOO({ | |
| api: "room.random_room" | |
| }, function (a) { | |
| turntable.setPage(a.room.shortcut, a.room.roomid); | |
| }); | |
| }, | |
| showWelcome: function () { | |
| var a = $.cookie("turntableShowWelcome"); | |
| if (!a) { | |
| var b = util.buildTree(["div.modal.welcome-modal", | |
| {}, "Hi there and welcome to Turntable! Before you begin, here's how it works:", ["ul", | |
| {}, ["li", "Become a DJ to play songs for everyone in the room."], | |
| ["li", "Each DJ plays one song each turn."], | |
| ["li", 'Everyone can vote on the song. Too many "Lame" votes and the song is skipped.'], | |
| ["li", 'Vote "Awesome" during songs you like to reward the DJ with points.'] | |
| ], | |
| ["div.ok-button.centered-button", | |
| { | |
| event: { | |
| click: util.hideOverlay | |
| } | |
| }] | |
| ]); | |
| util.showOverlay($(b)); | |
| } | |
| $.cookie("turntableShowWelcome", true, { | |
| path: "/", | |
| expires: 365 | |
| }); | |
| }, | |
| die: function (a) { | |
| turntable.showAlert(a); | |
| $(".overlay .ok-button").hide(); | |
| }, | |
| showAlert: function (a, c) { | |
| var b = util.buildTree(["div.modal", | |
| {}, ["div", | |
| {}, | |
| a, ["br"], | |
| ["br"] | |
| ], | |
| ["div.ok-button.centered-button", | |
| { | |
| event: { | |
| click: util.hideOverlay | |
| } | |
| }] | |
| ]); | |
| if (c) { | |
| $(b).find(".ok-button").click(c); | |
| } | |
| util.showOverlay(b); | |
| }, | |
| serverNow: function () { | |
| return util.now() / 1000 - turntable.clientTimeDelta; | |
| }, | |
| seedPRNG: function (a) { | |
| return function () { | |
| var c = a; | |
| var b = 9001; | |
| return { | |
| random: function () { | |
| if (b + 4 > c.length) { | |
| c = $.sha1(c); | |
| b = 0; | |
| } | |
| var d = c.substr(b, 4); | |
| b += 4; | |
| return (parseInt(d, 16) + 1) / 65537; | |
| } | |
| }; | |
| }(); | |
| } | |
| }; | |
| var turntablePlayer = { | |
| initDeferred: $.Deferred(), | |
| volume: 3, | |
| ephemeralCache: {}, | |
| TklSijwTrHIBd: false, | |
| init: function () { | |
| turntablePlayer.initDeferred.resolve(); | |
| }, | |
| qJenkTJDWhRlS: function (a) { | |
| turntablePlayer.TklSijwTrHIBd = a; | |
| turntablePlayer.setVolume(turntablePlayer.volume); | |
| }, | |
| setVolume: function (b) { | |
| if (b != turntablePlayer.volume) { | |
| turntablePlayer.volume = b; | |
| if (turntablePlayer.previewSound && b) { | |
| turntablePlayer.previewSound.setVolume(turntablePlayer.realVolume(b)); | |
| } | |
| if (b > 0) { | |
| util.setSetting("volume", b); | |
| } | |
| } | |
| var a = turntablePlayer.realVolume(turntablePlayer.calculatedBarsVolume()); | |
| httpStream.setVolume(a); | |
| }, | |
| realVolume: function (a) { | |
| return (a > 0 ? 100 * Math.pow(2, a - 4) : 0); | |
| }, | |
| barsVolume: function (a) { | |
| return (a > 0 ? Math.max(0, Math.log(a / 100) / Math.LN2 + 4) : 0); | |
| }, | |
| calculatedBarsVolume: function () { | |
| if (turntablePlayer.previewSound || turntablePlayer.TklSijwTrHIBd) { | |
| return 0; | |
| } | |
| return turntablePlayer.volume; | |
| }, | |
| samplePlay: function (a, b) { | |
| if (turntablePlayer.previewTimer) { | |
| clearTimeout(turntablePlayer.previewTimer); | |
| clearInterval(turntablePlayer.previewProgressTimer); | |
| turntablePlayer.previewCallback("stop"); | |
| } | |
| turntablePlayer.previewTimer = setTimeout(turntablePlayer.sampleStop, 30000); | |
| turntablePlayer.previewProgressTimer = setInterval(turntablePlayer.sampleUpdateProgress, 100); | |
| turntablePlayer.initDeferred.done(function () { | |
| turntablePlayer.fade(httpStream, 0); | |
| if (turntablePlayer.previewSound) { | |
| turntablePlayer.fade(turntablePlayer.previewSound, 0).done(function (e) { | |
| e.destruct(); | |
| }); | |
| } | |
| var c = window.location.protocol + "//" + MEDIA_HOST + "/previewfile/?fileid=" + a; | |
| turntablePlayer.previewSound = soundManager.createSound({ | |
| id: "preview" + a, | |
| url: c | |
| }); | |
| turntablePlayer.previewSound.play(); | |
| var d = turntablePlayer.realVolume(turntablePlayer.volume || 3); | |
| turntablePlayer.previewSound.setVolume(d); | |
| }); | |
| turntablePlayer.previewCallback = b; | |
| }, | |
| sampleUpdateProgress: function () { | |
| try { | |
| var a = (Number(turntablePlayer.previewSound.position) / 27000 * 100) + "%"; | |
| turntablePlayer.previewCallback("progress", a); | |
| } catch (b) {} | |
| }, | |
| sampleStop: function () { | |
| if (turntablePlayer.previewTimer) { | |
| clearTimeout(turntablePlayer.previewTimer); | |
| clearInterval(turntablePlayer.previewProgressTimer); | |
| turntablePlayer.previewTimer = null; | |
| turntablePlayer.previewProgressTimer = null; | |
| if (turntablePlayer.previewSound) { | |
| turntablePlayer.fade(turntablePlayer.previewSound, 0).done(function (a) { | |
| a.destruct(); | |
| }); | |
| turntablePlayer.previewSound = null; | |
| } | |
| turntablePlayer.fade(httpStream, turntablePlayer.calculatedBarsVolume()); | |
| } | |
| if (turntablePlayer.previewCallback) { | |
| turntablePlayer.previewCallback("stop"); | |
| turntablePlayer.previewCallback = null; | |
| } | |
| }, | |
| fade: function (g, a, f) { | |
| var b = $.Deferred(); | |
| if (!f || typeof f != "number") { | |
| f = 1.5; | |
| } | |
| var e = turntablePlayer.barsVolume(g.volume); | |
| var d = a - e; | |
| var c = util.now(); | |
| var h = setInterval(function () { | |
| var i = (util.now() - c) / (1000 * f); | |
| if (i < 1) { | |
| g.setVolume(turntablePlayer.realVolume(e + i * d)); | |
| } else { | |
| g.setVolume(turntablePlayer.realVolume(a)); | |
| clearInterval(h); | |
| b.resolve(g); | |
| } | |
| }, 100); | |
| return b.promise(); | |
| }, | |
| playEphemeral: function (b, a) { | |
| turntablePlayer.initDeferred.done(function () { | |
| turntablePlayer.loadEphemeralUrl(b, a); | |
| }); | |
| }, | |
| loadEphemeralUrl: function (b, a) { | |
| var d = null; | |
| if (a) { | |
| d = turntablePlayer.ephemeralCache[b]; | |
| } | |
| if (d) { | |
| if (d.playState) { | |
| d.setPosition(0); | |
| return; | |
| } | |
| } else { | |
| var c = { | |
| id: "ephemeral" + util.now(), | |
| url: b | |
| }; | |
| if (!a) { | |
| c.onfinish = function () { | |
| this.destruct(); | |
| }; | |
| } | |
| d = soundManager.createSound(c); | |
| if (a) { | |
| turntablePlayer.ephemeralCache[b] = d; | |
| } | |
| } | |
| d.setVolume(turntablePlayer.realVolume(turntablePlayer.volume)); | |
| d.play(); | |
| } | |
| }; | |
| $(document).ready(turntable.main); | |
| soundManager.onready(turntablePlayer.init); | |
| $(window).bind("beforeunload", turntable.closeSocket); | |
| turntable.sticker = new function () { | |
| var a = { | |
| ZOOM_VIEW_RADIUS: 80, | |
| ZOOM_RATIO: 0.5, | |
| DJ_RATIO: 0.1434, | |
| CORNER_DRAG_RADIUS: 20, | |
| STICKER_PREFIX: "http://static.turntable.fm/roommanager_assets/stickers/", | |
| IMAGE_PREFIX: "http://static.turntable.fm/roommanager_assets/props/", | |
| LAPTOP_WIDTH: 564, | |
| LAPTOP_HEIGHT: 381, | |
| SCREEN_WIDTH: 502, | |
| SCREEN_HEIGHT: 325, | |
| SCREEN_CORNER_RADIUS: 23, | |
| SCREEN_OFFSET_X: 34, | |
| SCREEN_OFFSET_Y: 0, | |
| MAX_PLACEMENTS: 20, | |
| $zoomView: null, | |
| context: null, | |
| tempCanvas: null, | |
| tempContext: null, | |
| hoverUserid: null, | |
| updateZoomCanvas: null, | |
| $boundingBox: null, | |
| stickerMap: {}, | |
| stickersLoaded: false, | |
| stickersLoad: null, | |
| stickerPlacements: {}, | |
| images: {}, | |
| imagesLoaded: false, | |
| imagesLoad: null, | |
| numPlacements: 0, | |
| }; | |
| a.init = function () { | |
| turntable.addEventListener("message", a.messageHandler); | |
| $(document).on("add_sticker_placements", a.addStickerPlacements); | |
| $(document).on("draw_dj_laptop", a.drawDjStickerPlacements); | |
| a.cacheImages(); | |
| a.cacheStickers(); | |
| a.initZoomView(); | |
| $("#turntable").on("mouseenter", ".laptopCanvas", a.djLaptopEnter).on("mousemove", ".laptopCanvas", a.djLaptopHover).on("mouseleave", ".laptopCanvas", a.djLaptopLeave); | |
| }; | |
| a.initZoomView = function () { | |
| var e = util.buildTree(a.layouts.zoomView); | |
| $("#maindiv").append(e); | |
| a.$zoomView = $(e); | |
| var c = $("#zoomCanvas")[0]; | |
| var b = a.ZOOM_VIEW_RADIUS; | |
| c.width = b * 2; | |
| c.height = b * 2; | |
| var d = c.getContext("2d"); | |
| a.context = d; | |
| d.beginPath(); | |
| d.arc(b, b, b, 0, Math.PI * 2, false); | |
| d.clip(); | |
| a.tempCanvas = util.buildTree(["canvas", | |
| { | |
| width: a.LAPTOP_WIDTH + 2 * a.ZOOM_VIEW_RADIUS, | |
| height: a.LAPTOP_HEIGHT + 2 * a.ZOOM_VIEW_RADIUS, | |
| }]); | |
| a.tempContext = a.tempCanvas.getContext("2d"); | |
| }; | |
| a.cacheImages = function () { | |
| var l = []; | |
| var f; | |
| var g = ["mac", "pc", "linux", "chrome"]; | |
| var e = ["screen", "mask", "laptop"]; | |
| var m = g.length; | |
| var d = e.length; | |
| for (var c = 0; c < d; c++) { | |
| var h = e[c]; | |
| a.images[h] = {}; | |
| if (h == "mask") { | |
| f = util.createImageWithLoader(a.IMAGE_PREFIX + "mask_mac_full.png"); | |
| a.images.mask.mac = f[0]; | |
| l.push(f[1]); | |
| f = util.createImageWithLoader(a.IMAGE_PREFIX + "mask_pc_full.png"); | |
| a.images.mask.pc = f[0]; | |
| l.push(f[1]); | |
| continue; | |
| } | |
| for (var b = 0; b < m; b++) { | |
| var k = g[b]; | |
| f = util.createImageWithLoader(a.IMAGE_PREFIX + h + "_" + k + "_full.png"); | |
| a.images[h][k] = f[0]; | |
| l.push(f[1]); | |
| } | |
| } | |
| f = util.createImageWithLoader(a.IMAGE_PREFIX + "wallpaper_full.png"); | |
| a.images.wallpaper = f[0]; | |
| l.push(f[1]); | |
| a.imagesLoaded = false; | |
| a.imagesLoad = $.when.apply(this, l); | |
| a.imagesLoad.done(function () { | |
| a.imagesLoaded = true; | |
| }); | |
| }; | |
| a.cacheStickers = function (b) { | |
| turntable.ImGCdVsOO({ | |
| api: "sticker.get" | |
| }, function (e) { | |
| var d; | |
| var c = []; | |
| $.each(e.stickers, function () { | |
| if (!(this["_id"] in a.stickerMap)) { | |
| a.stickerMap[this["_id"]] = this; | |
| d = util.createImageWithLoader(a.STICKER_PREFIX + this["path"] + ".png"); | |
| a.stickerMap[this["_id"]].image = d[0]; | |
| c.push(d[1]); | |
| a.stickerMap[this["_id"]].smallImage = util.buildTree(["img", | |
| { | |
| src: (a.STICKER_PREFIX + this["path"] + "_small.png") | |
| }]); | |
| } | |
| }); | |
| a.stickersLoaded = false; | |
| a.stickersLoad = $.when.apply(this, c); | |
| a.stickersLoad.done(function () { | |
| a.stickersLoaded = true; | |
| if (b != undefined) { | |
| b(e); | |
| } | |
| }); | |
| }); | |
| }; | |
| a.messageHandler = function (b) { | |
| if (b.hasOwnProperty("msgid") || b.command == undefined || !(b.command in a.messageHandlers)) { | |
| return; | |
| } | |
| a.messageHandlers[b.command](b); | |
| }; | |
| a.messageHandlers = { | |
| add_dj: function (c) { | |
| var b = c.user[0].userid; | |
| a.stickerPlacements[b] = c.placements; | |
| }, | |
| rem_dj: function (c) { | |
| var b = c.user[0].userid; | |
| if (b == a.hoverUserid) { | |
| a.djLaptopLeave(); | |
| } | |
| }, | |
| update_sticker_placements: function (c) { | |
| var b = c.userid; | |
| a.stickerPlacements[b] = c.placements; | |
| a.updateDjStickerPlacements(b); | |
| }, | |
| }; | |
| a.addStickerPlacements = function (b, c) { | |
| $.each(c, function (e, d) { | |
| a.stickerPlacements[e] = d; | |
| }); | |
| }; | |
| a.drawDjStickerPlacements = function (e, b) { | |
| if (turntable.NLcgRGlUht.users[b].laptop == "iphone") { | |
| return; | |
| } | |
| if (!a.stickersLoaded) { | |
| a.stickersLoad.done(function () { | |
| a.drawDjStickerPlacements(e, b); | |
| }); | |
| return; | |
| } | |
| var f = $(".avatar_laptop[data-userid=" + b + "]"); | |
| var d = $("<canvas>").attr({ | |
| width: 72, | |
| height: 46 | |
| }).addClass("laptopCanvas").data("userid", b).appendTo(f); | |
| if (turntable.NLcgRGlUht.users[b].laptop == "mac") { | |
| d.css("left", "7px"); | |
| } else { | |
| d.css("left", "9px"); | |
| } | |
| var c = d[0].getContext("2d"); | |
| a.drawStickerPlacementsCanvas(b, c, a.DJ_RATIO); | |
| }; | |
| a.updateDjStickerPlacements = function (b) { | |
| if (turntable.NLcgRGlUht.users[b].laptop == "iphone") { | |
| return; | |
| } | |
| var e = $(".avatar_laptop[data-userid=" + b + "]"); | |
| if (e.length != 1) { | |
| return; | |
| } | |
| var d = e.find("canvas"); | |
| if (d.length != 1) { | |
| LOG("Canvas for DJ's laptop not found: " + b); | |
| } | |
| var c = d[0].getContext("2d"); | |
| c.clearRect(0, 0, a.SCREEN_WIDTH, a.SCREEN_HEIGHT); | |
| a.drawStickerPlacementsCanvas(b, c, a.DJ_RATIO); | |
| }; | |
| a.drawStickerCSS = function (d) { | |
| if (!(d in this.stickerMap)) { | |
| return null; | |
| } | |
| var b = this.stickerMap[d]; | |
| var c = util.buildTree(this.layouts.sticker); | |
| c.style.background = "url(" + b.image.src + ")"; | |
| c.style.height = b.image.height + "px"; | |
| c.style.width = b.image.width + "px"; | |
| return c; | |
| }; | |
| a.drawStickerPlacementCSS = function (d, b) { | |
| var c = a.drawStickerCSS(b.sticker_id); | |
| if (!c) { | |
| return false; | |
| } | |
| var e = "rotate(" + b.angle + "deg)"; | |
| $(c).css("top", b.top + "px").css("left", b.left + "px"); | |
| cssSandpaper.setTransform(c, e); | |
| $.data(c, b); | |
| d.append(c); | |
| a.numPlacements++; | |
| a.updateSlotCount(); | |
| }; | |
| a.drawStickerPlacementsCanvas = function (m, b, f, j, p) { | |
| b.save(); | |
| if (f) { | |
| b.scale(f, f); | |
| } | |
| if (j) { | |
| b.translate(j.x, j.y); | |
| } | |
| b.beginPath(); | |
| b.moveTo(a.SCREEN_CORNER_RADIUS, 0); | |
| b.arcTo(a.SCREEN_WIDTH, 0, a.SCREEN_WIDTH, a.SCREEN_HEIGHT, a.SCREEN_CORNER_RADIUS); | |
| b.arcTo(a.SCREEN_WIDTH, a.SCREEN_HEIGHT, 0, a.SCREEN_HEIGHT, a.SCREEN_CORNER_RADIUS); | |
| b.arcTo(0, a.SCREEN_HEIGHT, 0, 0, a.SCREEN_CORNER_RADIUS); | |
| b.arcTo(0, 0, a.SCREEN_WIDTH, 0, a.SCREEN_CORNER_RADIUS); | |
| b.clip(); | |
| var o = a.stickerPlacements[m]; | |
| var q = o.length; | |
| for (var l = 0; l < q; l++) { | |
| var h = o[l]; | |
| if (!a.stickerMap.hasOwnProperty(h.sticker_id)) { | |
| if (!p) { | |
| b.restore(); | |
| a.cacheStickers(function () { | |
| a.drawStickerPlacementsCanvas(m, b, f, j, true); | |
| }); | |
| return; | |
| } else { | |
| continue; | |
| } | |
| } | |
| var e = a.stickerMap[h.sticker_id]; | |
| var k = e.image.width / 2; | |
| var n = e.image.height / 2; | |
| var g = h.left + k; | |
| var d = h.top + n; | |
| b.save(); | |
| b.translate(g, d); | |
| b.rotate(h.angle * Math.PI / 180); | |
| var c = e.image; | |
| if (f < 0.2) { | |
| c = e.smallImage; | |
| } | |
| b.drawImage(c, k * -1, n * -1, e.image.width, e.image.height); | |
| b.restore(); | |
| } | |
| b.restore(); | |
| }; | |
| a.drawLaptopCanvas = function (b, d, e, c) { | |
| if (!c) { | |
| c = turntable.NLcgRGlUht.users[b].laptop; | |
| } | |
| if (c == "iphone") { | |
| return; | |
| } | |
| d.save(); | |
| d.scale(e, e); | |
| d.drawImage(a.images.laptop[c], 0, 0); | |
| d.restore(); | |
| offset = { | |
| x: a.SCREEN_OFFSET_X, | |
| y: a.SCREEN_OFFSET_Y | |
| }; | |
| a.drawStickerPlacementsCanvas(b, d, e, offset); | |
| }; | |
| a.djLaptopEnter = function (c) { | |
| var d = $(this); | |
| var b = d.data("userid"); | |
| a.replaceUpdateZoomCanvas(d, b); | |
| a.djLaptopHover(c); | |
| a.$zoomView.show(); | |
| }; | |
| a.djLaptopHover = function (b) { | |
| a.$zoomView.css({ | |
| top: b.pageY + 10, | |
| left: b.pageX - a.ZOOM_VIEW_RADIUS, | |
| }); | |
| a.updateZoomCanvas(b); | |
| }; | |
| a.djLaptopLeave = function (b) { | |
| a.$zoomView.hide(); | |
| }; | |
| a.replaceUpdateZoomCanvas = function (i, g) { | |
| var h = i.offset(); | |
| var f = turntable.NLcgRGlUht.users[g].laptop; | |
| var j = a.images.laptop[f]; | |
| var c = this.context; | |
| var d = a.SCREEN_HEIGHT * a.ZOOM_RATIO - a.ZOOM_VIEW_RADIUS + 22; | |
| var e = a.ZOOM_VIEW_RADIUS - 8; | |
| var b = a.tempContext; | |
| b.drawImage(a.images.wallpaper, 0, 0); | |
| b.save(); | |
| b.translate(a.ZOOM_VIEW_RADIUS, a.ZOOM_VIEW_RADIUS); | |
| a.drawLaptopCanvas(g, b, a.ZOOM_RATIO); | |
| b.restore(); | |
| a.updateZoomCanvas = function (m) { | |
| var p = (m.pageX - h.left) / i.width(); | |
| var l = (m.pageY - h.top) / i.height(); | |
| var o = a.SCREEN_WIDTH * a.ZOOM_RATIO * p; | |
| var n = Math.max(Math.min(a.SCREEN_HEIGHT * a.ZOOM_RATIO * l, d), e); | |
| var k = -o - a.SCREEN_OFFSET_X * a.ZOOM_RATIO; | |
| var q = -n - a.SCREEN_OFFSET_Y * a.ZOOM_RATIO; | |
| c.drawImage(a.tempCanvas, k, q); | |
| }; | |
| }; | |
| a.showEditor = function () { | |
| a.cacheStickers(function (d) { | |
| var f = util.buildTree(a.layouts.editView); | |
| var e = $(f).find("#picker"); | |
| a.initStickerPicker(e, d); | |
| a.$laptopView = $(f).find("#laptopView"); | |
| $(f).find("#remainingNumber").text(a.MAX_PLACEMENTS); | |
| a.numPlacements = 0; | |
| turntable.ImGCdVsOO({ | |
| api: "sticker.get_placements" | |
| }, function (g) { | |
| $.each(g.placements, function () { | |
| a.drawStickerPlacementCSS(a.$laptopView, this); | |
| }); | |
| }); | |
| util.showOverlay(f); | |
| var c = turntable.user.laptop; | |
| if (c != "mac") { | |
| c = "pc"; | |
| } | |
| $("#laptopMask").css("background", "url(" + a.images.mask[c].src + ") bottom left"); | |
| $("#laptopScreen").css("background", "url(" + a.images.screen[c].src + ")"); | |
| var b = util.buildTree(a.layouts.boundingBox); | |
| a.$boundingBox = $(b); | |
| $("#laptopScreen").append(b); | |
| a.addLaptopViewListeners(); | |
| a.$boundingBox.on("mouseup", "#boundingBoxX", a.removeCurrentSticker); | |
| $("#stickerSaveButton").click(a.save); | |
| a.$laptopView.on("dragover", a.stickerDragOver).on("dragenter", a.stickerDragOver).on("drop", a.stickerDrop); | |
| }); | |
| }; | |
| a.closeEditor = function () { | |
| util.hideOverlay(); | |
| }; | |
| a.initStickerPicker = function (d, c) { | |
| var b = c.stickers.length; | |
| var e = d.find("#stickerList"); | |
| e.css("width", b * 130 + "px"); | |
| a.numPages = Math.ceil(b / 4); | |
| a.currentPage = 0; | |
| $.each(a.stickerMap, function (g, h) { | |
| var i = a.drawStickerCSS(g); | |
| $.data(i, h); | |
| var j = Math.min(100 / h.image.width, 100 / h.image.height, 1); | |
| $(i).attr("draggable", "true").css({ | |
| "margin-top": -h.image.height / 2 + "px", | |
| "margin-left": -h.image.width / 2 + "px" | |
| }); | |
| cssSandpaper.setTransform(i, "scale(" + j + ")"); | |
| var f = util.buildTree(a.layouts.stickerContainer); | |
| $(f).prepend(i).find(".stickerName").text(h.name); | |
| e.append(f); | |
| }); | |
| d.find("#stickerListScrollLeft").addClass("inactive").click(a.stickerListScrollLeft); | |
| $rightButton = d.find("#stickerListScrollRight"); | |
| $rightButton.click(a.stickerListScrollRight); | |
| if (a.numPages > 1) { | |
| $rightButton.addClass("active"); | |
| } else { | |
| $rightButton.addClass("inactive"); | |
| } | |
| e.on("dragstart", ".sticker", a.stickerDragStart); | |
| }; | |
| a.stickerListScrollLeft = function () { | |
| if (a.currentPage > 0) { | |
| if (a.currentPage == a.numPages - 1) { | |
| $("#stickerListScrollRight").removeClass("inactive").addClass("active"); | |
| } | |
| a.currentPage--; | |
| $("#stickerList").animate({ | |
| left: "+=520" | |
| }, 500); | |
| if (a.currentPage == 0) { | |
| $("#stickerListScrollLeft").removeClass("active").addClass("inactive"); | |
| } | |
| } | |
| }; | |
| a.stickerListScrollRight = function () { | |
| if (a.currentPage < a.numPages - 1) { | |
| if (a.currentPage == 0) { | |
| $("#stickerListScrollLeft").removeClass("inactive").addClass("active"); | |
| } | |
| a.currentPage++; | |
| $("#stickerList").animate({ | |
| left: "-=520" | |
| }, 500); | |
| if (a.currentPage == a.numPages - 1) { | |
| $("#stickerListScrollRight").removeClass("active").addClass("inactive"); | |
| } | |
| } | |
| }; | |
| a.save = function () { | |
| var b = $.map($("#laptopView").find(".sticker"), function (c) { | |
| return $.data(c); | |
| }); | |
| turntable.ImGCdVsOO({ | |
| api: "sticker.place", | |
| placements: b, | |
| is_dj: turntable.NLcgRGlUht.isDj(), | |
| roomid: turntable.NLcgRGlUht.roomId, | |
| }, function (c) { | |
| if (c.success) { | |
| util.hideOverlay(); | |
| } else { | |
| alert("You've passed the sticker limit. Please remove some and try saving again"); | |
| } | |
| }); | |
| }; | |
| a.removeCurrentSticker = function () { | |
| $(a.currentSticker).remove(); | |
| a.numPlacements--; | |
| a.updateSlotCount(); | |
| }; | |
| a.updateSlotCount = function () { | |
| var b = a.MAX_PLACEMENTS - a.numPlacements; | |
| $("#remainingNumber").text(b); | |
| if (b == 0) { | |
| $("#picker .sticker").addClass("inactive").removeAttr("draggable"); | |
| } else { | |
| if (b == 1) { | |
| $("#picker .sticker").removeClass("inactive").attr("draggable", "true"); | |
| } | |
| } | |
| }; | |
| a.getOffsetFromTarget = function (c, b) { | |
| var d; | |
| if (b) { | |
| d = b.offset(); | |
| } else { | |
| d = $(c.target).offset(); | |
| } | |
| return { | |
| x: c.originalEvent.pageX - d.left, | |
| y: c.originalEvent.pageY - d.top | |
| }; | |
| }; | |
| a.stickerDragStart = function (b) { | |
| a.$dragObject = $(this); | |
| b.originalEvent.dataTransfer.effectAllowed = "copyMove"; | |
| var d = a.getOffsetFromTarget(b); | |
| var e = $.data(this, "_id"); | |
| var c = ['{"sticker_id": "', e, '"', ', "offsetX": ', d.x, ', "offsetY": ', d.y, "}"].join(""); | |
| b.originalEvent.dataTransfer.setDragImage(a.stickerMap[e].image, d.x, d.y); | |
| b.originalEvent.dataTransfer.setData("text", c); | |
| }; | |
| a.stickerDragOver = function (b) { | |
| b.preventDefault(); | |
| b.originalEvent.dataTransfer.dropEffect = "copy"; | |
| return false; | |
| }; | |
| a.stickerDrop = function (c) { | |
| c.preventDefault(); | |
| c.stopPropagation(); | |
| if (a.numPlacements >= a.MAX_PLACEMENTS) { | |
| return false; | |
| } | |
| $dropZone = $(this); | |
| var d = c.originalEvent.dataTransfer.getData("text"); | |
| d = $.parseJSON(d); | |
| var g = a.getOffsetFromTarget(c, $dropZone); | |
| var f = g.y - d.offsetY; | |
| var e = g.x - d.offsetX; | |
| var b = { | |
| sticker_id: d.sticker_id, | |
| top: f, | |
| left: e, | |
| angle: 0, | |
| }; | |
| a.drawStickerPlacementCSS(a.$laptopView, b); | |
| return false; | |
| }; | |
| a.getCorners = function (g) { | |
| var d = g.style.left; | |
| d = parseInt(d.substring(0, d.length - 2)); | |
| var o = g.style.top; | |
| o = parseInt(o.substring(0, o.length - 2)); | |
| var c = g.style.width; | |
| c = parseInt(c.substring(0, c.length - 2)); | |
| var q = g.style.height; | |
| q = parseInt(q.substring(0, q.length - 2)); | |
| var l = c / 2; | |
| var n = q / 2; | |
| var m = [ | |
| [l * -1, n * -1], | |
| [l, n * -1], | |
| [l, n], | |
| [l * -1, n] | |
| ]; | |
| var b = []; | |
| var f = m.length; | |
| var e = $.data(g, "angle") * Math.PI / 180; | |
| for (var k = 0; k < f; k++) { | |
| var p = m[k]; | |
| b[k] = [p[0] * Math.cos(e) - p[1] * Math.sin(e), p[0] * Math.sin(e) + p[1] * Math.cos(e)]; | |
| } | |
| var j = d + l; | |
| var h = o + n; | |
| for (var k = 0; k < f; k++) { | |
| var p = b[k]; | |
| b[k] = [p[0] + j, p[1] + h]; | |
| } | |
| return b; | |
| }; | |
| a.addLaptopViewListeners = function () { | |
| a.$laptopView.on("mouseenter", ".sticker", a.showBoundingBox); | |
| a.$boundingBox.on("mouseleave", a.hideBoundingBox).on("mouseenter", a.cancelHideBoundingBox).on("mousedown", a.boundingBoxDrag); | |
| }; | |
| a.removeLaptopViewListeners = function () { | |
| a.$laptopView.off("mouseenter", ".sticker", a.showBoundingBox); | |
| a.$boundingBox.off("mouseleave", a.hideBoundingBox).off("mouseenter", a.cancelHideBoundingBox).off("mousedown", a.boundingBoxDrag); | |
| }; | |
| a.showBoundingBox = function (c) { | |
| a.currentSticker = this; | |
| var f = a.getCorners(this); | |
| var k = function (l) { | |
| return l[0]; | |
| }; | |
| var i = function (l) { | |
| return l[1]; | |
| }; | |
| var e = Math.min.apply(Math, f.map(k)); | |
| var h = Math.max.apply(Math, f.map(k)); | |
| var g = Math.min.apply(Math, f.map(i)); | |
| var b = Math.max.apply(Math, f.map(i)); | |
| var d = h - e; | |
| var j = b - g; | |
| a.$boundingBox.find(".top.left").css("cursor", ("url(" + a.IMAGE_PREFIX + "rotate_top_left.png) 12 12, auto")); | |
| a.$boundingBox.find(".bottom.left").css("cursor", ("url(" + a.IMAGE_PREFIX + "rotate_bottom_left.png) 12 12, auto")); | |
| a.$boundingBox.find(".bottom.right").css("cursor", ("url(" + a.IMAGE_PREFIX + "rotate_bottom_right.png) 12 12, auto")); | |
| a.$boundingBox.hide().css({ | |
| left: e, | |
| top: g, | |
| width: d, | |
| height: j, | |
| }); | |
| cssSandpaper.setTransform(a.$boundingBox[0], ""); | |
| a.$boundingBox.show(); | |
| $("#boundingBoxX").hide().show(); | |
| }; | |
| a.hideBoundingBox = function (b) { | |
| a.hideTimer = window.setTimeout(function () { | |
| a.$boundingBox.hide(); | |
| }, 1000); | |
| }; | |
| a.cancelHideBoundingBox = function (b) { | |
| window.clearTimeout(a.hideTimer); | |
| }; | |
| a.boundingBoxDrag = function (C) { | |
| C.preventDefault(); | |
| C.stopPropagation(); | |
| a.removeLaptopViewListeners(); | |
| var m = this; | |
| var E = $(this); | |
| var q = a.currentSticker; | |
| var G = $(q); | |
| var A = C.pageX; | |
| var y = C.pageY; | |
| var j = a.$laptopView.offset(); | |
| var v = q.style.left; | |
| v = parseInt(v.substring(0, v.length - 2)); | |
| var w = q.style.top; | |
| w = parseInt(w.substring(0, w.length - 2)); | |
| var e = m.style.left; | |
| e = parseInt(e.substring(0, e.length - 2)); | |
| var r = m.style.top; | |
| r = parseInt(r.substring(0, r.length - 2)); | |
| var x = m.style.width; | |
| x = parseInt(x.substring(0, x.length - 2)); | |
| var s = m.style.height; | |
| s = parseInt(s.substring(0, s.length - 2)); | |
| var l = x / 2; | |
| var t = s / 2; | |
| var H = false; | |
| corners = [ | |
| [e, r], | |
| [e + x, r], | |
| [e + x, r + s], | |
| [e, r + s] | |
| ]; | |
| var z = corners.length; | |
| for (var D = 0; D < z; D++) { | |
| var k = corners[D]; | |
| if (Math.abs(j.left + k[0] - A) < a.CORNER_DRAG_RADIUS && Math.abs(j.top + k[1] - y) < a.CORNER_DRAG_RADIUS) { | |
| H = true; | |
| break; | |
| } | |
| } | |
| if (H) { | |
| var c = j.left + e + l; | |
| var b = j.top + r + t; | |
| var g = A - c; | |
| var f = b - y; | |
| var B, d, p, u; | |
| a.newStickerAngle; | |
| B = $.data(q, "angle"); | |
| d = a.getAngle(g, f); | |
| var o = false; | |
| var h = $("#overlay"); | |
| var n = null; | |
| h.mousemove(a.boundingBoxDragRotate(c, b, n, h, E, G, B, d, o)); | |
| h.mouseup(function (i) { | |
| a.addLaptopViewListeners(); | |
| E.hide(); | |
| E.find(".dragBox").show(); | |
| $("#boundingBoxX").show(); | |
| $.data(q, { | |
| angle: a.newStickerAngle | |
| }); | |
| h.off("mousemove").off("mouseup"); | |
| h.css("cursor", "auto"); | |
| E.css("cursor", ""); | |
| }); | |
| } else { | |
| var F = {}; | |
| $("#laptopScreen").mousemove(a.boundingBoxDragMove(A, y, j, e, r, v, w, F, G, E)); | |
| $("#laptopScreen").mouseup(function (i) { | |
| a.addLaptopViewListeners(); | |
| $.data(q, { | |
| top: F.top, | |
| left: F.left | |
| }); | |
| $("#laptopScreen").unbind("mousemove").unbind("mouseup"); | |
| }); | |
| } | |
| }; | |
| a.boundingBoxDragRotate = function (f, e, g, j, b, i, c, d, h) { | |
| return function (n) { | |
| n.preventDefault(); | |
| n.stopPropagation(); | |
| if (!h) { | |
| $("#boundingBoxX").hide(); | |
| b.find(".dragBox").hide(); | |
| h = true; | |
| } | |
| var l = n.pageX; | |
| var k = n.pageY; | |
| var q = l - f; | |
| var o = e - k; | |
| var r = a.getAngle(q, o); | |
| cursor = a.getRotateCursor(r); | |
| if (g == null || cursor != g) { | |
| g = cursor; | |
| var m = ("url(" + a.IMAGE_PREFIX + "rotate_" + cursor + ".png) 12 12, auto"); | |
| j.css("cursor", m); | |
| b.css("cursor", m); | |
| } | |
| newAngle = r - d; | |
| if (n.shiftKey) { | |
| newAngle = Math.round(newAngle / 45) * 45; | |
| } | |
| a.newStickerAngle = c + newAngle; | |
| var p = "rotate(" + a.newStickerAngle + "deg)"; | |
| cssSandpaper.setTransform(i[0], p); | |
| p = "rotate(" + newAngle + "deg)"; | |
| cssSandpaper.setTransform(b[0], p); | |
| }; | |
| }; | |
| a.boundingBoxDragMove = function (d, b, h, f, i, k, g, e, j, c) { | |
| return function (p) { | |
| var o, l; | |
| var n = p.pageX; | |
| var m = p.pageY; | |
| if (n < h.left || m < h.top || n > h.left + a.SCREEN_WIDTH || m > h.top + a.SCREEN_HEIGHT) { | |
| return; | |
| } | |
| e.left = k + n - d; | |
| e.top = g + m - b; | |
| o = f + n - d; | |
| l = i + m - b; | |
| j.css({ | |
| left: e.left + "px", | |
| top: e.top + "px", | |
| }); | |
| c.css({ | |
| left: o + "px", | |
| top: l + "px", | |
| }); | |
| }; | |
| }; | |
| a.getAngle = function (c, e) { | |
| var b = Math.atan(c / e); | |
| var d = b * 180 / Math.PI; | |
| if (e < 0) { | |
| d = 180 + d; | |
| } | |
| return d; | |
| }; | |
| a.getRotateCursor = function (b) { | |
| while (b < 0) { | |
| b += 360; | |
| } | |
| b = b % 360; | |
| if (0 <= b && b < 90) { | |
| return "top_right"; | |
| } else { | |
| if (90 <= b && b < 180) { | |
| return "bottom_right"; | |
| } else { | |
| if (180 <= b && b < 270) { | |
| return "bottom_left"; | |
| } else { | |
| return "top_left"; | |
| } | |
| } | |
| } | |
| }; | |
| a.layouts = { | |
| zoomView: ["div#zoomView", ["canvas#zoomCanvas"], | |
| ["div#zoomOverlay"], ], | |
| stickerContainer: ["div.stickerContainer", ["div.stickerName"], ], | |
| sticker: ["div.sticker"], | |
| boundingBox: ["div.boundingBox", ["div#boundingBoxX"], | |
| ["div.dragBox.top.left"], | |
| ["div.dragBox.bottom.left"], | |
| ["div.dragBox.bottom.right"], ], | |
| }; | |
| a.layouts.editView = ["div#stickerModal.modal", ["div.close-x", | |
| { | |
| event: { | |
| click: a.closeEditor | |
| } | |
| }], | |
| ["h2.title", "Edit Your Laptop Cover"], | |
| ["input#stickerSaveButton", | |
| { | |
| type: "text", | |
| value: "Save" | |
| }], | |
| ["div#laptop", ["div#laptopScreen", ["div#laptopView"], ], | |
| ["div#laptopMask"], ], | |
| ["h3", "Your Stickers"], | |
| ["div#remainingCount", ["span#remainingNumber"], " slots remaining.", ], | |
| ["div#picker", ["div#stickerListScrollLeft"], | |
| ["div#stickerScroller", ["div#stickerList"], ], | |
| ["div#stickerListScrollRight"], ], ]; | |
| this.init = a.init; | |
| this.showEditor = a.showEditor; | |
| this.drawLaptopCanvas = a.drawLaptopCanvas; | |
| }; | |
| $(function () { | |
| $(window).bind("userInitDone", turntable.sticker.init); | |
| }); | |
| turntable.user = { | |
| djPoints: 0, | |
| acl: 0, | |
| fanOf: [], | |
| buddies: [], | |
| blockedUsers: {}, | |
| init: function () { | |
| var a = turntable.user.initAuth(); | |
| a.done(turntable.user.updateDom, turntable.user.getUserInfo); | |
| turntable.ImGCdVsOO({ | |
| api: "block.list_all" | |
| }, function (b) { | |
| $.each(b.blocks, function () { | |
| turntable.user.blockedUsers[this.block.blockedid] = true; | |
| }); | |
| }); | |
| return a; | |
| }, | |
| initAuth: function () { | |
| LOG("Initializing user account..."); | |
| var a = $.Deferred(); | |
| turntable.user.id = $.cookie("turntableUserId"); | |
| turntable.user.auth = $.cookie("turntableUserAuth"); | |
| turntable.user.named = ($.cookie("turntableUserNamed") != "false"); | |
| if (!turntable.user.id) { | |
| turntable.user.createGuest().done(a.resolve); | |
| } else { | |
| LOG("Authenticating user..."); | |
| turntable.ImGCdVsOO({ | |
| api: "user.authenticate" | |
| }, function (b) { | |
| if (b.success) { | |
| a.resolve(); | |
| } else { | |
| turntable.user.createGuest().done(a.resolve); | |
| } | |
| }); | |
| } | |
| return a.promise(); | |
| }, | |
| persistAuth: function (b, c, a) { | |
| $.cookie("turntableUserId", turntable.user.id = b, { | |
| path: "/", | |
| expires: 365 | |
| }); | |
| $.cookie("turntableUserAuth", turntable.user.auth = c, { | |
| path: "/", | |
| expires: 365 | |
| }); | |
| $.cookie("turntableUserNamed", String(turntable.user.named = a), { | |
| path: "/", | |
| expires: 365 | |
| }); | |
| turntable.dispatchEvent("auth"); | |
| }, | |
| createGuest: function () { | |
| LOG("Creating guest account..."); | |
| var a = $.Deferred(); | |
| turntable.ImGCdVsOO({ | |
| api: "user.create" | |
| }, function (b) { | |
| turntable.user.persistAuth(b.userid, b.userauth, false); | |
| a.resolve(); | |
| }); | |
| return a.promise(); | |
| }, | |
| showFBLogin: function () { | |
| FB.login(turntable.user.fbDidLogin, { | |
| perms: "offline_access,email,user_about_me,user_birthday" | |
| }); | |
| }, | |
| fbDidLogin: function (a) { | |
| if (a.session && a.perms) { | |
| turntable.ImGCdVsOO({ | |
| api: "user.facebook_login", | |
| fbtoken: a.authResponse.accessToken | |
| }, function (b) { | |
| if (b.success) { | |
| turntable.user.persistAuth(b.userid, b.userauth, true); | |
| turntable.user.updateDom(); | |
| turntable.user.getUserInfo(); | |
| } | |
| }); | |
| } | |
| }, | |
| login: function (b, a) { | |
| turntable.ImGCdVsOO({ | |
| api: "user.login", | |
| email: b, | |
| password: a | |
| }, function (c) { | |
| if (c.success) { | |
| turntable.user.persistAuth(c.userid, c.userauth, true); | |
| turntable.user.updateDom(); | |
| turntable.user.getUserInfo(); | |
| } else { | |
| alert(c.err); | |
| } | |
| }); | |
| }, | |
| signUp: function (a, c, b) { | |
| turntable.ImGCdVsOO({ | |
| api: "user.create", | |
| name: a, | |
| email: c, | |
| password: b | |
| }, function (d) { | |
| if (d.success) { | |
| turntable.user.setDisplayName(a); | |
| turntable.user.persistAuth(d.userid, d.userauth, true); | |
| turntable.user.updateDom(); | |
| } | |
| }); | |
| }, | |
| elements: {}, | |
| view: null, | |
| updateDom: function () { | |
| turntable.user.elements = {}; | |
| turntable.user.view = util.buildTree(turntable.user.layouts[turntable.user.named ? "signedIn" : "guest"], turntable.user.elements); | |
| $("#userauth").empty().append(turntable.user.view); | |
| }, | |
| loginSubmit: function () { | |
| turntable.user.login(turntable.user.elements.loginEmail.value, turntable.user.elements.loginPasswd.value); | |
| }, | |
| signUpSubmit: function () { | |
| var b = $.trim($("#userSignUpName")[0].value); | |
| var a = $.trim($("#userSignUpEmail")[0].value); | |
| var d = $("#userSignUpPasswd")[0].value; | |
| var c = $("#userSignUpPasswd2")[0].value; | |
| if (d != c) { | |
| alert("passwords do not match"); | |
| return; | |
| } | |
| turntable.user.signUp(b, a, d); | |
| }, | |
| getUserInfo: function () { | |
| turntable.ImGCdVsOO({ | |
| api: "user.info" | |
| }, function (b) { | |
| turntable.user.setDisplayName(b.name); | |
| turntable.user.djPoints = b.points; | |
| turntable.user.avatarId = b.avatarid; | |
| turntable.user.acl = b.acl; | |
| turntable.ImGCdVsOO({ | |
| api: "user.get_fan_of" | |
| }, function (c) { | |
| turntable.user.fanOf = c.fanof; | |
| turntable.dispatchEvent("userinfo"); | |
| }); | |
| turntable.ImGCdVsOO({ | |
| api: "user.get_buddies" | |
| }, function (c) { | |
| turntable.user.buddies = c.buddies; | |
| }); | |
| }); | |
| turntable.playlist.loadList(); | |
| var a = "linux"; | |
| if (navigator.userAgent.indexOf("Macintosh") != -1 || navigator.userAgent.indexOf("iPhone") != -1 || navigator.userAgent.indexOf("iPad") != -1) { | |
| a = "mac"; | |
| } else { | |
| if (navigator.userAgent.indexOf("Windows") != -1) { | |
| a = "pc"; | |
| } else { | |
| if (navigator.userAgent.indexOf("CrOS") != -1) { | |
| a = "chrome"; | |
| } | |
| } | |
| } | |
| setTimeout(function () { | |
| turntable.ImGCdVsOO({ | |
| api: "user.modify", | |
| laptop: a | |
| }); | |
| }, 2000); | |
| turntable.user.laptop = a; | |
| }, | |
| setDisplayName: function (a) { | |
| turntable.user.displayName = a; | |
| $(".bindUserName").text(a); | |
| }, | |
| avatarsShow: function () { | |
| var a = {}; | |
| util.showOverlay(util.buildTree(turntable.user.layouts.avatarsView(), a)); | |
| turntable.ImGCdVsOO({ | |
| api: "user.available_avatars" | |
| }, function (b) { | |
| ASSERT(b.success, "Failed to get available avatars"); | |
| turntable.user.avatarsShowTiers(a.tiers, b.avatars); | |
| }); | |
| }, | |
| avatarsShowTiers: function (d, k) { | |
| for (var f = 0; f < k.length; f++) { | |
| var g = k[f]; | |
| if (g.min >= 50000) { | |
| continue; | |
| } | |
| if (g.acl) { | |
| var l = "Superusers"; | |
| } else { | |
| var l = g.min + (f + 2 < k.length ? "-" + (k[f + 1].min - 1) : "+") + " Points"; | |
| } | |
| var h = util.buildTree(turntable.user.layouts.avatarTier(l)); | |
| var a = $(h).find(".avatarList"); | |
| var c = (turntable.user.djPoints >= g.min) && (turntable.user.acl >= (g.acl || 0)); | |
| for (var e = 0; e < g.avatarids.length; e++) { | |
| var b = util.buildTree(turntable.user.layouts.avatarImg(g.avatarids[e], c)); | |
| if (avatars && typeof (avatars[g.avatarids[e]]) !== "undefined") { | |
| a.append(b); | |
| } | |
| if (g.avatarids[e] == turntable.user.avatarId) { | |
| $(b).addClass("currentAvatar"); | |
| } | |
| } | |
| $(d).append(h); | |
| } | |
| }, | |
| avatarLoad: function () { | |
| var b = $(this).closest("div.avatar"); | |
| b.css("width", this.width); | |
| b.css("height", this.height); | |
| var a = 150; | |
| if (this.width < a) { | |
| b.css("padding-left", (a - this.width) / 2); | |
| b.css("padding-right", (a - this.width) / 2); | |
| } | |
| if (this.height < a) { | |
| b.css("padding-top", (a - this.height) / 2); | |
| b.css("padding-bottom", (a - this.height) / 2); | |
| } | |
| $(this).addClass("shrink"); | |
| }, | |
| avatarShrink: function () { | |
| $(this).addClass("shrink"); | |
| }, | |
| avatarUnshrink: function () { | |
| $(this).removeClass("shrink"); | |
| }, | |
| avatarClick: function () { | |
| $(".avatar.currentAvatar").removeClass("currentAvatar"); | |
| $(this).closest(".avatar").addClass("currentAvatar"); | |
| }, | |
| avatarClose: function () { | |
| var a = $(".avatar.currentAvatar").data("avatarId"); | |
| if (a != turntable.user.avatarId) { | |
| turntable.user.avatarId = a; | |
| turntable.ImGCdVsOO({ | |
| api: "user.set_avatar", | |
| avatarid: a | |
| }, function (b) { | |
| if (b.success) { | |
| turntable.dispatchEvent("avatarchange"); | |
| } | |
| }); | |
| } | |
| util.hideOverlay(); | |
| }, | |
| settingsShow: function () { | |
| turntable.ImGCdVsOO({ | |
| api: "user.get_profile" | |
| }, function (a) { | |
| util.showOverlay(util.buildTree(turntable.user.layouts.settingsView())); | |
| $("#displayNameField").val(turntable.user.displayName); | |
| $("#twitterField").val(a.twitter); | |
| $("#facebookField").val(a.facebook); | |
| $("#websiteField").val(a.website); | |
| $("#aboutField").val(a.about); | |
| $("#aboutField").limitMaxLength(); | |
| $("#topArtistsField").val(a.topartists); | |
| $("#topArtistsField").limitMaxLength(); | |
| $("#hangoutField").val(a.hangout); | |
| $("#hangoutField").limitMaxLength(); | |
| $("#displayNameFieldWrapper").tipsy({ | |
| gravity: "n", | |
| fade: true, | |
| }); | |
| }); | |
| }, | |
| settingsSubmit: function () { | |
| var c = $("#displayNameField").val(); | |
| var g = $("#twitterField").val(); | |
| var b = $("#facebookField").val(); | |
| var e = $("#websiteField").val(); | |
| var f = $("#aboutField").val(); | |
| var a = $("#topArtistsField").val(); | |
| var d = $("#hangoutField").val(); | |
| turntable.ImGCdVsOO({ | |
| api: "user.modify_profile", | |
| name: c, | |
| twitter: g, | |
| facebook: b, | |
| website: e, | |
| about: f, | |
| topartists: a, | |
| hangout: d | |
| }, function (h) { | |
| if (!h.success) { | |
| turntable.showAlert("Sorry, " + h.err); | |
| return; | |
| } else { | |
| turntable.user.setDisplayName(c); | |
| } | |
| }); | |
| util.hideOverlay(); | |
| }, | |
| ignoredShow: function () { | |
| util.showOverlay(util.buildTree(turntable.user.layouts.ignoredView())); | |
| var b = function (c) { | |
| if ($("#" + c).length > 0) { | |
| return; | |
| } | |
| var d = function () { | |
| var f = $(this).parent(); | |
| turntable.ImGCdVsOO({ | |
| api: "block.remove", | |
| blockedid: f.attr("id") | |
| }, function (g) { | |
| if (g && g.success) { | |
| f.hide("slow", function () { | |
| $(this).remove(); | |
| }); | |
| delete turntable.user.blockedUsers[f.attr("id")]; | |
| turntable.buddyList.updateIgnored(); | |
| } else { | |
| $("#addIgnoreFieldError").html("An error occurred when removing the user").show("slow"); | |
| } | |
| }); | |
| return false; | |
| }; | |
| var e = util.buildTree(["li#" + c + ".ignored", | |
| {}, ["a.remove", | |
| { | |
| event: { | |
| click: d | |
| } | |
| }], | |
| ["span.name", | |
| {}, "Loading..."] | |
| ]); | |
| turntable.ImGCdVsOO({ | |
| api: "user.get_profile", | |
| userid: c | |
| }, function (f) { | |
| $("#" + c + " span.name").html(f.name); | |
| }); | |
| return e; | |
| }; | |
| turntable.ImGCdVsOO({ | |
| api: "block.list_all" | |
| }, function (c) { | |
| $.each(c.blocks, function () { | |
| var d = this.block; | |
| $("ul#ignoredUsers").append(b(d.blockedid)); | |
| turntable.user.blockedUsers = {}; | |
| turntable.user.blockedUsers[this.block.blockedid] = true; | |
| turntable.buddyList.updateIgnored(); | |
| }); | |
| }); | |
| var a = "Enter a username..."; | |
| $("div.addIgnore input").val(a).addClass("default"); | |
| $("div.addIgnore input").focus(function () { | |
| if ($(this).val() == a) { | |
| $(this).val("").removeClass("default"); | |
| } | |
| }); | |
| $("div.addIgnore input").keyup(function (c) { | |
| if (c.keyCode == 13) { | |
| $("div.addIgnore button").click(); | |
| } | |
| }); | |
| $("div.addIgnore input").focus(function (c) { | |
| setTimeout(function () { | |
| $("#addIgnoreFieldError").hide("slow"); | |
| }, 1000); | |
| }); | |
| $("div.addIgnore button").click(function () { | |
| var c = $("#addIgnoreField").val(); | |
| if ($.trim(c).length > 0) { | |
| turntable.ImGCdVsOO({ | |
| api: "user.get_id", | |
| name: c | |
| }, function (d) { | |
| if (d && d.success) { | |
| turntable.ImGCdVsOO({ | |
| api: "block.add", | |
| blockedid: d.userid | |
| }, function (e) { | |
| if (e.success) { | |
| $("ul#ignoredUsers").append(b(d.userid)); | |
| $("#" + d.userid).hide().show("slow"); | |
| $("#addIgnoreField").val(""); | |
| $("#addIgnoreFieldError").html("").hide(); | |
| turntable.user.blockedUsers[d.userid] = true; | |
| turntable.buddyList.updateIgnored(); | |
| } else { | |
| $("#addIgnoreFieldError").html(e.err).show("slow"); | |
| } | |
| }); | |
| } else { | |
| $("#addIgnoreFieldError").html(d.err).show("slow"); | |
| } | |
| }); | |
| } | |
| }); | |
| } | |
| }; | |
| turntable.user.layouts = { | |
| guest: ["div#menuh", | |
| {}, ["div.fbLogin", | |
| { | |
| event: { | |
| click: turntable.user.showFBLogin | |
| } | |
| }, ["span", "Login"]]], | |
| signedIn: ["div#menuh", | |
| { | |
| event: { | |
| mouseover: function () { | |
| $(".menuItem").addClass("hover"); | |
| }, | |
| mouseout: function () { | |
| $(".menuItem").removeClass("hover"); | |
| } | |
| } | |
| }, ["div.menuItem.first", | |
| {}, ["div.settingsHead"], | |
| ["div.text", "Settings"], | |
| ["div.downArrow", | |
| { | |
| src: "https://s3.amazonaws.com/static.turntable.fm/images/down_arrow.png" | |
| }] | |
| ], | |
| ["div.menuItem", | |
| { | |
| event: { | |
| click: turntable.user.avatarsShow | |
| } | |
| }, "Change avatar"], | |
| ["div.menuItem", | |
| { | |
| event: { | |
| click: turntable.user.settingsShow | |
| } | |
| }, "Edit profile"], | |
| ["div.menuItem", | |
| { | |
| event: { | |
| click: turntable.sticker.showEditor | |
| } | |
| }, "Laptop stickers"], | |
| ["div.menuItem", | |
| { | |
| event: { | |
| click: turntable.user.ignoredShow | |
| } | |
| }, "Ignored users"], | |
| ["div.menuItem", | |
| { | |
| event: { | |
| click: turntableCommon.logout | |
| } | |
| }, "Logout"] | |
| ], | |
| avatarsView: function () { | |
| return ["div.avatarsOverlay.modal", {}, ["div.close-x", | |
| { | |
| event: { | |
| click: turntable.user.avatarClose | |
| } | |
| }], ["h2", "Choose Avatar"], ["p.djPointsMsg", ["span.djName", "DJ ", ["span.bindUserName", | |
| {}, | |
| turntable.user.displayName]], ", you have ", ["span.djPoints", | |
| {}, | |
| turntable.user.djPoints], " points."], ["p.djPointsMsg", "Earn more points to unlock new avatars."], ["div##tiers.avatarTiers"]]; | |
| }, | |
| avatarTier: function (a) { | |
| return ["div.tier", {}, ["div.reqsHeader", | |
| {}, | |
| a], ["div.avatarList"]]; | |
| }, | |
| avatarImg: function (b, a) { | |
| return ["div.avatar" + (a ? "" : ".locked"), { | |
| data: { | |
| avatarId: b | |
| } | |
| }, ["img.avatarImg", | |
| { | |
| src: "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/" + b + "/fullfront.png", | |
| event: { | |
| load: turntable.user.avatarLoad, | |
| mouseover: a && turntable.user.avatarUnshrink, | |
| mouseout: a && turntable.user.avatarShrink, | |
| click: a && turntable.user.avatarClick | |
| } | |
| }], (a ? null : ["img.lockedIcon", | |
| { | |
| src: "https://s3.amazonaws.com/static.turntable.fm/images/overlay/avatar_locked_icon.png" | |
| }]), ["div.djName", | |
| {}, "DJ " + turntable.user.displayName]]; | |
| }, | |
| settingsView: function () { | |
| return ["div.settingsOverlay.modal", {}, ["div.close-x", | |
| { | |
| event: { | |
| click: util.hideOverlay | |
| } | |
| }], ["h1", "Edit Profile"], ["br"], ["div.fields", | |
| {}, ["div.field.settings", | |
| {}, ["div#displayNameFieldWrapper", | |
| { | |
| title: "Can't be changed more than once every seven days" | |
| }, ["div", | |
| {}, "Display Name:"], | |
| ["input#displayNameField.text.name"] | |
| ], | |
| ["div", | |
| {}, "Twitter Name:"], | |
| ["input#twitterField.text.twitter", | |
| { | |
| maxlength: 15 | |
| }], | |
| ["div", | |
| {}, "Facebook URL:"], | |
| ["input#facebookField.text.facebook"], | |
| ["div", | |
| {}, "Website:"], | |
| ["input#websiteField.text.website"], | |
| ["div", | |
| {}, "Write something about yourself:"], | |
| ["textarea#aboutField.textarea", | |
| { | |
| maxlength: 400 | |
| }], | |
| ["div", | |
| {}, "Got some favorite artists?"], | |
| ["textarea#topArtistsField.textarea", | |
| { | |
| maxlength: 400 | |
| }], | |
| ["div", | |
| {}, "Where do you usually hang out on turntable?"], | |
| ["textarea#hangoutField.textarea", | |
| { | |
| maxlength: 400 | |
| }] | |
| ]], ["div.save-changes.centered-button", | |
| { | |
| event: { | |
| click: turntable.user.settingsSubmit | |
| } | |
| }], ["br"]]; | |
| }, | |
| ignoredView: function () { | |
| return ["div.ignoredOverlay.modal", {}, ["div.close-x", | |
| { | |
| event: { | |
| click: util.hideOverlay | |
| } | |
| }], ["h1", "Ignored Users List"], ["div.ignoredDescription", "Someone bothering you? Add a user to this list to block their incoming chat messages."], ["div.addIgnore", ["input#addIgnoreField", | |
| { | |
| size: "15" | |
| }], | |
| ["button", | |
| {}], | |
| ["div#addIgnoreFieldError", | |
| {}] | |
| ], ["ul#ignoredUsers", | |
| {}]]; | |
| } | |
| }; | |
| turntable.playlist = { | |
| files: [], | |
| songsByFid: {}, | |
| currentSong: null, | |
| currentSongTimer: null, | |
| filesUploading: [], | |
| filesProcessed: 0, | |
| filesToProcess: 0, | |
| isFiltered: false, | |
| nodes: {}, | |
| init: function () { | |
| $("#playlist").attr("id", "").replaceWith(util.buildTree(turntable.playlist.layouts.playlistView, turntable.playlist.nodes)); | |
| $("#playlist .addSongsButton").click(function () { | |
| turntable.playlist.filterQueue(""); | |
| $("#playlist .queueView").hide(); | |
| $("#playlist .addSongsView").show(); | |
| $("#plupload .plupload.html5").css("width", $("#pickfiles").css("width")); | |
| $("#plupload .plupload.html5").css("height", $("#pickfiles").css("height")); | |
| }); | |
| $("#playlist .addSongsView .cancelButton").click(function () { | |
| $("#playlist .addSongsView").hide(); | |
| $("#playlist .queueView").show(); | |
| }); | |
| $("#playlist .searchView .doneButton").click(turntable.playlist.searchDone); | |
| turntable.playlist.realQueue = $("#playlist .queue.realPlaylist"); | |
| turntable.playlist.initUploader(); | |
| turntable.playlist.initDragAndDrop(); | |
| turntable.addEventListener("message", turntable.playlist.messageReceived); | |
| util.QIQOxBrdu(this); | |
| }, | |
| loadList: function (b, c, d) { | |
| LOG("Loading user playlist..."); | |
| var a = { | |
| api: "playlist.all", | |
| playlist_name: "default" | |
| }; | |
| if (turntable.playlist.files.length && !d) { | |
| a.minimal = true; | |
| } | |
| turntable.ImGCdVsOO(a, function (h) { | |
| var g = []; | |
| LOG("playlist received, " + h.list.length + " songs"); | |
| if (a.minimal) { | |
| for (var f = 0; f < h.list.length; f++) { | |
| var e = turntable.playlist.songsByFid[h.list[f]._id]; | |
| if (!e) { | |
| turntable.playlist.loadList(b, c, true); | |
| return; | |
| } | |
| g.push(e); | |
| } | |
| } else { | |
| for (var f = 0; f < h.list.length; f++) { | |
| g.push({ | |
| fileId: h.list[f]._id, | |
| metadata: h.list[f].metadata | |
| }); | |
| } | |
| } | |
| turntable.playlist.updatePlaylist(g, b); | |
| if (c) { | |
| turntable.playlist.queueAnimTask(c); | |
| } | |
| }); | |
| }, | |
| clearPlaylist: function () { | |
| turntable.playlist.updatePlaylist([], false); | |
| }, | |
| setCurrentSong: function (b) { | |
| if (turntable.playlist.currentSong == null && b == null) { | |
| return; | |
| } | |
| turntable.playlist.previewStop(); | |
| if (turntable.playlist.currentSongTimer) { | |
| clearInterval(turntable.playlist.currentSongTimer); | |
| turntable.playlist.currentSongTimer = null; | |
| } | |
| var a = function () { | |
| turntable.playlist.currentSong = (b ? { | |
| fileId: b._id, | |
| metadata: b.metadata | |
| } : null); | |
| turntable.playlist.updateTopSongClass(); | |
| if (turntable.playlist.currentSong) { | |
| var c = Math.max(500, 1000 * b.metadata.length / $("#playlist .queue").width()); | |
| turntable.playlist.currentSongTimer = setInterval(turntable.playlist.updateCurrentSongProgress, c); | |
| } | |
| }; | |
| if (turntable.playlist.currentSong) { | |
| if (b) { | |
| turntable.playlist.setEditsLocked(true); | |
| turntable.playlist.loadList(750, a); | |
| } else { | |
| turntable.playlist.queueTask(function () { | |
| a(); | |
| turntable.playlist.updatePlaylist(null, 750); | |
| }); | |
| } | |
| } else { | |
| turntable.playlist.setEditsLocked(true); | |
| a(); | |
| turntable.playlist.loadList(false); | |
| } | |
| }, | |
| resetQueueView: function () { | |
| turntable.playlist.searchDone(); | |
| }, | |
| updateCurrentSongProgress: function () { | |
| try { | |
| var a = turntable.NLcgRGlUht.getCurrentSongProgress(); | |
| turntable.playlist.realQueue.find(".currentSong .progress").css("width", a * 100 + "%"); | |
| } catch (b) {} | |
| }, | |
| messageReceived: function (b) { | |
| if (b.command == "upload_complete") { | |
| turntable.playlist.filesProcessed += 1; | |
| if (turntable.playlist.filesProcessed >= turntable.playlist.filesToProcess) { | |
| turntable.playlist.filesProcessed = turntable.playlist.filesToProcess = 0; | |
| } | |
| turntable.playlist.updateProcessing(); | |
| if (turntable.playlist.songsByFid.hasOwnProperty(b.fid)) { | |
| return; | |
| } | |
| turntable.playlist.addSong({ | |
| fileId: b.fid, | |
| metadata: b.metadata | |
| }); | |
| } else { | |
| if (b.command == "upload_failed") { | |
| var a = b.err || "Your upload failed. There may have been a problem with the file, or the song wasn't long enough."; | |
| if (turntable.NLcgRGlUht && turntable.NLcgRGlUht.showRoomTip) { | |
| turntable.NLcgRGlUht.showRoomTip(a); | |
| } | |
| if (turntable.playlist.filesToProcess > 0) { | |
| turntable.playlist.filesToProcess -= 1; | |
| turntable.playlist.updateProcessing(); | |
| } | |
| } | |
| } | |
| }, | |
| editTask: null, | |
| resolvingEdits: false, | |
| setEditsLocked: function (a) { | |
| if (a) { | |
| if (turntable.playlist.editTask == null) { | |
| turntable.playlist.editTask = $.Deferred(); | |
| } | |
| } else { | |
| if (turntable.playlist.editTask != null) { | |
| turntable.playlist.resolvingEdits = true; | |
| turntable.playlist.editTask.resolve(); | |
| turntable.playlist.resolvingEdits = false; | |
| turntable.playlist.editTask = null; | |
| } | |
| } | |
| if (!turntable.playlist.isFiltered) { | |
| turntable.playlist.setSortableEnabled(!a); | |
| } | |
| }, | |
| queueTask: function (a) { | |
| (turntable.playlist.editTask ? turntable.playlist.editTask.done(a) : a()); | |
| }, | |
| animTask: null, | |
| beginAnimTask: function () { | |
| ASSERT(turntable.playlist.editTask != null, "Edits must be locked"); | |
| ASSERT(turntable.playlist.animTask == null || turntable.playlist.animTask.isResolved() || turntable.playlist.animTask.isRejected(), "There are pending animations"); | |
| turntable.playlist.animTask = $.Deferred(); | |
| }, | |
| endAnimTask: function () { | |
| turntable.playlist.animTask.resolve(); | |
| turntable.playlist.animTask = null; | |
| }, | |
| queueAnimTask: function (a) { | |
| (turntable.playlist.animTask ? turntable.playlist.animTask.done(a) : a()); | |
| }, | |
| initDragAndDrop: function () { | |
| var a; | |
| $(document).bind("dragenter dragover", function (f) { | |
| var d = f.originalEvent.dataTransfer.types.length; | |
| for (var c = 0; c < d; c++) { | |
| if (f.originalEvent.dataTransfer.types[c] == "Files") { | |
| $("#dropZone").show(); | |
| window.clearTimeout(a); | |
| break; | |
| } | |
| } | |
| }).bind("dragleave dragexit", function (c) { | |
| a = window.setTimeout(function () { | |
| $("#dropZone").hide(); | |
| }, 100); | |
| }).bind("drop", function (c) { | |
| $("#dropZone").attr("style", "").hide(); | |
| }).bind("mouseout", function (c) { | |
| $("#dropZone").attr("style", "").hide(); | |
| }); | |
| var b; | |
| $("#dropZone").bind("dragenter dragover", function (c) { | |
| $(this).css("background", "#ccc"); | |
| window.clearTimeout(b); | |
| }).bind("dragleave", function (c) { | |
| b = window.setTimeout(function () { | |
| $("#dropZone").css("background", ""); | |
| }, 100); | |
| }); | |
| }, | |
| initUploader: function () { | |
| LOG("Initializing plupload..."); | |
| var a = turntable.uploader = new plupload.Uploader({ | |
| runtimes: "html5,flash,silverlight", | |
| browse_button: "pickfiles", | |
| browse_button_hover: "hover", | |
| browse_button_active: "active", | |
| container: "plupload", | |
| drop_element: "dropZone", | |
| autostart: true, | |
| max_file_size: "30mb", | |
| url: "/upload/" + turntable.currentSocketServer, | |
| flash_swf_url: "/static/plupload/js/plupload.flash.swf", | |
| silverlight_xap_url: "/static/plupload/js/plupload.silverlight.xap", | |
| filters: [{ | |
| title: "Music files", | |
| extensions: "mp3" | |
| }], | |
| multipart_params: {} | |
| }); | |
| a.init(); | |
| a.bind("FilesAdded", turntable.playlist.beginUpload); | |
| a.bind("UploadProgress", function (b, c) { | |
| $(".plFile-" + c.id + " .progress").css("width", c.percent + "%"); | |
| }); | |
| a.bind("FileUploaded", function (b, d, f) { | |
| LOG("file uploaded: " + f.response); | |
| var c = JSON.parse(f.response); | |
| turntable.playlist.endUpload(d); | |
| if (!c.success) { | |
| var e = "There was an error uploading " + c.filename + " \u2014 please check the song file."; | |
| turntable.playlist.messageReceived({ | |
| command: "upload_failed", | |
| err: e | |
| }); | |
| } | |
| }); | |
| }, | |
| beginUpload: function (f, b) { | |
| ASSERT(b.length, "beginUpload called with 0 files... intentional?"); | |
| $("#dropZone").attr("style", "").hide(); | |
| $("#playlist .addSongsView").hide(); | |
| $("#playlist .queueView").show(); | |
| turntable.playlist.filesToProcess += b.length; | |
| turntable.playlist.updateProcessing(); | |
| var d = $("#playlist .queueView .songlist"); | |
| var a = d.find(".uploads"); | |
| for (var e = 0; e < b.length; e++) { | |
| var c = $(util.buildTree(turntable.playlist.layouts.uploadingView(b[e].name))); | |
| c.addClass("plFile-" + b[e].id); | |
| a.append(c); | |
| } | |
| d[0].scrollTop = turntable.playlist.realQueue.height(); | |
| turntable.playlist.filesUploading = turntable.playlist.filesUploading.concat(b); | |
| turntable.uploader.settings.url = "/upload/" + turntable.currentSocketServer; | |
| turntable.uploader.settings.multipart_params.userid = turntable.user.id; | |
| turntable.uploader.settings.multipart_params.userauth = turntable.user.auth; | |
| turntable.uploader.settings.multipart_params.port = String(turntable.socket.options.port); | |
| f.start(); | |
| }, | |
| endUpload: function (a) { | |
| LOG(a.name + " finished uploading"); | |
| var c = $.inArray(a, turntable.playlist.filesUploading); | |
| ASSERT(c != -1, "Never began uploading " + a.name); | |
| turntable.playlist.filesUploading.splice(c, 1); | |
| var b = a.id; | |
| $(".plFile-" + b).animate({ | |
| height: 0, | |
| opacity: 0 | |
| }, { | |
| duration: 400, | |
| complete: function () { | |
| $(this).remove(); | |
| } | |
| }); | |
| turntable.playlist.updateProcessing(); | |
| }, | |
| addSong: function (b, a) { | |
| turntable.playlist.queueTask(function () { | |
| var c = b.fileId; | |
| if (a === null || a === undefined) { | |
| a = turntable.playlist.files.length - (turntable.playlist.currentSong ? 1 : 0); | |
| } | |
| turntable.playlist.files.splice(a, 0, b); | |
| turntable.playlist.songsByFid[b.fileId] = b; | |
| turntable.playlist.updatePlaylist(null, true); | |
| turntable.ImGCdVsOO({ | |
| api: "playlist.add", | |
| playlist_name: "default", | |
| song_dict: { | |
| fileid: c | |
| }, | |
| index: a | |
| }, function (d) { | |
| if (!d.success) { | |
| turntable.playlist.loadList(false); | |
| } | |
| }); | |
| }); | |
| }, | |
| removeFile: function (a) { | |
| turntable.playlist.queueTask(function () { | |
| var b = -1; | |
| for (var c = 0; c < turntable.playlist.files.length; c++) { | |
| if (turntable.playlist.files[c].fileId == a) { | |
| b = c; | |
| break; | |
| } | |
| } | |
| if (b == -1) { | |
| return; | |
| } | |
| if (turntable.playlist.currentSong && b == turntable.playlist.files.length - 1) { | |
| return; | |
| } | |
| turntable.playlist.files.splice(b, 1); | |
| delete turntable.playlist.songsByFid[a]; | |
| turntable.playlist.updatePlaylist(null, 100); | |
| turntable.ImGCdVsOO({ | |
| api: "playlist.remove", | |
| playlist_name: "default", | |
| index: b | |
| }, function (d) { | |
| ASSERT(d.success, "Song could not be removed"); | |
| }); | |
| }); | |
| }, | |
| removeSongClicked: function (a) { | |
| var b = $(this).closest(".song"); | |
| ASSERT(!b.hasClass("currentSong"), "Can't remove current song"); | |
| turntable.playlist.removeFile(b.data("songData").fileId); | |
| }, | |
| searchKeyUp: function (d) { | |
| var a = $(this); | |
| var c = a.closest(".search"); | |
| var b = c.find(".mag-glass"); | |
| var e = a.val(); | |
| if (e) { | |
| b.addClass("clearSearch"); | |
| } else { | |
| b.removeClass("clearSearch"); | |
| } | |
| if (c.hasClass("playlistSearch")) { | |
| turntable.playlist.filterQueue(e); | |
| } | |
| }, | |
| searchClear: function (a) { | |
| var c = $(this); | |
| if (c.hasClass("clearSearch")) { | |
| c.removeClass("clearSearch"); | |
| var d = c.closest(".search"); | |
| var b = d.find("input"); | |
| b.val(""); | |
| b.focus(); | |
| if (d.hasClass("playlistSearch")) { | |
| turntable.playlist.filterQueue(""); | |
| } | |
| } | |
| }, | |
| filterQueue: function (b) { | |
| if (b.length > 0) { | |
| filterEscaped = b.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); | |
| var a = $("div.realPlaylist").egrep(new RegExp(filterEscaped, "i")); | |
| $(".song").hide(); | |
| $(a).closest(".song").show().addClass("filtered"); | |
| turntable.playlist.isFiltered = true; | |
| turntable.playlist.setSortableEnabled(false); | |
| if (!$("#playlist .resultsLabel").is(":visible")) { | |
| var c = $("#playlist .songlist"); | |
| c.css({ | |
| height: (c.height() - 20) + "px", | |
| top: (c.position().top + 20) + "px" | |
| }); | |
| } | |
| $("#playlist .resultsLabel").show().find(".searchTermLabel").text(b); | |
| } else { | |
| $(".song").show().removeClass("filtered"); | |
| turntable.playlist.isFiltered = false; | |
| turntable.playlist.setSortableEnabled(true); | |
| var c = $("#playlist .songlist"); | |
| if ($("#playlist .resultsLabel").is(":visible")) { | |
| c.css({ | |
| height: (c.height() + 20) + "px", | |
| top: (c.position().top - 20) + "px" | |
| }); | |
| $("#playlist .resultsLabel").hide(); | |
| } | |
| } | |
| }, | |
| submitSearchQuery: function (a, c) { | |
| var b = c ? $(c) : $(this); | |
| var d = $.trim(b.find("input").val()); | |
| if (!d) { | |
| return; | |
| } | |
| if (a !== true) { | |
| a = false; | |
| } | |
| if (!a && "pendingSearchQuery" in turntable.playlist && turntable.playlist.pendingSearchQuery == d && turntable.playlist.appendSongSearch) { | |
| a = true; | |
| } | |
| $("#playlist .searchView .songSearch input").val(d); | |
| $(".queueView").hide(); | |
| $(".addSongsView").hide(); | |
| $(".searchView").show(); | |
| if (!a) { | |
| turntable.playlist.appendSongSearch = false; | |
| turntable.ImGCdVsOO({ | |
| api: "file.search", | |
| query: d | |
| }, function () { | |
| turntable.playlist.waitSearchResults(d); | |
| }); | |
| turntable.playlist.searchPage = 1; | |
| turntable.playlist.previewStop(); | |
| $(".searchView .searchingBlocker").fadeTo(100, 0.9); | |
| } else { | |
| turntable.playlist.appendSongSearch = true; | |
| if (!turntable.playlist.searchPage) { | |
| turntable.playlist.searchPage = 1; | |
| } | |
| turntable.ImGCdVsOO({ | |
| api: "file.search", | |
| query: d, | |
| page: turntable.playlist.searchPage + 1 | |
| }, function () { | |
| turntable.playlist.waitSearchResults(d); | |
| }); | |
| } | |
| }, | |
| waitSearchResults: function (a) { | |
| if (!turntable.playlist.pendingSearchQuery) { | |
| turntable.addEventListener("message", turntable.playlist.showSearchResults); | |
| } | |
| turntable.playlist.pendingSearchQuery = a; | |
| }, | |
| showSearchResults: function (c) { | |
| var b = turntable.playlist.appendSongSearch; | |
| if ((c.command != "search_complete" && c.command != "search_failed") || (c.query != turntable.playlist.pendingSearchQuery) || (!b && c.page != 1) || (b && c.page != turntable.playlist.searchPage + 1)) { | |
| return; | |
| } | |
| turntable.playlist.pendingSearchQuery = null; | |
| turntable.removeEventListener("message", turntable.playlist.showSearchResults); | |
| if ($(".searchView").css("display") == "none") { | |
| return; | |
| } | |
| if (!b) { | |
| $(".searchView .searchingBlocker").fadeOut("fast"); | |
| $(".searchView input").focus(); | |
| $(".searchView .mag-glass").addClass("clearSearch"); | |
| turntable.playlist.numFilesAdded = 0; | |
| $(".searchView .numFilesAdded").text("(0) Songs added"); | |
| $(".searchView .queue").empty(); | |
| $(".searchView .songlist")[0].scrollTop = 0; | |
| } else { | |
| turntable.playlist.searchPage++; | |
| } | |
| var e = null; | |
| if (!c.success) { | |
| e = (c.err ? "Error: " + c.err : "Sorry, the search failed. Please try again later."); | |
| } else { | |
| if (c.docs.length == 0 && !b) { | |
| e = "Sorry, no results could be found."; | |
| } | |
| } | |
| if (e) { | |
| $(".searchView .emptySearchResults").show().text(e); | |
| if (!b) { | |
| $(".searchView .separator").hide(); | |
| } | |
| return; | |
| } | |
| $(".searchView .emptySearchResults").hide(); | |
| var h = $(".searchView .externQueue"); | |
| var j = $(".searchView .inMyQueue"); | |
| for (var d = 0; d < c.docs.length; d++) { | |
| var g = c.docs[d]; | |
| var f = (turntable.playlist.songsByFid.hasOwnProperty(g._id) ? j : h); | |
| var a = { | |
| fileId: g._id, | |
| metadata: g.metadata | |
| }; | |
| f.append(util.buildTree(turntable.playlist.layouts.searchedSongView(a))); | |
| } | |
| $(".searchView .separator").css("display", j.children().length ? "block" : "none"); | |
| if (c.docs.length >= 25) { | |
| $(".searchView .loadMoreSearchResults").show(); | |
| turntable.playlist.bindSongSearchScroll(); | |
| } else { | |
| $(".searchView .loadMoreSearchResults").hide(); | |
| turntable.playlist.unbindSongSearchScroll(); | |
| } | |
| }, | |
| bindSongSearchScroll: function () { | |
| turntable.playlist.didScrollSearch = false; | |
| var b = $(".searchView .songlist"); | |
| var c = $(".searchView .loadMoreSearchResults"); | |
| var a = $(".chat-container"); | |
| b.scroll(function () { | |
| turntable.playlist.didScrollSearch = true; | |
| }); | |
| turntable.playlist.scrollSearchTimer = setInterval(function () { | |
| if (turntable.playlist.didScrollSearch) { | |
| turntable.playlist.didScrollSearch = false; | |
| if (c.css("display") == "none") { | |
| return; | |
| } | |
| var e = c.offset().top; | |
| var d = a.offset().top; | |
| if (e < d) { | |
| turntable.playlist.unbindSongSearchScroll(); | |
| turntable.playlist.submitSearchQuery(true, "form.input.songSearch"); | |
| } | |
| } | |
| }, 250); | |
| }, | |
| unbindSongSearchScroll: function () { | |
| $(".searchView .songlist").unbind("scroll"); | |
| if ("scrollSearchTimer" in turntable.playlist) { | |
| clearInterval(turntable.playlist.scrollSearchTimer); | |
| } | |
| }, | |
| addSearchResult: function () { | |
| var b = $(this).closest(".song"); | |
| b.addClass("addedToQueue"); | |
| b.find(".addSong").hide(); | |
| b.find(".goTop").hide(); | |
| b.find(".checkmark").show(); | |
| var a = b.data("songData"); | |
| if (b.closest(".queue").hasClass("externQueue")) { | |
| turntable.playlist.addSong(a, 0); | |
| turntable.playlist.numFilesAdded += 1; | |
| $(".searchView .numFilesAdded").text("(" + turntable.playlist.numFilesAdded + ") Songs added"); | |
| } else { | |
| turntable.playlist.moveFileToTop(a.fileId); | |
| b.find(".addedToQueueTop").show().delay(1500).fadeOut(500); | |
| } | |
| }, | |
| remSearchResult: function () { | |
| var a = $(this).closest(".song"); | |
| if (a.closest(".queue").hasClass("externQueue")) { | |
| turntable.playlist.removeFile(a.data("songData").fileId); | |
| a.removeClass("addedToQueue"); | |
| a.find(".addSong").show(); | |
| a.find(".checkmark").hide(); | |
| turntable.playlist.numFilesAdded -= 1; | |
| $(".searchView .numFilesAdded").text("(" + turntable.playlist.numFilesAdded + ") Songs added"); | |
| } | |
| }, | |
| searchDone: function (a) { | |
| turntable.playlist.previewStop(); | |
| turntable.playlist.unbindSongSearchScroll(); | |
| $("#playlist .search input").val(""); | |
| $("#playlist .search .mag-glass").removeClass("clearSearch"); | |
| $(".queueView").show(); | |
| $(".addSongsView").hide(); | |
| $(".searchView").hide(); | |
| }, | |
| buySong: function () { | |
| var c = $(this).closest(".song"); | |
| var b = c.data("songData").fileId; | |
| var a = "itunes"; | |
| window.open("/link/?fileid=" + b + "&site=" + a, a + b); | |
| }, | |
| previewPlay: function () { | |
| var a = $(this).closest(".song"); | |
| turntablePlayer.samplePlay(a.data("songData").fileId, turntable.playlist.previewCallback); | |
| a.addClass("currentPreview"); | |
| a.find(".progress").css("width", "0%"); | |
| }, | |
| previewCallback: function (b, a) { | |
| if (b == "progress") { | |
| $(".playlist-container .song.currentPreview .progress").css({ | |
| width: a | |
| }); | |
| } else { | |
| if (b == "stop") { | |
| $(".playlist-container .song.currentPreview .progress").css({ | |
| width: "0%" | |
| }); | |
| $(".playlist-container .song.currentPreview").removeClass("currentPreview"); | |
| } | |
| } | |
| }, | |
| previewStop: turntablePlayer.sampleStop, | |
| humanDuration: function (a) { | |
| return Math.floor(a / 60) + ":" + String(a % 60 + 100).substr(1); | |
| }, | |
| updateProcessing: function () { | |
| var a = $(turntable.playlist.nodes.root).find(".processing"); | |
| if (turntable.playlist.filesToProcess > 0) { | |
| a.find(".text").text("Processed " + turntable.playlist.filesProcessed + " of " + turntable.playlist.filesToProcess + " files"); | |
| a.slideDown(); | |
| } else { | |
| a.slideUp(); | |
| } | |
| turntable.playlist.updateDjQueueDecoration(); | |
| }, | |
| moveSongToTopClicked: function (a) { | |
| var b = $(this).closest(".song"); | |
| ASSERT(!b.hasClass("topSong"), "Cannot move top song to top"); | |
| turntable.playlist.moveFileToTop(b.data("songData").fileId); | |
| }, | |
| moveFileToTop: function (a) { | |
| turntable.playlist.queueTask(function () { | |
| var b; | |
| for (var b = 1; b < turntable.playlist.files.length; b++) { | |
| if (turntable.playlist.files[b].fileId == a) { | |
| break; | |
| } | |
| } | |
| if (b == turntable.playlist.files.length) { | |
| return; | |
| } | |
| var c = turntable.playlist.files[b]; | |
| LOG("Moving '" + c.metadata.song + "' to top"); | |
| if (turntable.playlist.currentSong && c.fileId == turntable.playlist.currentSong.fileId) { | |
| LOG("Moving a currently-playing song to top is a no-op"); | |
| return; | |
| } | |
| turntable.playlist.files.splice(b, 1); | |
| turntable.playlist.files.unshift(c); | |
| turntable.playlist.updatePlaylist(null, true); | |
| turntable.ImGCdVsOO({ | |
| api: "playlist.reorder", | |
| playlist_name: "default", | |
| index_from: b, | |
| index_to: 0 | |
| }); | |
| }); | |
| }, | |
| updateSongsByFid: function () { | |
| turntable.playlist.songsByFid = {}; | |
| for (var b = 0; b < turntable.playlist.files.length; b++) { | |
| var a = turntable.playlist.files[b]; | |
| turntable.playlist.songsByFid[a.fileId] = a; | |
| } | |
| }, | |
| updateTopSongClass: function () { | |
| var a = turntable.playlist.realQueue.find(".song"); | |
| a.removeClass("topSong").removeClass("currentSong"); | |
| a.first().addClass("topSong"); | |
| if (turntable.playlist.currentSong) { | |
| for (var b = 0; b < a.length; b++) { | |
| ASSERT(a.eq(b).data("songData"), "updateTopSongClass: songDivs " + b + " has no songData"); | |
| if (a.eq(b).data("songData").fileId == turntable.playlist.currentSong.fileId) { | |
| var c = a.eq(b); | |
| c.addClass("topSong").addClass("currentSong"); | |
| break; | |
| } | |
| } | |
| } | |
| turntable.playlist.updateDjQueueDecoration(); | |
| }, | |
| updateDjQueueDecoration: function () { | |
| var a = turntable.playlist.realQueue.find(".song"); | |
| $("#playlist .queueView .topSongRecordIcon").css("display", a.length ? "block" : "none"); | |
| var b = turntable.playlist.realQueue.find(".uploading"); | |
| $("#playlist .queueView .emptyQueue").css("display", (a.length + b.length) ? "none" : "block"); | |
| }, | |
| updatePlaylist: function (b, a) { | |
| turntable.playlist.queueAnimTask(function () { | |
| turntable.playlist.updatePlaylistImmediately(b, a); | |
| }); | |
| }, | |
| updatePlaylistImmediately: function (d, c) { | |
| if (!d) { | |
| d = turntable.playlist.files; | |
| } | |
| if (c && turntable.playlist.animTask == null && !turntable.playlist.resolvingEdits && $(".queueView").css("display") != "none") { | |
| if (typeof (c) != "number") { | |
| c = 250; | |
| } | |
| } else { | |
| c = 0; | |
| } | |
| turntable.playlist.setEditsLocked(true); | |
| turntable.playlist.beginAnimTask(); | |
| var e = new Date().getTime(); | |
| var a = turntable.playlist.animateSetup(d); | |
| LOG("animate setup took: " + (new Date().getTime() - e) + "ms"); | |
| e = new Date().getTime(); | |
| var b = turntable.playlist.doAnimate(a, c); | |
| $.when.apply(null, b).then(function () { | |
| turntable.playlist.animateComplete(); | |
| turntable.playlist.updateTopSongClass(); | |
| turntable.playlist.endAnimTask(); | |
| turntable.playlist.setEditsLocked(false); | |
| LOG("do animate took: " + (new Date().getTime() - e) + "ms"); | |
| }); | |
| return b; | |
| }, | |
| animateSetup: function (f) { | |
| if (turntable.playlist.currentSong) { | |
| f.unshift(f.pop()); | |
| } | |
| var d = f; | |
| var j = []; | |
| var g = turntable.playlist.realQueue.find(".song"); | |
| for (var c = 0, e = g.length; c < e; c++) { | |
| j.push({ | |
| fileId: $(g[c]).data("songData").fileId | |
| }); | |
| } | |
| var b = turntable.playlist.animateSetupInsertsRemoves(j, d); | |
| var a = turntable.playlist.animateSetupMoves(j, d); | |
| if (turntable.playlist.currentSong) { | |
| f.push(f.shift()); | |
| } | |
| var h = b.concat(a); | |
| turntable.playlist.files = f; | |
| turntable.playlist.updateSongsByFid(); | |
| return h; | |
| }, | |
| animateSetupInsertsRemoves: function (m, g) { | |
| var f = []; | |
| var d = turntable.playlist.updateIndexDictFromList(m, {}, "fileId"); | |
| var k = turntable.playlist.updateIndexDictFromList(g, {}, "fileId"); | |
| var a = $.extend({}, k); | |
| for (var e = 0, j = m.length; e < j; e++) { | |
| if (m[e].fileId in k) { | |
| delete a[m[e].fileId]; | |
| } else { | |
| f.push([e, "remove"]); | |
| m.splice(e, 1); | |
| e--; | |
| j--; | |
| } | |
| } | |
| var c = []; | |
| for (var b in a) { | |
| c.push(a[b]); | |
| } | |
| c.sort(function (n, i) { | |
| return n - i; | |
| }); | |
| for (var e = 0, j = c.length; e < j; e++) { | |
| var h = c[e]; | |
| var l = util.buildTree(turntable.playlist.layouts.songView(g[h])); | |
| ASSERT(h <= m.length, "warning: something bad in animateSetupInsertsRemoves"); | |
| domIndex = Math.min(m.length, h); | |
| f.push(["insert", domIndex, l]); | |
| m.splice(domIndex, 0, g[h]); | |
| } | |
| return f; | |
| }, | |
| animateSetupMoves: function (o, j) { | |
| var h = []; | |
| var c = turntable.playlist.updateIndexDictFromList(o, {}, "fileId"); | |
| var g = turntable.playlist.updateIndexDictFromList(j, {}, "fileId"); | |
| ASSERT(o.length == j.length, "generating moves, but domQueue.length != logicalQueue.length!"); | |
| for (var f = 0, l = j.length; f < l; f++) { | |
| var k = (f % 2) ? (l - ((f - 1) / 2) - 1) : (f / 2); | |
| var b = j[k].fileId; | |
| if (!(b in g) || !(b in c)) { | |
| continue; | |
| } | |
| var n = g[b]; | |
| var e = c[b]; | |
| if (n != e) { | |
| h.push([e, n]); | |
| var a = o.splice(e, 1)[0]; | |
| o.splice(n, 0, a); | |
| var m = Math.min(n, e); | |
| var d = Math.max(n, e); | |
| turntable.playlist.updateIndexDictFromList(o, c, "fileId", m, d); | |
| } | |
| } | |
| return h; | |
| }, | |
| updateIndexDictFromList: function (c, f, e, d, a) { | |
| if (!f) { | |
| f = {}; | |
| } | |
| if (!c) { | |
| return f; | |
| } | |
| if (!d) { | |
| d = 0; | |
| } | |
| if (!a) { | |
| a = c.length - 1; | |
| } | |
| for (var b = d; b <= a; b++) { | |
| if (e) { | |
| f[c[b][e]] = b; | |
| } else { | |
| f[c[b]] = b; | |
| } | |
| } | |
| return f; | |
| }, | |
| doAnimate: function (b, e) { | |
| var c = []; | |
| var h = $.makeArray($(".realPlaylist .song").not(".songAnimating")); | |
| for (var d = 0, a = b.length; d < a; d++) { | |
| var f = b[d]; | |
| var g; | |
| if (f[0] == "insert") { | |
| g = turntable.playlist.animateInsert(f[1], f[2], e, h); | |
| } else { | |
| if (f[1] == "remove") { | |
| g = turntable.playlist.animateRemove(f[0], e, h); | |
| } else { | |
| g = turntable.playlist.animateMove(f[0], f[1], e, h); | |
| } | |
| } | |
| if (g) { | |
| c.push(g); | |
| } | |
| } | |
| return c; | |
| }, | |
| animateInsert: function (d, b, c, g) { | |
| if (d > g.length) { | |
| return false; | |
| } else { | |
| var e = c ? $(b).hide() : $(b); | |
| if (d == 0 || g.length == 0) { | |
| turntable.playlist.realQueue.prepend(e); | |
| } else { | |
| if (d == g.length) { | |
| var f = $(g[d - 1]); | |
| f.after(e); | |
| } else { | |
| var f = $(g[d]); | |
| f.before(e); | |
| } | |
| } | |
| g.splice(d, 0, e); | |
| if (c) { | |
| var a = $.Deferred(); | |
| e.slideDown(c, a.resolve); | |
| return a.promise(); | |
| } else { | |
| return null; | |
| } | |
| } | |
| }, | |
| animateRemove: function (c, b, e) { | |
| if (c > e.length - 1) { | |
| return false; | |
| } else { | |
| var d = $(e[c]); | |
| e.splice(c, 1); | |
| if (b) { | |
| var a = $.Deferred(); | |
| d.slideUp(b, function () { | |
| $(this).remove(); | |
| a.resolve(); | |
| }); | |
| return a.promise(); | |
| } else { | |
| d.remove(); | |
| return null; | |
| } | |
| } | |
| }, | |
| animateMove: function (k, f, b, a) { | |
| if (k > a.length - 1 || f > a.length - 1) { | |
| return false; | |
| } else { | |
| var c = $(a[k]); | |
| var h = c.position(); | |
| var d = $(a[f]); | |
| var e = d.position(); | |
| a.splice(f, 0, a.splice(k, 1)[0]); | |
| var j = c.clone(true).hide().css({ | |
| visibility: "hidden" | |
| }); | |
| if (f - k < 0) { | |
| d.before(j); | |
| } else { | |
| d.after(j); | |
| } | |
| if (b) { | |
| var g = c.clone(false).css({ | |
| position: "absolute", | |
| top: h.top + "px" | |
| }).appendTo(c.parent()).animate({ | |
| top: e.top + "px" | |
| }, b, function () { | |
| $(this).remove(); | |
| }); | |
| c.css({ | |
| visibility: "hidden" | |
| }).slideUp(b, function () { | |
| $(this).remove(); | |
| }); | |
| var i = $.Deferred(); | |
| j.slideDown(b, function () { | |
| $(this).css({ | |
| visibility: "visible" | |
| }); | |
| i.resolve(); | |
| }); | |
| return i.promise(); | |
| } else { | |
| c.remove(); | |
| j.show().css({ | |
| visibility: "visible" | |
| }); | |
| return null; | |
| } | |
| } | |
| }, | |
| animateComplete: function () { | |
| var a = turntable.playlist.realQueue; | |
| var b = a.find(".song"); | |
| b.removeClass("nth-child-even").filter(":even").addClass("nth-child-even"); | |
| }, | |
| verifyQueue: function () { | |
| var e = turntable.playlist.files.slice(0); | |
| if (turntable.playlist.currentSong) { | |
| e.unshift(e.pop()); | |
| } | |
| var h = turntable.playlist.realQueue.find(".song"); | |
| var b = true; | |
| for (var d = 0, a = h.length; d < a; d++) { | |
| var c = d; | |
| var g = $(h[d]).data("songData").fileId; | |
| var f = e[d].fileId; | |
| if (g != f) { | |
| b = false; | |
| } | |
| if (!b) { | |
| LOG(d + ": " + g + " ?= " + f); | |
| } | |
| } | |
| if (!b) { | |
| LOG("Queue out of sync!"); | |
| } else { | |
| LOG("Queue OK."); | |
| } | |
| }, | |
| testAnimate: function (h, g, a, d) { | |
| if (h == null) { | |
| h = 5; | |
| } | |
| if (g == null) { | |
| g = 2; | |
| } | |
| if (a == null) { | |
| a = 5; | |
| } | |
| if (!d) { | |
| d = 0; | |
| } | |
| var c = turntable.playlist.files.slice(0); | |
| var e = c.slice(0); | |
| var j = function () { | |
| return Math.floor(Math.random() * e.length); | |
| }; | |
| for (var f = 0; f < h; f++) { | |
| e.splice(j(), 0, { | |
| fileId: Math.random() + "", | |
| metadata: { | |
| song: "test", | |
| artist: "test", | |
| length: "555" | |
| } | |
| }); | |
| } | |
| for (var f = 0; f < g; f++) { | |
| e.splice(j(), 1); | |
| } | |
| for (var f = 0; f < a; f++) { | |
| e.splice(j(), 0, e.splice(j(), 1)[0]); | |
| } | |
| var b = turntable.playlist; | |
| LOG("testQueue:" + JSON.stringify(e)); | |
| promises = b.updatePlaylistImmediately(e, d); | |
| $.when.apply(null, promises).then(function () { | |
| b.verifyQueue(); | |
| LOG("origQueue:" + JSON.stringify(c)); | |
| promises = b.updatePlaylistImmediately(c, d); | |
| $.when.apply(null, promises).then(function () { | |
| b.verifyQueue(); | |
| }); | |
| }); | |
| }, | |
| sortableEnabled: false, | |
| sortableEnableTimer: null, | |
| setSortableEnabled: function (a) { | |
| if (a) { | |
| if (turntable.playlist.sortableEnableTimer == null) { | |
| if (turntable.playlist.sortableEnabled) { | |
| turntable.playlist.realQueue.sortable("destroy"); | |
| } | |
| turntable.playlist.sortableEnableTimer = setTimeout(function () { | |
| var b = { | |
| axis: "y", | |
| items: ".song:not(.currentSong)", | |
| start: turntable.playlist.songSortStarted, | |
| change: turntable.playlist.songSortChanged, | |
| update: turntable.playlist.songSortUpdated | |
| }; | |
| turntable.playlist.realQueue.sortable(b); | |
| turntable.playlist.sortableEnableTimer = null; | |
| }, 100); | |
| } | |
| } else { | |
| if (turntable.playlist.sortableEnabled) { | |
| if (turntable.playlist.sortableEnableTimer) { | |
| clearTimeout(turntable.playlist.sortableEnableTimer); | |
| turntable.playlist.sortableEnableTimer = null; | |
| } else { | |
| if ($(".song.ui-sortable-helper").length) { | |
| turntable.playlist.sortableEnabled = false; | |
| turntable.playlist.realQueue.sortable("cancel"); | |
| } | |
| turntable.playlist.realQueue.sortable("destroy"); | |
| } | |
| } | |
| } | |
| turntable.playlist.sortableEnabled = a; | |
| }, | |
| songSortStarted: function (c, d) { | |
| var a = d.item.data("songData").fileId; | |
| for (var b = 0; b < turntable.playlist.files.length; b++) { | |
| if (turntable.playlist.files[b].fileId == a) { | |
| turntable.playlist.songSortSrcIndex = b; | |
| break; | |
| } | |
| } | |
| }, | |
| songSortChanged: function () { | |
| turntable.playlist.updateTopSongClass(); | |
| }, | |
| songSortUpdated: function (b, d) { | |
| if (!turntable.playlist.sortableEnabled) { | |
| return; | |
| } | |
| turntable.playlist.songSortChanged(); | |
| var a = turntable.playlist.songSortSrcIndex; | |
| var c = turntable.playlist.realQueue.find(".song").index(d.item); | |
| ASSERT(c >= 0, "Sortable song not found"); | |
| if (turntable.playlist.currentSong) { | |
| ASSERT(c != 0, "Current song not sortable"); | |
| c -= 1; | |
| } | |
| turntable.ImGCdVsOO({ | |
| api: "playlist.reorder", | |
| playlist_name: "default", | |
| index_from: a, | |
| index_to: c | |
| }, function (f) { | |
| var e = turntable.playlist.files.splice(a, 1)[0]; | |
| turntable.playlist.files.splice(c, 0, e); | |
| }); | |
| setTimeout(function () { | |
| var e = turntable.playlist.realQueue.find(".song"); | |
| e.removeClass("nth-child-even").filter(":even").addClass("nth-child-even"); | |
| }, 0); | |
| }, | |
| setPlaylistHeight: function (a) { | |
| if (a === null || a === undefined) { | |
| a = 351; | |
| } else { | |
| if (a < 25) { | |
| a = 25; | |
| } | |
| } | |
| $(turntable.playlist.nodes.root).css({ | |
| height: a | |
| }); | |
| $(turntable.playlist.nodes.root).find(".mainPane").css({ | |
| height: a - 25 | |
| }); | |
| $(turntable.playlist.nodes.root).find(".queueView .songlist").css({ | |
| height: Math.max(a - 93, 55) | |
| }); | |
| $(turntable.playlist.nodes.root).find(".searchView .songlist").css({ | |
| height: Math.max(a - 95, 55) | |
| }); | |
| return a; | |
| } | |
| }; | |
| turntable.playlist.layouts = { | |
| playlistView: ["div#playlist##root.playlist-container", | |
| {}, ["div.black-right-header", | |
| {}, ["img.icon", | |
| { | |
| src: "https://s3.amazonaws.com/static.turntable.fm/images/room/music_icon.png" | |
| }], | |
| ["div.header-text", | |
| {}, "My DJ Queue"] | |
| ], | |
| ["div.panes", | |
| {}, ["div#dropZone", | |
| {}, ["div#dropZoneText.centeredPane", | |
| {}, ["img", | |
| { | |
| src: "http://static.turntable.fm/images/playlist/move_big.png" | |
| }], | |
| ["div#dropZoneMainText", "Drop songs here"], | |
| ["div#dropZoneSmallText", "to upload them to your queue"] | |
| ], ], | |
| ["div.queueView.mainPane", | |
| {}, ["div.addSongsButton"], | |
| ["form.search.playlistSearch", | |
| { | |
| event: { | |
| submit: function () { | |
| return false; | |
| } | |
| } | |
| }, ["input", | |
| { | |
| type: "text", | |
| placeholder: "filter songs in queue", | |
| event: { | |
| keyup: turntable.playlist.searchKeyUp | |
| } | |
| }], | |
| ["div.mag-glass", | |
| { | |
| event: { | |
| click: turntable.playlist.searchClear | |
| } | |
| }] | |
| ], | |
| ["div.resultsLabel", | |
| {}, "Results for '", ["span.searchTermLabel"], "':"], | |
| ["div.songlist", | |
| {}, ["div.queue.realPlaylist"], | |
| ["div.uploads", | |
| {}, ["div.processing", | |
| { | |
| style: { | |
| display: "none" | |
| } | |
| }, ["div.loader"], | |
| ["div.text"] | |
| ]], | |
| ["div.emptyQueue", | |
| { | |
| style: { | |
| display: "none" | |
| } | |
| }, ["div.text", "Search or upload music to create your DJ queue."], | |
| ["div.text", "Click 'Play Music' and your topmost song will play during your turn."] | |
| ] | |
| ] | |
| ], | |
| ["div.addSongsView.centeredPane", | |
| { | |
| style: { | |
| display: "none" | |
| } | |
| }, ["div.searchText", "Search Turntable music library"], | |
| ["form.search.songSearch", | |
| { | |
| event: { | |
| submit: turntable.playlist.submitSearchQuery | |
| } | |
| }, ["input", | |
| { | |
| type: "text", | |
| placeholder: "track, artist, album name", | |
| event: { | |
| keyup: turntable.playlist.searchKeyUp | |
| } | |
| }], | |
| ["div.mag-glass", | |
| { | |
| event: { | |
| click: turntable.playlist.searchClear | |
| } | |
| }] | |
| ], | |
| ["div.orText", "\u2013 or \u2013"], | |
| ["div.upload-button", ["div#plupload", ["div#pickfiles"]]], | |
| ["div.drop-message", | |
| {}, ["img", | |
| { | |
| src: "http://static.turntable.fm/images/playlist/move_small.png" | |
| }], | |
| ["span", "You can also drop songs here"], ], | |
| ["div.cancelButton"], | |
| ["div.poweredBy"] | |
| ], | |
| ["div.searchView.mainPane", | |
| { | |
| style: { | |
| display: "none" | |
| } | |
| }, ["form.input.songSearch", | |
| { | |
| event: { | |
| submit: turntable.playlist.submitSearchQuery | |
| } | |
| }, ["div.search", | |
| {}, ["input", | |
| { | |
| type: "text", | |
| placeholder: "song, artist, or album", | |
| event: { | |
| keyup: turntable.playlist.searchKeyUp | |
| } | |
| }], | |
| ["div.mag-glass", | |
| { | |
| event: { | |
| click: turntable.playlist.searchClear | |
| } | |
| }] | |
| ], | |
| ["div.searchHeader", | |
| {}, ["div.numFilesAdded"], | |
| ["div.doneButton"] | |
| ] | |
| ], | |
| ["div.songlist", | |
| {}, ["div.separator.separator-in-queue", | |
| {}, ["div.text", "Results from my queue"]], | |
| ["div.queue.inMyQueue"], | |
| ["div.separator.separator-in-library", | |
| {}, ["div.text", "Results from Turntable library"]], | |
| ["div.queue.externQueue"], | |
| ["div.emptySearchResults"], | |
| ["div.loadMoreSearchResults", | |
| {}, ["div.text", | |
| {}, "Loading more results..."]] | |
| ], | |
| ["div.searchingBlocker", | |
| {}, ["div.text", "searching..."], | |
| ["br"], | |
| ["img", | |
| { | |
| src: "https://s3.amazonaws.com/static.turntable.fm/images/playlist/bigloader.gif" | |
| }] | |
| ] | |
| ], ], ], | |
| songView: function (b) { | |
| var a = b.metadata; | |
| return ["div.song" + (dmca.showPreview(b) ? "" : ".noPreview"), { | |
| data: { | |
| songData: b | |
| }, | |
| event: { | |
| mouseover: function () { | |
| $(this).children(".remove").show(); | |
| }, | |
| mouseout: function () { | |
| $(this).children(".remove").hide(); | |
| } | |
| } | |
| }, ["div.progress"], ["div.goTop", | |
| { | |
| event: { | |
| click: turntable.playlist.moveSongToTopClicked | |
| } | |
| }], ["div.playSample", | |
| { | |
| event: { | |
| click: turntable.playlist.previewPlay | |
| } | |
| }], ["div.pauseSample", | |
| { | |
| event: { | |
| click: turntable.playlist.previewStop | |
| } | |
| }], ["div.title", | |
| { | |
| title: a.song | |
| }, ["div.titlediv", | |
| {}, | |
| a.song], | |
| ["a.buy", | |
| { | |
| event: { | |
| click: turntable.playlist.buySong | |
| } | |
| }] | |
| ], ["div.details", | |
| { | |
| title: a.artist + " - " + turntable.playlist.humanDuration(a.length) | |
| }, | |
| a.artist + " - " + turntable.playlist.humanDuration(a.length)], ["div.remove", | |
| { | |
| event: { | |
| click: turntable.playlist.removeSongClicked | |
| } | |
| }]]; | |
| }, | |
| searchedSongView: function (b) { | |
| var a = b.metadata; | |
| return ["div.song", { | |
| data: { | |
| songData: b | |
| } | |
| }, ["div.progress"], ["div.addSong", | |
| { | |
| event: { | |
| click: turntable.playlist.addSearchResult | |
| } | |
| }], ["div.goTop", | |
| { | |
| event: { | |
| click: turntable.playlist.addSearchResult | |
| } | |
| }], ["div.checkmark", | |
| { | |
| event: { | |
| click: turntable.playlist.remSearchResult | |
| }, | |
| style: { | |
| display: "none" | |
| } | |
| }], ["div.playSample", | |
| { | |
| style: { | |
| display: (dmca.showPreview(b) ? "block" : "none") | |
| }, | |
| event: { | |
| click: turntable.playlist.previewPlay | |
| } | |
| }], ["div.pauseSample", | |
| { | |
| event: { | |
| click: turntable.playlist.previewStop | |
| } | |
| }], ["div.title", | |
| { | |
| title: a.song | |
| }, ["div.titlediv", | |
| {}, | |
| a.song], | |
| ["a.buy", | |
| { | |
| event: { | |
| click: turntable.playlist.buySong | |
| } | |
| }] | |
| ], ["div.details", | |
| { | |
| title: a.artist + " - " + turntable.playlist.humanDuration(a.length) | |
| }, | |
| a.artist + " - " + turntable.playlist.humanDuration(a.length)], ["div.addedToQueueTop", | |
| { | |
| style: { | |
| display: "none" | |
| } | |
| }, ["div.text", "Added to top of queue"]]]; | |
| }, | |
| uploadingView: function (a) { | |
| return ["div.uploading", {}, ["div.progress"], ["div.text", | |
| {}, | |
| a], ["div.details", | |
| {}, "Uploading..."]]; | |
| } | |
| }; | |
| var welcome = { | |
| elements: {}, | |
| init: function () { | |
| welcome.view = util.buildTree(welcome.layouts.indexPage, welcome.elements); | |
| welcome.roomList = new RoomList(); | |
| $(welcome.elements.roomListContainer).append(welcome.roomList.view); | |
| $(welcome.elements.userauth).append($("#userauth")); | |
| util.QIQOxBrdu(this); | |
| }, | |
| createRoomShow: function () { | |
| util.showOverlay(util.buildTree(welcome.layouts.createRoomView)); | |
| $("input.roomName").focus(); | |
| $(".roomtype-option").click(function () { | |
| $(this).find(".radio-input").attr("checked", true); | |
| $(".roomtype-option").removeClass("roomtype-option-on"); | |
| $(this).addClass("roomtype-option-on"); | |
| }); | |
| }, | |
| createRoomSubmit: function () { | |
| var e = $(".createRoom"); | |
| var b = $.trim(e.find(".roomName")[0].value); | |
| if (!b) { | |
| return; | |
| } | |
| var d = Number(e.find("select")[0].value); | |
| var c = { | |
| api: "room.create", | |
| room_name: b, | |
| max_djs: d | |
| }; | |
| if (!e.find(".public")[0].checked) { | |
| c.privacy = "unlisted"; | |
| } | |
| var a = e.find(".djThreshold").val(); | |
| a = parseInt(a); | |
| if (a) { | |
| c.djthreshold = a; | |
| } | |
| turntable.ImGCdVsOO(c, welcome.createRoomDone); | |
| util.hideOverlay(); | |
| }, | |
| createRoomDone: function (a) { | |
| turntable.setPage(a.shortcut, a.roomid); | |
| }, | |
| advancedOptions: function () { | |
| var a = $(".overlay div.advanced"); | |
| if (a.css("display") == "none") { | |
| a.show(); | |
| $(".overlay div.show-advanced").text("close advanced options"); | |
| } else { | |
| a.hide(); | |
| $(".overlay div.show-advanced").text("advanced options"); | |
| } | |
| }, | |
| cleanup: function () { | |
| $("#offstage").append($("#userauth")); | |
| welcome.roomList.cleanup(); | |
| welcome.roomList = null; | |
| } | |
| }; | |
| welcome.layouts = { | |
| indexPage: ["div", | |
| {}, ["div#header", | |
| {}, ["div##userauth.userauthContainer"]], | |
| ["div#content", | |
| {}, ["p.centeredImage", | |
| {}, ["img", | |
| { | |
| src: "https://s3.amazonaws.com/static.turntable.fm/images/logo.png" | |
| }]], | |
| ["h1", | |
| {}, "Play music together."], | |
| ["p.centeredButtons", ["a.create-btn", | |
| { | |
| event: { | |
| click: welcome.createRoomShow | |
| } | |
| }], | |
| ["a.random-btn", | |
| { | |
| event: { | |
| click: turntable.randomRoom | |
| } | |
| }] | |
| ], | |
| ["br"], | |
| ["br"], | |
| ["div##roomListContainer"] | |
| ] | |
| ], | |
| createRoomView: ["div.createRoom.modal", | |
| {}, ["div.close-x", | |
| { | |
| event: { | |
| click: util.hideOverlay | |
| } | |
| }], | |
| ["h1", "Create Room"], | |
| ["br"], "Room name:", ["br"], | |
| ["input.roomName.text"], | |
| ["br"], | |
| ["br"], "Set my room as:", ["div.type", | |
| {}, ["div.roomtype", | |
| {}, ["div.roomtype-option.roomtype-option-on", | |
| {}, "Public", ["div.radios", | |
| {}, ["input.radio-input.public", | |
| { | |
| type: "radio", | |
| name: "type", | |
| value: "public", | |
| checked: true | |
| }]], | |
| ["div.tip", | |
| {}, "(anyone can join)"] | |
| ]], | |
| ["div.roomtype", | |
| {}, ["div.roomtype-option", | |
| {}, "Unlisted", ["div.radios", | |
| {}, ["input.radio-input", | |
| { | |
| type: "radio", | |
| name: "type", | |
| value: "unlisted" | |
| }]], | |
| ["div.tip", | |
| {}, "(only people with the link can join)"] | |
| ]], ], | |
| ["div.advanced", | |
| {}, "Let up to ", ["select", | |
| { | |
| name: "maxdjs" | |
| }, ["option", | |
| { | |
| value: "1" | |
| }, "1"], | |
| ["option", | |
| { | |
| value: "2" | |
| }, "2"], | |
| ["option", | |
| { | |
| value: "3" | |
| }, "3"], | |
| ["option", | |
| { | |
| value: "4" | |
| }, "4"], | |
| ["option", | |
| { | |
| value: "5", | |
| selected: "selected" | |
| }, "5"] | |
| ], " people DJ", ["br"], | |
| ["br"], "Require ", ["input.djThreshold.text", | |
| { | |
| value: "0", | |
| size: 3 | |
| }], " points to DJ", ["br"], | |
| ["br"], ], | |
| ["div.show-advanced", | |
| { | |
| event: { | |
| click: welcome.advancedOptions | |
| } | |
| }, "advanced options"], | |
| ["div.create-room.centered-button", | |
| { | |
| event: { | |
| click: welcome.createRoomSubmit | |
| } | |
| }], | |
| ["br"], | |
| ["p.cancel", | |
| {}, "or ", ["span.no-thanks", | |
| { | |
| event: { | |
| click: util.hideOverlay | |
| } | |
| }, "cancel"]] | |
| ] | |
| }; | |
| var Room = Class.extend({ | |
| description: "", | |
| name: "", | |
| songsDjed: [], | |
| users: {}, | |
| djIds: [], | |
| timers: {}, | |
| ignoredUsers: [], | |
| chatHistory: [], | |
| historyLength: 3, | |
| lastChatTime: 0, | |
| totalTimeDebt: 0, | |
| intervalMultiplier: 1, | |
| debtViolations: 0, | |
| chatThrottlingThreshold: 100, | |
| moderators: [], | |
| pmWindows: {}, | |
| hasLoadedFavorites: false, | |
| isFavorite: false, | |
| suggestedName: false, | |
| streamStarted: false, | |
| init: function (b) { | |
| this.roomId = b; | |
| turntable.setSocketAddr(turntable.getHashedAddr(this.roomId)); | |
| this.selfId = turntable.user.id; | |
| this.selfNewDjPoints = null; | |
| for (var a in this) { | |
| if (typeof this[a] == "function") { | |
| this[a] = $.proxy(this[a], this); | |
| } | |
| } | |
| this.loadLayout(); | |
| turntable.showWelcome(); | |
| this.initFavorite(); | |
| turntable.addEventListener("auth", this.authListener); | |
| turntable.addEventListener("userinfo", this.userInfoListener); | |
| turntable.addEventListener("message", this.messageListener); | |
| turntable.addEventListener("reconnect", this.reconnectListener); | |
| httpStream.setCallback(this.httpStreamListener); | |
| this.loadRoomState(); | |
| this.gyRKeBhrikZtX = function (c) { | |
| if (this.currentSong) { | |
| var f = $.sha1(this.roomId + c + this.currentSong._id); | |
| var d = $.sha1(Math.random() + ""); | |
| var e = $.sha1(Math.random() + ""); | |
| turntable.ImGCdVsOO({ | |
| api: "room.vote", | |
| roomid: this.roomId, | |
| val: c, | |
| vh: f, | |
| th: d, | |
| ph: e | |
| }); | |
| } | |
| }; | |
| if (b != "4f594a82a3f751581000eb80") { | |
| turntable.addIdleListener(4 * 3600, this.checkIdle); | |
| } | |
| util.QIQOxBrdu(this); | |
| window.onbeforeunload = this.unloadWarning; | |
| }, | |
| loadRoomStateRun: 0, | |
| loadRoomState: function () { | |
| var b = $.Deferred(); | |
| var c = { | |
| api: "room.info", | |
| roomid: this.roomId | |
| }; | |
| if ($("#room-info-tab .songlog").children().size() > 0) { | |
| c.extended = false; | |
| } | |
| if (c.extended) { | |
| if (util.now() / 1000 - this.loadRoomStateRun < 2) { | |
| LOG("THROTTLED LOADROOMSTATE"); | |
| return; | |
| } | |
| this.loadRoomStateRun = util.now() / 1000; | |
| } | |
| var d = $.when(turntable.ImGCdVsOO(c)); | |
| var a = this; | |
| d.done(function (j) { | |
| var h = j.room; | |
| $(document).trigger("add_sticker_placements", h.metadata.sticker_placements); | |
| if (a.resyncStream) { | |
| a.setCurrentSong(h.metadata); | |
| b.resolve(); | |
| return; | |
| } | |
| var l = j.users; | |
| a.clearRoomUsers(); | |
| a.maxDjs = h.metadata.max_djs; | |
| a.setupRoom(h); | |
| var k = false; | |
| for (var f = 0; f < l.length; f++) { | |
| a.addUser(l[f], true); | |
| if (l[f].userid == a.selfId) { | |
| k = true; | |
| } | |
| } | |
| for (var f = 0; f < h.metadata.djs.length; f++) { | |
| a.addDj(h.metadata.djs[f]); | |
| } | |
| a.setCurrentSong(h.metadata); | |
| if (!k) { | |
| var g = { | |
| api: "room.register", | |
| roomid: a.roomId | |
| }; | |
| if (a.invisibooted) { | |
| g.invisibooted = true; | |
| a.invisibooted = false; | |
| } | |
| var e = turntable.ImGCdVsOO(g, function (i) { | |
| if (!i.success) { | |
| a.lobbyRedirect(i.errno); | |
| return; | |
| } | |
| if (a.reconnecting) { | |
| turntable.socketDumpLog(); | |
| } | |
| a.updateVotes(h.metadata, false); | |
| }); | |
| e.then(b.resolve, b.resolve); | |
| } else { | |
| a.updateVotes(h.metadata, false); | |
| b.resolve(); | |
| } | |
| a.updateGuestList(); | |
| }); | |
| d.fail(function (e) { | |
| turntable.showAlert("The requested room could not found: " + e.err); | |
| b.reject(); | |
| window.location.href = "/lobby"; | |
| }); | |
| return b.promise(); | |
| }, | |
| messageListener: function (d) { | |
| if (d.hasOwnProperty("msgid")) { | |
| return; | |
| } | |
| if (d.command == "speak") { | |
| this.showChatMessage(d.userid, d.name, d.text); | |
| } else { | |
| if (d.command == "newsong") { | |
| if (this.vWsUvfbJZlgIXR.time_left > 10) { | |
| turntablePlayer.playEphemeral(UI_SOUND_ENDSONG, true); | |
| } | |
| this.setCurrentSong(d.room.metadata); | |
| this.addToSongLog(d.room.metadata.current_song); | |
| } else { | |
| if (d.command == "nosong") { | |
| this.setCurrentSong(null); | |
| } else { | |
| if (d.command == "registered") { | |
| this.addUser(d.user[0]); | |
| } else { | |
| if (d.command == "deregistered") { | |
| this.removeUser(d.user[0].userid); | |
| } else { | |
| if (d.command == "update_user") { | |
| this.updateUser(d); | |
| } else { | |
| if (d.command == "add_dj") { | |
| var a = d.user[0]; | |
| a.fanof = ($.inArray(a.userid, turntable.user.fanOf) != -1); | |
| this.users[a.userid] = a; | |
| this.addDj(a.userid); | |
| if (this.djIds.length > 1 && turntablePlayer.TklSijwTrHIBd) { | |
| turntablePlayer.qJenkTJDWhRlS(false); | |
| } | |
| } else { | |
| if (d.command == "rem_dj") { | |
| var c = d.user[0].userid; | |
| this.removeDj(c); | |
| if (d.modid) { | |
| var f = (d.modid == 1 ? " was booed off the stage." : " was kindly escorted off the stage by " + this.users[d.modid].name + "."); | |
| this.appendChatMessage(c, this.users[c].name, f, "action"); | |
| } | |
| } else { | |
| if (d.command == "update_votes") { | |
| this.updateVotes(d.room.metadata, true); | |
| } else { | |
| if (d.command == "new_moderator") { | |
| if ($.inArray(d.userid, this.moderators) == -1) { | |
| this.moderators.push(d.userid); | |
| if (d.userid == this.selfId) { | |
| this.showRoomTip("You are now a moderator of this room. Moderators can boot people out of the room who act inappropriately. Thanks for your help.", 10); | |
| this.vWsUvfbJZlgIXR.add_moderator(this.moderators); | |
| $("#room-info-tab .edit-description-btn").show(); | |
| } | |
| } | |
| } else { | |
| if (d.command == "rem_moderator") { | |
| var b = $.inArray(d.userid, this.moderators); | |
| if (b != -1) { | |
| this.moderators.splice(b, 1); | |
| if (d.userid == this.selfId) { | |
| this.showRoomTip("You are no longer a moderator of this room.", 10); | |
| this.vWsUvfbJZlgIXR.rem_moderator(this.moderators); | |
| $("#room-info-tab .edit-description-btn").hide(); | |
| } | |
| } | |
| } else { | |
| if (d.command == "booted_user") { | |
| if (d.userid == this.selfId) { | |
| this.gotBooted(d.reason, this.users[d.modid].name); | |
| } else { | |
| var e = " was booted from the room by " + this.users[d.modid].name + "."; | |
| if (d.reason) { | |
| e += " Reason: " + d.reason; | |
| } | |
| this.appendChatMessage(d.userid, this.users[d.userid].name, e, "action"); | |
| } | |
| } else { | |
| if (d.command == "dmca_error") { | |
| var e = (d.type == "song" ? "We had to skip your song because our music licenses force us to limit the number of times an artist can be played each hour in a room. Playing the next song in your list that is in compliance." : "We had to skip your turn because our music licenses force us to limit the number of times an artist can be played each hour in a room. Add some new artists to your playlist or try joining a new room."); | |
| this.showRoomTip("Bummer! " + e, 10); | |
| } else { | |
| if (d.command == "update_room") { | |
| this.updateRoomDesc(d); | |
| } else { | |
| if (d.command == "snagged") { | |
| this.handleSnagged(d); | |
| } else { | |
| if (d.command == "pmmed") { | |
| this.handlePM(d, false); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| authListener: function () { | |
| if (turntable.user.id != this.selfId) { | |
| var a = this; | |
| turntable.ImGCdVsOO({ | |
| api: "room.register", | |
| roomid: this.roomId | |
| }, function (b) { | |
| if (!b.success) { | |
| a.lobbyRedirect(b.errno); | |
| return; | |
| } | |
| ASSERT(!a.isDj(), "Guest DJ tried to login!"); | |
| a.removeUser(a.selfId); | |
| a.selfId = turntable.user.id; | |
| a.vWsUvfbJZlgIXR.myuserid = a.selfId; | |
| }); | |
| } | |
| }, | |
| userInfoListener: function () { | |
| if (!this.users) { | |
| return; | |
| } | |
| var a; | |
| for (var c in this.users) { | |
| a = this.users[c]; | |
| a.oldFanof = a.fanof; | |
| a.fanof = false; | |
| } | |
| for (var b = 0; b < turntable.user.fanOf.length; b++) { | |
| a = this.users[turntable.user.fanOf[b]]; | |
| if (a) { | |
| a.fanof = true; | |
| } | |
| } | |
| if (!this.vWsUvfbJZlgIXR) { | |
| return; | |
| } | |
| for (var c in this.users) { | |
| a = this.users[c]; | |
| if (a.oldFanof != a.fanof) { | |
| this.refreshRoomUser(a); | |
| } | |
| } | |
| this.vWsUvfbJZlgIXR[(this.isMod() ? "add" : "rem") + "_moderator"](this.moderators); | |
| }, | |
| reconnectListener: function () { | |
| LOG("Reconnected to server"); | |
| this.reconnecting = true; | |
| var b = this.isDj(); | |
| var a = this; | |
| this.loadRoomState().done(function () { | |
| a.reconnecting = false; | |
| if (b && !a.isDj()) { | |
| turntable.showAlert("You stopped DJing because you were disconnected for too long."); | |
| } | |
| }); | |
| }, | |
| httpStreamListener: function (a) { | |
| if (a == "resync") { | |
| this.scheduleResyncStream(); | |
| } else { | |
| if (a == "streamstart") { | |
| var b = this.currentSong.metadata; | |
| this.vWsUvfbJZlgIXR.newsong($.inArray(this.currentDj, this.djIds), b.artist, b.song, Math.round(this.currentSongEndTime - util.now() / 1000)); | |
| if (!this.streamStarted) { | |
| this.streamStarted = true; | |
| turntablePlayer.qJenkTJDWhRlS(false); | |
| if (this.currentDj == this.selfId && this.numDjs() == 1) { | |
| this.timers.TklSijwTrHIB = setTimeout(this.TklSijwTrHIB, 30 * 1000); | |
| } | |
| this.logSongRequest(); | |
| } | |
| } | |
| } | |
| }, | |
| logSongRequest: function () { | |
| var a = { | |
| api: "room.log_song_request", | |
| roomid: this.roomId, | |
| song: this.currentSong | |
| }; | |
| turntable.ImGCdVsOO(a, function (b) { | |
| if (b.success) { | |
| LOG("logged song request"); | |
| } | |
| }); | |
| }, | |
| scheduleResyncStream: function (d) { | |
| var b = this; | |
| var a = httpStream.isPlaying(); | |
| var c = function () { | |
| if (a) { | |
| b.vWsUvfbJZlgIXR.loadingsong(); | |
| } | |
| b.resyncStream = true; | |
| b.loadRoomState(); | |
| }; | |
| if (!d) { | |
| c(); | |
| } else { | |
| setTimeout(c, d); | |
| } | |
| }, | |
| vWsUvfbJZlgIXRCallback: function (d, f) { | |
| if (d == "upvote") { | |
| if (turntable.HBQLNPd() < 15000) { | |
| this.gyRKeBhrikZtX("up"); | |
| } | |
| } else { | |
| if (d == "downvote") { | |
| if (turntable.HBQLNPd() < 15000) { | |
| this.gyRKeBhrikZtX("down"); | |
| } | |
| } | |
| } | |
| if (d == "become_dj") { | |
| if (turntable.HBQLNPd() < 15000) { | |
| this.mhApMeJHYlYBbz(); | |
| } | |
| } else { | |
| if (d == "stop_song") { | |
| turntable.ImGCdVsOO({ | |
| api: "room.stop_song", | |
| roomid: this.roomId | |
| }); | |
| if (this.currentDj == this.selfId && this.songsDjed.length > 0 && this.songsDjed[this.songsDjed.length - 1].fileId == this.currentSong._id) { | |
| this.songsDjed.pop(); | |
| } | |
| } else { | |
| if (d == "rem_dj") { | |
| this.quitDj(); | |
| } else { | |
| if (d == "remove_dj") { | |
| turntable.ImGCdVsOO({ | |
| api: "room.rem_dj", | |
| roomid: this.roomId, | |
| djid: f | |
| }); | |
| } else { | |
| if (d == "set_volume") { | |
| turntablePlayer.setVolume(f); | |
| } else { | |
| if (d == "boot_user") { | |
| var b = this; | |
| util.showOverlay(util.buildTree(Room.layouts.bootConfirmView(this.users[f].name, function () { | |
| var h = { | |
| api: "room.boot_user", | |
| roomid: b.roomId, | |
| target_userid: f | |
| }; | |
| var i = $.trim($(".bootReasonField").val()); | |
| if (i && i != "(optional)") { | |
| h.reason = i; | |
| } | |
| turntable.ImGCdVsOO(h); | |
| util.hideOverlay(); | |
| var g = $(turntable.NLcgRGlUht.nodes.roomName).html(); | |
| _gaq.push(["_trackEvent", "room", "boot", g + "--" + turntable.user.displayName]); | |
| }))); | |
| } else { | |
| if (d == "add_song") { | |
| $(this.view).find(".addSongOverlay").remove(); | |
| $(this.view).append(util.buildTree(Room.layouts.addSongOverlay(this))); | |
| } else { | |
| if (d == "add_song_to") { | |
| this.addSong(f); | |
| } else { | |
| if (d == "invite_dj") { | |
| this.facebookSendDialog(); | |
| } else { | |
| if (d == "become_fan") { | |
| var a = this.users[f]; | |
| if (a) { | |
| a.fanof = true; | |
| } | |
| turntable.ImGCdVsOO({ | |
| api: "user.become_fan", | |
| djid: f | |
| }, function (g) { | |
| if (g && g.success) { | |
| turntable.buddyList.lookupUser(f, function (h) { | |
| h.roomName = turntable.NLcgRGlUht.name; | |
| turntable.buddyList.addBuddy(h); | |
| }); | |
| if ($.inArray(f, turntable.user.fanOf) == -1) { | |
| turntable.user.fanOf.push(f); | |
| } | |
| } | |
| }); | |
| } else { | |
| if (d == "remove_fan") { | |
| var a = this.users[f]; | |
| if (a) { | |
| a.fanof = false; | |
| } | |
| turntable.ImGCdVsOO({ | |
| api: "user.remove_fan", | |
| djid: f | |
| }, function (h) { | |
| if (h && h.success) { | |
| turntable.buddyList.removeBuddy(f); | |
| var g = turntable.user.fanOf.indexOf(f); | |
| if (g >= 0) { | |
| turntable.user.fanOf.splice(g, 1); | |
| } | |
| } | |
| }); | |
| } else { | |
| if (d == "profile") { | |
| var b = this; | |
| var e = $.Deferred(); | |
| var c = $.Deferred(); | |
| $.when(e, c).done(b.setupProfileOverlay); | |
| turntable.ImGCdVsOO({ | |
| api: "user.get_profile", | |
| userid: f | |
| }, function (g) { | |
| e.resolve(g); | |
| }); | |
| turntable.ImGCdVsOO({ | |
| api: "sticker.get_placements", | |
| userid: f | |
| }, function (h) { | |
| var g = {}; | |
| g[f] = h.placements; | |
| $(document).trigger("add_sticker_placements", g); | |
| c.resolve(h); | |
| }); | |
| } else { | |
| if (d == "add_moderator") { | |
| var b = this; | |
| util.showOverlay(util.buildTree(Room.layouts.addModConfirmView(this.users[f].name, function () { | |
| turntable.ImGCdVsOO({ | |
| api: "room.add_moderator", | |
| roomid: b.roomId, | |
| target_userid: f | |
| }); | |
| util.hideOverlay(); | |
| }))); | |
| } else { | |
| if (d == "rem_moderator") { | |
| var b = this; | |
| util.showOverlay(util.buildTree(Room.layouts.removeModConfirmView(this.users[f].name, function () { | |
| turntable.ImGCdVsOO({ | |
| api: "room.rem_moderator", | |
| roomid: b.roomId, | |
| target_userid: f | |
| }); | |
| util.hideOverlay(); | |
| }))); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| setupProfileOverlay: function (j, a) { | |
| if (j.success) { | |
| util.showOverlay(util.buildTree(Room.layouts.profileView(j))); | |
| var g = $("#profileModal"); | |
| var m = g.find(".avatar").find("img"); | |
| m.attr("src", "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/" + j.avatarid + "/fullfront.png"); | |
| var l = g.find("canvas.laptop"); | |
| if (a.success) { | |
| var c = l[0].getContext("2d"); | |
| var k = j.laptop; | |
| if (k == "iphone") { | |
| k = "mac"; | |
| } | |
| turntable.sticker.drawLaptopCanvas(j.userid, c, 0.5, k); | |
| } else { | |
| l.hide(); | |
| } | |
| var n = g.find(".acl"); | |
| if (j.verified) { | |
| n.text("Verified " + j.verified); | |
| } else { | |
| if (j.acl > 1) { | |
| n.text("gatekeeper"); | |
| } else { | |
| if (j.acl > 0) { | |
| n.text("superuser"); | |
| } | |
| } | |
| } | |
| var e = g.find(".twitter"); | |
| if (!j.twitter) { | |
| e.hide(); | |
| } else { | |
| e.attr("href", "http://twitter.com/" + j.twitter); | |
| } | |
| var f = g.find(".facebook"); | |
| if (!j.facebook) { | |
| f.hide(); | |
| } else { | |
| f.attr("href", j.facebook); | |
| } | |
| var b = g.find(".website"); | |
| if (!j.website) { | |
| b.hide(); | |
| } else { | |
| b.html(util.linkify(util.safeText(b.html()))); | |
| } | |
| var i = g.find(".about"); | |
| if (!j.about) { | |
| i.hide(); | |
| } else { | |
| i.find(".right").html(util.brText(util.linkify(util.safeText(j.about)))); | |
| } | |
| var h = g.find(".topartists"); | |
| if (!j.topartists) { | |
| h.hide(); | |
| } else { | |
| h.find(".right").html(util.brText(util.linkify(util.safeText(j.topartists)))); | |
| } | |
| var d = g.find(".hangout"); | |
| if (!j.hangout) { | |
| d.hide(); | |
| } else { | |
| d.find(".right").html(util.brText(util.linkify(util.safeText(j.hangout)))); | |
| } | |
| $(this.view).find(".profile").fadeIn(); | |
| } | |
| }, | |
| addSong: function (c, f) { | |
| if (!f) { | |
| if (!this.currentSong) { | |
| return; | |
| } | |
| f = this.currentSong; | |
| } | |
| var b = (f._id in turntable.playlist.songsByFid); | |
| if (c == "queue") { | |
| var e; | |
| if (b) { | |
| e = "This song is already in your playlist!"; | |
| } else { | |
| turntable.playlist.addSong({ | |
| fileId: f._id, | |
| metadata: f.metadata | |
| }); | |
| e = "Song added to queue."; | |
| } | |
| this.showRoomTip(e, 5); | |
| } else { | |
| window.open("/link/?fileid=" + f._id + "&site=" + c, c + f._id); | |
| } | |
| var a = f ? f.djid : this.currentDj; | |
| var d = (f == this.currentSong) ? "board" : "songlog"; | |
| this.sendSnag(turntable.user.id, this.roomId, a, f._id, c, d, (b ? "true" : "false")); | |
| }, | |
| sendSnag: function (g, d, b, f, a, j, c) { | |
| if (b) { | |
| var h = $.sha1(Math.random() + ""); | |
| var k = $.sha1(Math.random() + ""); | |
| var i = [g, b, f, d, a, j, c, h]; | |
| var e = $.sha1(i.join("/")); | |
| turntable.ImGCdVsOO({ | |
| api: "snag.add", | |
| djid: b, | |
| songid: f, | |
| roomid: d, | |
| site: a, | |
| location: j, | |
| in_queue: c, | |
| vh: e, | |
| sh: h, | |
| fh: k | |
| }); | |
| _gaq.push(["_trackEvent", "song", "snag", a, (c ? 0 : 1)]); | |
| } | |
| }, | |
| handleSnagged: function (a) { | |
| this.vWsUvfbJZlgIXR.show_heart(a.userid); | |
| }, | |
| userIdFromName: function (b) { | |
| for (var c in this.users) { | |
| var a = this.users[c]; | |
| if (a && a.name == b) { | |
| return c; | |
| } | |
| } | |
| return null; | |
| }, | |
| throttleMessages: [", relax and just enjoy the music.", " has been awfully chatty lately...", ", quiet down; the neighbors are complaining about the noise.", ], | |
| repeatMessages: [" sounds like a broken record...", ", okay, we get it.", ], | |
| throttleChat: function (e) { | |
| if (this.lastChatTime == 0) { | |
| this.lastChatTime = new Date(); | |
| this.chatHistory.push(e); | |
| return false; | |
| } | |
| var d, h; | |
| var a = this.users[turntable.user.id]; | |
| if (this.numUsers() >= this.chatThrottlingThreshold) { | |
| var d = 5.4 / (0.01 * a.fans + 1) - 0.4; | |
| var c = d * this.intervalMultiplier; | |
| var j = new Date(); | |
| var h = 0; | |
| chatInterval = (j - this.lastChatTime) / 1000; | |
| h = c - chatInterval; | |
| if (this.totalTimeDebt + h > c) { | |
| var k = this.throttleMessages[Math.floor(Math.random() * this.throttleMessages.length)]; | |
| this.appendChatMessage(a.id, a.name, k, "action"); | |
| return true; | |
| } | |
| } | |
| var f = this.chatHistory; | |
| f.push(e); | |
| while (f.length > this.historyLength) { | |
| f.shift(); | |
| } | |
| if (f.length == this.historyLength) { | |
| var g = true; | |
| for (var b = 1; b < f.length; b++) { | |
| if (f[b] != f[b - 1]) { | |
| g = false; | |
| } | |
| } | |
| if (g) { | |
| var k = this.repeatMessages[Math.floor(Math.random() * this.repeatMessages.length)]; | |
| this.appendChatMessage(a.id, a.name, k, "action"); | |
| return true; | |
| } | |
| } | |
| if (this.numUsers() >= this.chatThrottlingThreshold) { | |
| this.lastChatTime = j; | |
| this.totalTimeDebt = Math.max(-d, this.totalTimeDebt + h); | |
| if (this.totalTimeDebt >= 0) { | |
| this.debtViolations += 1; | |
| if (this.debtViolations > 2) { | |
| this.debtViolations = 0; | |
| this.intervalMultiplier += 0.1; | |
| } | |
| } else { | |
| this.intervalMultiplier = 1; | |
| } | |
| } | |
| return false; | |
| }, | |
| speak: function (e) { | |
| e.preventDefault(); | |
| var g = $.trim(this.nodes.chatText.value); | |
| if (!g) { | |
| return; | |
| } | |
| if (g.indexOf("/ignore ") == 0) { | |
| var f = g.substr(8); | |
| var d = this.userIdFromName(f); | |
| if (d && $.inArray(d, this.ignoredUsers) == -1) { | |
| this.ignoredUsers.push(d); | |
| this.appendChatMessage(d, f, " will be ignored."); | |
| } | |
| return; | |
| } else { | |
| if (g.indexOf("/unignore ") == 0) { | |
| var f = g.substr(10); | |
| var d = this.userIdFromName(f); | |
| if (d) { | |
| var c = $.inArray(d, this.ignoredUsers); | |
| if (c != -1) { | |
| this.ignoredUsers.splice(c, 1); | |
| this.appendChatMessage(d, f, " will be ignored no more."); | |
| } | |
| } | |
| return; | |
| } | |
| } | |
| if (!this.throttleChat(g)) { | |
| this.nodes.chatText.value = ""; | |
| var b = turntable.ImGCdVsOO({ | |
| api: "room.speak", | |
| roomid: this.roomId, | |
| text: g | |
| }); | |
| var a = this; | |
| b.fail(function (h) { | |
| if (h && h.err == "user not in room") { | |
| a.invisibooted = true; | |
| a.reconnectListener(); | |
| } | |
| }); | |
| } | |
| }, | |
| clearRoomUsers: function () { | |
| for (var b = 0; b < this.djIds.length; b++) { | |
| this.vWsUvfbJZlgIXR.rem_dj(b); | |
| } | |
| this.djIds = []; | |
| for (var a in this.users) { | |
| this.vWsUvfbJZlgIXR.rem_listener(this.users[a]); | |
| } | |
| this.users = {}; | |
| }, | |
| cleanup: function () { | |
| this.clearRoomUsers(); | |
| turntable.removeEventListener("auth", this.authListener); | |
| turntable.removeEventListener("userinfo", this.userInfoListener); | |
| turntable.removeEventListener("message", this.messageListener); | |
| turntable.removeEventListener("reconnect", this.reconnectListener); | |
| httpStream.setCallback(null); | |
| if (this.roomList) { | |
| this.roomList.cleanup(); | |
| this.roomList = null; | |
| } | |
| $("#offstage").append($("#userauth")); | |
| $("#offstage").append($("#playlist")); | |
| httpStream.closeStream(); | |
| turntable.ImGCdVsOO({ | |
| api: "room.deregister", | |
| roomid: this.roomId | |
| }); | |
| turntable.playlist.resetQueueView(); | |
| for (var a in this.timers) { | |
| if (this.timers[a]) { | |
| clearTimeout(this.timers[a]); | |
| } | |
| } | |
| Room.layouts.zeroClip.destroy(); | |
| Room.layouts.zeroClip = null; | |
| window.onbeforeunload = null; | |
| }, | |
| getEntropyForUser: function (a) { | |
| return turntable.seedPRNG(a.userid + a.points + this.roomId + Math.round(turntable.serverNow() / (6 * 3600))); | |
| }, | |
| loadLayout: function () { | |
| this.nodes = {}; | |
| this.view = util.buildTree(Room.layouts.page(this.toggleFavorite, this.chatTextListener), this.nodes); | |
| $(this.nodes.userauth).append($("#userauth")); | |
| $(this.nodes.playlist).append($("#playlist")); | |
| $(this.view).find(".searchView").hide(); | |
| $(this.nodes.logo).click(util.eventHandlerDecorator(function () { | |
| window.location.href = "/lobby"; | |
| })); | |
| $(this.nodes.listRooms).click(this.listRoomsShow); | |
| $(this.nodes.randomRoom).click(turntable.randomRoom); | |
| $(this.view).find(".feedback").click(this.feedbackifyShow); | |
| $(this.view).find(".roomTip").click(this.hideRoomTip); | |
| $(this.nodes.chatForm).submit(this.speak); | |
| $(this.nodes.chatText).keydown(this.chatKeyDownListener); | |
| if (!util.getSetting("playdingsound")) { | |
| var b = util.getSetting("playding") == "true" ? "on" : "mention"; | |
| util.setSetting("playdingsound", b); | |
| } | |
| $(this.nodes.chatSound).addClass(util.getSetting("playdingsound")); | |
| $(this.nodes.chatSound).bind({ | |
| mousedown: function (c) { | |
| c.stopPropagation(); | |
| }, | |
| selectstart: function (c) { | |
| c.preventDefault(); | |
| }, | |
| click: function () { | |
| var d = $(".chatsound"); | |
| var e, c; | |
| if (d.hasClass("on")) { | |
| e = "on", c = "mention"; | |
| } else { | |
| if (d.hasClass("mention")) { | |
| e = "mention", c = "off"; | |
| } else { | |
| e = "off", c = "on"; | |
| } | |
| } | |
| d.removeClass(e).addClass(c); | |
| util.setSetting("playdingsound", c); | |
| } | |
| }); | |
| $(this.view).find(".chatHeader").mousedown(this.chatResizeStart); | |
| var a = parseInt(util.getSetting("chatOffset")); | |
| this.chatResizeSetOffset(isNaN(a) ? this.chatOffsetTop : a); | |
| $(this.nodes.copyText).val(location.href); | |
| }, | |
| initFavorite: function () { | |
| if (turntable.favorites) { | |
| this.hasLoadedFavorites = true; | |
| if (this.roomId in turntable.favorites) { | |
| $(this.nodes.favorite).addClass("favorite-on"); | |
| this.isFavorite = true; | |
| } | |
| } | |
| }, | |
| toggleFavorite: function () { | |
| if (this.hasLoadedFavorites) { | |
| var a = this; | |
| if (!this.isFavorite) { | |
| turntable.ImGCdVsOO({ | |
| api: "room.add_favorite", | |
| roomid: this.roomId | |
| }, function (b) { | |
| if (b.success) { | |
| $(a.nodes.favorite).addClass("favorite-on"); | |
| a.isFavorite = true; | |
| turntable.favorites[a.roomId] = true; | |
| } | |
| }); | |
| } else { | |
| turntable.ImGCdVsOO({ | |
| api: "room.rem_favorite", | |
| roomid: this.roomId | |
| }, function (b) { | |
| if (b.success) { | |
| $(a.nodes.favorite).removeClass("favorite-on"); | |
| a.isFavorite = false; | |
| delete turntable.favorites[a.roomId]; | |
| } | |
| }); | |
| } | |
| } | |
| }, | |
| onAddedToStage: function () { | |
| if (!Room.layouts.zeroClip) { | |
| Room.layouts.zeroClip = new ZeroClipboard.Client(); | |
| } | |
| Room.layouts.zeroClip.setHandCursor(true); | |
| Room.layouts.zeroClip.setText(location.href); | |
| Room.layouts.zeroClip.glue(this.nodes.zeroClipButton, this.nodes.zeroClipContainer); | |
| $("#room-info-tab").show(); | |
| $("#room-info-tab .button").click(this.toggleRoomInfo); | |
| $("#room-info-tab .edit-description-btn").click(this.toggleEditDesc); | |
| }, | |
| setupRoom: function (e) { | |
| $(this.nodes.roomName).text(e.name); | |
| this.name = e.name; | |
| var d = e.metadata.moderator_id; | |
| this.moderators = (d ? ($.type(d) == "array" ? d : [d]) : []); | |
| this.creatorId = e.metadata.creator && e.metadata.creator.userid; | |
| this.setupSharing(e.name); | |
| this.updateRoomDesc(e); | |
| if (e.metadata.creator) { | |
| $("#room-info-tab .creator").html("<b>Created by:</b> " + util.safeText(e.metadata.creator.name)); | |
| } | |
| if (e.metadata.songlog) { | |
| $("#room-info-tab .songlog").empty(); | |
| for (var c = 0; c < e.metadata.songlog.length; c++) { | |
| this.addToSongLog(e.metadata.songlog[c]); | |
| } | |
| } | |
| if (!this.isMod()) { | |
| $("#room-info-tab .edit-description-btn").hide(); | |
| } | |
| if (!this.vWsUvfbJZlgIXR) { | |
| this.vWsUvfbJZlgIXR = new VoTrUR($(this.nodes.roomArea), e.metadata.max_djs, 527, 603, this.vWsUvfbJZlgIXRCallback, this.selfId, this.roomId); | |
| var b = parseInt(util.getSetting("volume")) || turntablePlayer.volume; | |
| this.vWsUvfbJZlgIXR.set_volume(b); | |
| turntablePlayer.setVolume(b); | |
| $("#left_speaker").mouseenter(); | |
| window.setTimeout(function () { | |
| $("#left_speaker").mouseleave(); | |
| }, 2000); | |
| } | |
| if (this.isMod()) { | |
| this.vWsUvfbJZlgIXR.add_moderator(this.moderators); | |
| } else { | |
| this.vWsUvfbJZlgIXR.rem_moderator(this.moderators); | |
| } | |
| if (e.metadata.has_wrap != null) { | |
| var f = ""; | |
| if (e.metadata.wrap_color) { | |
| f = "#" + e.metadata.wrap_color; | |
| } | |
| var a = ""; | |
| if (e.metadata.wrap_img) { | |
| a = "url(" + e.metadata.wrap_img + ") 50% top no-repeat"; | |
| } | |
| if (f || a) { | |
| $("body").css("background", a + " " + f); | |
| } | |
| } else { | |
| $("body").css("background", ""); | |
| } | |
| }, | |
| setupSharing: function (e) { | |
| var d = this; | |
| var c = function () { | |
| if (d.currentSong) { | |
| var i = d.currentSong.metadata.coverart; | |
| if (i) { | |
| return i.replace("_50", "_100"); | |
| } | |
| } | |
| return ""; | |
| }; | |
| var b = function () { | |
| var i = ""; | |
| if (d.currentSong) { | |
| i = "Now playing: " + d.currentSong.metadata.artist + " - " + d.currentSong.metadata.song; | |
| } | |
| return i; | |
| }; | |
| var a = function () { | |
| var i = e; | |
| if (!i.match(/^the/i)) { | |
| i = "the " + i; | |
| } | |
| if (!i.match(/room$/i)) { | |
| i = i + " room"; | |
| } | |
| return i; | |
| }; | |
| var h = function () { | |
| var n = ["DJing in " + a() + ".", " Come hang out.", " \u266B\u266A", " #turntablefm"]; | |
| var m = [1, -2, -1]; | |
| if (d.currentSong) { | |
| n.splice(2, 0, " Now playing " + d.currentSong.metadata.artist, ": " + d.currentSong.metadata.song); | |
| m.splice(2, 0, 3); | |
| } | |
| var k = 0; | |
| for (var l = 0; l < n.length; l++) { | |
| k += n[l].length; | |
| } | |
| for (var l = 0; l < m.length && k > 120; l++) { | |
| var j = m[l]; | |
| if (j < 0) { | |
| j += n.length; | |
| } | |
| k -= n[j].length; | |
| n[j] = ""; | |
| } | |
| return encodeURIComponent(n.join("")); | |
| }; | |
| var g = function (i, j) { | |
| _gaq.push(["_trackEvent", "share", i, j]); | |
| }; | |
| var f = encodeURIComponent(location.href); | |
| $("#email-button").click(function () { | |
| var i = b(); | |
| var m = a(); | |
| var j = "Let's hang out and play music together"; | |
| var l = "Hey there,\n\nCome DJ with me at " + location.href + "\n\nI'm in " + m + " rocking out right now. Invite anyone else you want by sending them the room link.\n\n" + i; | |
| g("email", e); | |
| var k = window.open("mailto:?subject=" + encodeURIComponent(j) + "&body=" + encodeURIComponent(l)); | |
| if (k && k.open && !k.closed) { | |
| k.close(); | |
| } | |
| }); | |
| $("#twitter-button").click(function () { | |
| var m = h(); | |
| var j = 600; | |
| var i = 300; | |
| var l = (screen.width / 2) - (j / 2); | |
| var k = (screen.height / 3) - (i / 2); | |
| g("twitter", e); | |
| window.open("http://twitter.com/share?text=" + m + "&url=" + f, "tweet", "menubar=0,resizable=0,width=" + j + ",height=" + i + ",left=" + l + ",top=" + k); | |
| }); | |
| $("#fb-button").click(function () { | |
| var k = h(); | |
| var p = a(); | |
| var m = c(); | |
| var n = "turntable.fm+lets+you+listen+to+music+at+the+same+time+with+your+friends."; | |
| var i = b(); | |
| if (i) { | |
| n = i; | |
| } | |
| var j = 1000; | |
| var q = 460; | |
| var l = (screen.width / 2) - (j / 2); | |
| var o = (screen.height / 3) - (q / 2); | |
| g("facebook", e); | |
| window.open("https://www.facebook.com/dialog/feed?app_id=127146244018710&redirect_uri=" + encodeURIComponent("http://" + location.host + "/close_window") + "&link=" + f + "&picture=" + m + "&caption=Come+join+me+and+let's+listen+to+music+together&description=" + n + "&name=I'm+in+" + util.title(p) + "+on+turntable.fm", "fb", "menubar=0,resizable=0,width=" + j + ",height=" + q + ",left=" + l + ",top=" + o); | |
| }); | |
| }, | |
| addToSongLog: function (c) { | |
| var b = $("#room-info-tab .songlog"); | |
| var a = util.buildTree(Room.layouts.songView(this, c)); | |
| if (b.find(".song").length % 2) { | |
| $(a).addClass("song2"); | |
| } | |
| b.prepend(a); | |
| this.updateScoreInSongLog(c.score || 0.5); | |
| }, | |
| updateScoreInSongLog: function (a) { | |
| var b = $("#room-info-tab .score:first"); | |
| if (a >= 0.5) { | |
| b.addClass("scoregood"); | |
| b.removeClass("scorebad"); | |
| } else { | |
| b.removeClass("scoregood"); | |
| b.addClass("scorebad"); | |
| } | |
| b.html("Vote: " + Math.round(a * 100) + "%"); | |
| }, | |
| samplePlay: function (a) { | |
| var b = $(a).closest(".song"); | |
| turntablePlayer.samplePlay(b.data("songData")._id, this.sampleCallback); | |
| b.addClass("currentPreview"); | |
| }, | |
| sampleCallback: function (b, a) { | |
| if (b == "progress") { | |
| $("#room-info-tab .currentPreview .progress").css({ | |
| width: a | |
| }); | |
| } else { | |
| if (b == "stop") { | |
| $("#room-info-tab .currentPreview .progress").css({ | |
| width: "0%" | |
| }); | |
| $("#room-info-tab .currentPreview").removeClass("currentPreview"); | |
| } | |
| } | |
| }, | |
| isMod: function (a) { | |
| if (!a) { | |
| a = this.selfId; | |
| } | |
| return ($.inArray(a, this.moderators) != -1 || this.isSuperuser(a)); | |
| }, | |
| isSuperuser: function (b) { | |
| if (!b) { | |
| b = this.selfId; | |
| } | |
| if (b == this.selfId) { | |
| return turntable.user.acl > 0; | |
| } | |
| var a = this.users[b]; | |
| return a && a.acl > 0; | |
| }, | |
| toggleRoomInfo: function () { | |
| var b = $("#room-info-tab .button"); | |
| var a; | |
| if (!b.hasClass("upbutton")) { | |
| a = { | |
| top: "+=350" | |
| }; | |
| b.addClass("upbutton"); | |
| } else { | |
| a = { | |
| top: "-=350" | |
| }; | |
| b.removeClass("upbutton"); | |
| } | |
| globalMove = a; | |
| b.animate(a); | |
| $("#room-info-tab .content").animate(a); | |
| }, | |
| toggleEditDesc: function () { | |
| var b = $("#room-info-tab .edit-description-btn"); | |
| var a = $("#room-info-tab .edit-description .edit"); | |
| if (!a.hasClass("editing")) { | |
| a.val(this.description); | |
| $("#room-info-tab .edit-description").show(); | |
| b.html("Save"); | |
| a.addClass("editing"); | |
| } else { | |
| if (a.val() != this.description) { | |
| turntable.ImGCdVsOO({ | |
| api: "room.modify", | |
| roomid: this.roomId, | |
| description: a.val() | |
| }); | |
| this.description = a.val(); | |
| } | |
| $("#room-info-tab .edit-description").hide(); | |
| b.html("Edit Description"); | |
| a.removeClass("editing"); | |
| } | |
| }, | |
| updateRoomDesc: function (a) { | |
| if (a.description) { | |
| $("#room-info-tab .description").html(util.linkify(util.safeText(a.description))); | |
| this.description = a.description; | |
| } | |
| }, | |
| facebookSendDialog: function () { | |
| var b = 465; | |
| var a = 225; | |
| var d = (screen.width / 2) - (b / 2); | |
| var c = (screen.height / 3) - (a / 2); | |
| window.open("https://www.facebook.com/plugins/send_button_form_shell.php?api_key=113869198637480&nodeImageURL=http://static.turntable.fm/images/record_logo.gif&nodeSummary=turntable.fm+lets+you+listen+to+music+at+the+same+time+with+your+friends.&nodeTitle=Play+music+together.&nodeURL=" + encodeURIComponent(location.href), "fb", "menubar=0,resizable=0,width=" + b + ",height=" + a + ",left=" + d + ",top=" + c); | |
| }, | |
| feedbackifyShow: function () { | |
| FBY.showForm("633"); | |
| this.feedbackifyInstrument(); | |
| }, | |
| feedbackifyInstrument: function () { | |
| var b = $("#feedbackify .fsend"); | |
| if (b.length == 0) { | |
| setTimeout(this.feedbackifyInstrument, 300); | |
| return; | |
| } | |
| var a = b.filter(".new"); | |
| if (a.length == 0) { | |
| var a = b.clone(false).addClass("new"); | |
| a.insertAfter(b); | |
| a.click(function () { | |
| var c = $("#feedbackify .feedback-holder textarea"); | |
| var d = c.val(); | |
| if (typeof d == "string") { | |
| c.val(d + "\n\nSent by user " + turntable.user.id + "\n" + navigator.userAgent); | |
| } | |
| $(".fsend.new").hide(); | |
| $(".fsend.old").show(); | |
| YUI().use("node-event-simulate", function (e) { | |
| e.one(".fsend.old").simulate("click"); | |
| }); | |
| }); | |
| } else { | |
| a.show(); | |
| } | |
| b.addClass("old").hide(); | |
| }, | |
| listRoomsShow: function (a) { | |
| var c = util.buildTree(Room.layouts.listRooms); | |
| this.roomList = new RoomList(this.roomId); | |
| $(c).find(".roomIndexContainer").append(this.roomList.view); | |
| $(c).find(".close").click(this.listRoomsHide); | |
| var b = this; | |
| $(c).find(".createRoom").click(function () { | |
| b.listRoomsHide(); | |
| welcome.createRoomShow(); | |
| }); | |
| util.showOverlay(c); | |
| }, | |
| listRoomsHide: function (a) { | |
| this.roomList.cleanup(); | |
| this.roomList = null; | |
| util.hideOverlay(); | |
| }, | |
| addUser: function (a, c) { | |
| ASSERT(this.vWsUvfbJZlgIXR != null, "Room manager not setup yet!"); | |
| var b = this.users.hasOwnProperty(a.userid); | |
| a.fanof = ($.inArray(a.userid, turntable.user.fanOf) != -1); | |
| a.isBuddy = ($.inArray(a.userid, turntable.user.buddies) != -1); | |
| this.users[a.userid] = a; | |
| if (b) { | |
| this.refreshRoomUser(a); | |
| } else { | |
| this.vWsUvfbJZlgIXR.add_listener(a, this.getEntropyForUser(a)); | |
| this.refreshUserVote(a); | |
| } | |
| if (!c) { | |
| this.updateGuestList(); | |
| } | |
| if (!c && (a.fanof || a.isBuddy)) { | |
| a.status = "available"; | |
| a.roomName = this.name; | |
| turntable.buddyList.addBuddy(a, true); | |
| if (a.userid in turntable.buddyList.pmWindows) { | |
| turntable.buddyList.pmWindows[a.userid].updateStatus(a.status); | |
| } | |
| } | |
| }, | |
| removeUser: function (b) { | |
| if (!this.users.hasOwnProperty(b)) { | |
| LOG(b + " is not a user!"); | |
| return; | |
| } | |
| var a = this.users[b]; | |
| delete this.users[b]; | |
| this.vWsUvfbJZlgIXR.rem_listener(a); | |
| this.updateGuestList(); | |
| }, | |
| numUsers: function () { | |
| var b = 0; | |
| for (var a in this.users) { | |
| if (this.users.hasOwnProperty(a) && this.users[a]) { | |
| b += 1; | |
| } | |
| } | |
| return b; | |
| }, | |
| numDjs: function () { | |
| return this.djIds.length; | |
| }, | |
| updateUser: function (b) { | |
| var a = this.users[b.userid]; | |
| if (!a) { | |
| return; | |
| } | |
| if (b.hasOwnProperty("avatarid")) { | |
| a.avatarid = b.avatarid; | |
| } | |
| if (b.hasOwnProperty("name") && b.name != a.name) { | |
| this.appendChatMessage(a.userid, a.name, " shall now be known as " + b.name + ".", "action"); | |
| a.name = b.name; | |
| } | |
| if (b.hasOwnProperty("fans")) { | |
| if (!a.fans) { | |
| a.fans = 0; | |
| } | |
| a.fans += b.fans; | |
| } | |
| this.refreshRoomUser(a); | |
| }, | |
| refreshRoomUser: function (b) { | |
| var a = $.inArray(b.userid, this.djIds); | |
| if (a == -1) { | |
| this.vWsUvfbJZlgIXR.rem_listener(b); | |
| this.vWsUvfbJZlgIXR.add_listener(b, this.getEntropyForUser(b)); | |
| } else { | |
| this.vWsUvfbJZlgIXR.rem_dj(a); | |
| this.vWsUvfbJZlgIXR.add_dj(b, a); | |
| if (b.userid == this.currentDj) { | |
| this.vWsUvfbJZlgIXR.set_active_dj(a); | |
| } | |
| } | |
| this.refreshUserVote(b); | |
| }, | |
| refreshUserVote: function (a) { | |
| if ($.inArray(a.userid, this.upvoters) != -1) { | |
| this.vWsUvfbJZlgIXR.update_vote(a, "up"); | |
| } | |
| }, | |
| addDj: function (b) { | |
| if ($.inArray(b, this.djIds) != -1) { | |
| this.removeDj(b); | |
| } | |
| if (this.djIds.length < this.maxDjs) { | |
| var a = this.users[b]; | |
| this.vWsUvfbJZlgIXR.rem_listener(a); | |
| this.vWsUvfbJZlgIXR.add_dj(a, this.djIds.length); | |
| this.refreshUserVote(a); | |
| this.djIds.push(b); | |
| } else { | |
| this.loadRoomState(); | |
| } | |
| }, | |
| removeDj: function (c) { | |
| var b = $.inArray(c, this.djIds); | |
| if (b == -1) { | |
| return; | |
| } | |
| this.djIds.splice(b, 1); | |
| this.vWsUvfbJZlgIXR.rem_dj(b); | |
| for (; b < this.djIds.length; b++) { | |
| this.vWsUvfbJZlgIXR.rem_dj(b + 1); | |
| var e = this.djIds[b]; | |
| var d = this.users[e]; | |
| this.vWsUvfbJZlgIXR.add_dj(d, b); | |
| if (e == this.currentDj) { | |
| this.vWsUvfbJZlgIXR.set_active_dj(b); | |
| } else { | |
| this.refreshUserVote(d); | |
| } | |
| } | |
| var a = this.users[c]; | |
| if (a) { | |
| this.vWsUvfbJZlgIXR.add_listener(a, this.getEntropyForUser(a)); | |
| this.refreshUserVote(a); | |
| } | |
| }, | |
| mhApMeJHYlYBbz: function () { | |
| if (this.isDj()) { | |
| return; | |
| } | |
| if (turntable.playlist.files.length == 0) { | |
| turntable.showAlert("You must have songs in your queue to become a DJ."); | |
| return; | |
| } | |
| var a = this; | |
| turntable.ImGCdVsOO({ | |
| api: "room.add_dj", | |
| roomid: this.roomId | |
| }, function (b) { | |
| if (!b.success && !a.isDj()) { | |
| turntable.showAlert(b.err); | |
| } | |
| }); | |
| }, | |
| quitDj: function () { | |
| if (this.isDj()) { | |
| turntable.ImGCdVsOO({ | |
| api: "room.rem_dj", | |
| roomid: this.roomId | |
| }); | |
| } | |
| }, | |
| isDj: function (a) { | |
| if (!a) { | |
| a = this.selfId; | |
| } | |
| return ($.inArray(a, this.djIds) != -1); | |
| }, | |
| updateGuestList: function () { | |
| var b = [], | |
| g = $(".guest-list-container .guests"); | |
| for (var f in this.users) { | |
| b.push(this.users[f]); | |
| } | |
| b.sort(function (j, i) { | |
| var h = j.name.toLowerCase(), | |
| k = i.name.toLowerCase(); | |
| return (k > h) ? -1 : (k < h) ? 1 : 0; | |
| }); | |
| var c = g.find(".guest.selected").data("id"); | |
| g.find(".guest").remove(); | |
| for (var e = 0, a = b.length; e < a; e++) { | |
| var d = (c && c == b[e].userid) ? true : false; | |
| g.append(util.buildTree(Room.layouts.guestListName(b[e], this, d))); | |
| } | |
| $("span#totalUsers").text(b.length); | |
| this.updateGuestListMenu(); | |
| }, | |
| addGuestListMenu: function (a, b) { | |
| if (this.guestOptionsHoverTimer) { | |
| clearTimeout(this.guestOptionsHoverTimer); | |
| } | |
| $("div.guest.selected").removeClass("selected"); | |
| var c = $(util.buildTree(Room.layouts.guestOptions(a, this))).css({ | |
| visibility: "hidden" | |
| }); | |
| b.addClass("selected").parent().append(c); | |
| this.updateGuestListMenu(c, b); | |
| }, | |
| updateGuestListMenu: function (e, b) { | |
| if (!e) { | |
| e = $("div.guestOptionsContainer"); | |
| } | |
| if (!b) { | |
| b = $("div.guest.selected"); | |
| } | |
| if (e.length && b.length) { | |
| var a = b.position().top, | |
| d = b.parent().scrollTop(); | |
| var c = a + d - e.height() + 6; | |
| if (c < 0 || (c < d && a + d + b.height() + e.height() < e.parent()[0].scrollHeight)) { | |
| c = a + d + b.height() - 5; | |
| e.addClass("nibTop"); | |
| } | |
| $(e).css({ | |
| top: c + "px", | |
| visibility: "visible" | |
| }); | |
| } | |
| }, | |
| removeGuestListMenu: function (a) { | |
| $("div.guest.selected").removeClass("selected"); | |
| $("div.guestOptionsContainer").fadeOut("fast", function () { | |
| $(this).remove(); | |
| if (a) { | |
| a(); | |
| } | |
| }); | |
| }, | |
| unloadWarning: function () { | |
| if (this.isDj()) { | |
| return "Warning: if you leave this page, you'll give up your DJ spot."; | |
| } | |
| }, | |
| isMention: function (b) { | |
| var a = turntable.user.displayName.toLowerCase(); | |
| if (a[0] == "@") { | |
| a = a.slice(1); | |
| } | |
| return b && (b.toLowerCase().indexOf("@" + a) >= 0); | |
| }, | |
| showChatMessage: function (c, e, f) { | |
| if ($.inArray(c, this.ignoredUsers) == -1) { | |
| var b = this.isMention(f); | |
| if (f.indexOf("/me ") == 0) { | |
| this.appendChatMessage(c, e, f.substr(3)); | |
| if (this.vWsUvfbJZlgIXR) { | |
| this.vWsUvfbJZlgIXR.speak(this.users[c], "*" + f.substr(4) + "*"); | |
| } | |
| } else { | |
| var a = b ? "mention" : undefined; | |
| this.appendChatMessage(c, e, ": " + f, a); | |
| if (this.vWsUvfbJZlgIXR) { | |
| this.vWsUvfbJZlgIXR.speak(this.users[c], f); | |
| } | |
| } | |
| var d = $(".chatsound"); | |
| if (b && (d.hasClass("on") || d.hasClass("mention"))) { | |
| turntablePlayer.playEphemeral(UI_SOUND_MENTION, true); | |
| } else { | |
| if (d.hasClass("on")) { | |
| turntablePlayer.playEphemeral(UI_SOUND_CHAT, true); | |
| } | |
| } | |
| } | |
| }, | |
| appendChatMessage: function (f, a, h, j) { | |
| var e = this.nodes.chatLog; | |
| var g = (e.scrollTop + $(e).height() + 20 >= e.scrollHeight); | |
| var b = util.buildTree(Room.layouts.chatMessage); | |
| var i = this; | |
| $(b).find(".speaker").text(a).click(function () { | |
| i.vWsUvfbJZlgIXR.toggle_listener(f); | |
| }); | |
| var c = $(b).find(".text"); | |
| h = util.stripComboDiacritics(h); | |
| if (h.length > 446) { | |
| c.attr("title", h.substr(0, 2) == ": " ? h.substr(2) : h); | |
| h = h.substr(0, 440) + "..."; | |
| } | |
| c.html(util.messageFilter(h)); | |
| if (j) { | |
| $(b).addClass(j); | |
| } | |
| $(e).append(b); | |
| if (g) { | |
| e.scrollTop += 9001; | |
| } | |
| var d = $(e).find(".message"); | |
| if (d.length > 500) { | |
| d.slice(0, 2).remove(); | |
| } | |
| }, | |
| votes: 0, | |
| upvoters: [], | |
| currentSong: null, | |
| setCurrentSong: function (m) { | |
| var a = util.now() / 1000; | |
| var d = (m ? m.current_dj : null); | |
| var h = (m ? m.current_song : null); | |
| if (!d || !h) { | |
| d = h = null; | |
| } | |
| var b = !(this.currentSong && h && this.currentSong._id == h._id && Math.abs(this.currentSong.starttime - h.starttime) < 0.1); | |
| if (!this.resyncStream) { | |
| this.upvoters = []; | |
| this.vWsUvfbJZlgIXR.move_needle(0.5); | |
| } | |
| this.currentDj = d; | |
| if (b) { | |
| httpStream.closeStream(); | |
| this.streamStarted = false; | |
| if (this.selfNewDjPoints !== null) { | |
| turntable.user.djPoints = this.selfNewDjPoints; | |
| } | |
| if (this.timers.TklSijwTrHIB) { | |
| clearTimeout(this.timers.TklSijwTrHIB); | |
| this.timers.TklSijwTrHIB = null; | |
| } | |
| } | |
| var j = this.resyncStream; | |
| this.resyncStream = false; | |
| if (h) { | |
| var n = h.metadata; | |
| var e = a - turntable.clientTimeDelta; | |
| if (e < h.starttime) { | |
| e = h.starttime; | |
| turntable.clientTimeDelta = a - e; | |
| } | |
| if (m.netloc && m.sync && m.sync.current_seg) { | |
| var l = m.netloc + this.roomId; | |
| var c = function () { | |
| httpStream.loadStream(l, m.sync.current_seg, m.sync.tstamp, 500); | |
| }; | |
| if (b) { | |
| setTimeout(c, 500); | |
| } else { | |
| if (j) { | |
| c(); | |
| } | |
| } | |
| } else { | |
| this.scheduleResyncStream(2000); | |
| } | |
| var g = $.inArray(this.currentDj, this.djIds); | |
| if (b) { | |
| this.appendChatMessage(this.currentDj, this.users[this.currentDj].name, ' started playing "' + h.metadata.song + '" by ' + h.metadata.artist); | |
| this.vWsUvfbJZlgIXR.loadingsong(g); | |
| } else { | |
| this.vWsUvfbJZlgIXR.set_active_dj(g); | |
| } | |
| this.currentSong = h; | |
| this.currentSongEndTime = h.starttime + turntable.clientTimeDelta + n.length; | |
| } else { | |
| this.vWsUvfbJZlgIXR.nosong(); | |
| this.currentSong = null; | |
| } | |
| if (b) { | |
| turntable.playlist.setCurrentSong(this.currentDj == this.selfId ? h : null); | |
| if (this.currentDj == this.selfId) { | |
| while (this.songsDjed.length && this.songsDjed[0].time + 3 * 3600 < a) { | |
| this.songsDjed.shift(); | |
| } | |
| var f = false; | |
| for (var k = 0; k < this.songsDjed.length; k++) { | |
| if (this.songsDjed[k].fileId == h._id) { | |
| f = true; | |
| break; | |
| } | |
| } | |
| if (!f) { | |
| this.songsDjed.push({ | |
| fileId: h._id, | |
| time: a | |
| }); | |
| } else { | |
| if (turntable.HBQLNPd() > 120 * 1000) {} | |
| } | |
| } else { | |
| if (turntable.HBQLNPd() > 30 * 60 * 1000) { | |
| if (this.roomId != "4f594a82a3f751581000eb80") { | |
| if (this.isDj()) { | |
| this.showRoomTip("It looks like you've been falling asleep at the deck. How about taking a break from DJing?"); | |
| this.quitDj(); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| getCurrentSongProgress: function () { | |
| var a = this.currentSong.metadata; | |
| return 1 - (this.currentSongEndTime - util.now() / 1000) / a.length; | |
| }, | |
| TklSijwTrHIB: function () { | |
| this.timers.TklSijwTrHIB = null; | |
| if (this.numDjs() != 1) { | |
| return; | |
| } | |
| turntablePlayer.qJenkTJDWhRlS(true); | |
| this.showRoomTip("We can only play you a preview of your song until someone else also starts DJing. Everyone else can still hear the song playing."); | |
| }, | |
| updateVotes: function (i, g) { | |
| var e = (i.upvotes - i.downvotes + i.listeners) / (2 * i.listeners); | |
| if (e) { | |
| this.vWsUvfbJZlgIXR.move_needle(e); | |
| this.updateScoreInSongLog(e); | |
| } | |
| var h = this.upvoters.length; | |
| for (var f = 0; f < i.votelog.length; f++) { | |
| var d = i.votelog[f]; | |
| var b = this.users[d[0]]; | |
| if (b) { | |
| this.vWsUvfbJZlgIXR.update_vote(b, d[1]); | |
| var a = $.inArray(b.userid, this.upvoters); | |
| if (d[1] == "up" && a == -1) { | |
| this.upvoters.push(b.userid); | |
| } else { | |
| if (d[1] == "down" && a != -1) { | |
| this.upvoters.splice(a, 1); | |
| } | |
| } | |
| } | |
| } | |
| if (g) { | |
| ASSERT(this.currentDj, "Somebody voted but no DJ was active"); | |
| if (h != this.upvoters.length) { | |
| var c = this.users[this.currentDj]; | |
| c.points += (this.upvoters.length - h); | |
| this.vWsUvfbJZlgIXR.set_dj_points(c.points); | |
| if (this.currentDj == this.selfId) { | |
| this.selfNewDjPoints = c.points; | |
| } | |
| } | |
| } | |
| }, | |
| lobbyRedirect: function (a) { | |
| var b = "Sorry, you weren't able to enter the room (error " + a + "). Please choose another room."; | |
| if (a == 1) { | |
| b = "Due to fire codes, this room is at maximum capacity. We'll escort you back to the lobby."; | |
| _gaq.push(["_trackEvent", "room", "deny", "full"]); | |
| } else { | |
| if (a == 2) { | |
| b = "Looks like you're already in another room. Please close that room before entering another one."; | |
| _gaq.push(["_trackEvent", "room", "deny", "otherroom"]); | |
| } else { | |
| if (a == 3) { | |
| b = "The bouncer has decided not to let you in, and will escort you back to the lobby."; | |
| _gaq.push(["_trackEvent", "room", "deny", "bouncer"]); | |
| } | |
| } | |
| } | |
| turntable.showAlert(b, function () { | |
| window.location.href = "/lobby"; | |
| }); | |
| this.setCurrentSong(null); | |
| }, | |
| gotBooted: function (c, b) { | |
| if (!b) { | |
| b = "The Moderator"; | |
| } | |
| var a = (c ? " (Reason: " + c + ")" : ""); | |
| util.showOverlay(util.buildTree(["div.booted.modal", | |
| {}, ["div.unhappyFace"], | |
| ["br"], b, " booted you from the room.", a, ["br"], | |
| ["br"], "We'll take you back to the lobby to choose a new room.", ["br"], | |
| ["br"], | |
| ["div.ok-button.centered-button", | |
| { | |
| event: { | |
| click: function () { | |
| util.hideOverlay(); | |
| window.location.href = "/lobby"; | |
| } | |
| } | |
| }] | |
| ])); | |
| }, | |
| checkIdle: function () { | |
| turntable.showAlert("Hey sleepyhead, are you idle? Click OK to continue listening, or you will be escorted to the lobby in two minutes."); | |
| var a = this; | |
| this.originalVolume = turntablePlayer.volume; | |
| turntablePlayer.setVolume(0); | |
| this.timers.checkIdle = setTimeout(function () { | |
| a.timers.checkIdle = null; | |
| turntable.removeEventListener("unidle", a.cancelIdleBoot); | |
| util.hideOverlay(); | |
| turntablePlayer.setVolume(a.originalVolume); | |
| window.location.href = "/lobby"; | |
| }, 120 * 1000); | |
| turntable.addEventListener("unidle", this.cancelIdleBoot); | |
| }, | |
| cancelIdleBoot: function () { | |
| clearTimeout(this.timers.checkIdle); | |
| this.timers.checkIdle = null; | |
| turntable.removeEventListener("unidle", this.cancelIdleBoot); | |
| util.hideOverlay(); | |
| turntablePlayer.setVolume(this.originalVolume); | |
| }, | |
| showRoomTip: function (c, a) { | |
| var b = $(".roomTip .text"); | |
| b.text(c); | |
| if (this.timers.hideRoomTip) { | |
| clearTimeout(this.timers.hideRoomTip); | |
| this.timers.hideRoomTip = null; | |
| } else { | |
| $(".roomTip").fadeIn(); | |
| } | |
| setTimeout(function () { | |
| b.css("margin-top", ($(".roomTip").height() - b.height()) / 2 + "px"); | |
| }, 0); | |
| if (a) { | |
| this.timers.hideRoomTip = setTimeout(this.hideRoomTip, a * 1000); | |
| } | |
| }, | |
| hideRoomTip: function () { | |
| $(".roomTip").fadeOut(); | |
| if (this.timers.hideRoomTip) { | |
| clearTimeout(this.timers.hideRoomTip); | |
| this.timers.hideRoomTip = null; | |
| } | |
| }, | |
| chatResizeStartY: 0, | |
| chatOffsetTop: 351, | |
| chatOffsetTopOld: 351, | |
| chatResizeSetOffset: function (a) { | |
| a = turntable.playlist.setPlaylistHeight(a) - 1; | |
| $(this.view).find(".chat-container, .guest-list-container").css({ | |
| top: a, | |
| height: 603 - a | |
| }); | |
| $(this.view).find(".chat-container .messages, .guest-list-container .guests").css({ | |
| height: 540 - a | |
| }); | |
| this.chatOffsetTop = a; | |
| }, | |
| chatResizeStart: function (a) { | |
| $(document.body).bind("mousemove", this.chatResizeMove); | |
| $(document.body).bind("mouseup mouseout", this.chatResizeStop); | |
| $(document.body).bind("selectstart", this.chatResizeCancelSelect); | |
| $(".chatHeader").addClass("active"); | |
| this.chatOffsetTopOld = this.chatOffsetTop; | |
| this.chatResizeStartY = a.pageY; | |
| }, | |
| chatResizeMove: function (a) { | |
| this.chatOffsetTop = this.chatOffsetTopOld + (a.pageY - this.chatResizeStartY); | |
| if (this.chatOffsetTop > 577) { | |
| this.chatOffsetTop = 577; | |
| } | |
| this.chatResizeSetOffset(this.chatOffsetTop); | |
| }, | |
| chatResizeCancelSelect: function (a) { | |
| a.preventDefault(); | |
| }, | |
| chatResizeStop: function (a) { | |
| if (a.type == "mouseout" && $(a.target).closest("#outer").length) { | |
| return; | |
| } | |
| $(document.body).unbind("mousemove", this.chatResizeMove); | |
| $(document.body).unbind("mouseup mouseout", this.chatResizeStop); | |
| $(document.body).unbind("selectstart", this.chatResizeCancelSelect); | |
| $(".chatHeader").removeClass("active"); | |
| this.chatOffsetTopOld = this.chatOffsetTop; | |
| util.setSetting("chatOffset", String(this.chatOffsetTop)); | |
| }, | |
| handlePM: function (b, a) { | |
| var c = function () { | |
| if (b && b.senderid && b.text) { | |
| turntable.buddyList.pmWindows[b.senderid].addPM(b); | |
| } | |
| }; | |
| if (!(b.senderid in turntable.buddyList.pmWindows)) { | |
| turntable.buddyList.addPMWindow(b.senderid, a, c); | |
| } else { | |
| c(); | |
| turntable.buddyList.pmWindows[b.senderid].open(a); | |
| } | |
| }, | |
| chatTextListener: function (c) { | |
| var g = c.target; | |
| var h = c.charCode || c.keyCode; | |
| var j = this; | |
| if (h == 38 || h == 40 || h == 27 || (h == 39 && g.selectionEnd == g.value.length)) { | |
| return; | |
| } | |
| var k = g.value.substring(0, c.target.selectionEnd); | |
| var b = false; | |
| var i = this.lastValidAtSymbolIndex(k); | |
| if (i >= 0) { | |
| b = k.slice(i + 1).toLowerCase(); | |
| } | |
| $("#nameSuggest").remove(); | |
| this.suggestedName = false; | |
| if (b === false) { | |
| return; | |
| } | |
| var f = []; | |
| $.each(this.users, function () { | |
| var e = (this.name[0] == "@") ? this.name.slice(1) : this.name; | |
| if (e.toLowerCase().slice(0, -1).indexOf(b) == 0) { | |
| f.push(this.name); | |
| } | |
| }); | |
| if (f.length) { | |
| util.alphabetize(f); | |
| var a = util.buildTree(Room.layouts.nameSuggest(f)); | |
| this.suggestedName = f[0]; | |
| $("body").append(a); | |
| var d = $("div.chatBar input").offset(); | |
| $(a).css({ | |
| left: d.left + 1 + "px", | |
| top: d.top + 1 - $(a).outerHeight() + "px" | |
| }); | |
| $(".suggestedName").click(function (l) { | |
| j.chooseSuggestedName(false, $(l.target).text()); | |
| }).mouseover(function (l) { | |
| if (!$(this).hasClass("selected")) { | |
| j.suggestedName = $(this).text(); | |
| $(".suggestedName.selected").removeClass("selected"); | |
| $(this).addClass("selected"); | |
| } | |
| }); | |
| } | |
| return true; | |
| }, | |
| chatKeyDownListener: function (d) { | |
| var a = d.target; | |
| var b = d.charCode || d.keyCode; | |
| if (this.suggestedName && a.value.match(/@/)) { | |
| if (b == 13 || b == 9) { | |
| this.chooseSuggestedName(a, this.suggestedName); | |
| return false; | |
| } else { | |
| if (b == 38) { | |
| var f = $(".suggestedName.selected").prev(); | |
| if (f.length) { | |
| this.suggestedName = $(".suggestedName.selected").removeClass("selected").prev().addClass("selected").text(); | |
| } | |
| return false; | |
| } else { | |
| if (b == 40) { | |
| var c = $(".suggestedName.selected").next(); | |
| if (c.length) { | |
| this.suggestedName = $(".suggestedName.selected").removeClass("selected").next().addClass("selected").text(); | |
| } | |
| return false; | |
| } else { | |
| if (b == 27 || (b == 39 && a.selectionEnd == a.value.length)) { | |
| this.cancelNameSuggest(); | |
| return false; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| lastValidAtSymbolIndex: function (a) { | |
| var c = a.split("@"); | |
| if (c.length > 1) { | |
| for (var b = c.length - 2; b >= 0; b--) { | |
| if (!c[b].length || (c[b].length && c[b][c[b].length - 1] == " ")) { | |
| return c.slice(0, b + 1).join("@").length; | |
| } | |
| } | |
| if (c[0] == "") { | |
| return 0; | |
| } | |
| } | |
| return -1; | |
| }, | |
| chooseSuggestedName: function (a, b) { | |
| if (!b) { | |
| return; | |
| } | |
| if (!a) { | |
| a = $(".input-box input")[0]; | |
| } | |
| if (b[0] == "@") { | |
| b = b.slice(1); | |
| } | |
| var e = a.value.substring(0, a.selectionEnd); | |
| var f = a.value.substring(a.selectionEnd); | |
| var d = this.lastValidAtSymbolIndex(e); | |
| var c = e.slice(0, d + 1) + b + " "; | |
| $(a).val(c + f); | |
| a.selectionEnd = c.length; | |
| this.cancelNameSuggest(); | |
| }, | |
| cancelNameSuggest: function () { | |
| this.suggestedName = false; | |
| $("#nameSuggest").remove(); | |
| } | |
| }); | |
| Room.layouts = { | |
| zeroClip: null, | |
| page: function (b, a) { | |
| return (["div.roomView", | |
| {}, ["div#top-panel", | |
| {}, ["div#room-info-tab", | |
| {}, ["div.content", | |
| {}, ["div.infowrap", | |
| {}, ["div.creator"], | |
| ["div.edit-description-btn", | |
| {}, "Edit Description"], | |
| ["div.edit-description", | |
| {}, ["textarea.edit"]], | |
| ["div.description"] | |
| ], | |
| ["div", | |
| {}, ["div.title", | |
| {}, "Recent songs:"], | |
| ["div.songlog"] | |
| ] | |
| ], | |
| ["div.button"] | |
| ], | |
| ["div.header", | |
| {}, ["div##logo.logo"], | |
| ["div##userauth.userauthContainer"], | |
| ["div.room-buttons", | |
| {}, ["div##listRooms.list"], | |
| ["div##randomRoom.random"] | |
| ], | |
| ["div.search", | |
| {}, ["input", | |
| { | |
| type: "text", | |
| value: "room name, artist, song, or user" | |
| }], | |
| ["div.mag-glass"] | |
| ] | |
| ], | |
| ["div.info", | |
| {}, ["div.room", | |
| {}, ["div##favorite.favorite", | |
| { | |
| event: { | |
| click: b | |
| } | |
| }], | |
| ["div##roomName.name"] | |
| ], | |
| ["div.feedback"], | |
| ["div.faqButton", | |
| { | |
| event: { | |
| click: function () { | |
| open("http://faq.turntable.fm/"); | |
| } | |
| } | |
| }], | |
| ["div.url", | |
| {}, ["div.title", | |
| {}, "Link:"], | |
| ["div.copy-link", | |
| {}, ["input##copyText", | |
| { | |
| type: "text" | |
| }]], | |
| ["div##zeroClipContainer.zeroClipContainer", | |
| {}, ["div##zeroClipButton.zeroClipButton"]] | |
| ], | |
| ["div.share-on", | |
| {}, ["div.title", | |
| {}, "Share:"], | |
| ["div#fb-button.facebook.icon"], | |
| ["div#twitter-button.twitter.icon"], | |
| ["div#email-button.email.icon"] | |
| ] | |
| ] | |
| ], | |
| ["div##roomArea", | |
| { | |
| style: { | |
| position: "absolute", | |
| top: "100px" | |
| } | |
| }], | |
| ["div.roomTip", | |
| {}, ["div.roomTipClose"], | |
| ["div.text"] | |
| ], | |
| ["div#right-panel", | |
| {}, ["div##playlist"], | |
| ["div.chat-container", | |
| {}, ["div.chatHeader.black-right-header", | |
| {}, ["img.icon", | |
| { | |
| src: "https://s3.amazonaws.com/static.turntable.fm/images/room/chat_icon.png" | |
| }], | |
| ["div.header-text", | |
| {}, "Chat"], | |
| ["div##chatSound.chatsound", | |
| {}, ["div.dingOn", "ding on"], | |
| ["div.dingMention", "ding mention"], | |
| ["div.dingOff", "ding off"] | |
| ], | |
| ["div.chatResizeIcon"] | |
| ], | |
| ["div##chatLog.messages"], | |
| ["div.chatBar", | |
| {}, ["div.guestListButton", | |
| { | |
| event: { | |
| click: function () { | |
| $("div.guest-list-container").animate({ | |
| marginLeft: "0px" | |
| }); | |
| turntable.NLcgRGlUht.cancelNameSuggest(); | |
| }, | |
| mouseover: function () { | |
| $(this).find(".guestListIcon").addClass("slideRight"); | |
| }, | |
| mouseout: function () { | |
| $(this).find(".guestListIcon").removeClass("slideRight"); | |
| } | |
| } | |
| }, ["div.guestListIcon"]], | |
| ["form##chatForm.input-box", | |
| {}, ["input##chatText", | |
| { | |
| event: { | |
| keyup: a | |
| }, | |
| type: "text", | |
| placeholder: "enter a message" | |
| }]] | |
| ] | |
| ], | |
| ["div.guest-list-container", | |
| {}, ["div.chatHeader.black-right-header", | |
| {}, ["img.icon", | |
| { | |
| src: "https://s3.amazonaws.com/static.turntable.fm/images/room/guest_list_icon_top.png" | |
| }], | |
| ["div.header-text", | |
| {}, "Guest List"], | |
| ["div.chatResizeIcon"] | |
| ], | |
| ["div.guests"], | |
| ["div.chatBar", | |
| {}, ["div.guestListButton", | |
| { | |
| event: { | |
| click: function () { | |
| var c = $("div.guest-list-container"); | |
| c.animate({ | |
| marginLeft: "-" + c.outerWidth() + "px" | |
| }); | |
| } | |
| } | |
| }, ["div.guestListIcon.slideLeft"]], | |
| ["div.guestListSize", | |
| {}, ["span#totalUsers", | |
| {}, | |
| 0], " people are in this room."] | |
| ] | |
| ] | |
| ] | |
| ]); | |
| }, | |
| chatMessage: ["div.message", | |
| {}, ["span.speaker"], | |
| ["span.text"] | |
| ], | |
| nameSuggest: function (e) { | |
| var b = ["div#nameSuggest", | |
| {}]; | |
| for (var c = 0, a = Math.min(e.length, 4); c < a; c++) { | |
| var d = (c == 0) ? ".selected" : ""; | |
| b.push(["div.suggestedName" + d, | |
| {}, | |
| e[c]]); | |
| } | |
| return b; | |
| }, | |
| guestListName: function (b, f, c) { | |
| var a = "https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/" + b.avatarid + "/scaled/55/headfront.png"; | |
| var e = c ? ".guest.selected" : ".guest"; | |
| var d = ""; | |
| if (f.isSuperuser(b.userid)) { | |
| d = ".superuser"; | |
| } else { | |
| if (f.isMod(b.userid)) { | |
| d = ".mod"; | |
| } | |
| } | |
| return ["div" + e, { | |
| event: { | |
| mouseover: function () { | |
| $(this).find("div.guestArrow").show(); | |
| }, | |
| mouseout: function () { | |
| $(this).find("div.guestArrow").hide(); | |
| }, | |
| click: function () { | |
| var g = $(this).parent().find("div.guestOptionsContainer"); | |
| var h = $(this); | |
| if (!g.length) { | |
| $.proxy(function () { | |
| this.addGuestListMenu(b, h); | |
| }, f)(); | |
| } else { | |
| if ($(this).hasClass("selected")) { | |
| f.removeGuestListMenu(); | |
| } else { | |
| f.removeGuestListMenu($.proxy(function () { | |
| this.addGuestListMenu(b, h); | |
| }, f)); | |
| } | |
| } | |
| } | |
| }, | |
| data: { | |
| id: b.userid | |
| } | |
| }, ["div.guestAvatar", | |
| {}, ["img", | |
| { | |
| src: a, | |
| height: "20" | |
| }]], ["div.guestName" + d, | |
| {}, | |
| b.name], ["div.guestArrow"]]; | |
| }, | |
| guestOptions: function (a, c) { | |
| var b = ["div.guestOptions", | |
| { | |
| event: { | |
| mouseover: function () { | |
| if (c.guestOptionsHoverTimer) { | |
| clearTimeout(c.guestOptionsHoverTimer); | |
| } | |
| }, | |
| mouseout: function () { | |
| c.guestOptionsHoverTimer = setTimeout(function () { | |
| c.removeGuestListMenu(); | |
| }, 1000); | |
| } | |
| } | |
| }]; | |
| b.push(Room.layouts.guestOption("View Profile", "profile", a.userid, c)); | |
| if (a.userid == ZpMdsdrXly.myuserid && c.isDj()) { | |
| b.push(Room.layouts.guestOption("Skip My Song", "stop_song", a.userid, c)); | |
| b.push(Room.layouts.guestOption("Quit DJing", "rem_dj", a.userid, c)); | |
| } | |
| if (ZpMdsdrXly.moderator && a.userid != ZpMdsdrXly.myuserid) { | |
| if (turntable.user.acl >= a.acl) { | |
| b.push(Room.layouts.guestOption("Boot User", "boot_user", a.userid, c)); | |
| if ($.inArray(a.userid, ZpMdsdrXly.moderators) >= 0) { | |
| b.push(Room.layouts.guestOption("Remove Moderator", "rem_moderator", a.userid, c)); | |
| } else { | |
| b.push(Room.layouts.guestOption("Make a Moderator", "add_moderator", a.userid, c)); | |
| } | |
| } | |
| if (c.isDj(a.userid)) { | |
| b.push(Room.layouts.guestOption("Remove DJ", "remove_dj", a.userid, c)); | |
| } | |
| } | |
| if (a.userid != ZpMdsdrXly.myuserid) { | |
| if (a.fanof) { | |
| b.push(Room.layouts.guestOption("Unfan", "remove_fan", a.userid, c)); | |
| } else { | |
| b.push(Room.layouts.guestOption("Become a Fan", "become_fan", a.userid, c)); | |
| } | |
| b.push(Room.layouts.guestOption("Send Private Message", function () { | |
| c.handlePM({ | |
| senderid: a.userid | |
| }, true); | |
| })); | |
| } | |
| return ["div.guestOptionsContainer", {}, b, ["div.guestOptionsNib", | |
| { | |
| event: { | |
| click: function () { | |
| c.removeGuestListMenu(); | |
| } | |
| } | |
| }, ["div.guestOptionsNibArrow"]]]; | |
| }, | |
| guestOption: function (c, d, a, b) { | |
| return ["a.guestOption", { | |
| href: "#", | |
| event: { | |
| click: function () { | |
| if (typeof d == "string") { | |
| b.vWsUvfbJZlgIXRCallback(d, a); | |
| } else { | |
| if (typeof d == "function") { | |
| d(); | |
| } | |
| } | |
| $("div.guestOptionsContainer").remove(); | |
| return false; | |
| } | |
| } | |
| }, c]; | |
| }, | |
| listRooms: ["div.listRooms.modal", | |
| {}, ["div.roomIndexContainer"], | |
| ["div.closeFooter", | |
| {}, ["a.close", "close"], " or ", ["a.createRoom", "create new room"]] | |
| ], | |
| addSongOverlay: function (b) { | |
| var a = function (c) { | |
| return { | |
| event: { | |
| click: function () { | |
| b.addSong(c); | |
| } | |
| } | |
| }; | |
| }; | |
| return ["div.addSongOverlay", {}, ["div.close-x", | |
| { | |
| event: { | |
| click: function () { | |
| $(".addSongOverlay").remove(); | |
| } | |
| } | |
| }], ["div.content", | |
| {}, "Add song to:", ["div.options", | |
| {}, ["div.btn.queue", a("queue"), ["div.text", "queue"]], | |
| ["div.btn.amazon", a("amazon"), ["div.text", "amazon"]], | |
| ["div.btn.itunes", a("itunes"), ["div.text", "iTunes"]], | |
| ["div.btn.lastfm", a("lastfm"), ["div.text", "last.fm"]], | |
| ["div.btn.spotify", a("spotify"), ["div.text", "spotify"]], | |
| ["div.btn.rdio", a("rdio"), ["div.text", "rdio"]] | |
| ]]]; | |
| }, | |
| songView: function (e, f) { | |
| var d = f.metadata; | |
| var c = function (g, h) { | |
| return { | |
| event: { | |
| click: function () { | |
| e.addSong(g, h); | |
| } | |
| } | |
| }; | |
| }; | |
| var a = dmca.showPreview(f); | |
| var b = ""; | |
| if (f.djname) { | |
| b = ["div.djinfo", | |
| {}, "\u00b7", ["img", | |
| { | |
| src: "https://s3.amazonaws.com/static.turntable.fm/images/room/dj_icon.png" | |
| }], | |
| ["a.dj", | |
| { | |
| event: { | |
| click: function () { | |
| ZpMdsdrXly.callback("profile", f.djid); | |
| } | |
| } | |
| }, | |
| f.djname] | |
| ]; | |
| } | |
| return ["div.song", { | |
| data: { | |
| songData: f | |
| } | |
| }, ["div.progress"], ["div.thumbcontainer", | |
| {}, (d.coverart ? ["img.thumb", | |
| { | |
| src: d.coverart | |
| }] : null)], ["div.playSample", | |
| { | |
| style: (a ? {} : { | |
| display: "none" | |
| }), | |
| event: { | |
| click: function () { | |
| e.samplePlay(this); | |
| } | |
| } | |
| }], ["div.pauseSample", | |
| { | |
| event: { | |
| click: turntablePlayer.sampleStop | |
| } | |
| }], ["div.songinfo", | |
| {}, ["div.title", | |
| { | |
| title: d.song | |
| }, | |
| d.song], | |
| ["div.details", | |
| {}, ["div", | |
| {}, | |
| d.artist + " - " + turntable.playlist.humanDuration(d.length)], | |
| ["div.score"], b, ], | |
| ["div.addSong", | |
| {}, ["div.btn.queue", c("queue", f)], | |
| ["div.btn.amazon", c("amazon", f)], | |
| ["div.btn.itunes", c("itunes", f)], | |
| ["div.btn.lastfm", c("lastfm", f)], | |
| ["div.btn.spotify", c("spotify", f)], | |
| ["div.btn.rdio", c("rdio", f)] | |
| ] | |
| ]]; | |
| }, | |
| bootConfirmView: function (a, b) { | |
| return ["div.modal", {}, ["div.close-x", | |
| { | |
| event: { | |
| click: util.hideOverlay | |
| } | |
| }], ["h1", "Boot User"], ["br"], ["div.field", | |
| {}, "You're about to boot ", a, " from the room.", ["br"], | |
| ["br"], "Care to give a reason?", ["br"], | |
| ["input.bootReasonField.text", | |
| { | |
| placeholder: "(optional)" | |
| }] | |
| ], ["div.ok-button.centered-button", | |
| { | |
| event: { | |
| click: b | |
| } | |
| }]]; | |
| }, | |
| addModConfirmView: function (a, b) { | |
| return ["div.modal", {}, ["div.close-x", | |
| { | |
| event: { | |
| click: util.hideOverlay | |
| } | |
| }], ["h1", "Add Moderator"], ["br"], ["div.field", | |
| {}, "You're about to bestow moderator powers upon ", a, ".", ["br"]], ["div.ok-button.centered-button", | |
| { | |
| event: { | |
| click: b | |
| } | |
| }], ["p.cancel.no-thanks", | |
| { | |
| event: { | |
| click: util.hideOverlay | |
| }, | |
| style: { | |
| "padding-top": "10px" | |
| } | |
| }, "Cancel"]]; | |
| }, | |
| removeModConfirmView: function (a, b) { | |
| return ["div.modal", {}, ["div.close-x", | |
| { | |
| event: { | |
| click: util.hideOverlay | |
| } | |
| }], ["h1", "Remove Moderator"], ["br"], ["div.field", | |
| {}, "You're about to remove ", a, "'s moderator powers.", ["br"]], ["div.ok-button.centered-button", | |
| { | |
| event: { | |
| click: b | |
| } | |
| }], ["p.cancel.no-thanks", | |
| { | |
| event: { | |
| click: util.hideOverlay | |
| }, | |
| style: { | |
| "padding-top": "10px" | |
| } | |
| }, "Cancel"]]; | |
| }, | |
| profileView: function (a) { | |
| return ["div#profileModal.modal", {}, ["div.close-x", | |
| { | |
| event: { | |
| click: function () { | |
| util.hideOverlay(); | |
| } | |
| } | |
| }], ["div.mainarea", | |
| {}, ["div.avatar", | |
| {}, ["img"]], | |
| ["canvas.laptop", | |
| { | |
| width: 282, | |
| height: 190 | |
| }], | |
| ["div.info", | |
| {}, ["div.section", ["div.name", | |
| {}, | |
| a.name], | |
| ["div.acl"], ], | |
| ["div.section.top", ["div.social", | |
| {}, ["a.twitter", | |
| { | |
| target: "_blank" | |
| }], | |
| ["a.facebook", | |
| { | |
| target: "_blank" | |
| }] | |
| ], | |
| ["div.website", | |
| {}, | |
| a.website], ], ], | |
| ["div.section", | |
| {}, ["div.left", | |
| {}, "Stats"], | |
| ["div.right", | |
| {}, ["div.points", | |
| {}, | |
| a.points + " DJ points"], | |
| ["div.fans", | |
| {}, | |
| a.fans + " fans"], | |
| ["div.joined", | |
| {}, "joined " + util.prettyDate(a.created)] | |
| ] | |
| ], | |
| ["div.section.about", | |
| {}, ["div.left", | |
| {}, "About me"], | |
| ["div.right", | |
| {}, | |
| a.about] | |
| ], | |
| ["div.section.topartists", | |
| {}, ["div.left", | |
| {}, "Favorite artists"], | |
| ["div.right", | |
| {}, | |
| a.topartists] | |
| ], | |
| ["div.section.hangout", | |
| {}, ["div.left", | |
| {}, "Usually hanging out in"], | |
| ["div.right", | |
| {}, | |
| a.hangout] | |
| ], | |
| ["div.spacer"] | |
| ]]; | |
| } | |
| }; | |
| var RoomList = Class.extend({ | |
| init: function (b) { | |
| this.currentRoomId = b; | |
| this.searchQuery = null; | |
| this.listRooms = $.proxy(this.listRooms, this); | |
| this.refreshRoomList = $.proxy(this.refreshRoomList, this); | |
| this.searchSubmit = $.proxy(this.searchSubmit, this); | |
| this.searchKeyUp = $.proxy(this.searchKeyUp, this); | |
| this.searchClear = $.proxy(this.searchClear, this); | |
| this.enterRoom = $.proxy(this.enterRoom, this); | |
| this.nodes = {}; | |
| this.view = util.buildTree(RoomList.layouts.roomList(this), this.nodes); | |
| this.refreshRoomList(); | |
| this.skip = 0; | |
| this.last_refresh = 0; | |
| var a = this; | |
| $(this.nodes.roomsList).unbind("scroll"); | |
| $(this.nodes.roomsList).scroll(function () { | |
| if ($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight) { | |
| var c = (new Date()).getTime(); | |
| if ((c - a.last_refresh) /1000>1){a.skip+=20;a.refreshRoomList(a.skip,true);a.last_refresh=(new Date()).getTime();}}});util.QIQOxBrdu(this);},refreshRoomList:function(c,a){if(this.refreshTimer){clearTimeout(this.refreshTimer);}if(true||!turntable.isIdle){if(!c){c=0;}var b={api:"room.list_rooms",skip:c};if(this.searchQuery){b={api:"room.search",query:this.searchQuery,skip:c};}if(a){turntable.ImGCdVsOO(b,this.listRoomsAppend);}else{turntable.ImGCdVsOO(b,this.listRooms);}}},searchKeyUp:function(){if(this.nodes.searchQuery.value){$(this.nodes.clearSearch).addClass("active");}else{$(this.nodes.clearSearch).removeClass("active");if(this.searchQuery){this.searchQuery=null;this.refreshRoomList();}}},searchSubmit:function(){this.skip=0;var a=$.trim(this.nodes.searchQuery.value);if(a!=this.searchQuery){this.searchQuery=a;this.refreshRoomList();}},searchClear:function(){var b=$(this.nodes.clearSearch);if(b.hasClass("active")){if(this.searchQuery){this.searchQuery=null;this.refreshRoomList();}b.removeClass("active");var a=$(this.nodes.searchQuery);a.val("").focus();}},listRooms:function(k,b){if(!k.rooms.length){this.skip=0;}if(!b){$(this.nodes.roomList).empty();}var q=this;var e=function(){q.enterRoom($(this));};for(var l=0;l<k.rooms.length;l++){var c=k.rooms[l][0];var h=c.metadata.current_song;var o=(h?h.metadata.artist+" \u2015 "+h.metadata.song:"");var d=util.buildTree(RoomList.layouts.roomView(c,o,e));var n=k.rooms[l][1];var p=$(d).find(".friends");for(var g=0;g<n.length;g++){var m=n[g];var a="";if(m.fbid){a="https:/ / graph.facebook.com / "+m.fbid+" / picture ";}else{if(m.twitterid_lower){a=" | |
| https: //api.twitter.com/1/users/profile_image?screen_name="+m.twitterid_lower+"&size=normal";}else{a="https://s3.amazonaws.com/static.turntable.fm/roommanager_assets/avatars/"+m.avatarid+"/headfront.png";}}p.append('<img src="'+a+'" width="35" height="35" title="'+m.name+'" />');}if(c.roomid==this.currentRoomId){$(d).addClass("currentRoom");}this.nodes.roomList.appendChild(d);}$(this.nodes.roomList).find(".roomRow:even").addClass("odd");},listRoomsAppend:function(a){if(turntable.NLcgRGlUht.roomId){turntable.NLcgRGlUht.roomList.listRooms(a,true);}else{welcome.roomList.listRooms(a,true);}},enterRoom:function(a){if(a.hasClass("currentRoom")){return;}turntable.setPage(a.data("shortcut"),a.data("id"));util.hideOverlay();},cleanup:function(){if(this.refreshTimer){clearTimeout(this.refreshTimer);this.refreshTimer=null;}}});RoomList.layouts={roomList:function(a){return(["div.roomIndex",{},["div.rooms.roomsHeader",{},["form.roomSearch",{event:{submit:a.searchSubmit}},["input##searchQuery",{event:{keyup:a.searchKeyUp},placeholder:"search all rooms \u2015 enter room name"}],["div##clearSearch.clearSearch",{event:{click:a.searchClear}}]],],["div##roomsList.rooms.roomsList",{},["table.roomsTable",{},["thead",{},["tr",{},["th.listeners",{scope:"col"},"Listeners"],["th",{scope:"col"},"Room name and Current song"],["th.friends",{scope:"col"},"Friends"]]],["tbody##roomList"]]]]);},roomView:function(c,b,a){return(["tr.roomRow",{data:{id:c.roomid,shortcut:c.shortcut},event:{click:a}},["td.roomStats",{},["div.nListeners",{},String(c.metadata.listeners)],["div.numDJs",{},c.metadata.djcount,"/",c.metadata.max_djs," DJs"]],["td.roomtitles",{},["div.roomInfo",{},["span.roomName",{},c.name]],["div.songtitles",{},b]],["td.friends"]]);},};var ZeroClipboard={version:"1.0.7",clients:{},moviePath:"static/zeroclipboard/ZeroClipboard.swf",nextId:1,$:function(a){if(typeof(a)=="string"){a=document.getElementById(a);}if(!a.addClass){a.hide=function(){this.style.display="none";};a.show=function(){this.style.display="";};a.addClass=function(b){this.removeClass(b);this.className+=" "+b;};a.removeClass=function(d){var e=this.className.split(/\s+/);var b=-1;for(var c=0;c<e.length;c++){if(e[c]==d){b=c;c=e.length;}}if(b>-1){e.splice(b,1);this.className=e.join(" ");}return this;};a.hasClass=function(b){return !!this.className.match(new RegExp("\\s*"+b+"\\s*"));};}return a;},setMoviePath:function(a){this.moviePath=a;},dispatch:function(d,b,c){var a=this.clients[d];if(a){a.receiveEvent(b,c);}},register:function(b,a){this.clients[b]=a;},getDOMObjectPosition:function(c,a){var b={left:0,top:0,width:c.width?c.width:c.offsetWidth,height:c.height?c.height:c.offsetHeight};while(c&&(c!=a)){b.left+=c.offsetLeft;b.top+=c.offsetTop;c=c.offsetParent;}return b;},Client:function(a){this.handlers={};this.id=ZeroClipboard.nextId++;this.movieId="ZeroClipboardMovie_"+this.id;ZeroClipboard.register(this.id,this);if(a){this.glue(a);}}};ZeroClipboard.Client.prototype={id:0,ready:false,movie:null,clipText:"",handCursorEnabled:true,cssEffects:true,handlers:null,glue:function(d,b,e){this.domElement=ZeroClipboard.$(d);var f=99;if(this.domElement.style.zIndex){f=parseInt(this.domElement.style.zIndex,10)+1;}if(typeof(b)=="string"){b=ZeroClipboard.$(b);}else{if(typeof(b)=="undefined"){b=document.getElementsByTagName("body")[0];}}var c=ZeroClipboard.getDOMObjectPosition(this.domElement,b);this.div=document.createElement("div");var a=this.div.style;a.position="absolute";a.left=""+c.left+"px";a.top=""+c.top+"px";a.width=""+c.width+"px";a.height=""+c.height+"px";a.zIndex=f;if(typeof(e)=="object"){for(addedStyle in e){a[addedStyle]=e[addedStyle];}}b.appendChild(this.div);this.div.innerHTML=this.getHTML(c.width,c.height);},getHTML:function(d,a){var c="";var b="id="+this.id+"&width="+d+"&height="+a;if(navigator.userAgent.match(/MSIE/)){var e=location.href.match(/^https/i)?"https://":"http://";c+='<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+e+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+d+'" height="'+a+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+b+'"/><param name="wmode" value="transparent"/></object>';}else{c+='<embed id="'+this.movieId+'" src="'+ZeroClipboard.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+d+'" height="'+a+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+b+'" wmode="transparent" />';}return c;},hide:function(){if(this.div){this.div.style.left="-2000px";}},show:function(){this.reposition();},destroy:function(){if(this.domElement&&this.div){this.hide();this.div.innerHTML="";var a=document.getElementsByTagName("body")[0];try{a.removeChild(this.div);}catch(b){}this.domElement=null;this.div=null;}},reposition:function(c){if(c){this.domElement=ZeroClipboard.$(c);if(!this.domElement){this.hide();}}if(this.domElement&&this.div){var b=ZeroClipboard.getDOMObjectPosition(this.domElement);var a=this.div.style;a.left=""+b.left+"px";a.top=""+b.top+"px";}},setText:function(a){this.clipText=a;if(this.ready){this.movie.setText(a);}},addEventListener:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");if(!this.handlers[a]){this.handlers[a]=[];}this.handlers[a].push(b);},setHandCursor:function(a){this.handCursorEnabled=a;if(this.ready){this.movie.setHandCursor(a);}},setCSSEffects:function(a){this.cssEffects=!!a;},receiveEvent:function(d,e){d=d.toString().toLowerCase().replace(/^on/,"");switch(d){case"load":this.movie=document.getElementById(this.movieId);if(!this.movie){var c=this;setTimeout(function(){c.receiveEvent("load",null);},1);return;}if(!this.ready&&navigator.userAgent.match(/Firefox/)&&navigator.userAgent.match(/Windows/)){var c=this;setTimeout(function(){c.receiveEvent("load",null);},100);this.ready=true;return;}this.ready=true;this.movie.setText(this.clipText);this.movie.setHandCursor(this.handCursorEnabled);break;case"mouseover":if(this.domElement&&this.cssEffects){this.domElement.addClass("hover");if(this.recoverActive){this.domElement.addClass("active");}}break;case"mouseout":if(this.domElement&&this.cssEffects){this.recoverActive=false;if(this.domElement.hasClass("active")){this.domElement.removeClass("active");this.recoverActive=true;}this.domElement.removeClass("hover");}break;case"mousedown":if(this.domElement&&this.cssEffects){this.domElement.addClass("active");}break;case"mouseup":if(this.domElement&&this.cssEffects){this.domElement.removeClass("active");this.recoverActive=false;}break;}if(this.handlers[d]){for(var b=0,a=this.handlers[d].length;b<a;b++){var f=this.handlers[d][b];if(typeof(f)=="function"){f(this,e);}else{if((typeof(f)=="object")&&(f.length==2)){f[0][f[1]](this,e);}else{if(typeof(f)=="string"){window[f](this,e);}}}}}}};var PMWindow=Class.extend({buddyList:{},otherUser:{},otherUserId:false,otherUserName:false,isClosed:true,isMinimized:false,isOverflow:false,lastActive:false,firstPM:false,iAmUnavailable:false,hasError:false,isIgnored:false,init:function(a,c,d){this.buddyList=c;this.otherUser=a;this.otherUserId=a.userid;this.otherUserName=a.name;this.lastActive=new Date().getTime();this.nodes={};var b=("status" in a)?a.status:"available";this.pmWindow=$(util.buildTree(PMWindow.layouts.pmWindow(this.otherUser,b,$.proxy(this.toggleOptions,this)),this.nodes));var e=$(".pmContainer").last();if(e.length){this.pmWindow.css({left:(e.offset().left+e.outerWidth()+10)+"px"});}$("#closedPMWindows").append(this.pmWindow);this.addPMHistory();this.updateStatus(b,false,true);this.updateMyAvailability(true);this.setIgnored(d,true);$(this.nodes.pmInputForm).submit($.proxy(this.sendPM,this));$(this.nodes.close).click($.proxy(function(f){this.close();},this));$(this.nodes.header).click($.proxy(function(f){this.toggleMinimize();},this));},addPM:function(d,a,c){this.open(false);if(!this.firstPM){this.firstPM=d;}if(c){this.hasError=true;var b=false;if(c==4){b="offline";}else{if(c==5){b="unavailable";}else{if(c==6){this.updateMyAvailability();}}}if(b){this.updateStatus(b,true);}}else{if(!c&&this.otherUser.status.match(/offline|unavailable/)){turntable.ImGCdVsOO({api:"presence.get",uid:this.otherUserId},$.proxy(function(e){if(e.success&&"presence" in e){this.updateStatus(e.presence.status,true);}if(d.text){this.addPMText(d.text,a,this.hasError);}},this));return;}}if(d.text){this.addPMText(d.text,a,this.hasError);}},addPMText:function(g,c,a,b){var e=c?"Me":this.otherUserName;var f=(b)?$(this.nodes.history):$(this.nodes.content);var d=util.buildTree(PMWindow.layouts.pm(e,a));$(d).find(".pmMessage").html(util.messageFilter(g));f.append(d);this.redraw();if(!c&&!$(this.nodes.container).find("input:focus").length&&!b){$(this.nodes.header).addClass("newMessage");if(this.isOverflow){$("div#pmOverflowIcon").addClass("newMessage");$(this.nodes.overflowListItem).addClass("newMessage");}this.playDing();$(this.nodes.container).click($.proxy(function(h){$(this.nodes.header).removeClass("newMessage");$(this.nodes.container).unbind("click");},this));}},addPMHistory:function(){turntable.ImGCdVsOO({api:"pm.history",receiverid:this.otherUserId},$.proxy(function(d){if(d.success&&d.history.length){$(this.nodes.historyDivider).show();for(var c=0;c<d.history.length;c++){var b=d.history[c];var a=!(b.senderid==this.otherUserId);this.addPMText(d.history[c].text,a,false,true);}if(this.firstPM&&"text" in this.firstPM&&"time" in this.firstPM&&d.history[d.history.length-1].text==this.firstPM.text&&d.history[d.history.length-1].time==this.firstPM.time){$(this.nodes.history).find(".pmMessageContainer").last().remove();}}},this));},sendPM:function(a){a.preventDefault();var b=this.nodes.pmInput.value;this.nodes.pmInput.value="";if(!b){return;}if(this.isIgnored){this.addPMText(b,true,true);}else{turntable.ImGCdVsOO({api:"pm.send",receiverid:this.otherUserId,text:b},$.proxy(function(c){if(c.success){this.addPM({text:b},true);}else{if(c.errid){this.addPM({text:b},true,c.errid);}}},this));}},updateStatus:function(c,b,d){if(!d&&c==this.otherUser.status){return;}var a=this.otherUser.status;this.showErrors(c);if(!d){this.showStatusMessage(a,c);}this.otherUser.status=c;$(this.nodes.status).removeClass("available away offline unavailable iphone").addClass(c);if(b){this.buddyList.updateBuddyStatus(this.otherUser);}},showErrors:function(a){var b=false;if(this.iAmUnavailable){b="You are currently unavailable and cannot send or receive messages.";}else{if(a=="offline"){b=this.otherUserName+" is offline, your message(s) cannot be delivered.";}else{if(this.isIgnored){b="You have ignored "+this.otherUserName+" and cannot exchange messages with them.";}else{if(a=="unavailable"){b=this.otherUserName+" is unavailable, your message(s) cannot be delivered.";}else{if(a=="iphone"){b=this.otherUserName+" is using our iPhone app, which currently does not support private messages. Your message(s) cannot be delivered.";}}}}}if(b){this.addError(b);this.hasError=true;}else{this.removeError();this.hasError=false;}},addError:function(a){if($(this.nodes.container).find(".pmError").length){this.removeError();}$(this.nodes.content).after(util.buildTree(PMWindow.layouts.pmError(a),this.nodes));var b=$(this.nodes.error).outerHeight();$(this.nodes.content).css({minHeight:(parseInt($(this.nodes.content).css("minHeight"))-b)+"px",maxHeight:(parseInt($(this.nodes.content).css("maxHeight"))-b)+"px",marginBottom:(parseInt($(this.nodes.content).css("marginBottom"))+b)+"px",});this.redraw();},removeError:function(){if($(this.nodes.container).find(".pmError").length){var a=$(this.nodes.error).outerHeight();$(this.nodes.error).remove();$(this.nodes.content).css({minHeight:(parseInt($(this.nodes.content).css("minHeight"))+a)+"px",maxHeight:(parseInt($(this.nodes.content).css("maxHeight"))+a)+"px",marginBottom:(parseInt($(this.nodes.content).css("marginBottom"))-a)+"px",});}this.redraw();},showStatusMessage:function(a,b){var c=false;if(b=="offline"){c={text:this.otherUserName+" went offline.",color:"red"};}else{if(b=="unavailable"||b=="iphone"){c={text:this.otherUserName+" became unavailable.",color:"red"};}else{if((b=="away"||b=="available")&&a=="offline"){c={text:this.otherUserName+" came online.",color:"green"};}else{if((b=="away"||b=="available")&&(a=="unavailable"||a=="iphone")){c={text:this.otherUserName+" became available.",color:"green"};}else{if(b=="ignored"&&a=="unignored"){c={text:"You ignored "+this.otherUserName+".",color:"red"};}else{if(b=="unignored"&&a=="ignored"){c={text:"You unignored "+this.otherUserName+".",color:"green"};}else{if(b=="senderUnavailable"&&a=="senderAvailable"){c={text:"You became unavailable.",color:"red"};}else{if(b=="senderAvailable"&&a=="senderUnavailable"){c={text:"You became available.",color:"green"};}}}}}}}}if(c){$(this.nodes.content).append(util.buildTree(PMWindow.layouts.pmStatus(c)));}this.redraw();},updateMyAvailability:function(b){var a=false;if(this.iAmUnavailable==turntable.isUnavailable){return;}else{if(!this.iAmUnavailable&&turntable.isUnavailable){this.iAmUnavailable=true;if(!b){this.showStatusMessage("senderAvailable","senderUnavailable");}}else{if(this.iAmUnavailable&&!turntable.isUnavailable){this.iAmUnavailable=false;if(!b){this.showStatusMessage("senderUnavailable","senderAvailable");}}}}this.showErrors(this.otherUser.status);},open:function(a){this.lastActive=new Date().getTime();if(this.isClosed||(this.isOverflow&&a)){this.isClosed=false;this.isMinimized=false;$(this.nodes.container).queue($.proxy(function(){this.unOverflow(false);if(a){$(this.nodes.container).detach().prependTo("#pmWindows");}else{$(this.nodes.container).detach().appendTo("#pmWindows");}$(this.nodes.container).css({marginBottom:(-$(this.nodes.container).height())+"px"});this.buddyList.repositionPMWindows(false);if(!this.isOverflow){this.animateOpen(a);}$(this.nodes.container).dequeue();},this));if(this.otherUser.status!="iphone"){turntable.ImGCdVsOO({api:"presence.get",uid:this.otherUserId},$.proxy(function(b){if(b.success&&"presence" in b){this.updateStatus(b.presence.status,true);}},this));}}else{if(this.isMinimized&&a){this.toggleMinimize();}}},animateOpen:function(a){$(this.nodes.container).animate({marginBottom:"0px"},"fast",$.proxy(function(){if(a){$(this.nodes.pmInput).focus();}},this));this.nodes.content.scrollTop+=this.nodes.content.scrollHeight;this.nodes.content.scrollLeft=0;},close:function(){if(!this.isClosed){this.isClosed=true;$(this.nodes.container).animate({marginBottom:(-$(this.nodes.container).height())+"px"},"fast");$(this.nodes.container).queue($.proxy(function(){$(this.nodes.container).detach().appendTo("#closedPMWindows");this.buddyList.repositionPMWindows(true);$(this.nodes.container).dequeue();},this));}else{return;}},redraw:function(){this.nodes.content.scrollTop+=2000;this.nodes.content.scrollLeft=0;this.repositionMinimized();},toggleMinimize:function(){if(parseInt($(this.nodes.container).css("margin-bottom"))<0){this.isMinimized=false;$(this.nodes.container).animate({marginBottom:"0px"},"fast");}else{this.isMinimized=true;this.repositionMinimized(true);}},repositionMinimized:function(a){if(!this.isMinimized){return;}if(a){$(this.nodes.container).animate({marginBottom:(-$(this.nodes.container).height()+28)+"px"},"fast");}else{$(this.nodes.container).css({marginBottom:(-$(this.nodes.container).height()+28)+"px"});}},overflow:function(){if(this.isOverflow){return;}this.isOverflow=true;$(this.nodes.container).detach().appendTo("#overflowPMWindows");var a=BuddyListPM.layouts.buddyListBuddy(this.otherUser,this.buddyList.room,true);$(this.buddyList.nodes.pmOverflowList).append(util.buildTree(a,this.nodes));},unOverflow:function(a){if(!this.isOverflow){return;}this.isOverflow=false;$(this.nodes.container).detach().appendTo("#pmWindows").css({marginBottom:(-$(this.nodes.container).height())+"px"});$(this.nodes.overflowListItem).remove();if(!$("#pmOverflowList li.newMessage").length){$("div#pmOverflowIcon").removeClass("newMessage");}if(a){this.animateOpen(false);}},toggleOptions:function(){if(this.isMinimized){this.toggleMinimize();}var a=$(this.nodes.optionsContainer);if(a.is(":visible")){a.fadeOut("fast");}else{this.refreshOptions();$(this.nodes.optionsContainer).fadeIn("fast");}},refreshOptions:function(){var a=PMWindow.layouts.pmWindowOptions(this.otherUser,$.proxy(this.toggleOptions,this));$(this.nodes.optionsContainer).replaceWith(util.buildTree(a,this.nodes));},setIgnored:function(a,b){if(this.isIgnored==a){return;}this.isIgnored=a;this.showErrors();if(a&&!b){this.showStatusMessage("unignored","ignored");}else{if(!a&&!b){this.showStatusMessage("ignored","unignored");}}},playDing:function(){if(util.getSetting("pmding")!="false"&&!this.isMinimized){turntablePlayer.playEphemeral(UI_SOUND_PM,true);}}});PMWindow.layouts={pmWindow:function(a,b,c){var d={event:{mouseenter:function(){$(this).addClass("hover");},mouseleave:function(){$(this).removeClass("hover");}}};var e=$.extend(true,{},d);e.event.click=c;return["div##container.pmContainer",{data:{userId:a.userid}},["div##header.pmHeader.pmGreyTop",d,a.name,["div##status.status."+b],["div##close.pmWindowIcon.pmClose",d],["div.pmWindowIcon.pmOptions",e]],["div##content.pmContent",{},["div##history.pmHistory"],["div##historyDivider.pmHistoryDivider",{},["span.pmHistoryDividerText",{},"Earlier messages"]]],["div.pmInput",{},["form##pmInputForm",{},["input##pmInput",{placeholder:"enter a message"}]]],PMWindow.layouts.pmWindowOptions(a,c,e)];},pmWindowOptions:function(f,a,b){if(!b){b={event:{mouseover:function(){$(this).addClass("hover");},mouseout:function(){$(this).removeClass("hover");},click:a}};}var c=$.extend(true,{},b);c.event.click=function(){turntable.NLcgRGlUht.vWsUvfbJZlgIXRCallback("profile",f.userid);a();};var g=($.inArray(f.userid,turntable.user.fanOf)!=-1);var i=g?"Unfan":"Become a fan";var j=g?"remove_fan":"become_fan";var e=$.extend(true,{},b);e.event.click=function(){turntable.NLcgRGlUht.vWsUvfbJZlgIXRCallback(j,f.userid);a();};var d=$.extend(true,{},b);d.event.click=function(){turntable.user.ignoredShow();if($("#addIgnoreField").length){$("#addIgnoreField").focus()[0].value=f.name;}a();};var h=$.extend(true,{},b);h.event.click=function(){turntable.NLcgRGlUht.feedbackifyShow();a();};return["div##optionsContainer.pmOptionsContainer",{},["div.pmOptionsIconActive",b],["div.pmOptionsContent",{},["div.pmOption",c,"View Profile"],["div.pmOption",e,i],["div.pmOption",d,"Ignore User"],["div.pmOption",h,"Report User"]]];},pm:function(a,c){var b=(c)?".notSent":"";return["div.pmMessageContainer"+b,{},["span.pmSender",{},a+": "],["span.pmMessage"]];},pmStatus:function(a){return["div.pmStatus."+a.color,{},a.text];},pmError:function(a){return["div##error.pmError",{},a];}};var BuddyListPM=Class.extend({room:{},knownUsers:{},onlineBuddies:{},nodes:{},pmWindows:{},status:"available",init:function(d){this.room=d;$("body").append(util.buildTree(["div#pmWindows"]));$("body").append($(util.buildTree(["div#closedPMWindows"])).hide());$("body").append($(util.buildTree(["div#overflowPMWindows"])).hide());var e=$(util.buildTree(BuddyListPM.layouts.privateChatIcon(turntable.isIdle),this.nodes));e.click(this.toggle);$("#pmWindows").append(e);var c=BuddyListPM.layouts.buddyList(this.toggleOptions,$.proxy(this.toggleUnavailable,this),$.proxy(this.toggleDing,this));var b=$(util.buildTree(c,this.nodes)).hide();$("#maindiv").append(b);$(this.nodes.optionsContainer).hide();if(turntable.isUnavailable){$(this.nodes.unavailableWarning).show();}$(this.nodes.buddyListHeader).click(this.toggle);var a=$(util.buildTree(BuddyListPM.layouts.pmOverflowIcon(),this.nodes)).hide();$("#pmWindows").append(a);var f=$(util.buildTree(BuddyListPM.layouts.pmOverflow(),this.nodes)).hide();$("#maindiv").append(f);$(window).resize($.proxy(this.repositionPMWindows,this));turntable.ImGCdVsOO({api:"room.directory_graph"},$.proxy(function(g){this.updateBuddies(g);},this));},updateMyStatus:function(a){if(a==this.status){return;}this.status=a;$(this.nodes.status).removeClass("available away offline unavailable").addClass(a);},updateBuddies:function(f){if(f.success==true){$(this.nodes.buddyList).empty();var a=[];var e={};if(f.rooms&&f.rooms.length){for(var g=0,l=f.rooms.length;g<l;g++){var c=f.rooms[g];if(c.length&&c[1].length){for(var d=0,n=c[1].length;d<n;d++){var b=c[1][d];b.roomName=c[0].name;a.push(b);e[b.userid]=b;}}}this.onlineBuddies={};a=util.alphabetize(a,"name");for(var g=0,l=a.length;g<l;g++){this.addBuddy(a[g]);}}else{$(this.nodes.buddyList).append(util.buildTree(BuddyListPM.layouts.noBuddies));}for(var g in this.pmWindows){var k=this.pmWindows[g].otherUserId;if(k in e){this.pmWindows[g].updateStatus(e[k].status,false);}else{var m=(turntable.user.fanOf.indexOf(k)>=0);var h=(turntable.user.buddies.indexOf(k)>=0);if(m||h){this.pmWindows[g].updateStatus("offline",false);}}}}},updateBuddyStatus:function(a){if(!("status" in a)){return;}if(a.status=="offline"&&a.userid in this.onlineBuddies){this.removeBuddy(a.userid);}else{if(a.status!="offline"){if(!(a.userid in this.onlineBuddies)){this.addBuddy(a,true);}else{if(a.userid in this.onlineBuddies&&"status"+a.userid in this.nodes){$(this.nodes["status"+a.userid]).removeClass("available away offline unavailable iphone").addClass(a.status);}}}}},addBuddy:function(d,a){if("status" in d&&d.status=="offline"){return;}if(d.userid==turntable.user.id){return;}if("laptop" in d&&d.laptop=="iphone"){d.status="iphone";}if(!(d.userid in this.onlineBuddies)){var c=util.buildTree(BuddyListPM.layouts.buddyListBuddy(d,this.room),this.nodes);$(this.nodes.buddyList).append(c);if(a){var b=$(this.nodes.buddyList).find("li.buddy").sort(function(g,f){var e=$(g).find("div.name").text().toLowerCase();var h=$(f).find("div.name").text().toLowerCase();return(h>e)?-1:(h<e)?1:0;});$(this.nodes.buddyList).empty().append(b);}this.onlineBuddies[d.userid]=d;$(this.nodes.buddyList).find(".noBuddies").remove();}else{this.updateBuddyStatus(d);}},removeBuddy:function(a){if(a in this.onlineBuddies){delete this.onlineBuddies[a];if("buddy"+a in this.nodes){$(this.nodes["buddy"+a]).remove();}if(!$(this.nodes.buddyList).find(".buddy").length&&!$(this.nodes.buddyList).find(".noBuddies").length){$(this.nodes.buddyList).append(util.buildTree(BuddyListPM.layouts.noBuddies));}}},toggle:function(){var b=$("div#privateChatIcon");if(b.hasClass("open")){b.removeClass("open");if($("#buddyListOptionsContainer").is(":visible")){turntable.buddyList.toggleOptions();}$("div#buddyListContainer").fadeOut(200);$(document).unbind("click",turntable.buddyList.bodyClickHandler);}else{b.addClass("open");var a=turntable.isUnavailable?63:0;$("ul#buddyList").css({maxHeight:($(window).height()-(80+a))+"px"});$("div#buddyListContainer").fadeIn(200);$(document).click(turntable.buddyList.bodyClickHandler);}},bodyClickHandler:function(a){if($(a.target).parents().index($("#buddyListContainer"))==-1&&$(a.target).parents().index($("#privateChatIcon"))==-1&&!$(a.target).is("#privateChatIcon")&&$("div#privateChatIcon").hasClass("open")){turntable.buddyList.toggle();}},lookupUser:function(e,i){var c=false;var g=(turntable.user.fanOf.indexOf(e)>=0);var d=(turntable.user.buddies.indexOf(e)>=0);if(e in this.onlineBuddies){c=this.onlineBuddies[e];}else{if(e in this.knownUsers){c=this.knownUsers[e];}else{if(e in this.room.users){this.knownUsers[e]=this.room.users[e];c=this.knownUsers[e];}}}if(c&&"status" in c&&"name" in c){i(c);if((g||d)&&!(e in this.onlineBuddies)){this.addBuddy(c,true);}}else{var h=[],f=false;if(!c){c={};}if(!("name" in c)){var b=$.Deferred();turntable.ImGCdVsOO({api:"user.get_profile",userid:e},$.proxy(function(j){this.knownUsers[e]=j;c=j;b.resolve();},this));h.push(b);}if(!("status" in c)){var a=$.Deferred();turntable.ImGCdVsOO({api:"presence.get",uid:e},function(j){f=j;a.resolve();});h.push(a);}$.when.apply(null,h).then($.proxy(function(){if(f&&f.success&&"presence" in f){c.status=f.presence.status;}i(c);if((g||d)&&!(e in this.onlineBuddies)){this.addBuddy(c,true);}},this));}},addPMWindow:function(c,a,b){this.lookupUser(c,$.proxy(function(d){var e=d.userid in turntable.user.blockedUsers;this.pmWindows[d.userid]=new PMWindow(d,this,e);this.pmWindows[d.userid].open(a);if(b){b();}},this));},repositionPMWindows:function(e){var f=false;var g=$("#pmWindows .pmContainer");for(var d=0;d<g.length;d++){var c=g.eq(d);f=this.positionPMWindow(c,d,e);}if(!f){var a=$("#overflowPMWindows .pmContainer");for(var d=a.length-1;d>=0;d--){var c=a.eq(d);var b=g.length+(a.length-(d+1));f=this.positionPMWindow(c,b,e);if(f){break;}}}a=$("#overflowPMWindows .pmContainer");if(a.length){$(this.nodes.pmOverflowIcon).show();$(this.nodes.pmOverflowCount).text(a.length);}else{$(this.nodes.pmOverflowIcon).hide();$(this.nodes.pmOverflowContainer).hide();}},positionPMWindow:function(b,a,d){var c=b.data("userId");if(c in this.pmWindows){var f=this.pmWindows[c];var e=52+(a*(b.width()+5));if(e+b.width()>$(window).width()-50){f.overflow();return true;}else{f.unOverflow(true);var g=parseInt(b.css("left"));if(g==e){return;}if(d){b.animate({left:e+"px"},"fast");}else{b.css({left:e+"px"});}return false;}}},toggleDing:function(){util.setSetting("pmding",util.getSetting("pmding")=="false"?"true":"false");this.refreshOptions();},toggleOptions:function(){var a=$("#buddyListOptionsContainer");if(a.is(":visible")){a.fadeOut("fast");}else{a.fadeIn("fast");}},toggleUnavailable:function(b){if(turntable.isUnavailable){turntable.isUnavailable=false;util.setSetting("isUnavailable",false);turntable.sendPresence("available",false,true);this.updateMyStatus("available");var c=$(this.nodes.unavailableWarning).outerHeight();$(this.nodes.unavailableWarning).slideUp("fast");$(this.nodes.buddyList).animate({maxHeight:(parseInt($(this.nodes.buddyList).css("max-height"))+c)+"px"});}else{turntable.isUnavailable=true;util.setSetting("isUnavailable",true);turntable.sendPresence("unavailable",false,true);this.updateMyStatus("unavailable");var c=$(this.nodes.unavailableWarning).show().outerHeight();$(this.nodes.unavailableWarning).hide();$(this.nodes.unavailableWarning).slideDown("fast");$(this.nodes.buddyList).animate({maxHeight:(parseInt($(this.nodes.buddyList).css("max-height"))-c)+"px"});}for(var a in this.pmWindows){this.pmWindows[a].updateMyAvailability();}this.refreshOptions();if(b){$("#buddyListOptionsContainer").hide();}},refreshOptions:function(){var a=BuddyListPM.layouts.buddyListOptions(this.toggleOptions,$.proxy(this.toggleUnavailable,this),$.proxy(this.toggleDing,this));$("#buddyListOptionsContainer").replaceWith(util.buildTree(a,this.nodes));},updateIgnored:function(){for(var a in turntable.user.blockedUsers){if(a in this.pmWindows&&!this.pmWindows[a].isIgnored){this.pmWindows[a].setIgnored(true);}}for(var a in this.pmWindows){if(!(a in turntable.user.blockedUsers)&&this.pmWindows[a].isIgnored){this.pmWindows[a].setIgnored(false);}}}});BuddyListPM.layouts={privateChatIcon:function(b){var a=b?".away":"";return["div#privateChatIcon.pmGreyTop",{event:{mouseover:function(){$(this).addClass("hover");},mouseout:function(){$(this).removeClass("hover");}}},["div##status.status"+a],["div.chatIcon"]];},buddyList:function(b,a,c){return["div#buddyListContainer",{},["div#buddyListMain",{},["div#buddyListHeader##buddyListHeader",{},["div#buddyListTitle",{},"Private chat"],["div#buddyListOptionsIcon",{event:{click:b}}]],["div#buddyListUnavailableWarning##unavailableWarning",{},"You are unavailable to chat.",["div#buddyListBecomeAvailable",{event:{mouseover:function(){$(this).addClass("hover");},mouseout:function(){$(this).removeClass("hover");},click:a}}]],["ul#buddyList##buddyList",{}],BuddyListPM.layouts.buddyListOptions(b,a,c)],["div#buddyListNipple"]];},pmOverflowIcon:function(){return["div#pmOverflowIcon##pmOverflowIcon.pmGreyTop",{event:{click:function(){$("div#pmOverflowContainer").fadeToggle("fast");},mouseover:function(){$(this).addClass("hover");},mouseout:function(){$(this).removeClass("hover");}}},["span#pmOverflowCount##pmOverflowCount",{},"0"],["div#pmOverflowArrow"]];},pmOverflow:function(){return["div#pmOverflowContainer##pmOverflowContainer",{},["ul#pmOverflowList##pmOverflowList",{}],["div#pmOverflowNipple"]];},buddyListOptions:function(e,b,i){var c="Available for private chat";var a=turntable.isUnavailable?".red":"";var j=turntable.isUnavailable?"":["div.buddyListOptionCheck"];var f=util.getSetting("pmding")=="false";var d="Ding on new message";var g=f?"":["div.buddyListOptionCheck"];var h=f?".red":"";return["div#buddyListOptionsContainer##optionsContainer",{},["div#buddyListOp |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment