Mutik's DotD Script

Fork of ForTheGoodOfAll DotD script with new look and strongly optimized js code

当前为 2014-10-18 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Mutik's DotD Script
  3. // @namespace tag://kongregate
  4. // @description Fork of ForTheGoodOfAll DotD script with new look and strongly optimized js code
  5. // @author Mutik, orig version: SReject, chairmansteve, tsukinomai(Shylight)?, JHunz, wpatter6, MoW, true_heathen, HG, mutikt, PDrifting
  6. // @version 1.1.11
  7. // @grant GM_xmlhttpRequest
  8. // @grant GM_setValue
  9. // @grant GM_getValue
  10. // @grant unsafeWindow
  11. // @include http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons*
  12. // @hompage http://www.dotdraids.pl
  13. // ==/UserScript==
  14.  
  15. function main() {
  16. if (typeof GM_setValue === 'undefined') {
  17. var GM_setValue = function (name, value) { localStorage.setItem(name, (typeof value).substring(0, 1) + value); };
  18. }
  19. if (typeof GM_getValue == 'undefined') {
  20. var GM_getValue = function (name, dvalue) {
  21. var value = localStorage.getItem(name);
  22. if (typeof value != 'string') return dvalue;
  23. else {
  24. var type = value.substring(0, 1);
  25. value = value.substring(1);
  26. if (type == 'b') return (value == 'true');
  27. else if (type == 'n') return Number(value);
  28. else return value;
  29. }
  30. };
  31. }
  32. //if (typeof GM_deleteValue == 'undefined') var GM_deleteValue = function(name) { localStorage.removeItem(name) };
  33.  
  34. window.FPX = {
  35. LandBasePrices:[4000,15000,25000,50000,75000,110000,300000,600000,1200000],
  36. LandBaseIncome:[100,300,400,700,900,1200,2700,4500,8000],
  37. LandCostRatio: function(owned) {
  38. var landCosts = [4000,15000,25000,50000,75000,110000,300000,600000,1200000];
  39. var icr = [1,1,1,1,1,1,1,1,1]; /*Income/Cost ratio*/
  40. var i = 9;
  41. while (i--) {
  42. landCosts[i] += FPX.LandBasePrices[i] * owned[i] / 10;
  43. icr[i] = FPX.LandBaseIncome[i] / landCosts[i];
  44. }
  45. return icr;
  46. }
  47. };
  48. window.timeSince = function(date,after) {
  49. if (typeof date === 'number') date = new Date(date);
  50. var seconds = Math.abs(Math.floor((new Date().getTime() - date.getTime())/1000));
  51. var interval = Math.floor(seconds/31536000);
  52. var pretext = 'about ', posttext = after ? ' left' : ' ago';
  53. if (interval >= 1) return pretext + interval + ' year' + (interval == 1 ? '' : 's') + posttext;
  54. interval = Math.floor(seconds/2592000);
  55. if (interval >= 1) return pretext + interval + ' month' + (interval == 1 ? '' : 's') + posttext;
  56. interval = Math.floor(seconds/86400);
  57. if (interval >= 1) return pretext + interval + ' day' + (interval == 1 ? '' : 's') + posttext;
  58. interval = Math.floor(seconds/3600);
  59. if (interval >= 1) return pretext + interval + ' hour' + (interval == 1 ? '' : 's') + posttext;
  60. interval = Math.floor(seconds/60);
  61. if (interval >= 1) return interval + ' minute' + (interval == 1 ? '' : 's') + posttext;
  62. return Math.floor(seconds) + ' second' + (seconds == 1 ? '' : 's') + posttext;
  63. };
  64. window.isNumber = function(n) { return !isNaN(parseFloat(n)) && isFinite(n); };
  65. window.SRDotDX = {
  66. version: { major: "1.1.11", minor: 'Mutik\'s mod' },
  67. util: {
  68. getQueryVariable: function(v, s){
  69. var query = String(s||window.location.search.substring(1));
  70. if(query.indexOf('?')>-1) query = query.substring(query.indexOf('?')+1);
  71. var vars = query.split('&');
  72. for (var i = 0; i < vars.length; i++) {
  73. var pair = vars[i].split('=');
  74. if (decodeURIComponent(pair[0]) == v) {
  75. return decodeURIComponent(pair[1]);
  76. }
  77. }
  78. return ''
  79. },
  80. getRaidFromUrl: function(url){
  81. var r = {}, link, chk = 0;
  82. var isOld = url.indexOf('kv_');
  83. var reg = /[?&]([^=]+)=([^?&]+)/ig, p = url.replace(/&amp;/gi,"&");
  84. if(isOld >= 0) {
  85. while (link = reg.exec(p)) {
  86. if (!r.diff && link[1] == 'kv_difficulty') r.diff = parseInt(link[2]), chk++;
  87. else if (!r.hash && link[1] == 'kv_hash') r.hash = link[2], chk++;
  88. else if (!r.boss && link[1] == 'kv_raid_boss') r.boss = link[2], chk++;
  89. else if (!r.id && link[1] == 'kv_raid_id') r.id = link[2].replace(/http:?/i,""), chk++;
  90. }
  91. }
  92. else {
  93. while (link = reg.exec(p)) {
  94. if (!r.diff && link[1] == 'difficulty') r.diff = parseInt(link[2]), chk++;
  95. else if (!r.hash && link[1] == 'hash') r.hash = link[2], chk++;
  96. else if (!r.boss && link[1] == 'raid_boss') r.boss = link[2], chk++;
  97. else if (!r.id && link[1] == 'raid_id') r.id = link[2].replace(/http:?/i,""), chk++;
  98. }
  99. }
  100. if (chk != 4) return null;
  101. return r;
  102. },
  103. getShortNum: function (num) {
  104. if (isNaN(num) || num < 0) return num;
  105. if (num >= 1000000000000) return (num / 1000000000000).toPrecision(4) + 't';
  106. if (num >= 1000000000) return (num / 1000000000).toPrecision(4) + 'b';
  107. if (num >= 1000000) return (num / 1000000).toPrecision(4) + 'm';
  108. if (num >= 1000) return (num / 1000).toPrecision(4) + 'k';
  109. return num + ''
  110. },
  111. getShortNumMil: function (num) {
  112. if (isNaN(num) || num < 0) return num;
  113. if (num >= 1000000) return (num / 1000000).toPrecision(4) + 't';
  114. if (num >= 1000) return (num / 1000).toPrecision(4) + 'b';
  115. return num.toPrecision(4) + 'm'
  116. },
  117. objToUriString: function(obj) {
  118. if (typeof obj == 'object') {
  119. var str = '';
  120. for (var i in obj) str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]) + '&'; str = str.substring(0,str.length-1);
  121. return str
  122. } return '';
  123. },
  124. serialize: function(obj) {
  125. var str = [];
  126. for (var p in obj) if(obj[p]!=null)str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
  127. return str.join("&");
  128. },
  129. stringFormat: function() {
  130. var s = arguments[0];
  131. for (var i = 0; i < arguments.length - 1; i++) {
  132. var reg = new RegExp("\\{" + i + "\\}", "gm");
  133. s = s.replace(reg, arguments[i + 1]);
  134. }
  135. return s;
  136. }
  137. },
  138. config: (function() {
  139. var tmp, reqSave = false;
  140. try { tmp = JSON.parse(GM_getValue('SRDotDX','{}')) }
  141. catch (e) { tmp = {}; reqSave = true }
  142. //Raids tab vars
  143. tmp.lastFilter = typeof tmp.lastFilter == 'string' ? tmp.lastFilter : '';
  144. tmp.filterSearchStringR = typeof tmp.filterSearchStringR == 'string' ? tmp.filterSearchStringR : '';
  145. tmp.fltIncVis = typeof tmp.fltIncVis == 'boolean' ? tmp.fltIncVis : false;
  146. tmp.fltShowNuked = typeof tmp.fltShowNuked == 'boolean' ? tmp.fltShowNuked : false;
  147. tmp.fltShowAll = typeof tmp.fltShowAll == 'boolean' ? tmp.fltShowAll : false;
  148.  
  149. //Options tab vars
  150. tmp.importFiltered = typeof tmp.importFiltered == 'boolean' ? tmp.importFiltered : true;
  151. tmp.hideRaidLinks = typeof tmp.hideRaidLinks == 'boolean' ? tmp.hideRaidLinks : false;
  152. tmp.hideBotLinks = typeof tmp.hideBotLinks == 'boolean' ? tmp.hideBotLinks : false;
  153. tmp.hideVisitedRaids = typeof tmp.hideVisitedRaids == 'boolean' ? tmp.hideVisitedRaids : false;
  154. tmp.hideVisitedRaidsInRaidList = typeof tmp.hideVisitedRaidsInRaidList == 'boolean' ? tmp.hideVisitedRaidsInRaidList : false;
  155. tmp.markMyRaidsVisted = typeof tmp.markMyRaidsVisted == 'boolean' ? tmp.markMyRaidsVisted : false;
  156. tmp.markImportedVisited = typeof tmp.markImportedVisited == 'boolean' ? tmp.markImportedVisited : false;
  157. tmp.FPXLandOwnedCount = typeof tmp.FPXLandOwnedCount == 'object' ? tmp.FPXLandOwnedCount : [0, 0, 0, 0, 0, 0, 0, 0, 0];
  158. tmp.prettyPost = typeof tmp.prettyPost == 'boolean' ? tmp.prettyPost : false;
  159. tmp.useMaxRaidCount = typeof tmp.useMaxRaidCount == 'boolean' ? tmp.useMaxRaidCount : false;
  160. tmp.maxRaidCount = !(typeof tmp.maxRaidCount === 'undefined') ? tmp.maxRaidCount : 3000;
  161. tmp.autoImportPaste = typeof tmp.autoImportPaste == 'boolean' ? tmp.autoImportPaste : false;
  162. tmp.confirmForLargePaste = typeof tmp.confirmForLargePaste == 'boolean' && tmp.confirmPasteSize ? tmp.confirmForLargePaste : false;
  163. tmp.confirmPasteSize = typeof tmp.confirmPasteSize == 'number' ? tmp.confirmPasteSize : 1000;
  164. tmp.showStatusOverlay = typeof tmp.showStatusOverlay == 'boolean' ? tmp.showStatusOverlay : false;
  165. tmp.confirmDeletes = typeof tmp.confirmDeletes == 'boolean' ? tmp.confirmDeletes : true;
  166. tmp.autoPostPaste = typeof tmp.autoPostPaste == 'boolean' ? tmp.autoPostPaste : false;
  167. tmp.whisperTo = typeof tmp.whisperTo == 'string' ? tmp.whisperTo : '';
  168. tmp.formatLinkOutput = typeof tmp.formatLinkOutput == 'boolean' ? tmp.formatLinkOutput : false;
  169. tmp.linkShowFs = typeof tmp.linkShowFs == 'boolean' ? tmp.linkShowFs : false;
  170. tmp.linkShowAp = typeof tmp.linkShowAp == 'boolean' ? tmp.linkShowAp : false;
  171. tmp.unvisitedRaidPruningMode = typeof tmp.unvisitedRaidPruningMode == 'number' ? tmp.unvisitedRaidPruningMode : 1;
  172. tmp.selectedRaids = typeof tmp.selectedRaids == 'string' ? tmp.selectedRaids : '';
  173. tmp.pastebinUrl = typeof tmp.pastebinUrl == 'string' ? tmp.pastebinUrl : '';
  174. tmp.bckColor = typeof tmp.bckColor == 'string' ? tmp.bckColor : 'fff';
  175. tmp.lastImported = typeof tmp.lastImported == 'number' ? tmp.lastImported : ((new Date).getTime() - 1728000000);
  176. tmp.hideKongForum = typeof tmp.hideKongForum == 'boolean' ? tmp.hideKongForum : false;
  177. tmp.hideGameDetails = typeof tmp.hideGameDetails == 'boolean' ? tmp.hideGameDetails : false;
  178. tmp.hideGameTitle = typeof tmp.hideGameTitle == 'boolean' ? tmp.hideGameTitle : true;
  179. tmp.chatFilterString = typeof tmp.chatFilterString == 'string' ? tmp.chatFilterString : '';
  180. tmp.filterSearchStringC = typeof tmp.filterSearchStringC == 'string' ? tmp.filterSearchStringC : '';
  181. tmp.chatSize = typeof tmp.chatSize == 'number' ? tmp.chatSize : 300;
  182. tmp.sbEnable = typeof tmp.sbEnable == 'boolean' ? tmp.sbEnable : true;
  183. tmp.cbDisable = typeof tmp.cbDisable == 'boolean' ? tmp.cbDisable : true;
  184. tmp.sbRightSide = typeof tmp.sbRightSide == 'boolean' ? tmp.sbRightSide : false;
  185. tmp.kongUser = typeof tmp.kongUser == 'string' ? tmp.kongUser : 'Guest';
  186. tmp.kongAuth = typeof tmp.kongAuth == 'string' ? tmp.kongAuth : '0';
  187. tmp.kongId = typeof tmp.kongId == 'string' ? tmp.kongId : '0';
  188. tmp.kongMsg = typeof tmp.kongMsg == 'boolean' ? tmp.kongMsg : false;
  189. tmp.hideGameTab = typeof tmp.hideGameTab == 'boolean' ? tmp.hideGameTab : false;
  190. tmp.hideAccTab = typeof tmp.hideAccTab == 'boolean' ? tmp.hideAccTab : false;
  191. tmp.dotdxTabName = typeof tmp.dotdxTabName == 'string' ? tmp.dotdxTabName : 'Raids';
  192. tmp.themeNum = typeof tmp.themeNum == 'number' ? tmp.themeNum : 0;
  193. tmp.fontNum = typeof tmp.fontNum == 'number' ? tmp.fontNum : 0;
  194. tmp.hideScrollBar = typeof tmp.hideScrollBar == 'boolean' ? tmp.hideScrollBar : false;
  195. tmp.hideWChat = typeof tmp.hideWChat == 'boolean' ? tmp.hideWChat : false;
  196. tmp.filterChatLinks = typeof tmp.filterChatLinks == 'boolean' ? tmp.filterChatLinks : true;
  197. tmp.filterRaidList = typeof tmp.filterRaidList == 'boolean' ? tmp.filterRaidList : false;
  198. tmp.newRaidsAtTopOfList = typeof tmp.newRaidsAtTopOfList == 'boolean' ? tmp.newRaidsAtTopOfList : false;
  199. tmp.sbConfig = typeof tmp.sbConfig == 'object' ? tmp.sbConfig : [
  200. {"type":"label","name":"Camps"},
  201. {"type":"btn","name":"BoB","cmd":"/camp bob"},
  202. {"type":"btn","name":"MaM","cmd":"/camp mam"},
  203. {"type":"btn","name":"GD","cmd":"/camp gd"},
  204. {"type":"label","name":"Tiers"},
  205. {"type":"btn","name":"Bella","cmd":"/raid bella"},
  206. {"type":"btn","name":"Xerk","cmd":"/raid xerkara"},
  207. {"type":"btn","name":"Tisi","cmd":"/raid tisi"},
  208. {"type":"label","name":"Join"},
  209. {"type":"btn","name":"Farms","cmd":"SRDotDX.gui.quickImportAndJoin('farm:nnm')"},
  210. {"type":"label","name":"Utils"},
  211. {"type":"btn","color":"g","name":"(Re)Load","cmd":"SRDotDX.reload()"},
  212. {"type":"btn","color":"r","name":"Unload","cmd":"/kill"},
  213. {"type":"btn","name":"Room 1","cmd":"SRDotDX.gui.gotoRoom(1)"},
  214. {"type":"btn","name":"Room 2","cmd":"SRDotDX.gui.gotoRoom(2)"},
  215. {"type":"btn","name":"Room 8","cmd":"SRDotDX.gui.gotoRoom(8)"},
  216. {"type":"label","name":"Sheets"},
  217. {"type":"btn","name":"Magic","cmd":"https://docs.google.com/spreadsheets/d/1O0eVSnzlACP9XJDq0VN4kN51ESUusec3-gD4dKPHRNU"},
  218. {"type":"btn","name":"Mount","cmd":"https://docs.google.com/spreadsheet/ccc?key=0AiSpM5yAo8atdER2NEhHY3VjckRhdWctWV8yampQZUE"},
  219. {"type":"btn","name":"Gear","cmd":"https://docs.google.com/spreadsheet/lv?key=0AvP2qXrWcHBxdHpXZkUzTHNGNkVWbjE5c2VEZUNNMUE"},
  220. {"type":"label","name":"Raids"},
  221. {"type":"jtxt"},
  222. {"type":"btn","color":"g","name":"Join","cmd":"SRDotDX.gui.joinSelectedRaids(true)"},
  223. {"type":"btn","color":"b","name":"Import","cmd":"SRDotDX.gui.importFromServer()"},
  224. {"type":"btn","color":"y","name":"RaidBot","cmd":"SRDotDX.gui.switchBot()"}
  225. ];
  226.  
  227. if (typeof tmp.mutedUsers != 'object') tmp.mutedUsers = {};
  228. if (typeof tmp.ignUsers != 'object') tmp.ignUsers = {};
  229. if (typeof tmp.friendUsers != 'object') tmp.friendUsers = {};
  230. if (typeof tmp.raidList != 'object') tmp.raidList = {};
  231. if (typeof tmp.filters !== 'object') tmp.filters = {};
  232.  
  233. if(reqSave) GM_setValue('SRDotDX', JSON.stringify(tmp));
  234.  
  235. // Delete expired raids
  236. for (var id in tmp.raidList) {
  237. if (tmp.raidList.hasOwnProperty(id)) {
  238. tmp.raidList[id].timeLeft = function() { return this.expTime - parseInt((new Date).getTime() / 1000) };
  239. if (tmp.raidList[id].timeLeft() < 0) delete tmp.raidList[id];
  240. else {
  241. if (typeof tmp.raidList[id].magic == "undefined") tmp.raidList[id].magic = [0,0,0,0,0,0];
  242. if (typeof tmp.raidList[id].hp == "undefined") tmp.raidList[id].hp = 1.0;
  243. }
  244. }
  245. }
  246.  
  247. tmp.addRaid = function(hash,id,boss,diff,visited,user,ts,room,magic,hp) {
  248. if((/ /).test(user)) {
  249. var reg = new RegExp('[0-9]+|[0-9a-zA-Z_]+','g');
  250. room = reg.exec(user); user = reg.exec(user);
  251. }
  252. if (typeof SRDotDX.config.raidList[id] != 'object') {
  253. var tStamp = typeof ts == 'undefined' || ts == null ? parseInt((new Date).getTime() / 1000) : parseInt(ts);
  254. SRDotDX.config.raidList[id] = {
  255. hash: hash, id: id, boss: boss, diff: diff, visited: visited, nuked: false, user: user, lastUser: user, timeStamp: tStamp,
  256. expTime: (typeof SRDotDX.raids[boss] == 'object' ? SRDotDX.raids[boss].duration : 96) * 3600 + tStamp,
  257. timeLeft: function() {return this.expTime - parseInt((new Date).getTime() / 1000) },
  258. room: typeof room == 'undefined' || room == null ? SRDotDX.util.getRoomNumber() : parseInt(room),
  259. magic: typeof magic == 'undefined' || magic == null ? [0,0,0,0,0,0] : magic,
  260. hp: typeof hp == 'undefined' || hp == null ? 1.0 : parseFloat(hp)};
  261. SRDotDX.gui.addRaid(id);
  262. }
  263. SRDotDX.config.raidList[id].lastUser = user;
  264. return SRDotDX.config.raidList[id]
  265. };
  266. tmp.getRaid = function(id) {
  267. if (typeof SRDotDX.config.raidList[id] == 'object') {
  268. if (SRDotDX.config.raidList[id].timeLeft() > 1) return SRDotDX.config.raidList[id];
  269. delete SRDotDX.config.raidList[id];
  270. } return false
  271. };
  272. tmp.setFilter = function(raidid,diff,val) { SRDotDX.config.filters[raidid][diff] = val };
  273. tmp.save = function(b) {
  274. b = typeof b == 'undefined' ? true : b;
  275. GM_setValue('SRDotDX', JSON.stringify(SRDotDX.config));
  276. if(b) setTimeout(SRDotDX.config.save, 60000, true);
  277. else console.log('[DotDX] Manual config save invoked');
  278. };
  279. return tmp;
  280. })(),
  281. request: {
  282. importLock: false,
  283. joinAfterImport: false,
  284. fromChat: false,
  285. quickBtnLock: true,
  286. filterSearchStringT: "",
  287. raids: function(isinit,hours){
  288. if(!SRDotDX.gui.joining) {
  289. var secs = 15 - parseInt((new Date().getTime() - SRDotDX.config.lastImported)/1000);
  290. if(secs > 0) {
  291. SRDotDX.echo("You can import again in " + secs + " seconds.");
  292. return }
  293. console.log("[DotDX] Importing raids from raids server ...");
  294. if(!isinit) this.initialize("Requesting raids");
  295. else SRDotDX.request.tries++;
  296. var h = hours ? ('&h='+hours) : '';
  297. SRDotDX.request.req({
  298. eventName: "dotd.getraids",
  299. url: "http://dotdraids.pl/download.php?u="+SRDotDX.config.kongUser+h,
  300. method: "GET",
  301. headers: {"Content-Type": "application/JSON"},
  302. timeout: 30000
  303. });
  304. }
  305. },
  306. initialize: function (str) {
  307. SRDotDX.gui.doStatusOutput(str + "...",3000,true);
  308. SRDotDX.request.tries = 0;
  309. SRDotDX.request.seconds = 0;
  310. SRDotDX.request.complete = false;
  311. SRDotDX.request.timer = setTimeout(SRDotDX.request.tick, 1000, str);
  312. },
  313. tick: function (str) {
  314. if(!SRDotDX.request.complete){
  315. if(SRDotDX.request.seconds > 25){
  316. SRDotDX.gui.doStatusOutput("Request failed.",3000,true);
  317. return;
  318. }
  319. SRDotDX.request.seconds++;
  320. SRDotDX.gui.doStatusOutput(str + " ("+SRDotDX.request.seconds+")...",1500,true);
  321. SRDotDX.request.timer = setTimeout(SRDotDX.request.tick, 1000, str);
  322. }
  323. },
  324. complete: false,
  325. seconds: 0,
  326. timer: null,
  327. tries: 0,
  328. req: function(param){
  329. var a = document.createEvent("MessageEvent");
  330. if (a.initMessageEvent) a.initMessageEvent("dotd.req", false, false, JSON.stringify(param), document.location.protocol + "//" + document.location.hostname, 0, window, null);
  331. else a = new MessageEvent("dotd.req",{"origin":document.location.protocol + "//" + document.location.hostname, "lastEventId": 0, "source": window, "data": JSON.stringify(param)});
  332. document.dispatchEvent(a);
  333. },
  334. pasteImport: function (url,isinit) {
  335. if(!isinit) this.initialize("Importing PasteBin");
  336. var pb = url.split('com/')[1];
  337. SRDotDX.request.req({
  338. eventName: "dotd.importpb",
  339. url: 'http://pastebin.com/raw.php?i=' + pb,
  340. method: "GET",
  341. timeout: 30000
  342. });
  343. },
  344. init: function () {
  345. document.addEventListener("dotd.joinraid", SRDotDX.request.joinRaidResponse, false);
  346. document.addEventListener("dotd.importpb", SRDotDX.request.pbResponse, false);
  347. document.addEventListener("dotd.getraids", SRDotDX.request.addRaids, false);
  348. delete this.init;
  349. },
  350. joinRaid: function(r){
  351. if(typeof r == 'object') {
  352. if(!SRDotDX.gui.joining) SRDotDX.request.initialize("Joining " + (!SRDotDX.raids[r.boss]?r.boss.capitalize().replace(/_/g,' '):SRDotDX.raids[r.boss].shortname));
  353. var joinData = 'kongregate_username='+SRDotDX.config.kongUser+'&kongregate_user_id='+SRDotDX.config.kongId+'&kongregate_game_auth_token='+SRDotDX.config.kongAuth;
  354. SRDotDX.request.req({
  355. eventName: "dotd.joinraid",
  356. url: SRDotDX.util.stringFormat('http://50.18.191.15/kong/raidjoin.php?' + joinData + '&kv_action_type=raidhelp&kv_raid_id={0}&kv_hash={1}&kv_serverid={2}', r.id, r.hash, 1),
  357. method: "GET",
  358. timeout: 30000
  359. });
  360. }
  361. },
  362. addRaids: function(e) {
  363. var r, data = JSON.parse(e.data);
  364. if(data.status != 200) {
  365. if(SRDotDX.request.tries >=3){
  366. SRDotDX.request.complete = true;
  367. SRDotDX.gui.doStatusOutput("Raids server busy. Please try again in a moment.");
  368. console.log('[DotDX] Raids request failed (url: ' + data.url + ')');
  369. console.log(JSON.stringify(data));
  370. } else {
  371. console.log("[DotDX] Raids server unresponsive (status " + data.status + "). Trying again, " + SRDotDX.request.tries + " tries.");
  372. }
  373. return;
  374. }
  375. SRDotDX.request.complete = true;
  376. try{ r = JSON.parse(data.responseText) }
  377. catch (ex) {
  378. console.log("[DotDX] Raids importing error or no raids imported");
  379. console.log('[DotDX] responseText: ' + data.responseText);
  380. return;
  381. }
  382. SRDotDX.gui.doStatusOutput("Importing " + r.raids.length + " raids...");
  383. var raid, j = r.raids.length, n = 0, t=0;
  384. var swt = !SRDotDX.config.importFiltered, filter = SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML;
  385. while(j--) {
  386. raid = r.raids[j];
  387. if (swt || filter.indexOf('fltList_' + raid.b + '_' + (raid.d-1)) < 0) {
  388. t++;
  389. if (!SRDotDX.config.getRaid(raid.i)) {
  390. n++;
  391. SRDotDX.config.addRaid(raid.h, raid.i, raid.b, raid.d, false, raid.p, raid.t, raid.r, raid.m.split("_").map(function(x){return parseInt(x)}), raid.hp);
  392. }
  393. else {
  394. SRDotDX.config.raidList[raid.i].magic = raid.m.split("_").map(function(x){return parseInt(x)});
  395. SRDotDX.config.raidList[raid.i].hp = parseFloat(raid.hp);
  396. }
  397. }
  398. }
  399. console.log('[DotDX] Import raids from server complete');
  400. var id = r.prune.length > 3 ? r.prune.split("_"):[]; j = id.length; var d = 0;
  401. //clean chat
  402. var chat = document.getElementsByClassName('chat_message_window'), p;
  403. for (var c=0; c<chat.length; c++) {
  404. p = chat[c].getElementsByClassName('SRDotDX_raid');
  405. for (var i=0; i<p.length; i++) if (r.prune.indexOf((/DotDX_raidId_(\d+)/).exec(p[i].className)[1]) > -1) p[i].parentNode.removeChild(p[i]);
  406. }
  407. //clean db
  408. while(j--) {
  409. if(SRDotDX.config.raidList[id[j]]) delete SRDotDX.config.raidList[id[j]], d++;
  410. }
  411. console.log('[DotDX] Pruning dead raids from server complete');
  412. SRDotDX.gui.selectRaidsToJoin('import response');
  413. SRDotDX.config.lastImported = (new Date).getTime();
  414. SRDotDX.echo('Imported ' + t + ' raids, ' + n + ' new, ' + d + ' pruned.');
  415. if (SRDotDX.request.joinAfterImport) { SRDotDX.gui.selectRaidsToJoin(); SRDotDX.gui.joinSelectedRaids(false) }
  416. SRDotDX.gui.doStatusOutput('Imported ' + n + ' new raids, ' + d + ' pruned.',5000,true);
  417. },
  418. pbResponse: function(e){
  419. var data = JSON.parse(e.data);
  420. if(data && data.responseText && data.url) {
  421. SRDotDX.request.complete = true;
  422. if(/raw/.test(data.url)) {
  423. SRDotDX.gui.importingPastebin = true;
  424. var r = data.responseText.split('|'), pbid = data.url.split('=')[1], u, i = 0;
  425. if (/\|/.test(data.responseText)) { u = r[1]; r = r[3]; } else { u = 'Unknown'; r = r[0]; }
  426. SRDotDX.gui.Importing = true;
  427. var total = Object.keys(SRDotDX.config.raidList).length;
  428. r = r.split(',');
  429. while(i < r.length) SRDotDX.getRaidDetails(r[i], u, SRDotDX.config.markImportedVisited), i++;
  430. var diff = Object.keys(SRDotDX.config.raidList).length - total;
  431. SRDotDX.gui.doStatusOutput('Import complete, ' + diff + ' of ' + i + ' new raids');
  432. var pbtot = i;
  433. SRDotDX.gui.Importing = false;
  434. var els = document.getElementsByClassName("pb_"+pbid);
  435. if(els.length > 0) {
  436. if (pbtot == 0 ) { i = 0; while (i < els.length) els[i].innerHTML = '(<a href="" onClick="return false;" onMouseDown="SRDotDX.request.pasteImport(\'http://pastebin.com/' + pbid + '\',false)">Import</a>)', i++ }
  437. else { i = 0; while (i < els.length) els[i].innerHTML='(Imported, ' + diff + ' new)', i++ }
  438. }
  439. setTimeout(SRDotDX.config.save, 1000, false);
  440. SRDotDX.gui.importingPastebin = false;
  441. console.log('[DotDX] Pastebin import complete (url: ' + data.url + ')');
  442. }
  443. }
  444. },
  445. joinRaidResponse: function(e){
  446. var data = JSON.parse(e.data);
  447. if(data && data.responseText && data.url) {
  448. SRDotDX.request.complete = true;
  449. var raidid = SRDotDX.util.getQueryVariable('kv_raid_id', data.url);
  450. SRDotDX.gui.joinRaidComplete++;
  451. var status = '', statustxt = '';
  452. if (typeof SRDotDX.config.raidList[raidid] == 'object') {
  453. SRDotDX.config.raidList[raidid].visited = true;
  454. SRDotDX.gui.toggleRaid('visited', raidid, true);
  455. SRDotDX.gui.raidListItemUpdate(raidid);
  456. if (/successfully (re-)?joined/i.test(data.responseText)) {
  457. SRDotDX.gui.joinRaidSuccessful++;
  458. statustxt = (SRDotDX.raids[SRDotDX.config.raidList[raidid].boss]?SRDotDX.raids[SRDotDX.config.raidList[raidid].boss].shortname:SRDotDX.config.raidList[raidid].boss) + " joined successfully.";
  459. } else if (/already a member/i.test(data.responseText)){
  460. statustxt = "Join Failed. You are already a member.";
  461. }else if (/already completed/i.test(data.responseText)) {
  462. SRDotDX.gui.joinRaidDead++;
  463. statustxt = "Join failed. Raid is dead.";
  464. SRDotDX.nukeRaid(raidid);
  465. }else if (/not a member of the guild/i.test(data.responseText)) {
  466. SRDotDX.gui.joinRaidDead++;
  467. statustxt = "Join failed. You are not member of that Guild.";
  468. SRDotDX.nukeRaid(raidid);
  469. } else if (/(invalid|find) raid (hash|ID)/i.test(data.responseText)) {
  470. statustxt = "Join failed. Invalid hash or ID.";
  471. SRDotDX.gui.joinRaidInvalid++;
  472. SRDotDX.gui.deleteRaidFromDB(raidid);
  473. }
  474. else { statustxt = 'Unknown join response.'; }
  475. } else SRDotDX.gui.joinRaidInvalid++;
  476.  
  477. if(SRDotDX.gui.joining) {
  478. if(SRDotDX.gui.joinRaidComplete >= SRDotDX.gui.joinRaidList.length) {
  479. statustxt = "Finished joining. " + SRDotDX.gui.joinRaidSuccessful + " new, " + SRDotDX.gui.joinRaidDead + " dead.";
  480. SRDotDX.gui.joinFinish(true);
  481. SRDotDX.echo(statustxt);
  482. setTimeout(SRDotDX.config.save, 3000, false)
  483. } else {
  484. statustxt = "Joined " + SRDotDX.gui.joinRaidComplete + " of " + SRDotDX.gui.joinRaidList.length + ". " + SRDotDX.gui.joinRaidSuccessful + " new, " + SRDotDX.gui.joinRaidDead + " dead.";
  485. if(SRDotDX.gui.joinRaidIndex < SRDotDX.gui.joinRaidList.length) SRDotDX.request.joinRaid(SRDotDX.gui.joinRaidList[SRDotDX.gui.joinRaidIndex++]);
  486. }
  487. }
  488. else {
  489. setTimeout(SRDotDX.config.save, 3000, false);
  490. }
  491. if(statustxt != '') SRDotDX.gui.doStatusOutput(statustxt, 4000, true);
  492. }
  493. }
  494. },
  495. getRaidDetailsBase: function(url) {
  496. var r = {diff: '', hash: '', boss: '', id: ''}, i;
  497. var reg = /[?&]([^=]+)=([^?&]+)/ig, p = url.replace(/&amp;/gi,'&');
  498. while ((i = reg.exec(p)) != null) {
  499. if (!r.diff && i[1] == 'kv_difficulty') r.diff = parseInt(i[2]);
  500. else if (!r.hash && i[1] == 'kv_hash') r.hash = i[2];
  501. else if (!r.boss && i[1] == 'kv_raid_boss') r.boss = i[2];
  502. else if (!r.id && i[1] == 'kv_raid_id') r.id = parseInt(i[2]);
  503. else if (i[1] != 'kv_action_type') return false;
  504. }
  505. if (typeof r != 'undefined' && typeof r.diff != 'undefined' && typeof r.hash != 'undefined' && typeof r.boss != 'undefined' && typeof r.id != 'undefined') {
  506. r.diffLongText = ['Normal','Hard','Legendary','Nightmare','Insane','Hell'][r.diff-1];
  507. r.diffShortText = ['N','H','L','NM','I','HL'][r.diff-1];
  508. var stats = SRDotDX.raids[r.boss];
  509. if (typeof stats == 'object') {
  510. r.name = stats.name;
  511. r.shortname = stats.shortname;
  512. r.size = stats.size;
  513. r.type = stats.type;
  514. r.dur = stats.duration;
  515. r.durText = stats.dur + "hrs";
  516. r.stat = stats.stat;
  517. r.statText = SRDotDX.getStatText(stats.stat);
  518. }
  519. }
  520. return r;
  521. },
  522. getPasteDetails: function(url,user) {
  523. user = user ? user : '';
  524. var pb = {url: url, id: url.substring(url.length-8)};
  525. pb.id = url.substring(url.length-8);
  526. console.log('[DotDX] Importing Pastebin (url: ' + url + ')');
  527. var info = SRDotDX.config.getPaste(pb.id);
  528. if (!info) { info = SRDotDX.config.addPaste(pb.url, pb.id, user); if(typeof info == 'object') pb.isNew = true }
  529. else pb.isNew = false;
  530. pb.user = info.user;
  531. pb.lastUser = info.lastUser;
  532. return pb;
  533. },
  534. getTierTxt: function(hp,ppl,ap){
  535. var num = hp/ppl; num = ap? num/2 : num;
  536. if (num >= 1000000000000) return (num / 1000000000000).toPrecision(3) + 't';
  537. if (num >= 1000000000) return (num / 1000000000).toPrecision(3) + 'b';
  538. if (num >= 1000000) return (num / 1000000).toPrecision(3) + 'm';
  539. if (num >= 1000) return (num / 1000).toPrecision(3) + 'k';
  540. return num + ''
  541. },
  542. getRaidDetails: function(url,user,visited,ts,room) {
  543. user = user ? user : '';
  544. var rVis = visited ? visited : user == SRDotDX.config.kongUser && SRDotDX.config.markMyRaidsVisted;
  545. var r = SRDotDX.util.getRaidFromUrl(url);
  546. if (r && typeof r.diff == 'number' && typeof r.hash == 'string' && typeof r.boss == 'string' && typeof r.id == 'string') {
  547. var filter = SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML;
  548. r.visited = rVis;
  549. if(!SRDotDX.config.importFiltered || filter.indexOf('fltList_' + r.boss + '_' + (r.diff-1)) < 0){
  550. var info = SRDotDX.config.getRaid(r.id);
  551. if (typeof info != 'object') {
  552. info = SRDotDX.config.addRaid(r.hash, r.id, r.boss, r.diff, r.visited, user, ts, room);
  553. if (typeof info == 'object') r.isNew = true;
  554. else return null;
  555. }
  556. else r.isNew = false;
  557. r.timeStamp = info.timeStamp; r.visited = info.visited; r.nuked = info.nuked;
  558. }
  559. r.linkText = function() {
  560. var raidInfo = SRDotDX.raids[r.boss];
  561. var txt = '[&thinsp;' + ['','N','H','L','NM'][this.diff] + ' ';
  562. txt += raidInfo ? raidInfo.shortname : r.boss.capitalize().replace(/_/g,' ');
  563. if(SRDotDX.config.linkShowFs) txt += raidInfo ? ', fs:' + SRDotDX.getTierTxt(raidInfo.health[this.diff-1],raidInfo.size,false) : '';
  564. if(SRDotDX.config.linkShowAp) txt += raidInfo ? ', ap:' + SRDotDX.getTierTxt(raidInfo.health[this.diff-1],raidInfo.size,true) : '';
  565. txt += (this.visited || r.visited) ? '|★' : '';
  566. txt += '&thinsp;]';
  567. return txt
  568. };
  569. return r;
  570. }
  571. return null
  572. },
  573. getRaidLink: function(msg,user) {
  574. msg = msg.replace(/[\r\n]/g,'');
  575. var isOld = msg.indexOf('kongregate.com'); var m;
  576. //console.log('[CHK] 0: ' + msg);
  577. //http://apps.facebook.com/dawnofthedragons/?action_type=raidhelp&raid_id=13337793&difficulty=4&raid_boss=hargamesh&hash=nlME7DAP2y&trk=rallycry
  578. if(isOld > 0) m = /^((?:(?!<a[ >]).)*)<a.*? href="((?:(?:https?:\/\/)?(?:www\.)?kongregate\.com)?\/games\/5thPlanetGames\/dawn-of-the-dragons(\?[^"]+))".*?<\/a>((?:(?!<\/?a[ >]).)*(?:<a.*? class="reply_link"[> ].*)?)$/i.exec(msg);
  579. else m = /^(.+)?(http:\/\/apps.facebook.com\/dawnofthedragons\/(\?[\d\w_=&;]+))(.+)?$/i.exec(msg);
  580. if (m) {
  581. //console.log('[CHK] A: ' + m[3]);
  582. var raid = SRDotDX.getRaidDetails(m[3], user);
  583. if (raid) {
  584. //console.log('[CHK] B: ' + m[2]);
  585. raid.ptext = m[1]?m[1]:""; raid.url = m[2]; raid.ntext = m[4]?m[4]:"";
  586. return raid;
  587. }
  588. }
  589. return null
  590. },
  591. getPastebinLink: function(msg,user) {
  592. msg = msg.replace(/[\r\n]/g,'');
  593. var m = /^((?:(?!<a[ >]).)*)?http:\/\/pastebin\.com\/\w{8}((?:(?!<\/?a[ >]).)*(?:<a.*? class="reply_link"[> ].*)?)$/i.exec(msg);
  594. if (m) {
  595. var pb = SRDotDX.getPasteDetails(/http:\/\/pastebin\.com\/\w{8}/i.exec(m[0]) + '',user);
  596. if(typeof pb != 'undefined') {
  597. pb.ptext = m[1] || '';
  598. pb.ntext = m[2] || '';
  599. }
  600. return pb;
  601. }
  602. else return null;
  603. },
  604. getStatText: function(stat) {
  605. stat = stat.toLowerCase();
  606. var r = '';
  607. if (stat == '?' || stat == 'Unknown') return 'Unknown';
  608. if (stat.indexOf('s') > -1) r = 'Stamina';
  609. if (stat.indexOf('h') > -1) r += (r != '' ? (stat.indexOf('e') > -1 ? ', ' : ' and ') : '') + 'Honor';
  610. if (stat.indexOf('e') > -1) r += (r != '' ? ' and ' : '') + 'Energy';
  611. return r;
  612. },
  613. getTimestamp: function() {
  614. return '('+('0'+(new Date().getHours())).slice(-2) + ':' + ('0'+(new Date().getMinutes())).slice(-2)+')';
  615. },
  616. refreshRaidTab: function() {
  617. var el_out = document.getElementById('raid_list');
  618. var el_in1 = document.getElementById('mainRaidsFrame');
  619. var el_in2 = document.getElementById('topRaidPane');
  620. el_out.style.height = el_in1.offsetHeight - el_in2.offsetHeight - 8 + 'px';
  621. },
  622. isFirefox: navigator.userAgent.indexOf('Firefox') > 0,
  623. gui: {
  624. getChatNumber: function() {
  625. var cont = document.getElementsByClassName('chat_room_template'), ele;
  626. for (var i=0; i<cont.length; i++) { ele = cont[i].getAttribute('style'); if(ele == null || ele == '') return i}
  627. return 1;
  628. },
  629. setMessagesCount: function() {
  630. var num = active_user.unreadWhispersCount() + active_user.unreadShoutsCount();
  631. var ele = document.getElementById('profile_control_unread_message_count');
  632. ele.innerHTML = num;
  633. ele.style.display = num==0 ? 'none' : 'block';
  634. setTimeout(SRDotDX.gui.setMessagesCount, 60000);
  635. },
  636. gotoRoom: function(num) {
  637. var numInt = parseInt(num);
  638. if (isNaN(numInt) || numInt < 1 || numInt > 13) holodeck.chatWindow().activateRoomChooser();
  639. else {
  640. var roomObj = JSON.parse('{"type": "game", "xmpp_name": "138636-dawn-of-the-dragons-'+num+'", "name": "Dawn of the Dragons - Room #'+('0'+num).slice(-2)+'", "id": "138636-dawn-of-the-dragons-'+num+'"}');
  641. holodeck.joinRoom(roomObj);
  642. }
  643. },
  644. httpCommand: function(url){
  645. window.open(url);
  646. },
  647. applySidebarUI: function(mode) { //-1:remove, 0:redraw, 1:create, 2:recreate
  648. if(mode == -1 || mode == 2) {
  649. document.getElementById('dotdx_sidebar').remove();
  650. if (mode == -1) SRDotDX.gui.chatResize(SRDotDX.config.chatSize), document.getElementsByClassName("links_connect")[0].setAttribute('colspan','2');
  651. }
  652. if (mode > -1) {
  653. var sbElemObj, sbElemTxt, i;
  654. if (mode > 0) {
  655. if (mode == 1) document.getElementsByClassName("links_connect")[0].setAttribute('colspan','3');
  656. if(!SRDotDX.config.sbRightSide) document.getElementById('chat_container').style.marginLeft = "0px";
  657. SRDotDX.gui.cHTML('td').set({id: 'dotdx_sidebar', style: 'width: 70px'})
  658. .html('<div id="dotdx_sidebar_container"></div>',true)
  659. .attach('after',SRDotDX.config.sbRightSide?'chat_container_cell':'gameholder');
  660. SRDotDX.gui.chatResize(SRDotDX.config.chatSize);
  661. }
  662. if (mode == 0) {
  663. sbElemTxt = '[' + document.getElementById('options_sbConfig').value + ']';
  664. sbElemObj = JSON.parse(sbElemTxt);
  665. SRDotDX.config.sbConfig = sbElemObj;
  666. SRDotDX.config.save(false);
  667. }
  668. else sbElemObj = SRDotDX.config.sbConfig;
  669. var stopper = parseInt((document.getElementById('gameholder').offsetHeight-36)/26);
  670. var sidebarElemHtml = "", sbCmd = "", sbCls="";
  671. for (i=0; i<sbElemObj.length; i++) {
  672. if (i == stopper) break;
  673. if (typeof sbElemObj[i] == 'undefined' || sbElemObj[i] == null) { sidebarElemHtml += '<div></div>'; continue }
  674. if (sbElemObj[i].type == 'jtxt') { sidebarElemHtml += '<input id="sbJoinStr" onkeyup="SRDotDX.gui.updateFilterTxt(this.value)" class="dotdx_chat_filter" type="text" value=""><div></div>'; continue }
  675. if (sbElemObj[i].type == 'label') { sidebarElemHtml += '<div class="label">'+sbElemObj[i].name+'</div>'; continue }
  676. if (typeof sbElemObj[i].cmd != 'undefined') {
  677. if (sbElemObj[i].cmd.charAt(0) == '/') sbCmd = 'SRDotDX.gui.chatCommand(\''+sbElemObj[i].cmd+'\')';
  678. else if (sbElemObj[i].cmd.indexOf('://') > 2) sbCmd = 'SRDotDX.gui.httpCommand(\''+sbElemObj[i].cmd+'\')';
  679. else sbCmd = sbElemObj[i].cmd.replace("'","\'");
  680. }
  681. if (typeof sbElemObj[i].color != 'undefined') {
  682. if (sbElemObj[i].color.charAt(0).toLowerCase() == 'b' && sbElemObj[i].color.toLowerCase() != 'black') sbCls = 'class="b" ';
  683. else if (sbElemObj[i].color.charAt(0).toLowerCase() == 'g') sbCls = 'class="g" ';
  684. else if (sbElemObj[i].color.charAt(0).toLowerCase() == 'r') sbCls = 'class="r" ';
  685. else if (sbElemObj[i].color.charAt(0).toLowerCase() == 'y') sbCls = 'class="y" ';
  686. }
  687. sidebarElemHtml += '<button ' + sbCls + 'onclick="' + sbCmd + '">' + (typeof sbElemObj[i].name == 'undefined' ? ('Btn '+(i+1)) : sbElemObj[i].name) + '</button>';
  688. sbCmd = ""; sbCls="";
  689. }
  690. SRDotDX.gui.cHTML('#dotdx_sidebar_container').html(sidebarElemHtml,true);
  691. }
  692. },
  693. restoreDefaultSB: function() {
  694. document.getElementById('options_sbConfig').value = '{"type":"label","name":"Camps"},\n\
  695. {"type":"btn","name":"BoB","cmd":"/camp bob"},\n\
  696. {"type":"btn","name":"MaM","cmd":"/camp mam"},\n\
  697. {"type":"btn","name":"GD","cmd":"/camp gd"},\n\
  698. {"type":"label","name":"Tiers"},\n\
  699. {"type":"btn","name":"Bella","cmd":"/raid bella"},\n\
  700. {"type":"btn","name":"Xerk","cmd":"/raid xerkara"},\n\
  701. {"type":"btn","name":"Tisi","cmd":"/raid tisi"},\n\
  702. {"type":"label","name":"Join"},\n\
  703. {"type":"btn","name":"Farms","cmd":"SRDotDX.gui.quickImportAndJoin(\'farm:nnm\')"},\n\
  704. {"type":"label","name":"Utils"},\n\
  705. {"type":"btn","color":"g","name":"(Re)Load","cmd":"SRDotDX.reload()"},\n\
  706. {"type":"btn","color":"r","name":"Unload","cmd":"/kill"},\n\
  707. {"type":"btn","name":"Room 1","cmd":"SRDotDX.gui.gotoRoom(1)"},\n\
  708. {"type":"btn","name":"Room 2","cmd":"SRDotDX.gui.gotoRoom(2)"},\n\
  709. {"type":"btn","name":"Room 8","cmd":"SRDotDX.gui.gotoRoom(8)"},\n\
  710. {"type":"label","name":"Sheets"},\n\
  711. {"type":"btn","name":"Magic","cmd":"https://docs.google.com/spreadsheets/d/1O0eVSnzlACP9XJDq0VN4kN51ESUusec3-gD4dKPHRNU"},\n\
  712. {"type":"btn","name":"Mount","cmd":"https://docs.google.com/spreadsheet/ccc?key=0AiSpM5yAo8atdER2NEhHY3VjckRhdWctWV8yampQZUE"},\n\
  713. {"type":"btn","name":"Gear","cmd":"https://docs.google.com/spreadsheet/lv?key=0AvP2qXrWcHBxdHpXZkUzTHNGNkVWbjE5c2VEZUNNMUE"},\n\
  714. {"type":"label","name":"Raids"},\n\
  715. {"type":"jtxt"},\n\
  716. {"type":"btn","color":"g","name":"Join","cmd":"SRDotDX.gui.joinSelectedRaids(true)"},\n\
  717. {"type":"btn","color":"b","name":"Import","cmd":"SRDotDX.gui.importFromServer()"},\n\
  718. {"type":"btn","color":"y","name":"RaidBot","cmd":"SRDotDX.gui.switchBot()"}';
  719. SRDotDX.gui.applySidebarUI(0);
  720. },
  721. hideWC: function(init) {
  722. var offset;
  723. if(init) offset = SRDotDX.config.hideWChat?-265:0;
  724. else {
  725. offset = SRDotDX.config.hideWChat?265:-265;
  726. SRDotDX.config.hideWChat = !SRDotDX.config.hideWChat;
  727. document.getElementById('hideWCtxt').innerHTML = SRDotDX.config.hideWChat?'Show World Chat':'Hide World Chat';
  728. }
  729. var gmWidth = document.getElementById('gameholder').offsetWidth + offset;
  730. document.getElementById('gameholder').style.width = gmWidth + "px";
  731. document.getElementById('game').style.width = gmWidth + "px";
  732. this.chatResize();
  733. },
  734. chatResize: function(chatSize) {
  735. var size = chatSize || SRDotDX.config.chatSize;
  736. SRDotDX.config.chatSize = size;
  737. var gmWidth = document.getElementById('gameholder').offsetWidth;
  738. var gmHeight = document.getElementById('gameholder').offsetHeight;
  739. var sbWidth = SRDotDX.config.sbEnable ? 70 : 0;
  740. var hScroll = SRDotDX.config.hideScrollBar ? SRDotDX.gui.getScrollbarWidth():0;
  741. var chatWidthInc = size - 300;
  742. var chatCorr = chatWidthInc/75*2;
  743. var overallWidth = (300 + gmWidth + sbWidth + chatWidthInc) + "px";
  744. document.getElementById('maingame').style.width = overallWidth;
  745. document.getElementById('maingamecontent').style.width = overallWidth;
  746. document.getElementById('flashframecontent').style.width = overallWidth;
  747. document.getElementById('chat_container').style.width = size + "px";
  748. document.getElementById('raid_list').style.width = 282 + hScroll + "px";
  749. document.getElementById('raid_list').style.overflowY = hScroll?'scroll':'auto';
  750. document.getElementById('chat_tab_pane').style.width = (size - 16) + "px";
  751. document.getElementById('DotDX_chatResizeElems').innerHTML = '#kong_game_ui textarea.chat_input { width: ' + (size - 30) + 'px !important; }\
  752. #kong_game_ui div#chat_raids_overlay { width: ' + (size - 8) + 'px }\
  753. #kong_game_ui div#chat_raids_overlay > span { width: ' + (size - 18 - chatCorr) + 'px }\
  754. #kong_game_ui div.chat_message_window { height: ' + (gmHeight-254) + 'px !important; width: ' + (size - 18 + hScroll) + 'px; overflow-y: '+(hScroll?'scroll':'auto')+'; }\
  755. #kong_game_ui div#chat_rooms_container div.chat_tabpane.users_in_room { width: ' + (size - 22 + hScroll) + 'px }\
  756. div#dotdx_sidebar_container { height: ' + (gmHeight-36) + 'px; '+ (SRDotDX.config.sbRightSide?"text-align: left; padding-left: 1px":"text-align: left; margin-left: 2px; padding-left: 6px") + ' }';
  757. },
  758. helpBox: function(boxId,magId,raidId,mouseOut) {
  759. var boxDiv = document.getElementById(boxId);
  760. var magSpan = document.getElementById(magId);
  761. if (mouseOut) {
  762. SRDotDX.gui.CurrentRaidsOutputTimer = setTimeout(function(){document.getElementById('chat_raids_overlay').className = "";}, 1500); //setTimeout(elfade, 1500, boxId, 750, false);//fadeEffect.init(boxId, 0);//boxDiv.style.display = 'none';
  763. magSpan.style.maxWidth = "0";
  764. }
  765. else {
  766. var info = SRDotDX.config.getRaid(raidId), msg = 'Unknown', mWidth = "0";
  767. var raid = (info == null || typeof SRDotDX.raids[info.boss] == 'undefined') ? {name:'Unknown'} : SRDotDX.raids[info.boss];
  768. var magE = info.magic.reduce(function(a,b){return a+b;});
  769. if (raid.name != 'Unknown') {
  770. var diff = info.diff - 1;
  771. if(magE) {
  772. var magI = "";
  773. //if(SRDotDX.isFirefox)
  774. for (i=0; i<raid.nd; i++) magI += '<span class="magic" style="background-position: -' + info.magic[i]*16 + 'px 0">&nbsp;</span>';
  775. //else for (i=0; i<raid.nd; i++) magI += '<span class="magic" style="background-position-x:-' + info.magic[i]*16 + 'px">&nbsp;</span>';
  776. magSpan.innerHTML = magI;
  777. mWidth = (raid.nd*18+10) + "px";
  778. }
  779. msg = '<span style="font-size: 12px;">' + raid.name + ' on ' + ['Normal','Hard','Legendary','Nightmare','Insane','Hell'][diff] + '</span><br>';
  780. msg += (raid.type == '' ? '' : raid.type + ' | ') + SRDotDX.raidSizes[raid.size].name + ' Raid' + (diff == 3 ? ' | AP' : '');
  781. var size = raid.size < 15 ? 10 : raid.size;
  782. var fs = raid.health[diff] / (raid.size==101?100:raid.size);
  783. if (typeof raid.lt != 'object') {
  784. var epicRatio = SRDotDX.raidSizes[size].ratios;
  785. if (size == 15) msg += '<br>fs:&thinsp;' + SRDotDX.util.getShortNum(fs) + ' | 65d:&thinsp;' + SRDotDX.util.getShortNum(fs*epicRatio[0]) + ' | 338d:&thinsp;' + SRDotDX.util.getShortNum(fs*epicRatio[9]) + ' | 375d:&thinsp;' + SRDotDX.util.getShortNum(fs*epicRatio[10]);
  786. else msg += '<br>fs: ' + SRDotDX.util.getShortNum(fs) + ' | 1e: ' + SRDotDX.util.getShortNum(fs*epicRatio[0]) + ' | 2e: ' + SRDotDX.util.getShortNum(fs*epicRatio[2]) + ' | 2/3e: ' + SRDotDX.util.getShortNum(fs*epicRatio[3]);
  787. //msg += '<br>2e: ' + epicRatio[2] + ' | 3e: ' + epicRatio[4] + ' | fs: ' + fs;
  788. }
  789. else if (typeof raid.lt == 'object') {
  790. var ele = SRDotDX.lootTiers[raid.lt[diff]];
  791. var step = SRDotDX.config.chatSize == 450 ? 6 : (SRDotDX.config.chatSize == 375 ? 5 : 4);
  792. var steplow = step - 1;
  793. var tiers = ele['tiers'];
  794. var epics = ele['epics'];
  795. var best = ele['best'];
  796. var e = ele['e']?'e':'';
  797. var text = ''; var i = tiers.length;
  798. while (i--) text = (i%step == steplow ? '<br>' : (i > 0 && tiers[i-1].charAt(5)=='b'? '&thinsp; | ' : ' | ') ) + (i==best?'<u>':'') + epics[i] + (epics[i]<10?(e+':&#8192; '):(e+': '))+ tiers[i] + (i==best?'</u>':'') + text;
  799. msg += ' | Tiered<br>fs: &nbsp;&nbsp;&thinsp;' + SRDotDX.util.getShortNum(fs) + '' + text;
  800. }
  801. else {}
  802. }
  803. if(magE) magSpan.style.maxWidth = mWidth;
  804. document.getElementById(boxId + '_text').innerHTML = msg;
  805. if (!(boxDiv.className.indexOf('active') > 0)) boxDiv.className = "active";
  806. clearTimeout(SRDotDX.gui.CurrentRaidsOutputTimer);
  807. }
  808. },
  809. displayHint: function(hint) {
  810. var helpEl = document.getElementById('helpBox');
  811. if (hint) {
  812. helpEl.children[0].innerHTML = hint;
  813. //helpEl.style.display = 'block';
  814. helpEl.style.maxHeight = '50px';
  815. helpEl.style.borderTopWidth = '1px';
  816. }
  817. else helpEl.style.maxHeight = '0', helpEl.style.borderTopWidth = '0';
  818. },
  819. refreshRaidList: function() {
  820. document.getElementById('raid_list').innerHTML = "";
  821. for (var i=0; i<SRDotDX.gui.joinRaidList.length; i++) SRDotDX.gui.addRaid(SRDotDX.gui.joinRaidList[i]);
  822. },
  823. addRaid: function(id) {
  824. var r = typeof id == 'string' || typeof id == 'number' ? SRDotDX.config.raidList[id] : id;
  825. var a = document.getElementById('raid_list');
  826. if (r.boss) {
  827. if (typeof a != 'undefined' && a) {
  828. var rd = typeof SRDotDX.raids[r.boss] != 'object' ? {name: 'Unknown', shortname: 'Unknown', health: [0,0,0,0], duration: 128, nd: 6} : SRDotDX.raids[r.boss];
  829. var url = 'http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons?kv_action_type=raidhelp&kv_difficulty=' + r.diff + '&kv_hash=' + r.hash + '&kv_raid_boss=' + r.boss + '&kv_raid_id=' + r.id;
  830. //var filterClass = ' DotDX_fltList_' + rd.id + '_' + (r.diff - 1);
  831. var diffClass = '', diffText = '';
  832. switch(r.diff) {
  833. case 1: diffClass = " DotDX_N"; diffText = "N"; break;
  834. case 2: diffClass = " DotDX_H"; diffText = "H"; break;
  835. case 3: diffClass = " DotDX_L"; diffText = "L"; break;
  836. case 4: diffClass = " DotDX_NM"; diffText = "NM"; break;
  837. }
  838. var magI = "";
  839. if(SRDotDX.isFirefox) for (var i=0; i<rd.nd; i++) magI += '<span style="background-position: -' + r.magic[i]*16 + 'px 0">&nbsp;</span>';
  840. else for (i=0; i<rd.nd; i++) magI += '<span style="background-position-x:-' + r.magic[i]*16 + 'px">&nbsp;</span>';
  841. var tlh = r.timeLeft()/3600;
  842. var tlp = (tlh/rd.duration*100).toPrecision(3); tlh = parseInt(tlh);
  843. var tlm = parseInt(r.timeLeft()%3600/60);
  844. var lii = SRDotDX.gui.cHTML('div').set({
  845. class: 'raid_list_item' + diffClass + (r.visited ? ' DotDX_visitedRaidList' : '') + (r.nuked ? ' DotDX_nukedRaidList' : ''),
  846. id: 'DotDX_'+ r.id,
  847. raidid: r.id
  848. }).html(' \
  849. <span class="DotDX_List_diff' + diffClass + '">' + diffText + '</span> \
  850. <a class="DotDX_RaidLink" href="' + url + '">' + rd.shortname + '</a> \
  851. <span class="DotDX_RaidListVisited">' + (r.visited ? '&#9733;' : '') + '</span> \
  852. <span class="DotDX_extMagics">'+magI+'</span><br>\
  853. <span class="DotDX_extState"></span><span class="DotDX_extInfo">hp: ' + SRDotDX.util.getShortNum(r.hp*rd.health[r.diff-1]) + ' ('+(r.hp*100).toPrecision(3)+'%), time: '+(tlh>0?(tlh+' h'):(tlm+' min'))+' ('+tlp+'%)</span><a class="dotdxRaidListDelete" style="float:right; display: inline" href="#">DEL</a>\
  854. ', true);
  855. if (SRDotDX.config.newRaidsAtTopOfRaidList) {
  856. var arr = a.getElementsByClassName('raid_list_item');
  857. if (arr.length > 0) lii.attach('before', arr[0]); else lii.attach('to', a);
  858. }
  859. else lii.attach('to', a);
  860. }
  861. }
  862. else delete SRDotDX.config.raidList[id];
  863. },
  864. toggleRaidListDesc: function(el,mode) {
  865. if (mode) { clearTimeout(el.timerout); el.timerin = setTimeout(function(){el.lastElementChild.style.display = "block";},500) }
  866. else { clearTimeout(el.timerin); el.timerout = setTimeout(function(){el.lastElementChild.style.display = "none";},50) }
  867. return false;
  868. },
  869. cHTML: function(ele) {
  870. function Cele(ele) {
  871. this._ele = ele;
  872. this.ele = function() { return this._ele };
  873. this.set = function(param) { for (var attr in param) if (param.hasOwnProperty(attr)) this._ele.setAttribute(attr, param[attr]); return this };
  874. this.text = function(text) { this._ele.appendChild(document.createTextNode(text)); return this };
  875. this.html = function(text,overwrite) { this._ele.innerHTML = overwrite ? text : this._ele.innerHTML + text; return this };
  876. this.on = function(event,func,bubble) { this._ele.addEventListener(event,func,bubble); return this };
  877. this.attach = function(method,ele) {
  878. if (typeof ele == 'string') ele = document.getElementById(String(ele));
  879. if (!(ele instanceof Node)) throw 'Invalid attachment element specified';
  880. else if (!/^(?:to|before|after)$/i.test(method)) throw 'Invalid append method specified';
  881. else if (method == 'to') ele.appendChild(this._ele);
  882. else if (method == 'before') ele.parentNode.insertBefore(this._ele, ele);
  883. else if (typeof ele.nextSibling == 'undefined') ele.parentNode.appendChild(this._ele);
  884. else ele.parentNode.insertBefore(this._ele, ele.nextSibling);
  885. return this
  886. };
  887. }
  888. if (typeof ele == 'string') ele = /^#/i.test(String(ele)) ? document.getElementById(ele.substring(1)) : document.createElement(String(ele));
  889. if (ele instanceof Node) return new Cele(ele);
  890. throw 'Invalid element type specified';
  891. },
  892. errorMessage: function(s,tag) { tag = typeof tag == 'undefined' ? 'b' : tag; SRDotDX.gui.doStatusOutput('<'+tag+'>'+s+'</'+tag+'>') },
  893. updateMessage: function() { SRDotDX.gui.doStatusOutput(SRDotDX.gui.standardMessage(), false, true) },
  894. postingMessage: function(i,ct) { SRDotDX.gui.doStatusOutput('Posting message ' + i + (typeof ct == 'undefined' ? '' : ' of ' + ct + '...'), false) },
  895. standardMessage: function() { return Object.keys(SRDotDX.config.raidList).length + ' raids in db, ' + SRDotDX.gui.joinRaidList.length + ' selected to join'; },
  896. CurrentStatusOutputTimer: 0,
  897. doStatusOutput: function(str,msecs,showInChat) {
  898. showInChat = typeof showInChat == 'undefined' ? true : showInChat;
  899. msecs = typeof msecs == 'undefined' ? 4000 : msecs;
  900. var el = document.getElementById('StatusOutput');
  901. var el2 = document.getElementById('dotdx_chat_overlay');
  902. el.innerHTML = str;
  903. if (showInChat) {
  904. el2.innerHTML = str;
  905. }
  906. if (msecs) {
  907. if (SRDotDX.gui.CurrentStatusOutputTimer) clearTimeout(SRDotDX.gui.CurrentStatusOutputTimer);
  908. SRDotDX.gui.CurrentStatusOutputTimer = setTimeout(function(){ el.innerHTML = SRDotDX.gui.standardMessage(); el2.innerHTML = SRDotDX.gui.standardMessage() }, msecs);
  909. }
  910. },
  911. toggleDisplay: function(elem,sender,el2) {
  912. if (typeof elem == 'undefined') return;
  913. var el = document.getElementById(elem);
  914. var alls = document.getElementsByName(sender.getAttribute('name'));
  915. if(alls.length > 0) {
  916. for (var i = 0; i < alls.length; i++) {
  917. if(alls[i].nodeName == 'P') alls[i].getElementsByTagName('span')[0].innerHTML = '+';
  918. else alls[i].style.display = 'none';
  919. }
  920. el.style.display = 'block'; sender.getElementsByTagName('span')[0].innerHTML = '&minus;';
  921. }
  922. else {
  923. if (el.style.display == 'none') {
  924. el.style.display = 'block'; sender.getElementsByTagName('span')[0].innerHTML = '&minus;';
  925. }
  926. else {
  927. el.style.display = 'none'; sender.getElementsByTagName('span')[0].innerHTML = '+';
  928. }
  929. }
  930. if (typeof el2 == 'string') {
  931. switch(el2) {
  932. case 'raid_list': SRDotDX.refreshRaidTab(); break;
  933. case 'share_list': document.getElementById('DotDX_raidsToSpam').style.height = ( 526 - document.getElementById('FPXShare').offsetHeight - document.getElementById('FPXImport').offsetHeight ) + "px";
  934. }
  935. }
  936. },
  937. Importing: false,
  938. FPXimportRaids: function(save) {
  939. var linklist = document.FPXRaidSpamForm.FPXRaidSpamInput.value;
  940. if (linklist.length > 10) {
  941. save = typeof save == 'undefined' ? true : save;
  942. console.log('[SRDotDX] Import started');
  943. SRDotDX.gui.Importing = true;
  944. document.FPXRaidSpamForm.FPXRaidSpamInput.value = '';
  945. var link, tagged = false, haspb = false, imct = 0;
  946. var total = document.getElementById('raid_list').childNodes.length;
  947. var patt = new RegExp('http...www.kongregate.com.games.5thPlanetGames.dawn.of.the.dragons.[\\w\\s\\d_=&]+[^,]', 'ig');
  948. if (linklist.indexOf('!!OBJECT_IMPORT!!') > -1) {
  949. var objs = linklist.split(';'), obj;
  950. if (SRDotDX.config.confirmForLargePaste && SRDotDX.gui.importingPastebin && objs.length > SRDotDX.config.confirmPasteSize && !confirm('This pastebin import exceeds ' + SRDotDX.config.confirmPasteSize + ' raids. Continue with import?')) return false;
  951. console.log('[SRDotDX] Objects importing ' + objs.length);
  952. tagged = true;
  953. while (imct < objs.length) {
  954. obj = objs[imct].split(',');
  955. if (obj.length == 4) {
  956. console.log('[SRDotDX] Object importing ' + imct + ': ' + obj[2] + ' : ' + obj[1] + ' : ' + obj[3]);
  957. SRDotDX.getRaidDetails(obj[0], obj[2], SRDotDX.config.markImportedVisited, obj[1], obj[3]);
  958. }
  959. imct++;
  960. }
  961. }
  962. if (!tagged) {
  963. if(SRDotDX.config.confirmForLargePaste && SRDotDX.gui.importingPastebin && linklist.split(',').length > SRDotDX.config.confirmPasteSize && !confirm('This pastebin import exceeds '+SRDotDX.config.confirmPasteSize+' raids. Continue with import?')) return false;
  964. while(link = patt.exec(linklist)) {
  965. imct++; SRDotDX.getRaidDetails(link+'', 'PasteBin', SRDotDX.config.markImportedVisited);
  966. }
  967. }
  968. var pbpatt = new RegExp('http...pastebin.com.\\w{8}', 'ig');
  969. while (link = pbpatt.exec(linklist)) { haspb = true; SRDotDX.request.pasteImport(link) }
  970. if (!haspb) {
  971. var diff = document.getElementById('raid_list').childNodes.length - total;
  972. SRDotDX.gui.doStatusOutput('Import complete, ' + diff + ' of ' + imct + ' new raids');
  973. }
  974. SRDotDX.gui.Importing = false;
  975. if (save) setTimeout(SRDotDX.config.save, 250, false);
  976. return {totalnew: diff, total: imct}
  977. }
  978. return false;
  979. },
  980. deleteRaid: function(ele) {
  981. var id = ele.getAttribute('raidid');
  982. SRDotDX.gui.deleteRaidFromDB(id);
  983. ele.parentNode.removeChild(ele);
  984. },
  985. deleteRaidFromDB: function(id) {
  986. var chat = document.getElementsByClassName('chat_message_window'), p;
  987. for (var c=0; c<chat.length; c++) {
  988. p = chat[c].getElementsByClassName('SRDotDX_raid');
  989. for (var i=0; i<p.length; i++) if(p[i].className.indexOf("DotDX_raidId_"+id) > -1) p[i].parentNode.removeChild(p[i]);
  990. }
  991. //SRDotDX.gui.toggleRaid('nuked', id, true);
  992. if (SRDotDX.config.raidList[id]) delete SRDotDX.config.raidList[id];
  993. },
  994. FPXdeleteAllRaids: function() {
  995. if (!SRDotDX.config.confirmDeletes || confirm('This will delete all ' + SRDotDX.config.raidList.length + ' raids stored. Continue? \n (This message can be disabled on the options tab.)')) {
  996. for (var id in SRDotDX.config.raidList) if (SRDotDX.config.raidList[id]) delete SRDotDX.config.raidList[id];
  997. var raidlistDIV = document.getElementById('raid_list');
  998. while (raidlistDIV.hasChildNodes()) raidlistDIV.removeChild(raidlistDIV.lastChild);
  999. localStorage.removeItem('raidList');
  1000. SRDotDX.gui.updateMessage();
  1001. console.log('[SRDotDX] Delete all raids finished.');
  1002. }
  1003. },
  1004. chatCommand: function(text) {
  1005. var elems = document.getElementsByClassName('chat_input');
  1006. var txt = [], i = elems.length;
  1007. while (i--) { txt[i] = elems[i].value; elems[i].value = text }
  1008. holodeck.activeDialogue().sendInput();
  1009. i = txt.length;
  1010. while (i--) elems[i].value = txt[i];
  1011. },
  1012. FPXdoWork: function(param1, whisper) {
  1013. //console.log('[DotDX] Posting to chat: ' + (/^http/.test(param1) ? '(url: ' + param1 + ')' : param1) );
  1014. //var matchClass = 'chat_input';
  1015. var elems = document.getElementsByClassName('chat_input');
  1016. if (whisper && whisper != '') {
  1017. //console.log('[DotDX] Whispering spam to: ' + SRDotDX.config.whisperTo);
  1018. param1 = '/w ' + whisper + ' ' + param1;
  1019. }
  1020. var txt = [], i = elems.length;
  1021. while (i--) { txt[i] = elems[i].value; elems[i].value = param1 }
  1022. holodeck.activeDialogue().sendInput();
  1023. i = txt.length;
  1024. while (i--) elems[i].value = txt[i];
  1025. },
  1026. FPXformatRaidOutput: function(url) {
  1027. var pre = ''; //user && room ? '['+room+'|'+user+'] ' : '';
  1028. if (!SRDotDX.config.formatLinkOutput) return pre + url;
  1029. var r = SRDotDX.getRaidDetailsBase(String(url));
  1030. return pre + r.shortname + ' ' + r.diffShortText + ' ' + url;
  1031. },
  1032. isPosting: false,
  1033. FPXTimerArray: [],
  1034. FPXStopPosting: function() {
  1035. SRDotDX.gui.endSpammingRaids();
  1036. console.log('[DotDX] Spamming raids to chat... [cancelled]');
  1037. SRDotDX.echo('Raid posting cancelled');
  1038. },
  1039. endSpammingRaids: function() {
  1040. var i = SRDotDX.gui.FPXTimerArray.length;
  1041. while (i--) clearTimeout(SRDotDX.gui.FPXTimerArray[i]);
  1042. SRDotDX.gui.isPosting = false;
  1043. document.getElementById('PostRaidsButton').value = 'Post';
  1044. document.getElementById('dotdx_share_post_button').value = 'Post Links to Chat';
  1045. document.getElementById('dotdx_share_post_button').value = 'Friend Share links';
  1046. SRDotDX.gui.doStatusOutput('Posting raids finished');
  1047. SRDotDX.gui.FPXTimerArray = [];
  1048. SRDotDX.config.save(false);
  1049. },
  1050. prepareSpammingRaids: function() {
  1051. SRDotDX.gui.isPosting = true;
  1052. document.getElementById('PostRaidsButton').value = 'Cancel';
  1053. document.getElementById('dotdx_share_post_button').value = 'Cancel';
  1054. document.getElementById('dotdx_friend_post_button').value = 'Cancel';
  1055. SRDotDX.gui.doStatusOutput('Posting raids started', false);
  1056. },
  1057. spamRaidsToFriends: function() {
  1058. SRDotDX.gui.prepareSpammingRaids();
  1059. var userList = [[],[],[],[],[]], i;
  1060. for (user in SRDotDX.config.friendUsers) {
  1061. for(i=0;i<5;i++) if(SRDotDX.config.friendUsers[user][i]) userList[i].push(user);
  1062. }
  1063. console.log('[DotDX] Spamming raids to friends... [started]');
  1064. try {
  1065. var linkList = document.getElementById('DotDX_raidsToSpam').value;
  1066. if (linkList.length > 10) {
  1067. console.log('[DotDX] [If length went trough]');
  1068. document.getElementById('DotDX_raidsToSpam').value = '';
  1069. var patt = new RegExp('http...www.kongregate.com.games.5thPlanetGames.dawn.of.the.dragons.[\\w\\s\\d_=&]+[^,]', 'ig');
  1070. var link, ct = 0, sel = 4, r, rs, u; i=0;
  1071. var timer = 500, ttw = 3050;
  1072. var total = linkList.split(patt).length-1;
  1073. console.log('[DotDX] [Just before while]');
  1074. while((link = patt.exec(linkList)) && SRDotDX.gui.isPosting) {
  1075. console.log('[DotDX] [After while]');
  1076. r = SRDotDX.util.getRaidFromUrl(link.toString());
  1077. rs = SRDotDX.raids[r.boss].size;
  1078. if (r.boss == 'serpina') sel = 0;
  1079. else if (rs < 26) sel = 1;
  1080. else if (rs == 50) sel = 2;
  1081. else if (rs == 100) sel = 3;
  1082. console.log('[DotDX] [If before user for]');
  1083. if (userList[sel].length > 0) {
  1084. for(u=0;u<userList[sel].length;u++) {
  1085. console.log('[DotDX] [Inside user for]');
  1086. ( function(p1,p2) {
  1087. return SRDotDX.gui.FPXTimerArray[i] = setTimeout(function() { if (!SRDotDX.gui.isPosting) return;
  1088. SRDotDX.gui.FPXdoWork(SRDotDX.gui.FPXformatRaidOutput(p1), p2);
  1089. ++ct; SRDotDX.gui.postingMessage(ct, i);
  1090. },timer); })(link,userList[sel][u]);
  1091. timer += ttw; i++;
  1092. }
  1093. }
  1094. }
  1095. }
  1096. SRDotDX.gui.FPXTimerArray[SRDotDX.gui.FPXTimerArray.length] = setTimeout(function() { SRDotDX.gui.endSpammingRaids(); console.log('[DotDX] Spamming raids to friends... [stopped]'); }, timer);
  1097. }
  1098. catch(ex) { console.log('[DotDX] Spamming raids to friends... [error]: ' + ex) }
  1099. },
  1100. FPXspamRaids: function() {
  1101. SRDotDX.gui.prepareSpammingRaids();
  1102. console.log('[DotDX] Spamming raids to chat... [started]');
  1103. try {
  1104. var linkList = document.getElementById('DotDX_raidsToSpam').value;
  1105. if (linkList.length > 10) {
  1106. document.getElementById('DotDX_raidsToSpam').value = '';
  1107. var patt = new RegExp('http...www.kongregate.com.games.5thPlanetGames.dawn.of.the.dragons.[\\w\\s\\d_=&]+[^,]', 'ig');
  1108. var link, ct = 0, i=0;
  1109. var timer = 500, ttw = 3050;
  1110. var total = linkList.split(patt).length-1;
  1111. while((link = patt.exec(linkList)) && SRDotDX.gui.isPosting) {
  1112. ( function(p1) {
  1113. return SRDotDX.gui.FPXTimerArray[i] = setTimeout(function() { if (!SRDotDX.gui.isPosting) return;
  1114. SRDotDX.gui.FPXdoWork(SRDotDX.gui.FPXformatRaidOutput(p1), SRDotDX.config.whisperTo);
  1115. ++ct; SRDotDX.gui.postingMessage(ct, total);
  1116. },timer); })(link);
  1117. timer += ttw; i++;
  1118. }
  1119. }
  1120. SRDotDX.gui.FPXTimerArray[SRDotDX.gui.FPXTimerArray.length] = setTimeout(function() { SRDotDX.gui.endSpammingRaids(); console.log('[DotDX] Spamming raids to chat... [stopped]'); }, timer);
  1121. }
  1122. catch(ex) { console.log('[DotDX] Spamming raids to chat... [error]: ' + ex) }
  1123. },
  1124. quickImportAndJoin: function(joinStr,imp) {
  1125. SRDotDX.gui.updateFilterTxt(joinStr,false,true);
  1126. SRDotDX.request.quickBtnLock = false;
  1127. if (imp) SRDotDX.request.joinAfterImport = true, SRDotDX.gui.importFromServer();
  1128. else SRDotDX.gui.joinSelectedRaids();
  1129. },
  1130. importFromServer: function() {
  1131. var h = Math.ceil(((new Date).getTime() - SRDotDX.config.lastImported)/3600000);
  1132. SRDotDX.echo('Importing raids from server');
  1133. SRDotDX.request.raids(false,h);
  1134. },
  1135. importingPastebin: false,
  1136. FPXSortRaids: function() {
  1137. var raidArray = [], i, sortFunc;
  1138. var selectedSort = document.getElementById('FPXRaidSortSelection').value;
  1139. var selectedDir = document.getElementById('FPXRaidSortDirection').value;
  1140. var raidlistDIV = document.getElementById('raid_list');
  1141. var raidList = raidlistDIV.childNodes;
  1142. console.log('[SRDotDX] Sorting started ' + selectedSort + ' : ' + selectedDir);
  1143. i = raidList.length;
  1144. while (i--) raidArray.push( SRDotDX.config.raidList[raidList[i].getAttribute('raidid')] );
  1145. switch(selectedSort) {
  1146. case 'Id':
  1147. if (selectedDir == 'asc') sortFunc = function(a,b) {
  1148. if (!(typeof a.id === 'undefined' || typeof b.id === 'undefined') && a.id > b.id) return -1;
  1149. return 1;
  1150. };
  1151. else sortFunc = function(a,b) {
  1152. if (!(typeof a.id === 'undefined' || typeof b.id === 'undefined') && a.id < b.id) return -1;
  1153. return 1;
  1154. };
  1155. break;
  1156. case 'Time':
  1157. if (selectedDir == 'asc') sortFunc = function(a,b) {
  1158. if (!(typeof a.timeStamp === 'undefined' || typeof b.timeStamp === 'undefined') && a.timeStamp > b.timeStamp) return -1;
  1159. return 1;
  1160. };
  1161. else sortFunc = function(a,b) {
  1162. if (!(typeof a.timeStamp === 'undefined' || typeof b.timeStamp === 'undefined') && a.timeStamp < b.timeStamp) return -1;
  1163. return 1;
  1164. };
  1165. break;
  1166. case 'Name':
  1167. if (selectedDir == 'asc') sortFunc = function(a,b) {
  1168. a = SRDotDX.raids[a.boss]; b = SRDotDX.raids[b.boss];
  1169. //console.log(a + ' : ' + b + ' : ' + (typeof a === 'undefined') + ' : ' + (typeof b === 'undefined'));
  1170. if (!(typeof a === 'undefined' || typeof b === 'undefined') && a.name > b.name) return -1;
  1171. return 1;
  1172. };
  1173. else sortFunc = function(a,b) {
  1174. a = SRDotDX.raids[a.boss]; b = SRDotDX.raids[b.boss];
  1175. if (!(typeof a === 'undefined' || typeof b === 'undefined') && a.name < b.name) return -1;
  1176. return 1;
  1177. };
  1178. break;
  1179. case 'Diff':
  1180. if (selectedDir == 'asc') sortFunc = function(a,b) { if (a.diff > b.diff) return -1; return 1 };
  1181. else sortFunc = function(a,b) { if (a.diff < b.diff) return -1; return 1 };
  1182. break;
  1183. }
  1184. try { raidArray.sort(sortFunc) }
  1185. catch(e) { console.log('[SRDotDX] Sorting error: ' + e); return }
  1186. raidlistDIV = document.getElementById('raid_list');
  1187. while (raidlistDIV.hasChildNodes()) raidlistDIV.removeChild(raidlistDIV.lastChild);
  1188. i = raidArray.length;
  1189. while (i--) SRDotDX.gui.addRaid(raidArray[i]);
  1190. //SRDotDX.gui.FPXFilterRaidListByName();
  1191. console.log('[SRDotDX] Sorting finished');
  1192. },
  1193. GetRaid: function(id) {
  1194. if (isNumber(id)) {
  1195. var raidList = document.getElementById('raid_list').childNodes;
  1196. var i = raidList.length, item;
  1197. while (i--) {
  1198. item = raidList[i];
  1199. if (item.getAttribute('raidid') == id) { var raid = JSON.parse(JSON.stringify(SRDotDX.config.raidList[id])); raid.ele = item; return raid }
  1200. }
  1201. }
  1202. return null
  1203. },
  1204. joinRaidList: [],
  1205. postRaidList: [],
  1206. updateFilterTimeout: null,
  1207. filterSearchStringC: "",
  1208. filterSearchStringR: "",
  1209. updateFilterContext: true,
  1210. includeDiff: function(str,dv) {
  1211. var diff = isNaN(parseInt(dv)) ? ({'n':1,'h':2,'l':3,'nm':4,'nnm':0})[dv] || 5 : parseInt(dv);
  1212. var out = "";
  1213. var string = str.toString();
  1214. switch (diff) {
  1215. case 0: out = string.replace(/,|$/g,'_1,') + string.replace(/,|$/g,'_4,'); break;
  1216. case 1: case 2: case 3: case 4: out = string.replace(/,|$/g,'_' + diff + ','); break;
  1217. default: for (var i=1; i<=4; i++) out += string.replace(/,|$/g,'_' + i + ','); break;
  1218. }
  1219. return out.slice(0,-1);
  1220. },
  1221. updateFilterTxt: function(txt,fromRT,quick) {
  1222. clearTimeout(this.updateFilterTimeout);
  1223. var foundRaids = [], field, rf, i;
  1224. if (txt != "") {
  1225. var searchArray = txt.split(/\s?\|\s?|\sor\s|\s?,\s?/ig);
  1226. console.log('[DotDX] Pattern split: ' + searchArray);
  1227. for (i=0; i<searchArray.length; i++) {
  1228. field = searchArray[i].toLowerCase().split(':');
  1229. if (field[0] != "") {
  1230. if (typeof SRDotDX.searchPatterns[field[0]] != 'undefined') foundRaids.push(this.includeDiff(SRDotDX.searchPatterns[field[0]],field[1]));
  1231. else if (typeof SRDotDX.raids[field[0]] != 'undefined') foundRaids.push(this.includeDiff(field[0],field[1]));
  1232. else {
  1233. for (var key in SRDotDX.raids) {
  1234. rf = (SRDotDX.raids[key].name + ':' + SRDotDX.raids[key].shortname + ':' + SRDotDX.raids[key].type).toLowerCase();
  1235. if (rf.indexOf(field[0]) >= 0) foundRaids.push(this.includeDiff(key,field[1]));
  1236. }
  1237. }
  1238. }
  1239. }
  1240. }
  1241. var finalSearchString = foundRaids.length == 0 ? "" : "," + foundRaids.toString() + ",";
  1242. console.log('[DotDX] Raids to join from ' + (fromRT?'Raids':'Chat') + ' tab: ' + foundRaids);
  1243. if (fromRT) {
  1244. SRDotDX.config.lastFilter = txt;
  1245. SRDotDX.config.filterSearchStringR = finalSearchString;
  1246. }
  1247. else if (quick) {
  1248. SRDotDX.request.filterSearchStringT = finalSearchString;
  1249. }
  1250. else {
  1251. var filterInputs = document.getElementsByClassName('dotdx_chat_filter');
  1252. for (i=0; i<filterInputs.length; i++) if(filterInputs[i].value != txt) filterInputs[i].value = txt;
  1253. SRDotDX.config.chatFilterString = txt;
  1254. SRDotDX.config.filterSearchStringC = finalSearchString;
  1255. //this.joinRaidFromChat = true;
  1256. }
  1257. if(quick) { SRDotDX.gui.selectRaidsToJoin('quick'); SRDotDX.config.save(false) }
  1258. else { this.updateFilterTimeout = setTimeout(function(){SRDotDX.gui.selectRaidsToJoin(); SRDotDX.config.save(false)},300) }
  1259. },
  1260. selectRaidsToJoin: function(from) {
  1261. if (SRDotDX.request.quickBtnLock) {
  1262. if (!SRDotDX.gui.joining) SRDotDX.gui.joinRaidList.length = 0;
  1263. SRDotDX.gui.updateFilterContext = document.getElementById('chat_tab').firstChild.className == 'active';
  1264. var searchString = from && from == 'quick' ? SRDotDX.request.filterSearchStringT : (SRDotDX.gui.updateFilterContext && SRDotDX.config.chatFilterString != "" ? SRDotDX.config.filterSearchStringC : SRDotDX.config.filterSearchStringR);
  1265. var r, c = 0, filter = SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML;
  1266. for (var raid in SRDotDX.config.raidList) {
  1267. r = SRDotDX.config.raidList[raid];
  1268. if( SRDotDX.config.fltShowAll || (
  1269. (SRDotDX.config.fltShowNuked ? r.nuked : !r.nuked && (SRDotDX.config.fltIncVis || !r.visited)) &&
  1270. filter.indexOf('fltList_' + r.boss + '_' + (r.diff-1)) < 0 &&
  1271. (searchString == "" || searchString.indexOf("," + r.boss + "_" + r.diff + ",") >= 0) ) )
  1272. //try { SRDotDX.gui.joinRaidList.push(JSON.parse(JSON.stringify(r))) } catch(ex){}
  1273. try { SRDotDX.gui.joinRaidList.push(r) } catch(ex){}
  1274. }
  1275.  
  1276. if(!SRDotDX.gui.joining) SRDotDX.gui.updateMessage(), SRDotDX.gui.refreshRaidList();
  1277. }
  1278. },
  1279. pushRaidToJoinQueue: function(id) {
  1280. var searchString = SRDotDX.gui.updateFilterContext && SRDotDX.config.chatFilterString != "" ? SRDotDX.config.filterSearchStringC : SRDotDX.config.filterSearchStringR;
  1281. var r, filter = SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML;
  1282. r = SRDotDX.config.raidList[id];
  1283. if( SRDotDX.config.fltShowAll || (
  1284. (SRDotDX.config.fltShowNuked ? r.nuked : !r.nuked && (SRDotDX.config.fltIncVis || !r.visited)) &&
  1285. filter.indexOf('fltList_' + r.boss + '_' + (r.diff-1)) < 0 &&
  1286. (searchString == "" || searchString.indexOf("," + r.boss + "_" + r.diff + ",") >= 0) ) )
  1287. try { SRDotDX.gui.joinRaidList.push(JSON.parse(JSON.stringify(r))) } catch(ex){}
  1288. },
  1289. joining: false,
  1290. joinRaidIndex: 0,
  1291. joinRaidComplete: 0,
  1292. joinRaidSuccessful: 0,
  1293. joinRaidDead: 0,
  1294. joinRaidInvalid: 0,
  1295. joinSelectedRaids: function (fromChat) {
  1296. if (!this.joining) {
  1297. this.joining = true;
  1298. this.joinRaidIndex = 0;
  1299. this.joinRaidComplete = 0;
  1300. this.joinRaidSuccessful = 0;
  1301. this.joinRaidDead = 0;
  1302. this.joinRaidInvalid = 0;
  1303. if (SRDotDX.gui.joinRaidList.length == 0) { this.joinFinish(true); return }
  1304. SRDotDX.gui.cHTML("#AutoJoinVisibleButton").ele().value = 'Cancel';
  1305. SRDotDX.gui.cHTML("#AutoImpJoinVisibleButton").ele().value = 'Cancel';
  1306. console.log('[DotDX] Hyperfast joining ' + SRDotDX.gui.joinRaidList.length + ' raids');
  1307. while(SRDotDX.gui.joinRaidIndex < Math.min(30,SRDotDX.gui.joinRaidList.length)) SRDotDX.request.joinRaid(SRDotDX.gui.joinRaidList[SRDotDX.gui.joinRaidIndex++]);
  1308. }
  1309. else if (!fromChat) this.joinFinish();
  1310. },
  1311. joinFinish: function(recalc){
  1312. this.joining = false;
  1313. SRDotDX.request.quickBtnLock = true;
  1314. SRDotDX.gui.cHTML("#AutoJoinVisibleButton").ele().value = 'Join';
  1315. SRDotDX.gui.cHTML("#AutoImpJoinVisibleButton").ele().value = 'Import & Join';
  1316. //this.joinRaidList = [];
  1317. if (recalc) this.selectRaidsToJoin('joining finish');
  1318. },
  1319. refreshFriends: function() {
  1320. var content="", ff, i= 0, f=false, friend;
  1321. var parentDiv = SRDotDX.gui.cHTML('#FPXfsOptions');
  1322. parentDiv.html('<span class="generic">User</span><span class="share">Srp</span><span class="share">Sml</span><span class="share">Med</span><span class="share">Lrg</span><span class="share" style="margin-right: 27px">Oth</span><hr style="width: 270px; margin: 3px auto 4px; border: 0; height: 1px; background-color: #999;">',true);
  1323. for (friend in SRDotDX.config.friendUsers) {
  1324. ff = SRDotDX.config.friendUsers[friend];
  1325. content += (f?'<br>':'')+'<span class="generic">' + friend + '</span>' +
  1326. '<input type="checkbox" id="fs:' + friend + ':0' + '"/><label for="fs:' + friend + ':0' + '"></label>'+
  1327. '<input type="checkbox" id="fs:' + friend + ':1' + '"/><label for="fs:' + friend + ':1' + '"></label>'+
  1328. '<input type="checkbox" id="fs:' + friend + ':2' + '"/><label for="fs:' + friend + ':2' + '"></label>'+
  1329. '<input type="checkbox" id="fs:' + friend + ':3' + '"/><label for="fs:' + friend + ':3' + '"></label>'+
  1330. '<input type="checkbox" id="fs:' + friend + ':4' + '"/><label for="fs:' + friend + ':4' + '"></label>';
  1331. f=true;
  1332. }
  1333. parentDiv.html('<div style="overflow-y: scroll; width: 277px; height: 414px">'+content+'</div>',false);
  1334. for (friend in SRDotDX.config.friendUsers) {
  1335. ff = SRDotDX.config.friendUsers[friend];
  1336. for (i=0; i<5; i++) SRDotDX.gui.cHTML('#fs:' + friend + ':' + i).on('click',function(e){SRDotDX.gui.fsEleClick(e)}).ele().checked = ff[i];
  1337. }
  1338. },
  1339. DeleteRaids: function () {
  1340. if (!this.joining) {
  1341. console.log('[DotDX] Erasing visible raids ...');
  1342. var rn = SRDotDX.gui.joinRaidList.length;
  1343. if (rn > 0 && (!SRDotDX.config.confirmDeletes || confirm('This will delete ' + rn + ' raids. Continue? \n (This message can be disabled on the options tab.)'))) {
  1344. var i, tot = 0;
  1345. for (i=0; i<rn; i++) {
  1346. SRDotDX.gui.deleteRaidFromDB(SRDotDX.gui.joinRaidList[i].id);
  1347. tot++;
  1348. }
  1349. SRDotDX.gui.doStatusOutput(tot + ' raids deleted');
  1350. SRDotDX.gui.selectRaidsToJoin();
  1351. console.log('[DotDX] Erasing complete');
  1352. }
  1353. }
  1354. },
  1355. GetDumpText: function () {
  1356. var dumptext = "";
  1357. var pre = "http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons?kv_action_type=raidhelp";
  1358. var i, raid;
  1359. for (i=0; i<SRDotDX.gui.joinRaidList.length; i++) {
  1360. raid = SRDotDX.gui.joinRaidList[i];
  1361. if (raid.nuked) continue;
  1362. dumptext += pre + '&kv_raid_id=' + raid.id + '&kv_difficulty=' + raid.diff + '&kv_raid_boss=' + raid.boss + '&kv_hash=' + raid.hash + ', ';
  1363. }
  1364. return dumptext;
  1365. },
  1366. RaidAction: function(f) {
  1367. switch (f) {
  1368. case 'share':
  1369. SRDotDX.gui.DumpRaidsToShare(true); break;
  1370. case 'post':
  1371. if (SRDotDX.gui.isPosting) SRDotDX.gui.FPXStopPosting();
  1372. else SRDotDX.gui.DumpRaidsToShare(), SRDotDX.gui.FPXspamRaids();
  1373. break;
  1374. case 'post_share':
  1375. if (SRDotDX.gui.isPosting) SRDotDX.gui.FPXStopPosting();
  1376. else SRDotDX.gui.FPXspamRaids();
  1377. break;
  1378. case 'post_friend':
  1379. if (SRDotDX.gui.isPosting) SRDotDX.gui.FPXStopPosting();
  1380. else SRDotDX.gui.spamRaidsToFriends();
  1381. break;
  1382. case 'delete':
  1383. SRDotDX.gui.DeleteRaids(); break;
  1384. }
  1385. //r = null;
  1386. return false;
  1387. },
  1388. DumpRaidsToShare: function(b) {
  1389. document.getElementById('DotDX_raidsToSpam').value = SRDotDX.gui.GetDumpText();
  1390. SRDotDX.gui.doStatusOutput('Copied ' + SRDotDX.gui.joinRaidList.length + ' raid links to share tab.');
  1391. console.log('[DotDX] Dumped ' + SRDotDX.gui.joinRaidList.length + ' to share');
  1392. if(b) {
  1393. var e = document.getElementById('lots_tab_pane').getElementsByTagName('li');
  1394. var i = e.length;
  1395. while (i--) if (e[i].getAttribute('class').indexOf('active') > -1) e[i].className = e[i].className.replace(/ active$/g,'');
  1396. (document.getElementById('FPXShareTab').parentNode).className += ' active';
  1397. }
  1398. },
  1399. BeginDeletingExpiredUnvisitedRaids: function() { SRDotDX.gui.DeleteExpiredUnvisitedRaids(); setInterval('SRDotDX.gui.DeleteExpiredUnvisitedRaids();',600000) },
  1400. DeleteExpiredUnvisitedRaids: function() {
  1401. console.log('[DotDX] Deleting nuked amd old unvisited raids');
  1402. var ct, item, i;
  1403. if (SRDotDX.config.unvisitedRaidPruningMode <= 2 && SRDotDX.config.unvisitedRaidPruningMode >= 0) {
  1404. //var raidList = document.getElementById('raid_list').childNodes;
  1405. var pruneTime = new Date().getTime() / 1000;
  1406. var raidid, raid, raidInfo, pruneTimer; ct = 0;
  1407. for (raidid in SRDotDX.config.raidList) {
  1408. raid = SRDotDX.config.raidList[raidid];
  1409. if (SRDotDX.raids[raid.boss]) {
  1410. if (!raid.visited || raid.nuked) {
  1411. raidInfo = SRDotDX.raids[raid.boss];
  1412. pruneTimer = SRDotDX.raidSizes[raidInfo.size].pruneTimers[SRDotDX.config.unvisitedRaidPruningMode];
  1413. if (raid.nuked) pruneTimer = pruneTimer / 2; //double time nuked pruning
  1414. if ((pruneTime - raid.timeStamp) >= pruneTimer) { SRDotDX.gui.deleteRaidFromDB(raidid); ct++ }
  1415. }
  1416. }
  1417. else { SRDotDX.gui.deleteRaidFromDB(raidid); ct++ }
  1418. }
  1419. if (ct > 0) SRDotDX.gui.doStatusOutput(ct + ' old unvisited raids pruned.');
  1420. console.log('[DotDX] Number of raids pruned: ' + ct);
  1421. SRDotDX.gui.selectRaidsToJoin('prune');
  1422. }
  1423. },
  1424. switchBot: function() {
  1425. //console.log('[SRDotDX] Bot button clicked');
  1426. var chkBot = document.getElementById('SRDotDX_options_hideBotLinks');
  1427. chkBot.checked = !SRDotDX.config.hideBotLinks;
  1428. SRDotDX.config.hideBotLinks = chkBot.checked;
  1429. SRDotDX.gui.cHTML('#SRDotDX_botClass').html('.bot {display: ' + (chkBot.checked ? 'none !important' : 'block') + '}', true);
  1430. /*var botbtns = document.getElementsByClassName('dotdx_chat_bot_button');
  1431. for (var i=0; i<botbtns.length; i++) {
  1432. var botcn = botbtns[i].className;
  1433. botbtns[i].className = botcn.indexOf('active') > 0 ? botcn.replace(' active','') : botcn + ' active';
  1434. }*/
  1435. SRDotDX.gui.scrollChat();
  1436. },
  1437. scrollChat: function(num) {
  1438. var els = document.getElementsByClassName('chat_message_window'), i = num?num:0;
  1439. if (num) els[num].scrollTop = els[num].scrollHeight;
  1440. else while (i < els.length) els[i].scrollTop = els[i].scrollHeight, i++;
  1441. },
  1442. getScrollbarWidth: function() {
  1443. var scrollDiv = SRDotDX.gui.cHTML('div').set({id:"DotDX_scrollMeasure",style:"width:100px;height:100px;overflow:scroll;position:absolute;top:-9999px;"}).attach('to',document.body).ele();
  1444. var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
  1445. document.body.removeChild(document.getElementById('DotDX_scrollMeasure'));
  1446. return scrollbarWidth;
  1447. },
  1448. applyFontSize: function(num) {
  1449. var n = typeof num == 'number' ? num : SRDotDX.config.fontNum, s1, s2, mod = '';
  1450. console.log("[DotDX] apply font size with id: "+n);
  1451. SRDotDX.config.fontNum = n;
  1452. switch (n) {
  1453. case 1: s1 = 12; s2 = 10; mod = '; vertical-align: top;'; break;
  1454. case 2: s1 = 10; s2 = 8; break;
  1455. default: s1 = 11; s2 = 9; break;
  1456. }
  1457. SRDotDX.gui.cHTML('#DotDX_fontClass').html('\
  1458. #kong_game_ui div.chat_message_window p span.message, #kong_game_ui div.chat_message_window p span.separator, #kong_game_ui div.chat_message_window p span.username {font-size: '+s1+'px}\
  1459. #kong_game_ui div.chat_message_window p span.room, #kong_game_ui div.chat_message_window p span.timestamp {font-size: '+s2+'px'+mod+'}\
  1460. ',true);
  1461. },
  1462. applyTabs: function() {
  1463. document.getElementById('lots_tab').firstChild.innerHTML = SRDotDX.config.dotdxTabName;
  1464. var elems = ["#DotDX_Dummy"];
  1465. if(SRDotDX.config.hideGameTab) elems.push("#kong_game_ui li#game_tab");
  1466. if(SRDotDX.config.hideAccTab) elems.push("#kong_game_ui li#accomplishments_tab");
  1467. SRDotDX.gui.cHTML('#DotDX_tabs').html(elems.join(", ") + ' { display: none !important }',true);
  1468. },
  1469. applyTheme: function(num) {
  1470. var n = typeof num == 'number' ? num : SRDotDX.config.themeNum;
  1471. console.log("[DotDX] apply theme with id: "+n);
  1472. var c, check, radio;
  1473. SRDotDX.config.themeNum = n;
  1474. switch (n) {
  1475. case 1:
  1476. check = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAJxSURBVEhL7VRLaxNRGL1QEIVs9AckDamZZPLOvDMzicZEjBltY5qnisFFKbgRVLoQEf0JVkShTUVQCl2oG9GNS0FcuXDpD3DrxneP3x0mfdimTXHjwoHDMN/cc+a73z1nmCAImVgs9joej39NJBLYAau07kM0Gu0EAoH9bHBR8W02m4WqqtB1fSg0TYMkSUgmkx+JI3l0xujLvzg5l8vBsizYtr0FvG6apiuSSqV4J8c8OmO8Pf4Fviifz6NQKGwLLmQYBtLpNEig5NHXBfiC7YgDcPH/ArsI/NUpbPTBMAx8wAWIsy5AxW8DJ/IFw8DfcyfKsvyTOi56dMYcx1nhWyCL/un9LeAC5XL5Xa1WEz06Y61Wa5zwst1uf+l0OtgBq7TmfbPZrDYajTGPzvacRup0jpAURdHnChDxzahpNNMZXCsWMJ+NfDoz7r/l8/n2cYEfo6RRz0i4YlpYadTxYrKClYOHPueCwXMj+SCXlXBZ1vG828SSU8Mj8sNsaAKq3x/c5ES7cASWTaahOydywbwk46qi41Wvi351CovUxUw48l0WonOhUGhsTcCkF8clBTOVMkqyCps/0/0GiTw728YikR9YeVwSIjAPR6/Tb+2AO0QuwAdUVXXcrVaozRbun3ZwPiPjdqmE5cY0+tT2gmFiNhKBFouDTmCzlblAMZPFPA2zf3IST2p1PO02sDxdd8lLioZeWIBFpzA0TIaqoRwWcS+Zcvf68BQRnSk8VhX0JsKwaBa7plHXdBwVRNxJpdE/4WBBN3CR9mzxmdCQR0qjQaSKGMNNql+g/ZqK6iZxb2nkJAqOIStrtX81jYz9Bt6mjYTW51PyAAAAAElFTkSuQmCC';
  1477. radio = 'iVBORw0KGgoAAAANSUhEUgAAAA0AAAAaCAYAAABsONZfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAI+SURBVDhPxZJNiBJhGMeHTgXdOrR0CUFdCTR1VscZW3W+Vs0P/JhZv2fVERSLukRBCEUHCRb6gKgg6tQlunrpVHSOztG9aLtsHQxcyv8+E22HcldvO/DjfWGe//M87/P8GfqO6Lp+PJ/P++m82Wg03vV6vXG/3//ZarW2isXiiP5dyGazvkwmc1LTtGPMH0GKgt92u90dEuBfOp3Oj0Kh8DKVSp2n8zRDgrPlcvkNZf1lmib2w/pPlUZUUWHocq1er08Mw8A8KpXKWJKkoSV6TZWwKCR6z6TT6S1qEYuSSCTGTDwe/04PxKKoqrrDRCKRD4qiYFFCodAnRhCEZyScRqNRzMOK83g8I0YUxUowGNwmMebhdru/yrI8YOhhZ3ief+z3+yeBQAD74fV6J9TaUxpckcnlcidoGDGWZZ9Tpm8+n29KYA8Knjqdzi/UzRMSVCmeZajXozT/UzSZVcp0dXl5+ZXD4fhst9u3bTbbR5fL9YJ2c92qYAnIdkuHaNh2s4lmrYYWYW4YMNvtgw1bL5Vgrq3hYiSKy6KIS5IIs6TBaDRmG7ak69igjQ84DnfOreIeLXOT53FFFFBb12cbNpNMwqQF3o3F8FBV/zLkWBhaEYVZho1LMprBEO7T+Yha3GOTW0FrXQMln2HYmIhqgMNtas2qYAkeyDJucT5UCzkr+H/DEpAFHgbL4kZIwJDEgxU/upk4EpTgAMPyiNCZVFQUs1lo6QwUSUI4HJ5vWEoCjqbIBbnf98MyrL60C6YGOtWmdTvcAAAAAElFTkSuQmCC';
  1478. c = ['#333','#ddd','#404040','#fff','#792c2c','#333','#101010','0 0 5px #202020','#333','0 0 10px #000',
  1479. '#ccc','#eee','0 0 4px #555','#000','#444','0 0 5px #888','#fff','#792c2c','0 0 12px #fff','#fff',
  1480. '#000','top,#aa4141,#5c2828','0 0 5px #aaa;','#555','#000','0 -2px 6px -3px #000','#fff','0 0 4px #000;','#ccc','#ddd',
  1481. 'none','#000','0 0 5px 1px #222','#444','#fff','#000','#333','0 0 8px #000','#ccc','#222',
  1482. '#111','#fff','0 0 4px #111','#333','#ddd','#111','#444','#3a3a3a','#111','none',
  1483. '#111','none','#111','none','#111','none','#444','#60cc60','#60cc60','0 0 5px #00aa1a',
  1484. '#d6c96a','#d6c96a','0 0 5px #7e7400','#e47070','#e47070','0 0 5px #aa0000','#c28ee6','#c28ee6','0 0 5px #9000ff','#000',
  1485. 'top,#303030,#302727','#000','top,#2a2a2a,#492c2c','#78bcfa','0 0 4px #000','#6dc97c','#ec6666','#f8b60d','0 0 5px #000','#ccc',
  1486. '#fff','0 0 6px #999','#aaa','#bbb','#dfa160','#ffb261','0 0 4px #9b5812','#000','#404040','0 0 6px #111',
  1487. '#eee','#000','0 0 3px #101010','0 0 5px #000','top,#303030,#444','#1a1a1a','#000','0 0 8px #fff','#ddd','#101010',
  1488. '0 0 3px #000','0 0 5px #202020','top,#3a3a3a,#555','#eee','#000','0 0 5px #000','0 0 10px #111','top,#303030,#404040','','',
  1489. '','top,#303030,#406785','','','','top,#303030,#306638','','','','top,#303030,#693434',
  1490. '','','','top,#303030,#887E35','#eaeaea','0 0 5px #000','#e0e0e0','#101010','0 0 5px #000','0 0 5px #202020',
  1491. 'top,#303030,#444','','','top,#2a2a2a,#222','#eee','#111','0 0 5px #000','0 0 4px #303030','top,#333,#555','0 0 6px #101010',
  1492. 'top,#2a2a2a,#404040','#eee','#1a1a1a','0 0 5px #000','0 0 5px #222','top,#333,#4a4a4a','0 0 6px #111','','top, #2a2a2a, #333','0 0 6px #111',
  1493. '','top,#2a2a2a,#426B44','0 0 6px #111','','top,#2a2a2a,#40668d','0 0 6px #111','','top,#2a2a2a,#612525','#e0e0e0','#101010',
  1494. '0 0 5px #000','0 0 8px #101010','top,#303030,#723434','top,#202020,#4d2424','#eee','0 0 4px #000','#e0e0e0','#888','top,#444,#555','#eee',
  1495. '#000','0 0 5px #000','0 0 6px #111','left,#303030,#303030','','#aaa','#000','0 0 5px #000','top,#444,#444','#606060',
  1496. '#101010','#e5e5e5','#f5f5f5','0 0 6px #c0c0c0','#eee','#d83737','0 0 3px #000','top,#404040,#556d52','top,#404040,#746c56','top,#404040,#664040',
  1497. 'top,#404040,#604c70','#00bb00','#dbb32e','#d13c3c','#d16ad1','#eee','0 0 6px #000','#101010','0 0 5px #000','top,#2a2a2a,#3a3a3a',
  1498. '#555','#e0e0e0','0 0 5px #000','#f0f0f0','0 0 8px #000','#e0e0e0','0 0 5px #000','#000','#3a3a3a','#303030',
  1499. '#000','#202020','','#552727','#686868','#303030','#c0c0c0','','#111','#222',
  1500. '#e0e0e0','#fff','0 0 6px #999'];
  1501. break;
  1502. default:
  1503. check = 'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAC4SURBVDhPnZNRCsQgDAW9pPfxuCKICCIiyC62RPIksnEDU2zMlH7kGefc5xYzax5uas5ba19xjKEGxN67GhBba2pArLWqAbGUogbEnLMaEFNKakCMMaoBMYSgBkTvvRoQb3nEv0v64i/Wr94UiFIKToAopYDDZ0CUUkDMez4DIt/8PQkE7y2Rbz6905nfU3+JfPN3eDJoZon79hO8z++XKCVg7xEgSik4AaKUghMg3vKI83GLMcZ8AZMOnRQ6c3RxAAAAAElFTkSuQmCC';
  1504. radio = 'iVBORw0KGgoAAAANSUhEUgAAAA0AAAAaCAYAAABsONZfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAFpSURBVDhP1VJNi4IAEPV3durU1V/QJTAIT3WQopvRD4ggCTKrQ8d+gwkRlB+RKBHhW96sxUrrurdlBx7DvHnjqPOUr3E+nzGbzdDr9dBsNiWzJp9LirFYLNDpdLDdbnE6ncBgZk2e/Vz6GavVCsPhEEmSIMuyN5BnnzoZCIIA7XYbURTh8XiUgn3qqFcsy8Jms8H9fq8EddQr3W4Xh8MBt9utEtRRr2iahjAM5b2rQB31smm/3yOO40pQJ5t4h+VyicvlUgnqqJeDcqXnebK+DOxT9zo0/3+/38fxeITv+28gz/7rTs+Yz+fQdV1ewXVdcQMza/Ls59Ji8ImTyURsQ+8xsyafS97jnxh2vV5jPB5LrjQs/dVqtVCr1VCv1yWzJl9qWMdx0Gg0oKrqC6xt2y43rGmahYEnRqNRuWG5/rsh8qWGZcMwjMLAYDAQ/kfD8oN3ux2m06lk1r8y7PV6RZqmkv/SsIryAXc40Mw81bSxAAAAAElFTkSuQmCC';
  1505. c = ['#404040','#303030','#e0e0e0','#000','#f0f0f0','#ccc','#6a6a6a','0 0 4px #707070','#ddd','0 0 5px #333',
  1506. '#666','#222','0 0 3px #ccc','#aaa','#e6e6e6','0 0 5px #888','#000','#f5f5f5','0 0 5px #999','#000',
  1507. '#888','top,#fff,#ddd','0 0 5px #555;','#f6f6f6','#888','0 -2px 6px -4px #444','#222','','#777','#888',
  1508. 'underline','#888','0 0 6px #999','#fff','#000','#777','#fff','0 0 8px #999','#4b4b4b','#f0f0f0',
  1509. '#bbb','#333','0 0 4px #ddd','#fff','#222','#d0d0d0','#fff','#f7f7f7','#8ab389','top,#cbe7c4,#f3faf2',
  1510. '#adad68','top,#f7f0c8,#fcfbf8','#b18780','top,#f3d7d1,#FCF7F7','#a99abb','top,#ddd4e2,#f4f0f7','#fff','','','0 0 5px #aaa',
  1511. '','','0 0 5px #aaa','','','0 0 5px #aaa','','','0 0 5px #aaa','#c0c0c0',
  1512. 'top,#f0f0f0,#fff','#a1b4be','top,#dce8f1,#eff4f7','#276594','none','#267422','#973131','#085088','none','#444',
  1513. '#000','0 0 6px #888','#666','#666','#946a3d','#946a3d','0 0 4px #f5Cc68Aa','#777','#eee','0 0 7px #777',
  1514. '#000','#606060','0 0 3px #707070','0 0 4px #ccc','top,#fff,#ddd','#808080','#707070','0 0 4px #909090','#111','#707070',
  1515. '0 0 5px #aaa','0 0 5px #808080','top,#f5f5f5,#dadada','#fff','#444','0 0 10px #eee','0 0 7px #222','top,#999,#555','#000','0 0 10px #fff',
  1516. '0 0 7px #1c3a61','top,#dcf0fd,#6794b2','#000','0 0 10px #fff','0 0 7px #3d6425','top,#effde5,#618d4f','#000','0 0 10px #fff','0 0 7px #412222','top,#ffefef,#aa5858',
  1517. '#000','0 0 10px #fff','0 0 7px #807823','top,#fffbe0,#c9b41d','#101010','0 0 8px #fff','#333','#707070','0 0 6px #999','0 0 5px #808080',
  1518. 'top,#f5f5f5,#dadada','','','top,#f5f5f5,#fff','#222','#999','0 0 4px #ccc','0 0 4px #ccc','top,#ccc,#eee','0 0 4px #bbb',
  1519. 'top,#ccc,#ddd','#444','#aaa','','0 0 3px #ddd','top, #eee, #fff','0 0 5px #bbb','0 0 3px #bbb','top,#fff,#ccc','0 0 5px #a7ca9c',
  1520. '0 0 3px #bbb','top, #fff, #b9daaf','0 0 5px #a9d3ff','0 0 3px #bbb','top, #fff, #a4c8ee','0 0 5px #ffbaba','0 0 3px #bbb','top,#fff,#f0a4a4','#222','#aaa',
  1521. '','0 0 4px -1px #aaa','top,#fff,#d1dfee','top, #dfe8f1,#fff','#333','','#bbb','#ccc','top,#eee,#fff','#444',
  1522. '#aaa','1px 1px 2px #ddd','0 0 4px #ccc','left,#fff,#eee','0 0 3px #ddd','#aaa','#aaa','0 0 3px #ccc','top,#f5f5f5,#f6f6f6','#fff',
  1523. '#e0e0e0','#111','#111','0 0 8px #777','#000','#bd0000','0 0 2px #ff8e8e','top,#d8ecd3,#f5f5f5','top,#faf4d2,#f5f5f5','top,#fae4df,#f5f5f5',
  1524. 'top,#e9dcf3,#f5f5f5','#00bb00','#dbb32e','#d13c3c','#d16ad1','#000','0 0 6px #808080','#808080','0 0 5px #aaa','top,#d0d0d0,#f0f0f0',
  1525. '#ccc','#222','','','0 0 4px #ccc','','','#bbb','#fff','',
  1526. '#bbb','#efefef','#fafafa','#eff4f9','#5f9ea0','#eff4f9','#606060','none','#202020','#ddd',
  1527. '#e0e0e0','#fff','0 0 6px #999'];
  1528. break;
  1529. }
  1530.  
  1531. SRDotDX.gui.cHTML('#DotDX_themeClass').html('\
  1532. #maingame, #quicklinks li, div.game_page_wrap, div#kong_game_ui, #kong_game_ui .tabpane {background-color:'+c[0]+' !important;}\
  1533. #kong_game_ui ul.main_tabs li.tab a {color:'+c[1]+'; background-color:'+c[2]+'; border-color:'+c[95]+';}\
  1534. #kong_game_ui ul.main_tabs li.tab a.active {color:'+c[3]+'; background-color:'+c[4]+'; border-color:'+c[96]+'; text-shadow:'+c[97]+';}\
  1535. #kong_game_ui div#chat_tab_pane, div#dotdx_sidebar_container, #kong_game_ui div#lots_tab_pane, #kong_game_ui ul.main_tabs {background-color:'+c[5]+' !important;}\
  1536. #kong_game_ui div#chat_window, #kong_game_ui div#lots_tab_pane div#dotdx_shadow_wrapper {border-color:'+c[6]+'; box-shadow:'+c[7]+';}\
  1537. #kong_game_ui div#chat_window_header, #kong_game_ui div#lots_tab_pane div#dotdx_shadow_wrapper {background-color:'+c[8]+';}\
  1538. #kong_game_ui div#chat_window_header {box-shadow:'+c[9]+';}\
  1539. #kong_game_ui div#chat_window_header div.dotdx_chat_overlay {border-color:'+c[175]+';}\
  1540. #kong_game_ui div#chat_window_header div.room_name_container, #kong_game_ui div#dotdx_status_div, #kong_game_ui .panel_handle a, #kong_game_ui #accomplishments_pane_title {color:'+c[10]+';}\
  1541. #kong_game_ui div#chat_window_header div.room_name_container .room_name, #kong_game_ui div#chat_window_header div.dotdx_chat_overlay > span, #kong_game_ui div#dotdx_status_div span, #kong_game_ui div#chat_room_tabs div a, #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head {color:'+c[11]+'; text-shadow:'+c[12]+';}\
  1542. #kong_game_ui div#chat_window_header div.room_name_container, #kong_game_ui div#chat_room_tabs div a, #kong_game_ui div#dotdx_status_div, #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head {border-color:'+c[13]+'; background-color:'+c[14]+';}\
  1543. #kong_game_ui div#chat_room_tabs div a:hover, #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head:hover {text-shadow:'+c[15]+'}\
  1544. #kong_game_ui div#chat_room_tabs div.active a, #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_head {color:'+c[16]+'; background-color:'+c[17]+'; text-shadow:'+c[18]+';}\
  1545. #kong_game_ui div.chat_actions_container span.btn {color:'+c[19]+' !important; border-color:'+c[20]+'; background:-webkit-linear-gradient('+c[21]+'); background:-moz-linear-gradient('+c[21]+');}\
  1546. #kong_game_ui div.chat_actions_container span.kong_ico.btn_target:active {text-shadow:'+c[22]+';}\
  1547. #kong_game_ui div#chat_rooms_container div.chat_tabpane.users_in_room, #kong_game_ui div#lots_tab_pane ul li.tab div.tab_pane { background-color:'+c[23]+'; border-color:'+c[24]+';}\
  1548. #kong_game_ui div#chat_rooms_container div.chat_tabpane.users_in_room { box-shadow: inset '+c[25]+';}\
  1549. #kong_game_ui .user_row .username, #kong_game_ui div#lots_tab_pane ul { color:'+c[26]+'; text-shadow:'+c[27]+';}\
  1550. #kong_game_ui .user_row.away .username {color:'+c[28]+';}\
  1551. #kong_game_ui .user_row .guild-name {color:'+c[29]+';}\
  1552. #kong_game_ui .user_row .username {text-decoration:'+c[30]+';}\
  1553. #kong_game_ui div.chat_controls {border-color:'+c[31]+'; box-shadow:'+c[32]+';}\
  1554. #kong_game_ui div.chat_controls, #kong_game_ui textarea.chat_input {background-color:'+c[33]+';}\
  1555. #kong_game_ui textarea.chat_input {color:'+c[34]+';}\
  1556. #kong_game_ui div.chat_actions_container ul.chat_actions_list {border-color:'+c[35]+'; background-color:'+c[36]+'; box-shadow:'+c[37]+';}\
  1557. #kong_game_ui div.chat_actions_container ul.chat_actions_list li {border-color:'+c[36]+'; color:'+c[38]+';}\
  1558. #kong_game_ui div.chat_actions_container ul.chat_actions_list li:hover {background-color:'+c[39]+'; border-color:'+c[40]+'; color:'+c[41]+'; box-shadow:'+c[42]+';}\
  1559. #kong_game_ui div.chat_message_window {background-color:'+c[43]+'; color:'+c[44]+';}\
  1560. #kong_game_ui div.chat_message_window p {border-bottom-color:'+c[45]+'; border-top-color:'+c[46]+';}\
  1561. #kong_game_ui div.chat_message_window p.even {background-color:'+c[47]+';}\
  1562. #kong_game_ui div.chat_message_window p.SRDotDX_raid, #kong_game_ui div.chat_message_window p.whisper, #kong_game_ui div.chat_message_window p.script {border-top-color:'+c[56]+';}\
  1563. #kong_game_ui div.chat_message_window p.DotDX_diff_1 {border-bottom-color:'+c[48]+'; background: -webkit-linear-gradient('+c[49]+'); background: -moz-linear-gradient('+c[49]+');} \
  1564. #kong_game_ui div.chat_message_window p.DotDX_diff_2 {border-bottom-color:'+c[50]+'; background: -webkit-linear-gradient('+c[51]+'); background: -moz-linear-gradient('+c[51]+');} \
  1565. #kong_game_ui div.chat_message_window p.DotDX_diff_3 {border-bottom-color:'+c[52]+'; background: -webkit-linear-gradient('+c[53]+'); background: -moz-linear-gradient('+c[53]+');} \
  1566. #kong_game_ui div.chat_message_window p.DotDX_diff_4 {border-bottom-color:'+c[54]+'; background: -webkit-linear-gradient('+c[55]+'); background: -moz-linear-gradient('+c[55]+');} \
  1567. #kong_game_ui div.chat_message_window p span.message a {color:'+c[79]+'}\
  1568. #kong_game_ui div.chat_message_window p span.message a:hover {color:'+c[80]+'; text-shadow:'+c[81]+';}\
  1569. #kong_game_ui div.chat_message_window p.DotDX_diff_1 span.message a {color:'+c[57]+'; text-shadow:'+c[74]+';}\
  1570. #kong_game_ui div.chat_message_window p.DotDX_diff_1 span.message a:hover {color:'+c[58]+'; text-shadow:'+c[59]+';}\
  1571. #kong_game_ui div.chat_message_window p.DotDX_diff_2 span.message a {color:'+c[60]+'; text-shadow:'+c[74]+';}\
  1572. #kong_game_ui div.chat_message_window p.DotDX_diff_2 span.message a:hover {color:'+c[61]+'; text-shadow:'+c[62]+';}\
  1573. #kong_game_ui div.chat_message_window p.DotDX_diff_3 span.message a {color:'+c[63]+'; text-shadow:'+c[74]+';}\
  1574. #kong_game_ui div.chat_message_window p.DotDX_diff_3 span.message a:hover {color:'+c[64]+'; text-shadow:'+c[65]+';}\
  1575. #kong_game_ui div.chat_message_window p.DotDX_diff_4 span.message a {color:'+c[66]+'; text-shadow:'+c[74]+';}\
  1576. #kong_game_ui div.chat_message_window p.DotDX_diff_4 span.message a:hover {color:'+c[67]+'; text-shadow:'+c[68]+';}\
  1577. #kong_game_ui div.chat_message_window p.script {border-bottom-color:'+c[69]+'; background: -webkit-linear-gradient('+c[70]+'); background: -moz-linear-gradient('+c[70]+');}\
  1578. #kong_game_ui div.chat_message_window p.whisper {border-bottom-color:'+c[71]+'; background: -webkit-linear-gradient('+c[72]+'); background: -moz-linear-gradient('+c[72]+'); }\
  1579. #kong_game_ui div.chat_message_window p span.username {color:'+c[73]+'; text-shadow:'+c[74]+';}\
  1580. #kong_game_ui div.chat_message_window p span.username.ign {color:'+c[75]+';}\
  1581. #kong_game_ui div.chat_message_window p.sent_whisper span.username, #kong_game_ui div.chat_message_window p span.username.is_self {color:'+c[76]+';}\
  1582. #kong_game_ui div.chat_message_window p.emote {color:'+c[77]+'; text-shadow:'+c[78]+';}\
  1583. #kong_game_ui div.chat_message_window p span.room {color:'+c[82]+';}\
  1584. #kong_game_ui div.chat_message_window p span.timestamp {color:'+c[83]+';}\
  1585. #kong_game_ui div.chat_message_window p span.message a.reply_link {color:'+c[79]+'}\
  1586. #kong_game_ui div.chat_message_window p span.message a.reply_link:hover {color:'+c[80]+'; text-shadow:'+c[81]+';}\
  1587. #kong_game_ui div.chat_message_window p span.message a.chat_link {color:'+c[84]+';}\
  1588. #kong_game_ui div.chat_message_window p span.message a.chat_link:hover {color:'+c[85]+'; text-shadow:'+c[86]+';}\
  1589. #kong_game_ui div.chat_message_window p > span.slider {border-color:'+c[87]+'; background:'+c[88]+'; box-shadow:'+c[89]+';}\
  1590. #kong_game_ui div#chat_raids_overlay {color:'+c[90]+'; border-color:'+c[91]+'; box-shadow:'+c[92]+'; text-shadow:'+c[93]+'; background: -webkit-linear-gradient('+c[94]+'); background: -moz-linear-gradient('+c[94]+');}\
  1591. div#dotdx_sidebar_container > button {color:'+c[98]+'; border-color:'+c[99]+'; text-shadow:'+c[100]+'; box-shadow:'+c[101]+'; background: -webkit-linear-gradient('+c[102]+'); background: -moz-linear-gradient('+c[102]+');}\
  1592. div#dotdx_sidebar_container > button:hover {color:'+c[103]+'; border-color:'+c[104]+'; text-shadow:'+c[105]+'; box-shadow:'+c[106]+'; background: -webkit-linear-gradient('+c[107]+'); background: -moz-linear-gradient('+c[107]+');}\
  1593. div#dotdx_sidebar_container > button.b:hover {color:'+c[108]+'; text-shadow:'+c[109]+'; box-shadow:'+c[110]+'; background: -webkit-linear-gradient('+c[111]+'); background: -moz-linear-gradient('+c[111]+');}\
  1594. div#dotdx_sidebar_container > button.g:hover {color:'+c[112]+'; text-shadow:'+c[113]+'; box-shadow:'+c[114]+'; background: -webkit-linear-gradient('+c[115]+'); background: -moz-linear-gradient('+c[115]+');}\
  1595. div#dotdx_sidebar_container > button.r:hover {color:'+c[116]+'; text-shadow:'+c[117]+'; box-shadow:'+c[118]+'; background: -webkit-linear-gradient('+c[119]+'); background: -moz-linear-gradient('+c[119]+');}\
  1596. div#dotdx_sidebar_container > button.y:hover {color:'+c[120]+'; text-shadow:'+c[121]+'; box-shadow:'+c[122]+'; background: -webkit-linear-gradient('+c[123]+'); background: -moz-linear-gradient('+c[123]+');}\
  1597. div#dotdx_sidebar_container > div.label {color:'+c[124]+'; text-shadow:'+c[125]+';}\
  1598. div#dotdx_sidebar_container > input[type=\"text\"] {color:'+c[126]+'; border-color:'+c[127]+'; text-shadow:'+c[128]+'; box-shadow:'+c[129]+'; background: -webkit-linear-gradient('+c[130]+'); background: -moz-linear-gradient('+c[130]+');}\
  1599. div#dotdx_sidebar_container > input[type=\"text\"]:hover, div#dotdx_sidebar_container > input[type=\"text\"]:focus {color:'+c[131]+'; border-color:'+c[132]+'; background: -webkit-linear-gradient('+c[133]+'); background: -moz-linear-gradient('+c[133]+');}\
  1600. #kong_game_ui div.tab_pane p.collapsingCategory {color:'+c[134]+'; border-color:'+c[135]+'; text-shadow:'+c[136]+'; box-shadow:'+c[137]+'; background: -webkit-linear-gradient('+c[138]+'); background: -moz-linear-gradient('+c[138]+');}\
  1601. #kong_game_ui div.tab_pane p.collapsingCategory:hover {box-shadow:'+c[139]+'; background: -webkit-linear-gradient('+c[140]+'); background: -moz-linear-gradient('+c[140]+');}\
  1602. #kong_game_ui div.tab_pane input[type=\"button\"] {color:'+c[141]+'; border-color:'+c[142]+'; text-shadow:'+c[143]+'; box-shadow:'+c[144]+'; background: -webkit-linear-gradient('+c[145]+'); background: -moz-linear-gradient('+c[145]+');} \
  1603. #kong_game_ui div.tab_pane input[type=\"button\"].generic:hover {box-shadow:'+c[146]+'; text-shadow:'+c[147]+'; background: -webkit-linear-gradient('+c[148]+'); background: -moz-linear-gradient('+c[148]+');}\
  1604. #kong_game_ui div.tab_pane input[type=\"button\"].green:hover, #kong_game_ui div.tab_pane input.landpmbuttonhigh {box-shadow:'+c[149]+'; text-shadow:'+c[150]+'; background: -webkit-linear-gradient('+c[151]+'); background: -moz-linear-gradient('+c[151]+');}\
  1605. #kong_game_ui div.tab_pane input[type=\"button\"].blue:hover {box-shadow:'+c[152]+'; text-shadow:'+c[153]+'; background: -webkit-linear-gradient('+c[154]+'); background: -moz-linear-gradient('+c[154]+');}\
  1606. #kong_game_ui div.tab_pane input[type=\"button\"].red:hover, #kong_game_ui div.tab_pane input[type=\"button\"][value=\"Cancel\"]:hover {box-shadow:'+c[155]+'; text-shadow:'+c[156]+'; background: -webkit-linear-gradient('+c[157]+'); background: -moz-linear-gradient('+c[157]+');}\
  1607. #kong_game_ui input#raidsBossFilter {color:'+c[158]+'; border-color:'+c[159]+'; text-shadow:'+c[160]+'; box-shadow:'+c[161]+'; background: -webkit-linear-gradient('+c[162]+'); background: -moz-linear-gradient('+c[162]+');}\
  1608. #kong_game_ui input#raidsBossFilter:hover, input#raidsBossFilter:focus {background: -webkit-linear-gradient('+c[163]+'); background: -moz-linear-gradient('+c[163]+');}\
  1609. ul#SRDotDX_tabpane_tabs input[type="text"].generic {color:'+c[164]+'; text-shadow:'+c[165]+'; border-bottom-color:'+c[166]+';}\
  1610. ul#SRDotDX_tabpane_tabs input[type="text"].generic:focus {border-color:'+c[167]+'; background: -webkit-linear-gradient('+c[168]+'); background: -moz-linear-gradient('+c[168]+');}\
  1611. textarea#DotDX_raidsToSpam, textarea#options_sbConfig {color:'+c[169]+'; border-color:'+c[170]+'; text-shadow:'+c[171]+'; box-shadow:'+c[172]+'; background: -webkit-linear-gradient('+c[173]+'); background: -moz-linear-gradient('+c[173]+');}\
  1612. #kong_game_ui span.notice {text-shadow:'+c[174]+';}\
  1613. #kong_game_ui ul#SRDotDX_tabpane_tabs input[type="checkbox"] + label:before {background: url(data:image/png;base64,'+check+') 0 0 no-repeat}\
  1614. #kong_game_ui ul#SRDotDX_tabpane_tabs input[type="checkbox"]:checked + label:before {background: url(data:image/png;base64,'+check+') 0 -14px no-repeat}\
  1615. #kong_game_ui ul#SRDotDX_tabpane_tabs input[type="radio"] + label:before {background: url(data:image/png;base64,'+radio+') 0 0 no-repeat}\
  1616. #kong_game_ui ul#SRDotDX_tabpane_tabs input[type="radio"]:checked + label:before {background: url(data:image/png;base64,'+radio+') 0 -13px no-repeat}\
  1617. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list {border-top-color:'+c[176]+'; box-shadow:'+c[177]+'; background: -webkit-linear-gradient('+c[178]+'); background: -moz-linear-gradient('+c[178]+');}\
  1618. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list .raid_list_item {border-top-color:'+c[179]+'; border-bottom-color:'+c[180]+';}\
  1619. a.DotDX_RaidLink {color:'+c[181]+';}\
  1620. a.DotDX_RaidLink:hover {color:'+c[182]+'; text-shadow:'+c[183]+';}\
  1621. a.dotdxRaidListDelete {color:'+c[184]+';}\
  1622. a.dotdxRaidListDelete:hover {color:'+c[185]+'; text-shadow:'+c[186]+';}\
  1623. #raid_list .raid_list_item.DotDX_N:hover {background: -webkit-linear-gradient('+c[187]+'); background: -moz-linear-gradient('+c[187]+');}\
  1624. #raid_list .raid_list_item.DotDX_H:hover {background: -webkit-linear-gradient('+c[188]+'); background: -moz-linear-gradient('+c[188]+');}\
  1625. #raid_list .raid_list_item.DotDX_L:hover {background: -webkit-linear-gradient('+c[189]+'); background: -moz-linear-gradient('+c[189]+');}\
  1626. #raid_list .raid_list_item.DotDX_NM:hover {background: -webkit-linear-gradient('+c[190]+'); background: -moz-linear-gradient('+c[190]+');}\
  1627. span.DotDX_List_diff.DotDX_N {color:'+c[191]+';}\
  1628. span.DotDX_List_diff.DotDX_H {color:'+c[192]+';}\
  1629. span.DotDX_List_diff.DotDX_L {color:'+c[193]+';}\
  1630. span.DotDX_List_diff.DotDX_NM {color:'+c[194]+';}\
  1631. #kong_game_ui div#helpBox { color:'+c[195]+'; box-shadow:'+c[196]+'; border-top-color:'+c[197]+'; text-shadow:'+c[198]+'; background: -webkit-linear-gradient('+c[199]+'); background: -moz-linear-gradient('+c[199]+');}\
  1632. #kong_game_ui div.chat_message_window p.script hr {background:'+c[200]+';}\
  1633. #kong_game_ui div.chat_message_window p.script span .title {color:'+c[201]+'; text-shadow:'+c[202]+';}\
  1634. #kong_game_ui div.chat_message_window p.script span .title:hover {color:'+c[203]+'; text-shadow:'+c[204]+';}\
  1635. table.raids, table.camps {color:'+c[205]+'; text-shadow:'+c[206]+';} \
  1636. table.raids td, table.camps td {border-color:'+c[207]+'; background:'+c[208]+';}\
  1637. table.raids td.ep, table.camps td.ep {background:'+c[209]+';} \
  1638. table.raids th, table.camps th {border-color:'+c[210]+'; background-color:'+c[211]+';} \
  1639. table.raids tr.head, table.camps tr.head {background:'+c[212]+';} \
  1640. table.raids tr.best td {background:'+c[213]+';} \
  1641. table.raids colgroup col.selected {border-color:'+c[214]+';}\
  1642. table.camps td.mark {background:'+c[215]+';} \
  1643. div.raid_list_item > span.DotDX_extInfo {color:'+c[216]+'; text-shadow:'+c[217]+';}\
  1644. #maingame, div.game_page_wrap {border-color:'+c[218]+';}\
  1645. body {background-color:'+c[219]+' !important}\
  1646. #quicklinks li a, #quicklinks li.rate {color:'+c[220]+'}\
  1647. #quicklinks li a:hover {color:'+c[221]+'; text-shadow:'+c[222]+';}\
  1648. ',true);
  1649. /*
  1650.  
  1651. */
  1652. },
  1653. toggleFiltering: function() {
  1654. var query = '.DotDX_filter_dummy_0 ', i = 0, frcId = '.DotDX_fltChat_', raidId;
  1655. var fltLen = Object.keys(SRDotDX.config.filters).length;
  1656. if ((fltLen != SRDotDX.raidArray.length) || typeof SRDotDX.config.filters['serpina.jpg'] == 'object'
  1657. || typeof SRDotDX.config.filters['adastros'] == 'object'
  1658. || typeof SRDotDX.config.filters['gataalli'] == 'object') {
  1659. while (i < SRDotDX.raidArray.length) {
  1660. raidId = SRDotDX.raidArray[i];
  1661. if(typeof SRDotDX.config.filters[raidId] == 'undefined') SRDotDX.config.filters[raidId] = [false, false, false, false];
  1662. i++
  1663. }
  1664. for (i in SRDotDX.config.filters) if (SRDotDX.raidArray.indexOf(i) < 0) delete SRDotDX.config.filters[i];
  1665. console.log('[DotDX] Filters array has been altered!');
  1666. }
  1667. if (SRDotDX.config.filterChatLinks) {
  1668. i = 0;
  1669. while (i < SRDotDX.raidArray.length) {
  1670. raidId = SRDotDX.raidArray[i];
  1671. if (SRDotDX.config.filters[raidId][0]) query = frcId + raidId + '_0, ' + query;
  1672. if (SRDotDX.config.filters[raidId][1]) query = frcId + raidId + '_1, ' + query;
  1673. if (SRDotDX.config.filters[raidId][2]) query = frcId + raidId + '_2, ' + query;
  1674. if (SRDotDX.config.filters[raidId][3]) query = frcId + raidId + '_3, ' + query;
  1675. i++
  1676. }
  1677. }
  1678. if (SRDotDX.config.filterRaidList) {
  1679. i = 0; frcId = '.DotDX_fltList_';
  1680. while (i < SRDotDX.raidArray.length) {
  1681. raidId = SRDotDX.raidArray[i];
  1682. if (SRDotDX.config.filters[raidId][0]) query = frcId + raidId + '_0, ' + query;
  1683. if (SRDotDX.config.filters[raidId][1]) query = frcId + raidId + '_1, ' + query;
  1684. if (SRDotDX.config.filters[raidId][2]) query = frcId + raidId + '_2, ' + query;
  1685. if (SRDotDX.config.filters[raidId][3]) query = frcId + raidId + '_3, ' + query;
  1686. i++
  1687. }
  1688. }
  1689. //if (SRDotDX.config.hideVisitedRaidsInRaidList) query = '.DotDX_visitedRaidList, ' + query;
  1690. SRDotDX.gui.cHTML('#DotDX_filters').html(query + '{display: none !important}',true);
  1691. },
  1692. load: function () {
  1693. if (typeof holodeck._tabs.addTab == 'function' && document.getElementById('chat_rooms_container') != null) {
  1694. console.log("{!} After GUI load func");
  1695. SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'SRDotDX_botClass'}).text('.bot{display:'+(SRDotDX.config.hideBotLinks ? 'none !important':'block')+'}').attach('to',document.head);
  1696. SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'SRDotDX_raidClass'}).text('.SRDotDX_raid{display:'+(SRDotDX.config.hideRaidLinks ? 'none !important':'block')+'}').attach('to',document.head);
  1697. SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'SRDotDX_visitedRaidClass'}).text('.DotDX_visitedRaid{display: '+(SRDotDX.config.hideVisitedRaids ? 'none !important':'block')+'}').attach('to',document.head);
  1698. //SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'SRDotDX_visitedRaidListClass'}).text('.DotDX_visitedRaidList {display: '+(SRDotDX.config.hideVisitedRaidsInRaidList == true?'none !important':'block')+'}').attach('to',document.head);
  1699. SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'DotDX_forum'}).text('div.game_page_wrap {padding-top: 16px; margin-top: 14px !important; background: #333 !important; display: ' + (SRDotDX.config.hideKongForum ? 'none' : 'block') + '}').attach('to',document.head);
  1700. SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'DotDX_details'}).text('div.game_details_outer {margin-top: 14px !important; width: 900px !important; border: solid 20px #333 !important; display: ' + (SRDotDX.config.hideGameDetails ? 'none' : 'block') + '}').attach('to',document.head);
  1701. SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'DotDX_filters'}).text('.DotDX_filter_dummy_0 {display: none !important}').attach('to',document.head);
  1702. SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'DotDX_chatResizeElems'}).text('#kong_game_ui textarea.chat_input { width: 270px !important; }\
  1703. #kong_game_ui div#chat_raids_overlay { width: 292px }\
  1704. #kong_game_ui div#chat_raids_overlay > span { width: 282px }\
  1705. div#dotdx_sidebar_container { ' + (SRDotDX.config.sbRightSide?"text-align: left; padding-left: 1px":"text-align: left; margin-left: 2px; padding-left: 6px") + ' }').attach('to',document.head);
  1706.  
  1707. SRDotDX.gui.toggleFiltering();
  1708.  
  1709. var elemPositionFix = "";
  1710. if(SRDotDX.isFirefox) {
  1711. elemPositionFix = " \
  1712. #kong_game_ui div#chat_room_tabs div a {padding: 3px 9px 4px 7px}\
  1713. #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head {padding: 2px 7px 3px}\
  1714. a.dotdxRaidListDelete {padding-top: 3px}\
  1715. #kong_game_ui span.generic {margin: 2px 6px 0}\
  1716. #kong_game_ui div#dotdx_status_div {padding: 5px 6px}\
  1717. #kong_game_ui div#chat_window_header div.dotdx_chat_overlay {margin-top: 4px; padding-top: 3px;}\
  1718. #kong_game_ui div#chat_raids_overlay {padding: 4px 0}\
  1719. #kong_game_ui div.chat_message_window p span.timestamp, #kong_game_ui div.chat_message_window p span.room {vertical-align: baseline}\
  1720. #kong_game_ui div.chat_message_window p {padding: 2px 5px 3px}\
  1721. ";
  1722. }
  1723. else {
  1724. elemPositionFix = " \
  1725. #kong_game_ui div#chat_room_tabs div a {padding: 4px 9px 3px 7px}\
  1726. #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head {padding: 3px 7px 2px}\
  1727. a.dotdxRaidListDelete {padding-top: 2px}\
  1728. #kong_game_ui span.generic {margin: 3px 6px 0}\
  1729. #kong_game_ui div#dotdx_status_div {padding: 6px 6px 4px}\
  1730. #kong_game_ui div#chat_window_header div.dotdx_chat_overlay {margin-top: 3px; padding-top: 4px;}\
  1731. #kong_game_ui div#chat_raids_overlay {padding: 5px 0 3px}\
  1732. #kong_game_ui div.chat_message_window p span.timestamp, #kong_game_ui div.chat_message_window p span.room {vertical-align: text-top}\
  1733. #kong_game_ui div.chat_message_window p {padding: 3px 5px}\
  1734. ";
  1735. }
  1736. SRDotDX.gui.cHTML('style').set({type: "text/css"}).text(" \
  1737. " + (SRDotDX.config.hideGameTitle ? "ul#gamepage_categories_list, .horizontal_ad, span#kong_game_bf_300x250_2_holder, div#gamespotlight, div#dealspot_banner_holder, div#kong_bumper_preroll_600x400-ad-slot, div#gamepage_header {display:none;} \
  1738. div.gamepage_header_outer, div.gamepage_header_inner, div.gamepage_header_outer h1 {height: 0 !important; padding: 0 !important; margin: 0 !important} \
  1739. #primarylayout .maincontent {padding: 6px 0 !important} \
  1740. " : "") + "div.raid_list_item.hidden, .DotDX_nukedRaid, div.game_page_admindev_controls, div#subwrap, li#quicklinks_facebook {display:none;} \
  1741. #primarywrap {background-image: none !important; background-color: transparent !important;} \
  1742. /* body {background-color: #" + SRDotDX.config.bckColor + " !important} */ \
  1743. #maingame { border: 1px solid transparent }\
  1744. div#game { overflow:hidden }\
  1745. div.upper_gamepage { background: transparent !important }\
  1746. #FPXtt { position:absolute; display:block; } \
  1747. #FPXtttop { display:block; height:5px; margin-left:5px; } \
  1748. #FPXttcont { display:block; padding:2px 12px 3px 7px; margin-left:5px; background:#666; color:#fff; } \
  1749. #FPXttbot {display:block;height:5px;margin-left:5px;} \
  1750. #kong_game_ui ul.main_tabs {height:30px; padding-left:7px}\
  1751. #kong_game_ui ul.main_tabs li.tab:first-child { margin-left: 1px; }\
  1752. #kong_game_ui ul.main_tabs li.tab a { padding: 6px 6px 4px; margin-top: 6px; border: 1px solid #000; margin-right: 3px; transition: all .3s;}\
  1753. #kong_game_ui ul.main_tabs li.tab a.active {margin-top: 5px; padding: 7px 6px 5px; border-radius: 5px 0 5px 0;}\
  1754. /*#kong_game_ui div#chat_tab_pane {height: 645px !important}*/ \
  1755. #kong_game_ui div#lots_tab_pane {padding: 8px; text-align: left; background-color: #777; height: 644px}\
  1756. #kong_game_ui div#lots_tab_pane div#dotdx_shadow_wrapper { width: 282px; border: 1px solid #222; box-shadow: 0 0 12px #111; height: 643px; overflow: hidden; background-color: #ddd;}\
  1757. #kong_game_ui div#chat_window { background-color: #fff; border: 1px solid #333; overflow: hidden; box-shadow: 0 0 8px 1px #333; }\
  1758. #kong_game_ui div#chat_window_header { height: 69px; box-shadow: 0 0 5px #333; position: relative; background-color: #ddd; }\
  1759. #kong_game_ui div#chat_window_header div.room_name_container { border-bottom: 1px solid #aaa; padding: 5px 7px 3px; margin: 0 !important; background-color: #e6e6e6; font-family: \"Trebuchet MS\", Helvetica, sans-serif }\
  1760. #kong_game_ui div#chat_window_header div.room_name_container .room_name { font-family: \"Trebuchet MS\", Helvetica, sans-serif; color: #333; text-shadow: 0 0 3px #ccc; }\
  1761. #kong_game_ui div.chat_actions_container span.kong_ico { font-size: 12px !important; }\
  1762. #kong_game_ui div.chat_actions_container ul.chat_actions_list { right: -1px; padding: 4px 0; border-radius: 5px 0 0 5px; top: 22px; border-color: #777; box-shadow: 0 0 8px #999; min-width: 122px; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; }\
  1763. #kong_game_ui div.chat_actions_container ul.chat_actions_list li { line-height: 20px; padding: 0 10px; border-width: 1px 0; border-color: #fff; border-style: solid; transition: box-shadow .5s;}\
  1764. #kong_game_ui .chat_actions_container .chat_actions_list li:hover { background-color: #f0f0f0; border-color: #bbb; color: #333; box-shadow: 0 0 4px #ddd; position: relative; }\
  1765. #kong_game_ui div.chat_actions_container span.btn_tools { height: 16px; line-height: initial !important; width: 20px; margin: 2px 3px; } \
  1766. #kong_game_ui div#chat_window_header div.dotdx_chat_overlay { border-top: 1px solid #bbb; overflow: hidden; white-space: nowrap; } \
  1767. #kong_game_ui div.chat_actions_container select { width: 92px; margin-top: 2px; font-family: \"Trebuchet MS\",Helvetica,sans-serif; font-style: italic; outline: none; background-color: #ddd; margin-right: 2px; } \
  1768. #kong_game_ui div#chat_room_tabs div a { margin: 0; background: none; text-decoration: none; font-family: \"Trebuchet MS\",Helvetica,sans-serif; font-size: 11px; font-style: italic; transition: text-shadow .2s; border-right: 1px dotted #aaa; } \
  1769. #kong_game_ui div#chat_rooms_container div.chat_tabpane.users_in_room { height: 89px; border: 1px solid #999; border-width: 1px 0; border-bottom-color: #888; box-shadow: inset 0 -2px 6px -4px #444; } \
  1770. #kong_game_ui div#chat_raids_overlay { display:none; position: absolute; overflow: hidden; bottom: 488px; left: 3px; background-color: #e0e0e0; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; border-width: 1px; border-style: solid; border-radius: 2px;}\
  1771. #kong_game_ui div#chat_raids_overlay.active { display: block } \
  1772. #kong_game_ui div#chat_raids_overlay > span { display: block; margin: 0 auto }\
  1773. #kong_game_ui div#lots_tab_pane ul { margin: 0px; padding: 0px; list-style-type: none; position: relative;} \
  1774. #kong_game_ui div#lots_tab_pane ul li.tab { float: left; height: 100%; } \
  1775. #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head { font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; font-style: italic; cursor: pointer; border-right: 1px dotted #aaa; transition: text-shadow .2s} \
  1776. #kong_game_ui div#lots_tab_pane ul li.tab div.tab_pane { display: none; border-top: 1px solid #888; width: 282px; height: 600px; padding-top: 2px;} \
  1777. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_head { cursor: default; }\
  1778. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane { position: absolute; display: block; left: 0px; }\
  1779. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list, \
  1780. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #paste_list {overflow-y: auto; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; height: 449px; border-top: 1px solid #aaa; box-shadow: 0 0 3px #ccc; background: -webkit-linear-gradient(left, #fff, #eee); background: -moz-linear-gradient(left, #fff, #eee);} \
  1781. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list .raid_list_item {cursor: pointer; position: relative; padding: 3px 2px 1px; border-width: 1px 0; border-style: solid; border-top-color: transparent; border-bottom-color: #ddd;} \
  1782. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list .raid_list_item.hidden {display:none;} \
  1783. a.FPXImportLink, a.FPXDeleteLink { font: normal 10px Arial; border: 1px solid #c0c0c0; color:black; text-decoration:none; cursor:pointer; font-variant: small-caps; display: block; width: 40px; text-align: center; margin-right: 2px; background-color: #fff} \
  1784. a.dotdxRaidListDelete { font: 10px \"Trebuchet MS\"; text-decoration: none; cursor: pointer; margin-right: 2px;} \
  1785. a.DotDX_RaidLink {text-decoration:none;} \
  1786. .raid_list_item a.DotDX_RaidLink {vertical-align: text-bottom;}\
  1787. div.DotDX_ListPanel {border-top: 1px dashed #999; margin-top: 2px; padding-top: 2px; }\
  1788. div.DotDX_ListPanel > span.raidListContent {font-style: italic} \
  1789. #kong_game_ui p.user_count.full { color: crimson; } \
  1790. #kong_game_ui div#lots_tab_pane a.pastebinlink {font: normal 11px Verdana; color:#333; text-decoration:none; cursor:pointer;} \
  1791. #kong_game_ui div#lots_tab_pane a.pastebinlink:hover { text-decoration: underline; color: black } \
  1792. #kong_game_ui div#lots_tab_pane span.pasteright, #kong_game_ui div#lots_tab_pane span.pasteleft {font: normal 11px Verdana; color: #333} \
  1793. #kong_game_ui div#lots_tab_pane span.pasteright {float:right; padding-right: 6px} \
  1794. #kong_game_ui div#lots_tab_pane span.pasteleft {float:left} \
  1795. #kong_game_ui div.chat_message_window { position: relative; margin: 0; } \
  1796. #kong_game_ui div.chat_message_window p {border-width: 1px 0; border-style: solid; margin: 0;} \
  1797. #kong_game_ui div.chat_message_window p.SRDotDX_raid, #kong_game_ui div.chat_message_window p.whisper, #kong_game_ui div.chat_message_window p.script { border-top-color: #e5e5e5; }\
  1798. #raid_list .raid_list_item.DotDX_N:hover {border-bottom-color: rgb(138, 179, 137); background: -webkit-linear-gradient(top,#CBE7C4,#F3FAF2); background: -moz-linear-gradient(top,#CBE7C4,#F3FAF2);} \
  1799. #raid_list .raid_list_item.DotDX_H:hover {border-bottom-color: rgb(173, 173, 104); background: -webkit-linear-gradient(top,#F7F0C8,#FCFBF8); background: -moz-linear-gradient(top,#F7F0C8,#FCFBF8);} \
  1800. #raid_list .raid_list_item.DotDX_L:hover {border-bottom-color: rgb(177, 135, 128); background: -webkit-linear-gradient(top,#F3D7D1,#FCF7F7); background: -moz-linear-gradient(top,#F3D7D1,#FCF7F7);} \
  1801. #raid_list .raid_list_item.DotDX_NM:hover {border-bottom-color: rgb(169, 154, 187); background: -webkit-linear-gradient(top,#DDD4E2,#F4F0F7); background: -moz-linear-gradient(top,#DDD4E2,#F4F0F7);} \
  1802. #kong_game_ui div.chat_message_window p.whisper {margin:0; border-bottom-color: #A1B4BE; background: -webkit-linear-gradient(top,#DCE8F1,#EFF4F7); background: -moz-linear-gradient(top,#DCE8F1,#EFF4F7); } \
  1803. #kong_game_ui div.chat_message_window p.script {border-bottom-color: rgb(165, 165, 165); background: -webkit-linear-gradient(left,#f3f3f3,#fff); background: -moz-linear-gradient(left,#f3f3f3,#fff);} \
  1804. #kong_game_ui div.chat_message_window p.script hr { height: 1px; border: 0; background: #ccc; margin: 4px 0 3px; }\
  1805. #kong_game_ui div.chat_message_window p.script span { font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px} \
  1806. #kong_game_ui div.chat_message_window p.script span .title { text-decoration: none; font-size: 12px; font-weight: bold; color: #222 } \
  1807. #kong_game_ui div.chat_message_window p span.separator { margin-right: 0px; display:inline; float: none} \
  1808. #kong_game_ui div.chat_message_window p span.username { color: rgb(39, 101, 148); text-decoration: none; cursor: pointer; display:inline; float: none } \
  1809. #kong_game_ui div.chat_message_window p span.username.ign { color: rgb(38, 116, 34); }\
  1810. #kong_game_ui div.chat_message_window p span.username.is_self { color: rgb(151, 49, 49); }\
  1811. #kong_game_ui div.chat_message_window p span.username:hover { text-decoration: underline } \
  1812. #kong_game_ui div.chat_message_window p span.timestamp {font-style: italic; font-size: 9px; color: #666;} \
  1813. #kong_game_ui div.chat_message_window p span.message {line-height: 16px; word-wrap: break-word; display:inline; float: none} \
  1814. #kong_game_ui div.chat_message_window p span.message a { text-decoration: none; color: #444; font-style: normal } \
  1815. #kong_game_ui div.chat_message_window p span.message a:hover { color: #000; text-shadow: 0 0 6px #888; } \
  1816. #kong_game_ui div.chat_message_window p span.message a.chat_link:hover { text-shadow: 0 0 4px #F5C68A; text-decoration: none; } \
  1817. #kong_game_ui div.chat_message_window p span.message a.chat_link { color: #946A3D; } \
  1818. #kong_game_ui div.chat_message_window p span.message a.reply_link {font-style: italic} \
  1819. #kong_game_ui div.chat_message_window p > span.slider {position: absolute; display: inline-block; border: 1px solid #777; border-left: 0; height: 24px; left: -2px; margin-top: -5px; border-radius: 0 5px 5px 0; background: #eee; box-shadow: 0 0 7px #777; transition: max-width .3s; overflow: hidden; white-space: nowrap;}\
  1820. #kong_game_ui div.chat_message_window p > span.slider > span.magic, div.raid_list_item span.DotDX_extMagics > span {background-image: url(data:image/png;base64,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); background-position-y: 0; width: 16px; display: inline-block; height: 16px; margin-right: 2px; margin-top: 4px }\
  1821. div.raid_list_item span.DotDX_extMagics > span {margin-top: 0; vertical-align: text-top; margin-right: 1px; } \
  1822. div.raid_list_item span.DotDX_extMagics {float:right}\
  1823. #kong_game_ui div.chat_message_window p > span.slider > span.magic:first-child { margin-left: 5px; } \
  1824. #kong_game_ui div.chat_message_window p > span.slider > span.magic:last-child { margin-right: 5px; } \
  1825. #kong_game_ui div.chat_message_window p > span.slider > span.user { display: inline-block; height: 16px; margin-left: 5px; margin-top: 4px; vertical-align: text-top; font-style: italic; cursor: pointer}\
  1826. #kong_game_ui div.chat_message_window p > span.slider > span.user:first-child { text-overflow: ellipsis; max-width: 80px; white-space: nowrap; overflow: hidden; padding: 0 3px; font-style: normal; }\
  1827. #kong_game_ui div.chat_message_window p > span.slider > span.user:last-child { margin-right: 10px; } \
  1828. #kong_game_ui div.chat_message_window p > span.slider > span.user:hover { text-shadow: 0 0 6px #888; } \
  1829. #kong_game_ui div.chat_message_window p.emote {font-style: italic; color: #085088; text-align: center;} \
  1830. #kong_game_ui div.chat_message_window p.emote span.username, #kong_game_ui div.chat_message_window p.emote span.separator { display: none; } \
  1831. #kong_game_ui div.chat_message_window p span.room { color: #666; font-size: 9px;} \
  1832. #kong_game_ui div.chat_message_window div.error_msg { background-color: #FFF8E0; margin: 0; padding: 3px 5px; border-bottom: 1px solid #ddd; font-size: 9px; color: #555; } \
  1833. #kong_game_ui .chatOverlayMain {border-style: solid; border-color: #C2A71C; border-width: 1px 0; font-family: \"Trebuchet MS\", Helvetica, sans-serif; color: #fff; font-size: 11px; font-weight: normal; text-align: right} \
  1834. #kong_game_ui .chatOverlayMain > span {padding: 3px 10px; cursor: pointer;} \
  1835. #kong_game_ui .chatOverlayMain > span:hover {background-color: #C2A71C; font-style: italic; color: #555}\
  1836. #kong_game_ui textarea.chat_input { height: 30px !important; margin: 0 !important; outline: none; padding: 4px 6px 4px } \
  1837. " + (SRDotDX.config.cbDisable ? '#kong_game_ui div.chat_controls { box-shadow: 0 0 4px #666; position: relative; border-top: 1px solid #777 }' : '') + " \
  1838. #kong_game_ui div.dotdx_chat_buttons { position: relative; width: 100%; padding: " + (SRDotDX.isFirefox ? "0 0 1px":"1px 0 0") + "; background-color: #eaeaea; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; font-style: italic; color: #444; box-shadow: 0 0 6px -2px #333; border-width: 1px 0; border-style: solid; border-color: #888; background: -webkit-linear-gradient(top,#ddd,#f0f0f0); background: -moz-linear-gradient(top,#ddd,#f0f0f0);}\
  1839. #kong_game_ui div.dotdx_chat_buttons > span { display: inline-block; padding: 3px 7px; cursor: pointer; transition: text-shadow .2s; }\
  1840. #kong_game_ui input.dotdx_chat_filter { border: 1px solid #ccc; padding: 0 4px; display: inline-block; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; font-style: italic; color: #333; width: 110px; background-color: #f7f7f7; outline: none; }\
  1841. #kong_game_ui input.dotdx_chat_filter:focus { background-color: #fff }\
  1842. div.dotdx_chat_buttons > span.active { text-shadow: 0 0 4px #aaa }\
  1843. div.dotdx_chat_buttons > span:hover { text-shadow: 0 0 4px #888 }\
  1844. div.tab_pane p.collapsingCategory { border: 1px solid #999; border-width: 1px 0; margin: 5px 0 0; cursor: pointer; background-color: #ddd; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; padding: 2px 6px 1px; padding-right: 10px; box-shadow: 0 0 4px #ccc; background: -webkit-linear-gradient(top, #ccc, #eee); background: -moz-linear-gradient(top, #ccc, #eee); transition: all .3s; } \
  1845. div.tab_pane p.collapsingCategory:hover { background: -webkit-linear-gradient(top, #ccc, #ddd); background: -moz-linear-gradient(top, #ccc, #ddd); box-shadow: 0 0 4px #bbb;}\
  1846. div.tab_pane div.collapsingField { padding-top: 3px; }\
  1847. xxx {display:block !important}\
  1848. span.DotDX_RaidListVisited {padding: 0 3px; vertical-align: text-bottom} \
  1849. span.DotDX_List_diff {display: inline-block; width: 20px; font-weight: bold; padding-left: 2px; vertical-align: text-bottom} \
  1850. span.DotDX_List_diff.DotDX_N {color: #00BB00;} \
  1851. span.DotDX_List_diff.DotDX_H {color: #DDAA00;} \
  1852. span.DotDX_List_diff.DotDX_L {color: #FF0000;} \
  1853. span.DotDX_List_diff.DotDX_NM {color: #BB00BB;} \
  1854. div.tab_pane input, div.tab_pane select {border: 1px solid #ccc; padding: 1px} \
  1855. div.tab_pane input {height: 14px;} \
  1856. div.tab_pane select {height: 18px} \
  1857. div.tab_pane input[type=\"button\"] {height: 26px; padding: 0 3px; color: #444; border: 1px solid #bbb; background-color: #f7f7f7; outline: none; box-shadow: 0 0 3px #ddd; background: -webkit-linear-gradient(top, #eee, #fff); background: -moz-linear-gradient(top, #eee, #fff); font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; border-radius: 2px; transition: all .3s} \
  1858. div.tab_pane input[type=\"button\"].generic:hover {background: -webkit-linear-gradient(top, #fff, #ccc); background: -moz-linear-gradient(top, #fff, #ccc); box-shadow: 0 0 5px #bbb; text-shadow: 0 0 3px #bbb;}\
  1859. div.tab_pane input[type=\"button\"].green:hover {background: -webkit-linear-gradient(top, #fff, #b9daaf); background: -moz-linear-gradient(top, #fff, #b9daaf); box-shadow: 0 0 5px #a7ca9c; text-shadow: 0 0 3px #bbb;}\
  1860. div.tab_pane input[type=\"button\"].blue:hover {background: -webkit-linear-gradient(top, #fff, #a4c8ee); background: -moz-linear-gradient(top, #fff, #a4c8ee); box-shadow: 0 0 5px #a9d3ff; text-shadow: 0 0 3px #bbb;}\
  1861. div.tab_pane input[type=\"button\"].red:hover,\
  1862. div.tab_pane input[type=\"button\"][value=\"Cancel\"]:hover {background: -webkit-linear-gradient(top, #fff, #f0a4a4); background: -moz-linear-gradient(top, #fff, #f0a4a4); box-shadow: 0 0 5px #ffbaba; text-shadow: 0 0 3px #bbb;}\
  1863. div.tab_pane input.landpmbutton { height: 20px; width: 22px; } \
  1864. div.tab_pane input.landpmbuttonhigh { height: 20px; width: 22px; background-color: #82BA00; background: -webkit-linear-gradient(top,#8DC98D,#fff); background: -moz-linear-gradient(top,#8DC98D,#fff); } \
  1865. div.tab_pane input.landtxtfield { padding: 2px 0; width: 50px; text-align: center} \
  1866. div.tab_pane input.landtxtfieldc { padding: 2px 0; width: 100%; text-align: center } \
  1867. div.tab_pane td.landname { padding-top: 3px} \
  1868. div.tab_pane input.landsavebutton { height: 20px; width:100% } \
  1869. table.raids, table.camps { font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 10px; text-align: center; border-collapse: collapse; margin: 5px auto } \
  1870. table.raids td { border: 1px solid #bbb; width: 55px; background-color: #fff; }\
  1871. table.camps td { border: 1px solid #bbb; width: 20px; background-color: #fff; }\
  1872. table.raids td.ep, table.camps td.ep { text-align: right; width: auto; padding: 0 6px; } \
  1873. table.raids th, table.camps th { border: 1px solid #bbb; background-color: #efefef; } \
  1874. table.raids tr.head, table.camps tr.head { background-color: #fafafa; } \
  1875. table.raids tr.split td, table.camps th { border-bottom-width: 2px; } \
  1876. table.raids tr.best td, table.camps td.mark { background-color: #eff4f9; } \
  1877. table.camps .tb {border-right-width: 2px} \
  1878. table.raids colgroup col.selected { border: 2px solid #5f9ea0; }\
  1879. ul#SRDotDX_tabpane_tabs input[type=\"checkbox\"] {display: none}\
  1880. ul#SRDotDX_tabpane_tabs input[type=\"checkbox\"] + label {font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; cursor: pointer;}\
  1881. ul#SRDotDX_tabpane_tabs input[type=\"checkbox\"] + label:before { content:\"\"; display:inline-block; width:18px; height:14px; position: relative; top: 3px; }\
  1882. ul#SRDotDX_tabpane_tabs input[type=\"checkbox\"].generic + label:before { margin-left: 6px }\
  1883. ul#SRDotDX_tabpane_tabs input[type=\"radio\"] {display: none}\
  1884. ul#SRDotDX_tabpane_tabs input[type=\"radio\"] + label {font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; cursor: pointer;}\
  1885. ul#SRDotDX_tabpane_tabs input[type=\"radio\"] + label:before { content:\"\"; display:inline-block; width:16px; height:13px; position: relative; top: 2px; }\
  1886. ul#SRDotDX_tabpane_tabs input[type=\"radio\"].generic + label:before { margin-left: 5px }\
  1887. ul#SRDotDX_tabpane_tabs input[type=\"text\"].generic { border: 1px dashed transparent; border-bottom-color: #bbb; padding: 0 1px; background-color: transparent; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; color: #333; outline: none; height: 15px; text-align: center; }\
  1888. ul#SRDotDX_tabpane_tabs input[type=\"text\"].generic:hover { border-style: solid; }\
  1889. ul#SRDotDX_tabpane_tabs input[type=\"text\"].generic:focus {border-style: solid; border-color: #ccc; background: -webkit-linear-gradient(top,#eee,#fff); background: -moz-linear-gradient(top,#eee,#fff);}\
  1890. ul#SRDotDX_tabpane_tabs input[type=\"text\"][disabled].generic { color: #aaa; }\
  1891. ul#SRDotDX_tabpane_tabs input[type=\"text\"].color {float: right; margin-right: 6px; width: 40px;}\
  1892. input#raidsBossFilter {width: 260px; box-shadow: 0 0 4px -1px #aaa; outline: none; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; padding: 3px 5px; background: -webkit-linear-gradient(top, #fff, #d1dfee); background: -moz-linear-gradient(top, #fff, #d1dfee); border-color: #aaa; margin: 4px auto; display: block; border-radius: 2px;}\
  1893. input#raidsBossFilter:hover, input#raidsBossFilter:focus {background: -webkit-linear-gradient(top, #DFE8F1, #fff); background: -moz-linear-gradient(top, #DFE8F1, #fff);}\
  1894. textarea#DotDX_raidsToSpam, textarea#options_sbConfig { border: 1px solid #aaa; width: 254px; margin-left: 6px; margin-top: 5px; margin-bottom: 4px; padding: 3px 7px; resize: none; outline: none; font-size: 10px; font-style: italic; }\
  1895. #kong_game_ui div#dotdx_status_div {font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-style: italic; font-size: 11px; margin: 0; border-bottom: 1px solid #aaa; }\
  1896. #kong_game_ui div#helpBox { padding: 0; position: absolute; bottom: 8px; overflow: hidden; width: 282px; transition: max-height .5s; border-top-width: 0; border-top-style: solid; font-family: \"Trebuchet MS\",Helvetica,sans-serif; font-size: 12px; font-style: italic;}\
  1897. #kong_game_ui div#helpBox > span {display: inline-block; padding: 11px 8px 9px;}\
  1898. #kong_game_ui span.generic { display: inline-block; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; }\
  1899. #kong_game_ui span.notice { display: inline-block; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 10px; font-style: italic; margin: 3px 6px; }\
  1900. #kong_game_ui div#dotdx_usercontext { display: none; position: absolute; background-color: #eee; border: 1px solid #888; display: none; box-shadow: 0 0 8px #888; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; background: -webkit-linear-gradient(top,#e7e7e7,#fff); background: -moz-linear-gradient(top,#e7e7e7,#fff); cursor: pointer;}\
  1901. #kong_game_ui div#dotdx_usercontext span { display: inline-block; padding: 3px 6px 2px }\
  1902. #kong_game_ui div#dotdx_usercontext span:hover { text-shadow: 0 0 3px #aaa; }\
  1903. #kong_game_ui td {vertical-align: middle}\
  1904. div#FPXfsOptions span.generic {float:left; clear:both}\
  1905. div#FPXfsOptions span.share { font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 10px; margin-right: 10px; margin-right: 5px; display: inline-block; padding-top: 3px; }\
  1906. div#FPXfsOptions label { margin-right: 3px; }\
  1907. div#dotdx_sidebar_container { margin-top: 0; padding-top: 36px; overflow: hidden; }\
  1908. div#dotdx_sidebar_container > button {width: 60px; border: 1px solid #555; margin-bottom: 5px; font-size: 11px; font-family: \"Trebuchet MS\", Helvetica, sans-serif; height: 21px; transition-property: box-shadow, text-shadow, border-color, background; transition-duration: .5s; outline: none; position: relative; z-index: 9;}\
  1909. div#dotdx_sidebar_container > button:hover { position: relative; z-index: 40;}\
  1910. div#dotdx_sidebar_container > div.label { text-align: center; color: #fff; padding-top: 7px; height: 19px; text-shadow: 0 0 6px #fff; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; }\
  1911. div#dotdx_sidebar_container > div { width: 60px; height: 26px }\
  1912. div#dotdx_sidebar_container > input[type=\"text\"] { border: 1px solid #555; margin-bottom: 5px; display: inline-block; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; font-style: italic; width: 46px; outline: none; height: 13px; text-align: center; position:absolute; z-index:3; padding: 3px 6px; transition: width .5s; }\
  1913. div#dotdx_sidebar_container > input[type=\"text\"]:hover, div#dotdx_sidebar_container > input[type=\"text\"]:focus { width:250px; text-align: left; }\
  1914. #kong_game_ui div#chat_room_tabs div a, #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head {transition: all .3s;}\
  1915. div.raid_list_item > span.DotDX_extState { display: inline-block; width:27px; padding-top: 2px }\
  1916. div.raid_list_item > span.DotDX_extInfo { display: inline-block; color:#c0c0c0; padding-top: 2px; font-size: 11px }\
  1917. div.raid_list_item > br {clear:both}\
  1918. "+elemPositionFix).attach("to",document.head);
  1919. SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'DotDX_themeClass'}).attach('to',document.head);
  1920. SRDotDX.gui.applyTheme();
  1921. SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'DotDX_tabs'}).attach('to',document.head);
  1922. SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'DotDX_fontClass'}).attach('to',document.head);
  1923. SRDotDX.gui.applyFontSize();
  1924. console.log("{!} After CSS");
  1925. var link = SRDotDX.gui.cHTML('a').set({href: '#lots_tab_pane', class: ''}).html(SRDotDX.config.dotdxTabName, false).attach('to', SRDotDX.gui.cHTML('li').set({ class: 'tab', id: 'lots_tab' }).attach('after', 'chat_tab').ele()).ele();
  1926. var sbTmp = JSON.stringify(SRDotDX.config.sbConfig);
  1927. sbTmp = sbTmp.slice(1,sbTmp.length-1).replace(/},/g,"},&#10;").replace(/l,/g,"l,&#10;");
  1928. var pane = SRDotDX.gui.cHTML('div').set({id: 'lots_tab_pane'}).html(' \
  1929. <div id="dotdx_shadow_wrapper">\
  1930. <div id="dotdx_status_div">DotDX: <span id="StatusOutput"></span></div> \
  1931. <div style="height: 617px; overflow: hidden;">\
  1932. <ul id="SRDotDX_tabpane_tabs"> \
  1933. <li class="tab active"> \
  1934. <div class="tab_head" id="raids_tab">Raids</div> \
  1935. <div class="tab_pane" id="mainRaidsFrame"> \
  1936. <div id="topRaidPane"> \
  1937. <div id="FPXRaidFilterDiv" class="collapsible_panel"> \
  1938. <p class="collapsingCategory" id="collapsingCat1" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidFiltering\', this, \'raid_list\')">Filtering<span style="float:right">&minus;</span></p> \
  1939. <div id="FPXRaidFiltering" style="display:block" class="collapsingField"> \
  1940. <input type="text" id="raidsBossFilter" name="FPXRaidBossNameFilter"> \
  1941. <input type="checkbox" id="dotdx_flt_vis"><label for="dotdx_flt_vis" style="margin-right: 9px; margin-left:5px; margin-bottom:5px; display: inline-block">Include visited</label>\
  1942. <input type="checkbox" id="dotdx_flt_nuke"><label for="dotdx_flt_nuke" style="margin-right: 9px;">Only nuked</label>\
  1943. <input type="checkbox" id="dotdx_flt_all"><label for="dotdx_flt_all">Show all</label>\
  1944. </div> \
  1945. </div> \
  1946. <!-- <div id="FPXRaidSortingDiv" class="collapsible_panel"> \
  1947. <p class="collapsingCategory" id="collapsingCat2" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidSort\', this, \'raid_list\')">Sorting<span style="float:right">+</span></p> \
  1948. <div id="FPXRaidSort" style="display:none"> \
  1949. <table> \
  1950. <tr><td rowspan="2"><input type="button" class="regBtn" style="display:inline; height: 40px" id="SortRaidsButton" onClick="SRDotDX.gui.FPXSortRaids();return false;" value="Sort" onmouseout="SRDotDX.gui.turnNormal(this.id);" onmouseover="SRDotDX.gui.highlightButton(this.id,\'Sort raids based on selected criteria.\');"></td> \
  1951. <td>&nbsp;Sort by: \
  1952. <select style="width: 90px" id="FPXRaidSortSelection" tabIndex="-1"> \
  1953. <option value="Time" selected>TimeStamp</option> \
  1954. <option value="Name">Raid Name</option> \
  1955. <option value="Diff">Difficulty</option> \
  1956. <option value="Id">Raid Id</option> \
  1957. </select> \
  1958. <select style="width: 56px" id="FPXRaidSortDirection" tabIndex="-1"> \
  1959. <option value="asc" selected>Asc</option> \
  1960. <option value="desc">Desc</option> \
  1961. </select></td></tr> \
  1962. <tr><td style="padding: 2px"><input type="checkbox" id="SRDotDX_options_newRaidsAtTopOfRaidList"><div><label>New raids at top of raid list</label></div></td></tr> \
  1963. </table> \
  1964. </div> \
  1965. </div> --> \
  1966. <input style="width: 94px; margin-top: 1px; margin-left: 5px" name="ImportRaids" class="blue" id="ImportRaidsButton" onclick="SRDotDX.request.raids(); return false;" tabIndex="-1" type="button" value="Import" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Import all alive raids from raids server.\');">\
  1967. <input style="width: 55px;" name="DumpRaids" class="generic" id="DumpRaidsButton" onclick="SRDotDX.gui.RaidAction(\'share\');return false;" tabIndex="-1" type="button" value="Share" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Copy all selected (not dead) raids to the share tab.\');"> \
  1968. <input style="width: 55px;" name="PostRaids" class="generic" id="PostRaidsButton" onclick="SRDotDX.gui.RaidAction(\'post\');return false;" tabIndex="-1" type="button" value="Post" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Post all selected (not dead) raids to chat.\');"> \
  1969. <input style="width: 55px;" name="DeleteRaids" class="red" id="DeleteRaidsButton" onclick="SRDotDX.gui.RaidAction(\'delete\'); return false;" tabIndex="-1" type="button" value="Delete" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Delete selected raids.\');"><br> \
  1970. <input style="width: 94px; margin-bottom: 7px; margin-left: 5px; margin-top: 4px"name="JoinRaids" class="green" id="AutoJoinVisibleButton" onclick="SRDotDX.gui.joinSelectedRaids(false) ;return false;" tabIndex="-1" type="button" value="Join" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Join all selected (not dead) raids.\'); "> \
  1971. <input style="width: 173px; margin-bottom: 5px; margin-top: 4px" name="ImpJoinRaids" class="green" id="AutoImpJoinVisibleButton" onclick="SRDotDX.request.joinAfterImport = true;SRDotDX.request.raids();return false;" tabIndex="-1" type="button" value="Import & Join" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Import from server and join all selected (not dead) raids.\'); "> \
  1972. </div> \
  1973. <div style="" id="raid_list" tabIndex="-1"></div> \
  1974. </div> \
  1975. </li> \
  1976. <li class="tab"> \
  1977. <div class="tab_head">Opts</div> \
  1978. <div class="tab_pane"> \
  1979. <div id="FPXRaidOptionsDiv" class="collapsible_panel"> \
  1980. <p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat5" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidOptions\', this)">Raid Options<span style="float:right">+</span></p> \
  1981. <div id="FPXRaidOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
  1982. <input type="checkbox" id="SRDotDX_options_markMyRaidsVisited" class="generic"><label for="SRDotDX_options_markMyRaidsVisited">Mark raids posted by me as visited</label><br> \
  1983. <input type="checkbox" id="SRDotDX_options_confirmWhenDeleting" class="generic"><label for="SRDotDX_options_confirmWhenDeleting">Confirm when manually deleting raids</label><br> \
  1984. <input type="checkbox" id="SRDotDX_options_importFiltered" class="generic"><label for="SRDotDX_options_importFiltered">Add to database filtered raids only</label><br> \
  1985. <span class="generic">Unvisited raid pruning:</span><br> \
  1986. <input type="radio" id="FPX_options_unvisitedPruningAggressive" class="generic" name="unvisitedPruning" value="Aggressive"/><label for="FPX_options_unvisitedPruningAggressive">Aggressive</label> \
  1987. <input type="radio" id="FPX_options_unvisitedPruningModerate" class="generic" name="unvisitedPruning" value="Moderate"/><label for="FPX_options_unvisitedPruningModerate">Moderate</label> \
  1988. <input type="radio" id="FPX_options_unvisitedPruningSlow" class="generic" name="unvisitedPruning" value="Slow"/><label for="FPX_options_unvisitedPruningSlow">Slow</label> \
  1989. <input type="radio" id="FPX_options_unvisitedPruningNone" class="generic" name="unvisitedPruning" value="None"/><label for="FPX_options_unvisitedPruningNone">None</label><br> \
  1990. </div> \
  1991. </div> \
  1992. <div id="FPXChatOptionsDiv" class="collapsible_panel"> \
  1993. <p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat6" onclick="SRDotDX.gui.toggleDisplay(\'FPXChatOptions\', this)">Chat Options<span style="float:right">+</span></p> \
  1994. <div id="FPXChatOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
  1995. <input type="checkbox" id="SRDotDX_options_hideRaidLinks" class="generic"><label for="SRDotDX_options_hideRaidLinks">Hide all raid links in chat</label><br> \
  1996. <input type="checkbox" id="SRDotDX_options_hideBotLinks" class="generic"><label for="SRDotDX_options_hideBotLinks">Hide bot raid links in chat</label><br> \
  1997. <input type="checkbox" id="SRDotDX_options_hideVisitedRaids" class="generic"><label for="SRDotDX_options_hideVisitedRaids">Hide visited raids in chat</label><br> \
  1998. <span class="generic">Chat size:</span>\
  1999. <input type="radio" id="SRDotDX_options_chatSizeNormal" name="chatSize" value="300"/><label for="SRDotDX_options_chatSizeNormal">Normal</label> \
  2000. <input type="radio" id="SRDotDX_options_chatSizePlus25" name="chatSize" value="375" class="generic"/><label for="SRDotDX_options_chatSizePlus25">+25%</label> \
  2001. <input type="radio" id="SRDotDX_options_chatSizePlus50" name="chatSize" value="400" class="generic"/><label for="SRDotDX_options_chatSizePlus50">+50%</label><br> \
  2002. <span class="generic">Font size:</span>\
  2003. <input type="radio" id="SRDotDX_options_fontSizeNormal" name="fontSize" value="0"/><label for="SRDotDX_options_fontSizeNormal">Normal</label> \
  2004. <input type="radio" id="SRDotDX_options_fontSizeSmaller" name="fontSize" value="2" class="generic"/><label for="SRDotDX_options_fontSizeSmaller">Smaller</label> \
  2005. <input type="radio" id="SRDotDX_options_chatSizeBigger" name="fontSize" value="1" class="generic"/><label for="SRDotDX_options_chatSizeBigger">Bigger</label><br> \
  2006. <input type="checkbox" id="SRDotDX_options_hideScrollbar" class="generic"><label for="SRDotDX_options_hideScrollbar">Hide scrollbar for chat and user window</label><br> \
  2007. <span class="generic">More info in raid links:</span> \
  2008. <input type="checkbox" id="SRDotDX_options_showFS"><label for="SRDotDX_options_showFS">Show FS</label> \
  2009. <input type="checkbox" id="SRDotDX_options_showAP" class="generic"><label for="SRDotDX_options_showAP">Show AP</label> \
  2010. </div> \
  2011. </div> \
  2012. <div id="FPXPasteOptionsDiv" class="collapsible_panel"> \
  2013. <p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat7" onclick="SRDotDX.gui.toggleDisplay(\'FPXPasteOptions\', this)">Pastebin Options<span style="float:right">+</span></p> \
  2014. <div id="FPXPasteOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
  2015. <input type="checkbox" id="SRDotDX_options_autoImportPaste" class="generic"><label for="SRDotDX_options_autoImportPaste">Auto import pastebins</label><br> \
  2016. <input type="checkbox" id="SRDotDX_options_confirmForLargePaste" class="generic"><label for="SRDotDX_options_confirmForLargePaste">Confirm if pastie exceeds</label> <input type="text" class="generic" style="width: 26px;" id="SRDotDX_options_confirmPasteSize"> \
  2017. </div> \
  2018. </div> \
  2019. <div id="FPXIntOptionsDiv" class="collapsible_panel"> \
  2020. <p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat20" onclick="SRDotDX.gui.toggleDisplay(\'FPXIntOptions\', this)">Interface Options<span style="float:right">+</span></p> \
  2021. <div id="FPXIntOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
  2022. <input type="checkbox" id="options_hideGameTitle" class="generic"><label for="options_hideGameTitle">Hide titlebar above game window</label><br>\
  2023. <input type="checkbox" id="options_hideGameDetails" class="generic"><label for="options_hideGameDetails">Hide details under game window</label><br>\
  2024. <input type="checkbox" id="options_hideKongForum" class="generic"><label for="options_hideKongForum">Hide forum under game window</label><br>\
  2025. <input type="checkbox" id="options_trueMsgCount" class="generic"><label for="options_trueMsgCount">Display true kong messages count</label><br>\
  2026. <input type="checkbox" id="options_hideGameTab" class="generic"><label for="options_hideGameTab">Hide Game tab</label><br>\
  2027. <input type="checkbox" id="options_hideAccTab" class="generic"><label for="options_hideAccTab">Hide Achievements tab</label><br>\
  2028. <span class="generic">Script tab name</span><input type="text" class="generic color" id="options_dotdxTabName"><br> \
  2029. <span class="generic">Background color</span><input type="text" class="generic color" id="SRDotDX_colors_background"><br> \
  2030. <span class="generic">Theme:</span>\
  2031. <input type="radio" id="theme_lightGrey" name="chatTheme" value="0"><label for="theme_lightGrey">Light Grey</label>\
  2032. <input type="radio" id="theme_crimsonBlack" name="chatTheme" value="1" class="generic"><label for="theme_crimsonBlack">Crimson Black</label>\
  2033. </div>\
  2034. </div> \
  2035. <div id="FPXsbOptionsDiv" class="collapsible_panel"> \
  2036. <p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat25" onclick="SRDotDX.gui.toggleDisplay(\'FPXsbOptions\', this)">Sidebar Options<span style="float:right">+</span></p> \
  2037. <div id="FPXsbOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
  2038. <input type="checkbox" id="options_sbEnable" class="generic"><label for="options_sbEnable">Enable DotDX Sidebar</label><br>\
  2039. <input type="checkbox" id="options_cbDisable" class="generic"><label for="options_cbDisable">Hide toolbar under chat window</label><br>\
  2040. <input type="checkbox" id="options_sbRightSide" class="generic"><label for="options_sbRightSide">Show sidebar on the right side of chat</label><br> \
  2041. <textarea wrap="off" id="options_sbConfig" rows="25" style="overflow-y: hidden; overflow-x: scroll; white-space: nowrap">' + sbTmp + '</textarea> \
  2042. <input id="dotdx_sbConfigSave" style="margin: 0 0 2px 6px; width: 156px;" class="blue" type="button" value="Apply new sidebar layout" onclick="SRDotDX.gui.applySidebarUI(0); return false;">\
  2043. <input id="dotdx_sbConfigDefault" style="width: 110px;" class="red" type="button" value="Restore default" onclick="SRDotDX.gui.restoreDefaultSB(); return false;">\
  2044. </div> \
  2045. </div> \
  2046. <div id="FPXfsOptionsDiv" class="collapsible_panel"> \
  2047. <p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat24" onclick="SRDotDX.gui.toggleDisplay(\'FPXfsOptions\', this)">Friend Share Options<span style="float:right">+</span></p> \
  2048. <div id="FPXfsOptions" name="dotdxOptsTabs" style="display:none; text-align:right" class="collapsingField"> \
  2049. </div> \
  2050. </div> \
  2051. </div> \
  2052. </li> \
  2053. <li class="tab"> \
  2054. <div class="tab_head" id="FPXShareTab">Share</div> \
  2055. <div class="tab_pane"> \
  2056. <div id="FPXRaidSpamDiv"> \
  2057. <div id="FPXShareDiv" class="collapsible_panel"> \
  2058. <p class="collapsingCategory" id="collapsingCat8" onclick="SRDotDX.gui.toggleDisplay(\'FPXShare\', this, \'share_list\')">Share<span style="float:right">+</span></p> \
  2059. <div id="FPXShare" style="display:block" class="collapsingField"> \
  2060. <input type="checkbox" id="SRDotDX_options_formatLinkOutput" class="generic"><label for="SRDotDX_options_formatLinkOutput">Enable formatting of posted raid links</label><br> \
  2061. <span class="generic">Whisper to </span><input type="text" class="generic" id="SRDotDX_options_whisperTo"><br>\
  2062. <span class="notice">(if "whisper to" field is blank, raids will be posted public)</span> \
  2063. <input id="dotdx_share_post_button" style="margin: 3px 0 0 6px; width: 133px" name="Submit" class="generic" type="button" tabIndex="-1" value="Post Links to Chat" onclick="SRDotDX.gui.RaidAction(\'post_share\');return false;"/> \
  2064. <input id="dotdx_friend_post_button" style="width: 133px" name="Submit1" class="green" type="button" tabIndex="-1" value="Friend Share links" onclick="SRDotDX.gui.RaidAction(\'post_friend\');return false;"/><br> \
  2065. </div> \
  2066. </div> \
  2067. <div id="FPXImportDiv" class="collapsible_panel" class="collapsingField"> \
  2068. <p class="collapsingCategory" id="collapsingCat9" onclick="SRDotDX.gui.toggleDisplay(\'FPXImport\', this, \'share_list\')">Import<span style="float:right">+</span></p> \
  2069. <div id="FPXImport" style="display:none" class="collapsingField"> \
  2070. <input type="checkbox" id="SRDotDX_options_markImportedRaidsVisited" class="generic"><label for="SRDotDX_options_markImportedRaidsVisited">Mark imported raids visited</label><br> \
  2071. <input style="margin-left: 6px; margin-top: 6px; width: 133px" name="Submit2" class="blue" type="button" tabIndex="-1" value="Import to Raid Tab" onClick="SRDotDX.gui.FPXimportRaids();return false;"/> \
  2072. <input style="width: 133px" name="Submit3" class="blue" type="button" tabIndex="-1" value="Delete and Import" onClick="SRDotDX.gui.FPXdeleteAllRaids();SRDotDX.gui.FPXimportRaids();return false;"/> \
  2073. </div> \
  2074. </div> \
  2075. </div> \
  2076. <textarea id="DotDX_raidsToSpam" name="FPXRaidSpamInput" style="height:437px;"></textarea> \
  2077. </div> \
  2078. </li> \
  2079. <li class="tab"> \
  2080. <div class="tab_head">Filter</div> \
  2081. <div class="tab_pane"> \
  2082. <div id="FPXRaidFilterDiv"> \
  2083. <div id="FPXRaidFilterWhereDiv"> \
  2084. <p class="collapsingCategory" id="collapsingCat18" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidFilterWhere\', this)">Filtering options<span style="float:right">+</span></p> \
  2085. <div id="FPXRaidFilterWhere" style="display:block" class="collapsingField"> \
  2086. <input type="checkbox" id="SRDotDX_options_perRaidFilterLinks" class="generic"><label for="SRDotDX_options_perRaidFilterLinks">Activate filtering on raid links</label><br> \
  2087. <input type="checkbox" id="SRDotDX_options_perRaidFilterRaidList" class="generic"><label for="SRDotDX_options_perRaidFilterRaidList">Activate filtering on raid list tab</label><br> \
  2088. </div>\
  2089. </div> \
  2090. <div id="FPXRaidFilterWhatDiv"> \
  2091. <div id="FPXRaidTableSmallDiv" class="collapsible_panel"> \
  2092. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat11" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableSmall\', this)">Small Raids<span style="float:right">+</span></p> \
  2093. <table id="FPXRaidTableSmall" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2094. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2095. <tbody id="FPXRaidFilterWhatSmall"> \
  2096. <!-- Dynamic content --> \
  2097. </tbody> \
  2098. </table> \
  2099. </div> \
  2100. <div id="FPXRaidTableMediumDiv" class="collapsible_panel"> \
  2101. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat12" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableMedium\', this)">Medium Raids<span style="float:right">+</span></p> \
  2102. <table id="FPXRaidTableMedium" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2103. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2104. <tbody id="FPXRaidFilterWhatMedium"> \
  2105. <!-- Dynamic content --> \
  2106. </tbody> \
  2107. </table> \
  2108. </div> \
  2109. <div id="FPXRaidTableLargeDiv" class="collapsible_panel"> \
  2110. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat13" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableLarge\', this)">Large Raids<span style="float:right">+</span></p> \
  2111. <table id="FPXRaidTableLarge" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2112. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2113. <tbody id="FPXRaidFilterWhatLarge"> \
  2114. <!-- Dynamic content --> \
  2115. </tbody> \
  2116. </table> \
  2117. </div> \
  2118. <div id="FPXRaidTableEpicDiv" class="collapsible_panel"> \
  2119. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat14" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableEpic\', this)">Epic Raids<span style="float:right">+</span></p> \
  2120. <table id="FPXRaidTableEpic" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2121. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2122. <tbody id="FPXRaidFilterWhatEpic"> \
  2123. <!-- Dynamic content --> \
  2124. </tbody> \
  2125. </table> \
  2126. </div> \
  2127. <div id="FPXRaidTableColossalDiv" class="collapsible_panel"> \
  2128. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat15" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableColossal\', this)">Colossal Raids<span style="float:right">+</span></p> \
  2129. <table id="FPXRaidTableColossal" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2130. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2131. <tbody id="FPXRaidFilterWhatColossal"> \
  2132. <!-- Dynamic content --> \
  2133. </tbody> \
  2134. </table> \
  2135. </div> \
  2136. <div id="FPXRaidTableGiganticDiv" class="collapsible_panel"> \
  2137. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat155" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableGigantic\', this)">Gigantic Raids<span style="float:right">+</span></p> \
  2138. <table id="FPXRaidTableGigantic" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2139. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2140. <tbody id="FPXRaidFilterWhatGigantic"> \
  2141. <!-- Dynamic content --> \
  2142. </tbody> \
  2143. </table> \
  2144. </div> \
  2145. <div id="FPXRaidTableGuildDiv" class="collapsible_panel"> \
  2146. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat16" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableGuild\', this)">Guild Raids<span style="float:right">+</span></p> \
  2147. <table id="FPXRaidTableGuild" name="dotdxFilterTab" style="display:none; height: 330px; overflow-y: auto;" class="collapsingField"> \
  2148. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2149. <tbody id="FPXRaidFilterWhatGuild"> \
  2150. <!-- Dynamic content --> \
  2151. </tbody> \
  2152. </table> \
  2153. </div> \
  2154. <div id="FPXRaidTableSpecialDiv" class="collapsible_panel"> \
  2155. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat17" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableSpecial\', this)">World Raids<span style="float:right">+</span></p> \
  2156. <table id="FPXRaidTableSpecial" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2157. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2158. <tbody id="FPXRaidFilterWhatSpecial"> \
  2159. <!-- Dynamic content --> \
  2160. </tbody> \
  2161. </table> \
  2162. </div> \
  2163. </div> \
  2164. </div> \
  2165. </div> \
  2166. </li> \
  2167. <li class="tab"> \
  2168. <div class="tab_head">Calc</div> \
  2169. <div class="tab_pane"> \
  2170. <ul id="SRDotDX_tabpane_tabs2"> \
  2171. <li class="tab2"> \
  2172. <div id="FPXLandCalcDiv" class="collapsible_panel"> \
  2173. <p class="collapsingCategory" id="collapsingCat20" onclick="SRDotDX.gui.toggleDisplay(\'FPXLandCalc\', this)">Land Calculator<span style="float:right">+</span></p> \
  2174. <div id="FPXLandCalc" style="display:block" class="collapsingField"> \
  2175. <form id="FPXLand" name="FPXLandForm" onSubmit="return false;"> \
  2176. <table style="margin: 0 auto; padding-right: 10px;"> \
  2177. <tr><td class="landname" colspan="3">Cornfield</td><td style="width: 10px">&nbsp;</td><td class="landname" colspan="3">Stable</td></tr> \
  2178. <tr> \
  2179. <td> <input class="landpmbutton red" id="a_1" name="FPXminusTen_1" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="10"/></td> \
  2180. <td> <input class="generic" maxlength="10" name="tf_1" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="1" /></td> \
  2181. <td> <input class="landpmbutton blue" id="b_1" name="FPXplusTen_1" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="11"/></td> \
  2182. <td></td> \
  2183. <td> <input class="landpmbutton red" id="a_2" name="FPXminusTen_2" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="12"/></td> \
  2184. <td> <input class="generic" maxlength="10" name="tf_2" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="2" /></td> \
  2185. <td> <input class="landpmbutton blue" id="b_2" name="FPXplusTen_2" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="13"/></td> \
  2186. </tr> \
  2187. <tr><td class="landname" colspan="3">Barn</td><td></td><td class="landname" colspan="3">Store</td></tr> \
  2188. <tr> \
  2189. <td> <input class="landpmbutton red" id="a_3" name="FPXminusTen_3" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="14"/></td> \
  2190. <td> <input class="generic" maxlength="10" name="tf_3" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="3" /></td> \
  2191. <td> <input class="landpmbutton blue" id="b_3" name="FPXplusTen_3" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="15"/></td> \
  2192. <td></td> \
  2193. <td> <input class="landpmbutton red" id="a_4" name="FPXminusTen_4" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="16"/></td> \
  2194. <td> <input class="generic" maxlength="10" name="tf_4" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="4" /></td> \
  2195. <td> <input class="landpmbutton blue" id="b_4" name="FPXplusTen_4" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="17"/></td> \
  2196. </tr> \
  2197. <tr><td class="landname" colspan="3">Pub</td><td></td><td class="landname" colspan="3">Inn</td></tr> \
  2198. <tr> \
  2199. <td> <input class="landpmbutton red" id="a_5" name="FPXminusTen_5" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="18"/></td> \
  2200. <td> <input class="generic" maxlength="10" name="tf_5" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="5" /></td> \
  2201. <td> <input class="landpmbutton blue" id="b_5" name="FPXplusTen_5" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="19"/></td> \
  2202. <td></td> \
  2203. <td> <input class="landpmbutton red" id="a_6" name="FPXminusTen_6" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="20"/></td> \
  2204. <td> <input class="generic" maxlength="10" name="tf_6" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="6" /></td> \
  2205. <td> <input class="landpmbutton blue" id="b_6" name="FPXplusTen_6" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="21"/></td> \
  2206. </tr> \
  2207. <tr><td class="landname" colspan="3">Sentry</td><td></td><td class="landname" colspan="3">Fort</td></tr> \
  2208. <tr> \
  2209. <td> <input class="landpmbutton red" id="a_7" name="FPXminusTen_7" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="22"/></td> \
  2210. <td> <input class="generic" maxlength="10" name="tf_7" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="7" /></td> \
  2211. <td> <input class="landpmbutton blue" id="b_7" name="FPXplusTen_7" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="23"/></td> \
  2212. <td></td> \
  2213. <td> <input class="landpmbutton red" id="a_8" name="FPXminusTen_8" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="24"/></td> \
  2214. <td> <input class="generic" maxlength="10" name="tf_8" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="8" /></td> \
  2215. <td> <input class="landpmbutton blue" id="b_8" name="FPXplusTen_8" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="25"/></td> \
  2216. </tr> \
  2217. <tr><td class="landname" colspan="3">Castle</td></tr> \
  2218. <tr> \
  2219. <td> <input class="landpmbutton red" id="a_9" name="FPXminusTen_9" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="26"/></td> \
  2220. <td> <input class="generic" maxlength="10" name="tf_9" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="9" /></td> \
  2221. <td> <input class="landpmbutton blue" id="b_9" name="FPXplusTen_9" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="27"/></td> \
  2222. <td></td> \
  2223. <td colspan="3"> <input class="landsavebutton green" id="lsbutton" type="button" value="Save" onClick="SRDotDX.gui.FPXLandButtonSave();return false;" tabindex="28"/></td> \
  2224. </tr> \
  2225. </table> \
  2226. </form> \
  2227. </div> \
  2228. </div>\
  2229. </li> \
  2230. </ul> \
  2231. </div> \
  2232. </li> \
  2233. </ul> \
  2234. </div>\
  2235. <div id="helpBox" style="max-height:0"><span>Help message</span></div> \
  2236. </div>\
  2237. ', false).attach('to', 'kong_game_ui').ele();
  2238. console.log("{!} After HTML load func");
  2239. SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'DotDX_colors'}).text(' \
  2240. .DotDX_filter_dummy_0 {display: none !important} \
  2241. ').attach('to',document.head);
  2242.  
  2243. //pane.style.height = document.getElementById('chat_tab_pane').style.height;
  2244. var e = pane.getElementsByClassName('tab_head');
  2245. i = e.length;
  2246. while (i--) {
  2247. e[i].addEventListener('click', function() {
  2248. if (!/\bactive\b/i.test(this.className)) {
  2249. var e = document.getElementById("lots_tab_pane").getElementsByTagName("li");
  2250. var i = e.length;
  2251. while (i--) if (e[i].getAttribute("class").indexOf("active") > -1) e[i].className = e[i].className.replace(/ active$/g,"");
  2252. (this.parentNode).className += ' active';
  2253. }
  2254. });
  2255. }
  2256. holodeck._tabs.addTab(link);
  2257. SRDotDX.gui.applyTabs();
  2258. //Set up custom chat size
  2259. SRDotDX.gui.hideWC(true);
  2260.  
  2261. //Chat raids overlay div
  2262. SRDotDX.gui.cHTML('div').set({id: 'chat_raids_overlay'})
  2263. .html('<span id="chat_raids_overlay_text"></span>',true)
  2264. .attach("to",'chat_tab_pane');
  2265.  
  2266. //Sidebar elements generator
  2267. if (SRDotDX.config.sbEnable) SRDotDX.gui.applySidebarUI(1);
  2268.  
  2269. //spam tab
  2270. var FPXimpSpam = SRDotDX.gui.cHTML('#DotDX_raidsToSpam');
  2271. var FPXSpamText = 'Paste raid and/or pastebin links here to share or import\n\nLinks must be comma (,) separated.';
  2272. FPXimpSpam.ele().value=FPXSpamText;
  2273. FPXimpSpam.ele().addEventListener('blur',function() { if (this.value == '') this.value = FPXSpamText });
  2274. FPXimpSpam.ele().addEventListener('focus',function() { if (this.value == FPXSpamText) this.value = '' });
  2275.  
  2276. //chat global listener
  2277. var chat_window = document.getElementById('chat_rooms_container');
  2278. chat_window.addEventListener('click',function(e) { SRDotDX.gui.chatWindowMouseDown(e) }, false);
  2279. chat_window.addEventListener('contextmenu',function(e) { SRDotDX.gui.chatWindowContextMenu(e) }, false);
  2280. //land tab
  2281. els = document.FPXLandForm; i = 9;
  2282. while (i--) els.elements['tf_'+(i+1)].value = SRDotDX.config.FPXLandOwnedCount[i];
  2283. SRDotDX.gui.FPXLandUpdater();
  2284.  
  2285. //raid tab
  2286. var raids_tab = document.getElementById('raids_tab');
  2287. raids_tab.addEventListener('click', function(){ SRDotDX.gui.refreshRaidList(); }, false);
  2288.  
  2289. var raidBossFilter = SRDotDX.gui.cHTML('#raidsBossFilter');
  2290. raidBossFilter.ele().value = SRDotDX.config.lastFilter;
  2291. raidBossFilter.ele().addEventListener("keyup", function(){ SRDotDX.gui.updateFilterTxt(this.value,true); });
  2292.  
  2293. var filterIncVis = SRDotDX.gui.cHTML('#dotdx_flt_vis');
  2294. filterIncVis.ele().checked = SRDotDX.config.fltIncVis;
  2295. filterIncVis.on('click',function(){
  2296. SRDotDX.config.fltIncVis = this.checked;
  2297. if(this.checked) {
  2298. document.getElementById('dotdx_flt_nuke').checked = false; SRDotDX.config.fltShowNuked = false;
  2299. document.getElementById('dotdx_flt_all').checked = false; SRDotDX.config.fltShowAll = false;
  2300. }
  2301. SRDotDX.gui.selectRaidsToJoin('checkbox')});
  2302.  
  2303. var filterShowNuked = SRDotDX.gui.cHTML('#dotdx_flt_nuke');
  2304. filterShowNuked.ele().checked = SRDotDX.config.fltShowNuked;
  2305. filterShowNuked.on('click',function(){
  2306. SRDotDX.config.fltShowNuked = this.checked;
  2307. if(this.checked) {
  2308. document.getElementById('dotdx_flt_vis').checked = false; SRDotDX.config.fltIncVis = false;
  2309. document.getElementById('dotdx_flt_all').checked = false; SRDotDX.config.fltShowAll = false;
  2310. }
  2311. SRDotDX.gui.selectRaidsToJoin('checkbox')});
  2312.  
  2313. var filterShowAll = SRDotDX.gui.cHTML('#dotdx_flt_all');
  2314. filterShowAll.ele().checked = SRDotDX.config.fltShowAll;
  2315. filterShowAll.on('click',function(){
  2316. SRDotDX.config.fltShowAll = this.checked;
  2317. if(this.checked) {
  2318. document.getElementById('dotdx_flt_vis').checked = false; SRDotDX.config.fltIncVis = false;
  2319. document.getElementById('dotdx_flt_nuke').checked = false; SRDotDX.config.fltShowNuked = false }
  2320. SRDotDX.gui.selectRaidsToJoin('checkbox')});
  2321.  
  2322. //raidlist global click listener
  2323. var raid_list = document.getElementById('raid_list');
  2324. raid_list.addEventListener('click', function(e) { e.preventDefault(); e.stopPropagation(); return false },false);
  2325. raid_list.addEventListener('mousedown',function(e) { SRDotDX.gui.FPXraidListMouseDown(e) },false);
  2326.  
  2327. //options tab
  2328. var optsImportFiltered = SRDotDX.gui.cHTML('#SRDotDX_options_importFiltered');
  2329. optsImportFiltered.ele().checked = SRDotDX.config.importFiltered;
  2330. optsImportFiltered.on('click',function(){ SRDotDX.config.importFiltered = this.checked; SRDotDX.config.save(false) });
  2331.  
  2332. var optsShowFs = SRDotDX.gui.cHTML('#SRDotDX_options_showFS');
  2333. optsShowFs.ele().checked = SRDotDX.config.linkShowFs;
  2334. optsShowFs.on('click', function(){ SRDotDX.config.linkShowFs = this.checked; SRDotDX.config.save(false) });
  2335.  
  2336. var optsShowAp = SRDotDX.gui.cHTML('#SRDotDX_options_showAP');
  2337. optsShowAp.ele().checked = SRDotDX.config.linkShowAp;
  2338. optsShowAp.on('click', function(){ SRDotDX.config.linkShowAp = this.checked; SRDotDX.config.save(false) });
  2339.  
  2340. var optsHideARaids = SRDotDX.gui.cHTML('#SRDotDX_options_hideRaidLinks');
  2341. var optsHideBRaids = SRDotDX.gui.cHTML('#SRDotDX_options_hideBotLinks');
  2342. var optsHideVRaids = SRDotDX.gui.cHTML('#SRDotDX_options_hideVisitedRaids');
  2343. var optsConfirmDeletes = SRDotDX.gui.cHTML('#SRDotDX_options_confirmWhenDeleting');
  2344. var optsMarkImportedVisited = SRDotDX.gui.cHTML('#SRDotDX_options_markImportedRaidsVisited');
  2345. var optsWhisperTo = SRDotDX.gui.cHTML('#SRDotDX_options_whisperTo');
  2346. var optsMarkMyRaidsVisited = SRDotDX.gui.cHTML('#SRDotDX_options_markMyRaidsVisited');
  2347. var optsFormatLinkOutput = SRDotDX.gui.cHTML('#SRDotDX_options_formatLinkOutput');
  2348. var optsAutoImportPaste = SRDotDX.gui.cHTML('#SRDotDX_options_autoImportPaste');
  2349. var optsConfirmForLargePaste = SRDotDX.gui.cHTML('#SRDotDX_options_confirmForLargePaste');
  2350. var optsConfirmPasteSize = SRDotDX.gui.cHTML('#SRDotDX_options_confirmPasteSize');
  2351. var rbUnvisitedPruningAggressive = SRDotDX.gui.cHTML('#FPX_options_unvisitedPruningAggressive');
  2352. var rbUnvisitedPruningModerate = SRDotDX.gui.cHTML('#FPX_options_unvisitedPruningModerate');
  2353. var rbUnvisitedPruningSlow = SRDotDX.gui.cHTML('#FPX_options_unvisitedPruningSlow');
  2354. var rbUnvisitedPruningNone = SRDotDX.gui.cHTML('#FPX_options_unvisitedPruningNone');
  2355.  
  2356. var optsChatSizeNormal = SRDotDX.gui.cHTML('#SRDotDX_options_chatSizeNormal');
  2357. optsChatSizeNormal.on('click', function(){ SRDotDX.gui.chatResize(300) });
  2358. var optsChatSizePlus25 = SRDotDX.gui.cHTML('#SRDotDX_options_chatSizePlus25');
  2359. optsChatSizePlus25.on('click', function(){ SRDotDX.gui.chatResize(375) });
  2360. var optsChatSizePlus50 = SRDotDX.gui.cHTML('#SRDotDX_options_chatSizePlus50');
  2361. optsChatSizePlus50.on('click', function(){ SRDotDX.gui.chatResize(450) });
  2362. switch(SRDotDX.config.chatSize) {
  2363. case 300: optsChatSizeNormal.ele().checked = true; break;
  2364. case 375: optsChatSizePlus25.ele().checked = true; break;
  2365. case 450: optsChatSizePlus50.ele().checked = true; break;
  2366. default: optsChatSizeNormal.ele().checked = true; break;
  2367. }
  2368.  
  2369. var optsChatFontNormal = SRDotDX.gui.cHTML('#SRDotDX_options_fontSizeNormal');
  2370. optsChatFontNormal.on('click', function(){ SRDotDX.gui.applyFontSize(0) });
  2371. var optsChatFontSmaller = SRDotDX.gui.cHTML('#SRDotDX_options_fontSizeSmaller');
  2372. optsChatFontSmaller.on('click', function(){ SRDotDX.gui.applyFontSize(2) });
  2373. var optsChatFontBigger = SRDotDX.gui.cHTML('#SRDotDX_options_chatSizeBigger');
  2374. optsChatFontBigger.on('click', function(){ SRDotDX.gui.applyFontSize(1) });
  2375. switch(SRDotDX.config.fontNum) {
  2376. case 2: optsChatFontSmaller.ele().checked = true; break;
  2377. case 1: optsChatFontBigger.ele().checked = true; break;
  2378. default: optsChatFontNormal.ele().checked = true; break;
  2379. }
  2380.  
  2381. var optsChatHideScrollbar = SRDotDX.gui.cHTML('#SRDotDX_options_hideScrollbar');
  2382. optsChatHideScrollbar.ele().checked = SRDotDX.config.hideScrollBar;
  2383. optsChatHideScrollbar.on('click', function(){ SRDotDX.config.hideScrollBar = this.checked; SRDotDX.config.save(false); SRDotDX.gui.chatResize(); });
  2384.  
  2385. var optsHideKongForum = SRDotDX.gui.cHTML('#options_hideKongForum');
  2386. optsHideKongForum.ele().checked = SRDotDX.config.hideKongForum;
  2387. optsHideKongForum.on('click', function(){ SRDotDX.config.hideKongForum = this.checked; SRDotDX.gui.cHTML('#DotDX_forum').html('div.game_page_wrap {padding-top: 16px; margin-top: 14px !important; background: #333 !important; display: ' + (SRDotDX.config.hideKongForum ? 'none' : 'block') + '}',true) });
  2388.  
  2389. var optsHideGameDetails = SRDotDX.gui.cHTML('#options_hideGameDetails');
  2390. optsHideGameDetails.ele().checked = SRDotDX.config.hideGameDetails;
  2391. optsHideGameDetails.on('click', function(){ SRDotDX.config.hideGameDetails = this.checked; SRDotDX.gui.cHTML('#DotDX_details').html('div.game_details_outer {margin-top: 14px !important; width: 900px !important; border: solid 20px #333 !important; display: ' + (SRDotDX.config.hideGameDetails ? 'none' : 'block') + '}',true) });
  2392.  
  2393. var optsHideGameTitle = SRDotDX.gui.cHTML('#options_hideGameTitle');
  2394. optsHideGameTitle.ele().checked = SRDotDX.config.hideGameTitle;
  2395. optsHideGameTitle.on('click', function(){ SRDotDX.config.hideGameTitle = this.checked });
  2396.  
  2397. var optsTrueMsgCount = SRDotDX.gui.cHTML('#options_trueMsgCount');
  2398. optsTrueMsgCount.ele().checked = SRDotDX.config.kongMsg;
  2399. optsTrueMsgCount.on('click', function(){ SRDotDX.config.kongMsg = this.checked });
  2400. if(SRDotDX.config.kongMsg) SRDotDX.gui.setMessagesCount();
  2401.  
  2402. var optsHideGameTab = SRDotDX.gui.cHTML('#options_hideGameTab');
  2403. optsHideGameTab.ele().checked = SRDotDX.config.hideGameTab;
  2404. optsHideGameTab.on('click', function(){ SRDotDX.config.hideGameTab = this.checked; SRDotDX.gui.applyTabs() });
  2405.  
  2406. var optsHideAccTab = SRDotDX.gui.cHTML('#options_hideAccTab');
  2407. optsHideAccTab.ele().checked = SRDotDX.config.hideAccTab;
  2408. optsHideAccTab.on('click', function(){ SRDotDX.config.hideAccTab = this.checked; SRDotDX.gui.applyTabs() });
  2409.  
  2410. var optsDotdxTabName = SRDotDX.gui.cHTML('#options_dotdxTabName');
  2411. optsDotdxTabName.ele().value = SRDotDX.config.dotdxTabName;
  2412. optsDotdxTabName.on('keyup', function(){ SRDotDX.config.dotdxTabName = this.value; SRDotDX.gui.applyTabs() });
  2413.  
  2414. var optsChatThemeLightGrey = SRDotDX.gui.cHTML('#theme_lightGrey');
  2415. optsChatThemeLightGrey.on('click', function(){ SRDotDX.gui.applyTheme(0) });
  2416. var optsChatThemeCrimsonBlack = SRDotDX.gui.cHTML('#theme_crimsonBlack');
  2417. optsChatThemeCrimsonBlack.on('click', function(){ SRDotDX.gui.applyTheme(1) });
  2418. switch(SRDotDX.config.themeNum) {
  2419. case 1: optsChatThemeCrimsonBlack.ele().checked = true; break;
  2420. case 0: default: optsChatThemeLightGrey.ele().checked = true; break;
  2421. }
  2422.  
  2423. //Opts -> Sidebar Options
  2424. var optsSbEnable = SRDotDX.gui.cHTML('#options_sbEnable');
  2425. optsSbEnable.ele().checked = SRDotDX.config.sbEnable;
  2426. optsSbEnable.on('click', function(){ SRDotDX.config.sbEnable = this.checked; SRDotDX.gui.applySidebarUI(this.checked?1:-1); SRDotDX.config.save(false) });
  2427.  
  2428. var optsSbRightSide = SRDotDX.gui.cHTML('#options_sbRightSide');
  2429. optsSbRightSide.ele().checked = SRDotDX.config.sbRightSide;
  2430. optsSbRightSide.on('click', function(){ SRDotDX.config.sbRightSide = this.checked; SRDotDX.gui.applySidebarUI(2); SRDotDX.config.save(false) });
  2431.  
  2432. var optsCbDisable = SRDotDX.gui.cHTML('#options_cbDisable');
  2433. optsCbDisable.ele().checked = SRDotDX.config.cbDisable;
  2434. optsCbDisable.on('click', function(){ SRDotDX.config.cbDisable = this.checked; SRDotDX.config.save(false) });
  2435.  
  2436. if (SRDotDX.config.markMyRaidsVisted) { optsMarkMyRaidsVisited.ele().checked = true }
  2437. if (SRDotDX.config.formatLinkOutput) { optsFormatLinkOutput.ele().checked = 'checked'; }
  2438. if (SRDotDX.config.markImportedVisited) { optsMarkImportedVisited.ele().checked = 'checked'; }
  2439. if (SRDotDX.config.whisperTo != '') { optsWhisperTo.ele().value = SRDotDX.config.whisperTo; }
  2440. if (SRDotDX.config.autoImportPaste) { optsAutoImportPaste.ele().checked = 'checked'; } else { optsConfirmForLargePaste.ele().disabled=true; optsConfirmPasteSize.ele().disabled=true}
  2441. if (SRDotDX.config.confirmForLargePaste) { optsConfirmForLargePaste.ele().checked = 'checked'; } else { optsConfirmPasteSize.ele().disabled=true }
  2442. if (SRDotDX.config.confirmPasteSize>0) { optsConfirmPasteSize.ele().value = SRDotDX.config.confirmPasteSize }
  2443. if (SRDotDX.config.confirmDeletes) { optsConfirmDeletes.ele().checked = 'checked' }
  2444. if (SRDotDX.config.bckColor) { SRDotDX.gui.cHTML('#SRDotDX_colors_background').ele().value = SRDotDX.config.bckColor }
  2445.  
  2446.  
  2447.  
  2448. switch(SRDotDX.config.unvisitedRaidPruningMode) {
  2449. case 0: rbUnvisitedPruningAggressive.ele().checked = true; break;
  2450. case 1: rbUnvisitedPruningModerate.ele().checked = true; break;
  2451. case 2: rbUnvisitedPruningSlow.ele().checked = true; break;
  2452. case 3: rbUnvisitedPruningNone.ele().checked = true; break;
  2453. default: rbUnvisitedPruningAggressive.ele().checked = true; break;
  2454. }
  2455.  
  2456. if (SRDotDX.config.hideVisitedRaids) {optsHideVRaids.ele().checked = 'checked'}
  2457. if (SRDotDX.config.hideBotLinks) { optsHideBRaids.ele().checked = 'checked' }
  2458. if (SRDotDX.config.hideRaidLinks) {
  2459. optsHideARaids.ele().checked = true;
  2460. optsHideVRaids.ele().disabled = true;
  2461. optsHideBRaids.ele().disabled = true;
  2462. }
  2463.  
  2464. optsConfirmDeletes.ele().addEventListener('click', function () { SRDotDX.config.confirmDeletes = this.checked });
  2465. optsAutoImportPaste.ele().addEventListener('click', function (){ SRDotDX.config.autoImportPaste = this.checked;
  2466. if(!this.checked){ optsConfirmForLargePaste.ele().checked = false; SRDotDX.config.confirmForLargePaste = false }
  2467. optsConfirmForLargePaste.ele().disabled = !this.checked;
  2468. optsConfirmPasteSize.ele().disabled = !this.checked;
  2469. });
  2470. optsConfirmForLargePaste.ele().addEventListener('click', function () { optsConfirmPasteSize.ele().disabled = !this.checked; SRDotDX.config.confirmForLargePaste = this.checked });
  2471. optsConfirmPasteSize.ele().addEventListener('change', function () { if(isNumber(this.value)) SRDotDX.config.confirmPasteSize = parseInt(this.value); else SRDotDX.gui.errorMessage('Paste size must be a number') });
  2472.  
  2473. optsMarkImportedVisited.ele().addEventListener("click", function() { SRDotDX.config.markImportedVisited = this.checked; });
  2474.  
  2475.  
  2476. optsWhisperTo.ele().addEventListener("change", function(){
  2477. console.log("[SRDotDX] Whisper person changed to " + this.value);
  2478. SRDotDX.config.whisperTo = this.value;
  2479. });
  2480. SRDotDX.gui.cHTML('#SRDotDX_colors_background').ele().addEventListener("change", function(){
  2481. SRDotDX.config.bckColor = this.value;
  2482. });
  2483.  
  2484. optsFormatLinkOutput.ele().addEventListener("click", function(){
  2485. SRDotDX.config.formatLinkOutput = this.checked;
  2486. });
  2487.  
  2488. optsMarkMyRaidsVisited.ele().addEventListener("click", function() {
  2489. SRDotDX.config.markMyRaidsVisted = this.checked;
  2490. });
  2491. optsHideARaids.ele().addEventListener("click",function() {
  2492. document.getElementById('SRDotDX_options_hideVisitedRaids').disabled = this.checked;
  2493. document.getElementById('SRDotDX_options_hideSeenRaids').disabled = this.checked;
  2494. SRDotDX.config.hideRaidLinks = this.checked;
  2495. SRDotDX.gui.cHTML('#SRDotDX_raidClass').html('.SRDotDX_raid {display: ' + (this.checked ? 'none !important' : 'block') + '}', true);
  2496. },true);
  2497. optsHideBRaids.ele().addEventListener("click",function() { SRDotDX.gui.switchBot() },true);
  2498. optsHideVRaids.ele().addEventListener("click",function() {
  2499. SRDotDX.config.hideVisitedRaids = this.checked;
  2500. SRDotDX.gui.cHTML('#SRDotDX_visitedRaidClass').html('.SRDotDX_visitedRaid {display: ' + (this.checked ? 'none !important' : 'block') + '}', true);
  2501. },true);
  2502.  
  2503. rbUnvisitedPruningAggressive.ele().addEventListener("click",function() { SRDotDX.config.unvisitedRaidPruningMode = 0 },true);
  2504. rbUnvisitedPruningModerate.ele().addEventListener("click",function() { SRDotDX.config.unvisitedRaidPruningMode = 1 },true);
  2505. rbUnvisitedPruningSlow.ele().addEventListener("click",function() { SRDotDX.config.unvisitedRaidPruningMode = 2 },true);
  2506. rbUnvisitedPruningNone.ele().addEventListener("click",function() { SRDotDX.config.unvisitedRaidPruningMode = 3 },true);
  2507.  
  2508. console.log("{!} After Event listeners func");
  2509.  
  2510. //CHAT TAB CLICK SCROLL (id=chat_tab, class=chat_message_window)
  2511. SRDotDX.gui.cHTML('#chat_tab').ele().addEventListener("click", function () {
  2512. setTimeout(function(){
  2513. var els = document.getElementsByClassName('chat_message_window'), el;
  2514. i = els.length;
  2515. while (i--) {
  2516. el = els[i]; console.log("[SRDotDX] Scrolling chat window " + el.scrollTop + " : " + el.scrollHeight);
  2517. el.scrollTop = el.scrollHeight;
  2518. }
  2519. SRDotDX.gui.selectRaidsToJoin();
  2520. },50);
  2521. },true);
  2522.  
  2523. //RAIDS TAB CLICK EVENT LISTENER
  2524. SRDotDX.gui.cHTML('#lots_tab').ele().addEventListener("click", function(){setTimeout(SRDotDX.gui.selectRaidsToJoin,50)},true);
  2525.  
  2526. //FriendShare
  2527. SRDotDX.gui.refreshFriends();
  2528.  
  2529. // Filtering tab
  2530. var i = 0, isChecked, raid, parentTableId = '', parentTable = '';
  2531. while (i < SRDotDX.raidArray.length) {
  2532. raid = SRDotDX.raids[SRDotDX.raidArray[i]];
  2533. parentTableId = 'FPX_options_cbs_' + raid.id;
  2534. parentTable = SRDotDX.gui.cHTML('tr').set({id: parentTableId}).html(' \
  2535. <td>' + raid.name + '</td> \
  2536. <td><input type="checkbox" id="cb_filter_' + raid.id + '_0' + '"/><label for="cb_filter_' + raid.id + '_0' + '"></label></td> \
  2537. <td><input type="checkbox" id="cb_filter_' + raid.id + '_1' + '"/><label for="cb_filter_' + raid.id + '_1' + '"></label></td> \
  2538. <td><input type="checkbox" id="cb_filter_' + raid.id + '_2' + '"/><label for="cb_filter_' + raid.id + '_2' + '"></label></td> \
  2539. <td><input type="checkbox" id="cb_filter_' + raid.id + '_3' + '"/><label for="cb_filter_' + raid.id + '_3' + '"></label></td> \
  2540. <td><input type="checkbox" id="cb_filter_' + raid.id + '_all' + '"/><label for="cb_filter_' + raid.id + '_all' + '"></label></td>', false);
  2541.  
  2542. if (raid.stat == 'H') parentTable.attach('to','FPXRaidFilterWhatGuild');
  2543. else if (raid.stat == 'ESH') parentTable.attach('to','FPXRaidFilterWhatSpecial');
  2544. else if (raid.size > 1 && raid.size < 50) parentTable.attach('to','FPXRaidFilterWhatSmall');
  2545. else if (raid.size == 50) parentTable.attach('to','FPXRaidFilterWhatMedium');
  2546. else if (raid.size == 100) parentTable.attach('to','FPXRaidFilterWhatLarge');
  2547. else if (raid.size == 250) parentTable.attach('to','FPXRaidFilterWhatEpic');
  2548. else if (raid.size == 500) parentTable.attach('to','FPXRaidFilterWhatColossal');
  2549. else if (raid.size == 800) parentTable.attach('to','FPXRaidFilterWhatGigantic');
  2550.  
  2551. for (var j=0; j<4; j++) {
  2552. var cbId = "cb_filter_" + raid.id + '_' + j; isChecked = !SRDotDX.config.filters[raid.id][j];
  2553. cb = SRDotDX.gui.cHTML('#' + cbId); cb.ele().checked = isChecked;
  2554. cb.ele().addEventListener("click",function() {
  2555. var raidId = '', diffIndex = '', reg = /cb_filter_([0-9a-z_]+)_([0-9])/i;
  2556. var ele = SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML; i = reg.exec(this.id);
  2557. if (i != null) { raidId = i[1]; diffIndex = parseInt(i[2]) }
  2558. SRDotDX.config.setFilter(raidId,diffIndex,!this.checked);
  2559. reg = new RegExp('.DotDX_fltChat_'+raidId+'_'+diffIndex+', ','g');
  2560. if(SRDotDX.config.filterChatLinks) {
  2561. if (!this.checked && !reg.test(ele)) ele = '.DotDX_fltChat_' + raidId + '_' + diffIndex + ', ' + ele;
  2562. else if (this.checked) ele = ele.replace(reg,'');
  2563. }
  2564. reg = new RegExp('.DotDX_fltList_'+raidId+'_'+diffIndex+', ','g');
  2565. if(SRDotDX.config.filterRaidList) {
  2566. if (!this.checked && !reg.test(ele)) ele = '.DotDX_fltList_' + raidId + '_' + diffIndex + ', ' + ele;
  2567. else if (this.checked) ele = ele.replace(reg,'');
  2568. }
  2569. SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML = ele;
  2570.  
  2571. var cbAllId = "cb_filter_" + raidId + '_all';
  2572.  
  2573. var f1 = SRDotDX.config.filters[raidId][0];
  2574. var f2 = SRDotDX.config.filters[raidId][1];
  2575. var f3 = SRDotDX.config.filters[raidId][2];
  2576. var f4 = SRDotDX.config.filters[raidId][3];
  2577.  
  2578. if ((!f1 && !f2 && !f3 && !f4) || (f1 && f2 && f3 && f4)) { var cb = SRDotDX.gui.cHTML('#' + cbAllId); cb.ele().checked = this.checked }
  2579. },true);
  2580. }
  2581. var allCbId = "cb_filter_" + raid.id + "_all";
  2582. isChecked = !(SRDotDX.config.filters[raid.id][0] && SRDotDX.config.filters[raid.id][1] && SRDotDX.config.filters[raid.id][2] && SRDotDX.config.filters[raid.id][3]);
  2583. var cb = SRDotDX.gui.cHTML('#' + allCbId); cb.ele().checked = isChecked;
  2584. cb.on("click",function() {
  2585. var reg = /cb_filter_([0-9a-z_]+)_all/i, i = reg.exec(this.id), raidId = '', j = 0, cbId, subcb, ele = SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML;
  2586. if (i != null) raidId = i[1];
  2587. while (j < 4) {
  2588. cbId = 'cb_filter_' + raidId + '_' + j; subcb = SRDotDX.gui.cHTML('#' + cbId);
  2589. subcb.ele().checked = this.checked; SRDotDX.config.filters[raidId][j] = !this.checked;
  2590. reg = new RegExp('.DotDX_fltChat_'+raidId+'_'+j+', ','g');
  2591. if(SRDotDX.config.filterChatLinks) {
  2592. if (!this.checked && !reg.test(ele)) ele = '.DotDX_fltChat_' + raidId + '_' + j + ', ' + ele;
  2593. else if (this.checked) ele = ele.replace(reg,'');
  2594. }
  2595. reg = new RegExp('.DotDX_fltList_'+raidId+'_'+j+', ','g');
  2596. if(SRDotDX.config.filterRaidList) {
  2597. if (!this.checked && !reg.test(ele)) ele = '.DotDX_fltList_' + raidId + '_' + j + ', ' + ele;
  2598. else if (this.checked) ele = ele.replace(reg,'');
  2599. }
  2600. SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML = ele; j++
  2601. }
  2602. },true); i++
  2603. }
  2604.  
  2605. var filterChatCb = SRDotDX.gui.cHTML('#SRDotDX_options_perRaidFilterLinks');
  2606. filterChatCb.on("click", function() { SRDotDX.config.filterChatLinks = this.checked; SRDotDX.gui.toggleFiltering();},true).ele().checked = SRDotDX.config.filterChatLinks;
  2607.  
  2608. var filterListCb = SRDotDX.gui.cHTML('#SRDotDX_options_perRaidFilterRaidList');
  2609. filterListCb.on("click", function() { SRDotDX.config.filterRaidList = this.checked; SRDotDX.gui.toggleFiltering();},true).ele().checked = SRDotDX.config.filterRaidList;
  2610.  
  2611. SRDotDX.gui.cHTML('li').set({class: 'rate'}).html('<a class="spritegame" href="http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons" onclick="SRDotDX.reload(); return false;">Reload Game</a>', false).attach('after','quicklinks_favorite_block');
  2612. SRDotDX.gui.cHTML('li').set({class: 'rate'}).html('<a id="hideWCtxt" class="spritegame" href="http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons" onclick="SRDotDX.gui.hideWC(false); return false;">'+(SRDotDX.config.hideWChat?'Show World Chat':'Hide World Chat')+'</a>', false).attach('after','quicklinks_play_later_block');
  2613.  
  2614. //Chat buttons overlay div
  2615. document.getElementsByClassName('chat_message_window')[0].setAttribute('id','chat_message_window');
  2616. var hd = document.getElementById('chat_window_header').getElementsByClassName('room_name_container')[0].innerHTML;
  2617. document.getElementById('chat_window_header').getElementsByClassName('room_name_container')[0].innerHTML = hd + '<div class="dotdx_chat_overlay">DotDX: <span id="dotdx_chat_overlay"></span></div>';
  2618. //for (i=0; i<chatPane.length; i++) chatPane[i].style.height = '434px';
  2619. if (!SRDotDX.config.cbDisable) SRDotDX.gui.cHTML('div').set({class: 'dotdx_chat_buttons'}).html('<span id="dotdx_chat_join" class="dotdx_chat_button">Join</span><input onkeyup="SRDotDX.gui.updateFilterTxt(this.value)" class="dotdx_chat_filter" type="text" value="' + SRDotDX.config.chatFilterString + '"><span class="dotdx_chat_button" id="dotdx_chat_import">Import</span><span class="dotdx_chat_button" id="dotdx_chat_reload">Reload</span><span class="dotdx_chat_button dotdx_chat_bot_button' + (SRDotDX.config.hideBotLinks ? " active" : "") + '" id="dotdx_chat_bot">Bot</span>',true).attach("after",'chat_message_window');
  2620. //setTimeout(SRDotDX.gui.FPXFilterRaidListByName, 2500);
  2621. setTimeout(SRDotDX.gui.BeginDeletingExpiredUnvisitedRaids, 10000);
  2622. //setTimeout(SRDotDX.purge, 20000);
  2623. SRDotDX.util.updateUser(true);
  2624. console.log('[DotDX] DotDeXtension loading complete');
  2625. SRDotDX.gui.doStatusOutput('Loaded successfully', 2000, false);
  2626. //setTimeout(SRDotDX.gui.chatResize,5000,SRDotDX.config.chatSize);
  2627. setTimeout(SRDotDX.config.save, 2000);
  2628. }
  2629. else { setTimeout(SRDotDX.gui.load, 500)}
  2630. },
  2631. fsEleClick: function(e) {
  2632. e = e || window.event;
  2633. var el = e.target.id.split(':');
  2634. if (el[0] == 'fs') {
  2635. SRDotDX.config.friendUsers[el[1]][el[2]] = e.target.checked;
  2636. }
  2637. },
  2638. FPXraidLinkClick: function(id) {
  2639. if(!SRDotDX.gui.joining) {
  2640. //SRDotDX.request.kongData = 'kongregate_username='+holodeck._active_user.username()+'&kongregate_user_id='+holodeck._active_user.id()+'&kongregate_game_auth_token='+holodeck._active_user.gameAuthToken();
  2641. SRDotDX.request.joinRaid(SRDotDX.config.raidList[id]);
  2642. }
  2643. else SRDotDX.gui.joinRaidList.push(SRDotDX.gui.GetRaid(id));
  2644. },
  2645. FPXLandButtonHandler: function (ele, name) {
  2646. var x = name.charAt(name.length-1), sign = 1;
  2647. if(name.charAt(3)!='p')sign=-1;
  2648. document.FPXLandForm.elements["tf_"+x].value = parseInt(document.FPXLandForm.elements["tf_"+x].value, 10)+(10*sign);
  2649. SRDotDX.gui.FPXLandUpdater();
  2650. },
  2651. FPXLandUpdater: function () {
  2652. var owned = [0,0,0,0,0,0,0,0,0], els = document.FPXLandForm, i = 9;
  2653. while (i--) owned[i] = parseInt(els.elements['tf_'+(i+1)].value,10);
  2654. var ratio = FPX.LandCostRatio(owned), best = 0, cn; i = 9;
  2655. while (i--) {
  2656. cn = document.getElementById('b_'+(i+1)).className;
  2657. if (cn.indexOf('landpmbutton ') == -1) document.getElementById('b_'+(i+1)).className = cn.replace('landpmbuttonhigh','landpmbutton');
  2658. //document.getElementById('b_'+(i+1)).prevClassName = 'landpmbutton';
  2659. if (ratio[i] > ratio[best]) best = i;
  2660. }
  2661. cn = document.getElementById('b_'+(best+1)).className;
  2662. document.getElementById('b_'+(best+1)).className = cn.replace('landpmbutton','landpmbuttonhigh');
  2663. },
  2664. FPXLandButtonSave: function () {
  2665. var els = document.FPXLandForm, i = 9;
  2666. while (i--) SRDotDX.config.FPXLandOwnedCount[i] = els.elements['tf_'+(i+1)].value;
  2667. SRDotDX.config.save(false);
  2668. SRDotDX.gui.doStatusOutput('Land count saved!');
  2669. },
  2670. FPXraidListMouseDown: function(e) {
  2671. e.preventDefault(); e.stopPropagation();
  2672. var classtype = e.target.className, con; e = e || window.event;
  2673. console.log("[SRDotDX] Clicked on el with class:" + classtype + ", mouse button:" + e.which);
  2674. if (e.which == 1) {
  2675. switch (classtype) {
  2676. case 'dotdxRaidListDelete': SRDotDX.gui.deleteRaid(e.target.parentNode); break;
  2677. case 'DotDX_RaidLink': SRDotDX.gui.FPXraidLinkClick(e.target.parentNode.getAttribute("raidid")); break;
  2678. }
  2679. }
  2680. },
  2681. chatWindowContextMenu: function (e) {
  2682. e = e || window.event;
  2683. var clickedClass = e.target.className.split(" "), nick = "";
  2684. console.log('[DotDX] Chat window menu [' + e.target.className + ']');
  2685. if (clickedClass[0] == 'username' && clickedClass[1] != 'spritesite') {
  2686. e.preventDefault(); e.stopPropagation();
  2687. nick = clickedClass[1];
  2688. var frTxt = 'Friend', size = '196px';
  2689. if (SRDotDX.config.friendUsers[nick]) frTxt = 'unFriend', size = '210px';
  2690. var uMenu = document.getElementById(clickedClass[clickedClass.length-1]);
  2691. uMenu.innerHTML = '<span class="user dotdx_name_'+nick+'">'+nick+'</span><span class="user dotdx_friend_'+nick+'">'+frTxt+'</span><span class="user dotdx_slap_'+nick+'">Slap</span><span class="user dotdx_mute_'+nick+'">Mute</span>';
  2692. uMenu.style.maxWidth = "220px";
  2693.  
  2694. }
  2695. return false;
  2696. },
  2697. chatWindowMouseDown: function (e) {
  2698. e = e || window.event;
  2699. var clickedClass = e.target.className.split(" "), nick = "";
  2700. console.log('[DotDX] Chat window (' + e.which + ') [' + e.target.className + ']');
  2701.  
  2702. switch (clickedClass[0]) {
  2703. case 'username':
  2704. if (clickedClass[1] != 'spritesite') {
  2705. e.preventDefault(); e.stopPropagation();
  2706. nick = clickedClass[1];
  2707. if (e.which == 1) {
  2708. console.log("[DotDX] Whisp to user with nick [" + nick + "]");
  2709. holodeck.chatWindow().insertPrivateMessagePrefixFor(nick);
  2710. }
  2711. }
  2712. break;
  2713. case 'chatRaidLink':
  2714. if(e.which == 1) {
  2715. e.preventDefault(); e.stopPropagation();
  2716. var raid = clickedClass[1].split("|");
  2717. var rObj = {id:raid[0],hash:raid[1],boss:raid[2],diff:raid[3]};
  2718. if(!SRDotDX.gui.joining) {
  2719. //SRDotDX.request.kongData = 'kongregate_username='+holodeck._active_user.username()+'&kongregate_user_id='+holodeck._active_user.id()+'&kongregate_game_auth_token='+holodeck._active_user.gameAuthToken();
  2720. SRDotDX.request.joinRaid(rObj);
  2721. }
  2722. else SRDotDX.gui.joinRaidList.push(rObj);
  2723. }
  2724. break;
  2725. case 'dotdx_chat_button':
  2726. if(e.which == 1) {
  2727. switch(e.target.id) {
  2728. case 'dotdx_chat_join': SRDotDX.gui.joinSelectedRaids(true); break;
  2729. case 'dotdx_chat_import': SRDotDX.gui.importFromServer(); break;
  2730. case 'dotdx_chat_bot': SRDotDX.gui.switchBot(); break;
  2731. case 'dotdx_chat_reload': SRDotDX.reload(); break;
  2732. }
  2733. }
  2734. break;
  2735. case 'user':
  2736. if(e.which == 1) {
  2737. var classTokens = clickedClass[1].split("_");
  2738. switch(classTokens[1]) {
  2739. case 'slap':
  2740. var num = Math.round((Math.random()*(SRDotDX.slapSentences.length-1)));
  2741. SRDotDX.gui.FPXdoWork('*' + SRDotDX.slapSentences[num].replace(/<nick>/g,classTokens[2]) + '*');
  2742. break;
  2743. case 'mute':
  2744. SRDotDX.config.mutedUsers[classTokens[2]] = true;
  2745. SRDotDX.config.save(false);
  2746. break;
  2747. case 'friend':
  2748. if (typeof SRDotDX.config.friendUsers[classTokens[2]] == 'object') delete SRDotDX.config.friendUsers[classTokens[2]];
  2749. else SRDotDX.config.friendUsers[classTokens[2]] = [false,false,false,false,true];
  2750. SRDotDX.config.save(false);
  2751. SRDotDX.gui.refreshFriends();
  2752. break;
  2753. case 'name':
  2754. holodeck.showMiniProfile(classTokens[2]);
  2755. break;
  2756. }
  2757. e.target.parentNode.style.maxWidth = "0";
  2758. }
  2759. }
  2760. },
  2761. FPXraidLinkMouseDown: function (e,param1,param2,isChat) {
  2762. e = e || window.event;
  2763. if(isChat && e.which == 1) SRDotDX.gui.FPXraidLinkClick(param1);
  2764. },
  2765. raidListItemUpdateTimeSince: function(id) {
  2766. var raid = SRDotDX.config.raidList[id];
  2767. if (typeof raid == 'object') document.getElementById('timeSince_' + id).innerHTML = timeSince(new Date(raid.timeStamp))
  2768. },
  2769. raidListItemUpdate: function(id) {
  2770. var raid = SRDotDX.config.raidList[id];
  2771. if (typeof raid == 'object') {
  2772. var ele = document.getElementById("raid_list").firstChild;
  2773. while (ele) {
  2774. if (ele.getAttribute("raidid") == id) { ele.getElementsByClassName("DotDX_RaidListVisited")[0].innerHTML = (raid.visited ? '&#9733;':''); break; }
  2775. ele = ele.nextSibling;
  2776. }
  2777. }
  2778. else SRDotDX.gui.raidListItemRemoveById(id);
  2779. },
  2780. raidListItemRemoveById: function (id) {
  2781. var ele = document.getElementById('DotDX_' + id);
  2782. if (ele) ele.parentNode.removeChild(ele);
  2783. },
  2784. toggleCSS: function (p) {
  2785. if (p) {
  2786. document.head.removeChild(document.getElementById(p.id));
  2787. SRDotDX.gui.cHTML("style").set({type: "text/css", id: p.id}).text(p.cls).attach("to",document.head);
  2788. }
  2789. },
  2790. toggleRaid: function(type,id,tog) {
  2791. var d = document.getElementsByClassName("DotDX_raidId_" + id);
  2792. if (typeof SRDotDX.config.raidList[id] == 'object') {
  2793. var raid = SRDotDX.config.raidList[id];
  2794. raid = SRDotDX.getRaidDetails("&kv_difficulty="+raid.diff+"&kv_hash="+raid.hash+"&kv_raid_boss="+raid.boss+"&kv_raid_id="+raid.id);
  2795. }
  2796. var i = d.length;
  2797. while (i--) {
  2798. if (tog && d[i].className.indexOf('DotDX_' + type + 'Raid') < 0) d[i].className += ' DotDX_' + type + 'Raid';
  2799. else if (!tog && d[i].className.indexOf('DotDX_' + type + 'Raid') >= 0) d[i].className = d[i].className.replace(new RegExp('DotDX_' + type + 'Raid( |$)','i'),'');
  2800. if (typeof raid == 'object') d[i].getElementsByTagName('a')[0].innerHTML = raid.linkText();
  2801. }
  2802. }
  2803. },
  2804. nukeRaid: function (id) { if (SRDotDX.config.raidList[id]) { SRDotDX.config.raidList[id].nuked = true; SRDotDX.gui.toggleRaid('nuked', id, true) } },
  2805. searchPatterns: {
  2806. z1: ['kobold','scorp','ogre'],
  2807. z2: ['rhino','alice','lurker'],
  2808. z3: ['4ogre','squid','batman','drag','tainted'],
  2809. z4: ['bmane','3dawg','hydra','sircai','tyranthius'],
  2810. z5: ['ironclad','zombiehorde','stein','bogstench','nalagarst'],
  2811. z6: ['gunnar','nidhogg','kang','ulfrik','kalaxia'],
  2812. z7: ['maraak','erakka_sak','wexxa','guilbert','bellarius'],
  2813. z8: ['hargamesh','grimsly','rift','sisters','mardachus'],
  2814. z9: ['mesyra','nimrod','phaedra','tenebra','valanazes'],
  2815. 'z1-9': ['kobold','scorp','ogre','rhino','alice','lurker','4ogre','squid','batman','drag','tainted','bmane','3dawg','hydra','sircai','tyranthius','ironclad','zombiehorde','stein','bogstench','nalagarst','gunnar','nidhogg','kang','ulfrik','kalaxia','maraak','erakka_sak','wexxa','guilbert','bellarius','hargamesh','grimsly','rift','sisters','mardachus','mesyra','nimrod','phaedra','tenebra','valanazes'],
  2816. 'z9.5': ['pumpkin','jacksrevenge1'],
  2817. z10: ['krugnug','tomb_gargoyle','leonine_watcher','centurion_marius','caracalla'],
  2818. z14: ['zugen','gulkinari','verkiteia','cannibal_barbarians'],
  2819. z15: ['korxun','xerkara','shaar','nereidon','drulcharus'],
  2820. farm: ['maraak','erakka_sak','wexxa','guilbert','bellarius','drag','tainted','ogre','scorp','baroness'],
  2821. flute: ['kobold','scorp','ogre','rhino','alice','lurker','4ogre','squid','batman','drag','tainted','harpy','spider','djinn','evilgnome','basilisk','roc','gladiators','chimera','crabshark','gorgon','warewolfpack','blobmonster','giantgolem'],
  2822. tower: ['thaltherda','hurkus','malleus'],
  2823. small: ['kobold','rhino','bmane','4ogre','serpina','dragons_lair','gunnar','hargamesh','ironclad','krugnug','maraak','thaltherda','zugen','nereidon','mestr_rekkr_rematch'],
  2824. medium: ['alice','erakka_sak','grimsly','3dawg','scorp','nidhogg','tomb_gargoyle','squid','tisiphone','zombiehorde','baroness','hurkus','gulkinari','korxun','drunken_ragunt'],
  2825. large: ['ogre','batman','hydra','kang','leonine_watcher','lurker','rift','stein','wexxa','teremarthu','zralkthalat','malleus','verkiteia','drulcharus','gigantomachy'],
  2826. epic: ['bogstench','centurion_marius','drag','tainted','guilbert','pumpkin','jacksrevenge1','mesyra','nimrod','phaedra','sircai','sisters','ulfrik','frogmen_assassins','burbata','yydians_sanctuary','grundus','shaar','tuxargus','nylatrix','rannveig'],
  2827. colossal: ['bellarius','caracalla','kalaxia','tyranthius','mardachus','nalagarst','tenebra','valanazes','siculus','ruzzik','cannibal_barbarians','vortex_abomination','xerkara','keron','clockwork_dragon','krxunara'],
  2828. gigantic: ['imryx','trekex','gataalli_huxac'],
  2829. glyph: ['maraak','erakka_sak','wexxa','guilbert','bellarius'],
  2830. citadel: ['thaltherda','hurkus','malleus','yydians_sanctuary','clockwork_dragon','krxunara'],
  2831. festival: ['vortex_abomination','drunken_ragunt','mestr_rekkr_rematch'],
  2832. aquatic: ['dirthax','frogmen_assassins','lurker','nidhogg','crabshark','squid','thaltherda','nereidon','krxunara','trekex'],
  2833. beastman: ['bmane','burbata','frogmen_assassins','batman','war_boar','hargamesh','hurkus','krugnug','malleus','scorp','ruzzik','squid','korxun','shaar','nereidon','drulcharus','trekex'],
  2834. bludheim: ['gunnar','nidhogg','kang','ulfrik','kalaxia'],
  2835. colosseum: ['gladiators','serpina','crabshark','tisiphone','chimera'],
  2836. construct: ['cedric','erakka_sak','giantgolem','leonine_watcher','tomb_gargoyle','stein','yydians_sanctuary','clockwork_dragon'],
  2837. demon: ['apoc_demon','3dawg','tyranthius','lunacy','salome','sircai','blobmonster','malchar','zralkthalat','krxunara','adrastos'],
  2838. dragon: ['bellarius','corrupterebus','dragons_lair','echidna','drag','kalaxia','krykagrius','mardachus','mesyra','nalagarst','nimrod','phaedra','rhalmarius_the_despoiler','tainted','tenebra','thaltherda','tisiphone','grundus','valanazes','verkiteia','winter_kessov','xerkara','nereidon','drulcharus','keron','tuxargus','nylatrix','clockwork_dragon','imryx'],
  2839. giant: ['gigantomachy','gataalli_huxac'],
  2840. human: ['agony','rhino','gladiators','baroness','warewolfpack','alice','cannibal_barbarians','guilbert','gunnar','pumpkin','jacksrevenge1','lunacy','slaughterers','ulfrik','mestr_rekkr_rematch','rannveig','adrastos'],
  2841. magical: ['djinn','grimsly','hargamesh','fairy_prince','rift','sisters','vortex_abomination','grundus'],
  2842. ogre: ['ogre','4ogre','felendis','zugen','korxun','drunken_ragunt'],
  2843. qwiladrian: ['gulkinari','teremarthu','vortex_abomination'],
  2844. ryndor: ['bmane','3dawg','hydra','sircai','tyranthius'],
  2845. siege: ['echidna','ulfrik','yydians_sanctuary','drunken_ragunt'],
  2846. undead: ['agony','bogstench','serpina','ironclad','malleus','nalagarst','stein','siculus','zombiehorde','caracalla','centurion_marius'],
  2847. underground: ['maraak','erakka_sak','wexxa','guilbert','bellarius','spider','tomb_gargoyle','leonine_watcher','centurion_marius','caracalla','dragons_lair','kang','3dawg','lurker','salome','stein','imryx']
  2848. },
  2849. shortcuts: {
  2850. bb: { n: 'bb', bn: 'BB', desc: 'Briseis\' Blessing [magic]' },
  2851. bok: { n: 'bok', bn: 'BoK', desc: 'Book of Knowledge [consumable]' },
  2852. bsi: { n: 'bsi', bn: 'BSI', desc: 'Battle Strength Index<br>(Base Attack + Base Defense) / Level' },
  2853. ck: { n: 'ck', bn: 'CK', desc: 'Chryseis\' Kiss [magic]' },
  2854. dah: { n: 'dah', bn: 'Dah', desc: 'Dahrizon [general]' },
  2855. dl: { n: 'dl', bn: 'DL', desc: 'Dragons Lair [raid]' },
  2856. gg: { n: 'gg', bn: 'GG', desc: 'Golden Garden [equip]'},
  2857. gid: { n: 'gid', bn: 'GID', desc: 'Greater Impending Doom [magic]' },
  2858. gl: { n: 'gl', bn: 'GL', desc: 'Greenleaf [equip]'},
  2859. il: { n: 'il', bn: 'IL', desc: 'Insanity Laughs [magic]' },
  2860. lsi: { n: 'lsi', bn: 'LSI', desc: 'Leveling Speed Index<br>(Base Stamina * 2 + Base Energy) / Level' },
  2861. mach: { n: 'mach', bn: 'Mach', desc: 'Machaon the Healer [general]' },
  2862. nm: { n: 'nm', bn: 'NM', desc: 'Nightmare [difficulty]' },
  2863. pc: { n: 'pc', bn: 'PC', desc: 'Planet Coins [currency]' },
  2864. perc: { n: 'perc', bn: 'perc', desc: 'Perception [stat]' },
  2865. qm: { n: 'qm', bn: 'QM', desc: 'Quicken Mind [magic]' },
  2866. sock: { n: 'sock', bn: 'SoCK', desc: 'Sword of Conquered Kingdoms [equip]' },
  2867. sor: { n: 'sor', bn: 'SoR', desc: 'Shield of Ryndor [equip]' },
  2868. sp: { n: 'sp', bn: 'SP', desc: 'Stat Points [stat]' },
  2869. wr: { n: 'wr', bn: 'WR', desc: 'World Raid [raid]' }
  2870. },
  2871. raids: {
  2872. adrastos: {name: 'Adrastos of the Kavala ', shortname: 'Adrastos', id: 'adrastos', type: 'Human, Demon', stat: 'H', size:101, nd:5, duration:192, health: [5000000000,6250000000,8750000000,10000000000,0,0], lt: ['keron','keron','keron','keron']},
  2873. agony: {name: 'Agony', shortname: 'Agony', id: 'agony', type: 'Undead, Human', stat: 'H', size:101, nd:5, duration:168, health: [700000000,875000000,1120000000,1400000000,0,0]},
  2874. apoc_demon: {name: 'Apocolocyntosised Demon', shortname: 'Apoc', id: 'apoc_demon', type: 'Demon', stat: 'H', size:50, nd:3, duration:144, health: [500000000,750000000,1000000000,2000000000,0,0], lt: ['apoc','apoc','apoc','apoc']},
  2875. djinn: {name: 'Al-Azab', shortname: 'Azab', id: 'djinn', type: 'Magical Creature', stat: 'H', size:100, nd:4, duration:168, health: [55000000,68750000,88000000,110000000,0,0]},
  2876. spider: {name: 'Arachna', shortname: 'Arachna', id: 'spider', type: 'Underground', stat: 'H', size:50, nd:3, duration:144, health: [22000000,27500000,35200000,44000000,0,0]},
  2877. rhino: {name: 'Ataxes', shortname: 'Ataxes', id: 'rhino', type: 'Human', stat: 'S', size:10, nd:2, duration:120, health: [2000000,2500000,3200000,4000000,0,0]},
  2878. gladiators: {name: 'Batiatus Gladiators ', shortname: 'Gladiators', id: 'gladiators', type: 'Colosseum, Human', stat: 'H', size:10, nd:2, duration:120, health: [12000000,15000000,19200000,24000000,0,0]},
  2879. bellarius: {name: 'Bellarius the Guardian', shortname: 'Bellarius', id: 'bellarius', type: 'Dragon, Underground',stat: 'S', size:500, nd:6, duration:96, health: [900000000,1125000000,1440000000,1800000000,0,0]},
  2880. baroness: {name: 'The Baroness', shortname: 'Baroness', id: 'baroness', type: 'Human', stat: 'S', size:50, nd:3, duration:60, health: [68000000,85000000,108800000,136000000,0,0]},
  2881. werewolfpack: {name: 'The Black Moon Pack', shortname: 'Black Moon', id: 'werewolfpack', type: 'Human', stat: 'H', size:50, nd:3, duration:144, health: [135000000,168750000,216000000,270000000,0,0]},
  2882. alice: {name: 'Bloody Alice', shortname: 'Alice', id: 'alice', type: 'Human', stat: 'S', size:50, nd:3, duration:120, health: [15000000,18750000,24000000,30000000,0,0]},
  2883. bogstench: {name: 'Bogstench', shortname: 'Bogstench', id: 'bogstench', type: 'Undead', stat: 'S', size:250, nd:5, duration:96, health: [450000000,562500000,720000000,900000000,0,0]},
  2884. '4ogre': {name: 'Briareus the Butcher', shortname: 'Briareus', id: '4ogre', type: 'Ogre', stat: 'S', size:10, nd:2, duration:72, health: [4500000,5625000,7200000,9000000,0,0]},
  2885. bmane: {name: 'Bloodmane', shortname: 'Bloodmane', id: 'bmane', type: 'Beastman, Ryndor', stat: 'S', size:10, nd:2, duration:72, health: [7000000,8750000,11200000,14000000,0,0]},
  2886. burbata: {name: 'Burbata the Spine-Crusher', shortname: 'Burbata', id: 'burbata', type: 'Beastman', stat: 'S', size:250, nd:5, duration:96, health: [1000000000,2000000000,3500000000,5000000000,0,0], lt: ['z10','z10','z10','z10']},
  2887. cannibal_barbarians:{name: 'Cannibal Barbarians', shortname: 'Cannibals', id: 'cannibal_barbarians', type: 'Human', stat: 'S', size:500, nd:6, duration:128, health: [60000000000,90000000000,180000000000,240000000000,0,0], lt: ['canib','canib','canib','canib']},
  2888. cedric: {name: 'Cedric the Smashable', shortname: 'Cedric', id: 'cedric', type: 'Construct', stat: 'ESH', size:90000,nd:0, duration:24, health: ['Unlimited','Unlimited','Unlimited','Unlimited','Unlimited','Unlimited']},
  2889. caracalla: {name: 'Caracalla', shortname: 'Caracalla', id: 'caracalla', type: 'Undead, Underground',stat: 'S', size:500, nd:6, duration:128, health: [50000000000,75000000000,150000000000,200000000000,0,0], lt: ['cara','cara','cara','cara']},
  2890. harpy: {name: 'Celeano', shortname: 'Celenao', id: 'harpy', type: '', stat: 'H', size:10, nd:2, duration:120, health: [3000000,3750000,4800000,6000000,0,0]},
  2891. centurion_marius: {name: 'Centurion Marius', shortname: 'Marius', id: 'centurion_marius', type: 'Undead, Underground',stat: 'S', size:250, nd:5, duration:96, health: [10000000000,12000000000,16000000000,40000000000,0,0], lt: ['z10','z10','z10','z10']},
  2892. kobold: {name: 'Chieftain Horgrak', shortname: 'Horgrak', id: 'kobold', type: '', stat: 'S', size:10, nd:2, duration:168, health: [150000,187500,240000,300000,0,0]},
  2893. clockwork_dragon: {name: 'Clockwork Dragon', shortname: 'Clock Dragon', id: 'clockwork_dragon', type: 'Construct, Dragon', stat: 'S', size:500, nd:6, duration:128, health: [70000000000,140000000000,210000000000,280000000000], lt: ['clock','clock','clock','clock']},
  2894. corrupterebus: {name: 'Corrupted Erebus', shortname: 'Cbus', id: 'corrupterebus', type: 'Dragon', stat: 'ESH', size:90000,nd:0, duration:96, health: ['Unlimited','Unlimited','Unlimited','Unlimited','Unlimited','Unlimited']},
  2895. serpina: {name: 'Countess Serpina', shortname: 'Serp', id: 'serpina', type: 'Colosseum, Undead', stat: 'E', size:15, nd:2, duration:5, health: [75000000,112500000,150000000,187500000,0,0]},
  2896. basilisk: {name: 'Deathglare', shortname: 'Deathglare', id: 'basilisk', type: '', stat: 'H', size:50, nd:3, duration:144, health: [45000000,56250000,72000000,90000000,0,0]},
  2897. dirthax: {name: 'Dirthax', shortname: 'Dirthax', id: 'dirthax', type: 'Aquatic', stat: 'H', size:100, nd:4, duration:168, health: [550000000,687500000,880000000,1100000000,0,0]},
  2898. dragons_lair: {name: 'Dragons Lair', shortname: 'Lair', id: 'dragons_lair', type: 'Dragon, Underground',stat: 'S', size:13, nd:2, duration:5, health: [100000000,500000000,1000000000,1500000000,0,0], lt: ['nDl','hDl','lDl','nmDl']},
  2899. drulcharus: {name: 'Drulcharus', shortname: 'Drulcharus', id: 'drulcharus', type: 'Dragon, Beastman', stat: 'S', size:100, nd:5, duration:72, health: [10000000000,15000000000,20000000000,25000000000,0,0], lt: ['z15hi','z15hi','z15hi','z15hi']},
  2900. drunken_ragunt: {name: 'Drunken Ragunt', shortname: 'Ragunt', id: 'drunken_ragunt', type: 'Siege, Ogre', stat: 'S', size:50, nd:5, duration:60, health: [8500000000,14450000000,18700000000,25500000000,0,0], lt: ['rag','rag','rag','rag']},
  2901. echidna: {name: 'Echidna', shortname: 'Echidna', id: 'echidna', type: 'Dragon, Siege', stat: 'ESH', size:90000,nd:0, duration:96, health: ['Unlimited','Unlimited','Unlimited','Unlimited','Unlimited','Unlimited']},
  2902. erakka_sak: {name: 'Erakka-Sak', shortname: 'Erakka', id: 'erakka_sak', type: 'Underground, Construct',stat: 'S', size:50, nd:3, duration:60, health: [62000000,77500000,99200000,124000000,0,0]},
  2903. giantgolem: {name: 'Euphronios', shortname: 'Euphronios', id: 'giantgolem', type: 'Construct', stat: 'H', size:101, nd:5, duration:168, health: [450000000,562500000,720000000,900000000,0,0]},
  2904. echthros: {name: 'Echthros', shortname: 'Echty', id: 'echthros', type: '', stat: 'ESH', size:90000,nd:2, duration:96, health: ['Unlimited','Unlimited','Unlimited','Unlimited','Unlimited','Unlimited']},
  2905. drag: {name: 'Erebus the Black', shortname: 'Erebus', id: 'drag', type: 'Dragon', stat: 'S', size:250, nd:5, duration:168, health: [150000000,187500000,240000000,300000000,0,0]},
  2906. frogmen_assassins: {name: 'Frog-Men Assassins', shortname: 'Frog-Men', id: 'frogmen_assassins', type: 'Beastman, Aquatic', stat: 'S', size:250, nd:5, duration:96, health: [16000000000,24000000000,32000000000,64000000000,0,0], lt: ['cara','cara','cara','cara']},
  2907. felendis: {name: 'Felendis & Shaoquin', shortname: 'Banhammer', id: 'felendis', type: 'Ogre', stat: 'H', size:100, nd:4, duration:168, health: [441823718,549238221,707842125,888007007,0,0]},
  2908. gataalli_huxac: {name: 'Gataalli Huxac', shortname: 'Gataalli', id: 'gataalli_huxac', type: 'Giant', stat: 'S', size:800, nd:6, duration:128, health: [375000000000,750000000000,1125000000000,1500000000000], lt: ['u','u','u','u']},
  2909. ogre: {name: 'General Grune', shortname: 'Grune', id: 'ogre', type: 'Ogre', stat: 'S', size:100, nd:4, duration:172, health: [20000000,25000000,32000000,40000000,0,0]},
  2910. korxun: {name: 'General Korxun', shortname: 'Korxun', id: 'korxun', type: 'Beastman, Ogre', stat: 'S', size:50, nd:4, duration:60, health: [8000000000,12000000000,16000000000,20000000000,0,0], lt: ['z15lo','z15lo','z15lo','z15lo']},
  2911. dreadbloom: {name: 'Giant Dreadbloom', shortname: 'Dreadbloom', id: 'dreadbloom', type: '', stat: 'H', size:101, nd:5, duration:192, health: [900000000,1125000000,1440000000,1800000000,0,0]},
  2912. gigantomachy: {name: 'Gigantomachy', shortname: 'Gigantomachy', id: 'gigantomachy', type: 'Giant', stat: 'S', size:100, nd:5, duration:72, health: [25000000000,50000000000,75000000000,100000000000], lt: ['gig','gig','gig','gig']},
  2913. batman: {name: 'Gravlok the Night-Hunter', shortname: 'Gravlok', id: 'batman', type: 'Beastman', stat: 'S', size:100, nd:4, duration:72, health: [50000000,62500000,80000000,100000000,0,0]},
  2914. evilgnome: {name: 'Groblar Deathcap', shortname: 'Groblar', id: 'evilgnome', type: '', stat: 'H', size:10, nd:2, duration:120, health: [6000000,7500000,9600000,12000000,0,0]},
  2915. grundus: {name: 'Grundus', shortname: 'Grundus', id: 'grundus', type: 'Dragon, Magical Creature',stat: 'H', size:101, nd:5, duration:72, health: [800000000,1600000000,4000000000,12000000000]},
  2916. guilbert: {name: 'Guilbert the Mad', shortname: 'Guilbert', id: 'guilbert', type: 'Underground, Human', stat: 'S', size:250, nd:5, duration:96, health: [550000000,687500000,880000000,1100000000,0,0]},
  2917. gulkinari: {name: 'Gulkinari', shortname: 'Gulkinari', id: 'gulkinari', type: 'Qwiladrian', stat: 'S', size:50, nd:4, duration:60, health: [7500000000,9375000000,12000000000,15000000000,0,0], lt: ['gulk','gulk','gulk','gulk']},
  2918. gunnar: {name: 'Gunnar the Berserk', shortname: 'Gunnar', id: 'gunnar', type: 'Bludheim, Human', stat: 'S', size:10, nd:2, duration:48, health: [12000000,15000000,19200000,24000000,0,0]},
  2919. war_boar: {name: 'Hammer', shortname: 'Hammer', id: 'war_boar', type: 'Beastman', stat: 'H', size:50, nd:3, duration:144, health: [220000000,275000000,352000000,440000000,0,0]},
  2920. hargamesh: {name: 'Hargamesh', shortname: 'Hargamesh', id: 'hargamesh', type: 'Beastman, Magical Creature',stat: 'S', size:10, nd:2, duration:48, health: [18000000,22500000,28800000,36000000,0,0]},
  2921. grimsly: {name: 'Headmaster Grimsly', shortname: 'Grimsly', id: 'grimsly', type: 'Magical Creature', stat: 'S', size:50, nd:3, duration:60, health: [72000000,90000000,115200000,144000000,0,0]},
  2922. hurkus: {name: 'Hurkus the Eviscerator', shortname: 'Hurkus', id: 'hurkus', type: 'Beastman', stat: 'S', size:50, nd:4, duration:60, health: [2812500000,4218750000,5625000000,11250000000,0,0], lt: ['hurk','hurk','hurk','hurk']},
  2923. hydra: {name: 'Hydra', shortname: 'Hydra', id: 'hydra', type: 'Ryndor', stat: 'S', size:100, nd:4, duration:72, health: [65000000,81250000,104000000,130000000,0,0]},
  2924. imryx: {name: 'Imryx the Incinerator', shortname: 'Imryx', id: 'imryx', type: 'Underground, Dragon',stat: 'S', size:800, nd:6, duration:128, health: [180000000000,360000000000,540000000000,720000000000,0,0], lt: ['imx','imx','imx','imx']},
  2925. ironclad: {name: 'Ironclad', shortname: 'Ironclad', id: 'ironclad', type: 'Undead', stat: 'S', size:10, nd:2, duration:48, health: [10000000,12500000,16000000,20000000,0,0]}, //0.5/0.625/0.8/1
  2926. pumpkin: {name: 'Jack', shortname: 'Jack', id: 'pumpkin', type: 'Human', stat: 'S', size: 250, nd:6, duration:48 , health: [1000000000,1500000000,2000000000,3000000000], lt: ['njack','hjack','ljack','nmjack']},
  2927. jacksrevenge1: {name: 'Jack\'s Revenge', shortname: 'Revenge', id: 'jacksrevenge1', type: 'Human', stat: 'S', size: 250, nd:6, duration:48 , health: [5000000000,7500000000,10000000000,15000000000], lt: ['njr','hjr','ljr','nmjr']},
  2928. kang: {name: 'Kang-Gsod', shortname: 'Kang', id: 'kang', type: 'Bludheim, Underground', stat: 'S', size:100, nd:4, duration:72, health: [95000000,118750000,152000000,190000000,0,0]},
  2929. '3dawg': {name: 'Kerberos', shortname: 'Kerberos', id: '3dawg', type: 'Demon, Underground, Ryndor', stat: 'S', size:50, nd:3, duration:72, health: [35000000,43750000,56000000,70000000,0,0]},
  2930. keron: {name: 'Keron the Sky-Shaker', shortname: 'Keron', id: 'keron', type: 'Dragon', stat: 'H', size:101, nd:6, duration:192, health: [15000000000,18750000000,24000000000,30000000000,0,0], lt: ['keron','keron','keron','keron']},
  2931. kessovtowers: {name: 'Kessov Towers', shortname: 'Towers', id: 'kessovtowers', type: 'Siege', stat: 'ESH', size:90000,nd:0, duration:120, health: ['Unlimited','Unlimited','Unlimited','Unlimited','Unlimited','Unlimited']},
  2932. kessovtower: {name: 'Treachery and the Tower', shortname: 'Treachery', id: 'kessovtower', type: 'Siege', stat: 'ESH', size:90000,nd:0, duration:24, health: ['Unlimited','Unlimited','Unlimited','Unlimited','Unlimited','Unlimited']},
  2933. kessovforts: {name: 'Kessov Forts', shortname: 'Forts', id: 'kessovforts', type: 'Siege', stat: 'ESH', size:90000,nd:0, duration:120, health: ['Unlimited','Unlimited','Unlimited','Unlimited','Unlimited','Unlimited']},
  2934. kessovcastle: {name: 'Kessov Castle', shortname: 'Castle', id: 'kessovcastle', type: 'Siege', stat: 'ESH', size:90000,nd:0, duration:144, health: ['Unlimited','Unlimited','Unlimited','Unlimited','Unlimited','Unlimited']},
  2935. kalaxia: {name: 'Kalaxia the Far-Seer', shortname: 'Kalaxia', id: 'kalaxia', type: 'Dragon, Bludheim', stat: 'S', size:500, nd:6, duration:96, health: [800000000,1000000000,1280000000,1600000000,0,0]},
  2936. krugnug: {name: 'Krugnug', shortname: 'Krugnug', id: 'krugnug', type: 'Beastman', stat: 'S', size:25, nd:4, duration:48, health: [1000000000,1500000000,2000000000,4000000000,0,0], lt: ['z10','z10','z10','z10']},
  2937. krxunara: {name: 'Kr\'xunara of the Bloody Waves',shortname: 'Kr\'xunara', id: 'krxunara', type: 'Aquatic, Demon', stat: 'S', size:500, nd:6, duration:128, health: [62500000000,125000000000,187500000000,250000000000], lt: ['krx','krx','krx','krx']},
  2938. krykagrius: {name: 'Krykagrius', shortname: 'Kryk', id: 'krykagrius', type: 'Dragon', stat: 'ESH', size:90000,nd:0, duration:72, health: ['Unlimited','Unlimited','Unlimited','Unlimited','Unlimited','Unlimited']},
  2939. legion_of_darkness: {name: 'Legions of Darkness', shortname: 'Darkness', id: 'legion_of_darkness', type: 'Human', stat: 'S', size:250, nd:5, duration:96, health: [20000000000,40000000000,60000000000,80000000000], lt: ['u','u','u','u']},
  2940. leonine_watcher: {name: 'Leonine', shortname: 'Leonine', id: 'leonine_watcher', type: 'Underground, Construct',stat: 'S', size:100, nd:5, duration:48, health: [4000000000,6000000000,8000000000,16000000000,0,0], lt: ['z10','z10','z10','z10']},
  2941. tyranthius: {name: 'Lord Tyranthius', shortname: 'Tyr', id: 'tyranthius', type: 'Demon, Ryndor', stat: 'S', size:500, nd:6, duration:168, health: [600000000,750000000,960000000,1200000000,0,0]},
  2942. lunacy: {name: 'Lunatics', shortname: 'Lunatics', id: 'lunacy', type: 'Demon, Human', stat: 'H', size:50, nd:3, duration:144, health: [180000000,225000000,288000000,360000000,0,0]},
  2943. lurker: {name: 'Lurking Horror', shortname: 'Lurking', id: 'lurker', type: 'Underground, Aquatic',stat: 'S', size:100, nd:4, duration:120, health: [35000000,43750000,56000000,70000000,0,0]},
  2944. malleus: {name: 'Malleus Vivorum', shortname: 'Malleus', id: 'malleus', type: 'Beastman, Undead', stat: 'S', size:100, nd:5, duration:72, health: [8000000000,12000000000,16000000000,20000000000,0,0], lt: ['mall','mall','mall','mall']},
  2945. maraak: {name: 'Maraak the Impaler', shortname: 'Maraak', id: 'maraak', type: 'Underground', stat: 'S', size:10, nd:2, duration:48, health: [15000000,18750000,24000000,30000000,0,0]},
  2946. mardachus: {name: 'Mardachus the Destroyer', shortname: 'Mardachus', id: 'mardachus', type: 'Dragon', stat: 'S', size:500, nd:6, duration:96, health: [1100000000,1375000000,1760000000,2200000000,0,0]},
  2947. scorp: {name: 'Mazalu', shortname: 'Mazalu', id: 'scorp', type: 'Beastman', stat: 'S', size:50, nd:3, duration:168, health: [5000000,6250000,8000000,10000000,0,0]},
  2948. mestr_rekkr_rematch:{name: 'Mestr Rekkr Rematch', shortname: 'Rekkr II', id: 'mestr_rekkr_rematch', type: 'Human', stat: 'S', size:25, nd:4, duration:48, health: [6000000000,9000000000,13200000000,18000000000,0,0], lt: ['rekkr','rekkr','rekkr','rekkr']},
  2949. mesyra: {name: 'Mesyra the Watcher', shortname: 'Mesyra', id: 'mesyra', type: 'Dragon', stat: 'S', size:250, nd:5, duration:96, health: [1000000000,1250000000,1600000000,2000000000,0,0]},
  2950. nalagarst: {name: 'Nalagarst', shortname: 'Nalagarst', id: 'nalagarst', type: 'Dragon, Undead', stat: 'S', size:500, nd:6, duration:98, health: [700000000,875000000,1120000000,1400000000,0,0]},
  2951. nereidon: {name: 'Nereidon the Sea Slayer', shortname: 'Nereidon', id: 'nereidon', type: 'Dragon, Beastman, Aquatic', stat: 'S', size:30, nd:3, duration:48, health: [6000000000,9000000000,12000000000,15000000000,0,0], lt: ['z15lo','z15lo','z15lo','z15lo']},
  2952. nidhogg: {name: 'Nidhogg', shortname: 'Nidhogg', id: 'nidhogg', type: 'Bludheim, Aquatic', stat: 'S', size:50, nd:3, duration:60, health: [52000000,65000000,83200000,104000000,0,0]},
  2953. nimrod: {name: 'Nimrod the Hunter', shortname: 'Nimrod', id: 'nimrod', type: 'Dragon', stat: 'S', size:250, nd:5, duration:96, health: [1200000000,1500000000,1920000000,2400000000,0,0]},
  2954. nylatrix: {name: 'Nylatrix', shortname: 'Nylatrix', id: 'nylatrix', type: 'Dragon', stat: 'H', size:101, nd:5, duration:192, health: [2000000000,2500000000,3400000000,4000000000,0,0], lt: ['nker','hker','lker','nmker']},
  2955. phaedra: {name: 'Phaedra the Deceiver', shortname: 'Phaedra', id: 'phaedra', type: 'Dragon', stat: 'S', size:250, nd:5, duration:96, health: [1400000000,1750000000,2240000000,2800000000,0,0]},
  2956. fairy_prince: {name: 'Prince Obyron', shortname: 'Obyron', id: 'fairy_prince', type: 'Magical Creature', stat: 'H', size:10, nd:2, duration:120, health: [30000000,37500000,48000000,60000000,0,0]},
  2957. roc: {name: 'Ragetalon', shortname: 'Ragetalon', id: 'roc', type: '', stat: 'H', size:100, nd:4, duration:168, health: [110000000,137500000,176000000,220000000,0,0]},
  2958. rannveig: {name: 'Rannveig', shortname: 'Rannveig', id: 'rannveig', type: 'Human', stat: 'E', size:250, nd:6, duration:128, health: [15000000000,30000000000,45000000000,60000000000,0,0], lt: ['rann','rann','rann','rann']},
  2959. rhalmarius_the_despoiler:{name: 'Rhalmarius the Despoiler', shortname: 'Rhalmarius', id: 'rhalmarius_the_despoiler', type: 'Dragon', stat: 'H', size:100, nd:6, duration:84, health: [500000000,1250000000,3125000000,7812500000,0,0]},
  2960. tomb_gargoyle: {name: 'Riddler Gargoyle', shortname: 'Riddler', id: 'tomb_gargoyle', type: 'Underground, Construct',stat: 'S', size:50, nd:4, duration:48, health: [2000000000,3000000000,4000000000,8000000000,0,0], lt: ['z10','z10','z10','z10']},
  2961. rift: {name: 'Rift the Mauler', shortname: 'Rift', id: 'rift', type: 'Magical Creature', stat: 'S', size:100, nd:4, duration:72, health: [125000000,156250000,200000000,250000000,0,0]},
  2962. ruzzik: {name: 'Ruzzik the Slayer', shortname: 'Ruzzik', id: 'ruzzik', type: 'Beastman', stat: 'S', size:500, nd:6, duration:128, health: [55000000000,82500000000,165000000000,220000000000,0,0], lt: ['ruzz','ruzz','ruzz','ruzz']},
  2963. salome: {name: 'Salome the Seductress', shortname: 'Salome', id: 'salome', type: 'Demon, Underground', stat: 'H', size:100, nd:4, duration:48, health: [666000000,832500000,1065600000,1332000000,0,0], lt: ['nSlut','hSlut','lSlut','nmSlut']},
  2964. crabshark: {name: 'Scuttlegore', shortname: 'Scuttlegore', id: 'crabshark', type: 'Colosseum, Aquatic', stat: 'H', size:100, nd:4, duration:168, health: [220000000,275000000,352000000,440000000,0,0]},
  2965. squid: {name: 'Scylla', shortname: 'Scylla', id: 'squid', type: 'Beastman, Aquatic', stat: 'S', size:50, nd:3, duration:72, health: [25000000,31250000,40000000,50000000,0,0]},
  2966. shaar: {name: 'Shaar the Reaver', shortname: 'Shaar', id: 'shaar', type: 'Beastman', stat: 'S', size:250, nd:6, duration:96, health: [12000000000,24000000000,36000000000,60000000000,0,0], lt: ['z15hi','z15hi','z15hi','z15hi']},
  2967. sircai: {name: 'Sir Cai', shortname: 'Cai', id: 'sircai', type: 'Demon, Ryndor', stat: 'S', size:250, nd:5, duration:168, health: [350000000,437500000,560000000,700000000,0,0]},
  2968. sisters: {name: 'Sisters of the Song', shortname: 'Sisters', id: 'sisters', type: 'Magical Creature', stat: 'S', size:250, nd:5, duration:96, health: [600000000,750000000,960000000,1200000000,0,0]},
  2969. slaughterers: {name: 'Slaughterers Six', shortname: 'Slaughtereres', id: 'slaughterers', type: 'Human', stat: 'H', size:10, nd:2, duration:120, health: [24000000,30000000,38400000,48000000,0,0]},
  2970. stein: {name: 'Stein', shortname: 'Stein', id: 'stein', type: 'Undead, Underground, Construct',stat: 'S', size:100, nd:4, duration:72, health: [80000000,100000000,128000000,160000000,0,0]},
  2971. siculus: {name: 'Count Siculus\' Phantom', shortname: 'Siculus', id: 'siculus', type: 'Undead', stat: 'S', size:500, nd:6, duration:128, health: [850000000,1700000000,2975000000,4250000000,0,0], lt: ['sic','sic','sic','sic']},
  2972. tainted: {name: 'Tainted Erebus', shortname: 'Tainted', id: 'tainted', type: 'Dragon', stat: 'S', size:250, nd:5, duration:168, health: [250000000,312500000,400000000,500000000,0,0]},
  2973. tenebra: {name: 'Tenebra Shadow Mistress', shortname: 'Tenebra', id: 'tenebra', type: 'Dragon', stat: 'S', size:500, nd:6, duration:128, health: [2000000000,2500000000,3200000000,4000000000,0,0]},
  2974. thaltherda: {name: 'Thaltherda the Sea-Slitherer',shortname: 'Nessie', id: 'thaltherda', type: 'Aquatic, Dragon', stat: 'S', size:25, nd:4, duration:48, health: [3000000000,4500000000,6000000000,7500000000,0,0], lt: ['nessy','nessy','nessy','nessy']},
  2975. tisiphone: {name: 'Tisiphone the Vengeful', shortname: 'Tisi', id: 'tisiphone', type: 'Dragon, Colosseum', stat: 'E', size:50, nd:3, duration:12, health: [500000000,2500000000,5000000000,7500000000,0,0], lt: ['nTisi','hTisi','lTisi','nmTisi']},
  2976. teremarthu: {name: 'Teremarthu', shortname: 'Cthullu', id: 'teremarthu', type: 'Qwiladrian', stat: 'S', size:100, nd:5, duration:48, health: [6000000000,9000000000,12000000000,24000000000,0,0], lt: ['z10','z10','z10','z10']},
  2977. chimera: {name: 'Tetrarchos', shortname: 'Tetrarchos', id: 'chimera', type: 'Colosseum', stat: 'H', size:50, nd:3, duration:144, health: [90000000,112500000,144000000,180000000,0,0]},
  2978. gorgon: {name: 'Tithrasia', shortname: 'Tithrasia', id: 'gorgon', type: '', stat: 'H', size:10, nd:2, duration:120, health: [18000000,22500000,28800000,36000000,0,0]},
  2979. trekex: {name: 'Trekex\'s Amphibious Assault',shortname: 'Trekex', id: 'trekex', type: 'Aquatic, Beastman', stat: 'S', size:800, nd:6, duration:128, health: [250000000000,500000000000,750000000000,1000000000000], lt: ['trex','trex','trex','trex']},
  2980. tuxargus: {name: 'Tuxargus', shortname: 'Tuxargus', id: 'tuxargus', type: 'Dragon', stat: 'H', size:101, nd:5, duration:192, health: [2000000000,2500000000,3400000000,4000000000,0,0], lt: ['nker','hker','lker','nmker']},
  2981. ulfrik: {name: 'Ulfrik', shortname: 'Ulfrik', id: 'ulfrik', type: 'Bludheim, Siege, Human',stat: 'S', size:250, nd:5, duration:96, health: [500000000,625000000,800000000,1000000000,0,0]},
  2982. valanazes: {name: 'Valanazes the Gold', shortname: 'Valanazes', id: 'valanazes', type: 'Dragon', stat: 'S', size:500, nd:6, duration:128, health: [2400000000,3000000000,3840000000,4800000000,0,0]},
  2983. blobmonster: {name: 'Varlachleth', shortname: 'Varlachleth', id: 'blobmonster', type: 'Demon', stat: 'H', size:100, nd:4, duration:168, health: [330000000,412500000,528000000,660000000,0,0]},
  2984. verkiteia: {name: 'Verkiteia', shortname: 'Verkiteia', id: 'verkiteia', type: 'Dragon', stat: 'S', size:100, nd:5, duration:72, health: [11250000000,14062500000,18000000000,22500000000,0,0], lt: ['verk','verk','verk','verk']},
  2985. vortex_abomination: {name: 'Vortex Abomination', shortname: 'Vortex', id: 'vortex_abomination',type: 'Qwiladrian, Magical Creature', stat: 'S', size:500, nd:6, duration:128, health: [50000000000,75000000000,110000000000,205000000000,0,0], lt: ['vort','vort','vort','vort']},
  2986. zugen: {name: 'Warlord Zugen', shortname: 'Zugen', id: 'zugen', type: 'Ogre', stat: 'S', size:25, nd:4, duration:48, health: [4000000000,6000000000,8000000000,10000000000,0,0], lt: ['zugen','zugen','zugen','zugen']},
  2987. wexxa: {name: 'Wexxa the Worm-Tamer', shortname: 'Wexxa', id: 'wexxa', type: 'Underground', stat: 'S', size:100, nd:4, duration:72, health: [110000000,137500000,176000000,220000000,0,0]},
  2988. winter_kessov: {name: 'Blood Will Run Cold', shortname: 'Cold Blood', id: 'winter_kessov', type: 'Dragon, Siege', stat: 'ESH', size:90000,nd:0, duration:290, health: ['Unlimited','Unlimited','Unlimited','Unlimited','Unlimited','Unlimited']},
  2989. xessus: {name: 'Xessus of the Grim Wood', shortname: 'Xessus', id: 'xessus', type: '', stat: 'H', size:100, nd:4, duration:48, health: [500000000,625000000,800000000,1000000000,0,0], lt: ['nIns','hIns','lIns','nmIns']},
  2990. malchar: {name: 'Malchar the Tri-Eyed', shortname: 'Malchar', id: 'malchar', type: 'Demon', stat: 'H', size:100, nd:4, duration:48, health: [500000000,625000000,800000000,1000000000,0,0], lt: ['nIns','hIns','lIns','nmIns']},
  2991. krasgore: {name: 'Krasgore', shortname: 'Krasgore', id: 'krasgore', type: '', stat: 'H', size:100, nd:4, duration:48, health: [500000000,625000000,800000000,1000000000,0,0], lt: ['nIns','hIns','lIns','nmIns']},
  2992. nrlux: {name: 'N\'rlux the Devourer', shortname: 'N\'rlux', id: 'nrlux', type: 'Giant Insect', stat: 'H', size:100, nd:6, duration:48, health: [10000000000,12500000000,16000000000,20000000000,0,0], lt: ['lux','lux','lux','lux']},
  2993. xerkara: {name: 'Xerkara', shortname: 'Xerkara', id: 'xerkara', type: 'Dragon', stat: 'S', size:500, nd:6, duration:128, health: [65000000000,113750000000,143000000000,260000000000,0,0], lt: ['z15hi','z15hi','z15hi','z15hi']},
  2994. yydians_sanctuary: {name: 'Yydian\'s Sanctuary', shortname: 'Yydians', id: 'yydians_sanctuary', type: 'Siege, Construct', stat: 'S', size:250, nd:5, duration:96, health: [10000000000,20000000000,30000000000,50000000000,0,0], lt: ['yyd','yyd','yyd','yyd']},
  2995. zombiehorde: {name: 'Zombie Horde', shortname: 'Zombies', id: 'zombiehorde', type: 'Undead', stat: 'S', size:50, nd:3, duration:60, health: [45000000,56250000,72000000,90000000,0,0]},
  2996. zralkthalat: {name: 'Z\'ralk\'thalat', shortname: 'Zralk', id: 'zralkthalat', type: 'Demon', stat: 'S', size:100, nd:4, duration:72, health: [8750000000,13125000000,17500000000,35000000000,0,0], lt: ['z10','z10','z10','z10']}
  2997. },
  2998.  
  2999. raidSizes: {
  3000. 10: { name: 'Small', visible: 'Yes', ratios: [0.6,0.9,1.2,1.6,2.5,3.5], enames: ['1E6T','1E8T','2E','2/3E','3E','3/4E'], pruneTimers: [900,3600,7200]}, // 1h, 2h, 3h
  3001. 13: { name: 'Small', visible: 'Yes', pruneTimers: [1800,3600,7200]}, // 1h, 2h, 2h
  3002. 15: { name: 'Small', visible: 'Yes', ratios: [0.45,0.6,0.755,0.9,1.05,1.2,1.35,1.5,1.65,1.8,1.95], enames: ['65D','92D','119D','146D','173D','200D','227D','264D','301D','338D','375D'], pruneTimers: [1800,3600,3600]}, // Serpina only, so 5h/5h/5h
  3003. 25: { name: 'Small', visible: 'Yes', ratios: [0.6,0.9,1.2,1.6,2.5,3.5], enames: ['1E6T','1E8T','2E','2/3E','3E','3/4E'], pruneTimers: [18000,18000,18000]},
  3004. 30: { name: 'Small', visible: 'Yes', ratios: [0.6,0.9,1.2,1.6,2.5,3.5], enames: ['1E6T','1E8T','2E','2/3E','3E','3/4E'], pruneTimers: [18000,18000,18000]},
  3005. 50: { name: 'Medium', visible: 'Yes', ratios: [0.7,0.95,2.05,3.125,6.75,8.5], enames: ['1E6T','1E8T','2E','2/3E','3E','3/4E'], pruneTimers: [3600,7200,10800]}, // 1h, 2h, 3h
  3006. 100:{ name: 'Large', visible: 'Yes', ratios: [0.9,1.5,2.2,3.2,6.5,9.0], enames: ['1E6T','1E8T','2E','2/3E','3E','3/4E'], pruneTimers: [7200,43200,86400]}, // 4h, 12h, 36h
  3007. 101:{ name: 'Epic', visible: 'Yes', ratios: [0.225,0.325,0.625,1.775,4.525,10.25], enames: ['1E6T','1E8T','2E','2/3E','3E','3/4E'], pruneTimers: [21600,86400,259200]}, // 24h, 48h, 72h
  3008. 250:{ name: 'Epic', visible: 'Yes', ratios: [0.225,0.325,0.625,1.775,4.525,10.25], enames: ['1E6T','1E8T','2E','2/3E','3E','3/4E'], pruneTimers: [21600,86400,259200]}, // 24h, 48h, 72h
  3009. 500:{ name: 'Colossal', visible: 'Yes', ratios: [0.45,0,0.65,1.25,2.5,9.0], enames: ['1E6T','1E8T','2E','2/3E','3E','3/4E'], pruneTimers: [43200,172800,259200]}, // 24h, 48h, 72h
  3010. 800:{ name: 'Gigantic', visible: 'Yes', ratios: [0.45,0,0.65,1.25,2.5,9.0], enames: ['1E6T','1E8T','2E','2/3E','3E','3/4E'], pruneTimers: [43200,172800,259200]}, // 24h, 48h, 72h
  3011. 90000:{ name: 'World', visible: 'Yes', ratios: [0,0,0,0,0,0], pruneTimers: [86400,86400,86400]} // 24h, 48h, 72h
  3012. },
  3013.  
  3014. lootTiers: {
  3015. u: { tiers: ['Not yet known'], epics: [0], best: 0},
  3016. imx: { tiers: ['100.0m','150.0m','200.0m','250.0m','300.0m','400.0m','500.0m','750.0m','1.000b','1.250b','1.500b','1.750b','2.000b','2.500b','3.000b','3.500b','4.000b','4.500b','5.000b','6.000b','7.000b','8.000b','9.000b','10.00b','12.50b','15.00b','17.50b','20.00b','25.00b'], epics: [16,21,26,32,38,44,51,69,86,118,142,166,191,239,286,330,355,381,408,435,462,489,516,544,592,640,688,736,815], best: 13, e: false},
  3017. trex: { tiers: ['100.0m','150.0m','200.0m','250.0m','300.0m','400.0m','500.0m','750.0m','1.000b','1.250b','1.500b','1.750b','2.000b','2.500b','3.000b','3.500b','4.000b','4.500b','5.000b','6.000b','7.000b','8.000b','9.000b','10.00b','12.50b','15.00b','17.50b','20.00b'], epics: [21,28,38,44,47,59,68,94,119,147,179,215,250,308,381,431,498,546,557,593,627,661,691,725,790,861,926,980], best: 14, e: false},
  3018. rann: { tiers: ['100.0m','200.0m','300.0m','400.0m','500.0m','600.0m','700.0m','800.0m','900.0m','1.000b','2.000b','3.000b'], epics: [12,24,36,48,61,73,85,97,109,122,245,369], best: 9, e: false },
  3019. clock: { tiers: ['300.0m','400.0m','750.0m','1.000b','1.500b','2.000b','2.500b','3.000b','4.000b','5.000b','6.000b','8.000b','10.00b'], epics: [56,66,94,118,192,226,254,270,290,360,368,400,460], best: 0, e: false},
  3020. krx: { tiers: ['300.0m','400.0m','750.0m','1.000b','1.500b','2.000b','2.500b','3.000b','4.000b','5.000b','6.000b','8.000b'], epics: [56,66,94,118,192,226,254,270,290,360,368,400], best: 0, e: false},
  3021. gig: { tiers: ['200.0m','300.0m','400.0m','500.0m','750.0m','1.000b','1.500b','2.000b','2.500b','5.000b','8.000b'], epics: [36,48,63,76,94,111,146,199,256,400,490], best: 3, e: false},
  3022. rekkr: { tiers: ['250.0m','300.0m','400.0m','500.0m','720.0m','1.000b','1.500b','2.500b','3.500b'], epics: [10,11,15,18,23,26,34,37,51], best: 2, e: true},
  3023. rag: { tiers: ['225.0m','310.0m','400.0m','510.0m','750.0m','1.000b','1.500b','2.500b','5.000b'], epics: [11,13,17,19,23,27,37,39,61], best: 2, e: true},
  3024. z15lo: { tiers: ['225.0m','240.0m','300.0m','400.0m','750.0m','1.000b','1.500b','2.500b','5.000b'], epics: [8,9,14,16,19,23,33,36,48], best: 2, e: true},
  3025. z15hi: { tiers: ['225.0m','240.0m','300.0m','400.0m','750.0m','1.000b','1.500b','2.500b','5.000b','8.000b'], epics: [8,9,14,16,19,23,33,60,90,100], best: 2, e: true},
  3026. apoc: { tiers: ['12.00m','24.00m','36.00m','40.00m','60.00m','80.00m','100.0m','120.0m','140.0m','160.0m','180.0m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true },
  3027. cara: { tiers: ['400.0m','500.0m','600.0m','700.0m','800.0m','900.0m','1.000b','1.250b','1.500b','1.750b','2.000b','2.250b','2.500b','2.750b','3.000b'], epics: [10,11,12,13,14,15,16,20,24,28,32,36,40,44,48], best: 0, e: true },
  3028. zugen: { tiers: ['120.0m','180.0m','225.0m','240.0m','300.0m','400.0m','750.0m','1.000b','1.500b'], epics: [8,9,10,11,14,16,19,23,33], best: 4, e: true},
  3029. gulk: { tiers: ['90.00m','135.0m','150.0m','180.0m','225.0m','300.0m','550.0m','900.0m','1.500b'], epics: [2,5,7,9,11,15,18,22,34], best: 5, e: true },
  3030. verk: { tiers: ['100.0m','175.0m','250.0m','300.0m','375.0m','450.0m','525.0m','600.0m','900.0m','1.500b'], epics: [3,8,12,13,15,16,18,21,23,36], best: 2, e: true},
  3031. canib: { tiers: ['250.0m','300.0m','380.0m','480.0m','580.0m','660.0m','900.0m','1.500b','2.000b','2.800b','3.500b'], epics: [12,13,14,17,18,21,23,34,46,68,88], best: 0, e: true},
  3032. ruzz: { tiers: ['300.0m','400.0m','500.0m','600.0m','700.0m','800.0m','900.0m','1.000b','1.250b','1.500b','1.750b','2.000b','2.250b','2.500b','2.750b','3.000b'], epics: [2,5,11,12,13,14,15,16,20,24,28,32,36,40,44,48], best: 2, e: true },
  3033. z10: { tiers: ['100.0m','200.0m','300.0m','400.0m','500.0m','600.0m','700.0m','800.0m','900.0m','1.000b'], epics: [7,8,9,10,11,12,13,14,15,16], best: 0, e: true },
  3034. nmDl: { tiers: ['105.0m','135.0m','150.0m','225.0m','300.0m','375.0m','450.0m','525.0m','600.0m','675.0m'], epics: [2,4,6,8,10,12,14,16,18,20], best: 2, e: true },
  3035. lDl: { tiers: ['70.00m','90.00m','100.0m','150.0m','200.0m','250.0m','300.0m','350.0m','400.0m','450.0m'], epics: [2,4,6,8,10,12,14,16,18,20], best: 2, e: true },
  3036. hDl: { tiers: ['35.00m','45.00m','50.00m','75.00m','100.0m','125.0m','150.0m','175.0m','200.0m','225.0m'], epics: [2,4,6,8,10,12,14,16,18,20], best: 2, e: true },
  3037. nDl: { tiers: ['7.000m','9.000m','10.00m','15.00m','20.00m','25.00m','30.00m','35.00m','40.00m','45.00m'], epics: [2,4,6,8,10,12,14,16,18,20], best: 2, e: true },
  3038. nmTisi: { tiers: ['75.00m','105.0m','135.0m','150.0m','225.0m','300.0m','375.0m','450.0m','525.0m','600.0m','675.0m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true },
  3039. lTisi: { tiers: ['50.00m','70.00m','90.00m','100.0m','150.0m','200.0m','250.0m','300.0m','350.0m','400.0m','450.0m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true },
  3040. hTisi: { tiers: ['25.00m','35.00m','45.00m','50.00m','75.00m','100.0m','125.0m','150.0m','175.0m','200.0m','225.0m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true },
  3041. nTisi: { tiers: ['5.000m','7.000m','9.000m','10.00m','15.00m','20.00m','25.00m','30.00m','35.00m','40.00m','45.00m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true },
  3042. njack: { tiers: ['4.000m','20.00m','24.00m','48.00m','72.00m','96.00m','120.0m','144.0m','168.0m','192.0m'], epics: [2,3,4,6,7,8,9,10,11,12], best: 0, e: true},
  3043. hjack: { tiers: ['6.000m','30.00m','36.00m','72.00m','108.0m','144.0m','180.0m','216.0m','252.0m','288.0m'], epics: [2,3,4,6,7,8,9,10,11,12], best: 0, e: true},
  3044. ljack: { tiers: ['8.000m','40.00m','48.00m','96.00m','144.0m','192.0m','240.0m','288.0m','336.0m','384.0m'], epics: [2,3,4,6,7,8,9,10,11,12], best: 0, e: true},
  3045. nmjack: { tiers: ['12.00m','60.00m','72.00m','144.0m','216.0m','288.0m','360.0m','432.0m','504.0m','576.0m'], epics: [2,3,4,6,7,8,9,10,11,12], best: 0, e: true},
  3046. hjr: { tiers: ['30.00m','150.0m','180.0m','360.0m','750.0m','1.500b'], epics: [8,12,16,27,36,72], best: 0, e: true},
  3047. njr: { tiers: ['20.00m','100.0m','120.0m','240.0m','500.0m','1.000b'], epics: [8,12,16,27,36,72], best: 0, e: true},
  3048. ljr: { tiers: ['40.00m','200.0m','240.0m','480.0m','1.000b','2.000b'], epics: [8,12,16,27,36,72], best: 0, e: true},
  3049. nmjr: { tiers: ['60.00m','300.0m','360.0m','720.0m','1.500b','3.000b'], epics: [8,12,16,27,36,72], best: 0, e: true},
  3050. yyd: { tiers: ['125.0m','175.0m','250.0m','300.0m','375.0m','450.0m','525.0m','625.0m','900.0m','1.500b'], epics: [3,8,12,13,15,16,18,21,23,36], best: 2, e: true},
  3051. nessy: { tiers: ['120.0m','180.0m','225.0m','240.0m','300.0m','500.0m','750.0m','1.000b'], epics: [9,10,11,12,13,14,17,20], best: 1, e: true},
  3052. hurk: { tiers: ['90.00m','135.0m','150.0m','180.0m','225.0m','300.0m','550.0m','900.0m'], epics: [3,7,10,12,15,19,26,30], best: 2, e: true},
  3053. mall: { tiers: ['100.0m','150.0m','225.0m','300.0m','375.0m','450.0m','525.0m','600.0m','900.0m'], epics: [3,8,11,12,14,16,18,20,24], best: 1, e: true},
  3054. nIns: { tiers: ['5.000m','7.000m','9.000m','10.00m','15.00m','20.00m','25.00m','30.00m','35.00m','40.00m','45.00m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3 , e: true},
  3055. hIns: { tiers: ['6.250m','8.750m','11.25m','12.50m','18.75m','25.00m','31.25m','37.50m','43.75m','50.00m','56.25m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3 , e: true},
  3056. lIns: { tiers: ['8.000m','11.20m','14.40m','16.00m','24.00m','32.00m','40.00m','48.00m','56.00m','64.00m','72.00m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3 , e: true},
  3057. nmIns: { tiers: ['10.00m','14.00m','18.00m','20.00m','30.00m','40.00m','50.00m','60.00m','70.00m','80.00m','90.00m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3 , e: true},
  3058. nker: { tiers: ['20.00m','28.00m','36.00m','40.00m','60.00m','80.00m','100.0m','120.0m','140.0m','160.0m','180.0m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3 , e: true},
  3059. hker: { tiers: ['25.00m','35.00m','45.00m','50.00m','75.00m','100.0m','125.0m','150.0m','175.0m','200.0m','225.0m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3 , e: true},
  3060. lker: { tiers: ['32.00m','44.80m','57.60m','64.00m','96.00m','128.0m','160.0m','192.0m','224.0m','256.0m','288.0m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3 , e: true},
  3061. nmker: { tiers: ['40.00m','56.00m','72.00m','80.00m','120.0m','160.0m','200.0m','240.0m','280.0m','320.0m','360.0m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3 , e: true},
  3062. nSlut: { tiers: ['6.660m','9.324m','11.99m','13.32m','19.98m','26.64m','33.30m','39.96m','46.62m','53.28m','59.94m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3 , e: true},
  3063. hSlut: { tiers: ['8.325m','11.66m','14.99m','16.65m','24.98m','33.30m','41.63m','49.95m','58.28m','66.60m','74.93m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3 , e: true},
  3064. lSlut: { tiers: ['10.66m','14.92m','19.18m','21.31m','31.97m','42.62m','53.28m','63.94m','74.59m','85.25m','95.90m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3 , e: true},
  3065. nmSlut: { tiers: ['13.32m','18.65m','23.98m','26.64m','39.96m','53.28m','66.60m','79.92m','93.24m','106.6m','119.9m'], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3 , e: true},
  3066. sic: { tiers: ['400.0m','500.0m','600.0m','700.0m','800.0m','900.0m','1.000b','2.000b'], epics: [10,11,12,13,14,15,16,32], best: 0, e: true},
  3067. vort: { tiers: ['200.0m','300.0m','400.0m','500.0m','600.0m','700.0m','800.0m','900.0m','1.000b','1.500b','2.000b','2.500b','3.000b','3.500b'], epics: [3,10,14,15,17,18,21,23,32,37,44,52,58,90], best: 1, e: true},
  3068. lux: { tiers: ['8.000m','17.00m','26.00m','35.00m','45.00m','56.00m','67.00m','78.00m','90.00m','103.0m','116.0m','129.0m','143.0m','157.0m','173.0m','188.0m','202.0m','220.0m','238.0m','255.0m','270.0m','293.0m','311.0m','330.0m','350.0m'], epics: [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26], best: 9, e: true },
  3069. keron: { tiers: ['8.000m','17.00m','26.00m','35.00m','45.00m','56.00m','67.00m','78.00m','90.00m','103.0m','116.0m','129.0m','143.0m','157.0m','173.0m','188.0m','202.0m','220.0m','238.0m','255.0m','270.0m','293.0m','311.0m','330.0m','350.0m','1.000b'], epics: [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,30], best: 9, e: true }
  3070. },
  3071. linkNames: { 'prntscr.com':'LightShot', 'www.youtube.com':'YouTube', 'i.imgur.com':'imgur', 'imgur.com':'imgur', 'docs.google.com':'Google Docs', 'userscripts.org':'Script', 'www.dawnofthedragons.com':'DotD Forum', 'dotd.wikia.com':'DotD Wiki', 'www.fooby.de':'DotD Log Analyzer'},
  3072. raidArray: [],
  3073. camps: {
  3074. bob: {name: 'Bastion of Blood', time: [120,96], prefixes: 'Regenerating, Morphling, Vengeful, Chilling', numNodes: 6, nodes: ['bmp','gor','chi','zh','sic','bob'],
  3075. mods: ['Speed Run: halved camp timer, +20% guild rep from EoC', 'Hailstorm: +1 prefix, +20% guild exp from EoC', 'Nerfed: -30% player damage, special loot from EoC'],
  3076. tiers: [[5,31,0],[25,32,0],[75,33,0],[100,34,0],[200,35,7],[250,36,8],[320,37,9],[375,38,10],[480,39,11],[550,40,12],[640,41,13],[960,42,14],[1500,43,15],[2400,44,16],[2750,45,17],[3500,50,21],[4500,58,24],[5500,64,26]],
  3077. bmp: {name: 'Black Moon Pack', sname: 'Bmp', type: 'Human, Campaign', size: 25, hp: [6000,18000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0]},
  3078. gor: {name: 'Gorgon', sname: 'Gor', type: 'Campaign', size: 50, hp: [12000,36000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0]},
  3079. chi: {name: 'Chimera', sname: 'Chi', type: 'Campaign', size: 75, hp: [28000,84000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0]},
  3080. zh: {name: 'Zombie Horde', sname: 'ZH', type: 'Campaign, Undead', size: 100, hp: [50000,150000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]},
  3081. sic: {name: 'Byron Siculus', sname: 'Sic', type: 'Campaign', size: 100, hp: [50000,150000], gold: true, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1]},
  3082. bob: {name: 'Bastion of Blood', sname: 'BoB', type: 'Campaign, Undead, Siege', size: 100, hp: [50000,150000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1]}},
  3083. mam: {name: 'Monsters and Magma', time: [120,96], prefixes: 'Regenerating, Vengeful, Chilling, Curse', numNodes: 7, nodes: ['wlp','tos','gol','ele','gmh','wrm','imx'],
  3084. mods: ['Speed Run: halved camp timer, +20% guild rep from EoC', 'Hailstorm: +1 prefix, +20% guild exp from EoC', 'Fatigued: -45% player damage, special loot and +3 slots from EoC', 'Endurance Run: Node timer set to 4h, Molten Troves in EoC'],
  3085. tiers: [[5,31,0],[25,32,0],[75,33,0],[100,34,0],[200,35,7],[250,36,8],[320,37,9],[375,38,10],[480,39,11],[550,40,12],[640,41,13],[960,42,14],[1500,43,15],[2400,44,16],[2750,45,17],[3500,50,21],[4500,58,24],[5500,64,26],[7500,74,28]],
  3086. wlp: {name: 'Imryx\'s Whelps', sname: 'Wlp', type: 'Dragon, Underground, Campaign', size: 25, hp: [7000,21000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0]},
  3087. tos: {name: 'Magma Tossers', sname: 'Tos', type: 'Underground, Construct, Campaign', size: 50, hp: [13000,39000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0]},
  3088. gol: {name: 'Magma Golem', sname: 'Gol', type: 'Underground, Construct, Campaign', size: 50, hp: [16000,48000], gold: true, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0]},
  3089. ele: {name: 'Magma Elemental', sname: 'Ele', type: 'Underground, Magical Creature, Campaign', size: 75, hp: [30000,90000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0]},
  3090. gmh: {name: 'Grt. Magma Horror', sname: 'Gmh', type: 'Campaign, Undead', size: 100, hp: [55000,165000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0]},
  3091. wrm: {name: 'Magma Worm', sname: 'Wrm', type: 'Underground, Campaign', size: 100, hp: [60000,180000], gold: true, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0]},
  3092. imx: {name: 'Imryx the Incinerator', sname: 'Imx', type: 'Dragon, Underground, Campaign', size: 100, hp: [65000,195000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1]}},
  3093. gd: {name: 'The Grey Death', time: [120,96], prefixes: 'Regenerating, Vengeful, Chilling, Curse', numNodes: 6, nodes: ['crk','zrn','nun','tms','crn','hrt'],
  3094. mods: ['Speed Run: halved camp timer, +20% guild rep from EoC', 'Hailstorm: +1 prefix, +20% guild exp from EoC', 'Fatigued: -45% player damage, special loot and +3 slots from EoC'],
  3095. tiers: [[25,31,0],[100,34,0],[200,36,6],[300,38,9],[500,40,14],[750,42,16],[1000,45,18],[2500,48,21],[4100,50,25],[6500,58,29],[8500,62,31],[6500,54,27],[8500,63,32],[10000,64,33],[15000,66,35],[20000,68,37],[30000,70,39],[40000,73,41]],
  3096. crk: {name: 'Carshk the Marauder', sname: 'Crk', type: 'Campaign', size: 25, hp: [8000,25600], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0]},
  3097. zrn: {name: 'Zranras', sname: 'Zrn', type: 'Campaign, Beastman', size: 50, hp: [15000,48000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]},
  3098. nun: {name: 'General Nund', sname: 'Nun', type: 'Campaign, Ogre', size: 50, hp: [20000,50000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1]},
  3099. tms: {name: 'Thurmavus the Ripper', sname: 'Tms', type: 'Campaign, Dragon', size: 100, hp: [75000,202500], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1]},
  3100. crn: {name: 'Craenaestra the Stalker', sname: 'Crn', type: 'Campaign, Dragon', size: 100, hp: [80000,224000], gold: true, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1]},
  3101. hrt: {name: 'Horthania the Grey', sname: 'Hrt', type: 'Campaign, Dragon', size: 100, hp: [90000,270000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1]}},
  3102. goc: {name: 'Giants of Chalua', time: [120,96], prefixes: 'Regenerating, Vengeful, Chilling, Curse', numNodes: 6, nodes: ['mwm','bl','gh','fgs','gc','ha'],
  3103. mods: ['Speed Run: halved camp timer, +20% guild rep from EoC', 'Hailstorm: +1 prefix, +20% guild exp from EoC', 'Fatigued: -45% player damage, Boss loot from EoC', 'Endurance Run: Node timer set to 4h, 10 guild tokens in EoC'],
  3104. tiers: [[5,31,0,0],[25,32,0,0],[150,34,0,0],[250,35,7,0],[480,39,11,0],[640,41,13,0],[960,42,14,1],[1500,43,15,1],[2500,45,17,3],[3750,48,19,4],[4500,50,21,5],[5000,52,24,6],[6500,54,26,6],[7500,56,28,7],[10000,60,30,8],[15000,64,34,9]],
  3105. mwm: {name: 'Monkey Warrior Minions', sname: 'MWM', type: 'Human, Campaign', size: 25, hp: [15000,45000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0]},
  3106. bl: {name: 'Basileus Lizard', sname: 'BL', type: 'Campaign', size: 50, hp: [25000,75000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0]},
  3107. gh: {name: 'Giant Hunter', sname: 'GH', type: 'Giant, Campaign', size: 75, hp: [55000,165000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0]},
  3108. fgs: {name: 'Fire Giant Shaman', sname: 'FGS', type: 'Giant, Campaign', size: 100, hp: [100000,250000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0]},
  3109. gc: {name: 'Giant Cook', sname: 'GC', type: 'Giant, Campaign', size: 100, hp: [125000,312500], gold: true, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0]},
  3110. ha: {name: 'Hitullpa Aatqui', sname: 'HA', type: 'Giant, Campaign', size: 100, hp: [150000,375000], gold: false, tiers: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]}}
  3111. },
  3112. slapSentences: [
  3113. 'slaps <nick> in the face with a rotten old fish',
  3114. 'slaps <nick> around with a glove',
  3115. 'slaps <nick> around with an armoured glove',
  3116. 'hacks into <nick>\'s computer and slaps <nick> up side the head with a rubber chicken',
  3117. 'slaps <nick> around a bit with a wet noddle',
  3118. 'slaps <nick> about the head and shoulders with a rubber chicken',
  3119. 'slaps <nick>\'s face so hard, <nick> has to walk backwards from now on',
  3120. 'slaps some sense into <nick> with a red brick',
  3121. 'slaps <nick> with a herring',
  3122. 'slaps <nick> with a fire hose',
  3123. 'slaps <nick> with a huge law suit',
  3124. 'slaps <nick> with a great big, wet, 100% rubber duck',
  3125. 'slaps <nick> with a large dildo'
  3126. ],
  3127. reload: function() {
  3128. SRDotDX.echo('Reloading, please wait...');
  3129. activateGame();
  3130. //SRDotDX.gui.cHTML('#gameiframe').ele().src = 'http://web1.dawnofthedragons.com/kong?' + SRDotDX.request.kongData;
  3131. },
  3132. fails: 0,
  3133. load: function() {
  3134. if (typeof holodeck == 'object' && typeof ChatDialogue == 'function' && typeof holodeck._tabs == 'object' && typeof holodeck.activeDialogue == 'function' && typeof activateGame == 'function' && typeof document.getElementById('kong_game_ui') != 'null' && typeof SRDotDX.raids == 'object' ) {
  3135. ChatDialogue.prototype.sendInput = function () {
  3136. var a = this._input_node.value.match(/[\s\S]{1,240}(\s|$)/g);
  3137. var al = a.length-1, i;
  3138. if(al < 1 || this._input_node.value.charAt(0) == '/') this._holodeck.processChatCommand(this._input_node.value) && this._holodeck.filterOutgoingMessage(this._input_node.value, this._onInputFunction);
  3139. else for(i=0; i<=al; i++ ) this._holodeck.filterOutgoingMessage((i==0?'':'... ')+a[i]+(i==al?'':'...'), this._onInputFunction);
  3140. this._input_node.value = "";
  3141. };
  3142. ChatDialogue.prototype.SRDotDX_echo = function(msg){
  3143. var num = SRDotDX.gui.getChatNumber();
  3144. var pEle = document.getElementsByClassName('chat_message_window')[num].getElementsByTagName('p');
  3145. var lp = pEle.length-1;
  3146. if (lp >= 0 && pEle[lp].className == 'script') {
  3147. msg = pEle[lp].getElementsByTagName('span')[5].innerHTML + '<hr>' + msg;
  3148. pEle[lp].getElementsByTagName('span')[5].innerHTML = msg;
  3149. setTimeout(SRDotDX.gui.scrollChat,100,num);
  3150. }
  3151. else this.displayUnsanitizedMessage('DotDeXtension', '<br>' + msg, {class: 'script'}, {non_user: true});
  3152. };
  3153. ChatDialogue.prototype.SRDotDX_emote = function(msg){
  3154. var user = holodeck._active_user.chatUsername();
  3155. this.displayUnsanitizedMessage(user, '**' + user + ' ' + msg + '**', {class: 'emote'}, {});
  3156. };
  3157. ChatDialogue.MESSAGE_TEMPLATE=new Template('<p class="#{classNames}"><span id="dotdm_#{magId}" class="slider" style="max-width:0" onmouseleave="this.style.maxWidth=\'0\'"></span><span class="timestamp">#{timestamp}</span><span class="room">#{room}</span></span><span class="username #{userClassNames} dotdm_#{magId}" oncontextmenu="return false;">#{prefix}#{username}</span><span class="separator">: </span><span name="SRDotDX_#{username}" class="message">#{message}</span><span class="clear"></span></p>');
  3158.  
  3159. Holodeck.prototype.addDotdChatCommand = function (a,b) { a = a.split(','); for(var i=0; i< a.length; i++) {this._chat_commands[a[i]]||(this._chat_commands[a[i]]=[]);this._chat_commands[a[i]].push(b)} };
  3160. ChatDialogue.prototype.displayUnsanitizedMessage = function(usr, msg, cls, pfx) {
  3161. cls || (cls = {});
  3162. pfx || (pfx = {});
  3163. var active_room, allow_mutes = (active_room = this._holodeck.chatWindow().activeRoom()) && !active_room.canUserModerate(active_room.self()) || pfx.whisper;
  3164. if (!allow_mutes || !this._user_manager.isMuted(usr)) {
  3165. var normalMsg = true;
  3166. //var e = !pfx.non_user ? "chat_message_window_username" : "chat_message_window_undecorated_username",
  3167. var f = usr == this._user_manager.username(), h = [], rm = '';
  3168. var curTs = new Date().getTime().toString();
  3169. if (msg.charAt(0)=='[' && (msg.charAt(2)=='|' || msg.charAt(3)=='|')) { var sp = msg.split(']'); rm = sp[0].split('|')[0]+']&ensp;'; usr = sp[0].split('|')[1]; msg = sp[1]; h.push('bot') }
  3170. var e = [usr]; pfx = pfx['private'] ? 'To ' : '';
  3171. if (cls['class'] != 'script') this._messages_count % 2 && h.push("even"), this._messages_count++;
  3172. cls['class'] && h.push(cls['class']);
  3173. if ((!cls['class'] || cls['class'].indexOf('emote') == -1) && msg.charAt(0) == '*' && msg.charAt(2) != '*') {
  3174. var msgLen = msg.length;
  3175. if (msgLen > 5) { msg = '**' + usr + ' ' + (msg.charAt(msgLen-1) == '*' ? msg.slice(1,msgLen-1) : msg.slice(1,msgLen)) + '**'; h.push('emote'); }
  3176. }
  3177. var rUsr = h.join(' ').indexOf('sent_whisper') > -1 ? this._user_manager.username() : usr;
  3178. var raid = SRDotDX.getRaidLink(msg,rUsr);
  3179. if (raid) {
  3180. //normalMsg = false;
  3181. h.push('SRDotDX_raid');
  3182. h.push('DotDX_diff_' + raid.diff);
  3183. h.push('DotDX_raidId_'+raid.id);
  3184. if(raid.visited) h.push('DotDX_visitedRaid');
  3185. if(raid.nuked) h.push('DotDX_nukedRaid');
  3186. h.push('DotDX_fltChat_' + raid.boss + '_' + (raid.diff - 1));
  3187. msg = raid.ptext + '<a href="'+raid.url+'" class="chatRaidLink '+raid.id+'|'+raid.hash+'|'+raid.boss+'|'+raid.diff+'" style="float:right;" onmouseout="SRDotDX.gui.helpBox(\'chat_raids_overlay\',\'dotdm_' + curTs + '\',\'\',true);" onmouseover="SRDotDX.gui.helpBox(\'chat_raids_overlay\',\'dotdm_' + curTs + '\',' + raid.id + ',false);">'+raid.linkText()+'</a>' + raid.ntext;
  3188. SRDotDX.gui.toggleRaid('visited',raid.id,raid.visited);
  3189. SRDotDX.gui.joining ? SRDotDX.gui.pushRaidToJoinQueue(raid.id) : SRDotDX.gui.selectRaidsToJoin('chat');
  3190. }
  3191. else {
  3192. var linkArr = msg.match(/(^.*?)(https?:\/\/([\w\d\._]+)[\/]?.*?(\s|$))(.*$)/i);
  3193. if(linkArr != null && linkArr[0].indexOf('"cmd"') < 0 && linkArr[0].indexOf('href=') < 0 && linkArr.length == 6) msg = linkArr[1] + '<a href="' + linkArr[2] + '" target="_blank" class="chat_link">[' + (SRDotDX.linkNames[linkArr[3]]?(SRDotDX.linkNames[linkArr[3]]+' link'):linkArr[3]) + ']</a>' + linkArr[4] + linkArr[5];
  3194. //this._messages_count % 2 && h.push("even");
  3195. }
  3196. if(SRDotDX.config.mutedUsers[usr]) h.push('DotDX_nukedRaid');
  3197. if(SRDotDX.config.ignUsers[usr]) usr = SRDotDX.config.ignUsers[usr], e.push('ign');
  3198. var fCls = h.join(' ');
  3199. var ts = fCls.indexOf('emote') > -1 || fCls.indexOf('script') > -1 || fCls.indexOf('bot') > -1 ? '' : ('('+('0'+(new Date().getHours())).slice(-2) + ':' + ('0'+(new Date().getMinutes())).slice(-2)+')&ensp;');
  3200. f && e.push('is_self');
  3201.  
  3202. usr = ChatDialogue.MESSAGE_TEMPLATE.evaluate({prefix: pfx, username: usr, message: msg, classNames: fCls, userClassNames: e.join(' '), timestamp: ts, room: rm, magId: curTs });
  3203. this.insert(usr);
  3204. }
  3205. };
  3206. ChatRoomGroup.prototype.buildRegularRoomNode = function(a){
  3207. var b = new Element("li", {"class": 0 === i % 2 ? "even room" : "odd room"});
  3208. b.room = a;
  3209. var c = (new Element("p",{"class": "name"})).update(a.name);
  3210. a.premium_only && (active_user.isPremium() || c.addClassName("upsell"), c.addClassName("premium_room_icon spritesite"));
  3211. b.insert(c);
  3212. b.insert((new Element("p", {"class": "user_count"+(a.joinable?"":" full")})).update(a.total_user_count));
  3213. b.insert(new Element("div", {style: "clear:both;"}));
  3214. return b
  3215. };
  3216. SRDotDX.util.updateUser = function(loading) {
  3217. if(loading || SRDotDX.config.kongUser == 'Guest') {
  3218. SRDotDX.config.kongUser = active_user.username();
  3219. SRDotDX.config.kongId = active_user.id();
  3220. SRDotDX.config.kongAuth = active_user.gameAuthToken();
  3221. }
  3222. };
  3223. SRDotDX.echo = function(msg) { holodeck.activeDialogue().SRDotDX_echo(msg) };
  3224. SRDotDX.util.getRoomNumber = function() { return parseInt(holodeck._chat_window._active_room.name().match(/[0-9]{1,2}/)) };
  3225. for (var i in SRDotDX.raids) SRDotDX.raidArray.push(i);
  3226. holodeck.addDotdChatCommand("stop",function(deck,text){
  3227. if(SRDotDX.gui.isPosting)
  3228. {
  3229. SRDotDX.gui.FPXStopPosting();
  3230. }else{SRDotDX.echo('<b>/stop</b>: Links are not being posted. Stop command invalid.');}
  3231. return false;
  3232. });
  3233. holodeck.addDotdChatCommand("e",function (deck, text){
  3234. var s = text.slice(2);
  3235. if(s != "") holodeck.activeDialogue().SRDotDX_emote(s);
  3236. else SRDotDX.echo('<b>/e</b>: Empty message specified');
  3237. return false;
  3238. }); //
  3239. holodeck.addDotdChatCommand("kill",function (deck, text){
  3240. document.getElementById("gameiframe").src = "";
  3241. SRDotDX.echo('Game window killed, have a nice chatting.');
  3242. return false;
  3243. });
  3244. holodeck.addDotdChatCommand("update", function(deck,text) {
  3245. var d = "<font color='#990000'><b>"+SRDotDX.version.minor+"</b></font><br>";
  3246. d += '<b>Installed Version</b>: <font color="#990000">'+SRDotDX.version.major+'</font><br>';
  3247. d += 'You can check ';
  3248. d += '<a href="https://greasyfork.org/scripts/406-mutik-s-dotd-script" target="_blank">here (greasyfork)</a>';
  3249. d += ' to see if your version is most current and update if needed.';
  3250. SRDotDX.echo(d);
  3251. return false;
  3252. });
  3253. holodeck.addDotdChatCommand("help", function(deck,text) {
  3254. var d = "<b>Available chat commands:</b><br>";
  3255. d += "/stop /e /kill /update /reload /relaod /rl /reloaf /mute /unmute /mutelist /ign /unign /ignlist /friend /unfriend /script /clear /wikil /import /imp /fs /room /ijoin /join /wiki /guide /manual /slap /sh /camp /perc /citadel /raid /help";
  3256. d += '<br><br><a href="https://docs.google.com/document/d/14X0WhnJrISQbxdfQv_scJbG1sUyXdE2g4iMfHmLM0E0/edit" target="_blank">You can click here to navigate to script guide for detailed instructions or use /guide and /manual commands.</a>';
  3257. SRDotDX.echo(d);
  3258. return false;
  3259. });
  3260. holodeck.addDotdChatCommand("reload,relaod,rl,reloaf",function(deck,text){
  3261. SRDotDX.reload();
  3262. return false;
  3263. });
  3264. holodeck.addDotdChatCommand("mute",function (deck, text){
  3265. var s = String(text).split(" ");
  3266. if(s.length == 2 && s[1] != ""){
  3267. SRDotDX.config.mutedUsers[s[1]]=true;
  3268. SRDotDX.echo('User "' + s[1] + '" muted. Use the /unmute command to undo, and the /mutelist to see all muted users.');
  3269. SRDotDX.config.save(false);
  3270. }else {
  3271. SRDotDX.echo('<b>/mute</b>: Invalid parameters specified. The proper syntax is "/mute [username]". <!--(<a href="#" onclick="SRDotDX.gui.help(\'mute\'); return false">help</a>)-->');
  3272. }
  3273. return false;
  3274. });
  3275. holodeck.addDotdChatCommand("ign",function (deck, text){
  3276. var s = text.split(" ");
  3277. if(s.length == 3 && s[1] != "" && s[2] != "") {
  3278. SRDotDX.config.ignUsers[s[1]]=s[2];
  3279. SRDotDX.echo(s[1] + '\'s ign "' + s[2] + '" added. Use the /unign command to undo, and the /ignlist to see all users with known ign.');
  3280. SRDotDX.config.save(false);
  3281. }
  3282. else SRDotDX.echo('<b>/ign</b>: Invalid parameters specified. The proper syntax is "/ign [kong username] [in game name]".');
  3283. return false;
  3284. });
  3285. holodeck.addDotdChatCommand('unmute',function (deck, text) {
  3286. var s = String(text).split(' ');
  3287. if(s.length == 2 && s[1] != '') {
  3288. if(s[1] == 'all') {
  3289. for (var u in SRDotDX.config.mutedUsers) delete SRDotDX.config.mutedUsers[u];
  3290. SRDotDX.config.save(false);
  3291. SRDotDX.echo('All users unmuted.');
  3292. }
  3293. else if (SRDotDX.config.mutedUsers[s[1]]) {
  3294. delete SRDotDX.config.mutedUsers[s[1]];
  3295. SRDotDX.echo('User "' + s[1] + '" unmuted.');
  3296. SRDotDX.config.save(false);
  3297. }
  3298. else SRDotDX.echo('No muted user "' + s[1] + '" found.');
  3299. }
  3300. else SRDotDX.echo('<b>/unmute</b>: Invalid parameters specified. The proper syntax is "/unmute [username]". "/unmute all" can be used to unmute all muted users.');
  3301. return false;
  3302. });
  3303. holodeck.addDotdChatCommand('unign',function (deck, text) {
  3304. var s = String(text).split(' ');
  3305. if(s.length == 2 && s[1] != '') {
  3306. if(s[1] == 'all') {
  3307. for (var u in SRDotDX.config.ignUsers) delete SRDotDX.config.ignUsers[u];
  3308. SRDotDX.config.save(false);
  3309. SRDotDX.echo('All users removed from IGN list.');
  3310. }
  3311. else if (SRDotDX.config.ignUsers[s[1]]) {
  3312. delete SRDotDX.config.ignUsers[s[1]];
  3313. SRDotDX.echo('Removed ' + s[1] + '\'s IGN.');
  3314. SRDotDX.config.save(false);
  3315. }
  3316. else SRDotDX.echo('No IGN of user "' + s[1] + '" found.');
  3317. }
  3318. else SRDotDX.echo('<b>/unign</b>: Invalid parameters specified. The proper syntax is "/unign [username]". "/unign all" can be used to clear IGN list.');
  3319. return false;
  3320. });
  3321. holodeck.addDotdChatCommand('mutelist', function (deck, text) {
  3322. var s = '<b>List of users currently muted:</b><br/>';
  3323. var i = 0;
  3324. for(var u in SRDotDX.config.mutedUsers) { s += u + '<br/>'; i++ }
  3325. if (i == 0) s = 'No users currently muted.<br/>';
  3326. s += '<br/>Use the /mute and /unmute commands to add or remove users on this list.';
  3327. SRDotDX.echo(s);
  3328. return false;
  3329. });
  3330. holodeck.addDotdChatCommand('ignlist', function (deck, text) {
  3331. var s = '<b>List of known users IGN:</b><br/>';
  3332. if (SRDotDX.config.ignUsers.length == 0) s = 'No users added to IGN list.<br/>';
  3333. else for (var u in SRDotDX.config.ignUsers) s += u + ':' + SRDotDX.config.ignUsers[u] + '<br/>';
  3334. s += '<br/>Use the /ign and /unign commands to add or remove users on this list.';
  3335. SRDotDX.echo(s);
  3336. return false;
  3337. });
  3338. holodeck.addDotdChatCommand('script', function(deck,text) {
  3339. SRDotDX.gui.FPXdoWork('Script link: https://greasyfork.org/scripts/406-mutik-s-dotd-script');
  3340. return false;
  3341. });
  3342. holodeck.addDotdChatCommand('clear',function(deck,text) {
  3343. holodeck.activeDialogue().clear();
  3344. return false
  3345. });
  3346. holodeck.addDotdChatCommand('wikil', function(deck,text) {
  3347. SRDotDX.gui.FPXdoWork('http://dotd.wikia.com/wiki/Dawn_of_the_Dragons_Wiki');
  3348. return false;
  3349. });
  3350. holodeck.addDotdChatCommand('import,imp', function(deck,text) {
  3351. if (/^(\/imp+)/i.test(text)) {
  3352. SRDotDX.echo('Importing all raids from server');
  3353. SRDotDX.request.raids();
  3354. }
  3355. else SRDotDX.echo('FAIL! ;)');
  3356. return false;
  3357. });
  3358. holodeck.addDotdChatCommand('friend', function(deck,text) {
  3359. var s = String(text).split(" ");
  3360. if(s.length == 2 && s[1] != ""){
  3361. if (typeof SRDotDX.config.friendUsers[s[1]] != 'object') {
  3362. SRDotDX.config.friendUsers[s[1]] = [false,false,false,false,true];
  3363. SRDotDX.config.save(false);
  3364. SRDotDX.gui.refreshFriends();
  3365. SRDotDX.echo('Added ' + s[1] + ' to friends');
  3366. }
  3367. }
  3368. return false;
  3369. });
  3370. holodeck.addDotdChatCommand('unfriend', function(deck,text) {
  3371. var s = String(text).split(" ");
  3372. if(s[1] == 'all') {
  3373. for (var u in SRDotDX.config.friendUsers) delete SRDotDX.config.friendUsers[u];
  3374. SRDotDX.config.save(false);
  3375. SRDotDX.gui.refreshFriends();
  3376. SRDotDX.echo('All users removed from friend list.');
  3377. }
  3378. else if (SRDotDX.config.friendUsers[s[1]]) {
  3379. delete SRDotDX.config.friendUsers[s[1]];
  3380. SRDotDX.config.save(false);
  3381. SRDotDX.gui.refreshFriends();
  3382. SRDotDX.echo('Removed ' + s[1] + ' from friends');
  3383. }
  3384. else SRDotDX.echo('User "' + s[1] + '" not found on friend list.');
  3385. return false;
  3386. });
  3387. holodeck.addDotdChatCommand('fs', function(deck,text) {
  3388. var cmd = text.split(' ');
  3389. if (cmd[0] == '/fs' && cmd[1]) {
  3390. SRDotDX.echo('Posting raid to friends');
  3391. document.getElementById('DotDX_raidsToSpam').value = cmd[1];
  3392. SRDotDX.gui.spamRaidsToFriends();
  3393. }
  3394. else SRDotDX.echo('Wrong syntax. Usage: /fs <raid link>');
  3395. return false;
  3396. });
  3397. holodeck.addDotdChatCommand('room', function(deck,text) {
  3398. var cmd = text.split(' ');
  3399. if (cmd[0] == '/room' && cmd[1]) {
  3400. SRDotDX.gui.gotoRoom(cmd[1]);
  3401. }
  3402. else SRDotDX.gui.gotoRoom(0);
  3403. return false;
  3404. });
  3405. holodeck.addDotdChatCommand('ijoin,join', function(deck,text) {
  3406. var mode = text.charAt(1) == 'j', joinStr = '';
  3407. if (mode) joinStr = text.slice(6), SRDotDX.gui.quickImportAndJoin(joinStr);
  3408. else joinStr = text.slice(7), SRDotDX.gui.quickImportAndJoin(joinStr,true);
  3409. return false;
  3410. });
  3411. holodeck.addDotdChatCommand('wiki', function(deck,text) {
  3412. var p = /^\/wiki (.*?)$/i.exec(text);
  3413. if (p) {
  3414. window.open('http://dotd.wikia.com/wiki/Special:Search?search=' + p[1]);
  3415. SRDotDX.echo('Wiki search opened.');
  3416. }
  3417. else SRDotDX.echo('<b>/wiki</b>: Invalid parameters specified');
  3418. return false;
  3419. });
  3420. holodeck.addDotdChatCommand('guide,manual', function(deck,text) {
  3421. window.open('https://docs.google.com/document/d/14X0WhnJrISQbxdfQv_scJbG1sUyXdE2g4iMfHmLM0E0/edit');
  3422. SRDotDX.echo('Script guide opened in new tab/window.');
  3423. return false;
  3424. });
  3425. holodeck.addDotdChatCommand('slap', function(deck,text) {
  3426. var p = /^\/slap (.*?)$/i.exec(text);
  3427. if (p) {
  3428. var num = Math.round((Math.random()*(SRDotDX.slapSentences.length-1)));
  3429. SRDotDX.gui.FPXdoWork('*' + SRDotDX.slapSentences[num].replace(/<nick>/g,p[1]) + '*');
  3430. }
  3431. else SRDotDX.echo('<b>/slap</b>: Invalid parameters specified');
  3432. return false;
  3433. });
  3434. holodeck.addDotdChatCommand('sh', function(deck,text) {
  3435. var p = /^\/sh (.*?)$/i.exec(text);
  3436. if (p) {
  3437. var fnd1 = p[1].toLowerCase(), fnd2 = p[1].length, found = false, sho;
  3438. for (i in SRDotDX.shortcuts) {
  3439. if (SRDotDX.shortcuts.hasOwnProperty(i)) {
  3440. sho = SRDotDX.shortcuts[i];
  3441. if (sho.n.toLowerCase().indexOf(fnd1) > -1 && sho.n.length == fnd2) {
  3442. SRDotDX.echo('<b>' + sho.bn + '</b>: ' + sho.desc);
  3443. found = true;
  3444. }
  3445. }
  3446. }
  3447. if (!found) SRDotDX.echo('<b>/sh</b>: Shortcut not found in db');
  3448. }
  3449. else SRDotDX.echo('<b>/sh</b>: No parameters specified');
  3450. return false;
  3451. });
  3452. holodeck.addDotdChatCommand('perc', function(deck,text) {
  3453. var bok = text.indexOf('bok',4);
  3454. var cwp = text.indexOf('cwp',4);
  3455. var empty = text.length < 6;
  3456. var output = "";
  3457. if (bok >= 0 || empty) output = "<b>Book of Knowledge Perc. Tiers:</b><br>\
  3458. 1 3999: Brown/Grey<br>\
  3459. 4000 5999: Brown/Grey/Green<br>\
  3460. 6000 9999: Grey/Green<br>\
  3461. 10000 13999: Grey/Green/Blue<br>\
  3462. 14000 15999: Green/Blue<br>\
  3463. 16000 17999: Green/Blue/Purple<br>\
  3464. 18000 21999: Blue/Purple<br>\
  3465. 22000 23999: Blue/Purple/Orange<br>\
  3466. 24000 29999: Purple/Orange<br>\
  3467. 30000 - 32999: Orange<br>\
  3468. 33000 - 35999: Orange/Red (more orange)<br>\
  3469. 36000 - 49999: Orange/Red (more red)<br>\
  3470. 50000 - 69999: Orange/Red (even more red)<br>\
  3471. 70000+ : Red";
  3472. if (empty) output += "<br>\
  3473. -------------------------------------------------<br>";
  3474. if (cwp >= 0 || empty) output += "<b>Clockwork Parts Perc. Tiers:</b><br>\
  3475. 1-1999: 10x Perf. Clockwork Part<br>\
  3476. 2000-3999: 25x Perf. Clockwork Part<br>\
  3477. 4000-5999: 40x Perf. Clockwork Part<br>\
  3478. 6000-7999: 55x Perf. Clockwork Part<br>\
  3479. 8000-9999: 70x Perf. Clockwork Part<br>\
  3480. 10000-11999: 85x Perf. Clockwork Part<br>\
  3481. 12000-13999: 100x Perf. Clockwork Part<br>\
  3482. 14000-15999: 115x Perf. Clockwork Part<br>\
  3483. 16000-17999: 130x Perf. Clockwork Part<br>\
  3484. 18000-19999: 145x Perf. Clockwork Part<br>\
  3485. 20000-21999: 160x Perf. Clockwork Part<br>\
  3486. 22000-23999: 175x Perf. Clockwork Part<br>\
  3487. 24000-25999: 190x Perf. Clockwork Part<br>\
  3488. 26000-27999: 205x Perf. Clockwork Part<br>\
  3489. 28000-29999: 220x Perf. Clockwork Part<br>\
  3490. 30000-31999: 235x Perf. Clockwork Part<br>\
  3491. 32000-33999: ???x Perf. Clockwork Part<br>\
  3492. 34000-35999: ???x Perf. Clockwork Part<br>\
  3493. 36000+ : 260x Perf. Clockwork Part";
  3494. SRDotDX.echo(output);
  3495. return false;
  3496. });
  3497. holodeck.addDotdChatCommand('citadel', function(deck,text) {
  3498. SRDotDX.echo("Barrack Book = Grune N Quest<br>\
  3499. Barrack Scroll 1 = Hydra NM Raid<br>\
  3500. Barrack Scroll 2 = Research Library book<br>\
  3501. Barrack Scroll 3 = Rhalmarius the Despoiler NM Raid/Crafting<br>\
  3502. Barrack Scroll 4 = The New Claw (World Raid) craft<br>\
  3503. Barrack Scroll 5 = Burbata the Spine-Crusher NM Raid<br>\
  3504. Barrack Scroll 6 = Temp loot from Hargamesh/Grimsly NM Raids<br>\
  3505. Barrack Scroll 7 = The Baroness NM Quest<br>\
  3506. Barrack Scroll 8 = Crafting from Imryx the Incinerator NM Raid<br>\
  3507. Armorsmith Book = Lurking Horror N Quest<br>\
  3508. Armorsmith Scroll 1 = Nalagarst NM Raid<br>\
  3509. Armorsmith Scroll 2 = Research Library 1<br>\
  3510. Armorsmith Scroll 3 = Dragon's Lair NM Raid<br>\
  3511. Armorsmith Scroll 4 = Temp loot from Rift/Sisters NM Raid<br>\
  3512. Armorsmith Scroll 5 = Baroness NM Raid<br>\
  3513. Weaponsmith Book = Erebus N Quest<br>\
  3514. Weaponsmith Scroll 1 = Baroness NM Raid<br>\
  3515. Weaponsmith Scroll 2 = Research Library 1<br>\
  3516. Weaponsmith Scroll 3 = Dragon's Lair NM Raid<br>\
  3517. Weaponsmith Scroll 4 = Temp loot from Mardachus NM Raid<br>\
  3518. Weaponsmith Scroll 5 = Warlord Zugen NM Raid<br>\
  3519. Alchemist Book = Nalagarst N Quest<br>\
  3520. Alchemist Scroll 1 = Kalaxia N Quest<br>\
  3521. Alchemist Scroll 2 = Research Library 5<br>\
  3522. Alchemist Scroll 3 = The New Claw (World Raid)<br>\
  3523. Alchemist Scroll 4 = Teremarthu NM Raid<br>\
  3524. Research Book = Bellarius N Quest<br>\
  3525. Research Library Scroll 1 = Mardachus NM Raid<br>\
  3526. Research Library Scroll 2 = Valanazes NM Raid<br>\
  3527. Research Library Scroll 3 = Teremarthu NM Raid<br>\
  3528. Research Library Scroll 4 = Z'ralk'thalat NM Raid<br>\
  3529. Research Library Scroll 5 = Simulacrum of Dahrizon NM Quest<br>\
  3530. Research Library Scroll 6 = Count Siculus' Phantom N Quest<br>\
  3531. Pet Emporium Book = Count Siculus' Phantom N Quest<br>\
  3532. Pet Emporium Scroll 1 = Research Library 4<br>\
  3533. Pet Emporium Scroll 2 = Cannibal Barbarians NM Raid<br>\
  3534. Stables Book = Valanazes N Quest<br>\
  3535. Stables Scroll 1 = Frog-men Assassins NM Raid<br>\
  3536. Stables Scroll 2 = Research Library 2<br>\
  3537. Stables Scroll 3 = Mount Chest<br>\
  3538. Training Ground Book = Teremarthu N Quest<br>\
  3539. Training Ground Scroll 1 = Research Library 3<br>\
  3540. Training Ground Scroll 2 = Temporary loot from Z7 NM Raids<br>\
  3541. Training Ground Scroll 3 = Invasion Rank: Wyrm-Commander<br>\
  3542. Training Ground Scroll 4 = Invasion Rank: Chief Battlefield Overseer<br>\
  3543. Training Ground Scroll 5 = Count Siculus' Phantom L&NM Raid<br>\
  3544. Training Ground Scroll 6 = Thaltherda the Sea-Slitherer NM Raid<br>\
  3545. Wizard's Tower Book = Ruzzik the Slayer N Quest<br>\
  3546. Wizard's Tower Scroll 1 = Salome the Seductress NM Raid<br>\
  3547. Wizard's Tower Scroll 2 = Kalaxia the Far-Seer NM Raid<br>\
  3548. Wizard's Tower Scroll 3 = Yydian's Sanctuary NM Raid<br>\
  3549. Wizard's Tower Scroll 4 = Drulcharus NM Raid<br>\
  3550. Jeweler Book = Krugnug N Quest<br>\
  3551. Jeweler Scroll 1 = Thaltherda the Sea-Slitherer NM Raid<br>\
  3552. Jeweler Scroll 2 = Crafting (General/Events)<br>\
  3553. Jeweler Scroll 3 = Spectral Erebus Raid/Crafting");
  3554. return false;
  3555. });
  3556. holodeck.addDotdChatCommand('camp', function(deck,text) {
  3557. var p = text.split(' '), msg = '';
  3558. if (p[1] && SRDotDX.camps.hasOwnProperty(p[1].toLowerCase())) {
  3559. var camp = SRDotDX.camps[p[1].toLowerCase()];
  3560. var num = camp.tiers[0].length;
  3561. msg += '<a class="title" target="_blank" href="http://dotd.wikia.com/wiki/' + camp.name.replace(/ /g,'_').replace(/'/g,"%27") + '_(Campaign)">' + camp.name + '</a>';
  3562. msg += '<br>Camp time: N ' + camp.time[0] + 'h, H '+ camp.time[1] +'h<br>Prefixes: ' + camp.prefixes;
  3563. msg += '<br><table class="camps"><thead><tr><th>Dmg</th><th>CU</th>'+(num>3?'<th>R</th><th class="tb">E</th>':'<th class="tb">RE</th>');
  3564. for(var i=0; i<camp.numNodes; i++) {
  3565. msg += '<th>' + camp[camp.nodes[i]].sname + '</th>';
  3566. }
  3567. msg += '</tr></thead><tbody>';
  3568. if(num>3) {
  3569. for (i = 0; i<camp.tiers.length; i++) {
  3570. msg += '<tr class="head"><td class="ep">'+SRDotDX.util.getShortNumMil(camp.tiers[i][0])+'</td><td>'+camp.tiers[i][1]+'</td><td>'+camp.tiers[i][2]+'</td><td class="tb">'+camp.tiers[i][3]+'</td>';
  3571. for (var j=0; j<camp.numNodes; j++) msg += camp[camp.nodes[j]].tiers[i]?'<td class="mark">&#x2713;</td>':'<td></td>';
  3572. }
  3573. }
  3574. else {
  3575. for (i = 0; i<camp.tiers.length; i++) {
  3576. msg += '<tr class="head"><td class="ep">'+SRDotDX.util.getShortNumMil(camp.tiers[i][0])+'</td><td>'+camp.tiers[i][1]+'</td><td class="tb">'+camp.tiers[i][2]+'</td>';
  3577. for (var j=0; j<camp.numNodes; j++) msg += camp[camp.nodes[j]].tiers[i]?'<td class="mark">&#x2713;</td>':'<td></td>';
  3578. }
  3579. }
  3580. msg += '</tbody></table>';
  3581. var node;
  3582. for(i=0; i<camp.numNodes; i++) {
  3583. node = camp[camp.nodes[i]];
  3584. msg += (i?'<br>':'') + node.sname + ' &mdash; ' + node.name + ', FS: N ' + SRDotDX.util.getShortNumMil(node.hp[0]/node.size) + ' / H ' + SRDotDX.util.getShortNumMil(node.hp[1]/node.size) ;
  3585. }
  3586. SRDotDX.echo('*loading....*');
  3587. setTimeout( function(){
  3588. var chats = document.getElementsByClassName('chat_message_window');
  3589. for (i=1; i<chats.length; i++) {
  3590. var elem = chats[i].getElementsBySelector('span[name="SRDotDX_DotDeXtension"]');
  3591. if (typeof elem[elem.length-1] != 'undefined' && elem[elem.length-1].innerHTML.indexOf('loading....') > 0) {
  3592. var ele = elem[elem.length-1];
  3593. ele.innerHTML = ele.innerHTML.slice(0,-13) + msg;
  3594. chats[i].scrollTop = chats[i].scrollHeight;
  3595. break;
  3596. }
  3597. }
  3598. }, 100);
  3599. }
  3600. else SRDotDX.echo('No campaigns found matching "' + (p[1]?p[1]:'') + '". Valid values are: ' + Object.keys(SRDotDX.camps).join(', '));
  3601. return false;
  3602. });
  3603. holodeck.addDotdChatCommand('raid,rd', function(deck,text) {
  3604. //var p = /^\/raid (.*?)(?: ([1-6]))?$/i.exec(text);
  3605. var p = text.split(' ');
  3606. if (p[1]) {
  3607. var msg = '', n, i;
  3608. var diff = !isNaN(p[2]) ? p[2] - 1 : -1;
  3609. var fnd = p[1].toLowerCase();
  3610. for (i in SRDotDX.raids) {
  3611. if (SRDotDX.raids.hasOwnProperty(i)) {
  3612. var raid = SRDotDX.raids[i];
  3613. if (raid.name.toLowerCase().indexOf(fnd) > -1) {
  3614. msg += '<a class="title" target="_blank" href="http://dotd.wikia.com/wiki/' + raid.name.replace(/ /g,'_').replace(/'/g,"%27") + '_(Raid)">' + raid.name + '</a>';
  3615. msg += '<br>' + (raid.type == '' ? '' : raid.type + '<br>') + SRDotDX.raidSizes[raid.size].name + ' Raid (' + (raid.size == 101 ? 100 : raid.size) + ' slots) | ' + raid.duration + 'h';
  3616. msg += '<br><table class="raids">';
  3617. switch (diff) {
  3618. case 0: msg += '<colgroup><col><col class="selected"><col><col><col></colgroup>'; break;
  3619. case 1: msg += '<colgroup><col><col><col class="selected"><col><col></colgroup>'; break;
  3620. case 2: msg += '<colgroup><col><col><col><col class="selected"><col></colgroup>'; break;
  3621. case 3: msg += '<colgroup><col><col><col><col><col class="selected"></colgroup>'; break;
  3622. default: msg += '<colgroup><col><col><col><col><col></colgroup>'; break;
  3623. }
  3624. var size = raid.size < 15 ? 10 : raid.size, fs = [], j = 4;
  3625. while(j--) fs[j] = raid.health[j]/(raid.size == 101 ? 100 : raid.size);
  3626. msg += '<thead> \
  3627. <tr><th style="border:0; background-color: transparent;"></th><th>Normal</th><th>Hard</th><th>Legend</th><th>NMare</th></tr> \
  3628. </thead> \
  3629. <tbody> \
  3630. <tr class="head"><td class="ep">HP</td><td>' + SRDotDX.util.getShortNum(raid.health[0]) + '</td><td>' + SRDotDX.util.getShortNum(raid.health[1]) + '</td><td>' + SRDotDX.util.getShortNum(raid.health[2]) + '</td><td>' + SRDotDX.util.getShortNum(raid.health[3]) + '</td></tr> \
  3631. <tr class="head"><td class="ep">FS</td><td>' + SRDotDX.util.getShortNum(fs[0]) + '</td><td>' + SRDotDX.util.getShortNum(fs[1]) + '</td><td>' + SRDotDX.util.getShortNum(fs[2]) + '</td><td>' + SRDotDX.util.getShortNum(fs[3]) + '</td></tr> \
  3632. <tr class="head split"><td class="ep">AP</td><td>&mdash;</td><td>&mdash;</td><td>&mdash;</td><td>' + SRDotDX.util.getShortNum(fs[3]/2.0) + '</td></tr>';
  3633. if (typeof raid.lt != 'object' && raid.id != 'rhalmarius_the_despoiler' && raid.id != 'grundus') {
  3634. var ratio = SRDotDX.raidSizes[size].ratios;
  3635. var ename = SRDotDX.raidSizes[size].enames;
  3636. for(j=0; j<ratio.length; j++) {
  3637. if (ratio[j] > 0) msg += '<tr><td class="ep">'+ename[j]+'</td><td>'+SRDotDX.util.getShortNum(fs[0]*ratio[j])+'</td><td>'+SRDotDX.util.getShortNum(fs[1]*ratio[j])+'</td><td>'+SRDotDX.util.getShortNum(fs[2]*ratio[j])+'</td><td>'+SRDotDX.util.getShortNum(fs[3]*ratio[j])+'</td></tr>';
  3638. }
  3639. }
  3640. else if(typeof raid.lt == 'object') {
  3641. var elen = SRDotDX.lootTiers[raid.lt[0]].tiers;
  3642. var eleh = SRDotDX.lootTiers[raid.lt[1]].tiers;
  3643. var elel = SRDotDX.lootTiers[raid.lt[2]].tiers;
  3644. var elenm= SRDotDX.lootTiers[raid.lt[3]].tiers;
  3645. var epics = SRDotDX.lootTiers[raid.lt[0]].epics;
  3646. var best = SRDotDX.lootTiers[raid.lt[0]].best;
  3647. var e = SRDotDX.lootTiers[raid.lt[0]].e?'E':'';
  3648. for(j=0; j<epics.length; j++) {
  3649. msg += '<tr'+(j==best?' class="best"':'')+'><td class="ep">'+epics[j]+e+'</td><td>'+elen[j]+'</td><td>'+eleh[j]+'</td><td>'+elel[j]+'</td><td>'+elenm[j]+'</td></tr>';
  3650. }
  3651. }
  3652. msg += '</tbody></table>'
  3653. }
  3654. }
  3655. }
  3656. if (msg != '') {
  3657. SRDotDX.echo('*loading....*');
  3658. setTimeout( function(){
  3659. var chats = document.getElementsByClassName('chat_message_window');
  3660. for (i=1; i<chats.length; i++) {
  3661. var elem = chats[i].getElementsBySelector('span[name="SRDotDX_DotDeXtension"]');
  3662. if (typeof elem[elem.length-1] != 'undefined' && elem[elem.length-1].innerHTML.indexOf('loading....') > 0) {
  3663. var ele = elem[elem.length-1];
  3664. ele.innerHTML = ele.innerHTML.slice(0,-13) + msg;
  3665. chats[i].scrollTop = chats[i].scrollHeight;
  3666. break;
  3667. }
  3668. }
  3669. }, 100);
  3670. }
  3671. else SRDotDX.echo('No raids found matching: ' + p[1]);
  3672. }
  3673. else SRDotDX.echo('<b>/raid</b>: Invalid parameters specified (<a href="#" onclick="SRDotDX.gui.help(\'raid\')">help</a>)');
  3674. return false;
  3675. });
  3676. window.onbeforeunload = function() { SRDotDX.config.save(false) };
  3677. SRDotDX.fails = 0;
  3678. console.log('[DotDX] Core loaded. Loading user interface...');
  3679. SRDotDX.gui.load();
  3680. SRDotDX.request.init();
  3681. setTimeout(function() { delete SRDotDX.load }, 100);
  3682. }
  3683. else if (++SRDotDX.fails < 20) {
  3684. console.log('[DotDX] Missing needed Kong resources (try:' + SRDotDX.fails + '), retrying in 0.75 second...');
  3685. setTimeout( SRDotDX.load, 750);
  3686. }
  3687. else {
  3688. console.log('[DotDX] Unable to locate required Kong resources. Loading aborted');
  3689. setTimeout(function() { delete SRDotDX }, 1);
  3690. }
  3691. }
  3692. };
  3693. console.log('[DotDX] Initialized. Checking for needed Kong resources ...');
  3694. SRDotDX.load();
  3695. }
  3696. //if (window.top == window.self && (/^http:\/\/www\.kongregate\.com\/games\/5thplanetgames\/dawn-of-the-dragons(?:\/?$|\?|#)/i.test(document.location.href))) { //main
  3697. if (window.top == window.self && (/^http:\/\/www\.kongregate\.com\/games.+/i.test(document.location.href))) { //main
  3698. console.log('[DotDX] Initializing ...');
  3699. document.addEventListener("dotd.req", function(param) {
  3700. var p = JSON.parse(param.data);
  3701. if (p.wrappedJSObject) p = p.wrappedJSObject;
  3702. p.callback = function (e, r) {
  3703. this.onload = null;
  3704. this.onerror = null;
  3705. this.ontimeout = null;
  3706. this.event = e;
  3707. this.status = r.status;
  3708. this.responseText = r.responseText;
  3709. //console.log('[DotDX] Callback: ' + JSON.stringify(this));
  3710. var c = document.createEvent("MessageEvent");
  3711. if (c.initMessageEvent) c.initMessageEvent(this.eventName, false, false, JSON.stringify(this), document.location.protocol + "//" + document.location.hostname, 1, unsafeWindow, null);
  3712. else c = new MessageEvent(this.eventName, {"origin": document.location.protocol + "//" + document.location.hostname, "lastEventId": 1, "source": unsafeWindow, "data": JSON.stringify(this)});
  3713. document.dispatchEvent(c);
  3714. };
  3715. p.onload = p.callback.bind(p, "load");
  3716. p.onerror = p.callback.bind(p, "error");
  3717. p.ontimeout = p.callback.bind(p, "timeout");
  3718. setTimeout(function(){ GM_xmlhttpRequest(p) }, 1);
  3719. //GM_xmlhttpRequest(p);
  3720. });
  3721. var scr = document.createElement('script');
  3722. scr.appendChild(document.createTextNode('(' + main + ')()'));
  3723. (document.head || document.body || document.documentElement).appendChild(scr);
  3724. }