Mutik's DotD Script

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

目前為 2014-08-13 提交的版本,檢視 最新版本

// ==UserScript==
// @name           Mutik's DotD Script
// @namespace      tag://kongregate
// @description    Fork of ForTheGoodOfAll DotD script with new look and strongly optimized js code
// @author         Mutik, orig version: SReject, chairmansteve, tsukinomai(Shylight)?, JHunz, wpatter6, MoW, true_heathen, HG, mutikt, PDrifting
// @version        1.1.1
// @grant          GM_xmlhttpRequest
// @grant          GM_setValue
// @grant          GM_getValue
// @grant          unsafeWindow
// @include        http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons*
// @hompage        http://www.dotdraids.pl
// ==/UserScript==

function main() {
    if (typeof GM_setValue === 'undefined') {
        var GM_setValue = function (name, value) { localStorage.setItem(name, (typeof value).substring(0, 1) + value); };
    }
    if (typeof GM_getValue == 'undefined') {
        var GM_getValue = function (name, dvalue) {
            var value = localStorage.getItem(name);
            if (typeof value != 'string') return dvalue;
            else {
                var type = value.substring(0, 1);
                value = value.substring(1);
                if (type == 'b') return (value == 'true');
                else if (type == 'n') return Number(value);
                else return value;
            }
        };
    }
    //if (typeof GM_deleteValue == 'undefined') var GM_deleteValue = function(name) { localStorage.removeItem(name) };

    window.FPX = {
		LandBasePrices:[4000,15000,25000,50000,75000,110000,300000,600000,1200000],
        LandBaseIncome:[100,300,400,700,900,1200,2700,4500,8000],
        LandCostRatio: function(owned) {
            var landCosts = [4000,15000,25000,50000,75000,110000,300000,600000,1200000];
            var icr = [1,1,1,1,1,1,1,1,1]; /*Income/Cost ratio*/
            var i = 9;
            while (i--) {
                landCosts[i] += FPX.LandBasePrices[i] * owned[i] / 10;
                icr[i] = FPX.LandBaseIncome[i] / landCosts[i];
            }
            return icr;
        }
	};
	window.timeSince = function(date,after) {
        if (typeof date === 'number') date = new Date(date);
        var seconds = Math.abs(Math.floor((new Date().getTime() - date.getTime())/1000));
        var interval = Math.floor(seconds/31536000);
        var pretext = 'about ', posttext = after ? ' left' : ' ago';
        if (interval >= 1) return pretext + interval + ' year' + (interval == 1 ? '' : 's') + posttext;
        interval = Math.floor(seconds/2592000);
        if (interval >= 1) return pretext + interval + ' month' + (interval == 1 ? '' : 's') + posttext;
        interval = Math.floor(seconds/86400);
        if (interval >= 1) return pretext + interval + ' day' + (interval == 1 ? '' : 's') + posttext;
        interval = Math.floor(seconds/3600);
        if (interval >= 1) return pretext + interval + ' hour' + (interval == 1 ? '' : 's') + posttext;
        interval = Math.floor(seconds/60);
        if (interval >= 1) return interval + ' minute' + (interval == 1 ? '' : 's') + posttext;
        return Math.floor(seconds) + ' second' + (seconds == 1 ? '' : 's') + posttext;
    };
	window.isNumber = function(n) { return !isNaN(parseFloat(n)) && isFinite(n); };
	window.SRDotDX = {
		version: { major: "1.1.1", minor: 'Mutik\'s mod' },
        util: {
            getQueryVariable: function(v, s){
                var query = String(s||window.location.search.substring(1));
                if(query.indexOf('?')>-1) query = query.substring(query.indexOf('?')+1);
                var vars = query.split('&');
                for (var i = 0; i < vars.length; i++) {
                    var pair = vars[i].split('=');
                    if (decodeURIComponent(pair[0]) == v) {
                        return decodeURIComponent(pair[1]);
                    }
                }
                return ''
            },
            getRaidFromUrl: function(url){
                var r = {}, link;
                var reg = /[?&]([^=]+)=([^?&]+)/ig, p = url.replace(/&amp;/gi,"&");
                while (link = reg.exec(p)) {
                    if (!r.diff && link[1] == 'kv_difficulty') r.diff = parseInt(link[2]);
                    else if (!r.hash && link[1] == 'kv_hash') r.hash = link[2];
                    else if (!r.boss && link[1] == 'kv_raid_boss') r.boss = link[2];
                    else if (!r.id && link[1] == 'kv_raid_id') r.id = link[2].replace(/http:?/i,"");
                    else if (link[1] != 'kv_action_type') return null;
                }
                return r;
            },
            getShortNum: function (num) {
                if (isNaN(num) || num < 0) return num;
                if (num >= 1000000000000) return (num / 1000000000000).toPrecision(4) + 't';
                if (num >= 1000000000) return (num / 1000000000).toPrecision(4) + 'b';
                if (num >= 1000000) return (num / 1000000).toPrecision(4) + 'm';
                if (num >= 1000) return (num / 1000).toPrecision(4) + 'k';
                return num + ''
            },
            getShortNumMil: function (num) {
                if (isNaN(num) || num < 0) return num;
                if (num >= 1000000) return (num / 1000000).toPrecision(4) + 't';
                if (num >= 1000) return (num / 1000).toPrecision(4) + 'b';
                return num.toPrecision(4) + 'm'
            },
            objToUriString: function(obj) {
                if (typeof obj == 'object') {
                    var str = '';
                    for (var i in obj) str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]) + '&'; str = str.substring(0,str.length-1);
                    return str
                } return '';
            },
            serialize: function(obj) {
                var str = [];
                for (var p in obj) if(obj[p]!=null)str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
                return str.join("&");
            },
            stringFormat: function() {
                var s = arguments[0];
                for (var i = 0; i < arguments.length - 1; i++) {
                    var reg = new RegExp("\\{" + i + "\\}", "gm");
                    s = s.replace(reg, arguments[i + 1]);
                }
                return s;
            }
        },
		config: (function() {
            var tmp, reqSave = false;
			try { tmp = JSON.parse(GM_getValue('SRDotDX','{}')) }
			catch (e) { tmp = {}; reqSave = true }
            //Raids tab vars
            tmp.lastFilter = typeof tmp.lastFilter == 'string' ? tmp.lastFilter : '';
            tmp.filterSearchStringR = typeof tmp.filterSearchStringR == 'string' ? tmp.filterSearchStringR : '';
            tmp.fltIncVis = typeof tmp.fltIncVis == 'boolean' ? tmp.fltIncVis : false;
            tmp.fltShowNuked = typeof tmp.fltShowNuked == 'boolean' ? tmp.fltShowNuked : false;
            tmp.fltShowAll = typeof tmp.fltShowAll == 'boolean' ? tmp.fltShowAll : false;

            //Options tab vars
            tmp.importFiltered = typeof tmp.importFiltered == 'boolean' ? tmp.importFiltered : true;
			tmp.hideRaidLinks = typeof tmp.hideRaidLinks == 'boolean' ? tmp.hideRaidLinks : false;
            tmp.hideBotLinks = typeof tmp.hideBotLinks == 'boolean' ? tmp.hideBotLinks : false;
            tmp.hideVisitedRaids = typeof tmp.hideVisitedRaids == 'boolean' ? tmp.hideVisitedRaids : false;
            tmp.hideVisitedRaidsInRaidList = typeof tmp.hideVisitedRaidsInRaidList == 'boolean' ? tmp.hideVisitedRaidsInRaidList : false;
            tmp.markMyRaidsVisted = typeof tmp.markMyRaidsVisted == 'boolean' ? tmp.markMyRaidsVisted : false;
            tmp.markImportedVisited = typeof tmp.markImportedVisited == 'boolean' ? tmp.markImportedVisited : false;
            tmp.FPXLandOwnedCount = typeof tmp.FPXLandOwnedCount == 'object' ? tmp.FPXLandOwnedCount : [0, 0, 0, 0, 0, 0, 0, 0, 0];
            tmp.prettyPost = typeof tmp.prettyPost == 'boolean' ? tmp.prettyPost : false;
            tmp.useMaxRaidCount = typeof tmp.useMaxRaidCount == 'boolean' ? tmp.useMaxRaidCount : false;
            tmp.maxRaidCount = !(typeof tmp.maxRaidCount === 'undefined') ? tmp.maxRaidCount : 3000;
            tmp.autoImportPaste = typeof tmp.autoImportPaste == 'boolean' ? tmp.autoImportPaste : false;
            tmp.confirmForLargePaste = typeof tmp.confirmForLargePaste == 'boolean' && tmp.confirmPasteSize ? tmp.confirmForLargePaste : false;
            tmp.confirmPasteSize = typeof tmp.confirmPasteSize == 'number' ? tmp.confirmPasteSize : 1000;
            tmp.showStatusOverlay = typeof tmp.showStatusOverlay == 'boolean' ? tmp.showStatusOverlay : false;
            tmp.confirmDeletes = typeof tmp.confirmDeletes == 'boolean' ? tmp.confirmDeletes : true;
            tmp.autoPostPaste = typeof tmp.autoPostPaste == 'boolean' ? tmp.autoPostPaste : false;
            tmp.whisperTo = typeof tmp.whisperTo == 'string' ? tmp.whisperTo : '';
            tmp.formatLinkOutput = typeof tmp.formatLinkOutput == 'boolean' ? tmp.formatLinkOutput : false;
            tmp.linkShowFs = typeof tmp.linkShowFs == 'boolean' ? tmp.linkShowFs : false;
            tmp.linkShowAp = typeof tmp.linkShowAp == 'boolean' ? tmp.linkShowAp : false;
            tmp.unvisitedRaidPruningMode = typeof tmp.unvisitedRaidPruningMode == 'number' ? tmp.unvisitedRaidPruningMode : 1;
            tmp.selectedRaids = typeof tmp.selectedRaids == 'string' ? tmp.selectedRaids : '';
            tmp.pastebinUrl = typeof tmp.pastebinUrl == 'string' ? tmp.pastebinUrl : '';
            tmp.bckColor = typeof tmp.bckColor == 'string' ? tmp.bckColor : 'fff';
            tmp.lastImported = typeof tmp.lastImported == 'number' ? tmp.lastImported : ((new Date).getTime() - 1728000000);
            tmp.hideKongForum = typeof tmp.hideKongForum == 'boolean' ? tmp.hideKongForum : false;
            tmp.hideGameDetails = typeof tmp.hideGameDetails == 'boolean' ? tmp.hideGameDetails : false;
            tmp.hideGameTitle = typeof tmp.hideGameTitle == 'boolean' ? tmp.hideGameTitle : true;
            tmp.chatFilterString = typeof tmp.chatFilterString == 'string' ? tmp.chatFilterString : '';
            tmp.filterSearchStringC = typeof tmp.filterSearchStringC == 'string' ? tmp.filterSearchStringC : '';
            tmp.chatSize = typeof tmp.chatSize == 'number' ? tmp.chatSize : 300;
            tmp.sbEnable = typeof tmp.sbEnable == 'boolean' ? tmp.sbEnable : true;
            tmp.cbDisable = typeof tmp.cbDisable == 'boolean' ? tmp.cbDisable : true;
            tmp.sbRightSide = typeof tmp.sbRightSide == 'boolean' ? tmp.sbRightSide : false;
            tmp.kongUser = typeof tmp.kongUser == 'string' ? tmp.kongUser : 'Guest';
            tmp.kongAuth = typeof tmp.kongAuth == 'string' ? tmp.kongAuth : '0';
            tmp.kongId = typeof tmp.kongId == 'string' ? tmp.kongId : '0';
            tmp.kongMsg = typeof tmp.kongMsg == 'boolean' ? tmp.kongMsg : false;
            tmp.themeNum = typeof tmp.themeNum == 'number' ? tmp.themeNum : 0;
            tmp.fontNum = typeof tmp.fontNum == 'number' ? tmp.fontNum : 0;
            tmp.hideScrollBar = typeof tmp.hideScrollBar == 'boolean' ? tmp.hideScrollBar : false;
            tmp.filterChatLinks = typeof tmp.filterChatLinks == 'boolean' ? tmp.filterChatLinks : true;
            tmp.filterRaidList = typeof tmp.filterRaidList == 'boolean' ? tmp.filterRaidList : false;
            tmp.newRaidsAtTopOfList = typeof tmp.newRaidsAtTopOfList == 'boolean' ? tmp.newRaidsAtTopOfList : false;
            tmp.sbConfig = typeof tmp.sbConfig == 'object' ? tmp.sbConfig : [
                {"type":"label","name":"Camps"},
                {"type":"btn","name":"BoB","cmd":"/camp bob"},
                {"type":"btn","name":"MaM","cmd":"/camp mam"},
                {"type":"btn","name":"GD","cmd":"/camp gd"},
                {"type":"label","name":"Tiers"},
                {"type":"btn","name":"Bella","cmd":"/raid bella"},
                {"type":"btn","name":"Xerk","cmd":"/raid xerkara"},
                {"type":"btn","name":"Tisi","cmd":"/raid tisi"},
                {"type":"label","name":"Join"},
                {"type":"btn","name":"Farms","cmd":"SRDotDX.gui.quickImportAndJoin('farm:nnm')"},
                {"type":"label","name":"Utils"},
                {"type":"btn","color":"g","name":"(Re)Load","cmd":"SRDotDX.reload()"},
                {"type":"btn","color":"r","name":"Unload","cmd":"/kill"},
                {"type":"btn","name":"Room 1","cmd":"SRDotDX.gui.gotoRoom(1)"},
                {"type":"btn","name":"Room 2","cmd":"SRDotDX.gui.gotoRoom(2)"},
                {"type":"btn","name":"Room 8","cmd":"SRDotDX.gui.gotoRoom(8)"},
                {"type":"label","name":"Sheets"},
                {"type":"btn","name":"Magic","cmd":"https://docs.google.com/spreadsheets/d/1O0eVSnzlACP9XJDq0VN4kN51ESUusec3-gD4dKPHRNU"},
                {"type":"btn","name":"Mount","cmd":"https://docs.google.com/spreadsheet/ccc?key=0AiSpM5yAo8atdER2NEhHY3VjckRhdWctWV8yampQZUE"},
                {"type":"btn","name":"Gear","cmd":"https://docs.google.com/spreadsheet/lv?key=0AvP2qXrWcHBxdHpXZkUzTHNGNkVWbjE5c2VEZUNNMUE"},
                {"type":"label","name":"Raids"},
                {"type":"jtxt"},
                {"type":"btn","color":"g","name":"Join","cmd":"SRDotDX.gui.joinSelectedRaids(true)"},
                {"type":"btn","color":"b","name":"Import","cmd":"SRDotDX.gui.importFromServer()"},
                {"type":"btn","color":"y","name":"RaidBot","cmd":"SRDotDX.gui.switchBot()"}
            ];

            if (typeof tmp.mutedUsers != 'object') tmp.mutedUsers = {};
            if (typeof tmp.ignUsers != 'object') tmp.ignUsers = {};
            if (typeof tmp.friendUsers != 'object') tmp.friendUsers = {};
			if (typeof tmp.raidList != 'object') tmp.raidList = {};
            if (typeof tmp.filters !== 'object') tmp.filters = {};

            if(reqSave) GM_setValue('SRDotDX', JSON.stringify(tmp));

            // Delete expired raids
            for (var id in tmp.raidList) {
                if (tmp.raidList.hasOwnProperty(id)) {
                    tmp.raidList[id].timeLeft = function() { return this.expTime - parseInt((new Date).getTime() / 1000) };
                    if (tmp.raidList[id].timeLeft() < 0) delete tmp.raidList[id];
                    else if (typeof tmp.raidList[id].magic == "undefined") tmp.raidList[id].magic = [0,0,0,0,0,0];
                }
            }

            tmp.addRaid = function(hash,id,boss,diff,visited,user,ts,room,magic) {
				if((/ /).test(user)) {
                    var reg = new RegExp('[0-9]+|[0-9a-zA-Z_]+','g');
                    room = reg.exec(user); user = reg.exec(user);
                }
                if (typeof SRDotDX.config.raidList[id] != 'object') {
                    var tStamp = typeof ts == 'undefined' || ts == null ? parseInt((new Date).getTime() / 1000) : parseInt(ts);
					SRDotDX.config.raidList[id] = {
						hash: hash, id: id, boss: boss, diff: diff, visited: visited, nuked: false, user: user, lastUser: user, timeStamp: tStamp,
                        expTime: (typeof SRDotDX.raids[boss] == 'object' ? SRDotDX.raids[boss].duration : 96) * 3600 + tStamp,
                        timeLeft: function() {return this.expTime - parseInt((new Date).getTime() / 1000) },
                        room: typeof room == 'undefined' || room == null ? SRDotDX.util.getRoomNumber() : parseInt(room),
                        magic: typeof magic == 'undefined' || magic == null ? [0,0,0,0,0,0] : magic};
					SRDotDX.gui.addRaid(id);
				}
				SRDotDX.config.raidList[id].lastUser = user;
				return SRDotDX.config.raidList[id]
			};
			tmp.getRaid = function(id) {
				if (typeof SRDotDX.config.raidList[id] == 'object') {
                    if (SRDotDX.config.raidList[id].timeLeft() > 1) return SRDotDX.config.raidList[id];
                    delete SRDotDX.config.raidList[id];
                } return false
			};
            tmp.setFilter = function(raidid,diff,val) { SRDotDX.config.filters[raidid][diff] = val };
			tmp.save = function(b) {
                b = typeof b == 'undefined' ? true : b;
                GM_setValue('SRDotDX', JSON.stringify(SRDotDX.config));
				if(b) setTimeout(SRDotDX.config.save, 60000, true);
				else console.log('[DotDX] Manual config save invoked');
			};
			return tmp;
		})(),
        request: {
            importLock: false,
            joinAfterImport: false,
            fromChat: false,
            quickBtnLock: true,
            filterSearchStringT: "",
            raids: function(isinit,hours){
                if(!SRDotDX.gui.joining) {
                    var secs = 15 - parseInt((new Date().getTime() - SRDotDX.config.lastImported)/1000);
                    if(secs > 0) {
                        SRDotDX.echo("You can import again in " + secs + " seconds.");
                        return }
                    console.log("[DotDX] Importing raids from raids server ...");
                    if(!isinit)	this.initialize("Requesting raids");
                    else SRDotDX.request.tries++;
                    var h = hours ? ('&h='+hours) : '';
                    SRDotDX.request.req({
                        eventName: "dotd.getraids",
                        url: "http://dotdraids.pl/download.php?u="+SRDotDX.config.kongUser+h,
                        method: "GET",
                        headers: {"Content-Type": "application/JSON"},
                        timeout: 30000
                    });
                }
            },
            initialize: function (str) {
                SRDotDX.gui.doStatusOutput(str + "...",3000,true);
                SRDotDX.request.tries = 0;
                SRDotDX.request.seconds = 0;
                SRDotDX.request.complete = false;
                SRDotDX.request.timer = setTimeout(SRDotDX.request.tick, 1000, str);
            },
            tick: function (str) {
                if(!SRDotDX.request.complete){
                    if(SRDotDX.request.seconds > 25){
                        SRDotDX.gui.doStatusOutput("Request failed.",3000,true);
                        return;
                    }
                    SRDotDX.request.seconds++;
                    SRDotDX.gui.doStatusOutput(str + " ("+SRDotDX.request.seconds+")...",1500,true);
                    SRDotDX.request.timer = setTimeout(SRDotDX.request.tick, 1000, str);
                }
            },
            complete: false,
            seconds: 0,
            timer: null,
            tries: 0,
            req: function(param){
                var a = document.createEvent("MessageEvent");
                if (a.initMessageEvent) a.initMessageEvent("dotd.req", false, false, JSON.stringify(param), document.location.protocol + "//" + document.location.hostname, 0, window, null);
                else a = new MessageEvent("dotd.req",{"origin":document.location.protocol + "//" + document.location.hostname, "lastEventId": 0, "source": window, "data": JSON.stringify(param)});
                document.dispatchEvent(a);
            },
            pasteImport: function (url,isinit) {
                if(!isinit) this.initialize("Importing PasteBin");
                var pb = url.split('com/')[1];
                SRDotDX.request.req({
                    eventName: "dotd.importpb",
                    url: 'http://pastebin.com/raw.php?i=' + pb,
                    method: "GET",
                    timeout: 30000
                });
            },
            init: function () {
                document.addEventListener("dotd.joinraid", SRDotDX.request.joinRaidResponse, false);
                document.addEventListener("dotd.importpb", SRDotDX.request.pbResponse, false);
                document.addEventListener("dotd.getraids", SRDotDX.request.addRaids, false);
                delete this.init;
            },
            joinRaid: function(r){
                if(typeof r == 'object') {
                    if(!SRDotDX.gui.joining) SRDotDX.request.initialize("Joining " + (!SRDotDX.raids[r.boss]?r.boss.capitalize().replace(/_/g,' '):SRDotDX.raids[r.boss].shortname));
                    var joinData = 'kongregate_username='+SRDotDX.config.kongUser+'&kongregate_user_id='+SRDotDX.config.kongId+'&kongregate_game_auth_token='+SRDotDX.config.kongAuth;
                    SRDotDX.request.req({
                        eventName: "dotd.joinraid",
                        url: SRDotDX.util.stringFormat('http://50.18.191.15/kong/raidjoin.php?' + joinData + '&kv_action_type=raidhelp&kv_raid_id={0}&kv_hash={1}', r.id, r.hash),
                        method: "GET",
                        timeout: 30000
                    });
                }
            },
            addRaids: function(e) {
                var r, data = JSON.parse(e.data);
                if(data.status != 200) {
                    if(SRDotDX.request.tries >=3){
                        SRDotDX.request.complete = true;
                        SRDotDX.gui.doStatusOutput("Raids server busy. Please try again in a moment.");
                        console.log('[DotDX] Raids request failed (url: ' + data.url + ')');
                        console.log(JSON.stringify(data));
                    } else {
                        console.log("[DotDX] Raids server unresponsive (status " + data.status + "). Trying again, " + SRDotDX.request.tries + " tries.");
                    }
                    return;
                }
                SRDotDX.request.complete = true;
                try{ r = JSON.parse(data.responseText.split('<!--')[0]) }
                catch (ex) {
                    console.log("[DotDX] Raids importing error or no raids imported");
                    console.log('[DotDX] responseText: ' + data.responseText);
                    return;
                }
                SRDotDX.gui.doStatusOutput("Importing " + r.raids.length + " raids...");
                var raid, j = r.raids.length, n = 0, t=0;
                var swt = !SRDotDX.config.importFiltered, filter = SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML;
                while(j--) {
                    raid = r.raids[j];
                    if (swt || filter.indexOf('fltList_' + raid.b + '_' + (raid.d-1)) < 0) {
                        t++;
                        if (!SRDotDX.config.getRaid(raid.i)) {
                            n++;
                            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)}));
                        }
                        else SRDotDX.config.raidList[raid.i].magic = raid.m.split("_").map(function(x){return parseInt(x)});
                    }
                }
                console.log('[DotDX] Import raids from server complete');
                SRDotDX.gui.selectRaidsToJoin('import response');
                SRDotDX.config.lastImported = (new Date).getTime();
                var msg = 'Imported ' + t + ' raids, ' + n + ' new.';
                SRDotDX.echo(msg);
                if (SRDotDX.request.joinAfterImport) { SRDotDX.gui.selectRaidsToJoin(); SRDotDX.gui.joinSelectedRaids(false) }
                SRDotDX.gui.doStatusOutput(msg,5000,true);
            },
            pbResponse: function(e){
                var data = JSON.parse(e.data);
                if(data && data.responseText && data.url) {
                    SRDotDX.request.complete = true;
                    if(/raw/.test(data.url)) {
                        SRDotDX.gui.importingPastebin = true;
                        var r = data.responseText.split('|'), pbid = data.url.split('=')[1], u, i = 0;
                        if (/\|/.test(data.responseText)) { u = r[1]; r = r[3]; } else { u = 'Unknown'; r = r[0]; }
                        SRDotDX.gui.Importing = true;
                        var total = Object.keys(SRDotDX.config.raidList).length;
                        r = r.split(',');
                        while(i < r.length) SRDotDX.getRaidDetails(r[i], u, SRDotDX.config.markImportedVisited), i++;
                        var diff = Object.keys(SRDotDX.config.raidList).length - total;
                        SRDotDX.gui.doStatusOutput('Import complete, ' + diff + ' of ' + i + ' new raids');
                        var pbtot = i;
                        SRDotDX.gui.Importing = false;
                        var els = document.getElementsByClassName("pb_"+pbid);
                        if(els.length > 0) {
                            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++ }
                            else { i = 0; while (i < els.length) els[i].innerHTML='(Imported, ' + diff + ' new)', i++ }
                        }
                        setTimeout(SRDotDX.config.save, 1000, false);
                        SRDotDX.gui.importingPastebin = false;
                        console.log('[DotDX] Pastebin import complete (url: ' + data.url + ')');
                    }
                }
            },
            joinRaidResponse: function(e){
                var data = JSON.parse(e.data);
                if(data && data.responseText && data.url) {
                    SRDotDX.request.complete = true;
                    var raidid = SRDotDX.util.getQueryVariable('kv_raid_id', data.url);
                    SRDotDX.gui.joinRaidComplete++;
                    var status = '', statustxt = '';
                    if (typeof SRDotDX.config.raidList[raidid] == 'object') {
                    SRDotDX.config.raidList[raidid].visited = true;
                    SRDotDX.gui.toggleRaid('visited', raidid, true);
                    SRDotDX.gui.raidListItemUpdate(raidid);
                    if (/successfully (re-)?joined/i.test(data.responseText)) {
                        SRDotDX.gui.joinRaidSuccessful++;
                        statustxt = SRDotDX.raids[SRDotDX.config.raidList[raidid].boss].shortname + " joined successfully.";
                    } else if (/already a member/i.test(data.responseText)){
                        statustxt = "Join Failed. You are already a member.";
                    }else if (/already completed/i.test(data.responseText)) {
                        SRDotDX.gui.joinRaidDead++;
                        statustxt = "Join failed. Raid is dead.";
                        SRDotDX.nukeRaid(raidid);
                    }else if (/not a member of the guild/i.test(data.responseText)) {
                        SRDotDX.gui.joinRaidDead++;
                        statustxt = "Join failed. You are not member of that Guild.";
                        SRDotDX.nukeRaid(raidid);
                    } else if (/(invalid|find) raid (hash|ID)/i.test(data.responseText)) {
                        statustxt = "Join failed. Invalid hash or ID.";
                        SRDotDX.gui.joinRaidInvalid++;
                        SRDotDX.gui.deleteRaidFromDB(raidid);
                    }
                    else { statustxt = 'Unknown join response.'; }
                    } else SRDotDX.gui.joinRaidInvalid++;

                    if(SRDotDX.gui.joining) {
                        if(SRDotDX.gui.joinRaidComplete >= SRDotDX.gui.joinRaidList.length) {
                            statustxt = "Finished joining. " + SRDotDX.gui.joinRaidSuccessful + " new, " + SRDotDX.gui.joinRaidDead + " dead.";
                            SRDotDX.gui.joinFinish(true);
                            setTimeout(SRDotDX.config.save, 3000, false)
                        } else {
                            statustxt = "Joined " + SRDotDX.gui.joinRaidComplete + " of " + SRDotDX.gui.joinRaidList.length + ". " + SRDotDX.gui.joinRaidSuccessful + " new, " + SRDotDX.gui.joinRaidDead + " dead.";
                            if(SRDotDX.gui.joinRaidIndex < SRDotDX.gui.joinRaidList.length) SRDotDX.request.joinRaid(SRDotDX.gui.joinRaidList[SRDotDX.gui.joinRaidIndex++]);
                        }
                    }
                    else {
                        setTimeout(SRDotDX.config.save, 3000, false);
                    }
                    if(statustxt != '') SRDotDX.gui.doStatusOutput(statustxt, 4000, true);
                }
            }
        },
		getRaidDetailsBase: function(url) {
			var r = {diff: '', hash: '', boss: '', id: ''}, i;
			var reg = /[?&]([^=]+)=([^?&]+)/ig, p = url.replace(/&amp;/gi,'&');
			while ((i = reg.exec(p)) != null) {
				if (!r.diff && i[1] == 'kv_difficulty') r.diff = parseInt(i[2]);
				else if (!r.hash && i[1] == 'kv_hash') r.hash = i[2];
				else if (!r.boss && i[1] == 'kv_raid_boss') r.boss = i[2];
				else if (!r.id && i[1] == 'kv_raid_id') r.id = parseInt(i[2]);
				else if (i[1] != 'kv_action_type') return false;
			}
			if (typeof r != 'undefined' && typeof r.diff != 'undefined' && typeof r.hash != 'undefined' && typeof r.boss != 'undefined' && typeof r.id != 'undefined') {
				r.diffLongText = ['Normal','Hard','Legendary','Nightmare','Insane','Hell'][r.diff-1];
				r.diffShortText = ['N','H','L','NM','I','HL'][r.diff-1];
				var stats = SRDotDX.raids[r.boss];
				if (typeof stats == 'object') {
					r.name = stats.name;
					r.shortname = stats.shortname;
					r.size = stats.size;
					r.type = stats.type;
					r.dur = stats.duration;
					r.durText = stats.dur + "hrs";
					r.stat = stats.stat;
					r.statText = SRDotDX.getStatText(stats.stat);
				}
			}
			return r;
		},
		getPasteDetails: function(url,user) {
            user = user ? user : '';
			var pb = {url: url, id: url.substring(url.length-8)};
			pb.id = url.substring(url.length-8);
			console.log('[DotDX] Importing Pastebin (url: ' + url + ')');
			var info = SRDotDX.config.getPaste(pb.id);
			if (!info) { info = SRDotDX.config.addPaste(pb.url, pb.id, user); if(typeof info == 'object') pb.isNew = true }
            else pb.isNew = false;
			pb.user = info.user;
			pb.lastUser = info.lastUser;
			return pb;
		},
        getTierTxt: function(hp,ppl,ap){
            var num = hp/ppl; num = ap? num/2 : num;
            if (num >= 1000000000000) return (num / 1000000000000).toPrecision(3) + 't';
            if (num >= 1000000000) return (num / 1000000000).toPrecision(3) + 'b';
            if (num >= 1000000) return (num / 1000000).toPrecision(3) + 'm';
            if (num >= 1000) return (num / 1000).toPrecision(3) + 'k';
            return num + ''
        },
		getRaidDetails: function(url,user,visited,ts,room) {
            user = user ? user : '';
            var rVis = visited ? visited : user == SRDotDX.config.kongUser && SRDotDX.config.markMyRaidsVisted;
			var r = SRDotDX.util.getRaidFromUrl(url);
			if (r && typeof r.diff == 'number' && typeof r.hash == 'string' && typeof r.boss == 'string' && typeof r.id == 'string') {
                var filter = SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML;
                r.visited = rVis;
                if(!SRDotDX.config.importFiltered || filter.indexOf('fltList_' + r.boss + '_' + (r.diff-1)) < 0){
                var info = SRDotDX.config.getRaid(r.id);
				if (typeof info != 'object') {
					info = SRDotDX.config.addRaid(r.hash, r.id, r.boss, r.diff, r.visited, user, ts, room);
					if (typeof info == 'object') r.isNew = true;
                    else return null;
				}
                else r.isNew = false;
				r.timeStamp = info.timeStamp; r.visited = info.visited; r.nuked = info.nuked;
                }
				r.linkText = function() {
                    var raidInfo = SRDotDX.raids[r.boss];
                    var txt = '[&thinsp;' + ['','N','H','L','NM'][this.diff] + ' ';
                    txt += raidInfo ? raidInfo.shortname : r.boss.capitalize().replace(/_/g,' ');
                    if(SRDotDX.config.linkShowFs) txt += raidInfo ? ', fs:' + SRDotDX.getTierTxt(raidInfo.health[this.diff-1],raidInfo.size,false) : '';
                    if(SRDotDX.config.linkShowAp) txt += raidInfo ? ', ap:' + SRDotDX.getTierTxt(raidInfo.health[this.diff-1],raidInfo.size,true) : '';
                    txt += (this.visited || r.visited) ? '|★' : '';
                    txt += '&thinsp;]';
                    return txt
                };
				return r;
			}
            return null
		},
		getRaidLink: function(msg,user) {
			msg = msg.replace(/[\r\n]/g,'');
			var m = /^((?:(?!<a[ >]).)*)<a.*? href="((?:(?:https?:\/\/)?(?:www\.)?kongregate\.com)?\/games\/5thPlanetGames\/dawn-of-the-dragons(\?[^"]+))".*?<\/a>((?:(?!<\/?a[ >]).)*(?:<a.*? class="reply_link"[> ].*)?)$/i.exec(msg);
			if (m) {
				var raid = SRDotDX.getRaidDetails(m[3], user);
				if (raid) {
					raid.ptext = m[1]; raid.url = m[2]; raid.ntext = m[4];
					return raid;
				}
			}
            return null
		},
		getPastebinLink: function(msg,user) {
			msg = msg.replace(/[\r\n]/g,'');
			var m = /^((?:(?!<a[ >]).)*)?http:\/\/pastebin\.com\/\w{8}((?:(?!<\/?a[ >]).)*(?:<a.*? class="reply_link"[> ].*)?)$/i.exec(msg);
			if (m) {
				var pb = SRDotDX.getPasteDetails(/http:\/\/pastebin\.com\/\w{8}/i.exec(m[0]) + '',user);
				if(typeof pb != 'undefined') {
                    pb.ptext = m[1] || '';
                    pb.ntext = m[2] || '';
                }
				return pb;
            }
			else return null;
		},
		getStatText: function(stat) {
			stat = stat.toLowerCase();
			var r = '';
			if (stat == '?' || stat == 'Unknown') return 'Unknown';
			if (stat.indexOf('s') > -1) r = 'Stamina';
			if (stat.indexOf('h') > -1) r += (r != '' ? (stat.indexOf('e') > -1 ? ', ' : ' and ') :  '') + 'Honor';
			if (stat.indexOf('e') > -1) r += (r != '' ? ' and ' : '') + 'Energy';
			return r;
		},
        getTimestamp: function() {
          return '('+('0'+(new Date().getHours())).slice(-2) + ':' + ('0'+(new Date().getMinutes())).slice(-2)+')';
        },
		refreshRaidTab: function() {
			var el_out = document.getElementById('raid_list');
			var el_in1 = document.getElementById('mainRaidsFrame');
			var el_in2 = document.getElementById('topRaidPane');
			el_out.style.height = el_in1.offsetHeight - el_in2.offsetHeight - 8 + 'px';
		},
        isFirefox: navigator.userAgent.indexOf('Firefox') > 0,
		gui: {
            getChatNumber: function() {
                var cont = document.getElementsByClassName('chat_room_template'), ele;
                for (var i=0; i<cont.length; i++) { ele = cont[i].getAttribute('style'); if(ele == null || ele == '') return i}
                return 1;
            },
            setMessagesCount: function() {
                var num = active_user.unreadWhispersCount() + active_user.unreadShoutsCount();
                var ele = document.getElementById('profile_control_unread_message_count');
                ele.innerHTML = num;
                ele.style.display = num==0 ? 'none' : 'block';
                setTimeout(SRDotDX.gui.setMessagesCount, 60000);
            },
            gotoRoom: function(num) {
                var numInt = parseInt(num);
                if (isNaN(numInt) || numInt < 1 || numInt > 13) holodeck.chatWindow().activateRoomChooser();
                else {
                    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+'"}');
                    holodeck.joinRoom(roomObj);
                }
            },
            httpCommand: function(url){
                window.open(url);
            },
            applySidebarUI: function(mode) { //-1:remove, 0:redraw, 1:create, 2:recreate
                if(mode == -1 || mode == 2) {
                    document.getElementById('dotdx_sidebar').remove();
                    if (mode == -1) SRDotDX.gui.chatResize(SRDotDX.config.chatSize), document.getElementsByClassName("links_connect")[0].setAttribute('colspan','2');
                }
                if (mode > -1) {
                    var sbElemObj, sbElemTxt, i;
                    if (mode > 0) {
                        if (mode == 1) document.getElementsByClassName("links_connect")[0].setAttribute('colspan','3');
                        if(!SRDotDX.config.sbRightSide) document.getElementById('chat_container').style.marginLeft = "0px";
                        SRDotDX.gui.cHTML('td').set({id: 'dotdx_sidebar', style: 'width: 70px'})
                            .html('<div id="dotdx_sidebar_container"></div>',true)
                            .attach('after',SRDotDX.config.sbRightSide?'chat_container_cell':'gameholder');
                        SRDotDX.gui.chatResize(SRDotDX.config.chatSize);
                    }
                    if (mode == 0) {
                        sbElemTxt = '[' + document.getElementById('options_sbConfig').value + ']';
                        sbElemObj = JSON.parse(sbElemTxt);
                        SRDotDX.config.sbConfig = sbElemObj;
                        SRDotDX.config.save(false);
                    }
                    else sbElemObj = SRDotDX.config.sbConfig;

                    var sidebarElemHtml = "", sbCmd = "", sbCls="";
                    for (i=0; i<sbElemObj.length; i++) {
                        if (i == 25) break;
                        if (typeof sbElemObj[i] == 'undefined' || sbElemObj[i] == null) { sidebarElemHtml += '<div></div>'; continue }
                        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 }
                        if (sbElemObj[i].type == 'label') { sidebarElemHtml += '<div class="label">'+sbElemObj[i].name+'</div>'; continue }
                        if (typeof sbElemObj[i].cmd != 'undefined') {
                            if (sbElemObj[i].cmd.charAt(0) == '/') sbCmd = 'SRDotDX.gui.chatCommand(\''+sbElemObj[i].cmd+'\')';
                            else if (sbElemObj[i].cmd.indexOf('://') > 2) sbCmd = 'SRDotDX.gui.httpCommand(\''+sbElemObj[i].cmd+'\')';
                            else sbCmd = sbElemObj[i].cmd.replace("'","\'");
                        }
                        if (typeof sbElemObj[i].color != 'undefined') {
                            if (sbElemObj[i].color.charAt(0).toLowerCase() == 'b' && sbElemObj[i].color.toLowerCase() != 'black') sbCls = 'class="b" ';
                            else if (sbElemObj[i].color.charAt(0).toLowerCase() == 'g') sbCls = 'class="g" ';
                            else if (sbElemObj[i].color.charAt(0).toLowerCase() == 'r') sbCls = 'class="r" ';
                            else if (sbElemObj[i].color.charAt(0).toLowerCase() == 'y') sbCls = 'class="y" ';
                        }
                        sidebarElemHtml += '<button ' + sbCls + 'onclick="' + sbCmd + '">' + (typeof sbElemObj[i].name == 'undefined' ? ('Btn '+(i+1)) : sbElemObj[i].name) + '</button>';
                        sbCmd = ""; sbCls="";
                    }
                    SRDotDX.gui.cHTML('#dotdx_sidebar_container').html(sidebarElemHtml,true);
                }
            },
            restoreDefaultSB: function() {
                document.getElementById('options_sbConfig').value = '{"type":"label","name":"Camps"},\n\
                    {"type":"btn","name":"BoB","cmd":"/camp bob"},\n\
                    {"type":"btn","name":"MaM","cmd":"/camp mam"},\n\
                    {"type":"btn","name":"GD","cmd":"/camp gd"},\n\
                    {"type":"label","name":"Tiers"},\n\
                    {"type":"btn","name":"Bella","cmd":"/raid bella"},\n\
                    {"type":"btn","name":"Xerk","cmd":"/raid xerkara"},\n\
                    {"type":"btn","name":"Tisi","cmd":"/raid tisi"},\n\
                    {"type":"label","name":"Join"},\n\
                    {"type":"btn","name":"Farms","cmd":"SRDotDX.gui.quickImportAndJoin(\'farm:nnm\')"},\n\
                    {"type":"label","name":"Utils"},\n\
                    {"type":"btn","color":"g","name":"(Re)Load","cmd":"SRDotDX.reload()"},\n\
                    {"type":"btn","color":"r","name":"Unload","cmd":"/kill"},\n\
                    {"type":"btn","name":"Room 1","cmd":"SRDotDX.gui.gotoRoom(1)"},\n\
                    {"type":"btn","name":"Room 2","cmd":"SRDotDX.gui.gotoRoom(2)"},\n\
                    {"type":"btn","name":"Room 8","cmd":"SRDotDX.gui.gotoRoom(8)"},\n\
                    {"type":"label","name":"Sheets"},\n\
                    {"type":"btn","name":"Magic","cmd":"https://docs.google.com/spreadsheets/d/1O0eVSnzlACP9XJDq0VN4kN51ESUusec3-gD4dKPHRNU"},\n\
                    {"type":"btn","name":"Mount","cmd":"https://docs.google.com/spreadsheet/ccc?key=0AiSpM5yAo8atdER2NEhHY3VjckRhdWctWV8yampQZUE"},\n\
                    {"type":"btn","name":"Gear","cmd":"https://docs.google.com/spreadsheet/lv?key=0AvP2qXrWcHBxdHpXZkUzTHNGNkVWbjE5c2VEZUNNMUE"},\n\
                    {"type":"label","name":"Raids"},\n\
                    {"type":"jtxt"},\n\
                    {"type":"btn","color":"g","name":"Join","cmd":"SRDotDX.gui.joinSelectedRaids(true)"},\n\
                    {"type":"btn","color":"b","name":"Import","cmd":"SRDotDX.gui.importFromServer()"},\n\
                    {"type":"btn","color":"y","name":"RaidBot","cmd":"SRDotDX.gui.switchBot()"}';
                    SRDotDX.gui.applySidebarUI(0);
            },
            chatResize: function(chatSize) {
                var size = chatSize || SRDotDX.config.chatSize;
                SRDotDX.config.chatSize = size;
                var sbWidth = SRDotDX.config.sbEnable ? 70 : 0;
                var hScroll = SRDotDX.config.hideScrollBar ? SRDotDX.gui.getScrollbarWidth():0;
                var chatWidthInc = size - 300;
                var chatCorr = chatWidthInc/75*2;
                var overallWidth = (1063 + sbWidth + chatWidthInc) + "px";
                document.getElementById('maingame').style.width = overallWidth;
                document.getElementById('maingamecontent').style.width = overallWidth;
                document.getElementById('flashframecontent').style.width = overallWidth;
                document.getElementById('chat_container').style.width = size + "px";
                document.getElementById('raid_list').style.width = 282 + hScroll + "px";
                document.getElementById('raid_list').style.overflowY = hScroll?'scroll':'auto';
                document.getElementById('chat_tab_pane').style.width = (size - 16) + "px";
                document.getElementById('DotDX_chatResizeElems').innerHTML =   '#kong_game_ui textarea.chat_input { width: ' + (size - 30) + 'px !important; }\
                                                                                #kong_game_ui div#chat_raids_overlay { width: ' + (size - 8) + 'px }\
                                                                                #kong_game_ui div#chat_raids_overlay > span { width: ' + (size - 18 - chatCorr) + 'px }\
                                                                                #kong_game_ui div.chat_message_window { width: ' + (size - 18 + hScroll) + 'px; overflow-y: '+(hScroll?'scroll':'auto')+'; }\
                                                                                #kong_game_ui div#chat_rooms_container div.chat_tabpane.users_in_room { width: ' + (size - 22 + hScroll) + 'px }\
                                                                                div#dotdx_sidebar_container { ' + (SRDotDX.config.sbRightSide?"text-align: left; padding-left: 1px":"text-align: right; margin-left: 2px; padding-right: 1px") + ' }';
            },
			helpBox: function(boxId,magId,raidId,mouseOut) {
                var boxDiv = document.getElementById(boxId);
                var magSpan = document.getElementById(magId);
                if (mouseOut) {
                    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';
                    magSpan.style.maxWidth = "0";
                }
                else {
                    var info = SRDotDX.config.getRaid(raidId), msg = 'Unknown', mWidth = "0";
                    var raid = (info == null || typeof SRDotDX.raids[info.boss] == 'undefined') ? {name:'Unknown'} : SRDotDX.raids[info.boss];
                    if (raid.name != 'Unknown') {
                        var diff = info.diff - 1;
                        var magI = "";
                        if(SRDotDX.isFirefox) for (i=0; i<raid.nd; i++) magI += '<span class="magic" style="background-position: -' + info.magic[i]*16 + 'px 0">&nbsp;</span>';
                        else for (i=0; i<raid.nd; i++) magI += '<span class="magic" style="background-position-x:-' + info.magic[i]*16 + 'px">&nbsp;</span>';
                        magSpan.innerHTML = magI;
                        mWidth = (raid.nd*18+10) + "px";
                        msg  = '<span style="font-size: 12px;">' + raid.name + ' on ' + ['Normal','Hard','Legendary','Nightmare','Insane','Hell'][diff] + '</span><br>';
                        msg += (raid.type == '' ? '' : raid.type + ' | ') + SRDotDX.raidSizes[raid.size].name + ' Raid' + (diff == 3 ? ' | AP' : '');
                        var size = raid.size < 15 ? 10 : raid.size;
                        var fs = raid.health[diff] / (raid.size==101?100:raid.size);
                        if (typeof raid.lt != 'object') {

                            var epicRatio = SRDotDX.raidSizes[size].ratios;
                            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]);
                            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]);
                            //msg += '<br>2e: ' + epicRatio[2] + ' | 3e: ' + epicRatio[4] + ' | fs: ' + fs;
                        }
                        else if (typeof raid.lt == 'object') {
                            var ele = SRDotDX.lootTiers[raid.lt[diff]];
                            var step = SRDotDX.config.chatSize == 450 ? 6 : (SRDotDX.config.chatSize == 375 ? 5 : 4);
                            var steplow = step - 1;
                            var tiers = ele['tiers'];
                            var epics = ele['epics'];
                            var best = ele['best'];
                            var e = ele['e']?'e':'';
                            var text = ''; var i = tiers.length;
                            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;
                            msg += ' | Tiered<br>fs: &nbsp;&nbsp;&thinsp;' + SRDotDX.util.getShortNum(fs) + '' + text;
                        }
                        else {}
                    }
                    magSpan.style.maxWidth = mWidth;
                    document.getElementById(boxId + '_text').innerHTML = msg;
                    if (!(boxDiv.className.indexOf('active') > 0)) boxDiv.className = "active";
                    clearTimeout(SRDotDX.gui.CurrentRaidsOutputTimer);
                }
            },
            displayHint: function(hint) {
                var helpEl = document.getElementById('helpBox');
                if (hint) {
                    helpEl.children[0].innerHTML = hint;
                    //helpEl.style.display = 'block';
                    helpEl.style.maxHeight = '50px';
                    helpEl.style.borderTopWidth = '1px';
                }
                else helpEl.style.maxHeight = '0', helpEl.style.borderTopWidth = '0';
            },
            refreshRaidList: function() {
                document.getElementById('raid_list').innerHTML = "";
                for (var i=0; i<SRDotDX.gui.joinRaidList.length; i++) SRDotDX.gui.addRaid(SRDotDX.gui.joinRaidList[i]);
            },
			addRaid: function(id) {
				var r = typeof id == 'string' || typeof id == 'number' ? SRDotDX.config.raidList[id] : id;
                var a = document.getElementById('raid_list');
                if (r.boss) {
					if (typeof a != 'undefined' && a) {
                        var rd = typeof SRDotDX.raids[r.boss] != 'object' ? {name: 'Unknown'} : SRDotDX.raids[r.boss];
						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;
						//var filterClass = ' DotDX_fltList_' + rd.id + '_' + (r.diff - 1);
                        var diffClass = '', diffText = '';
                        switch(r.diff) {
                            case 1: diffClass = " DotDX_N"; diffText = "N"; break;
                            case 2: diffClass = " DotDX_H"; diffText = "H"; break;
                            case 3: diffClass = " DotDX_L"; diffText = "L"; break;
                            case 4: diffClass = " DotDX_NM"; diffText = "NM"; break;
                        }
                        var lii = SRDotDX.gui.cHTML('div').set({
							class: 'raid_list_item' + diffClass + (r.visited ? ' DotDX_visitedRaidList' : '') + (r.nuked ? ' DotDX_nukedRaidList' : ''),
							id: 'DotDX_'+ r.id,
                            raidid: r.id
						}).html(' \
							<span class="DotDX_RaidListVisited">' + (r.visited ? '&#9733;' : '') + '</span> \
							<a class="DotDX_RaidLink" href="' + url + '">' + rd.name + '</a> \
                            <span class="DotDX_List_diff' + diffClass + '">' + diffText + '</span> \
                            <a class="dotdxRaidListDelete" style="float:right; display: inline" href="#">DEL</a>\
						', true);
						if (SRDotDX.config.newRaidsAtTopOfRaidList) {
							var arr = a.getElementsByClassName('raid_list_item');
							if (arr.length > 0) lii.attach('before', arr[0]); else lii.attach('to', a);
						}
                        else lii.attach('to', a);
					}
				}
				else delete SRDotDX.config.raidList[id];
			},
            toggleRaidListDesc: function(el,mode) {
                if (mode) { clearTimeout(el.timerout); el.timerin = setTimeout(function(){el.lastElementChild.style.display = "block";},500) }
                else { clearTimeout(el.timerin); el.timerout = setTimeout(function(){el.lastElementChild.style.display = "none";},50) }
                return false;
            },
			cHTML: function(ele) {
                function Cele(ele) {
                    this._ele = ele;
                    this.ele = function() { return this._ele };
                    this.set = function(param) { for (var attr in param) if (param.hasOwnProperty(attr)) this._ele.setAttribute(attr, param[attr]); return this };
                    this.text = function(text) { this._ele.appendChild(document.createTextNode(text)); return this };
                    this.html = function(text,overwrite) { this._ele.innerHTML = overwrite ? text : this._ele.innerHTML + text; return this };
                    this.on = function(event,func,bubble) { this._ele.addEventListener(event,func,bubble); return this };
                    this.attach = function(method,ele) {
                        if (typeof ele == 'string') ele = document.getElementById(String(ele));
                        if (!(ele instanceof Node)) throw 'Invalid attachment element specified';
                        else if (!/^(?:to|before|after)$/i.test(method)) throw 'Invalid append method specified';
                        else if (method == 'to') ele.appendChild(this._ele);
                        else if (method == 'before') ele.parentNode.insertBefore(this._ele, ele);
                        else if (typeof ele.nextSibling == 'undefined') ele.parentNode.appendChild(this._ele);
                        else ele.parentNode.insertBefore(this._ele, ele.nextSibling);
                        return this
                    };
                }
                if (typeof ele == 'string') ele = /^#/i.test(String(ele)) ? document.getElementById(ele.substring(1)) : document.createElement(String(ele));
                if (ele instanceof Node) return new Cele(ele);
                throw 'Invalid element type specified';
            },
			errorMessage: function(s,tag) { tag = typeof tag == 'undefined' ? 'b' : tag; SRDotDX.gui.doStatusOutput('<'+tag+'>'+s+'</'+tag+'>') },
			updateMessage: function() { SRDotDX.gui.doStatusOutput(SRDotDX.gui.standardMessage(), false, true) },
			postingMessage: function(i,ct) { SRDotDX.gui.doStatusOutput('Posting message ' + i + (typeof ct == 'undefined' ? '' : ' of ' + ct + '...'), false) },
            standardMessage: function() { return  Object.keys(SRDotDX.config.raidList).length + ' raids in db, ' + SRDotDX.gui.joinRaidList.length + ' selected to join'; },
            CurrentStatusOutputTimer: 0,
            doStatusOutput: function(str,msecs,showInChat) {
				showInChat = typeof showInChat == 'undefined' ? true : showInChat;
				msecs = typeof msecs == 'undefined' ? 4000 : msecs;
				var el = document.getElementById('StatusOutput');
                var el2 = document.getElementById('dotdx_chat_overlay');
                el.innerHTML = str;
                if (showInChat) {
                    el2.innerHTML = str;
                }
				if (msecs) {
					if (SRDotDX.gui.CurrentStatusOutputTimer) clearTimeout(SRDotDX.gui.CurrentStatusOutputTimer);
					SRDotDX.gui.CurrentStatusOutputTimer = setTimeout(function(){ el.innerHTML = SRDotDX.gui.standardMessage(); el2.innerHTML = SRDotDX.gui.standardMessage() }, msecs);
				}
			},
			toggleDisplay: function(elem,sender,el2) {
				if (typeof elem == 'undefined') return;
                var el = document.getElementById(elem);
                var alls = document.getElementsByName(sender.getAttribute('name'));
                if(alls.length > 0) {
                    for (var i = 0; i < alls.length; i++) {
                        if(alls[i].nodeName == 'P') alls[i].getElementsByTagName('span')[0].innerHTML = '+';
                        else alls[i].style.display = 'none';
                    }
                    el.style.display = 'block'; sender.getElementsByTagName('span')[0].innerHTML = '&minus;';
                }
                else {
				if (el.style.display == 'none') {
					el.style.display = 'block'; sender.getElementsByTagName('span')[0].innerHTML = '&minus;';
				}
				else {
					el.style.display = 'none'; sender.getElementsByTagName('span')[0].innerHTML = '+';
				}
                }
                if (typeof el2 == 'string') {
                    switch(el2) {
                        case 'raid_list': SRDotDX.refreshRaidTab(); break;
                        case 'share_list': document.getElementById('DotDX_raidsToSpam').style.height = ( 526 - document.getElementById('FPXShare').offsetHeight - document.getElementById('FPXImport').offsetHeight ) + "px";
                    }
                }
			},
			Importing: false,
			FPXimportRaids: function(save) {
				var linklist = document.FPXRaidSpamForm.FPXRaidSpamInput.value;
				if (linklist.length > 10) {
					save = typeof save == 'undefined' ? true : save;
					console.log('[SRDotDX] Import started');
					SRDotDX.gui.Importing = true;
					document.FPXRaidSpamForm.FPXRaidSpamInput.value = '';
					var link, tagged = false, haspb = false, imct = 0;
                    var total = document.getElementById('raid_list').childNodes.length;
					var patt = new RegExp('http...www.kongregate.com.games.5thPlanetGames.dawn.of.the.dragons.[\\w\\s\\d_=&]+[^,]', 'ig');
					if (linklist.indexOf('!!OBJECT_IMPORT!!') > -1) {
						var objs = linklist.split(';'), obj;
						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;
						console.log('[SRDotDX] Objects importing ' + objs.length);
						tagged = true;
						while (imct < objs.length) {
							obj = objs[imct].split(',');
							if (obj.length == 4) {
								console.log('[SRDotDX] Object importing ' + imct + ': ' + obj[2] + ' : ' + obj[1] + ' : ' + obj[3]);
								SRDotDX.getRaidDetails(obj[0], obj[2], SRDotDX.config.markImportedVisited, obj[1], obj[3]);
							}
							imct++;
						}
					}
					if (!tagged) {
						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;
						while(link = patt.exec(linklist)) {
							imct++; SRDotDX.getRaidDetails(link+'', 'PasteBin', SRDotDX.config.markImportedVisited);
						}
					}
					var pbpatt = new RegExp('http...pastebin.com.\\w{8}', 'ig');
					while (link = pbpatt.exec(linklist)) { haspb = true; SRDotDX.request.pasteImport(link) }
					if (!haspb) {
						var diff = document.getElementById('raid_list').childNodes.length - total;
						SRDotDX.gui.doStatusOutput('Import complete, ' + diff + ' of ' + imct + ' new raids');
					}
					SRDotDX.gui.Importing = false;
					if (save) setTimeout(SRDotDX.config.save, 250, false);
					return {totalnew: diff, total: imct}
				}
                return false;
			},
			deleteRaid: function(ele) {
                var id = ele.getAttribute('raidid');
                SRDotDX.gui.deleteRaidFromDB(id);
                ele.parentNode.removeChild(ele);
			},
            deleteRaidFromDB: function(id) {
                SRDotDX.gui.toggleRaid('nuked', id, true);
                if (SRDotDX.config.raidList[id]) delete SRDotDX.config.raidList[id];
            },
			FPXdeleteAllRaids: function() {
				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.)')) {
					for (var id in SRDotDX.config.raidList) if (SRDotDX.config.raidList[id]) delete SRDotDX.config.raidList[id];
					var raidlistDIV = document.getElementById('raid_list');
					while (raidlistDIV.hasChildNodes()) raidlistDIV.removeChild(raidlistDIV.lastChild);
					localStorage.removeItem('raidList');
					SRDotDX.gui.updateMessage();
					console.log('[SRDotDX] Delete all raids finished.');
				}
			},
            chatCommand: function(text) {
                var elems = document.getElementsByClassName('chat_input');
                var txt = [], i = elems.length;
                while (i--) { txt[i] = elems[i].value; elems[i].value = text }
                holodeck.activeDialogue().sendInput();
                i = txt.length;
                while (i--) elems[i].value = txt[i];
            },
			FPXdoWork: function(param1, whisper) {
				//console.log('[DotDX] Posting to chat: ' + (/^http/.test(param1) ? '(url: ' + param1 + ')' : param1) );
				//var matchClass = 'chat_input';
				var elems = document.getElementsByClassName('chat_input');
				if (whisper && whisper != '') {
					//console.log('[DotDX] Whispering spam to: ' + SRDotDX.config.whisperTo);
					param1 = '/w ' + whisper + ' ' + param1;
				}
				var txt = [], i = elems.length;
				while (i--) { txt[i] = elems[i].value; elems[i].value = param1 }
				holodeck.activeDialogue().sendInput();
                i = txt.length;
				while (i--) elems[i].value = txt[i];
			},
			FPXformatRaidOutput: function(url) {
                var pre = ''; //user && room ? '['+room+'|'+user+'] ' : '';
				if (!SRDotDX.config.formatLinkOutput) return pre + url;
				var r = SRDotDX.getRaidDetailsBase(String(url));
				return pre + r.shortname + ' ' + r.diffShortText + ' ' + url;
			},
			isPosting: false,
			FPXTimerArray: [],
			FPXStopPosting: function() {
				SRDotDX.gui.endSpammingRaids();
				console.log('[DotDX] Spamming raids to chat... [cancelled]');
				SRDotDX.echo('Raid posting cancelled');
			},
			endSpammingRaids: function() {
                var i = SRDotDX.gui.FPXTimerArray.length;
				while (i--) clearTimeout(SRDotDX.gui.FPXTimerArray[i]);
				SRDotDX.gui.isPosting = false;
				document.getElementById('PostRaidsButton').value = 'Post';
                document.getElementById('dotdx_share_post_button').value = 'Post Links to Chat';
                document.getElementById('dotdx_share_post_button').value = 'Friend Share links';
				SRDotDX.gui.doStatusOutput('Posting raids finished');
				SRDotDX.gui.FPXTimerArray = [];
				SRDotDX.config.save(false);
			},
			prepareSpammingRaids: function() {
				SRDotDX.gui.isPosting = true;
				document.getElementById('PostRaidsButton').value = 'Cancel';
                document.getElementById('dotdx_share_post_button').value = 'Cancel';
                document.getElementById('dotdx_friend_post_button').value = 'Cancel';
				SRDotDX.gui.doStatusOutput('Posting raids started', false);
			},
            spamRaidsToFriends: function() {
                SRDotDX.gui.prepareSpammingRaids();
                var userList = [[],[],[],[],[]], i;
                for (user in SRDotDX.config.friendUsers) {
                    for(i=0;i<5;i++) if(SRDotDX.config.friendUsers[user][i]) userList[i].push(user);
                }
                console.log('[DotDX] Spamming raids to friends... [started]');
                try {
                    var linkList = document.getElementById('DotDX_raidsToSpam').value;
                    if (linkList.length > 10) {
                        console.log('[DotDX] [If length went trough]');
                        document.getElementById('DotDX_raidsToSpam').value = '';
                        var patt = new RegExp('http...www.kongregate.com.games.5thPlanetGames.dawn.of.the.dragons.[\\w\\s\\d_=&]+[^,]', 'ig');
                        var link, ct = 0, sel = 4, r, rs, u; i=0;
                        var timer = 500, ttw = 3050;
                        var total = linkList.split(patt).length-1;
                        console.log('[DotDX] [Just before while]');
                        while((link = patt.exec(linkList)) && SRDotDX.gui.isPosting) {
                            console.log('[DotDX] [After while]');
                            r = SRDotDX.util.getRaidFromUrl(link.toString());
                            rs = SRDotDX.raids[r.boss].size;
                            if (r.boss == 'serpina') sel = 0;
                            else if (rs < 26) sel = 1;
                            else if (rs == 50) sel = 2;
                            else if (rs == 100) sel = 3;
                            console.log('[DotDX] [If before user for]');
                            if (userList[sel].length > 0) {
                                for(u=0;u<userList[sel].length;u++) {
                                    console.log('[DotDX] [Inside user for]');
                                    ( function(p1,p2) {
                                        return SRDotDX.gui.FPXTimerArray[i] = setTimeout(function() { if (!SRDotDX.gui.isPosting) return;
                                            SRDotDX.gui.FPXdoWork(SRDotDX.gui.FPXformatRaidOutput(p1), p2);
                                            ++ct; SRDotDX.gui.postingMessage(ct, i);
                                        },timer); })(link,userList[sel][u]);
                                    timer += ttw; i++;
                                }
                            }
                        }
                    }
                    SRDotDX.gui.FPXTimerArray[SRDotDX.gui.FPXTimerArray.length] = setTimeout(function() { SRDotDX.gui.endSpammingRaids(); console.log('[DotDX] Spamming raids to friends... [stopped]'); }, timer);
                }
                catch(ex) { console.log('[DotDX] Spamming raids to friends... [error]: ' + ex) }
            },
			FPXspamRaids: function() {
                SRDotDX.gui.prepareSpammingRaids();
                console.log('[DotDX] Spamming raids to chat... [started]');
					try {
						var linkList = document.getElementById('DotDX_raidsToSpam').value;
						if (linkList.length > 10) {
                            document.getElementById('DotDX_raidsToSpam').value = '';
							var patt = new RegExp('http...www.kongregate.com.games.5thPlanetGames.dawn.of.the.dragons.[\\w\\s\\d_=&]+[^,]', 'ig');
							var link, ct = 0, i=0;
							var timer = 500, ttw = 3050;
							var total = linkList.split(patt).length-1;
							while((link = patt.exec(linkList)) && SRDotDX.gui.isPosting) {
								( function(p1) {
                                    return SRDotDX.gui.FPXTimerArray[i] = setTimeout(function() { if (!SRDotDX.gui.isPosting) return;
                                    SRDotDX.gui.FPXdoWork(SRDotDX.gui.FPXformatRaidOutput(p1), SRDotDX.config.whisperTo);
                                    ++ct; SRDotDX.gui.postingMessage(ct, total);
                                },timer); })(link);
								timer += ttw; i++;
							}
						}
						SRDotDX.gui.FPXTimerArray[SRDotDX.gui.FPXTimerArray.length] = setTimeout(function() { SRDotDX.gui.endSpammingRaids(); console.log('[DotDX] Spamming raids to chat... [stopped]'); }, timer);
					}
                    catch(ex) { console.log('[DotDX] Spamming raids to chat... [error]: ' + ex) }
			},
            quickImportAndJoin: function(joinStr,imp) {
                SRDotDX.gui.updateFilterTxt(joinStr,false,true);
                SRDotDX.request.quickBtnLock = false;
                if (imp) SRDotDX.request.joinAfterImport = true, SRDotDX.gui.importFromServer();
                else SRDotDX.gui.joinSelectedRaids();
            },
            importFromServer: function() {
                var h = Math.ceil(((new Date).getTime() - SRDotDX.config.lastImported)/3600000);
                SRDotDX.echo('Importing raids from server');
                SRDotDX.request.raids(false,h);
            },
			importingPastebin: false,
			FPXSortRaids: function() {
				var raidArray = [], i, sortFunc;
				var selectedSort = document.getElementById('FPXRaidSortSelection').value;
				var selectedDir = document.getElementById('FPXRaidSortDirection').value;
                var raidlistDIV = document.getElementById('raid_list');
                var raidList = raidlistDIV.childNodes;
				console.log('[SRDotDX] Sorting started ' + selectedSort + ' : ' + selectedDir);
                i = raidList.length;
				while (i--) raidArray.push( SRDotDX.config.raidList[raidList[i].getAttribute('raidid')] );
                switch(selectedSort) {
                    case 'Id':
					    if (selectedDir == 'asc') sortFunc = function(a,b) {
                            if (!(typeof a.id === 'undefined' || typeof b.id === 'undefined') && a.id > b.id) return -1;
							return 1;
						};
					    else sortFunc = function(a,b) {
                            if (!(typeof a.id === 'undefined' || typeof b.id === 'undefined') && a.id < b.id) return -1;
							return 1;
						};
                        break;
                    case 'Time':
					    if (selectedDir == 'asc') sortFunc = function(a,b) {
                            if (!(typeof a.timeStamp === 'undefined' || typeof b.timeStamp === 'undefined') && a.timeStamp > b.timeStamp) return -1;
							return 1;
						};
					    else sortFunc = function(a,b) {
                            if (!(typeof a.timeStamp === 'undefined' || typeof b.timeStamp === 'undefined') && a.timeStamp < b.timeStamp) return -1;
							return 1;
						};
                        break;
                    case 'Name':
					    if (selectedDir == 'asc') sortFunc = function(a,b) {
							a = SRDotDX.raids[a.boss]; b = SRDotDX.raids[b.boss];
							//console.log(a + ' : ' + b + ' : ' + (typeof a === 'undefined') + ' : ' + (typeof b === 'undefined'));
                            if (!(typeof a === 'undefined' || typeof b === 'undefined') && a.name > b.name) return -1;
							return 1;
						};
					    else sortFunc = function(a,b) {
							a = SRDotDX.raids[a.boss]; b = SRDotDX.raids[b.boss];
                            if (!(typeof a === 'undefined' || typeof b === 'undefined') && a.name < b.name) return -1;
							return 1;
						};
                        break;
                    case 'Diff':
					    if (selectedDir == 'asc') sortFunc = function(a,b) { if (a.diff > b.diff) return -1; return 1 };
					    else sortFunc = function(a,b) { if (a.diff < b.diff) return -1; return 1 };
                        break;
                }
				try { raidArray.sort(sortFunc) }
                catch(e) { console.log('[SRDotDX] Sorting error: ' + e); return }
				raidlistDIV = document.getElementById('raid_list');
				while (raidlistDIV.hasChildNodes()) raidlistDIV.removeChild(raidlistDIV.lastChild);
				i = raidArray.length;
                while (i--) SRDotDX.gui.addRaid(raidArray[i]);
				//SRDotDX.gui.FPXFilterRaidListByName();
				console.log('[SRDotDX] Sorting finished');
			},
			GetRaid: function(id) {
				if (isNumber(id)) {
					var raidList = document.getElementById('raid_list').childNodes;
                    var i = raidList.length, item;
					while (i--) {
						item = raidList[i];
						if (item.getAttribute('raidid') == id) { var raid = JSON.parse(JSON.stringify(SRDotDX.config.raidList[id])); raid.ele = item; return raid }
					}
				}
				return null
			},
            joinRaidList: [],
            postRaidList: [],
            updateFilterTimeout: null,
            filterSearchStringC: "",
            filterSearchStringR: "",
            updateFilterContext: true,
            includeDiff: function(str,dv) {
                var diff = isNaN(parseInt(dv)) ? ({'n':1,'h':2,'l':3,'nm':4,'nnm':0})[dv] || 5 : parseInt(dv);
                var out = "";
                var string = str.toString();
                switch (diff) {
                    case 0: out = string.replace(/,|$/g,'_1,') + string.replace(/,|$/g,'_4,'); break;
                    case 1: case 2: case 3: case 4: out = string.replace(/,|$/g,'_' + diff + ','); break;
                    default: for (var i=1; i<=4; i++) out += string.replace(/,|$/g,'_' + i + ','); break;
                }
                return out.slice(0,-1);
            },
            updateFilterTxt: function(txt,fromRT,quick) {
                clearTimeout(this.updateFilterTimeout);
                var foundRaids = [], field, rf, i;
                if (txt != "") {
                    var searchArray = txt.split(/\s?\|\s?|\sor\s|\s?,\s?/ig);
                    console.log('[DotDX] Pattern split: ' + searchArray);
                    for (i=0; i<searchArray.length; i++) {
                        field = searchArray[i].toLowerCase().split(':');
                        if (field[0] != "") {
                            if (typeof SRDotDX.searchPatterns[field[0]] != 'undefined') foundRaids.push(this.includeDiff(SRDotDX.searchPatterns[field[0]],field[1]));
                            else if (typeof SRDotDX.raids[field[0]] != 'undefined') foundRaids.push(this.includeDiff(field[0],field[1]));
                            else {
                                for (var key in SRDotDX.raids) {
                                    rf = (SRDotDX.raids[key].name + ':' + SRDotDX.raids[key].shortname + ':' + SRDotDX.raids[key].type).toLowerCase();
                                    if (rf.indexOf(field[0]) >= 0) foundRaids.push(this.includeDiff(key,field[1]));
                                }
                            }
                        }
                    }
                }
                var finalSearchString = foundRaids.length == 0 ? "" : "," + foundRaids.toString() + ",";
                console.log('[DotDX] Raids to join from ' + (fromRT?'Raids':'Chat') + ' tab: ' + foundRaids);
                if (fromRT) {
                    SRDotDX.config.lastFilter = txt;
                    SRDotDX.config.filterSearchStringR = finalSearchString;
                }
                else if (quick) {
                    SRDotDX.request.filterSearchStringT = finalSearchString;
                }
                else {
                var filterInputs = document.getElementsByClassName('dotdx_chat_filter');
                for (i=0; i<filterInputs.length; i++) if(filterInputs[i].value != txt) filterInputs[i].value = txt;
                SRDotDX.config.chatFilterString = txt;
                    SRDotDX.config.filterSearchStringC = finalSearchString;
                //this.joinRaidFromChat = true;
                }
                if(quick) { SRDotDX.gui.selectRaidsToJoin('quick'); SRDotDX.config.save(false) }
                else { this.updateFilterTimeout = setTimeout(function(){SRDotDX.gui.selectRaidsToJoin(); SRDotDX.config.save(false)},300) }
            },
            selectRaidsToJoin: function(from) {
                if (SRDotDX.request.quickBtnLock) {
                if (!SRDotDX.gui.joining) SRDotDX.gui.joinRaidList.length = 0;
                SRDotDX.gui.updateFilterContext = document.getElementById('chat_tab').firstChild.className == 'active';
                var searchString = from && from == 'quick' ? SRDotDX.request.filterSearchStringT : (SRDotDX.gui.updateFilterContext && SRDotDX.config.chatFilterString != "" ? SRDotDX.config.filterSearchStringC : SRDotDX.config.filterSearchStringR);
                var r, c = 0, filter = SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML;
                for (var raid in SRDotDX.config.raidList) {
                    r = SRDotDX.config.raidList[raid];
                    if( SRDotDX.config.fltShowAll || (
                        (SRDotDX.config.fltShowNuked ? r.nuked : !r.nuked && (SRDotDX.config.fltIncVis || !r.visited)) &&
                        filter.indexOf('fltList_' + r.boss + '_' + (r.diff-1)) < 0 &&
                        (searchString == "" || searchString.indexOf("," + r.boss + "_" + r.diff + ",") >= 0) ) )
                        //try { SRDotDX.gui.joinRaidList.push(JSON.parse(JSON.stringify(r))) } catch(ex){}
                        try { SRDotDX.gui.joinRaidList.push(r) } catch(ex){}
                }

                if(!SRDotDX.gui.joining) SRDotDX.gui.updateMessage(), SRDotDX.gui.refreshRaidList();
                }
            },
            pushRaidToJoinQueue: function(id) {
                var searchString = SRDotDX.gui.updateFilterContext && SRDotDX.config.chatFilterString != "" ? SRDotDX.config.filterSearchStringC : SRDotDX.config.filterSearchStringR;
                var r, filter = SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML;
                r = SRDotDX.config.raidList[id];
                if( SRDotDX.config.fltShowAll || (
                    (SRDotDX.config.fltShowNuked ? r.nuked : !r.nuked && (SRDotDX.config.fltIncVis || !r.visited)) &&
                        filter.indexOf('fltList_' + r.boss + '_' + (r.diff-1)) < 0 &&
                        (searchString == "" || searchString.indexOf("," + r.boss + "_" + r.diff + ",") >= 0) ) )
                    try { SRDotDX.gui.joinRaidList.push(JSON.parse(JSON.stringify(r))) } catch(ex){}
            },
            joining: false,
            joinRaidIndex: 0,
            joinRaidComplete: 0,
            joinRaidSuccessful: 0,
            joinRaidDead: 0,
            joinRaidInvalid: 0,
            joinSelectedRaids: function (fromChat) {
            if (!this.joining) {
                this.joining = true;
                this.joinRaidIndex = 0;
                this.joinRaidComplete = 0;
                this.joinRaidSuccessful = 0;
                this.joinRaidDead = 0;
                this.joinRaidInvalid = 0;
                if (SRDotDX.gui.joinRaidList.length == 0) { this.joinFinish(true); return }
                SRDotDX.gui.cHTML("#AutoJoinVisibleButton").ele().value = 'Cancel';
                SRDotDX.gui.cHTML("#AutoImpJoinVisibleButton").ele().value = 'Cancel';
                console.log('[DotDX] Hyperfast joining ' + SRDotDX.gui.joinRaidList.length + ' raids');
                while(SRDotDX.gui.joinRaidIndex < Math.min(30,SRDotDX.gui.joinRaidList.length)) SRDotDX.request.joinRaid(SRDotDX.gui.joinRaidList[SRDotDX.gui.joinRaidIndex++]);
            }
            else if (!fromChat) this.joinFinish();
            },
            joinFinish: function(recalc){
                this.joining = false;
                SRDotDX.request.quickBtnLock = true;
                SRDotDX.gui.cHTML("#AutoJoinVisibleButton").ele().value = 'Join';
                SRDotDX.gui.cHTML("#AutoImpJoinVisibleButton").ele().value = 'Import & Join';
                //this.joinRaidList = [];
                if (recalc) this.selectRaidsToJoin('joining finish');
            },
            refreshFriends: function() {
                var content="", ff, i= 0, f=false, friend;
                var parentDiv = SRDotDX.gui.cHTML('#FPXfsOptions');
                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);
                for (friend in SRDotDX.config.friendUsers) {
                    ff = SRDotDX.config.friendUsers[friend];
                    content += (f?'<br>':'')+'<span class="generic">' + friend + '</span>' +
                        '<input type="checkbox" id="fs:' + friend + ':0' + '"/><label for="fs:' + friend + ':0' + '"></label>'+
                        '<input type="checkbox" id="fs:' + friend + ':1' + '"/><label for="fs:' + friend + ':1' + '"></label>'+
                        '<input type="checkbox" id="fs:' + friend + ':2' + '"/><label for="fs:' + friend + ':2' + '"></label>'+
                        '<input type="checkbox" id="fs:' + friend + ':3' + '"/><label for="fs:' + friend + ':3' + '"></label>'+
                        '<input type="checkbox" id="fs:' + friend + ':4' + '"/><label for="fs:' + friend + ':4' + '"></label>';
                    f=true;
                }
                parentDiv.html('<div style="overflow-y: scroll; width: 277px; height: 414px">'+content+'</div>',false);
                for (friend in SRDotDX.config.friendUsers) {
                    ff = SRDotDX.config.friendUsers[friend];
                    for (i=0; i<5; i++) SRDotDX.gui.cHTML('#fs:' + friend + ':' + i).on('click',function(e){SRDotDX.gui.fsEleClick(e)}).ele().checked = ff[i];
                }
            },
			DeleteRaids: function () {
                if (!this.joining) {
                    console.log('[DotDX] Erasing visible raids ...');
                    var rn = SRDotDX.gui.joinRaidList.length;
                    if (rn > 0 && (!SRDotDX.config.confirmDeletes || confirm('This will delete ' + rn + ' raids. Continue? \n (This message can be disabled on the options tab.)'))) {
                        var i, tot = 0;
                        for (i=0; i<rn; i++) {
                            SRDotDX.gui.deleteRaidFromDB(SRDotDX.gui.joinRaidList[i].id);
                            tot++;
                        }
                        SRDotDX.gui.doStatusOutput(tot + ' raids deleted');
                        SRDotDX.gui.selectRaidsToJoin();
                        console.log('[DotDX] Erasing complete');
                    }
                }
			},
			GetDumpText: function () {
                var dumptext = "";
                var pre = "http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons?kv_action_type=raidhelp";
					var i, raid;
					for (i=0; i<SRDotDX.gui.joinRaidList.length; i++) {
                        raid = SRDotDX.gui.joinRaidList[i];
                        if (raid.nuked) continue;
                        dumptext += pre + '&kv_raid_id=' + raid.id + '&kv_difficulty=' + raid.diff + '&kv_raid_boss=' + raid.boss + '&kv_hash=' + raid.hash + ', ';
                    }
					return dumptext;
			},
			RaidAction: function(f) {
				switch (f) {
					case 'share':
						SRDotDX.gui.DumpRaidsToShare(true); break;
					case 'post':
						if (SRDotDX.gui.isPosting) SRDotDX.gui.FPXStopPosting();
						else SRDotDX.gui.DumpRaidsToShare(), SRDotDX.gui.FPXspamRaids();
						break;
                    case 'post_share':
                        if (SRDotDX.gui.isPosting) SRDotDX.gui.FPXStopPosting();
                        else SRDotDX.gui.FPXspamRaids();
                        break;
                    case 'post_friend':
                        if (SRDotDX.gui.isPosting) SRDotDX.gui.FPXStopPosting();
                        else SRDotDX.gui.spamRaidsToFriends();
                        break;
					case 'delete':
						SRDotDX.gui.DeleteRaids(); break;
				}
				//r = null;
				return false;
			},
			DumpRaidsToShare: function(b) {
				document.getElementById('DotDX_raidsToSpam').value = SRDotDX.gui.GetDumpText();
				SRDotDX.gui.doStatusOutput('Copied ' + SRDotDX.gui.joinRaidList.length + ' raid links to share tab.');
				console.log('[DotDX] Dumped ' + SRDotDX.gui.joinRaidList.length + ' to share');
				if(b) {
					var e = document.getElementById('lots_tab_pane').getElementsByTagName('li');
                    var i = e.length;
					while (i--) if (e[i].getAttribute('class').indexOf('active') > -1) e[i].className = e[i].className.replace(/ active$/g,'');
				    (document.getElementById('FPXShareTab').parentNode).className += ' active';
				}
			},
			BeginDeletingExpiredUnvisitedRaids: function() { SRDotDX.gui.DeleteExpiredUnvisitedRaids(); setInterval('SRDotDX.gui.DeleteExpiredUnvisitedRaids();',600000) },
			DeleteExpiredUnvisitedRaids: function() {
				console.log('[DotDX] Deleting nuked amd old unvisited raids');
                var ct, item, i;
                if (SRDotDX.config.unvisitedRaidPruningMode <= 2 && SRDotDX.config.unvisitedRaidPruningMode >= 0) {
                    //var raidList = document.getElementById('raid_list').childNodes;
                    var pruneTime = new Date().getTime() / 1000;
                    var raidid, raid, raidInfo, pruneTimer; ct = 0;
                    for (raidid in SRDotDX.config.raidList) {
                        raid = SRDotDX.config.raidList[raidid];
                        if (SRDotDX.raids[raid.boss]) {
                            if (!raid.visited || raid.nuked) {
                                raidInfo = SRDotDX.raids[raid.boss];
                                pruneTimer = SRDotDX.raidSizes[raidInfo.size].pruneTimers[SRDotDX.config.unvisitedRaidPruningMode];
                                if (raid.nuked) pruneTimer = pruneTimer / 2; //double time nuked pruning
                                if ((pruneTime - raid.timeStamp) >= pruneTimer) { SRDotDX.gui.deleteRaidFromDB(raidid); ct++ }
                            }
                        }
                        else { SRDotDX.gui.deleteRaidFromDB(raidid); ct++ }
                    }
                    if (ct > 0) SRDotDX.gui.doStatusOutput(ct + ' old unvisited raids pruned.');
                    console.log('[DotDX] Number of raids pruned: ' + ct);
                    SRDotDX.gui.selectRaidsToJoin('prune');
                }
			},
            switchBot: function() {
                //console.log('[SRDotDX] Bot button clicked');
                var chkBot = document.getElementById('SRDotDX_options_hideBotLinks');
                chkBot.checked = !SRDotDX.config.hideBotLinks;
                SRDotDX.config.hideBotLinks = chkBot.checked;
                SRDotDX.gui.cHTML('#SRDotDX_botClass').html('.bot {display: ' + (chkBot.checked ? 'none !important' : 'block') + '}', true);
                /*var botbtns = document.getElementsByClassName('dotdx_chat_bot_button');
                for (var i=0; i<botbtns.length; i++) {
                    var botcn = botbtns[i].className;
                    botbtns[i].className = botcn.indexOf('active') > 0 ? botcn.replace(' active','') : botcn + ' active';
                }*/
                SRDotDX.gui.scrollChat();
            },
            scrollChat: function(num) {
                var els = document.getElementsByClassName('chat_message_window'), i = num?num:0;
                if (num) els[num].scrollTop = els[num].scrollHeight;
                else while (i < els.length) els[i].scrollTop = els[i].scrollHeight, i++;
            },
            getScrollbarWidth: function() {
                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();
                var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
                document.body.removeChild(document.getElementById('DotDX_scrollMeasure'));
                return scrollbarWidth;
            },
            applyFontSize: function(num) {
                var n = typeof num == 'number' ? num : SRDotDX.config.fontNum, s1, s2, mod = '';
                console.log("[DotDX] apply font size with id: "+n);
                SRDotDX.config.fontNum = n;
                switch (n) {
                    case 1: s1 = 12; s2 = 10; mod = '; vertical-align: top;'; break;
                    case 2: s1 = 10; s2 = 8; break;
                    default: s1 = 11; s2 = 9; break;
                }
                SRDotDX.gui.cHTML('#DotDX_fontClass').html('\
                #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}\
                #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+'}\
                ',true);
            },
            applyTheme: function(num) {
                var n = typeof num == 'number' ? num : SRDotDX.config.themeNum;
                console.log("[DotDX] apply theme with id: "+n);
                var c, check, radio;
                SRDotDX.config.themeNum = n;
                switch (n) {
                    case 1:
                        check = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAJxSURBVEhL7VRLaxNRGL1QEIVs9AckDamZZPLOvDMzicZEjBltY5qnisFFKbgRVLoQEf0JVkShTUVQCl2oG9GNS0FcuXDpD3DrxneP3x0mfdimTXHjwoHDMN/cc+a73z1nmCAImVgs9joej39NJBLYAau07kM0Gu0EAoH9bHBR8W02m4WqqtB1fSg0TYMkSUgmkx+JI3l0xujLvzg5l8vBsizYtr0FvG6apiuSSqV4J8c8OmO8Pf4Fviifz6NQKGwLLmQYBtLpNEig5NHXBfiC7YgDcPH/ArsI/NUpbPTBMAx8wAWIsy5AxW8DJ/IFw8DfcyfKsvyTOi56dMYcx1nhWyCL/un9LeAC5XL5Xa1WEz06Y61Wa5zwst1uf+l0OtgBq7TmfbPZrDYajTGPzvacRup0jpAURdHnChDxzahpNNMZXCsWMJ+NfDoz7r/l8/n2cYEfo6RRz0i4YlpYadTxYrKClYOHPueCwXMj+SCXlXBZ1vG828SSU8Mj8sNsaAKq3x/c5ES7cASWTaahOydywbwk46qi41Wvi351CovUxUw48l0WonOhUGhsTcCkF8clBTOVMkqyCps/0/0GiTw728YikR9YeVwSIjAPR6/Tb+2AO0QuwAdUVXXcrVaozRbun3ZwPiPjdqmE5cY0+tT2gmFiNhKBFouDTmCzlblAMZPFPA2zf3IST2p1PO02sDxdd8lLioZeWIBFpzA0TIaqoRwWcS+Zcvf68BQRnSk8VhX0JsKwaBa7plHXdBwVRNxJpdE/4WBBN3CR9mzxmdCQR0qjQaSKGMNNql+g/ZqK6iZxb2nkJAqOIStrtX81jYz9Bt6mjYTW51PyAAAAAElFTkSuQmCC';
                        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';
                        c = ['#333','#ddd','#444','#fff','#792c2c','#333','#000','0 0 8px 1px #111','#333','0 0 10px #000',
                            '#ccc','#eee','0 0 4px #555','#000','#444','0 0 5px #888','#fff','#792c2c','0 0 12px #fff','#fff',
                            '#000','top,#aa4141,#5c2828','0 0 5px #aaa;','#555','#000','0 -2px 6px -3px #000','#fff','0 0 4px #000;','#ccc','#ddd',
                            'none','#000','0 0 5px 1px #222','#444','#fff','#000','#333','0 0 8px #000','#ccc','#222',
                            '#111','#fff','0 0 4px #111','#333','#ddd','#111','#444','#3a3a3a','#111','none',
                            '#111','none','#111','none','#111','none','#444','#60cc60','#60cc60','0 0 5px #00aa1a',
                            '#d6c96a','#d6c96a','0 0 5px #7e7400','#e47070','#e47070','0 0 5px #aa0000','#c28ee6','#c28ee6','0 0 5px #9000ff','#000',
                            'top,#303030,#302727','#000','top,#2a2a2a,#492c2c','#78bcfa','0 0 4px #000','#6dc97c','#ec6666','#f8b60d','0 0 5px #000','#ccc',
                            '#fff','0 0 6px #999','#aaa','#bbb','#dfa160','#ffb261','0 0 4px #9b5812','#000','#404040','0 0 6px #111',
                            '#eee','#000','0 0 8px #000','0 0 5px #000','top,#303030,#444','#000','#000','0 0 8px #fff','#ddd','#000',
                            '0 0 3px #000','0 0 6px #111','top,#3a3a3a,#555','#eee','#000','0 0 5px #000','0 0 10px #111','top,#303030,#404040','','',
                            '','top,#303030,#406785','','','','top,#303030,#306638','','','','top,#303030,#693434',
                            '','','','top,#303030,#887E35','#eaeaea','0 0 5px #000','#e0e0e0','#000','0 0 5px #000','0 0 10px #111',
                            'top,#303030,#444','','','top,#2a2a2a,#222','#eee','#111','0 0 5px #000','0 0 4px #303030','top,#333,#555','0 0 6px #101010',
                            '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',
                            '','top,#2a2a2a,#426B44','0 0 6px #111','','top,#2a2a2a,#40668d','0 0 6px #111','','top,#2a2a2a,#612525','#e0e0e0','#101010',
                            '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',
                            '#000','0 0 5px #000','0 0 6px #111','left,#303030,#303030','','#aaa','#000','0 0 5px #000','top,#444,#444','#606060',
                            '#101010','#e5e5e5','#f5f5f5','0 0 6px #c0c0c0','#eee','#d83737','0 0 3px #000','top,#404040,#556d52','top,#404040,#746c56','top,#404040,#664040',
                            'top,#404040,#604c70','#00bb00','#dbb32e','#d13c3c','#d16ad1','#eee','0 0 6px #000','#101010','0 0 5px #000','top,#2a2a2a,#3a3a3a',
                            '#555','#e0e0e0','0 0 5px #000','#f0f0f0','0 0 8px #000','#e0e0e0','0 0 5px #000','#000','#3a3a3a','#303030',
                            '#000','#202020','','#552727','#686868'];
                            break;
                    default:
                        check = 'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAC4SURBVDhPnZNRCsQgDAW9pPfxuCKICCIiyC62RPIksnEDU2zMlH7kGefc5xYzax5uas5ba19xjKEGxN67GhBba2pArLWqAbGUogbEnLMaEFNKakCMMaoBMYSgBkTvvRoQb3nEv0v64i/Wr94UiFIKToAopYDDZ0CUUkDMez4DIt/8PQkE7y2Rbz6905nfU3+JfPN3eDJoZon79hO8z++XKCVg7xEgSik4AaKUghMg3vKI83GLMcZ8AZMOnRQ6c3RxAAAAAElFTkSuQmCC';
                        radio = 'iVBORw0KGgoAAAANSUhEUgAAAA0AAAAaCAYAAABsONZfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAFpSURBVDhP1VJNi4IAEPV3durU1V/QJTAIT3WQopvRD4ggCTKrQ8d+gwkRlB+RKBHhW96sxUrrurdlBx7DvHnjqPOUr3E+nzGbzdDr9dBsNiWzJp9LirFYLNDpdLDdbnE6ncBgZk2e/Vz6GavVCsPhEEmSIMuyN5BnnzoZCIIA7XYbURTh8XiUgn3qqFcsy8Jms8H9fq8EddQr3W4Xh8MBt9utEtRRr2iahjAM5b2rQB31smm/3yOO40pQJ5t4h+VyicvlUgnqqJeDcqXnebK+DOxT9zo0/3+/38fxeITv+28gz/7rTs+Yz+fQdV1ewXVdcQMza/Ls59Ji8ImTyURsQ+8xsyafS97jnxh2vV5jPB5LrjQs/dVqtVCr1VCv1yWzJl9qWMdx0Gg0oKrqC6xt2y43rGmahYEnRqNRuWG5/rsh8qWGZcMwjMLAYDAQ/kfD8oN3ux2m06lk1r8y7PV6RZqmkv/SsIryAXc40Mw81bSxAAAAAElFTkSuQmCC';
                        c = ['#777','#222','#cacaca','#000','#f0f0f0','#777','#333','0 0 8px 1px #333','#ddd','0 0 5px #333',
                            '#666','#222','0 0 3px #ccc','#aaa','#e6e6e6','0 0 5px #888','#000','#f5f5f5','0 0 5px #999','#000',
                            '#888','top,#fff,#ddd','0 0 5px #555;','#f6f6f6','#888','0 -2px 6px -4px #444','#222','0 0 4px #d0d0d0','#777','#888',
                            'underline','#888','0 0 6px #999','#fff','#000','#777','#fff','0 0 8px #999','#4b4b4b','#f0f0f0',
                            '#bbb','#333','0 0 4px #ddd','#fff','#222','#ddd','#fff','#f9f9f9','#8ab389','top,#cbe7c4,#f3faf2',
                            '#adad68','top,#f7f0c8,#fcfbf8','#b18780','top,#f3d7d1,#FCF7F7','#a99abb','top,#ddd4e2,#f4f0f7','#fff','','','0 0 5px #aaa',
                            '','','0 0 5px #aaa','','','0 0 5px #aaa','','','0 0 5px #aaa','#c0c0c0',
                            'top,#f0f0f0,#fff','#a1b4be','top,#dce8f1,#eff4f7','#276594','none','#267422','#973131','#085088','none','#444',
                            '#000','0 0 6px #888','#666','#666','#946a3d','#946a3d','0 0 4px #f5Cc68Aa','#777','#eee','0 0 7px #777',
                            '#000','#444','0 0 6px #666','0 0 4px #ccc','top,#fff,#ddd','#505050','#555','0 0 6px #777','#000','#404040',
                            '0 0 6px #999','0 0 6px #444','top,#f5f5f5,#bbb','#fff','#444','0 0 10px #eee','0 0 10px #222','top,#999,#555','#000','0 0 10px #fff',
                            '0 0 10px #1c3a61','top,#dcf0fd,#6794b2','#000','0 0 10px #fff','0 0 10px #3d6425','top,#effde5,#618d4f','#000','0 0 10px #fff','0 0 10px #412222','top,#ffefef,#aa5858',
                            '#000','0 0 10px #fff','0 0 10px #807823','top,#fffbe0,#c9b41d','#fff','0 0 8px #000','#333','#555','0 0 6px #999','0 0 6px #444',
                            'top,#f5f5f5,#ccc','','','top,#f5f5f5,#fff','#222','#999','0 0 4px #ccc','0 0 4px #ccc','top,#ccc,#eee','0 0 4px #bbb',
                            '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',
                            '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',
                            '','0 0 4px -1px #aaa','top,#fff,#d1dfee','top, #dfe8f1,#fff','#333','','#bbb','#ccc','top,#eee,#fff','#444',
                            '#aaa','1px 1px 2px #ddd','0 0 4px #ccc','left,#fff,#eee','0 0 3px #ddd','#aaa','#aaa','0 0 3px #ccc','top,#fafafa,#fafafa','#fff',
                            '#e0e0e0','#333','#111','0 0 8px #777','#000','#bd0000','0 0 2px #ff8e8e','top,#d8ecd3,#fafafa','top,#faf4d2,#fafafa','top,#fae4df,#fafafa',
                            'top,#e9dcf3,#fafafa','#00bb00','#dbb32e','#d13c3c','#d16ad1','#000','0 0 6px #808080','#808080','0 0 5px #aaa','top,#d0d0d0,#f0f0f0',
                            '#ccc','#222','','','0 0 4px #ccc','','','#bbb','#fff','',
                            '#bbb','#efefef','#fafafa','#eff4f9','#5f9ea0'];
                            break;
                }

                SRDotDX.gui.cHTML('#DotDX_themeClass').html('\
                div#kong_game_ui, #kong_game_ui ul.main_tabs, #kong_game_ui .tabpane {background-color:'+c[0]+';}\
                #kong_game_ui ul.main_tabs li.tab a {color:'+c[1]+'; background-color:'+c[2]+'; border-color:'+c[95]+';}\
                #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]+';}\
                #kong_game_ui div#chat_tab_pane, div#dotdx_sidebar_container, #kong_game_ui div#lots_tab_pane {background-color:'+c[5]+';}\
                #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]+';}\
                #kong_game_ui div#chat_window_header, #kong_game_ui div#lots_tab_pane div#dotdx_shadow_wrapper {background-color:'+c[8]+';}\
                #kong_game_ui div#chat_window_header {box-shadow:'+c[9]+';}\
                #kong_game_ui div#chat_window_header div.dotdx_chat_overlay {border-color:'+c[175]+';}\
                #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]+';}\
                #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]+';}\
                #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]+';}\
                #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]+'}\
                #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]+';}\
                #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]+');}\
                #kong_game_ui div.chat_actions_container span.kong_ico.btn_target:active {text-shadow:'+c[22]+';}\
                #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]+';}\
                #kong_game_ui div#chat_rooms_container div.chat_tabpane.users_in_room { box-shadow: inset '+c[25]+';}\
                #kong_game_ui .user_row .username, #kong_game_ui div#lots_tab_pane ul { color:'+c[26]+'; text-shadow:'+c[27]+';}\
                #kong_game_ui .user_row.away .username {color:'+c[28]+';}\
                #kong_game_ui .user_row .guild-name {color:'+c[29]+';}\
                #kong_game_ui .user_row .username {text-decoration:'+c[30]+';}\
                #kong_game_ui div.chat_controls {border-color:'+c[31]+'; box-shadow:'+c[32]+';}\
                #kong_game_ui div.chat_controls, #kong_game_ui textarea.chat_input {background-color:'+c[33]+';}\
                #kong_game_ui textarea.chat_input {color:'+c[34]+';}\
                #kong_game_ui div.chat_actions_container ul.chat_actions_list {border-color:'+c[35]+'; background-color:'+c[36]+'; box-shadow:'+c[37]+';}\
                #kong_game_ui div.chat_actions_container ul.chat_actions_list li {border-color:'+c[36]+'; color:'+c[38]+';}\
                #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]+';}\
                #kong_game_ui div.chat_message_window {background-color:'+c[43]+'; color:'+c[44]+';}\
                #kong_game_ui div.chat_message_window p {border-bottom-color:'+c[45]+'; border-top-color:'+c[46]+';}\
                #kong_game_ui div.chat_message_window p.even {background-color:'+c[47]+';}\
                #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]+';}\
				#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]+');} \
				#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]+');} \
				#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]+');} \
				#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]+');} \
                #kong_game_ui div.chat_message_window p span.message a {color:'+c[79]+'}\
                #kong_game_ui div.chat_message_window p span.message a:hover {color:'+c[80]+'; text-shadow:'+c[81]+';}\
                #kong_game_ui div.chat_message_window p.DotDX_diff_1 span.message a {color:'+c[57]+'; text-shadow:'+c[74]+';}\
                #kong_game_ui div.chat_message_window p.DotDX_diff_1 span.message a:hover {color:'+c[58]+'; text-shadow:'+c[59]+';}\
                #kong_game_ui div.chat_message_window p.DotDX_diff_2 span.message a {color:'+c[60]+'; text-shadow:'+c[74]+';}\
                #kong_game_ui div.chat_message_window p.DotDX_diff_2 span.message a:hover {color:'+c[61]+'; text-shadow:'+c[62]+';}\
                #kong_game_ui div.chat_message_window p.DotDX_diff_3 span.message a {color:'+c[63]+'; text-shadow:'+c[74]+';}\
                #kong_game_ui div.chat_message_window p.DotDX_diff_3 span.message a:hover {color:'+c[64]+'; text-shadow:'+c[65]+';}\
                #kong_game_ui div.chat_message_window p.DotDX_diff_4 span.message a {color:'+c[66]+'; text-shadow:'+c[74]+';}\
                #kong_game_ui div.chat_message_window p.DotDX_diff_4 span.message a:hover {color:'+c[67]+'; text-shadow:'+c[68]+';}\
                #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]+');}\
                #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]+'); }\
                #kong_game_ui div.chat_message_window p span.username {color:'+c[73]+'; text-shadow:'+c[74]+';}\
                #kong_game_ui div.chat_message_window p span.username.ign {color:'+c[75]+';}\
                #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]+';}\
                #kong_game_ui div.chat_message_window p.emote {color:'+c[77]+'; text-shadow:'+c[78]+';}\
                #kong_game_ui div.chat_message_window p span.room {color:'+c[82]+';}\
                #kong_game_ui div.chat_message_window p span.timestamp {color:'+c[83]+';}\
                #kong_game_ui div.chat_message_window p span.message a.reply_link {color:'+c[79]+'}\
                #kong_game_ui div.chat_message_window p span.message a.reply_link:hover {color:'+c[80]+'; text-shadow:'+c[81]+';}\
                #kong_game_ui div.chat_message_window p span.message a.chat_link {color:'+c[84]+';}\
                #kong_game_ui div.chat_message_window p span.message a.chat_link:hover {color:'+c[85]+'; text-shadow:'+c[86]+';}\
                #kong_game_ui div.chat_message_window p > span.slider {border-color:'+c[87]+'; background:'+c[88]+'; box-shadow:'+c[89]+';}\
                #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]+');}\
                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]+');}\
                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]+');}\
                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]+');}\
                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]+');}\
                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]+');}\
                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]+');}\
                div#dotdx_sidebar_container > div.label {color:'+c[124]+'; text-shadow:'+c[125]+';}\
                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]+');}\
                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]+');}\
                #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]+');}\
                #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]+');}\
                #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]+');} \
				#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]+');}\
				#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]+');}\
				#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]+');}\
				#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]+');}\
				#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]+');}\
				#kong_game_ui input#raidsBossFilter:hover, input#raidsBossFilter:focus {background: -webkit-linear-gradient('+c[163]+'); background: -moz-linear-gradient('+c[163]+');}\
				ul#SRDotDX_tabpane_tabs input[type="text"].generic {color:'+c[164]+'; text-shadow:'+c[165]+'; border-bottom-color:'+c[166]+';}\
				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]+');}\
				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]+');}\
                #kong_game_ui span.notice {text-shadow:'+c[174]+';}\
                #kong_game_ui ul#SRDotDX_tabpane_tabs input[type="checkbox"] + label:before {background: url(data:image/png;base64,'+check+') 0 0 no-repeat}\
                #kong_game_ui ul#SRDotDX_tabpane_tabs input[type="checkbox"]:checked + label:before {background: url(data:image/png;base64,'+check+') 0 -14px no-repeat}\
                #kong_game_ui ul#SRDotDX_tabpane_tabs input[type="radio"] + label:before {background: url(data:image/png;base64,'+radio+') 0 0 no-repeat}\
                #kong_game_ui ul#SRDotDX_tabpane_tabs input[type="radio"]:checked + label:before {background: url(data:image/png;base64,'+radio+') 0 -13px no-repeat}\
                #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]+');}\
                #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]+';}\
                a.DotDX_RaidLink {color:'+c[181]+';}\
                a.DotDX_RaidLink:hover {color:'+c[182]+'; text-shadow:'+c[183]+';}\
                a.dotdxRaidListDelete {color:'+c[184]+';}\
                a.dotdxRaidListDelete:hover {color:'+c[185]+'; text-shadow:'+c[186]+';}\
                #raid_list .raid_list_item.DotDX_N:hover {background: -webkit-linear-gradient('+c[187]+'); background: -moz-linear-gradient('+c[187]+');}\
                #raid_list .raid_list_item.DotDX_H:hover {background: -webkit-linear-gradient('+c[188]+'); background: -moz-linear-gradient('+c[188]+');}\
                #raid_list .raid_list_item.DotDX_L:hover {background: -webkit-linear-gradient('+c[189]+'); background: -moz-linear-gradient('+c[189]+');}\
                #raid_list .raid_list_item.DotDX_NM:hover {background: -webkit-linear-gradient('+c[190]+'); background: -moz-linear-gradient('+c[190]+');}\
                span.DotDX_List_diff.DotDX_N {color:'+c[191]+';}\
                span.DotDX_List_diff.DotDX_H {color:'+c[192]+';}\
                span.DotDX_List_diff.DotDX_L {color:'+c[193]+';}\
                span.DotDX_List_diff.DotDX_NM {color:'+c[194]+';}\
                #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]+');}\
                #kong_game_ui div.chat_message_window p.script hr {background:'+c[200]+';}\
                #kong_game_ui div.chat_message_window p.script span .title {color:'+c[201]+'; text-shadow:'+c[202]+';}\
                #kong_game_ui div.chat_message_window p.script span .title:hover {color:'+c[203]+'; text-shadow:'+c[204]+';}\
                table.raids, table.camps {color:'+c[205]+'; text-shadow:'+c[206]+';} \
                table.raids td, table.camps td {border-color:'+c[207]+'; background:'+c[208]+';}\
                table.raids td.ep, table.camps td.ep {background:'+c[209]+';} \
                table.raids th, table.camps th {border-color:'+c[210]+'; background-color:'+c[211]+';} \
                table.raids tr.head, table.camps tr.head {background:'+c[212]+';} \
                table.raids tr.best td, table.camps td.mark {background:'+c[213]+';} \
                table.raids colgroup col.selected {border-color:'+c[214]+';}\
                ',true);
                /*

                */
            },
            toggleFiltering: function() {
                var query = '.DotDX_filter_dummy_0 ', i = 0, frcId = '.DotDX_fltChat_', raidId;
                var fltLen = Object.keys(SRDotDX.config.filters).length;
                if ((fltLen != SRDotDX.raidArray.length) || typeof SRDotDX.config.filters['serpina.jpg'] == 'object') {
                    while (i < SRDotDX.raidArray.length) {
                        raidId = SRDotDX.raidArray[i];
                        if(typeof SRDotDX.config.filters[raidId] == 'undefined') SRDotDX.config.filters[raidId] = [false, false, false, false];
                        i++
                    }
                    for (i in SRDotDX.config.filters) if (SRDotDX.raidArray.indexOf(i) < 0) delete SRDotDX.config.filters[i];
                    console.log('[DotDX] Filters array has been altered!');
                }
                if (SRDotDX.config.filterChatLinks) {
                    i = 0;
                    while (i < SRDotDX.raidArray.length) {
                        raidId = SRDotDX.raidArray[i];
                        if (SRDotDX.config.filters[raidId][0]) query = frcId + raidId + '_0, ' + query;
                        if (SRDotDX.config.filters[raidId][1]) query = frcId + raidId + '_1, ' + query;
                        if (SRDotDX.config.filters[raidId][2]) query = frcId + raidId + '_2, ' + query;
                        if (SRDotDX.config.filters[raidId][3]) query = frcId + raidId + '_3, ' + query;
                        i++
                    }
                }
                if (SRDotDX.config.filterRaidList) {
                    i = 0; frcId = '.DotDX_fltList_';
                    while (i < SRDotDX.raidArray.length) {
                        raidId = SRDotDX.raidArray[i];
                        if (SRDotDX.config.filters[raidId][0]) query = frcId + raidId + '_0, ' + query;
                        if (SRDotDX.config.filters[raidId][1]) query = frcId + raidId + '_1, ' + query;
                        if (SRDotDX.config.filters[raidId][2]) query = frcId + raidId + '_2, ' + query;
                        if (SRDotDX.config.filters[raidId][3]) query = frcId + raidId + '_3, ' + query;
                        i++
                    }
                }
                //if (SRDotDX.config.hideVisitedRaidsInRaidList) query = '.DotDX_visitedRaidList, ' + query;
                SRDotDX.gui.cHTML('#DotDX_filters').html(query + '{display: none !important}',true);
            },
			load: function () {
				if (typeof holodeck._tabs.addTab == 'function' && document.getElementById('chat_rooms_container') != null) {
                    console.log("{!} After GUI load func");
                    SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'SRDotDX_botClass'}).text('.bot{display:'+(SRDotDX.config.hideBotLinks ? 'none !important':'block')+'}').attach('to',document.head);
					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);
					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);
					//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);
                    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);
                    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);
                    SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'DotDX_filters'}).text('.DotDX_filter_dummy_0 {display: none !important}').attach('to',document.head);
                    SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'DotDX_chatResizeElems'}).text('#kong_game_ui textarea.chat_input { width: 270px !important; }\
                    #kong_game_ui div#chat_raids_overlay { width: 292px }\
                    #kong_game_ui div#chat_raids_overlay > span { width: 282px }\
                    div#dotdx_sidebar_container { ' + (SRDotDX.config.sbRightSide?"text-align: left; padding-left: 1px":"text-align: right; margin-left: 2px; padding-right: 1px") + ' }').attach('to',document.head);

                    SRDotDX.gui.toggleFiltering();
					SRDotDX.gui.cHTML('style').set({type: "text/css"}).text(" \
					    " + (SRDotDX.config.hideGameTitle ? "ul#gamepage_categories_list, .horizontal_ad, div#dealspot_banner_holder, div#kong_bumper_preroll_600x400-ad-slot, div#gamepage_header {display:none;} \
					    div.gamepage_header_outer, div.gamepage_header_inner, div.gamepage_header_outer h1 {height: 0 !important; padding: 0 !important; margin: 0 !important} \
						#primarylayout .maincontent {padding: 6px 0 !important} \
						" : "") + "div.raid_list_item.hidden, .DotDX_nukedRaid, div.game_page_admindev_controls, div#subwrap, li#quicklinks_facebook {display:none;} \
						#primarywrap {background-image: none !important; background-color: transparent !important;} \
						body {background-color: #" + SRDotDX.config.bckColor + " !important}\
						#FPXtt { position:absolute; display:block; } \
						#FPXtttop { display:block; height:5px; margin-left:5px; } \
						#FPXttcont { display:block; padding:2px 12px 3px 7px; margin-left:5px; background:#666; color:#fff; } \
						#FPXttbot {display:block;height:5px;margin-left:5px;} \
						#kong_game_ui ul.main_tabs {height:30px; padding-left:7px}\
						#kong_game_ui ul.main_tabs li.tab:first-child { margin-left: 1px; }\
						#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;}\
						#kong_game_ui ul.main_tabs li.tab a.active {margin-top: 5px; padding: 7px 6px 5px; border-radius: 5px 0 5px 0;}\
						#kong_game_ui div#chat_tab_pane {height: 645px !important}\
						#kong_game_ui div#lots_tab_pane {padding: 8px; text-align: left; background-color: #777; height: 644px}\
						#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;}\
						#kong_game_ui div#chat_window { background-color: #fff; border: 1px solid #333; overflow: hidden; box-shadow: 0 0 8px 1px #333; }\
						#kong_game_ui div#chat_window_header { height: 69px; box-shadow: 0 0 5px #333; position: relative; background-color: #ddd; }\
						#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 }\
						#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; }\
						#kong_game_ui div.chat_actions_container span.kong_ico { font-size: 12px !important; }\
						#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; }\
						#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;}\
						#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; }\
						#kong_game_ui div.chat_actions_container span.btn_tools { height: 16px; line-height: initial !important; width: 20px; margin: 2px 3px; } \
						#kong_game_ui div#chat_window_header div.dotdx_chat_overlay { border-top: 1px solid #bbb; margin-top: 3px; padding-top: 4px; overflow: hidden; white-space: nowrap; } \
						#kong_game_ui div#chat_window_header div.dotdx_chat_overlay > span { color: #333; text-shadow: 0 0 3px #ccc; }\
						#kong_game_ui div#chat_tab_pane {background-color: #777} \
						#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; } \
						#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; color: #222; font-style: italic; transition: text-shadow .2s; border-right: 1px dotted #aaa; padding: " + (SRDotDX.isFirefox ? "3px 9px 3px 7px":"4px 9px 3px 7px") + "; }\
						#kong_game_ui div#chat_room_tabs div a:hover { text-shadow: 0 0 5px #888; }\
						#kong_game_ui div#chat_room_tabs div.active a { text-shadow: 0 0 5px #999; background-color: #eee; }\
						#kong_game_ui div#chat_rooms_container div.chat_tabpane.users_in_room { background-color: #f6f6f6; height: 89px; border: 1px solid #999; border-width: 1px 0; border-bottom-color: #888; box-shadow: inset 0 -2px 6px -4px #444; } \
						#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; color: #000; font-size: 11px; padding: 5px 0 3px; border-color: #444; border-width: 1px; border-style: solid; border-radius: 2px; box-shadow: 0 0 6px #666; text-shadow: 0 0 4px #ccc; background: -webkit-linear-gradient(top, #fff, #ddd); background: -moz-linear-gradient(top, #fff, #ddd); }\
						#kong_game_ui div#chat_raids_overlay.active { display: block } \
						#kong_game_ui div#chat_raids_overlay > span { display: block; margin: 0 auto }\
						#kong_game_ui div#lots_tab_pane ul { margin: 0px; padding: 0px; list-style-type: none; position: relative;} \
						#kong_game_ui div#lots_tab_pane ul li.tab { float: left; height: 100%; } \
						#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; padding: " + (SRDotDX.isFirefox ? "2px 7px 3px":"3px 7px 2px") + "; cursor: pointer; border-right: 1px dotted #aaa; transition: text-shadow .2s; color: #222} \
						#kong_game_ui div#lots_tab_pane ul li.tab div.tab_head:hover { text-shadow: 0 0 5px #888; }\
						#kong_game_ui div#lots_tab_pane ul li.tab div.tab_pane  { background-color: #f9f9f9; display: none; border-top: 1px solid #888; width: 282px; height: 600px; padding-top: 2px;} \
						#kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_head { background-color: #eee; cursor: default; text-shadow: 0 0 5px #999; }\
						#kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane { position: absolute; display: block; left: 0px; }\
						#kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list, \
						#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);} \
						#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;} \
						#kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list .raid_list_item.hidden {display:none;} \
						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} \
						a.FPXImportLink:hover { border-color: #008299; background-color: #008299; color: white;} \
						a.FPXDeleteLink:hover { border-color: #D24726; background-color: #D24726; color: white;} \
						a.dotdxRaidListDelete { font: 10px \"Trebuchet MS\"; color: black; text-decoration: none; cursor: pointer; margin-right: 2px; } \
						a.dotdxRaidListDelete:hover { color: #BD0000; text-shadow: 0 0 2px #FF8E8E; }\
						a.DotDX_RaidLink {text-decoration:none; color: #333;} \
						a.DotDX_RaidLink:hover { color: #111; text-shadow: 0 0 3px rgba(0, 0, 0, 0.2); } \
						div.DotDX_ListPanel {border-top: 1px dashed #999; margin-top: 2px; padding-top: 2px; }\
						div.DotDX_ListPanel > span.raidListContent {font-style: italic} \
						#kong_game_ui p.user_count.full { color: crimson; } \
						#kong_game_ui div#lots_tab_pane a.pastebinlink {font: normal 11px Verdana; color:#333; text-decoration:none; cursor:pointer;} \
						#kong_game_ui div#lots_tab_pane a.pastebinlink:hover { text-decoration: underline; color: black } \
						#kong_game_ui div#lots_tab_pane span.pasteright, #kong_game_ui div#lots_tab_pane span.pasteleft {font: normal 11px Verdana; color: #333} \
						#kong_game_ui div#lots_tab_pane span.pasteright {float:right; padding-right: 6px} \
						#kong_game_ui div#lots_tab_pane span.pasteleft {float:left} \
						#kong_game_ui div.chat_message_window { position: relative; margin: 0; height: 4" + (SRDotDX.config.cbDisable ? '38' : '17') + "px !important; } \
						#kong_game_ui div.chat_message_window p {border-width: 1px 0; border-style: solid; margin: 0; padding: 3px 5px;} \
						#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; }\
						#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);} \
						#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);} \
						#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);} \
						#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);} \
						#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); } \
						#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);} \
						#kong_game_ui div.chat_message_window p.script hr { height: 1px; border: 0; background: #ccc; margin: 4px 0 3px; }\
						#kong_game_ui div.chat_message_window p.script span { font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px} \
						#kong_game_ui div.chat_message_window p.script span .title { text-decoration: none; font-size: 12px; font-weight: bold; color: #222 } \
						#kong_game_ui div.chat_message_window p span.separator { margin-right: 0px; display:inline; float: none} \
						#kong_game_ui div.chat_message_window p span.username { color: rgb(39, 101, 148); text-decoration: none; cursor: pointer; display:inline; float: none } \
						#kong_game_ui div.chat_message_window p span.username.ign { color: rgb(38, 116, 34); }\
						#kong_game_ui div.chat_message_window p span.username.is_self { color: rgb(151, 49, 49); }\
						#kong_game_ui div.chat_message_window p span.username:hover { text-decoration: underline } \
						#kong_game_ui div.chat_message_window p span.timestamp {font-style: italic; font-size: 9px; color: #666; vertical-align: text-top;} \
						#kong_game_ui div.chat_message_window p span.message {line-height: 16px; word-wrap: break-word; display:inline; float: none} \
						#kong_game_ui div.chat_message_window p span.message a { text-decoration: none; color: #444; font-style: normal } \
						#kong_game_ui div.chat_message_window p span.message a:hover { color: #000; text-shadow: 0 0 6px #888; } \
						#kong_game_ui div.chat_message_window p span.message a.chat_link:hover { text-shadow: 0 0 4px #F5C68A; text-decoration: none; } \
                        #kong_game_ui div.chat_message_window p span.message a.chat_link { color: #946A3D; } \
                        #kong_game_ui div.chat_message_window p span.message a.reply_link {font-style: italic} \
                        #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;}\
                        #kong_game_ui div.chat_message_window p > span.slider > span.magic {background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAAQCAMAAACyVKU/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAv1QTFRFAQABrbSxFBMU////BQcPJxYjLg0IDxQnIyMjTDMrFgUCJSQ3EiUuLSMVNSYiTgoHNjU4bRAJNjMkEhEINyU3UkUxazUqLDFNbk0xITU4BhIWFAcXSRkjTikSECpJQURXRERBbFVKjCkmMExwjEotWUZEV1daIFAWaSsOSTFOTFFvTW6SckISTlGQTWdxjyUKLTNuMkhNri8mHEhMU4iwjBEIWFVAj1BJb4+yExRGbzRta3K0sigGEyoQeWdi1ikRby5Njm1NcWZOVzCKQ1VakY1xSyxrTHSvLhtMQlZCcYrSdWY0qmdSZGdmslBJo5qIjnNoJRxsTh9FMFSMSlC2EjNlFENytAsJIzMkV0Raa1BtxpWJBxQDtXZlio6MLV5XLWlsM2aPjlQOiZex22BPUG1Ri01yU4zTLCuVzmwvZGZ6jq/zs4tzYnd6Wm3YsGwri2k2k2cTbgwmbXORUYyPN22ukK7My1Iuc4mOeGZ7kYRIa1Kukaq2Z41ij833ZXhh8pAw/fmOsaVx1U0OFRJxrbHPeXhjjJTU7EQ1X5QhNYF/sFEsSqezRXYYa1WLS0oWcLLNcazxOHMuh5PurUoS+/Vy968wGV+WZ8v0cKyzr9P7M42n8VALjXGNy5Io2Y9tq5GvM0+1/u1Cj1C7pGfVNpoy+spB3cpAsIpMztz0sI0i2c+IhatvkOT6qUxkLo/WDkuMjXC1jqyR8IBqvWOLh6o9sbfzq2sSTpbqRrjTyqgh1YxR/vmwUsQq6G0p+cyOrKeSg8LYmCtV9tStzXYWqnujqd020c3WuRZv7ZJQlddmhkqS9NFyFVC30vH+mNiX2YoY8WkJ9rRHIDfHbo7r0rS0qVmA28dv/PLOb62TMF/c+YkG74ey/dks1LJMtYbYz69u1LcvsPD+fBdMPzTN1nKY7eDQ02PbsdDNsCmO06eSrMBHjQw1FXDB8K5qwky1UOZD6ZyPULjxrpvzz+Xb3pfuy9C02iaX/LcX2fI/562Iy5qoGHNz69L3AAAAVCPTZwAAAP90Uk5T//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AZvyKWQAAMfdJREFUeNqUmwV021ja922tZUuWJcsyO3bMjjmxkziMDVPD1DZpmJqkaZKmaUpTZmbulGHaabvTDjMz4w7PDs/OzDJ+53uu0u673/udPWf3sSPbsS1LV/d3///ngkD4v0IgEIhE6C4QSCRR6EEgkArEUqlAIJeLpbCRu91ytEXvuOXo8wLB7Nn8Zvb058XbSnX+bfT0CwG/x9v7/JfAWLSdNWseH7P4+PZbkQj2suWep5/eEJMxG74jVUqlIkW4szMMvw67kErFYvh1xQLF94nhRLlcFCUSGapq3xw6kZJigJ+Jb23dOHfu3NZ4vYzAIJRiCHf7/RfffSv/wojbBF9VKGyKRNjCbsRi+IjEACGBL8ODoN5eU2Ovj4+OlskkEnhHKW5v988fvjnS7vbfHDGJBf8rKIoicIrCMFR4FCbSqDUoyNthXrTmmTUdEIs61qxZk+ydPnpFbGJsOkRWusKdnWouXjoYjJR2BS00Rotpk1vjh9BoTBCBqamADJWfRJKSIkNFaDDEQ/D/my5tfiO9dTybfQmBQJrdDuWtHbcbBJs3zo3XS0T8VUJXYkZqauqM1Bm3Aw46MzMz15qToysVCnt6tvOXH8NEGI5huAjKD9do5oTXd2aF5yRZjUkEfN6JRRGkE86RZkjrxZUWy8qVlblOC6uicAkWFRUFRRr1bwOd/7N/6v7+m2e///777AVykuNCnIWDIDmStKhtC2wQYmNYYbQ5bDZjII2Ko1IkVEogLo6KC0TRNttERVmZUFjW6dDYjBqtXb/drvWGqFBQzxIYYUThtsEGR09MOE0bExNNNM3QHAGB46qCrc1p3oIiDzXoC3opFoqgJWgODZrNMolBQjXDFU2hKLj4mEGCSXAJrtWaAxZKpVJh8PqN94eu3DvwQ31VXf37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); background-position-y: 0; width: 16px; display: inline-block; height: 16px; margin-right: 2px; margin-top: 4px }\
						#kong_game_ui div.chat_message_window p > span.slider > span.magic:first-child { margin-left: 5px; }\
						#kong_game_ui div.chat_message_window p > span.slider > span.magic:last-child { margin-right: 5px; }\
						#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}\
						#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; }\
						#kong_game_ui div.chat_message_window p > span.slider > span.user:last-child { margin-right: 10px; }\
						#kong_game_ui div.chat_message_window p > span.slider > span.user:hover { text-shadow: 0 0 6px #888; }\
						#kong_game_ui div.chat_message_window p.emote {font-style: italic; color: #085088; text-align: center;}\
						#kong_game_ui div.chat_message_window p.emote span.username, #kong_game_ui div.chat_message_window p.emote span.separator { display: none; }\
						#kong_game_ui div.chat_message_window p span.room { color: #666; font-size: 9px; vertical-align: text-top; }\
						#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; }\
						#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} \
						#kong_game_ui .chatOverlayMain > span {padding: 3px 10px; cursor: pointer;} \
						#kong_game_ui .chatOverlayMain > span:hover {background-color: #C2A71C; font-style: italic; color: #555}\
						#kong_game_ui textarea.chat_input { height: 30px !important; margin: 0 !important; outline: none; padding: 4px 6px 4px } \
						" + (SRDotDX.config.cbDisable ? '#kong_game_ui div.chat_controls { box-shadow: 0 0 4px #666; position: relative; border-top: 1px solid #777 }' : '') + " \
						#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);}\
						#kong_game_ui div.dotdx_chat_buttons > span { display: inline-block; padding: 3px 7px; cursor: pointer; transition: text-shadow .2s; }\
						#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; }\
						#kong_game_ui input.dotdx_chat_filter:focus { background-color: #fff }\
						div.dotdx_chat_buttons > span.active { text-shadow: 0 0 4px #aaa }\
						div.dotdx_chat_buttons > span:hover { text-shadow: 0 0 4px #888 }\
						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; } \
						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;}\
						div.tab_pane div.collapsingField { padding-top: 3px; }\
						xxx {display:block !important}\
						span.DotDX_RaidListVisited {float: right; padding: 0 3px;} \
						span.DotDX_List_diff {display: block; width: 25px; float: left; font-weight: bold; padding-left: 2px;} \
						span.DotDX_List_diff.DotDX_N {color: #00BB00;} \
						span.DotDX_List_diff.DotDX_H {color: #DDAA00;} \
						span.DotDX_List_diff.DotDX_L {color: #FF0000;} \
						span.DotDX_List_diff.DotDX_NM {color: #BB00BB;} \
						div.tab_pane input, div.tab_pane select {border: 1px solid #ccc; padding: 1px} \
						div.tab_pane input {height: 14px;} \
						div.tab_pane select {height: 18px} \
						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} \
						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;}\
						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;}\
						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;}\
						div.tab_pane input[type=\"button\"].red:hover,\
						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;}\
						div.tab_pane input.landpmbutton { height: 20px; width: 22px; } \
						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); } \
						div.tab_pane input.landtxtfield { padding: 2px 0; width: 50px; text-align: center} \
						div.tab_pane input.landtxtfieldc { padding: 2px 0; width: 100%; text-align: center } \
						div.tab_pane td.landname { padding-top: 3px} \
						div.tab_pane input.landsavebutton { height: 20px; width:100% } \
						table.raids, table.camps { font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 10px; text-align: center; border-collapse: collapse;  margin: 5px auto } \
                        table.raids td { border: 1px solid #bbb; width: 55px; background-color: #fff; }\
                        table.camps td { border: 1px solid #bbb; width: 20px; background-color: #fff; }\
                        table.raids td.ep, table.camps td.ep { text-align: right; width: auto; padding: 0 6px; } \
                        table.raids th, table.camps th { border: 1px solid #bbb; background-color: #efefef; } \
                        table.raids tr.head, table.camps tr.head { background-color: #fafafa; } \
                        table.raids tr.split td, table.camps th { border-bottom-width: 2px; } \
                        table.raids tr.best td, table.camps td.mark { background-color: #eff4f9; } \
                        table.camps .tb {border-right-width: 2px} \
                        table.raids colgroup col.selected { border: 2px solid #5f9ea0; }\
                        ul#SRDotDX_tabpane_tabs input[type=\"checkbox\"] {display: none}\
                        ul#SRDotDX_tabpane_tabs input[type=\"checkbox\"] + label {font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; cursor: pointer;}\
					    ul#SRDotDX_tabpane_tabs input[type=\"checkbox\"] + label:before { content:\"\"; display:inline-block; width:18px; height:14px; position: relative; top: 3px; }\
                        ul#SRDotDX_tabpane_tabs input[type=\"checkbox\"].generic + label:before { margin-left: 6px }\
                        ul#SRDotDX_tabpane_tabs input[type=\"radio\"] {display: none}\
                        ul#SRDotDX_tabpane_tabs input[type=\"radio\"] + label {font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; cursor: pointer;}\
					    ul#SRDotDX_tabpane_tabs input[type=\"radio\"] + label:before { content:\"\"; display:inline-block; width:16px; height:13px; position: relative; top: 2px; }\
                        ul#SRDotDX_tabpane_tabs input[type=\"radio\"].generic + label:before { margin-left: 5px }\
                        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; }\
                        ul#SRDotDX_tabpane_tabs input[type=\"text\"].generic:hover { border-style: solid; }\
                        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);}\
                        ul#SRDotDX_tabpane_tabs input[type=\"text\"][disabled].generic { color: #aaa; }\
                        ul#SRDotDX_tabpane_tabs input[type=\"text\"].color {float: right; margin-right: 6px; width: 40px;}\
                        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;}\
                        input#raidsBossFilter:hover, input#raidsBossFilter:focus {background: -webkit-linear-gradient(top, #DFE8F1, #fff); background: -moz-linear-gradient(top, #DFE8F1, #fff);}\
                        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; }\
                        #kong_game_ui div#dotdx_status_div {font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-style: italic; font-size: 11px; margin: 0; padding: 6px 6px 4px; border-bottom: 1px solid #aaa; }\
                        #kong_game_ui div#dotdx_status_div span {text-shadow: 0 0 4px #aaa; color: #333;}\
                        #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;}\
                        #kong_game_ui div#helpBox > span {display: inline-block; padding: 11px 8px 9px;}\
                        #kong_game_ui span.generic { display: inline-block; margin-left: 6px; margin: 3px 6px 0; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; }\
                        #kong_game_ui span.notice { display: inline-block; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 10px; font-style: italic; margin: 3px 6px; }\
                        #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;}\
                        #kong_game_ui div#dotdx_usercontext span { display: inline-block; padding: 3px 6px 2px }\
                        #kong_game_ui div#dotdx_usercontext span:hover { text-shadow: 0 0 3px #aaa; }\
                        #kong_game_ui td {vertical-align: middle}\
                        div#FPXfsOptions span.generic {float:left; clear:both}\
                        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; }\
                        div#FPXfsOptions label { margin-right: 3px; }\
                        div#dotdx_sidebar_container { margin-top: 0; height: 654px; padding-top: 36px }\
                        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;}\
                        div#dotdx_sidebar_container > button:hover { position: relative; z-index: 40;}\
                        div#dotdx_sidebar_container > div.label { text-align: center; padding-left: 6px; color: #fff; padding-top: 7px; height: 19px; text-shadow: 0 0 6px #fff; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; }\
                        div#dotdx_sidebar_container > div { width: 60px; height: 26px }\
                        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; left: 769px; padding: 3px 6px; transition: width .5s; }\
                        div#dotdx_sidebar_container > input[type=\"text\"]:hover, div#dotdx_sidebar_container > input[type=\"text\"]:focus { width:250px; text-align: left; }\
                        #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;}\
                    ").attach("to",document.head);
                    SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'DotDX_themeClass'}).attach('to',document.head);
                    SRDotDX.gui.applyTheme();
                    SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'DotDX_fontClass'}).attach('to',document.head);
                    SRDotDX.gui.applyFontSize();
                    console.log("{!} After CSS");
					var link = SRDotDX.gui.cHTML('a').set({href: '#lots_tab_pane', class: ''}).html('Raids', false).attach('to', SRDotDX.gui.cHTML('li').set({ class: 'tab', id: 'lots_tab' }).attach('after', 'chat_tab').ele()).ele();
                    var sbTmp = JSON.stringify(SRDotDX.config.sbConfig);
                    sbTmp = sbTmp.slice(1,sbTmp.length-1).replace(/},/g,"},&#10;").replace(/l,/g,"l,&#10;");
					var pane = SRDotDX.gui.cHTML('div').set({id: 'lots_tab_pane'}).html(' \
						<div id="dotdx_shadow_wrapper">\
						<div id="dotdx_status_div">DotDX: <span id="StatusOutput"></span></div> \
						<div style="height: 617px; overflow: hidden;">\
						<ul id="SRDotDX_tabpane_tabs"> \
							<li class="tab active"> \
								<div class="tab_head" id="raids_tab">Raids</div> \
								<div class="tab_pane" id="mainRaidsFrame"> \
									<div id="topRaidPane"> \
									<div id="FPXRaidFilterDiv" class="collapsible_panel"> \
										<p class="collapsingCategory" id="collapsingCat1" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidFiltering\', this, \'raid_list\')">Filtering<span style="float:right">&minus;</span></p> \
										<div id="FPXRaidFiltering" style="display:block" class="collapsingField"> \
											<input type="text" id="raidsBossFilter" name="FPXRaidBossNameFilter"> \
                                            <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>\
                                            <input type="checkbox" id="dotdx_flt_nuke"><label for="dotdx_flt_nuke" style="margin-right: 9px;">Only nuked</label>\
                                            <input type="checkbox" id="dotdx_flt_all"><label for="dotdx_flt_all">Show all</label>\
										</div> \
									</div> \
									<!-- <div id="FPXRaidSortingDiv" class="collapsible_panel"> \
										<p class="collapsingCategory" id="collapsingCat2" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidSort\', this, \'raid_list\')">Sorting<span style="float:right">+</span></p> \
										<div id="FPXRaidSort" style="display:none"> \
											<table> \
											<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> \
											<td>&nbsp;Sort by: \
											<select style="width: 90px" id="FPXRaidSortSelection" tabIndex="-1"> \
												<option value="Time" selected>TimeStamp</option> \
												<option value="Name">Raid Name</option> \
												<option value="Diff">Difficulty</option> \
												<option value="Id">Raid Id</option> \
											</select> \
											<select style="width: 56px" id="FPXRaidSortDirection" tabIndex="-1"> \
												<option value="asc" selected>Asc</option> \
												<option value="desc">Desc</option> \
											</select></td></tr> \
											<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> \
											</table> \
										</div> \
									</div> --> \
										<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.\');">\
										<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.\');"> \
										<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.\');"> \
										<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> \
										<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.\'); "> \
										<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.\'); "> \
									</div> \
									<div style="" id="raid_list" tabIndex="-1"></div> \
								</div> \
							</li> \
							<li class="tab"> \
							<div class="tab_head">Opts</div> \
								<div class="tab_pane"> \
									<div id="FPXRaidOptionsDiv" class="collapsible_panel"> \
										<p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat5" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidOptions\', this)">Raid Options<span style="float:right">+</span></p> \
										<div id="FPXRaidOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
												<input type="checkbox" id="SRDotDX_options_markMyRaidsVisited" class="generic"><label for="SRDotDX_options_markMyRaidsVisited">Mark raids posted by me as visited</label><br> \
												<input type="checkbox" id="SRDotDX_options_confirmWhenDeleting" class="generic"><label for="SRDotDX_options_confirmWhenDeleting">Confirm when manually deleting raids</label><br> \
												<input type="checkbox" id="SRDotDX_options_importFiltered" class="generic"><label for="SRDotDX_options_importFiltered">Add to database filtered raids only</label><br> \
												<span class="generic">Unvisited raid pruning:</span><br> \
												<input type="radio" id="FPX_options_unvisitedPruningAggressive" class="generic" name="unvisitedPruning" value="Aggressive"/><label for="FPX_options_unvisitedPruningAggressive">Aggressive</label> \
												<input type="radio" id="FPX_options_unvisitedPruningModerate" class="generic" name="unvisitedPruning" value="Moderate"/><label for="FPX_options_unvisitedPruningModerate">Moderate</label> \
												<input type="radio" id="FPX_options_unvisitedPruningSlow" class="generic" name="unvisitedPruning" value="Slow"/><label for="FPX_options_unvisitedPruningSlow">Slow</label> \
												<input type="radio" id="FPX_options_unvisitedPruningNone" class="generic" name="unvisitedPruning" value="None"/><label for="FPX_options_unvisitedPruningNone">None</label><br> \
										</div> \
									</div> \
									<div id="FPXChatOptionsDiv" class="collapsible_panel"> \
										<p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat6" onclick="SRDotDX.gui.toggleDisplay(\'FPXChatOptions\', this)">Chat Options<span style="float:right">+</span></p> \
										<div id="FPXChatOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
											<input type="checkbox" id="SRDotDX_options_hideRaidLinks" class="generic"><label for="SRDotDX_options_hideRaidLinks">Hide all raid links in chat</label><br> \
											<input type="checkbox" id="SRDotDX_options_hideBotLinks" class="generic"><label for="SRDotDX_options_hideBotLinks">Hide bot raid links in chat</label><br> \
											<input type="checkbox" id="SRDotDX_options_hideVisitedRaids" class="generic"><label for="SRDotDX_options_hideVisitedRaids">Hide visited raids in chat</label><br> \
											<span class="generic">Chat size:</span>\
											<input type="radio" id="SRDotDX_options_chatSizeNormal" name="chatSize" value="300"/><label for="SRDotDX_options_chatSizeNormal">Normal</label> \
											<input type="radio" id="SRDotDX_options_chatSizePlus25" name="chatSize" value="375" class="generic"/><label for="SRDotDX_options_chatSizePlus25">+25%</label> \
											<input type="radio" id="SRDotDX_options_chatSizePlus50" name="chatSize" value="400" class="generic"/><label for="SRDotDX_options_chatSizePlus50">+50%</label><br> \
											<span class="generic">Font size:</span>\
											<input type="radio" id="SRDotDX_options_fontSizeNormal" name="fontSize" value="0"/><label for="SRDotDX_options_fontSizeNormal">Normal</label> \
											<input type="radio" id="SRDotDX_options_fontSizeSmaller" name="fontSize" value="2" class="generic"/><label for="SRDotDX_options_fontSizeSmaller">Smaller</label> \
											<input type="radio" id="SRDotDX_options_chatSizeBigger" name="fontSize" value="1" class="generic"/><label for="SRDotDX_options_chatSizeBigger">Bigger</label><br> \
											<input type="checkbox" id="SRDotDX_options_hideScrollbar" class="generic"><label for="SRDotDX_options_hideScrollbar">Hide scrollbar for chat and user window</label><br> \
											<span class="generic">More info in raid links:</span> \
											<input type="checkbox" id="SRDotDX_options_showFS"><label for="SRDotDX_options_showFS">Show FS</label> \
											<input type="checkbox" id="SRDotDX_options_showAP" class="generic"><label for="SRDotDX_options_showAP">Show AP</label> \
										</div> \
									</div> \
									<div id="FPXPasteOptionsDiv" class="collapsible_panel"> \
										<p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat7" onclick="SRDotDX.gui.toggleDisplay(\'FPXPasteOptions\', this)">Pastebin Options<span style="float:right">+</span></p> \
										<div id="FPXPasteOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
											<input type="checkbox" id="SRDotDX_options_autoImportPaste" class="generic"><label for="SRDotDX_options_autoImportPaste">Auto import pastebins</label><br> \
											<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"> \
										</div> \
									</div> \
									<div id="FPXIntOptionsDiv" class="collapsible_panel"> \
										<p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat20" onclick="SRDotDX.gui.toggleDisplay(\'FPXIntOptions\', this)">Interface Options<span style="float:right">+</span></p> \
										<div id="FPXIntOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
										    <input type="checkbox" id="options_hideGameTitle" class="generic"><label for="options_hideGameTitle">Hide titlebar above game window</label><br>\
										    <input type="checkbox" id="options_hideGameDetails" class="generic"><label for="options_hideGameDetails">Hide details under game window</label><br>\
										    <input type="checkbox" id="options_hideKongForum" class="generic"><label for="options_hideKongForum">Hide forum under game window</label><br>\
										    <input type="checkbox" id="options_trueMsgCount" class="generic"><label for="options_trueMsgCount">Display true kong messages count</label><br>\
										    <span class="generic">Theme:</span>\
                                            <input type="radio" id="theme_lightGrey" name="chatTheme" value="0"><label for="theme_lightGrey">Light Grey</label>\
										    <input type="radio" id="theme_crimsonBlack" name="chatTheme" value="1" class="generic"><label for="theme_crimsonBlack">Crimson Black</label><br>\
											<span class="generic">Kong background color</span><input type="text" class="generic color" id="SRDotDX_colors_background"> \
										</div>\
									</div> \
									<div id="FPXsbOptionsDiv" class="collapsible_panel"> \
										<p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat25" onclick="SRDotDX.gui.toggleDisplay(\'FPXsbOptions\', this)">Sidebar Options<span style="float:right">+</span></p> \
										<div id="FPXsbOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
										    <input type="checkbox" id="options_sbEnable" class="generic"><label for="options_sbEnable">Enable DotDX Sidebar</label><br>\
										    <input type="checkbox" id="options_cbDisable" class="generic"><label for="options_cbDisable">Hide toolbar under chat window</label><br>\
										    <input type="checkbox" id="options_sbRightSide" class="generic"><label for="options_sbRightSide">Show sidebar on the right side of chat</label><br> \
                                            <textarea id="options_sbConfig" rows="25" style="overflow-y: hidden; overflow-x: scroll; white-space: nowrap">' + sbTmp + '</textarea> \
										    <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;">\
										    <input id="dotdx_sbConfigDefault" style="width: 110px;" class="red" type="button" value="Restore default" onclick="SRDotDX.gui.restoreDefaultSB(); return false;">\
										</div> \
									</div> \
									<div id="FPXfsOptionsDiv" class="collapsible_panel"> \
										<p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat24" onclick="SRDotDX.gui.toggleDisplay(\'FPXfsOptions\', this)">Friend Share Options<span style="float:right">+</span></p> \
										<div id="FPXfsOptions" name="dotdxOptsTabs" style="display:none; text-align:right" class="collapsingField"> \
										</div> \
									</div> \
								</div> \
							</li> \
							<li class="tab"> \
								<div class="tab_head" id="FPXShareTab">Share</div> \
								<div class="tab_pane"> \
								    <div id="FPXRaidSpamDiv"> \
											<div id="FPXShareDiv" class="collapsible_panel"> \
												<p class="collapsingCategory" id="collapsingCat8" onclick="SRDotDX.gui.toggleDisplay(\'FPXShare\', this, \'share_list\')">Share<span style="float:right">+</span></p> \
										        <div id="FPXShare" style="display:block" class="collapsingField"> \
													<input type="checkbox" id="SRDotDX_options_formatLinkOutput" class="generic"><label for="SRDotDX_options_formatLinkOutput">Enable formatting of posted raid links</label><br> \
													<span class="generic">Whisper to </span><input type="text" class="generic" id="SRDotDX_options_whisperTo"><br>\
													<span class="notice">(if "whisper to" field is blank, raids will be posted public)</span> \
													<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;"/> \
													<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> \
												</div> \
											</div> \
											<div id="FPXImportDiv" class="collapsible_panel" class="collapsingField"> \
												<p class="collapsingCategory" id="collapsingCat9" onclick="SRDotDX.gui.toggleDisplay(\'FPXImport\', this, \'share_list\')">Import<span style="float:right">+</span></p> \
										        <div id="FPXImport" style="display:none" class="collapsingField"> \
													<input type="checkbox" id="SRDotDX_options_markImportedRaidsVisited" class="generic"><label for="SRDotDX_options_markImportedRaidsVisited">Mark imported raids visited</label><br> \
                                                    <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;"/> \
													<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;"/> \
											    </div> \
											</div> \
									</div> \
									<textarea id="DotDX_raidsToSpam" name="FPXRaidSpamInput" style="height:437px;"></textarea> \
								</div> \
							</li> \
							<li class="tab"> \
								<div class="tab_head">Filter</div> \
								<div class="tab_pane"> \
									<div id="FPXRaidFilterDiv"> \
										<div id="FPXRaidFilterWhereDiv"> \
										<p class="collapsingCategory" id="collapsingCat18" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidFilterWhere\', this)">Filtering options<span style="float:right">+</span></p> \
										<div id="FPXRaidFilterWhere" style="display:block" class="collapsingField"> \
											<input type="checkbox" id="SRDotDX_options_perRaidFilterLinks" class="generic"><label for="SRDotDX_options_perRaidFilterLinks">Activate filtering on raid links</label><br> \
											<input type="checkbox" id="SRDotDX_options_perRaidFilterRaidList" class="generic"><label for="SRDotDX_options_perRaidFilterRaidList">Activate filtering on raid list tab</label><br> \
										</div>\
										</div> \
										<div id="FPXRaidFilterWhatDiv"> \
											<div id="FPXRaidTableSmallDiv" class="collapsible_panel"> \
												<p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat11" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableSmall\', this)">Small Raids<span style="float:right">+</span></p> \
												<table id="FPXRaidTableSmall" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
													<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> \
													<tbody id="FPXRaidFilterWhatSmall"> \
														<!-- Dynamic content --> \
													</tbody> \
												</table> \
											</div> \
											<div id="FPXRaidTableMediumDiv" class="collapsible_panel"> \
												<p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat12" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableMedium\', this)">Medium Raids<span style="float:right">+</span></p> \
												<table id="FPXRaidTableMedium" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
													<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> \
													<tbody id="FPXRaidFilterWhatMedium"> \
														<!-- Dynamic content --> \
													</tbody> \
												</table> \
											</div> \
											<div id="FPXRaidTableLargeDiv" class="collapsible_panel"> \
												<p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat13" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableLarge\', this)">Large Raids<span style="float:right">+</span></p> \
												<table id="FPXRaidTableLarge" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
													<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> \
													<tbody id="FPXRaidFilterWhatLarge"> \
														<!-- Dynamic content --> \
													</tbody> \
												</table> \
											</div> \
											<div id="FPXRaidTableEpicDiv" class="collapsible_panel"> \
												<p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat14" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableEpic\', this)">Epic Raids<span style="float:right">+</span></p> \
												<table id="FPXRaidTableEpic" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
													<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> \
													<tbody id="FPXRaidFilterWhatEpic"> \
														<!-- Dynamic content --> \
													</tbody> \
												</table> \
											</div> \
											<div id="FPXRaidTableColossalDiv" class="collapsible_panel"> \
												<p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat15" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableColossal\', this)">Colossal Raids<span style="float:right">+</span></p> \
												<table id="FPXRaidTableColossal" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
													<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> \
													<tbody id="FPXRaidFilterWhatColossal"> \
														<!-- Dynamic content --> \
													</tbody> \
												</table> \
											</div> \
											<div id="FPXRaidTableGiganticDiv" class="collapsible_panel"> \
												<p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat155" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableGigantic\', this)">Gigantic Raids<span style="float:right">+</span></p> \
												<table id="FPXRaidTableGigantic" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
													<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> \
													<tbody id="FPXRaidFilterWhatGigantic"> \
														<!-- Dynamic content --> \
													</tbody> \
												</table> \
											</div> \
											<div id="FPXRaidTableGuildDiv" class="collapsible_panel"> \
												<p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat16" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableGuild\', this)">Guild Raids<span style="float:right">+</span></p> \
												<table id="FPXRaidTableGuild" name="dotdxFilterTab" style="display:none; height: 330px; overflow-y: auto;" class="collapsingField"> \
													<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> \
													<tbody id="FPXRaidFilterWhatGuild"> \
														<!-- Dynamic content --> \
													</tbody> \
												</table> \
											</div> \
											<div id="FPXRaidTableSpecialDiv" class="collapsible_panel"> \
												<p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat17" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableSpecial\', this)">World Raids<span style="float:right">+</span></p> \
												<table id="FPXRaidTableSpecial" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
													<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> \
													<tbody id="FPXRaidFilterWhatSpecial"> \
														<!-- Dynamic content --> \
													</tbody> \
												</table> \
											</div> \
										</div> \
									</div> \
								</div> \
							</li> \
							<li class="tab"> \
								<div class="tab_head">Calc</div> \
								<div class="tab_pane"> \
									<ul id="SRDotDX_tabpane_tabs2"> \
									<li class="tab2"> \
								<div id="FPXLandCalcDiv" class="collapsible_panel"> \
								<p class="collapsingCategory" id="collapsingCat20" onclick="SRDotDX.gui.toggleDisplay(\'FPXLandCalc\', this)">Land Calculator<span style="float:right">+</span></p> \
								<div id="FPXLandCalc" style="display:block" class="collapsingField"> \
								<form id="FPXLand" name="FPXLandForm" onSubmit="return false;"> \
								<table style="margin: 0 auto; padding-right: 10px;"> \
									<tr><td class="landname" colspan="3">Cornfield</td><td style="width: 10px">&nbsp;</td><td class="landname" colspan="3">Stable</td></tr> \
									<tr> \
										<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> \
										<td> <input class="generic" maxlength="10" name="tf_1" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="1" /></td> \
										<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> \
										<td></td> \
										<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> \
										<td> <input class="generic" maxlength="10" name="tf_2" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="2" /></td> \
										<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> \
									</tr> \
									<tr><td class="landname" colspan="3">Barn</td><td></td><td class="landname" colspan="3">Store</td></tr> \
									<tr> \
										<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> \
										<td> <input class="generic" maxlength="10" name="tf_3" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="3" /></td> \
										<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> \
										<td></td> \
										<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> \
										<td> <input class="generic" maxlength="10" name="tf_4" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="4" /></td> \
										<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> \
									</tr> \
									<tr><td class="landname" colspan="3">Pub</td><td></td><td class="landname" colspan="3">Inn</td></tr> \
									<tr> \
										<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> \
										<td> <input class="generic" maxlength="10" name="tf_5" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="5" /></td> \
										<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> \
										<td></td> \
										<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> \
										<td> <input class="generic" maxlength="10" name="tf_6" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="6" /></td> \
										<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> \
									</tr> \
									<tr><td class="landname" colspan="3">Sentry</td><td></td><td class="landname" colspan="3">Fort</td></tr> \
									<tr> \
										<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> \
										<td> <input class="generic" maxlength="10" name="tf_7" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="7" /></td> \
										<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> \
										<td></td> \
										<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> \
										<td> <input class="generic" maxlength="10" name="tf_8" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="8" /></td> \
										<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> \
									</tr> \
									<tr><td class="landname" colspan="3">Castle</td></tr> \
									<tr> \
										<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> \
										<td> <input  class="generic" maxlength="10" name="tf_9" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="9" /></td> \
										<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> \
										<td></td> \
										<td colspan="3"> <input class="landsavebutton green" id="lsbutton" type="button" value="Save" onClick="SRDotDX.gui.FPXLandButtonSave();return false;" tabindex="28"/></td> \
									</tr> \
								</table> \
								</form> \
								</div> \
								</div>\
							</li> \
									</ul> \
								</div> \
							</li>  \
						</ul> \
						</div>\
						<div id="helpBox" style="max-height:0"><span>Help message</span></div> \
						</div>\
					', false).attach('to', 'kong_game_ui').ele();
                    console.log("{!} After HTML load func");
                    SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'DotDX_colors'}).text(' \
                        .DotDX_filter_dummy_0 {display: none !important} \
                        ').attach('to',document.head);

					//pane.style.height = document.getElementById('chat_tab_pane').style.height;
					var e = pane.getElementsByClassName('tab_head');
					i = e.length;
                    while (i--) {
						e[i].addEventListener('click', function() {
							if (!/\bactive\b/i.test(this.className)) {
								var e = document.getElementById("lots_tab_pane").getElementsByTagName("li");
								var i = e.length;
                                while (i--) if (e[i].getAttribute("class").indexOf("active") > -1) e[i].className = e[i].className.replace(/ active$/g,"");
								(this.parentNode).className += ' active';
							}
						});
					}
					holodeck._tabs.addTab(link);

                    //Set up custom chat size
                    SRDotDX.gui.chatResize(SRDotDX.config.chatSize);

                    //Chat raids overlay div
                    SRDotDX.gui.cHTML('div').set({id: 'chat_raids_overlay'})
                                            .html('<span id="chat_raids_overlay_text"></span>',true)
                                            .attach("to",'chat_tab_pane');

                    //Sidebar elements generator
                    if (SRDotDX.config.sbEnable) SRDotDX.gui.applySidebarUI(1);

                    //spam tab
					var FPXimpSpam = SRDotDX.gui.cHTML('#DotDX_raidsToSpam');
					var FPXSpamText = 'Paste raid and/or pastebin links here to share or import\n\nLinks must be comma (,) separated.';
					FPXimpSpam.ele().value=FPXSpamText;
					FPXimpSpam.ele().addEventListener('blur',function() { if (this.value == '') this.value = FPXSpamText });
					FPXimpSpam.ele().addEventListener('focus',function() { if (this.value == FPXSpamText) this.value = '' });

                    //chat global listener
                    var chat_window = document.getElementById('chat_rooms_container');
                    chat_window.addEventListener('click',function(e) { SRDotDX.gui.chatWindowMouseDown(e) }, false);
                    chat_window.addEventListener('contextmenu',function(e) { SRDotDX.gui.chatWindowContextMenu(e) }, false);
					//land tab
                    els = document.FPXLandForm; i = 9;
                    while (i--) els.elements['tf_'+(i+1)].value = SRDotDX.config.FPXLandOwnedCount[i];
                    SRDotDX.gui.FPXLandUpdater();

					//raid tab
                    var raids_tab = document.getElementById('raids_tab');
                    raids_tab.addEventListener('click', function(){ SRDotDX.gui.refreshRaidList(); }, false);

                    var raidBossFilter = SRDotDX.gui.cHTML('#raidsBossFilter');
                    raidBossFilter.ele().value = SRDotDX.config.lastFilter;
                    raidBossFilter.ele().addEventListener("keyup", function(){ SRDotDX.gui.updateFilterTxt(this.value,true); });

                    var filterIncVis = SRDotDX.gui.cHTML('#dotdx_flt_vis');
                    filterIncVis.ele().checked = SRDotDX.config.fltIncVis;
                    filterIncVis.on('click',function(){
                        SRDotDX.config.fltIncVis = this.checked;
                        if(this.checked) {
                            document.getElementById('dotdx_flt_nuke').checked = false; SRDotDX.config.fltShowNuked = false;
                            document.getElementById('dotdx_flt_all').checked = false; SRDotDX.config.fltShowAll = false;
                        }
                        SRDotDX.gui.selectRaidsToJoin('checkbox')});

                    var filterShowNuked = SRDotDX.gui.cHTML('#dotdx_flt_nuke');
                    filterShowNuked.ele().checked = SRDotDX.config.fltShowNuked;
                    filterShowNuked.on('click',function(){
                        SRDotDX.config.fltShowNuked = this.checked;
                        if(this.checked) {
                            document.getElementById('dotdx_flt_vis').checked = false; SRDotDX.config.fltIncVis = false;
                            document.getElementById('dotdx_flt_all').checked = false; SRDotDX.config.fltShowAll = false;
                        }
                        SRDotDX.gui.selectRaidsToJoin('checkbox')});

                    var filterShowAll = SRDotDX.gui.cHTML('#dotdx_flt_all');
                    filterShowAll.ele().checked = SRDotDX.config.fltShowAll;
                    filterShowAll.on('click',function(){
                        SRDotDX.config.fltShowAll = this.checked;
                        if(this.checked) {
                            document.getElementById('dotdx_flt_vis').checked = false; SRDotDX.config.fltIncVis = false;
                            document.getElementById('dotdx_flt_nuke').checked = false; SRDotDX.config.fltShowNuked = false }
                        SRDotDX.gui.selectRaidsToJoin('checkbox')});

                    //raidlist global click listener
                    var raid_list = document.getElementById('raid_list');
                    raid_list.addEventListener('click', function(e) { e.preventDefault(); e.stopPropagation(); return false },false);
                    raid_list.addEventListener('mousedown',function(e) { SRDotDX.gui.FPXraidListMouseDown(e) },false);

					//options tab
                    var optsImportFiltered = SRDotDX.gui.cHTML('#SRDotDX_options_importFiltered');
                    optsImportFiltered.ele().checked = SRDotDX.config.importFiltered;
                    optsImportFiltered.on('click',function(){ SRDotDX.config.importFiltered = this.checked; SRDotDX.config.save(false) });

                    var optsShowFs = SRDotDX.gui.cHTML('#SRDotDX_options_showFS');
                    optsShowFs.ele().checked = SRDotDX.config.linkShowFs;
                    optsShowFs.on('click', function(){ SRDotDX.config.linkShowFs = this.checked; SRDotDX.config.save(false) });

                    var optsShowAp = SRDotDX.gui.cHTML('#SRDotDX_options_showAP');
                    optsShowAp.ele().checked = SRDotDX.config.linkShowAp;
                    optsShowAp.on('click', function(){ SRDotDX.config.linkShowAp = this.checked; SRDotDX.config.save(false) });

					var optsHideARaids = SRDotDX.gui.cHTML('#SRDotDX_options_hideRaidLinks');
                    var optsHideBRaids = SRDotDX.gui.cHTML('#SRDotDX_options_hideBotLinks');
					var optsHideVRaids = SRDotDX.gui.cHTML('#SRDotDX_options_hideVisitedRaids');
					var optsConfirmDeletes = SRDotDX.gui.cHTML('#SRDotDX_options_confirmWhenDeleting');
					var optsMarkImportedVisited = SRDotDX.gui.cHTML('#SRDotDX_options_markImportedRaidsVisited');
					var optsWhisperTo = SRDotDX.gui.cHTML('#SRDotDX_options_whisperTo');
					var optsMarkMyRaidsVisited = SRDotDX.gui.cHTML('#SRDotDX_options_markMyRaidsVisited');
					var optsFormatLinkOutput = SRDotDX.gui.cHTML('#SRDotDX_options_formatLinkOutput');
					var optsAutoImportPaste = SRDotDX.gui.cHTML('#SRDotDX_options_autoImportPaste');
					var optsConfirmForLargePaste = SRDotDX.gui.cHTML('#SRDotDX_options_confirmForLargePaste');
					var optsConfirmPasteSize = SRDotDX.gui.cHTML('#SRDotDX_options_confirmPasteSize');
					var rbUnvisitedPruningAggressive = SRDotDX.gui.cHTML('#FPX_options_unvisitedPruningAggressive');
					var rbUnvisitedPruningModerate = SRDotDX.gui.cHTML('#FPX_options_unvisitedPruningModerate');
					var rbUnvisitedPruningSlow = SRDotDX.gui.cHTML('#FPX_options_unvisitedPruningSlow');
					var rbUnvisitedPruningNone = SRDotDX.gui.cHTML('#FPX_options_unvisitedPruningNone');

                    var optsChatSizeNormal = SRDotDX.gui.cHTML('#SRDotDX_options_chatSizeNormal');
                    optsChatSizeNormal.on('click', function(){ SRDotDX.gui.chatResize(300) });
                    var optsChatSizePlus25 = SRDotDX.gui.cHTML('#SRDotDX_options_chatSizePlus25');
                    optsChatSizePlus25.on('click', function(){ SRDotDX.gui.chatResize(375) });
                    var optsChatSizePlus50 = SRDotDX.gui.cHTML('#SRDotDX_options_chatSizePlus50');
                    optsChatSizePlus50.on('click', function(){ SRDotDX.gui.chatResize(450) });
                    switch(SRDotDX.config.chatSize) {
                        case 300: optsChatSizeNormal.ele().checked = true; break;
                        case 375: optsChatSizePlus25.ele().checked = true; break;
                        case 450: optsChatSizePlus50.ele().checked = true; break;
                        default: optsChatSizeNormal.ele().checked = true; break;
                    }

                    var optsChatFontNormal = SRDotDX.gui.cHTML('#SRDotDX_options_fontSizeNormal');
                    optsChatFontNormal.on('click', function(){ SRDotDX.gui.applyFontSize(0) });
                    var optsChatFontSmaller = SRDotDX.gui.cHTML('#SRDotDX_options_fontSizeSmaller');
                    optsChatFontSmaller.on('click', function(){ SRDotDX.gui.applyFontSize(2) });
                    var optsChatFontBigger = SRDotDX.gui.cHTML('#SRDotDX_options_chatSizeBigger');
                    optsChatFontBigger.on('click', function(){ SRDotDX.gui.applyFontSize(1) });
                    switch(SRDotDX.config.fontNum) {
                        case 2: optsChatFontSmaller.ele().checked = true; break;
                        case 1: optsChatFontBigger.ele().checked = true; break;
                        default: optsChatFontNormal.ele().checked = true; break;
                    }

                    var optsChatHideScrollbar = SRDotDX.gui.cHTML('#SRDotDX_options_hideScrollbar');
                    optsChatHideScrollbar.ele().checked = SRDotDX.config.hideScrollBar;
                    optsChatHideScrollbar.on('click', function(){ SRDotDX.config.hideScrollBar = this.checked; SRDotDX.config.save(false); SRDotDX.gui.chatResize(); });

                    var optsHideKongForum = SRDotDX.gui.cHTML('#options_hideKongForum');
                    optsHideKongForum.ele().checked = SRDotDX.config.hideKongForum;
                    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) });

                    var optsHideGameDetails = SRDotDX.gui.cHTML('#options_hideGameDetails');
                    optsHideGameDetails.ele().checked = SRDotDX.config.hideGameDetails;
                    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) });

                    var optsHideGameTitle = SRDotDX.gui.cHTML('#options_hideGameTitle');
                    optsHideGameTitle.ele().checked = SRDotDX.config.hideGameTitle;
                    optsHideGameTitle.on('click', function(){ SRDotDX.config.hideGameTitle = this.checked });

                    var optsTrueMsgCount = SRDotDX.gui.cHTML('#options_trueMsgCount');
                    optsTrueMsgCount.ele().checked = SRDotDX.config.kongMsg;
                    optsTrueMsgCount.on('click', function(){ SRDotDX.config.kongMsg = this.checked });
                    if(SRDotDX.config.kongMsg) SRDotDX.gui.setMessagesCount();

                    var optsChatThemeLightGrey = SRDotDX.gui.cHTML('#theme_lightGrey');
                    optsChatThemeLightGrey.on('click', function(){ SRDotDX.gui.applyTheme(0) });
                    var optsChatThemeCrimsonBlack = SRDotDX.gui.cHTML('#theme_crimsonBlack');
                    optsChatThemeCrimsonBlack.on('click', function(){ SRDotDX.gui.applyTheme(1) });
                    switch(SRDotDX.config.themeNum) {
                        case 1: optsChatThemeCrimsonBlack.ele().checked = true; break;
                        case 0: default: optsChatThemeLightGrey.ele().checked = true; break;
                    }

                    //Opts -> Sidebar Options
                    var optsSbEnable = SRDotDX.gui.cHTML('#options_sbEnable');
                    optsSbEnable.ele().checked = SRDotDX.config.sbEnable;
                    optsSbEnable.on('click', function(){ SRDotDX.config.sbEnable = this.checked; SRDotDX.gui.applySidebarUI(this.checked?1:-1); SRDotDX.config.save(false) });

                    var optsSbRightSide = SRDotDX.gui.cHTML('#options_sbRightSide');
                    optsSbRightSide.ele().checked = SRDotDX.config.sbRightSide;
                    optsSbRightSide.on('click', function(){ SRDotDX.config.sbRightSide = this.checked; SRDotDX.gui.applySidebarUI(2); SRDotDX.config.save(false) });

                    var optsCbDisable = SRDotDX.gui.cHTML('#options_cbDisable');
                    optsCbDisable.ele().checked = SRDotDX.config.cbDisable;
                    optsCbDisable.on('click', function(){ SRDotDX.config.cbDisable = this.checked; SRDotDX.config.save(false) });

					if (SRDotDX.config.markMyRaidsVisted) { optsMarkMyRaidsVisited.ele().checked = true }
					if (SRDotDX.config.formatLinkOutput) { optsFormatLinkOutput.ele().checked = 'checked'; }
					if (SRDotDX.config.markImportedVisited) { optsMarkImportedVisited.ele().checked = 'checked'; }
					if (SRDotDX.config.whisperTo != '') { optsWhisperTo.ele().value = SRDotDX.config.whisperTo; }
					if (SRDotDX.config.autoImportPaste) { optsAutoImportPaste.ele().checked = 'checked'; } else { optsConfirmForLargePaste.ele().disabled=true; optsConfirmPasteSize.ele().disabled=true}
					if (SRDotDX.config.confirmForLargePaste) { optsConfirmForLargePaste.ele().checked = 'checked'; } else { optsConfirmPasteSize.ele().disabled=true }
					if (SRDotDX.config.confirmPasteSize>0) { optsConfirmPasteSize.ele().value = SRDotDX.config.confirmPasteSize }
					if (SRDotDX.config.confirmDeletes) { optsConfirmDeletes.ele().checked = 'checked' }
                    if (SRDotDX.config.bckColor) { SRDotDX.gui.cHTML('#SRDotDX_colors_background').ele().value = SRDotDX.config.bckColor }



					switch(SRDotDX.config.unvisitedRaidPruningMode) {
                        case 0: rbUnvisitedPruningAggressive.ele().checked = true; break;
                        case 1: rbUnvisitedPruningModerate.ele().checked = true; break;
                        case 2: rbUnvisitedPruningSlow.ele().checked = true; break;
                        case 3: rbUnvisitedPruningNone.ele().checked = true; break;
                        default: rbUnvisitedPruningAggressive.ele().checked = true; break;
                    }

					if (SRDotDX.config.hideVisitedRaids) {optsHideVRaids.ele().checked = 'checked'}
                    if (SRDotDX.config.hideBotLinks) { optsHideBRaids.ele().checked = 'checked' }
					if (SRDotDX.config.hideRaidLinks) {
						optsHideARaids.ele().checked = true;
						optsHideVRaids.ele().disabled = true;
                        optsHideBRaids.ele().disabled = true;
					}

					optsConfirmDeletes.ele().addEventListener('click', function () { SRDotDX.config.confirmDeletes = this.checked });
					optsAutoImportPaste.ele().addEventListener('click', function (){ SRDotDX.config.autoImportPaste = this.checked;
						if(!this.checked){ optsConfirmForLargePaste.ele().checked = false; SRDotDX.config.confirmForLargePaste = false }
						optsConfirmForLargePaste.ele().disabled = !this.checked;
						optsConfirmPasteSize.ele().disabled = !this.checked;
					});
					optsConfirmForLargePaste.ele().addEventListener('click', function () { optsConfirmPasteSize.ele().disabled = !this.checked; SRDotDX.config.confirmForLargePaste = this.checked });
					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') });

					optsMarkImportedVisited.ele().addEventListener("click", function() { SRDotDX.config.markImportedVisited = this.checked; });


					optsWhisperTo.ele().addEventListener("change", function(){
						console.log("[SRDotDX] Whisper person changed to " + this.value);
						SRDotDX.config.whisperTo = this.value;
					});
                    SRDotDX.gui.cHTML('#SRDotDX_colors_background').ele().addEventListener("change", function(){
                        SRDotDX.config.bckColor = this.value;
                    });

					optsFormatLinkOutput.ele().addEventListener("click", function(){
						SRDotDX.config.formatLinkOutput = this.checked;
					});

					optsMarkMyRaidsVisited.ele().addEventListener("click", function() {
						SRDotDX.config.markMyRaidsVisted = this.checked;
					});
					optsHideARaids.ele().addEventListener("click",function() {
						document.getElementById('SRDotDX_options_hideVisitedRaids').disabled = this.checked;
						document.getElementById('SRDotDX_options_hideSeenRaids').disabled = this.checked;
						SRDotDX.config.hideRaidLinks = this.checked;
                        SRDotDX.gui.cHTML('#SRDotDX_raidClass').html('.SRDotDX_raid {display: ' + (this.checked ? 'none !important' : 'block') + '}', true);
					},true);
                    optsHideBRaids.ele().addEventListener("click",function() { SRDotDX.gui.switchBot() },true);
					optsHideVRaids.ele().addEventListener("click",function() {
						SRDotDX.config.hideVisitedRaids = this.checked;
                        SRDotDX.gui.cHTML('#SRDotDX_visitedRaidClass').html('.SRDotDX_visitedRaid {display: ' + (this.checked ? 'none !important' : 'block') + '}', true);
					},true);

                    rbUnvisitedPruningAggressive.ele().addEventListener("click",function() { SRDotDX.config.unvisitedRaidPruningMode = 0 },true);
                    rbUnvisitedPruningModerate.ele().addEventListener("click",function() { SRDotDX.config.unvisitedRaidPruningMode = 1 },true);
                    rbUnvisitedPruningSlow.ele().addEventListener("click",function() { SRDotDX.config.unvisitedRaidPruningMode = 2 },true);
                    rbUnvisitedPruningNone.ele().addEventListener("click",function() { SRDotDX.config.unvisitedRaidPruningMode = 3 },true);

                    console.log("{!} After Event listeners func");

					//CHAT TAB CLICK SCROLL (id=chat_tab, class=chat_message_window)
					SRDotDX.gui.cHTML('#chat_tab').ele().addEventListener("click", function () {
						setTimeout(function(){
							var els = document.getElementsByClassName('chat_message_window'), el;
							i = els.length;
                            while (i--) {
								el = els[i]; console.log("[SRDotDX] Scrolling chat window " + el.scrollTop + " : " + el.scrollHeight);
								el.scrollTop = el.scrollHeight;
							}
                            SRDotDX.gui.selectRaidsToJoin();
						},50);
					},true);

                    //RAIDS TAB CLICK EVENT LISTENER
                    SRDotDX.gui.cHTML('#lots_tab').ele().addEventListener("click", function(){setTimeout(SRDotDX.gui.selectRaidsToJoin,50)},true);

                    //FriendShare
                    SRDotDX.gui.refreshFriends();

					// Filtering tab
                    var i = 0, isChecked, raid, parentTableId = '', parentTable = '';
                    while (i < SRDotDX.raidArray.length) {
                        raid = SRDotDX.raids[SRDotDX.raidArray[i]];
                        parentTableId = 'FPX_options_cbs_' + raid.id;
                        parentTable = SRDotDX.gui.cHTML('tr').set({id: parentTableId}).html(' \
								<td>' + raid.name + '</td> \
								<td><input type="checkbox" id="cb_filter_' + raid.id + '_0' + '"/><label for="cb_filter_' + raid.id + '_0' + '"></label></td> \
								<td><input type="checkbox" id="cb_filter_' + raid.id + '_1' + '"/><label for="cb_filter_' + raid.id + '_1' + '"></label></td> \
								<td><input type="checkbox" id="cb_filter_' + raid.id + '_2' + '"/><label for="cb_filter_' + raid.id + '_2' + '"></label></td> \
								<td><input type="checkbox" id="cb_filter_' + raid.id + '_3' + '"/><label for="cb_filter_' + raid.id + '_3' + '"></label></td> \
								<td><input type="checkbox" id="cb_filter_' + raid.id + '_all' + '"/><label for="cb_filter_' + raid.id + '_all' + '"></label></td>', false);

                        if (raid.stat == 'H') parentTable.attach('to','FPXRaidFilterWhatGuild');
                        else if (raid.stat == 'ESH') parentTable.attach('to','FPXRaidFilterWhatSpecial');
                        else if (raid.size > 1 && raid.size < 50) parentTable.attach('to','FPXRaidFilterWhatSmall');
                        else if (raid.size == 50) parentTable.attach('to','FPXRaidFilterWhatMedium');
                        else if (raid.size == 100) parentTable.attach('to','FPXRaidFilterWhatLarge');
                        else if (raid.size == 250) parentTable.attach('to','FPXRaidFilterWhatEpic');
                        else if (raid.size == 500) parentTable.attach('to','FPXRaidFilterWhatColossal');
                        else if (raid.size == 800) parentTable.attach('to','FPXRaidFilterWhatGigantic');

                        for (var j=0; j<4; j++) {
                            var cbId = "cb_filter_" + raid.id + '_' + j; isChecked = !SRDotDX.config.filters[raid.id][j];
                            cb = SRDotDX.gui.cHTML('#' + cbId); cb.ele().checked = isChecked;
                            cb.ele().addEventListener("click",function() {
                                var raidId = '', diffIndex = '', reg = /cb_filter_([0-9a-z_]+)_([0-9])/i;
                                var ele = SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML; i = reg.exec(this.id);
                                if (i != null) { raidId = i[1]; diffIndex = parseInt(i[2]) }
                                SRDotDX.config.setFilter(raidId,diffIndex,!this.checked);
                                reg = new RegExp('.DotDX_fltChat_'+raidId+'_'+diffIndex+', ','g');
                                if(SRDotDX.config.filterChatLinks) {
                                    if (!this.checked && !reg.test(ele)) ele = '.DotDX_fltChat_' + raidId + '_' + diffIndex + ', ' + ele;
                                    else if (this.checked) ele = ele.replace(reg,'');
                                }
                                reg = new RegExp('.DotDX_fltList_'+raidId+'_'+diffIndex+', ','g');
                                if(SRDotDX.config.filterRaidList) {
                                    if (!this.checked && !reg.test(ele)) ele = '.DotDX_fltList_' + raidId + '_' + diffIndex + ', ' + ele;
                                    else if (this.checked) ele = ele.replace(reg,'');
                                }
                                SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML = ele;

                                var cbAllId = "cb_filter_" + raidId + '_all';

                                var f1 = SRDotDX.config.filters[raidId][0];
                                var f2 = SRDotDX.config.filters[raidId][1];
                                var f3 = SRDotDX.config.filters[raidId][2];
                                var f4 = SRDotDX.config.filters[raidId][3];

                                if ((!f1 && !f2 && !f3 && !f4) || (f1 && f2 && f3 && f4)) { var cb = SRDotDX.gui.cHTML('#' + cbAllId); cb.ele().checked = this.checked }
                            },true);
                        }
                        var allCbId = "cb_filter_" + raid.id + "_all";
                        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]);
                        var cb = SRDotDX.gui.cHTML('#' + allCbId); cb.ele().checked = isChecked;
                        cb.on("click",function() {
                            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;
                            if (i != null) raidId = i[1];
                            while (j < 4) {
                                cbId = 'cb_filter_' + raidId + '_' + j; subcb = SRDotDX.gui.cHTML('#' + cbId);
                                subcb.ele().checked = this.checked; SRDotDX.config.filters[raidId][j] = !this.checked;
                                reg = new RegExp('.DotDX_fltChat_'+raidId+'_'+j+', ','g');
                                if(SRDotDX.config.filterChatLinks) {
                                    if (!this.checked && !reg.test(ele)) ele = '.DotDX_fltChat_' + raidId + '_' + j + ', ' + ele;
                                    else if (this.checked) ele = ele.replace(reg,'');
                                }
                                reg = new RegExp('.DotDX_fltList_'+raidId+'_'+j+', ','g');
                                if(SRDotDX.config.filterRaidList) {
                                    if (!this.checked && !reg.test(ele)) ele = '.DotDX_fltList_' + raidId + '_' + j + ', ' + ele;
                                    else if (this.checked) ele = ele.replace(reg,'');
                                }
                                SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML = ele; j++
                            }
                        },true); i++
                    }

                    var filterChatCb = SRDotDX.gui.cHTML('#SRDotDX_options_perRaidFilterLinks');
					filterChatCb.on("click", function() { SRDotDX.config.filterChatLinks = this.checked; SRDotDX.gui.toggleFiltering();},true).ele().checked = SRDotDX.config.filterChatLinks;

					var filterListCb = SRDotDX.gui.cHTML('#SRDotDX_options_perRaidFilterRaidList');
					filterListCb.on("click", function() { SRDotDX.config.filterRaidList = this.checked; SRDotDX.gui.toggleFiltering();},true).ele().checked = SRDotDX.config.filterRaidList;

					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');

                    //Chat buttons overlay div
                        document.getElementsByClassName('chat_message_window')[0].setAttribute('id','chat_message_window');
                        var hd = document.getElementById('chat_window_header').getElementsByClassName('room_name_container')[0].innerHTML;
                        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>';
                        //for (i=0; i<chatPane.length; i++) chatPane[i].style.height = '434px';
                    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');
                    //setTimeout(SRDotDX.gui.FPXFilterRaidListByName, 2500);
                    setTimeout(SRDotDX.gui.BeginDeletingExpiredUnvisitedRaids, 10000);
					//setTimeout(SRDotDX.purge, 20000);
                    SRDotDX.util.updateUser(true);
					console.log('[DotDX] DotDeXtension loading complete');
                    SRDotDX.gui.doStatusOutput('Loaded successfully', 2000, false);
                    setTimeout(SRDotDX.config.save, 2000);
				}
				else { setTimeout(SRDotDX.gui.load, 500)}
			},
            fsEleClick: function(e) {
                e = e || window.event;
                var el = e.target.id.split(':');
                if (el[0] == 'fs') {
                    SRDotDX.config.friendUsers[el[1]][el[2]] = e.target.checked;
                }
            },
            FPXraidLinkClick: function(id) {
                if(!SRDotDX.gui.joining) {
                    //SRDotDX.request.kongData = 'kongregate_username='+holodeck._active_user.username()+'&kongregate_user_id='+holodeck._active_user.id()+'&kongregate_game_auth_token='+holodeck._active_user.gameAuthToken();
                    SRDotDX.request.joinRaid(SRDotDX.config.raidList[id]);
                }
                else SRDotDX.gui.joinRaidList.push(SRDotDX.gui.GetRaid(id));
            },
			FPXLandButtonHandler: function (ele, name) {
                var x = name.charAt(name.length-1), sign = 1;
                if(name.charAt(3)!='p')sign=-1;
                document.FPXLandForm.elements["tf_"+x].value = parseInt(document.FPXLandForm.elements["tf_"+x].value, 10)+(10*sign);
                SRDotDX.gui.FPXLandUpdater();
            },
            FPXLandUpdater: function () {
                var owned = [0,0,0,0,0,0,0,0,0], els = document.FPXLandForm, i = 9;
                while (i--) owned[i] = parseInt(els.elements['tf_'+(i+1)].value,10);
                var ratio = FPX.LandCostRatio(owned), best = 0, cn; i = 9;
                while (i--) {
                    cn = document.getElementById('b_'+(i+1)).className;
					if (cn.indexOf('landpmbutton ') == -1) document.getElementById('b_'+(i+1)).className = cn.replace('landpmbuttonhigh','landpmbutton');
					//document.getElementById('b_'+(i+1)).prevClassName = 'landpmbutton';
                    if (ratio[i] > ratio[best]) best = i;
                }
				cn = document.getElementById('b_'+(best+1)).className;
                document.getElementById('b_'+(best+1)).className = cn.replace('landpmbutton','landpmbuttonhigh');
            },
            FPXLandButtonSave: function () {
                var els = document.FPXLandForm, i = 9;
                while (i--) SRDotDX.config.FPXLandOwnedCount[i] = els.elements['tf_'+(i+1)].value;
				SRDotDX.config.save(false);
                SRDotDX.gui.doStatusOutput('Land count saved!');
            },
			FPXraidListMouseDown: function(e) {
				e.preventDefault(); e.stopPropagation();
                var classtype = e.target.className, con; e = e || window.event;
				console.log("[SRDotDX] Clicked on el with class:" + classtype + ", mouse button:" + e.which);
				if (e.which == 1) {
                    switch (classtype) {
                        case 'dotdxRaidListDelete': SRDotDX.gui.deleteRaid(e.target.parentNode); break;
                        case 'DotDX_RaidLink': SRDotDX.gui.FPXraidLinkClick(e.target.parentNode.getAttribute("raidid")); break;
                    }
				}
			},
            chatWindowContextMenu: function (e) {
                e = e || window.event;
                var clickedClass = e.target.className.split(" "), nick = "";
                console.log('[DotDX] Chat window menu [' + e.target.className + ']');
                        if (clickedClass[0] == 'username' && clickedClass[1] != 'spritesite') {
                            e.preventDefault(); e.stopPropagation();
                            nick = clickedClass[1];
                            var frTxt = 'Friend', size = '196px';
                            if (SRDotDX.config.friendUsers[nick]) frTxt = 'unFriend', size = '210px';
                            var uMenu = document.getElementById(clickedClass[clickedClass.length-1]);
                            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>';
                            uMenu.style.maxWidth = "220px";

                        }
                return false;
            },
            chatWindowMouseDown: function (e) {
                e = e || window.event;
                var clickedClass = e.target.className.split(" "), nick = "";
                console.log('[DotDX] Chat window (' + e.which + ') [' + e.target.className + ']');

                switch (clickedClass[0]) {
                    case 'username':
                        if (clickedClass[1] != 'spritesite') {
                            e.preventDefault(); e.stopPropagation();
                            nick = clickedClass[1];
                            if (e.which == 1) {
                                    console.log("[DotDX] Whisp to user with nick [" + nick + "]");
                                    holodeck.chatWindow().insertPrivateMessagePrefixFor(nick);
                            }
                        }
                        break;
                    case 'chatRaidLink':
                        if(e.which == 1) {
                            e.preventDefault(); e.stopPropagation();
                            var raid = clickedClass[1].split("|");
                            var rObj = {id:raid[0],hash:raid[1],boss:raid[2],diff:raid[3]};
                            if(!SRDotDX.gui.joining) {
                                //SRDotDX.request.kongData = 'kongregate_username='+holodeck._active_user.username()+'&kongregate_user_id='+holodeck._active_user.id()+'&kongregate_game_auth_token='+holodeck._active_user.gameAuthToken();
                                SRDotDX.request.joinRaid(rObj);
                            }
                            else SRDotDX.gui.joinRaidList.push(rObj);
                        }
                        break;
                    case 'dotdx_chat_button':
                        if(e.which == 1) {
                            switch(e.target.id) {
                                case 'dotdx_chat_join': SRDotDX.gui.joinSelectedRaids(true); break;
                                case 'dotdx_chat_import': SRDotDX.gui.importFromServer(); break;
                                case 'dotdx_chat_bot': SRDotDX.gui.switchBot(); break;
                                case 'dotdx_chat_reload': SRDotDX.reload(); break;
                            }
                        }
                        break;
                    case 'user':
                        if(e.which == 1) {
                            var classTokens = clickedClass[1].split("_");
                            switch(classTokens[1]) {
                                case 'slap':
                                    var num = Math.round((Math.random()*(SRDotDX.slapSentences.length-1)));
                                    SRDotDX.gui.FPXdoWork('*' + SRDotDX.slapSentences[num].replace(/<nick>/g,classTokens[2]) + '*');
                                    break;
                                case 'mute':
                                    SRDotDX.config.mutedUsers[classTokens[2]] = true;
                                    SRDotDX.config.save(false);
                                    break;
                                case 'friend':
                                    if (typeof SRDotDX.config.friendUsers[classTokens[2]] == 'object') delete SRDotDX.config.friendUsers[classTokens[2]];
                                    else SRDotDX.config.friendUsers[classTokens[2]] = [false,false,false,false,true];
                                    SRDotDX.config.save(false);
                                    SRDotDX.gui.refreshFriends();
                                    break;
                                case 'name':
                                    holodeck.showMiniProfile(classTokens[2]);
                                    break;
                            }
                            e.target.parentNode.style.maxWidth = "0";
                        }
                }
            },
			FPXraidLinkMouseDown: function (e,param1,param2,isChat) {
				e = e || window.event;
				if(isChat && e.which == 1) SRDotDX.gui.FPXraidLinkClick(param1);
			},
			raidListItemUpdateTimeSince: function(id) {
				var raid = SRDotDX.config.raidList[id];
				if (typeof raid == 'object') document.getElementById('timeSince_' + id).innerHTML = timeSince(new Date(raid.timeStamp))
			},
			raidListItemUpdate: function(id) {
				var raid = SRDotDX.config.raidList[id];
				if (typeof raid == 'object') {
					var ele = document.getElementById("raid_list").firstChild;
					while (ele) {
						if (ele.getAttribute("raidid") == id) { ele.getElementsByClassName("DotDX_RaidListVisited")[0].innerHTML = (raid.visited ? '&#9733;':''); break; }
						ele = ele.nextSibling;
					}
				}
				else SRDotDX.gui.raidListItemRemoveById(id);
			},
			raidListItemRemoveById: function (id) {
				var ele = document.getElementById('DotDX_' + id);
				if (ele) ele.parentNode.removeChild(ele);
			},
			toggleCSS: function (p) {
				if (p) {
					document.head.removeChild(document.getElementById(p.id));
					SRDotDX.gui.cHTML("style").set({type: "text/css", id: p.id}).text(p.cls).attach("to",document.head);
				}
			},
			toggleRaid: function(type,id,tog) {
				var d = document.getElementsByClassName("DotDX_raidId_" + id);
				if (typeof SRDotDX.config.raidList[id] == 'object') {
					var raid = SRDotDX.config.raidList[id];
					raid = SRDotDX.getRaidDetails("&kv_difficulty="+raid.diff+"&kv_hash="+raid.hash+"&kv_raid_boss="+raid.boss+"&kv_raid_id="+raid.id);
				}
                var i = d.length;
				while (i--) {
					if (tog && d[i].className.indexOf('DotDX_' + type + 'Raid') < 0) d[i].className += ' DotDX_' + type + 'Raid';
					else if (!tog && d[i].className.indexOf('DotDX_' + type + 'Raid') >= 0) d[i].className = d[i].className.replace(new RegExp('DotDX_' + type + 'Raid( |$)','i'),'');
					if (typeof raid == 'object') d[i].getElementsByTagName('a')[0].innerHTML = raid.linkText();
				}
            }
		},
		nukeRaid: function (id) { if (SRDotDX.config.raidList[id]) { SRDotDX.config.raidList[id].nuked = true; SRDotDX.gui.toggleRaid('nuked', id, true) } },
        searchPatterns: {
            z1:           ['kobold','scorp','ogre'],
            z2:           ['rhino','alice','lurker'],
            z3:           ['4ogre','squid','batman','drag','tainted'],
            z4:           ['bmane','3dawg','hydra','sircai','tyranthius'],
            z5:           ['ironclad','zombiehorde','stein','bogstench','nalagarst'],
            z6:           ['gunnar','nidhogg','kang','ulfrik','kalaxia'],
            z7:           ['maraak','erakka_sak','wexxa','guilbert','bellarius'],
            z8:           ['hargamesh','grimsly','rift','sisters','mardachus'],
            z9:           ['mesyra','nimrod','phaedra','tenebra','valanazes'],
            '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'],
            'z9.5':       ['pumpkin','jacksrevenge1'],
            z10:          ['krugnug','tomb_gargoyle','leonine_watcher','centurion_marius','caracalla'],
            z14:          ['zugen','gulkinari','verkiteia','cannibal_barbarians'],
            z15:          ['korxun','xerkara','shaar','nereidon','drulcharus'],
            farm:         ['maraak','erakka_sak','wexxa','guilbert','bellarius','drag','tainted','ogre','scorp','baroness'],
            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'],
            tower:        ['thaltherda','hurkus','malleus'],
            small:        ['kobold','rhino','bmane','4ogre','serpina','dragons_lair','gunnar','hargamesh','ironclad','krugnug','maraak','thaltherda','zugen','nereidon','mestr_rekkr_rematch'],
            medium:       ['alice','erakka_sak','grimsly','3dawg','scorp','nidhogg','tomb_gargoyle','squid','tisiphone','zombiehorde','baroness','hurkus','gulkinari','korxun','drunken_ragunt'],
            large:        ['ogre','batman','hydra','kang','leonine_watcher','lurker','rift','stein','wexxa','teremarthu','zralkthalat','malleus','verkiteia','drulcharus'],
            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'],
            colossal:     ['bellarius','caracalla','kalaxia','tyranthius','mardachus','nalagarst','tenebra','valanazes','siculus','ruzzik','cannibal_barbarians','vortex_abomination','xerkara','keron','clockwork_dragon','krxunara'],
            gigantic:     ['imryx','trekex'],
            glyph:        ['maraak','erakka_sak','wexxa','guilbert','bellarius'],
            citadel:      ['thaltherda','hurkus','malleus','yydians_sanctuary','clockwork_dragon','krxunara'],
            festival:     ['vortex_abomination','drunken_ragunt','mestr_rekkr_rematch'],
            aquatic:      ['dirthax','frogmen_assassins','lurker','nidhogg','crabshark','squid','thaltherda','nereidon','krxunara','trekex'],
            beastman:     ['bmane','burbata','frogmen_assassins','batman','war_boar','hargamesh','hurkus','krugnug','malleus','scorp','ruzzik','squid','korxun','shaar','nereidon','drulcharus','trekex'],
            bludheim:     ['gunnar','nidhogg','kang','ulfrik','kalaxia'],
            colosseum:    ['gladiators','serpina','crabshark','tisiphone','chimera'],
            construct:    ['cedric','erakka_sak','giantgolem','leonine_watcher','tomb_gargoyle','stein','yydians_sanctuary','clockwork_dragon'],
            demon:        ['apoc_demon','3dawg','tyranthius','lunacy','salome','sircai','blobmonster','malchar','zralkthalat','krxunara'],
            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'],
            human:        ['agony','rhino','gladiators','baroness','warewolfpack','alice','cannibal_barbarians','guilbert','gunnar','pumpkin','jacksrevenge1','lunacy','slaughterers','ulfrik','mestr_rekkr_rematch','rannveig'],
            magical:      ['djinn','grimsly','hargamesh','fairy_prince','rift','sisters','vortex_abomination','grundus'],
            ogre:         ['ogre','4ogre','felendis','zugen','korxun','drunken_ragunt'],
            qwiladrian:   ['gulkinari','teremarthu','vortex_abomination'],
            ryndor:       ['bmane','3dawg','hydra','sircai','tyranthius'],
            siege:        ['echidna','ulfrik','yydians_sanctuary','drunken_ragunt'],
            undead:       ['agony','bogstench','serpina','ironclad','malleus','nalagarst','stein','siculus','zombiehorde','caracalla','centurion_marius'],
            underground:  ['maraak','erakka_sak','wexxa','guilbert','bellarius','spider','tomb_gargoyle','leonine_watcher','centurion_marius','caracalla','dragons_lair','kang','3dawg','lurker','salome','stein','imryx']
        },
        shortcuts: {
            bb:     { n: 'bb',        bn: 'BB',       desc: 'Briseis\' Blessing [magic]' },
            bok:    { n: 'bok',       bn: 'BoK',      desc: 'Book of Knowledge [consumable]' },
            bsi:    { n: 'bsi',       bn: 'BSI',      desc: 'Battle Strength Index<br>(Base Attack + Base Defense) / Level' },
            ck:     { n: 'ck',        bn: 'CK',       desc: 'Chryseis\' Kiss [magic]' },
            dah:    { n: 'dah',       bn: 'Dah',      desc: 'Dahrizon [general]' },
            dl:     { n: 'dl',        bn: 'DL',       desc: 'Dragons Lair [raid]' },
            gg:     { n: 'gg',        bn: 'GG',       desc: 'Golden Garden [equip]'},
            gid:    { n: 'gid',       bn: 'GID',      desc: 'Greater Impending Doom [magic]' },
            gl:     { n: 'gl',        bn: 'GL',       desc: 'Greenleaf [equip]'},
            il:     { n: 'il',        bn: 'IL',       desc: 'Insanity Laughs [magic]' },
            lsi:    { n: 'lsi',       bn: 'LSI',      desc: 'Leveling Speed Index<br>(Base Stamina * 2 + Base Energy) / Level' },
            mach:   { n: 'mach',      bn: 'Mach',     desc: 'Machaon the Healer [general]' },
            nm:     { n: 'nm',        bn: 'NM',       desc: 'Nightmare [difficulty]' },
            pc:     { n: 'pc',        bn: 'PC',       desc: 'Planet Coins [currency]' },
            perc:   { n: 'perc',      bn: 'perc',     desc: 'Perception [stat]' },
            qm:     { n: 'qm',        bn: 'QM',       desc: 'Quicken Mind [magic]' },
            sock:   { n: 'sock',      bn: 'SoCK',     desc: 'Sword of Conquered Kingdoms [equip]' },
            sor:    { n: 'sor',       bn: 'SoR',      desc: 'Shield of Ryndor [equip]' },
            sp:     { n: 'sp',        bn: 'SP',       desc: 'Stat Points [stat]' },
            wr:     { n: 'wr',        bn: 'WR',       desc: 'World Raid [raid]' }
        },
        raids: {
			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]},
            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']},
            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]},
			spider:             {name: 'Arachna',                   shortname: 'Arachna',       id: 'spider',                   type: 'Underground',        stat: 'H', size:50,     nd:3, duration:144, health: [22000000,27500000,35200000,44000000,0,0]},
			rhino:              {name: 'Ataxes',                    shortname: 'Ataxes',        id: 'rhino',                    type: 'Human',              stat: 'S', size:10,     nd:2, duration:120, health: [2000000,2500000,3200000,4000000,0,0]},
			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]},
			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]},
			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]},
			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]},
			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]},
			bogstench:          {name: 'Bogstench',                 shortname: 'Bogstench',     id: 'bogstench',                type: 'Undead',             stat: 'S', size:250,    nd:5, duration:96, health: [450000000,562500000,720000000,900000000,0,0]},
			'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]},
			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]},
            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']},
            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']},
            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']},
            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']},
			harpy:              {name: 'Celeano',                   shortname: 'Celenao',       id: 'harpy',                    type: '',                   stat: 'H', size:10,     nd:2, duration:120, health: [3000000,3750000,4800000,6000000,0,0]},
			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']},
			kobold:             {name: 'Chieftain Horgrak',         shortname: 'Horgrak',       id: 'kobold',                   type: '',                   stat: 'S', size:10,     nd:2, duration:168, health: [150000,187500,240000,300000,0,0]},
			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']},
            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']},
			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]},
			basilisk:           {name: 'Deathglare',                shortname: 'Deathglare',    id: 'basilisk',                 type: '',                   stat: 'H', size:50,     nd:3, duration:144, health: [45000000,56250000,72000000,90000000,0,0]},
			dirthax:            {name: 'Dirthax',                   shortname: 'Dirthax',       id: 'dirthax',                  type: 'Aquatic',            stat: 'H', size:100,    nd:4, duration:168, health: [550000000,687500000,880000000,1100000000,0,0]},
			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']},
            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']},
            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']},
            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']},
			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]},
			giantgolem:         {name: 'Euphronios',                shortname: 'Euphronios',    id: 'giantgolem',               type: 'Construct',          stat: 'H', size:101,    nd:5, duration:168, health: [450000000,562500000,720000000,900000000,0,0]},
			echthros:           {name: 'Echthros',                  shortname: 'Echty',         id: 'echthros',                 type: '',                   stat: 'ESH', size:90000,nd:2, duration:96, health: ['Unlimited','Unlimited','Unlimited','Unlimited','Unlimited','Unlimited']},
			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]},
            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']},
            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]},
			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]},
            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']},
            dreadbloom:         {name: 'Giant Dreadbloom',          shortname: 'Dreadbloom',    id: 'dreadbloom',               type: '',                   stat: 'H', size:101,    nd:5, duration:192, health: [900000000,1125000000,1440000000,1800000000,0,0]},
			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]},
			evilgnome:          {name: 'Groblar Deathcap',          shortname: 'Groblar',       id: 'evilgnome',                type: '',                   stat: 'H', size:10,     nd:2, duration:120, health: [6000000,7500000,9600000,12000000,0,0]},
			grundus:            {name: 'Grundus',                   shortname: 'Grundus',       id: 'grundus',             type: 'Dragon, Magical Creature',stat: 'H', size:101,    nd:5, duration:72, health: [800000000,1600000000,4000000000,12000000000]},
            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]},
            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']},
            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]},
			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]},
			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]},
			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]},
			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']},
            hydra:              {name: 'Hydra',                     shortname: 'Hydra',         id: 'hydra',                    type: 'Ryndor',             stat: 'S', size:100,    nd:4, duration:72, health: [65000000,81250000,104000000,130000000,0,0]},
            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']},
            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
            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']},
			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']},
			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]},
			'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]},
            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']},
            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']},
			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']},
			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']},
			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']},
			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]},
			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']},
			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']},
            krykagrius:         {name: 'Krykagrius',                shortname: 'Kryk',          id: 'krykagrius',               type: 'Dragon',             stat: 'ESH', size:90000,nd:0, duration:72, health: ['Unlimited','Unlimited','Unlimited','Unlimited','Unlimited','Unlimited']},
			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']},
			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]},
			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]},
			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]},
            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']},
            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]},
			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]},
			scorp:              {name: 'Mazalu',                    shortname: 'Mazalu',        id: 'scorp',                    type: 'Beastman',           stat: 'S', size:50,     nd:3, duration:168, health: [5000000,6250000,8000000,10000000,0,0]},
            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']},
            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]},
			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]},
			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']},
            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]},
            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]},
            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']},
            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]},
			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]},
            roc:                {name: 'Ragetalon',                 shortname: 'Ragetalon',     id: 'roc',                      type: '',                   stat: 'H', size:100,    nd:4, duration:168, health: [110000000,137500000,176000000,220000000,0,0]},
            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']},
       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]},
			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']},
			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]},
            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']},
            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']},
            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]},
			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]},
			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']},
            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]},
            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]},
			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]},
			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]},
            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']},
            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]},
			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]},
            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']},
            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']},
			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']},
            chimera:            {name: 'Tetrarchos',                shortname: 'Tetrarchos',    id: 'chimera',                  type: 'Colosseum',          stat: 'H', size:50,     nd:3, duration:144, health: [90000000,112500000,144000000,180000000,0,0]},
			gorgon:             {name: 'Tithrasia',                 shortname: 'Tithrasia',     id: 'gorgon',                   type: '',                   stat: 'H', size:10,     nd:2, duration:120, health: [18000000,22500000,28800000,36000000,0,0]},
            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: ['u','u','u','u']},
            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']},
            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]},
			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]},
			blobmonster:        {name: 'Varlachleth',               shortname: 'Varlachleth',   id: 'blobmonster',              type: 'Demon',              stat: 'H', size:100,    nd:4, duration:168, health: [330000000,412500000,528000000,660000000,0,0]},
            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']},
            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']},
            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']},
            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]},
			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']},
			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']},
            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']},
            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']},
            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']},
            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']},
            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']},
            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]},
            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']}
		},

		raidSizes: {
			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
			13: { name: 'Small',    visible: 'Yes', pruneTimers: [1800,3600,7200]},  // 1h, 2h, 2h
			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
            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]},
            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]},
            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
			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
            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
			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
			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
            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
          90000:{ name: 'World',    visible: 'Yes', ratios: [0,0,0,0,0,0], pruneTimers: [86400,86400,86400]} // 24h, 48h, 72h
		},

        lootTiers: {
            u:      { tiers: ['Not yet known'], epics: [0], best: 0},
            imx:    { tiers: ['100.0m','200.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,26,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: 11, e: false},
            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 },
            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},
            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},
            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},
            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},
            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},
            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},
            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 },
            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 },
            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},
            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 },
            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},
            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},
            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 },
            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 },
            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 },
            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 },
            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 },
            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 },
            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 },
            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 },
            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 },
            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 },
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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},
            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 },
            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 }
        },
        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'},
        raidArray: [],
        camps: {
            bob:   {name: 'Bastion of Blood', time: [120,96], prefixes: 'Regenerating, Morphling, Vengeful, Chilling', numNodes: 6, nodes: ['bmp','gor','chi','zom','sic','bob'],
                    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'],
                    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]],
                    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]},
                    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]},
                    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]},
                    zom: {name: 'Zombie Horde', sname: 'Zom', 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]},
                    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]},
                    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]}},
            mam:   {name: 'Monsters and Magma', time: [120,96], prefixes: 'Regenerating, Vengeful, Chilling, Curse', numNodes: 7, nodes: ['wlp','tos','gol','ele','gmh','wrm','imx'],
                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'],
                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]],
                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]},
                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]},
                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]},
                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]},
                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]},
                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]},
                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]}},
            gd:   {name: 'The Grey Death', time: [120,96], prefixes: 'Regenerating, Vengeful, Chilling, Curse', numNodes: 6, nodes: ['crk','zrn','nun','tms','crn','hrt'],
                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'],
                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]],
                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]},
                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]},
                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]},
                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]},
                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]},
                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]}}
        },
        slapSentences: [
            'slaps <nick> in the face with a rotten old fish',
            'slaps <nick> around with a glove',
            'slaps <nick> around with an armoured glove',
            'hacks into <nick>\'s computer and slaps <nick> up side the head with a rubber chicken',
            'slaps <nick> around a bit with a wet noddle',
            'slaps <nick> about the head and shoulders with a rubber chicken',
            'slaps <nick>\'s face so hard, <nick> has to walk backwards from now on',
            'slaps some sense into <nick> with a red brick',
            'slaps <nick> with a herring',
            'slaps <nick> with a fire hose',
            'slaps <nick> with a huge law suit',
            'slaps <nick> with a great big, wet, 100% rubber duck',
            'slaps <nick> with a large dildo'
        ],
        reload: function() {
            SRDotDX.echo('Reloading, please wait...');
            activateGame();
            //SRDotDX.gui.cHTML('#gameiframe').ele().src = 'http://web1.dawnofthedragons.com/kong?' + SRDotDX.request.kongData;
        },
        fails: 0,
        load: function() {
            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' ) {
                ChatDialogue.prototype.sendInput = function () {
                    var a = this._input_node.value.match(/[\s\S]{1,240}(\s|$)/g);
                    var al = a.length-1, i;
                    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);
                    else for(i=0; i<=al; i++ ) this._holodeck.filterOutgoingMessage((i==0?'':'... ')+a[i]+(i==al?'':'...'), this._onInputFunction);
                    this._input_node.value = "";
                };
                ChatDialogue.prototype.SRDotDX_echo = function(msg){
                    var num = SRDotDX.gui.getChatNumber();
                    var pEle = document.getElementsByClassName('chat_message_window')[num].getElementsByTagName('p');
                    var lp = pEle.length-1;
                    if (lp >= 0 && pEle[lp].className == 'script') {
                        msg = pEle[lp].getElementsByTagName('span')[5].innerHTML + '<hr>' + msg;
                        pEle[lp].getElementsByTagName('span')[5].innerHTML = msg;
                        setTimeout(SRDotDX.gui.scrollChat,100,num);
                    }
                    else this.displayUnsanitizedMessage('DotDeXtension', '<br>' + msg, {class: 'script'}, {non_user: true});
                };
                ChatDialogue.prototype.SRDotDX_emote = function(msg){
                    var user = holodeck._active_user.chatUsername();
                    this.displayUnsanitizedMessage(user, '**' + user + ' ' + msg + '**', {class: 'emote'}, {});
                };
                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>');

                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)} };
                ChatDialogue.prototype.displayUnsanitizedMessage = function(usr, msg, cls, pfx) {
                    cls || (cls = {});
                    pfx || (pfx = {});
                    var active_room, allow_mutes = (active_room = this._holodeck.chatWindow().activeRoom()) && !active_room.canUserModerate(active_room.self()) || pfx.whisper;
                    if (!allow_mutes || !this._user_manager.isMuted(usr)) {
                        var normalMsg = true;
                        //var e = !pfx.non_user ? "chat_message_window_username" : "chat_message_window_undecorated_username",
                        var f = usr == this._user_manager.username(), h = [], rm = '';
                        var curTs = new Date().getTime().toString();
                        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') }
                        var e = [usr]; pfx = pfx['private'] ? 'To ' : '';
                        if (cls['class'] != 'script') this._messages_count % 2 && h.push("even"), this._messages_count++;
                        cls['class'] && h.push(cls['class']);
                        if ((!cls['class'] || cls['class'].indexOf('emote') == -1) && msg.charAt(0) == '*' && msg.charAt(2) != '*') {
                            var msgLen = msg.length;
                            if (msgLen > 5) { msg = '**' + usr + ' ' + (msg.charAt(msgLen-1) == '*' ? msg.slice(1,msgLen-1) : msg.slice(1,msgLen)) + '**'; h.push('emote'); }
                        }
                        var rUsr = h.join(' ').indexOf('sent_whisper') > -1 ? this._user_manager.username() : usr;
                        var raid = SRDotDX.getRaidLink(msg,rUsr);
                        if (raid) {
                            //normalMsg = false;
                            h.push('SRDotDX_raid');
                            h.push('DotDX_diff_' + raid.diff);
                            h.push('DotDX_raidId_'+raid.id);
                            if(raid.visited) h.push('DotDX_visitedRaid');
                            if(raid.nuked) h.push('DotDX_nukedRaid');
                            h.push('DotDX_fltChat_' + raid.boss + '_' + (raid.diff - 1));
                            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;
                            SRDotDX.gui.toggleRaid('visited',raid.id,raid.visited);
                            SRDotDX.gui.joining ? SRDotDX.gui.pushRaidToJoinQueue(raid.id) : SRDotDX.gui.selectRaidsToJoin('chat');
                        }
                        else {
                            var linkArr = msg.match(/(^.*?)(https?:\/\/([\w\d\._]+)[\/]?.*?(\s|$))(.*$)/i);
                            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];
                            //this._messages_count % 2 && h.push("even");
                        }
                        if(SRDotDX.config.mutedUsers[usr]) h.push('DotDX_nukedRaid');
                        if(SRDotDX.config.ignUsers[usr]) usr = SRDotDX.config.ignUsers[usr], e.push('ign');
                        var fCls = h.join(' ');
                        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;');
                        f && e.push('is_self');

                        usr = ChatDialogue.MESSAGE_TEMPLATE.evaluate({prefix: pfx, username: usr, message: msg, classNames: fCls, userClassNames: e.join(' '), timestamp: ts, room: rm, magId: curTs });
                        this.insert(usr);
                    }
                };
                ChatRoomGroup.prototype.buildRegularRoomNode = function(a){
                    var b = new Element("li", {"class": 0 === i % 2 ? "even room" : "odd room"});
                    b.room = a;
                    var c = (new Element("p",{"class": "name"})).update(a.name);
                    a.premium_only && (active_user.isPremium() || c.addClassName("upsell"), c.addClassName("premium_room_icon spritesite"));
                    b.insert(c);
                    b.insert((new Element("p", {"class": "user_count"+(a.joinable?"":" full")})).update(a.total_user_count));
                    b.insert(new Element("div", {style: "clear:both;"}));
                    return b
                };
                SRDotDX.util.updateUser = function(loading) {
                    if(loading || SRDotDX.config.kongUser == 'Guest') {
                        SRDotDX.config.kongUser = active_user.username();
                        SRDotDX.config.kongId = active_user.id();
                        SRDotDX.config.kongAuth = active_user.gameAuthToken();
                    }
                }
                SRDotDX.echo = function(msg) { holodeck.activeDialogue().SRDotDX_echo(msg) };
                SRDotDX.util.getRoomNumber = function() { return parseInt(holodeck._chat_window._active_room.name().match(/[0-9]{1,2}/)) };
                for (var i in SRDotDX.raids) SRDotDX.raidArray.push(i);
                holodeck.addDotdChatCommand("stop",function(deck,text){
                    if(SRDotDX.gui.isPosting)
                    {
                        SRDotDX.gui.FPXStopPosting();
                    }else{SRDotDX.echo('<b>/stop</b>: Links are not being posted. Stop command invalid.');}
                    return false;
                });
                holodeck.addDotdChatCommand("e",function (deck, text){
                    var s = text.slice(2);
                    if(s != "") holodeck.activeDialogue().SRDotDX_emote(s);
                    else SRDotDX.echo('<b>/e</b>: Empty message specified');
                    return false;
                }); //
                holodeck.addDotdChatCommand("kill",function (deck, text){
                    document.getElementById("gameiframe").src = "";
                    SRDotDX.echo('Game window killed, have a nice chatting.');
                    return false;
                });
                holodeck.addDotdChatCommand("update", function(deck,text) {
                    var d = "<font color='#990000'><b>"+SRDotDX.version.minor+"</b></font><br>";
                    d += '<b>Installed Version</b>: <font color="#990000">'+SRDotDX.version.major+'</font><br>';
                    d += 'You can check ';
                    d += '<a href="https://greasyfork.org/scripts/406-mutik-s-dotd-script" target="_blank">here (greasyfork)</a>';
                    d += ' to see if your version is most current and update if needed.';
                    SRDotDX.echo(d);
                    return false;
                });
                holodeck.addDotdChatCommand("help", function(deck,text) {
                    var d = "<b>Available chat commands:</b><br>";
                    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";
                    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>';
                    SRDotDX.echo(d);
                    return false;
                });
                holodeck.addDotdChatCommand("reload,relaod,rl,reloaf",function(deck,text){
                    SRDotDX.reload();
                    return false;
                });
                holodeck.addDotdChatCommand("mute",function (deck, text){
                    var s = String(text).split(" ");
                    if(s.length == 2 && s[1] != ""){
                        SRDotDX.config.mutedUsers[s[1]]=true;
                        SRDotDX.echo('User "' + s[1] + '" muted.  Use the /unmute command to undo, and the /mutelist to see all muted users.');
                        SRDotDX.config.save(false);
                    }else {
                        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>)-->');
                    }
                    return false;
                });
                holodeck.addDotdChatCommand("ign",function (deck, text){
                    var s = text.split(" ");
                    if(s.length == 3 && s[1] != "" && s[2] != "") {
                        SRDotDX.config.ignUsers[s[1]]=s[2];
                        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.');
                        SRDotDX.config.save(false);
                    }
                    else SRDotDX.echo('<b>/ign</b>: Invalid parameters specified. The proper syntax is "/ign [kong username] [in game name]".');
                    return false;
                });
                holodeck.addDotdChatCommand('unmute',function (deck, text) {
                    var s = String(text).split(' ');
                    if(s.length == 2 && s[1] != '') {
                        if(s[1] == 'all') {
                            for (var u in SRDotDX.config.mutedUsers) delete SRDotDX.config.mutedUsers[u];
                            SRDotDX.config.save(false);
                            SRDotDX.echo('All users unmuted.');
                        }
                        else if (SRDotDX.config.mutedUsers[s[1]]) {
                            delete SRDotDX.config.mutedUsers[s[1]];
                            SRDotDX.echo('User "' + s[1] + '" unmuted.');
                            SRDotDX.config.save(false);
                        }
                        else SRDotDX.echo('No muted user "' + s[1] + '" found.');
                    }
                    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.');
                    return false;
                });
                holodeck.addDotdChatCommand('unign',function (deck, text) {
                    var s = String(text).split(' ');
                    if(s.length == 2 && s[1] != '') {
                        if(s[1] == 'all') {
                            for (var u in SRDotDX.config.ignUsers) delete SRDotDX.config.ignUsers[u];
                            SRDotDX.config.save(false);
                            SRDotDX.echo('All users removed from IGN list.');
                        }
                        else if (SRDotDX.config.ignUsers[s[1]]) {
                            delete SRDotDX.config.ignUsers[s[1]];
                            SRDotDX.echo('Removed ' + s[1] + '\'s IGN.');
                            SRDotDX.config.save(false);
                        }
                        else SRDotDX.echo('No IGN of user "' + s[1] + '" found.');
                    }
                    else SRDotDX.echo('<b>/unign</b>: Invalid parameters specified. The proper syntax is "/unign [username]". "/unign all" can be used to clear IGN list.');
                    return false;
                });
                holodeck.addDotdChatCommand('mutelist', function (deck, text) {
                    var s = '<b>List of users currently muted:</b><br/>';
                    var i = 0;
                    for(var u in SRDotDX.config.mutedUsers) { s += u + '<br/>'; i++ }
                    if (i == 0) s = 'No users currently muted.<br/>';
                    s += '<br/>Use the /mute and /unmute commands to add or remove users on this list.';
                    SRDotDX.echo(s);
                    return false;
                });
                holodeck.addDotdChatCommand('ignlist', function (deck, text) {
                    var s = '<b>List of known users IGN:</b><br/>';
                    if (SRDotDX.config.ignUsers.length == 0) s = 'No users added to IGN list.<br/>';
                    else for (var u in SRDotDX.config.ignUsers) s += u + ':' + SRDotDX.config.ignUsers[u] + '<br/>';
                    s += '<br/>Use the /ign and /unign commands to add or remove users on this list.';
                    SRDotDX.echo(s);
                    return false;
                });
                holodeck.addDotdChatCommand('script', function(deck,text) {
                    SRDotDX.gui.FPXdoWork('Script link: https://greasyfork.org/scripts/406-mutik-s-dotd-script');
                    return false;
                });
                holodeck.addDotdChatCommand('clear',function(deck,text) {
                    holodeck.activeDialogue().clear();
                    return false
                });
                holodeck.addDotdChatCommand('wikil', function(deck,text) {
                    SRDotDX.gui.FPXdoWork('http://dotd.wikia.com/wiki/Dawn_of_the_Dragons_Wiki');
                    return false;
                });
                holodeck.addDotdChatCommand('import,imp', function(deck,text) {
                    if (/^(\/imp+)/i.test(text)) {
                    SRDotDX.echo('Importing all raids from server');
                    SRDotDX.request.raids();
                    }
                    else SRDotDX.echo('FAIL! ;)');
                    return false;
                });
                holodeck.addDotdChatCommand('friend', function(deck,text) {
                    var s = String(text).split(" ");
                    if(s.length == 2 && s[1] != ""){
                        if (typeof SRDotDX.config.friendUsers[s[1]] != 'object') {
                            SRDotDX.config.friendUsers[s[1]] = [false,false,false,false,true];
                            SRDotDX.config.save(false);
                            SRDotDX.gui.refreshFriends();
                            SRDotDX.echo('Added ' + s[1] + ' to friends');
                        }
                    }
                    return false;
                });
                holodeck.addDotdChatCommand('unfriend', function(deck,text) {
                    var s = String(text).split(" ");
                    if(s[1] == 'all') {
                        for (var u in SRDotDX.config.friendUsers) delete SRDotDX.config.friendUsers[u];
                        SRDotDX.config.save(false);
                        SRDotDX.gui.refreshFriends();
                        SRDotDX.echo('All users removed from friend list.');
                    }
                    else if (SRDotDX.config.friendUsers[s[1]]) {
                            delete SRDotDX.config.friendUsers[s[1]];
                            SRDotDX.config.save(false);
                            SRDotDX.gui.refreshFriends();
                            SRDotDX.echo('Removed ' + s[1] + ' from friends');
                        }
                    else SRDotDX.echo('User "' + s[1] + '" not found on friend list.');
                    return false;
                });
                holodeck.addDotdChatCommand('fs', function(deck,text) {
                    var cmd = text.split(' ');
                    if (cmd[0] == '/fs' && cmd[1]) {
                        SRDotDX.echo('Posting raid to friends');
                        document.getElementById('DotDX_raidsToSpam').value = cmd[1];
                        SRDotDX.gui.spamRaidsToFriends();
                    }
                    else SRDotDX.echo('Wrong syntax. Usage: /fs <raid link>');
                    return false;
                });
                holodeck.addDotdChatCommand('room', function(deck,text) {
                    var cmd = text.split(' ');
                    if (cmd[0] == '/room' && cmd[1]) {
                        SRDotDX.gui.gotoRoom(cmd[1]);
                    }
                    else SRDotDX.gui.gotoRoom(0);
                    return false;
                });
                holodeck.addDotdChatCommand('ijoin,join', function(deck,text) {
                    var mode = text.charAt(1) == 'j', joinStr = '';
                    if (mode) joinStr = text.slice(6), SRDotDX.gui.quickImportAndJoin(joinStr);
                    else joinStr = text.slice(7), SRDotDX.gui.quickImportAndJoin(joinStr,true);
                    return false;
                });
                holodeck.addDotdChatCommand('wiki', function(deck,text) {
                    var p = /^\/wiki (.*?)$/i.exec(text);
                    if (p) {
                        window.open('http://dotd.wikia.com/wiki/Special:Search?search=' + p[1]);
                        SRDotDX.echo('Wiki search opened.');
                    }
                    else SRDotDX.echo('<b>/wiki</b>: Invalid parameters specified');
                    return false;
                });
                holodeck.addDotdChatCommand('guide,manual', function(deck,text) {
                        window.open('https://docs.google.com/document/d/14X0WhnJrISQbxdfQv_scJbG1sUyXdE2g4iMfHmLM0E0/edit');
                        SRDotDX.echo('Script guide opened in new tab/window.');
                    return false;
                });
                holodeck.addDotdChatCommand('slap', function(deck,text) {
                    var p = /^\/slap (.*?)$/i.exec(text);
                    if (p) {
                        var num = Math.round((Math.random()*(SRDotDX.slapSentences.length-1)));
                        SRDotDX.gui.FPXdoWork('*' + SRDotDX.slapSentences[num].replace(/<nick>/g,p[1]) + '*');
                    }
                    else SRDotDX.echo('<b>/slap</b>: Invalid parameters specified');
                    return false;
                });
                holodeck.addDotdChatCommand('sh', function(deck,text) {
                    var p = /^\/sh (.*?)$/i.exec(text);
                    if (p) {
                        var fnd1 = p[1].toLowerCase(), fnd2 = p[1].length, found = false, sho;
                        for (i in SRDotDX.shortcuts) {
                            if (SRDotDX.shortcuts.hasOwnProperty(i)) {
                                sho = SRDotDX.shortcuts[i];
                                if (sho.n.toLowerCase().indexOf(fnd1) > -1 && sho.n.length == fnd2) {
                                    SRDotDX.echo('<b>' + sho.bn + '</b>: ' + sho.desc);
                                    found = true;
                                }
                            }
                        }
                        if (!found) SRDotDX.echo('<b>/sh</b>: Shortcut not found in db');
                    }
                    else SRDotDX.echo('<b>/sh</b>: No parameters specified');
                    return false;
                });
                holodeck.addDotdChatCommand('perc', function(deck,text) {
                    var bok = text.indexOf('bok',4);
                    var cwp = text.indexOf('cwp',4);
                    var empty = text.length < 6;
                    var output = "";
                    if (bok >= 0 || empty) output = "<b>Book of Knowledge Perc. Tiers:</b><br>\
					1 – 3999: Brown/Grey<br>\
					4000 – 5999: Brown/Grey/Green<br>\
					6000 – 9999: Grey/Green<br>\
					10000 – 13999: Grey/Green/Blue<br>\
					14000 – 15999: Green/Blue<br>\
					16000 – 17999: Green/Blue/Purple<br>\
					18000 – 21999: Blue/Purple<br>\
					22000 – 23999: Blue/Purple/Orange<br>\
					24000 – 29999: Purple/Orange<br>\
					30000 - 32999: Orange<br>\
					33000 - 35999: Orange/Red (more orange)<br>\
					36000 - 49999: Orange/Red (more red)<br>\
					50000 - 69999: Orange/Red (even more red)<br>\
					70000+ : Red";
                    if (empty) output += "<br>\
					-------------------------------------------------<br>";
					if (cwp >= 0 || empty) output += "<b>Clockwork Parts Perc. Tiers:</b><br>\
					1-1999: 10x Perf. Clockwork Part<br>\
                    2000-3999: 25x Perf. Clockwork Part<br>\
                    4000-5999: 40x Perf. Clockwork Part<br>\
                    6000-7999: 55x Perf. Clockwork Part<br>\
                    8000-9999: 70x Perf. Clockwork Part<br>\
                    10000-11999: 85x Perf. Clockwork Part<br>\
                    12000-13999: 100x Perf. Clockwork Part<br>\
                    14000-15999: 115x Perf. Clockwork Part<br>\
                    16000-17999: 130x Perf. Clockwork Part<br>\
                    18000-19999: 145x Perf. Clockwork Part<br>\
                    20000-21999: 160x Perf. Clockwork Part<br>\
                    22000-23999: 175x Perf. Clockwork Part<br>\
                    24000-25999: 190x Perf. Clockwork Part<br>\
                    26000-27999: 205x Perf. Clockwork Part<br>\
                    28000-29999: 220x Perf. Clockwork Part<br>\
                    30000-31999: 235x Perf. Clockwork Part<br>\
                    32000-33999: ???x Perf. Clockwork Part<br>\
                    34000-35999: ???x Perf. Clockwork Part<br>\
                    36000+ : 260x Perf. Clockwork Part";
                    SRDotDX.echo(output);
                    return false;
                });
                holodeck.addDotdChatCommand('citadel', function(deck,text) {
                SRDotDX.echo("Barrack Book = Grune N Quest<br>\
                Barrack Scroll 1 = Hydra NM Raid<br>\
                Barrack Scroll 2 = Research Library book<br>\
                Barrack Scroll 3<br>\
                Armorsmith Book = Lurking Horror N Quest<br>\
                Armorsmith Scroll 1 = Nalagarst NM Raid<br>\
                Armorsmith Scroll 2 = Research Library 1<br>\
                Armorsmith Scroll 3<br>\
                Weaponsmith Book = Erebus N Quest<br>\
                Weaponsmith Scroll 1 = Baroness NM Raid<br>\
                Weaponsmith Scroll 2 = Research Library 1<br>\
                Weaponsmith Scroll 3<br>\
                Alchemist Book = Nalagarst N Quest<br>\
                Alchemist Scroll 1 = Kalaxia N Quest<br>\
                Alchemist Scroll 2 = Research Library 5<br>\
                Alchemist Scroll 3<br>\
                Research Book = Bellarius N Quest<br>\
                Research Library Scroll 1 = Mardachus NM Raid<br>\
                Research Library Scroll 2 = Valanazes NM Raid<br>\
                Research Library Scroll 3 = Teremarthu NM Raid<br>\
                Research Library Scroll 4<br>\
                Research Library Scroll 5<br>\
                Pet Emporium Book = Not Available<br>\
                Pet Emporium 1 = Research Library 4<br>\
                Stable Book = Valanazes N Quest<br>\
                Stable Scroll 1 = Frog-men Assassins NM Raid<br>\
                Stable Scroll 2 = Research Library 2<br>\
                Stable Scroll 3<br>\
                Training Ground Book = Teremarthu N Quest<br>\
                Training Ground Scroll 1 = Research Library 3<br>\
                Training Ground Scroll 2");
                    return false;
                });
                holodeck.addDotdChatCommand('camp', function(deck,text) {
                    var p = text.split(' '), msg = '';
                    if (p[1] && SRDotDX.camps.hasOwnProperty(p[1].toLowerCase())) {
                        var camp = SRDotDX.camps[p[1].toLowerCase()];
                        msg += '<a class="title" target="_blank" href="http://dotd.wikia.com/wiki/' + camp.name.replace(/ /g,'_').replace(/'/g,"%27") + '_(Campaign)">' + camp.name + '</a>';
                        msg += '<br>Camp time: N ' + camp.time[0] + 'h, H '+ camp.time[1] +'h<br>Prefixes: ' + camp.prefixes;
                        msg += '<br><table class="camps"><thead><tr><th>Dmg</th><th>CU</th><th class="tb">RE</th>';
                        for(var i=0; i<camp.numNodes; i++) {
                            msg += '<th>' + camp[camp.nodes[i]].sname + '</th>';
                        }
                        msg += '</tr></thead><tbody>';
                        for (i = 0; i<camp.tiers.length; i++) {
                            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>';
                            for (var j=0; j<camp.numNodes; j++) msg += '<td' + (camp[camp.nodes[j]].tiers[i]?' class="mark"':'') + '></td>';
                        }
                        msg += '</tbody></table>';
                        var node;
                        for(i=0; i<camp.numNodes; i++) {
                            node = camp[camp.nodes[i]];
                            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) ;
                        }
                        SRDotDX.echo('*loading....*');
                        setTimeout( function(){
                            var chats = document.getElementsByClassName('chat_message_window');
                            for (i=1; i<chats.length; i++) {
                                var elem = chats[i].getElementsBySelector('span[name="SRDotDX_DotDeXtension"]');
                                if (typeof elem[elem.length-1] != 'undefined' && elem[elem.length-1].innerHTML.indexOf('loading....') > 0) {
                                    var ele = elem[elem.length-1];
                                    ele.innerHTML = ele.innerHTML.slice(0,-13) + msg;
                                    chats[i].scrollTop = chats[i].scrollHeight;
                                    break;
                                }
                            }
                        }, 100);
                    }
                    else SRDotDX.echo('No campaigns found matching "' + (p[1]?p[1]:'') + '". Valid values are: ' + Object.keys(SRDotDX.camps).join(', '));
                    return false;
                });
                holodeck.addDotdChatCommand('raid,rd', function(deck,text) {
                    //var p = /^\/raid (.*?)(?: ([1-6]))?$/i.exec(text);
                    var p = text.split(' ');
                    if (p[1]) {
                        var msg = '', n, i;
                        var diff = !isNaN(p[2]) ? p[2] - 1 : -1;
                        var fnd = p[1].toLowerCase();
                        for (i in SRDotDX.raids) {
                            if (SRDotDX.raids.hasOwnProperty(i)) {
                                var raid = SRDotDX.raids[i];
                                if (raid.name.toLowerCase().indexOf(fnd) > -1) {
                                    msg += '<a class="title" target="_blank" href="http://dotd.wikia.com/wiki/' + raid.name.replace(/ /g,'_').replace(/'/g,"%27") + '_(Raid)">' + raid.name + '</a>';
                                    msg += '<br>' + (raid.type == '' ? '' : raid.type + '<br>') + SRDotDX.raidSizes[raid.size].name + ' Raid (' + (raid.size == 101 ? 100 : raid.size) + ' slots) | ' + raid.duration + 'h';
                                    msg += '<br><table class="raids">';
                                    switch (diff) {
                                        case 0: msg += '<colgroup><col><col class="selected"><col><col><col></colgroup>'; break;
                                        case 1: msg += '<colgroup><col><col><col class="selected"><col><col></colgroup>'; break;
                                        case 2: msg += '<colgroup><col><col><col><col class="selected"><col></colgroup>'; break;
                                        case 3: msg += '<colgroup><col><col><col><col><col class="selected"></colgroup>'; break;
                                        default: msg += '<colgroup><col><col><col><col><col></colgroup>'; break;
                                    }
                                    var size = raid.size < 15 ? 10 : raid.size, fs = [], j = 4;
                                    while(j--) fs[j] = raid.health[j]/(raid.size == 101 ? 100 : raid.size);
                                    msg += '<thead> \
                                            <tr><th style="border:0; background-color: transparent;"></th><th>Normal</th><th>Hard</th><th>Legend</th><th>NMare</th></tr> \
                                        </thead> \
                                        <tbody> \
                                            <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> \
                                            <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> \
                                            <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>';
                                    if (typeof raid.lt != 'object' && raid.id != 'rhalmarius_the_despoiler' && raid.id != 'grundus') {
                                        var ratio = SRDotDX.raidSizes[size].ratios;
                                        var ename = SRDotDX.raidSizes[size].enames;
                                        for(j=0; j<ratio.length; j++) {
                                            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>';
                                        }
                                    }
                                    else if(typeof raid.lt == 'object') {
                                        var elen = SRDotDX.lootTiers[raid.lt[0]].tiers;
                                        var eleh = SRDotDX.lootTiers[raid.lt[1]].tiers;
                                        var elel = SRDotDX.lootTiers[raid.lt[2]].tiers;
                                        var elenm= SRDotDX.lootTiers[raid.lt[3]].tiers;
                                        var epics = SRDotDX.lootTiers[raid.lt[0]].epics;
                                        var best = SRDotDX.lootTiers[raid.lt[0]].best;
                                        var e = SRDotDX.lootTiers[raid.lt[0]].e?'E':'';
                                        for(j=0; j<epics.length; j++) {
                                            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>';
                                        }
                                    }
                                    msg += '</tbody></table>'
                                }
                            }
                        }
                        if (msg != '') {
                            SRDotDX.echo('*loading....*');
                            setTimeout( function(){
                                var chats = document.getElementsByClassName('chat_message_window');
                                for (i=1; i<chats.length; i++) {
                                var elem = chats[i].getElementsBySelector('span[name="SRDotDX_DotDeXtension"]');
                                    if (typeof elem[elem.length-1] != 'undefined' && elem[elem.length-1].innerHTML.indexOf('loading....') > 0) {
                                        var ele = elem[elem.length-1];
                                        ele.innerHTML = ele.innerHTML.slice(0,-13) + msg;
                                        chats[i].scrollTop = chats[i].scrollHeight;
                                        break;
                                    }
                                }
                            }, 100);
                        }
                        else SRDotDX.echo('No raids found matching: ' + p[1]);
                    }
                    else SRDotDX.echo('<b>/raid</b>: Invalid parameters specified (<a href="#" onclick="SRDotDX.gui.help(\'raid\')">help</a>)');
                    return false;
                });
                window.onbeforeunload = function() { SRDotDX.config.save(false) };
                SRDotDX.fails = 0;
                console.log('[DotDX] Core loaded. Loading user interface...');
                SRDotDX.gui.load();
                SRDotDX.request.init();
                setTimeout(function() { delete SRDotDX.load }, 100);
            }
            else if (++SRDotDX.fails < 20) {
                console.log('[DotDX] Missing needed Kong resources (try:' + SRDotDX.fails + '), retrying in 0.75 second...');
                setTimeout( SRDotDX.load, 750);
            }
            else {
                console.log('[DotDX] Unable to locate required Kong resources. Loading aborted');
                setTimeout(function() { delete SRDotDX }, 1);
            }
        }
	};
	console.log('[DotDX] Initialized. Checking for needed Kong resources ...');
	SRDotDX.load();
}
if (window.top == window.self && (/^http:\/\/www\.kongregate\.com\/games\/5thplanetgames\/dawn-of-the-dragons(?:\/?$|\?|#)/i.test(document.location.href))) { //main
    console.log('[DotDX] Initializing ...');
    document.addEventListener("dotd.req", function(param) {
        var p = JSON.parse(param.data);
        p.callback = function (e, r) {
            this.onload = null;
            this.onerror = null;
            this.ontimeout = null;
            this.event = e;
            this.status = r.status;
            this.responseText = r.responseText;
            //console.log('[DotDX] Callback: ' + JSON.stringify(this));
            var c = document.createEvent("MessageEvent");
            if (c.initMessageEvent) c.initMessageEvent(this.eventName, false, false, JSON.stringify(this), document.location.protocol + "//" + document.location.hostname, 1, unsafeWindow, null);
            else c = new MessageEvent(this.eventName, {"origin": document.location.protocol + "//" + document.location.hostname, "lastEventId": 1, "source": unsafeWindow, "data": JSON.stringify(this)});
            document.dispatchEvent(c);
        };
        p.onload = p.callback.bind(p, "load");
        p.onerror = p.callback.bind(p, "error");
        p.ontimeout = p.callback.bind(p, "timeout");
        setTimeout(function(){ GM_xmlhttpRequest(p) }, 1);
        //GM_xmlhttpRequest(p);
    });
    var scr = document.createElement('script');
    scr.appendChild(document.createTextNode('(' + main + ')()'));
    (document.head || document.body || document.documentElement).appendChild(scr);
}